Claude Codeソース流出事故から学ぶ — npmでsource mapを同梱しない5つの設定 | GH Media
URLがコピーされました

Claude Codeソース流出事故から学ぶ — npmでsource mapを同梱しない5つの設定

URLがコピーされました
Claude Codeソース流出事故から学ぶ — npmでsource mapを同梱しない5つの設定

AnthropicでさえやらかすSource Map事故

2026年4月7日、InfoQが「Anthropic Accidentally Exposes Claude Code Source via npm Source Map File」と題する記事を公開しました。AnthropicがnpmレジストリにリリースしたClaude Code CLIのバージョン2.1.88に、TypeScriptのソースマップファイル(.js.map)が同梱されており、これを辿ることで元のTypeScriptソース全体が復元できてしまったという内容です。

Claude Codeは世界中の開発者が使うAIコーディングエージェントで、そのソースコードはAnthropicにとって競合優位の源泉でもあります。それが意図しない形で流出したインパクトは小さくありません。

しかも、原因は高度なゼロデイ攻撃でも、内部犯でもありません。ビルド設定のうっかりミスです。つまり、どの開発チームでも明日起きうる事故ということ。本記事では、この事件から学ぶべき5つの具体的な設定チェックを整理します。

そもそもSource Mapとは何か

Source Mapの役割

Source Mapは、圧縮・トランスパイルされたJavaScriptと、元のTypeScript(あるいは元のJavaScript)を対応付けるファイルです。

ファイル内容
index.jsトランスパイル・minify後のコード
index.js.map元のソースとの対応表(元のコード含む)
index.ts元のTypeScript(通常は配布しない)

ブラウザDevToolsで「圧縮されたコードではなく元のTypeScriptをデバッグできる」のはSource Mapのおかげです。開発体験を大きく向上させる反面、配布してしまうと元コードが丸見えになるのが怖いところです。

Source Mapから何が復元できるのか

.js.mapファイルは、通常sourcesContentフィールドに元のソースコード全文を埋め込んでいます。つまり、.js.mapを1つ入手するだけで、該当のTypeScriptファイルをそのまま復元できます。

事故の経緯

何が起きたのか

InfoQの報道によると、事故の流れは以下の通りです。

  1. Anthropicがnpmに@anthropic/[email protected]を公開
  2. 公開パッケージに*.js.mapファイルが含まれていた
  3. 研究者がパッケージを展開し、.js.mapから元のTypeScriptソースを復元
  4. ソースコードの一部がGitHubで公開される
  5. Anthropicは直後のバージョンでsource mapを除外して再公開

短時間で対応したものの、一度公開されたアーティファクトは取り戻せないのがnpmの宿命。すでに復元版が出回った後でした。

なぜ見逃されたのか

Anthropicほどのセキュリティ文化を持つ組織でもこの事故は起きました。考えられる原因は以下の通りです。

  • ビルド設定でsourceMap: trueがデフォルトだった
  • .npmignoreでのマップファイル除外が漏れていた
  • package.jsonfilesフィールドで明示的に指定していなかった
  • CIパイプラインに公開前の差分チェックがなかった
  • リリースビルドと開発ビルドで設定が共通化されていた

つまり、チェックすべきレイヤーは1つではないということです。

Source Map誤同梱を防ぐ5つのチェックリスト

① tsconfig.jsonでプロダクションビルドを分離

開発用とリリース用のtsconfigを分け、リリース用ではsourceMapdeclarationMapを明示的にfalseにします。

// tsconfig.build.json(リリース用)
{
  "extends": "./tsconfig.json",
  "compilerOptions": {
    "sourceMap": false,
    "declarationMap": false,
    "inlineSourceMap": false,
    "inlineSources": false
  },
  "exclude": ["test", "**/*.test.ts"]
}

ビルドコマンドで明示的にこのファイルを指定します。

npx tsc -p tsconfig.build.json

② package.jsonのfilesフィールドでホワイトリスト方式に

