Chrome拡張の権限を増やす前に見る設計メモ
Chrome拡張を作りたい時、最初に迷いやすいのはコードの書き方より「どの権限を入れるか」だ。動かすだけなら tabs、scripting、広い host_permissions を足せば近道に見える。けれど、権限が増えるほどインストール時の不安、審査時の説明、公開後の保守が重くなる。
この記事では、Chrome拡張の権限を増やす前に見る判断順を整理する。Manifest V3 の細かいAPI一覧ではなく、個人開発の初期設計で「本当にその権限が必要か」を確認するためのメモとして使える形にした。
2026年6月29日時点で確認した公式入口は、Chrome Extensions の権限ドキュメント、chrome.permissions API、Chrome Web Store のプログラムポリシーとプライバシー項目だ。この記事内では価格、ランキング、レビュー数のような変動情報は扱わない。

まず拡張の目的を1文に削る
権限を決める前に、拡張の目的を1文で書く。ここが曖昧なまま権限を増やすと、「便利そうだから入れる」が続き、あとから説明できない権限が残る。
例として、次の2つは似ているようで設計が違う。
| 目的の書き方 | 権限設計で起きること |
|---|---|
| 作業中のページで選択した文章を整える | クリック時だけ現在タブを見る設計を検討しやすい |
| いろいろなページを便利にする | 全URL、タブ情報、常時実行へ広がりやすい |
Chrome Web Store の品質ガイドラインでは、拡張は狭く分かりやすい単一目的であることが求められる。目的が広すぎると、権限も説明も広がる。最初の設計では、機能を足すより先に「この拡張は何をしないか」を決めるほうが安全だ。
権限は必須・任意・ホストに分ける
Manifest V3 では、権限をひとまとめに考えない。少なくとも次の3つに分けて見る。
| 種類 | 使いどころ | 増やす前の確認 |
|---|---|---|
permissions |
拡張の基本機能に必要なAPI | その機能なしで拡張の主目的が成り立つか |
optional_permissions |
ユーザーが有効化する追加機能 | 実行時に理由を説明してから求められるか |
host_permissions |
特定URLやサイトへのアクセス | URL範囲をもっと狭くできないか |
公式の chrome.permissions API は、任意権限をインストール時ではなく実行時に求めるための仕組みとして説明されている。ユーザーが機能を使う場面で理由を伝えられるので、最初から全部を要求するより納得されやすい。
広い https://*/* や <all_urls> を入れたくなったら、先に機能を分ける。最初の公開版は特定ドメインだけ、追加機能は任意権限、クリック時だけ必要な処理は activeTab で足りないかを見る。この順番にすると、審査時の説明も短くなる。
activeTab で足りる処理を広い権限にしない
ページへスクリプトを注入したい時、すぐに広いホスト権限を入れたくなる。けれど、ユーザーが拡張をクリックした時だけ現在のタブで処理するなら、activeTab と scripting の組み合わせで足りる場合がある。
Chrome の scripting API ドキュメントでは、スクリプト実行には scripting 権限に加えて、対象ページへの host permissions または activeTab を使う例が示されている。つまり、常に全ページへアクセスする設計にしなくても、ユーザー操作を起点にした一時的なアクセスへ寄せられる。
判断は次のように分ける。
- ユーザーがクリックした現在タブだけでよいなら
activeTabを検討する - 特定サイトで常に動く必要があるなら、そのサイトだけ host permissions にする
- 複数サイトに広げるなら、任意ホスト権限として実行時に追加できないか見る
- バックグラウンドで全ページを監視したいなら、なぜ必要かを1文で説明できる状態にする
「将来使うかもしれない」だけでは、広い権限を入れる理由になりにくい。権限はあとから足せるが、ユーザーの警戒感は最初のインストール画面で決まる。
よくある失敗は便利機能を先に足すこと
Chrome拡張の初期開発で失敗しやすいのは、公開前チェックより先に便利機能を増やすことだ。右クリックメニュー、全タブ取得、履歴参照、外部API連携、ページ注入を同時に入れると、何のための権限なのか説明が散らばる。
審査で見るのはコードだけではない。ストアの説明、プライバシー項目、権限の理由、ユーザー体験まで一続きで見られる。Chrome Web Store のプログラムポリシーは、拡張の全体験やマーケティング表示にも適用される。機能紹介だけ整えても、権限説明やデータ利用の説明が曖昧なら弱い。
避けたいのは、次のような状態だ。
- 主目的と関係ない権限が manifest に残っている
- 使っていない権限を「念のため」で入れている
- プライバシー項目に収集データと利用目的を書けない
- 外部送信するデータの範囲を説明できない
- 更新時に権限を増やす理由をユーザーに説明できない
初期版は、できることを増やすより、説明できない権限を減らすほうが通しやすい。
権限追加前の3ステップ
権限を増やしたくなったら、次の順で一度止める。
- その権限が支える機能を1文で書く
activeTab、任意権限、狭い host permissions で代替できないか見る- ストア説明とプライバシー項目に同じ理由を書けるか確認する
たとえば、ページ本文を読み取って整形する拡張なら、「クリックしたページの選択テキストだけを処理する」のか、「特定サイトの一覧ページを常時読む」のかで必要権限が変わる。前者なら現在タブ中心の設計、後者なら対象ドメインを絞った host permissions が候補になる。
ここで大事なのは、コード上の都合だけで決めないことだ。ユーザーが見た時に「その機能ならその権限は必要だ」と理解できるか。審査者が見た時に、単一目的と権限がつながっているか。公開後の自分が見た時に、なぜ入れたか思い出せるか。この3方向で説明できれば、権限設計はかなり安定する。
公開前チェックリスト
公開前は、manifest とストア入力を別々に見ず、同じ表で確認する。
| チェック項目 | 見る場所 | OKの目安 |
|---|---|---|
| 単一目的 | ストア説明、プライバシー項目 | 1文で機能の範囲が分かる |
| 必須権限 | manifest.json の permissions |
主機能に直結している |
| 任意権限 | optional_permissions / optional_host_permissions |
追加機能の利用時に求める設計になっている |
| ホスト権限 | host_permissions |
対象URLを必要最小限にしている |
| データ利用 | Privacy practices、プライバシーポリシー | 何を集め、何に使い、どこへ送るかを書ける |
| 手動テスト | ローカル読み込み、主要操作 | クラッシュ、壊れた導線、不要な警告がない |
Chrome Web Store のプライバシー入力では、拡張の目的、権限の理由、データの扱いを説明する必要がある。ここで書けない権限は、公開前に削るか任意化する候補にする。
FAQ
最初から tabs を入れておくべきですか?
現在タブでユーザー操作を起点に処理するだけなら、まず activeTab で足りるかを見たほうがいい。タブ情報を広く読む必要がある時だけ、何に使うかを明確にしてから検討する。
<all_urls> は使わないほうがいいですか?
絶対に禁止という話ではない。ただし、対象サイトを絞れるなら絞る。全URLが必要な機能なら、単一目的、ユーザーへの説明、データ利用の範囲を強くそろえる。
公開後に権限を増やしても大丈夫ですか?
増やすこと自体はできるが、ユーザーに追加の警告や確認が出る場合がある。更新で権限を増やすなら、なぜ必要になったか、どの機能に使うか、代替できないかを先に記録しておく。
まとめ
- 権限を決める前に拡張の目的を1文に削る
- 必須権限、任意権限、ホスト権限を分けて考える
- クリック時だけで足りる処理は
activeTabを検討する - 広い host permissions は、対象URLを狭められないか先に見る
- ストア説明とプライバシー項目に書けない権限は公開前に見直す
公式入口:
- Chrome Extensions: Declare permissions
- chrome.permissions API
- chrome.scripting API
- Chrome Web Store Program Policies
- Chrome Web Store: Fill out the privacy fields
今回の元になったテーマは、Kindle本『副業会社員のChrome拡張開発入門』にもまとめている。この記事では権限設計と公開前チェックに絞った。開発環境、Manifest V3 の構成、個人開発としての進め方、失敗例を順番に追いたい人には本の方が向いている。権限追加の判断だけなら、この記事のチェックリストで足りる。
※リンクには広告属性を付けています。価格、レビュー数、ランキングなどの変動情報は本文では扱いません。