
お好きな金額でサポートしていただけると嬉しいです!
(50円〜10,000円[税込]まで)
作成日時:2026年5月9日 02:04
更新日時:2026年5月9日 07:11
セキュリティ
Claude Code
Claude Codeを使って開発していると、AIがコードを自動生成・コミットする場面が増えます。そのとき、うっかりAPIキーや認証トークンをコミットしてしまうリスクも上がります。「自分は気をつけているから大丈夫」と思っていても、AIがコンテキストから拾ったシークレットをコードに埋め込んでコミットするというケースは実際、起こらないとは絶対言えないですよね。
setting.jsonにdenyとして設定し、git操作は自分でやる、にする、もしくはaskにする、でもよいのですが、結局人間も同じようにミスをします。
そこで今回は自分を信じることなく笑、gitleaksを使ってコミット前にシークレットを自動検知・ブロックする仕組みを導入してみたので紹介します。
.husky や lefthook 等のツール連携)gitleaks(ギットリークス)は、Gitリポジトリ内のシークレット(APIキー・パスワード・トークンなど)を検出するオープンソースのセキュリティツールです。
git log の履歴全体、ステージング済みファイル、指定ディレクトリなど複数のスキャン対象に対応gitleaksは「文字列のランダム性(エントロピー)」も評価します。そのため、ダミー文字列やサンプル文字列は検出されません。
文字列 | 結果 | 理由 |
|---|---|---|
| スルー | 意図的に低エントロピー |
| スルー | エントロピー低 |
| 検出・ブロック | エントロピー高 |
本物に近いランダムなトークンのみが検出されるため、誤検知を抑えながら実際のシークレット漏洩を防げます。
gitleaksをpre-commitフックに組み込むことで、コミット前の段階でシークレットをブロックできるようになり、以下が実現できます。
また、git config --global core.hooksPath を使うことで、どのツール経由のコミットにもフックが発動してくれるようにできます。
私は仕事がWindowsなので、Windows環境で動作を確認しました。
core.hooksPath: ~/.git-hooksScoopを使ってインストールします。
※他のインストールもあります。gitleaksのリポジトリをご参考ください。
※Scoopが未導入の場合は Scoop公式サイト を参照してください。
# !/bin/bash
# install
scoop install gitleaks
# 確認
gitleaks versionGitのグローバル設定でhooksPathを指定します。これにより、全リポジトリ・全ツールからのコミットにフックが発動してくれるようになります。
# !/bin/bash
mkdir -p ~/.git-hooks※PowerShellの場合は以下
New-Item -ItemType Directory -Force "$env:USERPROFILE\.git-hooks"次に、gitのグローバル設定に登録します。
git config --global core.hooksPath ~/.git-hooks設定を確認します。
git config --global core.hooksPath
# ~/.git-hooks が表示されればOK~/.git-hooks/pre-commit(拡張子なし)を以下の内容で作成します。
#!/bin/sh
gitleaks git --staged --redact --verbose
if [ $? -ne 0 ]; then
echo ""
echo "gitleaks: シークレットが検出されました。コミットをブロックします。"
echo "誤検知の場合は .gitleaksignore または gitleaks.toml の allowlist を設定してください。"
exit 1
figit --staged:ステージング済みの変更のみをスキャン--redact:検出されたシークレットをマスクして出力(ログへの漏洩防止)--verbose:どのファイルのどの行で検出されたかを詳細表示実行権限を付与します。
#!/bin/sh
chmod +x ~/.git-hooks/pre-commit実際にAPIキーに近い文字列をファイルに書き込んでコミットしてみます。
ただし、gitleaksは「文字列のランダム性(エントロピー)」も評価します。そのため、ダミー文字列やサンプル文字列は検出されないので注意です(再掲)。
echo "GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" > test.txt
git add test.txt
git commit -m "test"※gitleaksによってシークレットが検出された場合は、コミットがブロックされ以下のようなメッセージが表示されます。
Finding: GITHUB_TOKEN=ghp_[REDACTED]
Secret: [REDACTED]
RuleID: github-pat
Entropy: 3.58
File: test.txt
Line: 1
Commit: (staged)
gitleaks: シークレットが検出されました。コミットをブロックします。
誤検知の場合は .gitleaksignore または gitleaks.toml の allowlist を設定してください。シークレットを定義している該当行末に # gitleaks:allow を追記するだけです。
# 行末にコメントを追加
token=xxx # gitleaks:allow
.gitleaksignore にファイルパスを記述します。
echo "path/to/file" >> .gitleaksignore
リポジトリルートに gitleaks.toml を配置してルールを細かく制御できます。グローバルに適用したい場合は ~/.gitleaks.toml に配置します。
[allowlist]
description = "グローバルな許可リスト"
paths = [
'''example1/''',
'''example2/'''
]
設定してみると、Claude Code経由のコミットにもフックが発動するのが確認でき、かなり安心感が増しました。
AIを使った開発が増えるほど、シークレット漏洩のリスクも増えます。gitleaksのようなコミット前の自動検知を入れておくことで、ヒューマンエラーとAIによる事故の両方をカバーできますので、ぜひ導入を検討してみてください。
それでは、また。
HTNCode