TampermonkeyはWebページ上でユーザースクリプトを実行し、表示や操作を利用者側で変える拡張機能です。便利ですが、追加したスクリプトにはページ内容の読み取り、入力値の変更、外部通信を行える余地があります。最初にChromeウェブストアの正規ID「dhdgffkkebhmkfjojejmpbldmpobfkfo」から本体を入れ、配布スクリプトをいきなり追加せず、example.comだけを対象にした短い自作例で仕組みを確認します。
2026年時点のTampermonkey
2026年7月17日時点のChromeウェブストア表示はバージョン5.5.0、更新日は2026年5月9日です。ストアは公開者が掲載Webサイトの所有者であり推奨プラクティスに従うと表示する一方、プライバシー欄には位置情報とユーザーアクティビティを扱うとの申告があります。利用者数や評価だけで判断せず、組織の拡張機能ポリシー、データ分類、対象サイトの利用規約を確認します。
ChromeのManifest V3には、利用者が用意する任意コードを実行する拡張機能向けのuserScripts APIがあります。公式資料ではChrome 120以降のMV3で利用可能で、拡張機能側はuserScripts権限と対象サイトのhost_permissionsを宣言します。ChromeやTampermonkeyの版により、拡張機能詳細で追加許可を求める表示が出る場合があります。名称を推測して権限を広げず、現在の画面と管理者方針に従います。
安全なインストール
- Chromeを更新し、管理端末なら許可リストを管理者へ確認する。ポリシーによるブロックを回避しない。
- 正規ストアでID、開発者サイト、版、更新日、データ利用申告を確認する。
- Chromeに追加を選び、表示権限を読む。利用スクリプトの対象と権限範囲を照合する。
- ダッシュボードを開き、外部スクリプトを入れる前に設定、バックアップ、同期項目を確認する。
- 同期を使うならスクリプト内容が同期先へ保存されることを理解し、承認済みアカウントだけを使う。
最小の自作スクリプトで理解する
次の例はexample.comだけでページ上部へ案内枠を追加します。パスワード、Cookie、フォーム値、通信には触れません。「新規スクリプト」で既定内容を置き換えて保存し、https://example.com/を開いて確認します。業務ドメインへ変える前にサイト所有者の許可と目的を確認してください。
// ==UserScript==
// @name Example.com 動作確認
// @namespace https://example.com/
// @version 1.0.0
// @description 許可済み検証ページに案内枠を追加する
// @match https://example.com/*
// @grant none
// ==/UserScript==
(() => {
'use strict';
const note = document.createElement('div');
note.textContent = 'Tampermonkey の動作確認中';
note.style.cssText = 'padding:12px;border:2px solid #245;background:#eef;color:#123';
document.body.prepend(note);
})();
重要なのは@matchを必要なHTTPSホストとパスへ絞ることです。「*://*/*」の全サイト指定はメール、銀行、管理画面を含む広い閲覧データへ影響し得ます。@grant noneは特権APIを使わない例ですが、コードが安全だと保証する指定ではありません。外部コードを読む、入力値を送る、クリックを自動化する本体であれば別のリスクがあります。
配布スクリプトを入れる前のレビュー
- 配布元だけでなく表示されたコード全文、更新URL、外部読み込み先を確認する。短縮URLや難読化コードは採用しない。
- @match、@include、@excludeを読み、意図しないログイン画面や管理画面まで対象にしない。
- @require、@resource、fetch、XMLHttpRequest、GM_xmlhttpRequestなど外部通信と追加コード取得を調べる。
- 自動更新を前提に、更新前レビュー、版管理、変更履歴、ロールバック用エクスポートを決める。
- サイト利用規約、API規約、著作権、社内自動化ルールに反しないか確認する。
- 購入、送信、削除、承認など取り消しにくい操作を自動クリックしない。表示変更から始める。
ダッシュボードで管理する
スクリプト単位で停止する
問題が起きたらTampermonkey本体やChromeを削除する前に対象スクリプトだけをオフにし、ページを再読み込みします。複数スクリプトが同じページへ入る場合は一つずつ有効化して競合を特定します。スクリプト名、版、対象URL、更新日時を記録すると再現条件を説明できます。
更新を無条件で受け入れない
自動更新は修正を受け取れる一方、レビュー済みコードが変わる入口です。重要業務では検証用Chromeプロファイルで差分と動作を確認してから反映します。更新URLがHTTP、短縮URL、所有者不明リポジトリなら見送ります。古い版へ戻す場合も既知の脆弱性とサイト変更を理解し、長期固定しません。
バックアップと復元
エクスポート機能でスクリプトと必要設定を変更前に保存します。業務URL、内部ロジック、APIエンドポイントが含まれる場合があるため公開クラウドへ置きません。復元時は全スクリプトを無効で取り込み、対象と権限を再確認して一つずつ有効にします。同期停止だけで同期先の既存データが自動削除されるとは限りません。
動かないときの切り分け
対象件数が0のまま
現在URLが@matchと一致するか、httpとhttps、サブドメイン、末尾パスを確認します。Chrome内部ページ、ウェブストア、新しいタブなど挿入できないページもあります。スクリプトと本体が有効か、サイトアクセスがクリック時または特定サイトに制限されていないか確認し、全サイトへ広げる前に必要ホストだけ追加します。
ページ変更で壊れた
サイトのHTML構造、クラス、読み込みタイミングが変わると古いセレクターが一致しません。エラーを隠すため無限待機や高速ポーリングを足すとCPU負荷や誤操作を招きます。Consoleで自作コードのエラー位置を確認し、対象要素がなければ安全に終了する条件を入れます。公開APIがあれば画面操作より公式APIを優先します。
CSPや他の拡張機能と競合する
同じDOMを変える翻訳、パスワード管理、アクセシビリティ拡張と競合する場合があります。機密性の低い検証プロファイルでTampermonkeyと対象だけを有効にして比較します。Content Security Policyを無効にする拡張機能や起動オプションは使いません。CSPは攻撃コードを抑える防御であり、全体を弱める回避は問題を増やします。
停止・削除して戻す
- 問題ページを閉じ、ダッシュボードで対象スクリプトを無効にする。
- 新しいタブで開き直し表示と操作を確認する。サーバーへ送信済みの変更は無効化だけでは戻らない。
- 必要なレビュー済みバックアップを取り、不要なスクリプトを削除する。
- 本体が不要なら拡張機能管理でTampermonkeyを無効にして影響確認後に削除する。
- 同期先とダウンロード済みバックアップも保存ルールに沿って整理する。
業務利用の受け入れ条件
継続利用するなら、所有者、目的、対象URL、レビュー担当、更新周期、データ送信先、停止方法を台帳化します。管理画面の表示補助なら元データを変えないことをテストし、作業時間削減の自動化なら二重実行と途中失敗を検証します。サイト変更を検知できず誤操作する可能性を残したまま、承認や課金へ使いません。異動・退職時は個人同期アカウントに依存しない引き継ぎを用意します。
まとめ
Tampermonkeyの安全性は追加スクリプトの対象範囲とコードに左右されます。正規ストアから本体を導入し、最初はexample.com限定の表示変更で仕組みを理解します。業務利用では@match、外部通信、自動更新、同期先、取り消せない操作をレビューし、スクリプト単位で停止できる状態とバックアップを用意します。サイト防御や組織ポリシーを無効化して動かしません。
コードレビューの実務ポイント
レビューでは、DOMを書き換える場所だけでなく、実行タイミング、例外時の挙動、再実行時の重複も見ます。ページ遷移のないSPAでは同じ処理が何度も走り、ボタンやイベントリスナーが重複することがあります。追加要素へ一意のIDを付け、既に存在すれば終了する、処理対象が見つからなければ何も送信せず終了する、ログへ秘密情報を出さない、といった冪等性と失敗時安全を確認します。入力フォームへ値を入れる場合も送信は利用者が確認して行う設計を基本にします。
アカウントと秘密情報を扱わない設計
APIキー、パスワード、セッショントークンをユーザースクリプトへ直書きすると、エクスポート、同期、画面共有、更新時の差分から漏れる可能性があります。ブラウザーのlocalStorageへ平文で置く方法も保護にはなりません。認証が必要な自動化は、サイトが提供するOAuthやAPI、組織の秘密管理と監査が使える正式な仕組みを選びます。Tampermonkeyを使う場合は既にログイン済みの画面を表示補助する範囲へ限定し、認証回避、CAPTCHA回避、他人のアカウント操作へ使いません。

コメント