ビジネスユーザに利用してもらうために、コンテナで実行されるSkillを作成して、Claude Code PluginをMarketplaceで配布する

ビジネスユーザに利用してもらうために、コンテナで実行されるSkillを作成して、Claude Code PluginをMarketplaceで配布する

2026.01.12

今回は「ある画像処理」を題材にしてSkillを作成し、ビジネスユーザ(非エンジニア)にも利用しやすい形でClaude Codeの拡張機能を配布する手順を紹介します。

ポイントは2つです。

  • 作成したSkillをClaude Code Pluginとしてまとめ、Marketplace(カタログ)としてGitHubで配布
  • 実行環境をDockerコンテナとすることで、利用者側のインストール負担を最小化

画像処理の中身はあくまで題材で、肝は「Dockerで動くSkillを作り、それをPlugin→Marketplaceで配れる形にする」こととなります。

この記事でできること

  • 画像処理のSkillを、Dockerコンテナで実行できるよう作成する(利用者はPython等を入れなくてOK)
  • GitHubでMarketplaceとして公開し、作ったSkillをPluginとして配布できる形にする

用語整理(Skill / Plugin / Marketplace)

この記事では次の意味で用語を使っています。

  • Skill
    • Claudeが参照して実行する「作業手順+同梱ファイル(スクリプト等)」の単位
    • 典型的には SKILL.md を含むディレクトリが1つのSkillになる
  • Plugin
    • Claude Codeにインストールする配布単位
    • Skillだけでなく commands/agents/hooks/MCP などもまとめられる
  • Marketplace
    • Pluginをまとめるためのカタログで、Gitリポジトリに .claude-plugin/marketplace.json を置いて公開
    • Marketplace定義には複数のPluginを記載可能
    • 利用者が /plugin marketplace add ... で追加してさらにそこからpluginをinstallして使用

詳細は以下を参照ください。

実行環境

開発者、利用者ともに以下の環境で動作確認をしています。

  • PC: MacBook Pro (Apple M4, 16GB, Tahoe 26.2)
  • Claude Code: 2.1.3
  • コンテナ実行環境: Docker version 28.1.1-rd, build 4d7f01e (Rancher Desktop)

開発者編:Skillの作成

Skillにする題材

以下のような写真があります。(なお本写真は画像生成AIにより作成しました)

Pasted image 20260111162823

この写真の人物部分を切り出して、以下のようなプロフィール形式に変換するSkillを作成します。

origin_test_01_processed

準備

まずは作業ディレクトリを作成します。

mkdir -p sample-claude-plugin
cd sample-claude-plugin

ここに入力となる画像と正解とする画像を配置しておきます。

sample-claude-plugin
└── sample-image-files
    ├── after_sample_01.jpg
    ├── after_sample_02.jpg
    ├── origin_sample_01.jpg
    └── origin_sample_02.jpg

Claude Codeを起動します。

claude

Dockerで動くSkillを作る指示を出す

Skillを作成してもらいます。

以下の指示をClaude Codeに与えます。

> skillを作成したいです。

## 作成するskillの説明

作成するskillは以下の処理を実施します。

- 与えられた画像から人物を切り出す
- 背景を #e1e1e1 に塗り潰す
- 顔周辺が統一されたサイズになるようリサイズ(正解画像を参考に)
- 明るさを標準化します(正解画像を参考に)
- 顔の位置を調整します(正解画像を参考に)

参考としてサンプルの入力画像と、正解の処理結果の画像を与えます。

入出力としてはフォルダ単位、ファイル単位の双方に対応します。スキル実行前にユーザに確認を求めるようなスキルにします。

## skill実行環境について

ユーザに開発者向けのソフトウェアのインストールをさせるのを最小限にとどめるため、Dockerコンテナを実行環境とします。

必要なコンテナ実行環境がわかるように、Skill作成にDockerfileを作成し、ユーザ実行時はコンテナをビルドしてその中でPythonなどを実行しましょう。

もしユーザがコンテナ実行環境を持っていないように見える場合は、Rancher Desktopなどをユーザにインストールするよう促すskillにします。

こちらを実行するとSkillが概ね完成します。以下のようなフォルダ構成でファイルが作成されます

sample-claude-plugin
+ ├── profile-photo-processor
+ │   ├── Dockerfile
+ │   ├── process_photo.py
+ │   ├── requirements.txt
+ │   └── SKILL.md
  └── sample-image-files
      ├── after_sample_01.jpg
      ├── after_sample_02.jpg
      ├── origin_sample_01.jpg
      └── origin_sample_02.jpg

画像処理がうまくいかない部分は、処理結果の画像を見ながら細かく調整します。

今回は以下のような調整指示を出しました。

