ARTICLE

ソースコード納品前セキュリティ検品ガイド|機密情報除去・クレデンシャル漏洩防止・コードサニタイズの実践チェックリスト【2026年版】

2026/4/10

SHARE
ソー

ソースコード納品前セキュリティ検品ガイド|機密情報除去・クレデンシャル漏洩防止・コードサニタイズの実践チェックリスト【2026年版】

ARTICLE株式会社renue
renue

株式会社renue

2026/4/10 公開

AI導入・DXの悩みをプロに相談してみませんか?

AIやDXに関する悩みがありましたら、お気軽にrenueの無料相談をご利用ください。 renueのAI支援実績、コンサルティングの方針や進め方をご紹介します。

ソースコード納品前のセキュリティ検品とは?なぜ「grep一発」では不十分なのか

受託開発やPoC開発において、ソースコードをクライアントに納品する場面は頻繁に発生します。しかし、開発中のコードベースには社名、個人の開発環境パス、APIキー、データベース接続文字列、Azure/AWSリソース名、案件名など、本来クライアントに渡してはならない情報が散在しています。

2025年には、公開GitHubリポジトリだけで2,900万件の新しいハードコードされたシークレットが発見されており、前年比34%増という過去最大の増加を記録しました。2022年に確認されたシークレットの64%は、4年後の現在もなお悪用可能な状態で残っています。

本記事では、ソースコード納品前に実施すべきセキュリティ検品(コードサニタイズ)の手法を、実際の開発現場で使われるチェックリストと具体的な作業手順に基づいて解説します。

納品前に除去すべき7カテゴリの情報

ソースコード納品前のサニタイズで対象となる情報は、大きく7つのカテゴリに分類できます。

1. 企業固有情報(社名・組織名)

開発会社の社名がコードベース全体に散在しているケースは非常に多く見られます。

  • ロガー名logger = getLogger("mycompany.service")
  • docstring・コメント# Created by MyCompany Inc.
  • 環境変数テンプレート.env.example 内のサンプル値
  • Terraform変数名mycompany_vpn_ipclient_vpn_ip に変更

Terraform変数名のリネームは、tfstateへの影響を事前に確認する必要があります。.github/.tfvars、CI/CDからの-var参照がないことを確認してから実施します。

2. クレデンシャル・シークレット

  • APIキー:OpenAI、Anthropic、Azure等のAPIキー
  • データベース接続文字列DB_URL=mysql+pymysql://user:password@host:3306/db
  • デフォルトパスワード:docker-compose.ymlのフォールバック値(rootpassword等)
  • KeyVault名・リソース名:Azure KeyVaultの実名
  • Terraformのtfplanファイル:commit済みのtfplanにはクレデンシャルが含まれる場合がある

特に注意すべきは、commit済みのtfplanファイルです。実際の開発現場で、コミットされたtfplanファイルの中身を確認したところ、複数のクレデンシャルが含まれていたという事例が報告されています。

3. 個人開発環境パス

  • /Users/developer_name/Desktop/project/...
  • C:\Users\developer_name\Documents\...

これらは開発者の氏名を含む場合があり、個人情報保護の観点からも除去が必要です。

4. 案件固有情報(プロジェクトコード・クライアント名)

  • 変数名に含まれる案件名:toyota_failure_dataanalysis_data
  • コメント内の案件コード
  • テストデータに含まれる実企業名

5. インフラリソース名

  • Azure Resource Group名、ACR名
  • AWS S3バケット名、Lambda関数名
  • GCPプロジェクトID

6. 不要なAPI設定項目

  • コードから参照されていないAPI設定(例:PROMPTLAYER等の実験用サービス)
  • 開発時にのみ使用したデバッグ用エンドポイント設定

7. テスト・デバッグ用の残留コード

  • デバッグページの表示制御コード
  • テスト用ユーザー作成スクリプト
  • 開発用のseedデータ

3コミット構成のサニタイズ作業手順

効率的にサニタイズを進めるため、変更対象をレイヤー別に3つのコミットに分割します。レイヤーごとに分けることで、レビュー時に「この変更はどの層に影響するか」が明確になります。

コミット1:アプリケーションコード・環境変数テンプレート

最もリスクの高い層から着手します。

  • ロガー名の匿名化
  • auth設定のdocstringからの社名除去
  • .env.example内のデフォルト値をプレースホルダーに置換
  • docker-compose.ymlのデフォルトパスワードフォールバック値の削除

