自作の Chrome 拡張機能を、Chrome ウェブストアで公開しました。この記事では、拡張機能ができあがってからストアに並ぶまでに必要だったステップを、実際にやった順に備忘録としてまとめます。
ストアに入力する説明文やプライバシーの文面、ストア用の画像づくりは AI に大きく手伝ってもらったので、そのときの頼み方も各ステップに載せています。
本記事は 2026年11月時点の内容です。ストアの画面や決まりは変わることがあるので、Chrome ウェブストアの公式ドキュメントもあわせて確かめてください。
[ 参考 ] 公開した拡張機能
| 項目 | 内容 |
|---|---|
| 名前 | Window & Viewport Resizer(ウィンドウを指定サイズにしてスクリーンショットを撮る) |
| 作り | Manifest V3、Plasmo(React+TypeScript) |
| 言語 | 日本語・英語 |
| 使った AI | Claude(Sonnet・Opus)。ツールは Cline、のちに Claude Code |
| ソース | GitHub のリポジトリ(興味のある方は参考に) |
公開までの流れと、先に用意しておくもの
公開までのステップは次の7つ。1つ目だけが手元の PC での作業で、残りはすべて Chrome ウェブストアの「デベロッパー ダッシュボード」で行う。

途中で手が止まらないよう、先にそろえておくとよいものは次のとおり。
| 用意するもの | 使うステップ | 必須か |
|---|---|---|
| 拡張機能の ZIP | 1・3 | 必須 |
| Google アカウントと、登録料(5 ドル)を払うクレジットカード | 2 | 必須 |
| アイコン(128×128、PNG) | 1・5 | 必須 |
| 説明文(公開する言語の分) | 4 | 必須 |
| スクリーンショット(1280×800 または 640×400) | 5 | 1枚以上 |
| 小さいプロモーション タイル(440×280) | 5 | 任意(あるほうがよい) |
| 単一用途の説明・権限ごとの理由 | 6 | 必須 |
| プライバシーポリシーの URL | 6 | ユーザーのデータを集める場合だけ |
| サポート用の URL(GitHub の Issues など) | 4 | 任意 |
ステップ1:拡張機能を仕上げて ZIP にする
ストアには、拡張機能のファイルをまとめた ZIP をアップロードする。私は Plasmo を使っているので、次のコマンドで build/chrome-mv3-prod.zip ができる。
npm run build
npm run packageZIP を作ったら、アップロードする前に次の4つを確かめる(公式の「拡張機能を準備する」)。
- ZIP の中身で動くか。Chrome の
chrome://extensionsでデベロッパー モードをオンにし、「パッケージ化されていない拡張機能を読み込む」でビルドしたフォルダを読み込んで、すべての機能を試す。 manifest.jsonの中身は正しいか。name(ストアにも出る名前)・version・icons・description(132文字以下)を見る。これらはアップロードした後にダッシュボードでは直せず、直すにはバージョンを上げて ZIP を作り直すことになる。- ZIP の形は合っているか。
manifest.jsonがフォルダの中ではなく、ZIP のいちばん上にあること。manifest.jsonにコメントが入っていると「マニフェストを解析できません」と出るので消しておく。 - 権限は最小限か。いちばん大事なところなので、次で詳しく書く。
権限は最小限にしておく
拡張機能は、使う機能に応じて「権限」を manifest.json に書いておく必要がある。ダッシュボードのプライバシーの画面には、「拡張機能の単一用途に不要な権限はすべて削除してください。不要な権限をリクエストした場合、このバージョンは不承認となります」とはっきり書かれている。
私は実際にここでつまずいた。最初の版は、すべてのサイトにアクセスできる権限など、いくつかの広い権限を使っていた。10月3日にアップロードして審査に出したところ、「審査待ち」のまま審査が始まらない状態がしばらく続いた。Web で調べると数時間で審査が始まるという情報が多く、それより長く待っても変わらない。さらに調べたところ、求める権限によって審査にかかる時間が変わるという情報を見つけ、これが原因かもしれないと考えた。権限を整理して、なくても動くものを外し、10月4日にアップロードし直した。結果、翌日の10月5日に公開された。権限を減らしたことで審査が早くなったのかどうかは分からないが、不要な権限は不承認の理由にもなるので、外しておいて損はない。
どんな権限があり、どれが審査に影響するかは、記事の最後の「補足:主な権限と審査への影響」にまとめた。ZIP を作る前に、AI に一度見直してもらうとよい。
Chrome ウェブストアに公開する前に、権限を最小限にしたい。
コードを読んで、manifest の permissions と host_permissions がそれぞれ
どの機能で使われているかを一覧にしてください。
より狭い権限で置き換えられるものがあれば案を出し、
外した場合に動かなくなる機能があれば教えてください。ステップ2:開発者アカウントを登録する
Chrome ウェブストアのデベロッパー ダッシュボードを開き、Google アカウントでログインする。初めてのときは登録の画面が出るので、3つの規約とポリシーを確認して同意のチェックを入れ、「登録料の支払い」を押す。

