Python 3.6+ / Zero Dependencies / Single File

納品ファイルが
変わっていないか、確かめる。

Gitが使えない納品先のための、Python 1ファイル完結のファイル改ざん検知ツール。SHA-256ベースの整合性検証を、外部依存ゼロで実現します。

BSD 3-Clause License Standard library only Windows / macOS / Linux
~/projects/client-system — bash
python ckt.py verify File integrity verification Manifest : MANIFEST.sha256 Algorithm: sha256 Unchanged: 142 Modified : 2 Added : 1 Removed : 0 Modified files: M app/config.py old: a3f5b2c1d8e9f4a0... 1284 bytes new: 91e8d4c2f0a5b7d3... 1296 bytes M templates/login.html Added files: + scripts/cleanup.sh DIFF: changes detected. echo $? 1

なぜ作ったか

受託開発でシステムを納品した後、本番環境で意図しないファイル改変が起きていないかを確認したい。けれども、納品先がGitやその他のバージョン管理を使えない環境では、確認手段が驚くほど整っていません。

01 / PAIN POINT

納品先にGitが入れられない

共有レンタルサーバー、医療機関の閉域網、お客様の社内ポリシー — Gitやバージョン管理ツールが導入できない環境は今も普通にあります。

02 / PAIN POINT

標準コマンドでは除外できない

sha256sumuploads/ や DB ファイルを巻き込んでしまい、純粋なシステムファイルだけを対象にする運用が現実的でない。

03 / PAIN POINT

「どこが変わったか」が見えない

OK/FAILED の羅列では、追加・削除・変更されたファイルを把握できない。改ざんの種類まで知りたい。

1ファイルに、必要な機能を。

"やらないこと"を明確にし、現場の納品検証で本当に必要な機能だけを 850 行ほどの単一ファイルに収めました。

/ 01

外部依存ゼロ

Python 3.6 以降の標準ライブラリのみで動作。pip install 不要、Docker 不要。納品先のサーバーに余計なものを入れる必要がありません。

/ 02

単一ファイル配布

スクリプトは ckt.py 1 ファイルだけ。プロジェクトに同梱するだけで動作。USB で持ち込んでもすぐ実行できます。

/ 03

.gitignore 風除外

uploads/ *.sqlite __pycache__/ といったパターンで除外設定。よくある除外パターンはデフォルトで同梱済み。

/ 04

空ディレクトリの追跡

ファイルが含まれないディレクトリも記録。削除や新規作成された空フォルダもしっかり検知。構造の変化を見逃しません。

/ 05

拡張子別の統計

--stats オプションで種類ごとの合計サイズや変更状況をレポート。プロジェクトの全体像を把握しやすくなります。

/ 06

詳細ログ表示

--verbose でチェック中のファイルをリアルタイム表示。巨大なプロジェクトでも進捗が見え、安心感があります。

4ステップで動く。

初期設定からマニフェスト生成、検証まで、すべて python ckt.py だけ。

01

設定ファイルを生成

除外パターンを記述する INI 形式の設定ファイルを作成します。

# プロジェクトのルートで実行 python ckt.py init
02

除外パターンを調整

manifest.ini[exclude] セクションをプロジェクトに合わせて編集。デフォルトでよくある除外は入っています。

[exclude] uploads/ # ユーザーアップロード *.sqlite # DBファイル logs/ # ログ __pycache__/ # Pythonキャッシュ
03

納品時にマニフェスト生成

SHA-256 で全ファイルのハッシュ値を計算し、MANIFEST.sha256 として保存します。

python ckt.py generate # → MANIFEST.sha256 が生成される # 納品物と一緒に ckt.py / manifest.ini を渡す
04

後日の改ざん検証

現在のファイル群とマニフェストを比較し、変更・追加・削除を一覧表示します。

python ckt.py verify # 終了コード 0=一致, 1=差分あり, 2=エラー

出力形式

マニフェスト本体は人間にも sha256sum 互換のツールにも読みやすいテキスト形式。検証結果は機械可読 JSON にも切り替え可能です。

MANIFEST.sha256
# ckt.py v1.0.0 # algorithm: sha256 # generated: 2026-05-25T10:30:00+00:00 # root: /var/www/myapp # files: 142 # # Format: <hash> <size> <path> # a3f5b2c1d8e9f4a0... 1284 app/config.py directory 0 empty_dir/ 91e8d4c2f0a5b7d3... 854 app/main.py 5bb3fef173b03fec... 462 app/models.py 2708d73bf31c36cd... 16 書類/契約書.txt ...
verify --json
{ "algorithm": "sha256", "summary": { "unchanged": 142, "modified": 2, "added": 1, "removed": 0 }, "modified": [{ "path": "app/config.py", "old_hash": "a3f5...", "new_hash": "91e8..." }], "added": ["scripts/cleanup.sh"], "removed": [] }

こんな場面で。

納品検証だけでなく、ファイル整合性を確認したいさまざまな場面で活用できます。

CASE / 01

受託開発の納品ファイル検証

納品時にマニフェストを生成し、納品物と一緒にお客様に渡す。後日トラブルが発生したときに「納品時から何が変わったか」を客観的に確認できる。責任分界点を明確にする運用に。

CASE / 02

医療機関・士業の閉域網システム保守

セキュリティ要件で Git やパッケージマネージャを使えない環境でも、Python 3.6 以降があれば動作。USB で持ち込んだスクリプト 1 つでファイル整合性を確認できる。

CASE / 03

CI/CD パイプラインでの監視

--json 出力と終了コード(0=一致、1=差分、2=エラー)を組み合わせて、本番デプロイ後の想定外ファイル変更を自動検知。Slack 通知やアラートと連携可能。

CASE / 04

バックアップの整合性確認

バックアップ取得時にマニフェストを生成しておけば、リストア後に「すべて正しく復元できたか」をハッシュレベルで検証できる。災害対策テストの一環として有効。

CASE / 05

リリース成果物の改ざん証明

マニフェストファイルをリリースノートに添付することで、ダウンロード者が完整性を検証可能に。タイムスタンプ局(TSA)併用で法的証拠力もさらに強化できる。

コマンドリファレンス

4つのサブコマンドで全機能をカバー。詳細は python ckt.py --help で確認できます。

init デフォルトの設定ファイル manifest.ini を生成する。
generate [--output FILE] カレントディレクトリ以下の全ファイルからマニフェストを生成。
verify [--manifest FILE] [--stats] [-v] 現在のファイル状態とマニフェストを比較し、差分を表示。統計や詳細表示も可能。
diff OLD NEW 2つのマニフェストファイル同士を比較。バージョン間差分の確認に。
--algorithm {sha256,sha512,sha1,md5,blake2b} ハッシュアルゴリズムを指定。デフォルトは sha256。
--json 結果を JSON 形式で出力(verify / diff サブコマンドで使用可)。
--root DIR スキャン対象のルートディレクトリを指定(デフォルトはカレント)。