なぜフォールバック値を削除するか.env未設定時に弱いパスワードで起動できてしまう状態は、クライアント環境でのセキュリティリスクとなります。

コミット2:ドキュメント

  • docs/配下のサンプル値(メールアドレス、KeyVault名、FQDN、個人パス)をプレースホルダーに統一
  • README内の実環境URLをダミーに置換

コミット3:インフラ・スクリプト

  • terraform/内の変数名・リソース名から社名を除去
  • scripts/内のハードコードパスとフォールバック値をプレースホルダーに変更

grepベースの完了検証

サニタイズ作業の完了条件は、grepで残存がゼロ件になることです。以下のパターンを検索します。

検索対象grepパターン例許容される残存
社名grep -ri "mycompany" --include="*.{py,ts,yml,md,tf}"0件
案件名grep -ri "project_code_name"0件
個人パスgrep -ri "/Users/" --include="*.{py,ts,yml}"0件(ドキュメント内のプレースホルダーは除く)
デフォルトパスワードgrep -ri "rootpassword\|password123"0件
APIキー形式grep -rE "sk-[a-zA-Z0-9]{20,}\|AKIA[A-Z0-9]{16}"0件

スコープ外の判断基準

すべてのファイルをサニタイズ対象にすると、作業量が膨大になります。以下の判断基準でスコープを制御します。

スコープ外とすべきもの

  • data/配下の実データ:顧客の実データ(故障記録、機器リスト等)は匿名化ではなく「納品物から除外」で対応
  • ロックファイル内の案件名# viaコメントのみで動作に無関係。パッケージマネージャの再実行で自然に消える
  • デバッグページの除去:ページ定義の削除は機能変更を伴うため、別PRで対応

「変更はプレースホルダー置換のみ。ロジックには触れない」原則

サニタイズ作業では、ロジックの変更は一切行わないことが重要です。ロジック変更とサニタイズを同じコミットに混ぜると、レビューの負荷が跳ね上がり、デグレードのリスクも高まります。

シークレット検出ツールの活用

手動のgrepだけでは見落としが発生します。専用のシークレット検出ツールを併用することを推奨します。

主要ツール比較(2026年版)

ツール特徴検出精度用途
GitGuardian450以上の専用検出器、ML搭載の汎用検出85-95%CI/CD統合、リポジトリ全体スキャン
TruffleHogOSSで利用可能、Git履歴全体をスキャン中〜高コミット履歴のレトロスキャン
GitHub Secret ScanningGitHub標準搭載、プッシュ時に自動検出高(パートナーパターン)プッシュブロック、アラート
gitleaks軽量OSS、CIパイプライン組み込み容易pre-commitフック

Prevention-Firstアプローチ

先進的な組織は「検出→修正」ではなく「最初からシークレットを混入させない」Prevention-Firstアプローチを採用しています。このアプローチを採用した組織では、誤検知率5%以下を維持し、リーク率を70-90%削減しています。

具体的には以下を実装します。

  1. pre-commitフックでのスキャン:コミット前にローカルでシークレットを検出
  2. CI/CDパイプラインでのスキャン:PR作成時に自動検出し、マージをブロック
  3. シークレットマネージャーの標準化:HashiCorp Vault、AWS Secrets Manager、1Password CLIでシークレットを一元管理

Terraform変数リネームの安全な手順

インフラコードのサニタイズで最もリスクが高いのが、Terraform変数名の変更です。変数名を変えるとtfstateとの不整合が発生する可能性があります。

事前確認チェックリスト

  1. .tfvarsファイルの確認:変更する変数名が.tfvarsで参照されていないか
  2. CI/CDの確認-varフラグで外部から値を渡していないか
  3. GitHub Actionsの確認.github/workflows/内で変数名を参照していないか
  4. tfstateの確認:変数がリソース属性(resource name等)に使われている場合、リソースの再作成が発生する可能性がある

変数がローカル変数や設定値としてのみ使われている場合(例:VPN IPアドレスの変数名をmycompany_vpn_ipclient_vpn_ipに変更)、tfstateへの影響はありません。

docker-compose.ymlのサニタイズ

コンテナ化された開発環境では、docker-compose.ymlに機密情報が集中します。

