luu-media (メディア保存)

画像や動画をCloudinaryにアップロードして公開リンクを即座に取得し、そのリンクを脳(ナレッジベース)に記録して後から検索可能にします。アップロード前に必要性の確認、重複チェック、個人情報漏洩リスクの検査を行います。

luu-media (メディア保存) とは?

このスキルは、ユーザーが提供した画像や動画をクラウドストレージ(Cloudinary)にアップロードし、公開アクセス可能なURLを生成します。また、そのURLをMarkdownテーブル形式のメディア目録ファイル(`kho-media.md`)に記録し、後から簡単に検索・再利用できるようにします。 主な機能は以下の通りです。 1. **必要性の確認**: ユーザーが本当にクラウドへアップロードする必要があるかを問い合わせます(例:ローカルのWeb画像フォルダを使うべき場合、一時的なスクリーンショットの場合など)。 2. **重複チェック**: 同じファイル名や目的のファイルがすでに登録されていないかを確認します。 3. **個人情報漏洩チェック**: 顔写真、個人名、電話番号、アカウント番号、身分証明書、プライベートメッセージなどが画像に含まれていないかを確認し、必要に応じてユーザーに注意を促します。 4. **フォルダ分類**: 用途に応じて適切なフォルダ(ブランド、製品、コンテンツ、エビデンス、イベント)にファイルを整理します。 5. **安全なアップロード**: APIキーやシークレットを直接表示せず、`.env`ファイルから読み取って署名付きリクエストを送信します。ESP(`overwrite=false`)を有効にして同名ファイルの上書きを防ぎます。 6. **ナレッジベースへの記録**: アップロード後、`kho-media.md`と関連するプロジェクトページのMediaセクションにリンクを追加します。 対応プラットフォームはAIエージェント(Claude Code、Cursor、Codexなど)で、Cloudinaryアカウントが必要です。このスキルは、画像や動画を繰り返し参照するコンテンツ制作、マーケティング、プロジェクト管理などのワークフローに最適です。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/locivan3win/skill-bo-nao/tree/HEAD/luu-media

Installed? Explore more 生産性&コラボレーション skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

メディア保存

ナレッジベースは知識とリンクを保存し、Cloudinaryは大きなファイルを保存します。保存のたびに、開けるリンクと kho-media.md の1行が生成されます。

優先順位: セッション内のユーザーの発言、次にナレッジベースのルールファイル、最後にこのスキル。

初回セットアップ(ナレッジベースに kho-media.md がまだない場合のみ実行)

  1. ユーザーがすでにCloudinaryアカウントを持っているか尋ねます。持っていない場合は、cloudinary.com にアクセスし、無料プランに登録し、API Keysセクションを開いてCloud name、API Key、API Secretを確認するよう指示します。

  2. コードはナレッジベースのルートにある .env ファイルに保存します。ナレッジベースに .env がまだない場合は、以下の3行で作成します。すでにある場合は、不足している行を追加し、他の行は変更しません。マシン上にこれらの3つのコードを含む別のファイルがすでにあり、ユーザーがそのファイルを使いたい場合は、.env の代わりにそのファイルパスを記録します。

    CLOUDINARY_CLOUD_NAME=
    CLOUDINARY_API_KEY=
    CLOUDINARY_API_SECRET=
    
  3. ナレッジベースがGitで管理されている場合、git check-ignore -q .env を実行します。無視されていない場合は、続行する前に .env を .gitignore に追加します。.env がすでにGitにコミットされている場合は、処理を停止してユーザーに通知します。

  4. .env を開き、ユーザーに指示します:Windows では notepad .env、Mac では open -e .env。ユーザーに 自分でコードを = の後に貼り付け、スペースや引用符を追加せず、保存するよう依頼します。チャット欄には貼り付けないでください。API Secretは金庫の鍵のようなものです。これを持つ人は誰でもすべての画像を削除または変更できます。

  5. ユーザーが完了したと報告したら、3行すべてに値が入っていることを確認しますが、値が入っているか空かのみ確認し、値自体は表示しません。

  6. このファイルの最後にあるテンプレートに従って kho-media.md を作成し、コードファイル名(コード値ではなく)を記録します。index.md に行を追加します。

  7. テスト用の画像を1枚提供してもらい、以下の手順を実行し、リンクを送信します。リンクが開ければセットアップ完了です。