登録料は 5 ドルで、1回払えば同じアカウントで何本でも公開できる。支払いは Google アカウントの支払い方法から行い、カードを登録していなければ「カードを追加」から入れる。

支払いの後に2段階認証などを求められることはなかった。ただ、私はもともと Google アカウントで2段階認証を使っていたので、使っていない場合は求められるかもしれない。
登録が済んだら、左のメニューの「設定」でアカウントの情報を入れる(公式の「アカウントを設定する」)。

- 投稿者の表示名(必須):ストアの掲載情報に表示される。
- 連絡先メールアドレス(必須):メールで届くリンクを押して確認する。このアドレスはアイテムとともにストアで公開されるので、公開しても困らないものにする。
- トレーダーの申告:EU の消費者保護法に関わるもので、「トレーダーのアカウント」か「非取引業者アカウント」を選ぶ。私は個人の趣味の公開なので「非取引業者アカウント」にした。
- 住所:必須なのは、アプリ内購入や定期購入があるアイテムだけ。無料の拡張機能なので入れていない。
その下にある Trusted Tester・サービス アカウント・組織での公開・メンバーは、一人で公開するならそのままでよい。通知の欄で「アイテムの審査が完了しました」などをオンにしておくと、審査の結果がメールで届く(私はオフのままだった)。最後に「変更を保存」を押す。
ステップ3:ZIP をアップロードする
左のメニューの「アイテム」を開き、右上の「新しいアイテム」を押す。ステップ1の ZIP を選んでアップロードすると、そのアイテムの画面に変わる。

ボタンの左にある「1/2 個の拡張機能の上限」のとおり、登録したばかりのアカウントで公開できる拡張機能は2本まで。
アイテムの画面では、左のメニューの「ビルド」にある項目を上から順に埋めていく。

- パッケージ:アップロードした ZIP の情報(バージョン・言語・権限)が表示される。
- ストアの掲載情報:ステップ4・5
- プライバシー:ステップ6
- 販売地域:ステップ7
入力の途中は、画面の右上の「下書きとして保存する」でこまめに保存する。足りない項目があると「審査のため送信」が押せないので、そのときは隣の「送信できない理由」を押すと、どこが足りないかが分かる。
ステップ4:ストアの掲載情報を入力する
「ストアの掲載情報」では、ストアのページに出る文章と画像、URL を入力する。画像はステップ5で作るので、先に文章の欄を埋めて保存しておく。