よくある問題パターン

  • デフォルトパスワードのフォールバック${DB_PASSWORD:-rootpassword}.env未設定で弱いパスワードが使われる
  • ACR認証情報のハードコード:ACRのログイン情報がスクリプト内に直書き
  • ボリュームマウントのパス:開発者のローカルパスが残っている

推奨対応

  • フォールバック値を削除し、.env必須にする
  • .env.exampleにプレースホルダーと説明コメントを記載
  • ボリュームパスを相対パスに統一

AIエージェントを活用したサニタイズ効率化

AIコーディングエージェントを活用することで、サニタイズ作業を大幅に効率化できます。

AIに依頼する際のプロンプト設計

サニタイズ作業をAIに依頼する際は、以下の構造で指示します。

  1. スコープの明確化:対象ディレクトリ、除外対象を明示
  2. 「ロジックに触れない」制約の明記:プレースホルダー置換・削除・リネームのみ
  3. 完了条件の定義:grepで残存ゼロを完了条件として明示
  4. コミット分割の指示:レイヤー別(アプリ→ドキュメント→インフラ)に分割

業務をトレースし、各ステップの依存関係を理解してから自動化に取り組むことが重要です。「コードサニタイズを自動化」と言っても、どのファイルのどの情報を何に置換するかを事前に定義しなければ、漏れや誤置換が発生します。

AIエージェント活用の注意点

  • AIにコードを渡す際のリスク:AIサービスにソースコードを送信する行為自体が、機密情報の外部送信となる可能性がある。エンタープライズプランやオンプレミスLLMの利用を検討
  • AIの置換ミス:AIが文脈を誤解し、正常なコードまで書き換えるリスクがある。必ず差分レビューを実施

納品前セキュリティ検品チェックリスト

チェック項目確認方法完了基準
社名・組織名の除去grep -ri "社名"残存0件
案件名・プロジェクトコードの除去grep -ri "案件名"残存0件
個人開発環境パスの除去grep -ri "/Users/"残存0件
デフォルトパスワードの除去grep -ri "password" *.yml *.yamlフォールバック値0件
APIキー・トークンの除去シークレット検出ツール実行検出0件
tfplanファイルの除外git ls-files *.tfplan残存0件
インフラリソース名の匿名化grep -ri "リソース名パターン"残存0件
不要API設定の除去コード参照確認未使用設定0件
.env.exampleの整備プレースホルダー確認実値0件
テストデータの確認実企業名・実データ確認実データ0件
Git履歴の確認gitleaks / TruffleHog実行歴史的シークレット0件
ビルド確認yarn build / docker buildエラー0件

まとめ:サニタイズは「最後の作業」ではなく「プロセスに組み込む」

ソースコード納品前のセキュリティ検品は、プロジェクト終盤の「最後のタスク」として扱われがちですが、それでは漏れが生じます。理想的には、以下のようにプロセスに組み込みます。

  1. 開発開始時.env.exampleをプレースホルダーで作成、.gitignoreでシークレット系ファイルを除外
  2. 開発中:pre-commitフックでシークレット混入を防止、CI/CDでスキャン
  3. 納品前:本記事のチェックリストに基づくサニタイズ実施、レイヤー別コミット
  4. 納品後:commit済みのシークレットがあった場合は即座にローテーション

「後から消す」のではなく「最初から入れない」。Prevention-Firstの考え方を組織の開発文化に根付かせることが、長期的なセキュリティ向上の鍵です。

あわせて読みたい

AI活用のご相談はrenueへ

renueは553のAIツールを自社運用する「自社実証型」AIコンサルティングファームです。

→ AIコンサルティングの詳細を見る

関連記事

開発プロセスの改善はrenueにご相談ください

SHARE

AI導入・DXの悩みをプロに相談してみませんか?

AIやDXに関する悩みがありましたら、お気軽にrenueの無料相談をご利用ください。 renueのAI支援実績、コンサルティングの方針や進め方をご紹介します。

関連記事

AI導入・DXの悩みをプロに相談してみませんか?

AIやDXに関する悩みがありましたら、お気軽にrenueの無料相談をご利用ください。 renueのAI支援実績、コンサルティングの方針や進め方をご紹介します。

AI・DXの最新情報をお届け

renueの実践ノウハウ・最新記事・イベント情報を週1〜2通配信