> 顔の部分が白すぎます、あと顔のサイズが小さすぎると思います。
> あと明るさの調整が明るすぎます。正解画像をチェックしてください。
> 背景切り出しが少し荒いようです。もう少し細かくしましょう。正解画像を確認してください。

この調整は題材に依存するため、やりたいことができた時点で次に進みます。

PluginをMarketplace定義に記述

最後に配布するためのPluginをMarketplaceに記述します。

以下の指示をClaude Codeに与えます。

> 作成したskillをpluginとして配布したいです。以下に従ってpluginにしてください。

- https://github.com/anthropics/skills

以下のように .claude-plugin/marketplace.json が記載された形となります。

sample-claude-plugin
+ ├── .claude-plugin
+ │   └── marketplace.json
  ├── profile-photo-processor
  │   ├── Dockerfile
  │   ├── process_photo.py
  │   ├── requirements.txt
  │   └── SKILL.md
  └── sample-image-files
      ├── .gitignore
      ├── after_sample_01.jpg
      ├── after_sample_02.jpg
      ├── origin_sample_01.jpg
      └── origin_sample_02.jpg

marketplace.json の内容は以下のようになっており、pluginとして公開するskillについて記載されます。

{
  "name": "profile-photo-skills",
  "owner": {
    "name": "Your Name",
    "email": "your-email@example.com"
  },
  "metadata": {
    "description": "Profile photo processing skills for standardizing profile photos",
    "version": "1.0.0"
  },
  "plugins": [
    {
      "name": "profile-photo-processor",
      "description": "Process profile photos: remove background, standardize face position/size, and apply gray background (#e1e1e1). Supports batch processing.",
      "source": "./",
      "strict": false,
      "skills": [
        "./profile-photo-processor"
      ]
    }
  ]
}

GitHubで公開

作成したMarketplace(リポジトリ)はGitHubでパブリックに公開しておきます。

今回の例では以下にpushしています。

利用者編:Skillの利用

ここからは利用者側の視点です。

利用者にもClaude Codeを触ってもらう想定なので、手順はそのまま載せます。

準備

作業用のディレクトリを作成します。

mkdir -p sample-use-profile-processor
cd sample-use-profile-processor

ここに入力となる画像のみを配置しておきます。

sample-use-profile-processor
├── origin_sample_01.jpg
└── origin_sample_02.jpg

Claude Codeを起動します。

claude

Marketplaceの追加

まずは以下のコマンドでpluginを追加します。

❯ /plugin marketplace add cm-nakamura-shogo/sample-claude-plugin 
  ⎿  Successfully added marketplace: profile-photo-skills

Pluginをインストールする

次にpluginからskillをインストールします。