保存手順

1. クラウドにアップロードする必要があるか

画像の使用場所を確認します(明確でない場合)。

  • 公開リンクが必要(ブログ記事、メール、ボット、ドキュメント、他のプラットフォームで構築したページ):続行。
  • Webサイトに専用の画像フォルダがあり、そこから画像を読み込んでいる場合:アップロードしないでください。2つのバージョンで不一致が生じるためです。代わりに、その画像フォルダにコピーし、適切な名前を付けることを提案します。ユーザーが同意した場合のみコピーします。ここで停止します。
  • ドラフト、テスト、一時的なスクリーンショット:ローカルに保持し、その理由を説明します。疑わしい場合は、「これはどのような目的で使用しますか?」と尋ねます。

2. 重複がないか

kho-media.md で名前と目的を検索します。すでに存在する場合は、既存のリンクを提供し、新しいバージョンをアップロードするかどうかをユーザーに尋ねます。ユーザーが単にリンクを探しているだけの場合は、ここで回答して停止します。

3. 個人情報が漏洩していないか

公開リンクは、リンクを知っている人なら誰でも閲覧でき、拡散された後は完全に回収するのが困難です。画像の内容を確認します。顧客の顔や名前、子供、電話番号、口座番号、身分証明書、プライベートメッセージなどが含まれている場合は、何が見つかったかを明確に伝え、ユーザーに本当にアップロードしてもよいか確認します。

4. フォルダに分類し、名前を付ける

フォルダ内容リンクの記録先
kho-media/thuong-hieuロゴ、ポートレート、カバー画像、ブランドアイデンティティブランドページまたはプロフィール
kho-media/san-pham/<ten-san-pham>製品画像、モックアップ、紹介動画その製品ページ
kho-media/noi-dung/<yyyy-MM>投稿画像、バナー、サムネイル、ショート動画コンテンツ計画ページ
kho-media/bang-chungフィードバック、ビフォーアフター、認証、メディア掲載関連製品ページ
kho-media/su-kien/<ten-su-kien>イベント画像、動画、クラスそのイベントページ

ファイル名とフォルダ名:アクセント記号なし、小文字、- で区切り、一目でわかるように。例:feedback-khach-lan-a。どのフォルダかわからない場合は、番号付きの2つの選択肢を含む1つの質問をします。複数のファイルがある場合は、名前とフォルダを一度に表で提示し、確認してから順次アップロードします。エラーのあるファイルは記録してから次のファイルに進みます。

5. アップロード

kho-media.md からコードファイル名を取得し、フルパスを使用します。コードファイルがGitで管理されているナレッジベース内にある場合は、事前に git check-ignore -q <コードファイルパス> を実行します。無視されていない場合は停止し、ユーザーに通知します。OSに合わせた正確なコマンドをコピーし、先頭の4つの値のみを置き換えます。コードを画面に表示したり、回答、ページ、他のファイルにコピーしたりしないでください。アップロードコマンドがパスにアクセント記号やスペースがあると失敗しやすいため、自動的にファイルを一時的なアクセント記号なしの名前にコピーします。

Windows (PowerShell):