.npmignoreのブラックリスト方式ではなく、package.jsonfilesフィールドでホワイトリスト方式にするのが鉄則です。

{
  "name": "your-package",
  "files": [
    "dist/**/*.js",
    "dist/**/*.d.ts",
    "README.md",
    "LICENSE"
  ]
}

ホワイトリストに*.js.mapを書かない限り、意図的に含めない限り同梱されません。

③ .npmignoreでダブルブロック

念のため、.npmignoreでもmapファイルを除外します。

# .npmignore
*.map
*.js.map
*.d.ts.map
src/
tsconfig*.json
*.test.ts

ホワイトリストとブラックリストの二段構えにすることで、ビルドツールの変更や設定漏れがあっても防御層が残ります。

④ 公開前ドライラン(npm pack)

リリース直前に、実際にパッケージに含まれるファイルを確認します。

# ドライラン(実際には公開しない)
npm pack --dry-run

# tarball化して中身を確認
npm pack
tar -tzf your-package-1.0.0.tgz | grep -E '\.map$'
# 何も出力されなければOK

CIパイプラインに組み込み、mapファイルが見つかったらビルドを失敗させるようにします。

# GitHub Actions例
- name: Check for source map files
  run: |
    npm pack --dry-run 2>&1 | grep -E '\.map$' && exit 1 || exit 0

⑤ npm publishの自動化パイプライン整備

手動でのnpm publishは人為ミスの温床です。リリース手順をGitHub Actions等で完全自動化し、以下のステップを必須にします。

  1. プロダクション用tsconfigでクリーンビルド
  2. npm pack --dry-runで同梱ファイル確認
  3. テストスイート実行
  4. セキュリティスキャン(依存関係・秘匿情報)
  5. タグ打ち → 自動publish

AIレビューを組み込むのも有効です。カウシェが実践するAIレビュー自動マージのような運用を参考に、セキュリティチェックの段階からAIを組み込むと、人為ミスを大幅に減らせます。

関連するセキュリティ観点

サプライチェーン攻撃との関連

npm配布物のセキュリティは、ソース流出だけでなく悪意あるコード混入の問題も抱えています。2026年はnpm・PyPI・RubyGemsへのサプライチェーン攻撃が急増しており、詳しくはSupply Chain攻撃2026で解説しています。

秘匿情報の配布事故

Source Mapに限らず、以下のようなファイルも絶対に配布してはいけないものとして意識すべきです。

ファイル種別リスク
.env, .env.localAPIキー流出
*.pem, *.key秘密鍵流出
test/fixtures/*.json個人情報テストデータ流出
.git/コミット履歴流出

package.jsonのホワイトリスト方式なら、これらも自然と除外されます。

まとめ

AnthropicのClaude Code source map流出事故は、どれだけセキュリティ意識が高い組織でも、ビルド設定1つの見落としで重大な事故になることを示す教訓事例です。

防御の要点は5つ。

  1. tsconfig.jsonでプロダクションビルドを分離しsourceMap: falseを明示
  2. package.jsonのfilesフィールドでホワイトリスト化
  3. .npmignore*.mapのダブルブロック
  4. npm pack --dry-runによる公開前ドライラン
  5. GitHub Actions等での完全自動化パイプライン

どれも数分〜数時間で導入できる設定ですが、全てを重ねるレイヤー防御が事故を止めます。Anthropicの事例を「他山の石」として、自社リポジトリの設定を今日のうちに点検しておくことをおすすめします。

AIコーディング全般のセキュリティ考察はWebセキュリティ基礎ガイドも併せてご確認ください。


参考ソース

URLがコピーされました

グリームハブ株式会社は、変化の激しい時代において、アイデアを形にし、人がもっと自由に、もっと創造的に生きられる世界を目指しています。

記事を書いた人
照屋 塁
照屋 塁

ITベンチャー創業の元社会人野球選手。変化の早い世の中の波に乗り、世の中に価値あるサービスを出していきたい!と思い会社を設立

関連記事