❯ /plugin install profile-photo-processor@profile-photo-skills 
─────────────────────────────────────────
 Plugins  Discover   Installed   Marketplaces  (←/→ or tab to cycle)

 Plugin Details

 profile-photo-processor

 Process profile photos: remove background, standardize face position/size, and apply gray background (#e1e1e1). Supports batch processing.

 Will install:
 • Components will be discovered at installation

 ⚠Make sure you trust a plugin before installing, updating, or using it. Anthropic does not control what MCP servers, files, or other software are included in plugins and 
  cannot verify that they will work as intended or that they won't change. See each plugin's homepage for more information.

 > Install for you (user scope)
   Install for all collaborators on this repository (project scope)
   Install for you, in this repo only (local scope)
   Back to plugin list

  Enter to select · escape to back

そのままEnterを押します。

❯ /plugin install profile-photo-processor@profile-photo-skills 
  ⎿  ✓ Installed profile-photo-processor. Restart Claude Code to load new plugins.

リスタートが必要なため、一旦 /exit してから再度起動します。

> /exit
claude

インストールされたかどうか、 /skill コマンドで確認します。

/skills コマンドで一覧を確認します。

> /skills
─────────────────────────────────────────
Skills
14 skills

User skills (~/.claude/skills, ~/.claude/commands)

(省略)

Plugin skills (plugin)
profile-photo-processor • ~30 tokens

Skillを実行する

profile-photo-processor がインストールしたskillなのでそちらを実行します。

(最近のアップデートで、skillも直接 / で呼び出すことが可能となっています)

> /profile-photo-processor

以降はClaude Codeと対話しながら進めていきます。

⏺ Profile Photo Processor

  プロフィール写真を標準化するスキルを実行します。

  まず、Docker環境を確認させてください。

⏺ Bash(docker --version)
  ⎿  Docker version 28.1.1-rd, build 4d7f01e

⏺ Bash(docker ps 2>&1)
  ⎿ CONTAINER ID   IMAGE                        COMMAND                  CREATED        STATUS        PORTS     NAMES                                                              
    b7e1d41736f6   8f80de43fbfe                 "/entrypoint.sh --gl…"   19 hours ago   Up 19 hours
    k8s_traefik_traefik-c98fdf6fb-542s4_kube-system_c002d80d-4d8e-4b0a-b6
    b4-c1e18c7aaf72_14
    … +20 lines (ctrl+o to expand)

⏺ Docker環境が正常に動作しています(Rancher Desktop使用中)。

  処理を開始する前に、以下を教えてください:

  1. 入力ファイル/フォルダのパス - 処理したいプロフィール写真のパス
  2. 出力先のパス - 処理後の画像を保存する場所

  これらの情報をお知らせください。

❯ カレントパスが入力フォルダのパスです 

⏺ 2枚の画像ファイルが見つかりました。出力先を確認させてください。

─────────────────────────────────────────
 ☐ 出力先 

出力先のフォルダをどこにしますか?

❯ 1. 同じフォルダ内に output/ を作成
     ~/repo/myapp/sample-photo-profile/output/
  2. 同じフォルダに上書き
     元のファイルを処理後の画像で置き換えます
  3. Type something.

⏺ User answered Claude's questions:
  ⎿  · 出力先のフォルダをどこにしますか? → 同じフォルダ内に output/ を作成

⏺ 以下の内容でプロフィール写真を処理します:
  ┌──────────┬───────────────────────────────────────────────────────────────┐
  │   項目   │                             内容                              │
  ├──────────┼───────────────────────────────────────────────────────────────┤
  │ 入力     │ ~/repo/myapp/sample-photo-profile/        │
  ├──────────┼───────────────────────────────────────────────────────────────┤
  │ 出力     │ ~/repo/myapp/sample-photo-profile/output/ │
  ├──────────┼───────────────────────────────────────────────────────────────┤
  │ 処理対象 │ 2枚(origin_sample_01.jpg, origin_sample_02.jpg)             │
  └──────────┴───────────────────────────────────────────────────────────────┘
  処理内容:
  - 背景を #e1e1e1 に置換
  - 顔の位置・サイズを標準化
  - 出力サイズ: 2160 x 3840 px

  実行してよろしいですか?

❯ はい、お願いします。 

⏺ 処理を開始します。

⏺ Bash(mkdir -p ~/repo/myapp/sample-photo-profile/output)
  ⎿  (No content)

⏺ Bash(cd ~/.claude/plugins/cache/profile-photo-skills/profile-photo-processor/c47b58ca02c1/profile-photo-processor && docker build -t profile-phot…) timeout: 5m 0s
  ⎿  #0 building with "rancher-desktop" instance using docker driver             

     #1 [internal] load build definition from Dockerfile
     … +41 lines (ctrl+o to expand)
  ⎿  Shell cwd was reset to ~/repo/myapp/sample-photo-profile

⏺ Dockerイメージのビルドが完了しました。画像処理を実行します。

⏺ Bash(docker run --rm \                                                         timeout: 5m 0s
        -v "~/repo/myapp/sample-photo-profile:/input:ro" \…)
  ⎿  背景除去モデルを初期化中...  
     初期化完了
     … +9 lines (ctrl+o to expand)

⏺ 処理が完了しました。結果を確認します。

⏺ Bash(ls -la ~/repo/myapp/sample-photo-profile/output/)
  ⎿  total 3536                                                 
     drwxr-xr-x@ 4 nakamura.shogo  staff     128 Jan 11 17:35 .
     drwxr-xr-x  6 nakamura.shogo  staff     192 Jan 11 17:35 ..
     … +2 lines (ctrl+o to expand)

⏺ 処理が完了しました。

  結果
  ┌────────────────────────────────┬────────┐
  │            ファイル            │ サイズ │
  ├────────────────────────────────┼────────┤
  │ origin_sample_01_processed.jpg │ 879 KB │
  ├────────────────────────────────┼────────┤
  │ origin_sample_02_processed.jpg │ 929 KB │
  └────────────────────────────────┴────────┘
  出力先: ~/repo/myapp/sample-photo-profile/output/

  両方の画像で顔が正常に検出され、以下の処理が適用されました:
  - 背景を #e1e1e1(グレー)に置換
  - 顔の位置・サイズを標準化
  - 出力サイズ: 2160 x 3840 px

  出力フォルダの画像をご確認ください。

処理結果が以下のように保存されているはずです。

sample-use-profile-processor
├── origin_sample_01.jpg
├── origin_sample_02.jpg
└── output
    ├── origin_sample_01_processed.jpg
    └── origin_sample_02_processed.jpg

まとめ

いかがでしたでしょうか。今回作成したMarketplaceのpluginは実際にpublicに公開されているので、どなたでもお試しいただけます。

ただし注意点として、Pluginは任意のコード実行を含みうるため、信頼できる配布元のみを追加・インストールしてください。

本ブログがSkillなどを配布する際の参考になれば幸いです。

この記事をシェアする

FacebookHatena blogX

関連記事