なぜ危ないのか
source mapは`.js.map`や`.css.map`という拡張子のファイルで、ブラウザのDevToolsがミニファイ済みコードを元のソースコードに変換して表示するために使います。このファイルを本番環境や共有URLに一緒に配置すると、レビュアーがDevToolsを開いた瞬間に関数名・変数名・コメントなど開発時のコードがそのまま見えてしまいます。
特にAIが生成したHTMLの場合、ビルドツールの設定がデフォルトのままになっていることが多く、`//# sourceMappingURL=main.js.map`という行がスクリプト末尾に残りがちです。社外の相手がこの行を発見しても通常は意識しませんが、セキュリティ調査や競合調査を目的とした第三者には格好の情報源になります。
- 相手がログインなしで開ける状態か確認する
- PCとスマホで最低1回ずつ表示を確認する
- 内部情報・個人情報・不要な外部送信が残っていないか見る
- レビュー期限と修正時の差し替え方を決めておく
ソースで見る場所
共有するHTMLをテキストエディタで開き、`sourceMappingURL`という文字列をCtrl+Fで検索します。`<script>`タグのsrc属性で読み込んでいる外部JSファイルにも同様の注釈が含まれていることがあるため、参照先のJSファイルを個別に開いて末尾数行を確認してください。
CSSファイルも同様に`/* # sourceMappingURL=style.css.map */`というコメントが末尾に付いていることがあります。共有URLにアップロードするファイル一覧を`ls -la`などで確認し、`.map`拡張子のファイルがある場合は削除するか、Webサーバーの設定で404を返すように制限してください。
- HTML内の外部script・form action・iframeを確認する
- APIキーやトークンらしき文字列がないか検索する
- 画像・CSS・JSのパスが公開後も解決できるか見る
- noindexと認証を混同せず、必要なら両方設定する
安全に共有する設定
ギガサイト便のようなプレビュー共有サービスを使う場合、アップロードするZIPやフォルダから`.map`ファイルをあらかじめ除外しておくのが最も確実な方法です。WebpackならWebpackなら`devtool: false`、Viteなら`build.sourcemap: false`を設定してビルドし直すと、ビルド成果物に`.map`ファイルが生成されません。
どうしてもsource mapが必要な場合は、`hidden-source-map`オプション(Webpack)を使い、ファイル自体は存在させつつJSからの参照コメントを除去する方法があります。この設定では外部からURLを知らない限りmapファイルにアクセスできないため、レビュアーに見せる範囲に含まれるリスクが下がります。ただし、ファイル自体が同一ドメインに存在するため、URL推測による到達を完全には防げないことも覚えておいてください。
- HTML内の外部script・form action・iframeを確認する
- APIキーやトークンらしき文字列がないか検索する
- 画像・CSS・JSのパスが公開後も解決できるか見る
- noindexと認証を混同せず、必要なら両方設定する
再発防止ルール
レビュー依頼のプロセスをドキュメント化し、「社外共有前チェックリスト」の項目のひとつにsource map除外の確認を追加します。GitHubのPRテンプレートやNotionのチェックリストに組み込むと、担当者が変わっても手順が引き継がれます。
CIパイプラインを持つプロジェクトであれば、デプロイジョブの中でmap拡張子を持つファイルが出力ディレクトリに含まれているかをgrepで検査し、存在する場合はワーニングまたはエラーで止める仕組みを入れると機械的に防止できます。月に一度、共有済みURLに`.map`ファイルが残っていないかcurlで疎通確認するスケジュールタスクを設けることも有効です。
- HTML内の外部script・form action・iframeを確認する
- APIキーやトークンらしき文字列がないか検索する
- 画像・CSS・JSのパスが公開後も解決できるか見る
- noindexと認証を混同せず、必要なら両方設定する
よくある質問
source mapを削除するとデバッグが難しくなりますか?
共有用ビルドとローカル開発用ビルドを分けることで解決できます。ローカルでは`devtool: eval-source-map`のまま開発し、社外共有用には`devtool: false`でビルドする手順を分けるだけです。
`.map`ファイルが存在しなければsourceMappingURLのコメントは無害ですか?
コメントだけなら即座に内容は漏れませんが、ファイルが後から誤って追加されるリスクがあるため、コメント自体も除去しておくことを推奨します。ビルド設定で`devtool: false`にすれば両方まとめて消えます。
社外レビューをパスワード付きURLで行えば、source mapが残っていても問題ないですか?
パスワード保護はブラウザレベルの認証であり、一度認証した相手のDevToolsにはmap情報がそのまま表示されます。パスワードで保護しつつmapファイルも除去する二重対策が必要です。