$tep='<ファイルパス>'; $ngan='<フォルダ>'; $ten='<拡張子なしのファイル名>'; $fileMa='<コードファイルパス>'
$m=@{}; Get-Content -LiteralPath $fileMa | ForEach-Object { if($_ -match '^\s*(?:CLOUDINARY_)?(CLOUD_NAME|API_KEY|API_SECRET)\s*=\s*(.+?)\s*$'){ $m[$Matches[1]]=$Matches[2] } }
$ts=[DateTimeOffset]::UtcNow.ToUnixTimeSeconds()
$bam=[Security.Cryptography.SHA1]::Create().ComputeHash([Text.Encoding]::UTF8.GetBytes("folder=$ngan&overwrite=false&public_id=$ten&timestamp=$ts$($m.API_SECRET)"))
$ky=-join($bam | ForEach-Object { $_.ToString('x2') })
$tenTam="luu-media-$ts"+[IO.Path]::GetExtension($tep); Copy-Item -LiteralPath $tep -Destination (Join-Path $env:TEMP $tenTam)
Push-Location $env:TEMP
try { curl.exe -sS -X POST "https://api.cloudinary.com/v1_1/$($m.CLOUD_NAME)/auto/upload" -F "file=@$tenTam" -F "api_key=$($m.API_KEY)" -F "timestamp=$ts" -F "folder=$ngan" -F "overwrite=false" -F "public_id=$ten" -F "signature=$ky" }
finally { Remove-Item -LiteralPath $tenTam -ErrorAction SilentlyContinue; Pop-Location }

Mac、Linux (bash):

TEP='<ファイルパス>'; NGAN='<フォルダ>'; TEN='<拡張子なしのファイル名>'; FILE_MA='<コードファイルパス>'
lay() { sed -n -E "s/^[[:space:]]*(CLOUDINARY_)?$1[[:space:]]*=[[:space:]]*//p" "$FILE_MA" | tr -d '\r' | sed -E 's/[[:space:]]+$//' | head -n 1; }
TS=$(date +%s)
KY=$(printf '%s' "folder=$NGAN&overwrite=false&public_id=$TEN&timestamp=$TS$(lay API_SECRET)" | { if command -v shasum >/dev/null; then shasum -a 1; else sha1sum; fi; } | cut -d' ' -f1)
curl -sS -X POST "https://api.cloudinary.com/v1_1/$(lay CLOUD_NAME)/auto/upload" -F "file=@$TEP" -F "api_key=$(lay API_KEY)" -F "timestamp=$TS" -F "folder=$NGAN" -F "overwrite=false" -F "public_id=$TEN" -F "signature=$KY"

結果はJSONで返ります。secure_url を取得します。error がある場合は、エラー内容をそのまま報告して停止し、独自に式を書き換えないでください。ファイルが現在のプランに対して大きすぎる場合は、ユーザーに圧縮を依頼します。コマンドは overwrite=false を使用して同名ファイルを上書きしません。拡張子または返された内容が送信したファイルと異なる場合は、名前を変更してから再アップロードします。

6. 確認してナレッジベースに記録

  1. リンクを開いてみて、正常に応答が返るか確認します。
  2. kho-media.md に行を追加します。日時はマシンの時刻を使用します。
  3. フォルダ表の最終列に従い、関連ページの Media セクションにリンクを追加します。そのページがまだない場合は、kho-media.md にのみ記録し、その旨を報告します。

7. 報告

リンク、フォルダ、記録した2つのページを提示します。Webサイトや記事で使用する画像の場合は、次のセグメントを /upload/ の直後に挿入して高速配信バージョンも提供します:f_auto,q_auto,w_1200/。Cloudinaryが自動的にフォーマット、品質を選択し、幅を1200pxにリサイズします。

禁止事項

  • Cloudinary上のファイルを削除または変更しないでください。ユーザーがMedia Libraryで自分で行うか、個別にリクエストして確認を得た場合のみ行います。
  • 画像ファイルや動画ファイルをGitナレッジベースに保存しないでください。
  • コードは宣言されたコードファイルにのみ保存します。ページ、ログ、スキル、チャット欄に記述しないでください。ナレッジベースフォルダを他の人と共有する前に、ユーザーに .env を除外するよう注意してください。

kho-media.md のテンプレート

# メディア保存 - 目次

クラウドストレージ: Cloudinary。コードファイル: ナレッジベースルートの `.env`。GitHubにはアップロードしません。

| 日時 | ファイル名 | フォルダ | リンク | 使用先 |
|---|---|---|---|---|

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

関連スキル