- 編集中の言語:多言語に対応しているなら、ここで言語を切り替えて、言語ごとに説明を入力する。
- パッケージのタイトル・概要:ZIP の
manifest.jsonのnameとdescriptionから自動で入り、ここでは直せない。 - 説明(必須、16,000文字まで):何ができるかのほかに、使えないページ(
chrome://のページなど)といった注意や、ベータ版であることも書いた。 - カテゴリ(必須):すべての言語で共通。私は「ツール」にした。
ページの下のほうの「追加フィールド」には URL を入れる。どれも任意。

- 公式 URL:Google Search Console で所有者として確認したサイトの中から選ぶ。自分のサイトのページを出したいときの方法は、記事の最後の「補足」に書いた。
- ホームページ URL:拡張機能の紹介ページなど。
- サポート URL:不具合の報告先。私は GitHub の Issues にした。
- 成人向けコンテンツ:当てはまらなければオフのまま。
貼り付けた説明文は、リポジトリにテキストファイルとしても残しておいた。次に更新するとき、前に何を書いたかがすぐ分かる。
Chrome ウェブストアに載せる説明文を、日本語と英語で同じ内容で作ってください。
コードと README を読んで、実際にある機能だけを書くこと(誇張しない)。
構成は【主な機能】【ご利用上の注意】【プライバシーと権限】にしてください。
注意には、使えないページや、表示がずれることがある条件を入れてください。
できたら store/description.ja.txt と description.en.txt に保存してください。ステップ5:ストアに載せる画像を作る
「ストアの掲載情報」の「画像アセット」に入れるものは次のとおり。必須なのは、アイコンとスクリーンショット1枚だけ。
| 項目 | 大きさ・形式 | 必須か | 私の場合 |
|---|---|---|---|
| ショップ アイコン | 128×128 | 必須 | 拡張機能のアイコンをそのまま |
| スクリーンショット | 1280×800 または 640×400、5枚まで | 1枚以上 | 1280×800 を5枚(全言語向け、英語) |
| プロモーション動画 | YouTube の動画の URL | 任意 | 載せていない |
| プロモーション タイル(小) | 440×280 | 任意 | 作った(英語) |
| マーキー プロモーション タイル | 1400×560 | 任意 | 作っていない |

気をつけたいのは次の2つ。
- 画像の形式は「JPEG または 24 ビット PNG(アルファなし)」。透過のある PNG は使えない。
- スクリーンショットとプロモーション動画には「ローカライズ版」と「全言語向け」の欄がある。言語ごとに変えたいならローカライズ版に入れる。私は全言語向けに英語のスクリーンショットを5枚入れた。プロモーション タイルは全言語向けの欄だけなので、英語で作った。
スクリーンショットは手で撮らず、AI にスクリプトを作ってもらった。ビルドした拡張機能をブラウザ(Playwright)で動かして撮影し、見出しと短い説明を付けて 1280×800 に書き出すもの。機能を足して見た目が変わっても、すぐに作り直せる。
Chrome ウェブストアのスクリーンショット(1280×800)を5枚作りたい。
ビルドした拡張機能を Playwright で読み込み、主な機能が分かる画面を撮影して、
それぞれに英語の見出しと短い説明を付けた画像に書き出すスクリプトを作ってください。
5枚それぞれで何を見せるかの案を、先に出してから進めてください。
形式は 24 ビット PNG(透過なし)にしてください。
小さいプロモーション タイル(440×280)も、ポップアップの画面とアイコンを使って作ってください。
ストアの画像は全言語で共通にするので、文字は英語でお願いします。画像を入れたら「下書きとして保存する」を押しておく。
ステップ6:プライバシーの欄を入力する
「プライバシー」は、審査で特に見られるところ。ここで入れた内容は Chrome ウェブストアのチームに共有され、データ使用の欄はアイテムのページで一般にも公開される。言語ごとの欄はないので、英語で書いた。

| 項目 | 書くこと | 私の場合 |
|---|---|---|
| 単一用途の説明(必須、1,000文字まで) | 拡張機能の目的を1つ、狭く分かりやすく | ウィンドウやビューポートを指定サイズにして、そのサイズでスクリーンショットを撮る |
| 権限が必要な理由(権限ごとに必須、1,000文字まで) | どの機能で、いつ、何に使うか | 4つの権限それぞれに、何をするか・何を送らないか |
| リモートコード | パッケージに含まれていない JS や Wasm を実行するか(外部の <script> の読み込みや eval() も当てはまる) | 「いいえ」 |
| データ使用 | 集めるユーザーデータの種類と、3つの宣言 | 種類はどれも選ばず、3つの宣言(第三者に売らない、など)にチェック |
| プライバシーポリシーの URL | ユーザーデータを集める場合に必要 | 何も集めないので空欄 |

権限の理由は、機能を足したときにも見直す。権限が増えていなくても、使い道が増えていれば理由を書き足した。
私は開発そのものを AI に任せていたので、「コードを読んで書いて」という短い指示で済んだ。拡張機能の仕様を知らない AI に頼む場合は、次のように前提の情報を埋めて渡すとよい。
Chrome ウェブストアの「プライバシー」に入力する内容を、英語で作ってください。
確認用に日本語訳も付けてください。
# 拡張機能について(【】を自分の拡張機能に合わせて書き換える)
- 何をする拡張機能か:【例:ウィンドウを指定サイズにして、スクリーンショットを撮る】
- 主な機能:【機能を箇条書きで】
- manifest の permissions:【例:activeTab, storage, downloads, scripting】
- 各権限をどの機能で、いつ使うか:【権限ごとに1行ずつ】
- 外部のサーバーに送るデータ:【例:なし】
- 外部から読み込んで実行するコード:【例:なし】
# 作ってほしいもの(それぞれ 1,000 文字以内)
1. 単一用途の説明(1〜2文)
2. 権限ごとの「必要な理由」(どの機能で、いつ、何をするか。何を送信しないか)
3. リモートコードを使っているかの答え
4. 「データ使用」でチェックすべき項目
上に書いた情報だけをもとにし、書かれていないことは推測で足さないでください。ステップ7:販売地域を選んで、審査に送信する
最後に「販売地域」で、料金と公開の範囲を選ぶ。

- 決済方法:無料なら「料金なし」。
- 公開設定:誰でも探せる「公開」、リンクを知っている人だけの「限定公開」、テスト用の「非公開」から選ぶ。私は「公開」にした。
- 販売地域:「すべての地域」のままにした。
左のメニューの「アクセス」にある「テスト手順」は、ログインなどが必要な拡張機能のために、審査用のアカウントや手順を伝える欄。ログインが要らないなら空欄でよい。
ここまで保存できたら、右上の「審査のため送信」を押す。確認画面では、審査が終わったらすぐに公開するか、自分で公開ボタンを押すまで待つかを選べる。待つほうを選んだ場合は、審査が終わってから30日以内に公開しないと下書きに戻る。
送信すると、アイテムの一覧のステータスが「審査待ち」になる。

審査は、公式にはたいてい数日で終わるとされている。私の場合は、ステップ1で書いたとおり、権限を整理してアップロードし直した翌日に公開された。最初のアップロードからは2日ほど。審査を通ると、ストアにページができる。

まとめ
Chrome 拡張機能をウェブストアで公開するまでのステップは、「ZIP を作る → 開発者登録 → アップロード → 掲載情報 → 画像 → プライバシー → 販売地域と送信」の7つです。いちばん気をつけたいのは、ZIP を作る前に権限を最小限にしておくことです。
コードを書くこと以外の作業も意外と多いのですが、説明文やプライバシーの文面、画像づくりは、コードを読める AI に頼むとかなり楽になります。ただし AI の答えには誤りが含まれることがあるので、ストアに入力する前に、内容が実際の動きと合っているかを必ず自分で確かめてください。
今回公開した拡張機能の使い方は、Window & Viewport Resizer の紹介ページにまとめています。ソースは GitHub で公開しているので、興味のある方は参考にしてください。
📣 ここから広告です(Amazonアソシエイト)
これから拡張機能を作って公開してみたい人向けに、AI と一緒に開発を進めるための本と、それを動かすノートパソコンを紹介します。
📚 ClaudeCode × Chrome拡張機能(自分専用のブラウザ便利ツールを10分で作る) Claude Code で Chrome 拡張機能を作る Kindle 本です。この記事はできあがった拡張機能を公開するところからなので、その前の「作る」ところから AI と進めたい人に。
📘 Claude Codeで作って学ぶ AI駆動アプリ開発入門 Claude Code を使ったアプリ開発の入門書です。この記事の「AI への頼み方」のように、開発や公開の準備を AI に任せる進め方を、基礎から押さえたい人に。
💻 Lenovo IdeaPad Slim 3(Ryzen 5 150・メモリ 16GB・15.3インチ) Claude Code のような AI は、考える重い処理をクラウド側で行うので、手元に高性能なデスクトップがなくても開発を進められます。拡張機能づくりからストアへの公開まで、こうしたノートパソコンで始めるのもありです。
ここのリンクから購入していただくと、筆者にちょっぴり紹介料が入ります。お値段は変わりません。いただいた紹介料は、ありがたく AI のサブスク代にあてさせていただきます。気になるものがあったら、ぜひのぞいてみてください!
※Amazonのアソシエイトとして、うしブロは適格販売により収入を得ています。
補足
ここからは、公開した後や、必要になったときに読めばいい内容。
主な権限と審査への影響
権限は manifest.json の次の場所に書く(権限を宣言する)。
permissions:使う API の権限(storage、tabsなど)host_permissions:アクセスするサイト(https://example.com/*、<all_urls>など)optional_permissions・optional_host_permissions:インストール時ではなく、使うときにユーザーに許可を求める権限
審査の公式ドキュメント(Chrome Web Store review process)では、次のものを求める拡張機能は審査が長くなることがあるとされている。
- 広いホスト権限:
*://*/*、https://*/*、<all_urls>のように、すべてのサイトにアクセスできる指定。ほかの権限と組み合わさると、ユーザーのウェブでの行動に広くアクセスできるため。 - 影響の大きい実行権限:
tabs・downloadsのようにそれだけで影響が大きいものと、cookies・webRequestのようにホスト権限と組み合わせると影響が大きくなるもの。 - コードが多い、または読みにくい(難読化は禁止)。
ストアのポリシー(Use of Permissions)でも、機能に必要な最も狭い権限だけを求めること、まだない機能のために先回りして権限を求めないことが決められている。
よく使う権限と、インストール時にユーザーに出る警告は次のとおり。警告が出る権限は、追加するとユーザーの許可が必要になり、更新で増やすと許可されるまで拡張機能が無効になる。警告の文は公式の英語を訳したもの。
| 権限 | できること | インストール時の警告 | 審査 |
|---|---|---|---|
activeTab | ユーザーが拡張機能を操作したタブに、一時的にアクセスする | なし | |
storage | 設定などを保存する | なし | |
scripting | ページにスクリプトを入れる | なし | |
contextMenus | 右クリックメニューに項目を足す | なし | |
alarms | 決まった時間に処理を動かす | なし | |
sidePanel | サイドパネルを使う | なし | |
downloads | ダウンロードを扱う | ダウンロードの管理 | 長くなりやすい |
tabs | すべてのタブの URL やタイトルを読む | 閲覧履歴の読み取り | 長くなりやすい |
cookies | Cookie を読み書きする | なし | ホスト権限と組み合わせると長くなりやすい |
webRequest | 通信を監視する | なし | ホスト権限と組み合わせると長くなりやすい |
declarativeNetRequest | 通信をブロック・書き換える | すべてのページのコンテンツのブロック | |
notifications | 通知を出す | 通知の表示 | |
bookmarks | ブックマークを読み書きする | ブックマークの読み取りと変更 | |
history | 閲覧履歴を読み書きする | ログインしているすべての端末の閲覧履歴の読み取りと変更 | |
clipboardRead | クリップボードを読む | コピーして貼り付けるデータの読み取り | |
clipboardWrite | クリップボードに書く | コピーして貼り付けるデータの変更 | |
geolocation | 位置情報を使う | 現在地の検出 | |
management | ほかの拡張機能を管理する | アプリ・拡張機能・テーマの管理 | |
debugger | デバッガーを使う | ページのデバッガーへのアクセス、すべてのサイトのデータの読み取りと変更 | |
host_permissions | 指定したサイトにアクセスする | <all_urls> など広い指定は長くなりやすい |
「審査」の列は、審査の公式ドキュメントに名前が出ているものだけ書いた。空欄でも、審査で使い道を確かめられることに変わりはない。すべての権限は公式の Permissions list に、警告の詳しい扱いは Permission warning guidelines にある(どちらも英語)。
審査について知っておくと安心なこと
- 審査は数週間かかることもある。3週間を超えて終わらないときは、サポートに問い合わせるよう案内されている。
- 審査が長くなりやすいのは、新しい開発者・新しい拡張機能・広い権限・大きなコードの変更。
- 更新の審査にも時間がかかる。機能を足した 0.2.1 は、アップロードからストアに出るまで1週間ほどかかった。
ストアの「公式 URL」を自分のサイトのページにする
公式 URL は、Google Search Console で所有者として確認したサイトの中から選ぶ形になっている。指定しないと、ストアのページには関連するリンクが出ない。ブログ全体(https://www.ushiblo.com)を選ぶと、トップページへのリンクになる。
拡張機能の紹介ページを出したかったので、サブドメインを用意することも考えた。しかし、紹介ページの URL そのものを、Search Console に「URL プレフィックス」のプロパティとして登録したら、そのページを選べるようになった。日英の紹介ページを両方登録し、英語のページを公式 URL にしている。
所有権の確認には、HTML の <head> に入れる確認用の meta タグを使った。このブログでは、テーマの Search Console の設定欄はサイト全体の確認ですでに使っていて、SEO プラグインの確認用タグはトップページにしか出ない。そこで子テーマに手を加え、紹介ページにだけ確認用のタグを出すようにした。
なお、「ホームページ URL」の欄に入れた URL は、2026年10月時点ではストアのページのどこにも表示されていなかった。
使った素材のライセンス
ほかの人が作ったアイコンやライブラリを使っているなら、ライセンスの条件を確かめておく。私はアイコンに Tabler Icons(MIT ライセンス)を使っているので、ライセンスの文書を配布用の ZIP に入れ、設定画面にもクレジットを書いた。
公開した後に見られる数字
アイテムの画面の左のメニューの「アナリティクス」で、インストール数・表示回数・ユーザー数(地域・言語・OS 別)・評価を見られる。「ストアの掲載情報」の「追加の指標」から Google アナリティクス(GA4)につなげば、もっと詳しく見ることもできる。
バージョンアップするときの作業
公開した後に機能を足したときは、次の順で作業している。
- バージョンを上げて ZIP を作り直し、中の
versionを確かめる(前の版より大きい番号でないと受け付けられない) - ストアで公開中のバージョンを見て、それ以降の変更を説明文(日英)に足す
- 見た目が変わったら、スクリーンショットやプロモーション タイルを作り直す
- 権限の使い道が増えていたら、プライバシーの欄を書き足す
- 「パッケージ」の「新しいパッケージをアップロード」から ZIP を入れ、「審査のため送信」を押す
この手順は、初めて更新したときに AI と一緒に進めながら、そのまま手順書にしてもらった。次からはその手順書を呼び出すだけで、同じ順番で進められる。
拡張機能の修正が済んだので、リリースの作業を進めたい。
1. アップロードする ZIP の確認
2. ストアの更新
- ZIP のアップロード
- 説明文の更新(日本語・英語)
- プロモーション用の画像の作成・更新
- ほかに変える必要がある箇所の確認
3. ブログの拡張機能の紹介ページの更新(変えるべき箇所の洗い出し)
次回からも同じ順番で進められるように、今回の作業の流れを手順書としてまとめてください。Claude Code(デスクトップアプリ)に頼んだもの(文面は読みやすく整えている)。作業が終わると、この順番と確認したことが、プロジェクトのスキル(呼び出せる手順書)としてまとめられた。拡張機能のフォルダを読み書きできる AI の環境(Cline、VS Code の Claude の拡張機能など)なら、同じように頼めるはず。



