ARTICLE

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

2026/9/16 (更新: 2026/10/16)

SHARE

ソースコード納品前セキュリティ検品ガイド。機密情報除去・コードサニタイズの実践チェックリスト【2026年版】

ソー

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

ARTICLE株式会社renue
renue

株式会社renue

2026/9/16 公開2026/10/16 更新

renueについて

renueは、AIで業務を実装する会社です

AIコンサルティングから図面AI・広告運用エージェント・コールセンターAIまで、実際に動いているサービスをご覧いただけます。renueが何をしている会社か、まずはサービス一覧からご確認ください。

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

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

GitGuardianの2026年版調査によると、2025年の公開GitHubコミットから約2,900万件の新しいハードコードされたシークレット(2,865万件)が検出されました。前年比34%増で、同社の観測で最大の年間増加です。また、2022年に有効と確認したシークレットの同一データセットを2026年1月に再検査したところ、64%超が依然有効でした(2026年3月17日公表の原調査解説)。

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

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

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

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

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

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

Terraformの入力変数名のリネームでは、名前と参照先の変更、実際の設定値の変更、リソースアドレスの変更を区別して確認します。.github/、.tfvars、CI/CDからの-var参照箇所を洗い出し、変数名と一緒に更新してからplanの差分を確認します。

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にはクレデンシャルが含まれる場合がある。保存したplanには機密値が平文で残り得る(Terraform公式仕様)

特に注意すべきは、commit済みのtfplanファイルです。納品対象に含まれている場合は、資格情報などの機密情報が残っていないか確認します。これは点検対象を説明する例であり、特定の開発現場で漏えいが起きたとする報告ではありません。

3. 個人開発環境パス

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

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

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

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

5. インフラリソース名

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

6. 不要なAPI設定項目

  • コードから参照されていないAPI設定(検証を終えたサービスの設定など)
  • 開発時にのみ使用したデバッグ用エンドポイント設定

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

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

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

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

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

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

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

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

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

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

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

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

grepベースの完了検証

既知の文字列の確認では、公開・納品不可と決めた対象の残存がゼロ件になることを確認します。ゼロ件でも未指定のパターンやGit履歴の安全性は示せません。以下の検索例に、履歴スキャン・除外範囲の確認・差分レビューを組み合わせます(履歴を含む漏洩対応)。

検索対象grepパターン例許容される残存
社名grep -ri --include="*.py" --include="*.ts" --include="*.yml" --include="*.md" --include="*.tf" "mycompany" .0件
案件名grep -ri "project_code_name"0件
個人パスgrep -ri --include="*.py" --include="*.ts" --include="*.yml" "/Users/" .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を用いた汎用検出(公式説明)特定形式向けと汎用の検出器で誤検知の傾向が異なるCI/CD統合、リポジトリ全体スキャン
TruffleHogOSSで利用可能、Gitのコミット履歴をスキャン(公式リポジトリ)有効・未検証・検証エラーを区別。取得済み履歴や対象設定を確認コミット履歴のレトロスキャン
GitHub Secret ScanningSecret scanningでシークレットを検出。Push protectionはプッシュ時の混入防止機能公開/非公開・契約と有効化・対応パターンによるプッシュブロック、アラート
gitleaksOSS、CI・pre-commitへの組み込みに対応正規表現・エントロピー等の検出規則と除外設定を確認pre-commitフック

Prevention-Firstアプローチ

上表は同一条件の精度比較ではなく、検出方法と確認点の整理です。GitHubの公開リポジトリのSecret scanningは無料で自動実行され、組織の非公開・内部リポジトリは対象プランとSecret Protectionの有効化が必要です。Push protectionも利用形態と設定で対象が変わります。

「検出→修正」に加え、「最初からシークレットを混入させない」Prevention-Firstアプローチを取り入れます。GitHub公式もpre-commitフックやシークレット管理サービスによる混入防止を案内しています。導入効果は、混入・検出・解消の状況を計測して確認します(公式の予防策)。

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

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

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

インフラコードのサニタイズでは、Terraformの変数名・リソースアドレス・属性値の変更を区別します。入力変数名だけを変更し、参照と値を揃えることと、stateに紐付くリソースアドレスを変更することは別です。後者ではmovedブロック等による移行が必要になる場合があります(入力変数、リソースの改名・移動)。

事前確認チェックリスト

  1. .tfvarsファイルの確認:変更する変数名が.tfvarsで参照されていないか
  2. CI/CDの確認:-varフラグで外部から値を渡していないか
  3. GitHub Actionsの確認:.github/workflows/内で変数名を参照していないか
  4. tfstateの確認:変数名だけでなく、リソースアドレスや属性の実際の値が変わるかを確認。再作成の有無はplanとプロバイダー仕様で確認

変数名と参照だけを変え、設定値・リソースアドレスを変えない場合(例:VPN IPアドレスの変数名をmycompany_vpn_ip→client_vpn_ipに変更)、入力変数の改名だけを理由とするリソースの再作成は通常不要です。ただし、値の受け渡し漏れがないことをplanで確認します。

docker-compose.ymlのサニタイズ

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

よくある問題パターン

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

推奨対応

  • フォールバック値を削除し、${DB_PASSWORD:?DB_PASSWORD is required}のように必須指定する。環境変数や.env等から値を渡し、未設定・空文字ならエラーにする(Composeの必須値構文)
  • .env.exampleにプレースホルダーと説明コメントを記載
  • ボリュームパスを相対パスに統一

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

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

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

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

  1. スコープの明確化:対象ディレクトリ、除外対象を明示
  2. 「ロジックに触れない」制約の明記:プレースホルダー置換・削除・リネームのみ
  3. 完了条件の定義:既知の禁止文字列の残存ゼロに加え、履歴・除外範囲・差分の確認を完了条件として明示
  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'(拡張子のないplan等も別途確認)残存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は自社開発のAIツールを自社運用する「自社実証型」AIコンサルティングファームです。

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

関連記事

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

SHARE

FAQ

よくある質問

受託開発やPoC開発でソースコードをクライアントに納品する前に、機密情報(APIキー・パスワード・クレデンシャル)の除去、不要なデータの削除、セキュリティリスクの排除を行うプロセスです。grep一発では不十分で体系的なチェックリストに基づく検品が必要です。

APIキー・シークレットキー、データベースのパスワード・接続文字列、AWSアクセスキー/シークレットキー、OAuth トークン・リフレッシュトークン、.envファイルの内容、テスト用の実データ、社内のSlack Webhook URL、コメント内の社内情報が主な除去対象です。

git-secrets/truffleHog等のシークレットスキャンツールをCIに組み込む、.gitignoreで未追跡の.envファイルを除外(すでに追跡されたファイルは別途除外)、環境変数でクレデンシャルを管理(コードにハードコーディングしない)、納品前に履歴も確認し、漏洩したキーはまず無効化・ローテーションします。履歴を書き換える必要がある場合はgit-filter-repo等を用い、共同作業者と調整して他のコピーも確認します。git filter-branchはGit公式で推奨されていません。出典:https://git-scm.com/docs/git-filter-branch 、https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/removing-sensitive-data-from-a-repository

シークレットスキャン(APIキー・パスワードの除去)、テストデータの除去(実データの匿名化/ダミーデータ化)、不要ファイルの除去(.env/.DS_Store/node_modules等)、コメントの精査(社内情報・TODOの除去)、依存関係の脆弱性チェック(npm audit等)、ライセンスの確認が基本チェックリストです。

主に、即座に該当キーをローテーション(無効化と再発行)、必要に応じたGit履歴の削除・書き換え(git-filter-repo等。フォーク・クローン・キャッシュやPR参照は別途対応)、影響範囲の調査(ログ確認・不正利用の有無)、関係者への通知と報告書作成、再発防止策の整備(CIへのシークレットスキャン組み込み・社内教育)、です。漏洩は検知した時点で対応を開始します。履歴を書き換えるだけで、他者が持つコピーまで完全に消せるわけではありません。出典:https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/removing-sensitive-data-from-a-repository

renueについて

renueは、AIで業務を実装する会社です

AIコンサルティングから図面AI・広告運用エージェント・コールセンターAIまで、実際に動いているサービスをご覧いただけます。renueが何をしている会社か、まずはサービス一覧からご確認ください。

関連記事

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

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

無料資料をダウンロード