GitHub Appをインストールしてコミットに自動でタイムスタンプを付与する
ビルド、テスト、lint、デプロイはすでに自動化している。それなのに、先行技術を証明する必要があるときに、なぜまだ手動でコミットにタイムスタンプを付与しているのか。大変な方法は、プロトコルツールをコミットごとに実行し、証明ファイルを自分で管理することだ。Timestamp GITは、それをマネージドなGitHub Appに置き換え、すべてのコミットに自動でタイムスタンプを付与し、Bitcoinブロックチェーンにアンカーする。
セットアップ後のワークフローは、意図的に退屈なものになる。GitHub Appを一度インストールし、監視したいリポジトリを選択すれば、あとは夜間パイプラインが.ots証明レシートを作成する。開発者のマシンにインストールするCLIはなく、リリース前に覚えておく手動コマンドもなく、壊れやすいローカルのタイムスタンプアーカイブもない。
この記事では、一度きりのセットアップ、コミットからBitcoinアンカーまでの間に何が起こるか、証明の監視方法、そして証拠を法廷で有効に保つためのプラクティスを解説する。
一度きりのセットアップ:GitHub Appを接続する
自動化は1回のインストールから始まる。その後は、コミットにタイムスタンプを付与するGitHub Appが反復作業を代行する。
1. Timestamp GIT GitHub Appをインストールする
Timestamp GITダッシュボードから、個人アカウントまたは組織にアプリをインストールする。インストール中、他のGitHub Appと同様にリポジトリアクセスを許可する。
標準モードでは、アプリに必要なのは:
- ソースリポジトリへの読み取りアクセス。 GitHubはコミットハッシュのみの権限を提供していないため、コミットハッシュを検出するには少なくとも読み取り専用アクセスが必要になる。
- ターゲットリポジトリまたはブランチへの書き込みアクセス。 証明ファイルの置き場所が必要だ。ソースリポジトリ内の専用
timestampsブランチでも、別のシャドウリポジトリでもよい。
読み取りアクセスがあっても、アプリが読み取るのは監視対象リポジトリのHEADコミットハッシュのみだ。ソースファイル、diff、issue、プルリクエストの内容は読み取らない。
2. 監視するリポジトリを選択する
インストール後、自動タイムスタンプの対象となるリポジトリを選択する。パブリックリポジトリは無料プランで利用できる。プライベートリポジトリには、セキュリティとコンプライアンスのニーズに応じて、有料のProまたはEnterpriseプランが必要だ。
アプリケーションコードの変更は不要だ。開発者のマシンに何かをインストールする必要はなく、チームがコミットワークフローを変更する必要もない。
3. 証明の配信方法を選択する
デフォルトでは、アプリは証明アーティファクト用に専用のGitブランチまたはシャドウリポジトリを作成する。これにより、証拠がメインのソース履歴から分離され、プルリクエストが.otsファイルで汚染されるのを防ぐ。
Enterprise ZKモード:コードへのアクセスをゼロに
コードがプロプライエタリ、規制対象、またはエアギャップ環境にある場合、Enterprise ZKモードがより厳格な選択肢となる。12行のGitHub Actionがあなたのインフラ上で実行され、コミットハッシュのみをTimestamp GIT APIにプッシュする。
このモードでは、Timestamp GITアプリはソースリポジトリへの読み取りアクセスを一切必要としない。GitHub Actionをインストールするだけで、環境の外に出るのはコミットハッシュのみだ。ソースコードが外に出ることは決してない。
オプション:Dockerセルフホストモード
最大限の制御が必要な場合、Timestamp GITはDockerイメージとしても利用できる。これは、エアギャップ環境や、すべてのインフラをオンプレミスに置かなければならない組織に有用だ。
最小限のComposeセットアップは次のようになる:
services:
timestampgit:
image: rue1401/timestampgit:prod
ports:
- "8080:8080"
volumes:
- ./data:/app/data
restart: unless-stopped
valkey:
image: valkey/valkey:8
restart: unless-stopped
起動は次のコマンドで行う:
docker compose pull
docker compose up -d
docker compose logs -f timestampgit
アプリケーションはhttp://localhost:8080で利用できる。初回起動時には、セットアップウィザードがGitHub Appの接続とインスタンスの設定を案内する。
自動化パイプライン:コミットからBitcoinアンカーまで
GitHub Appがインストールされると、タイムスタンプ処理は自動で実行される。
ステップ1:コミットの検出
標準モードでは、GitHub Appはwebhookを通じて新しいコミットを検出する。Enterprise ZKモードでは、GitHub ActionがCI/CDの一部としてコミットハッシュをAPIにプッシュする。
いずれの場合も、Timestamp GITパイプラインに入るデータはコミットハッシュのみだ。
ステップ2:夜間バッチ処理とBitcoinアンカリング
コミットハッシュは、バッチ処理のためにインメモリのキーバリューストアに保存される。毎晩、cronワーカーが:
- 保留中のすべてのコミットハッシュをグループ化する。
- リポジトリごとにマニフェストファイルを作成する。
- 日次バッチからMerkleツリーを構築する。
- 公開OTSカレンダーを使用してOpenTimestamps証明を作成する。
- MerkleルートをBitcoinブロックチェーンにアンカーする。
日ごとのMerkleルートがBitcoinに埋め込まれるものだ。そのトランザクションが承認されると、ハッシュは特定のBitcoinブロックに恒久的に固定される。
ステップ3:証明の配信
Bitcoinトランザクションが承認された後、Timestamp GITはマニフェストと.otsレシートファイルを専用のtimestampsブランチまたはシャドウリポジトリにプッシュする。
Bitcoinの承認には、通常、夜間バッチの送信後約3時間かかる。つまり、日中に行われたコミットは、通常翌日までに証明ファイルが利用可能になる。
ステップ4:ステータスと検証
リポジトリのステータスダッシュボードからアンカー履歴を確認できる。公開ダッシュボードには以下が表示される:
- 証明の存続期間
- 最古のアンカー日
- 日次アンカーの規則性
- Bitcoinブロックとトランザクションデータ
- カレンダーヒートマップ
- ダウンロード可能な監査CSVとPDF証明書
プログラムによるアクセスには、公開ステータスエンドポイントが利用できる:
# 最後にアンカーされたBitcoinブロック情報
curl -s https://timestampgit.dev/api/statusLast/acme/payments-api
# コミット総数とタイムスタンプ済みコミット数
curl -s https://timestampgit.dev/api/statusCount/acme/payments-api
# Shields.ioバッジ用の統合サマリー
curl -s https://timestampgit.dev/api/statusSummary/acme/payments-api
この製品は認証付きバッジエンドポイントも提供しており、1回のリクエストでREADMEバッジを生成できる。プライベートリポジトリの場合、バッジURLには暗号化されたHMACが含まれ、許可されたユーザーのみがステータスを確認できる。
監視と障害対応
自動化はシステムを無視してよいという意味ではない。CIの健全性を監視するのと同じように、アンカーの規則性を監視すべきだ。
ステータスダッシュボードは、欠落した日を発見する最速の場所だ。夜間バッチが証明を生成しなかった場合、欠落した日付はカレンダーヒートマップと日次規則性ビューにギャップとして表示される。
プログラムによるチェックには、上記と同じエンドポイントを内部監視に組み込める:
/api/statusLast/{user}/{repo}を使用して、最新のBitcoinアンカーを確認する。/api/statusCount/{user}/{repo}を使用して、タイムスタンプ済みコミット数を期待されるコミット数と比較する。/api/audit/{user}/{repo}を使用して、完全な監査台帳をCSVとしてダウンロードする。
例:
# 完全な監査台帳をダウンロード
curl -OJ https://timestampgit.dev/api/audit/acme/payments-api
# 特定の日付のPDF証明書をダウンロード
curl -OJ https://timestampgit.dev/api/report/acme/payments-api/2026-09-13
システムは深夜にハッシュをバッチ処理し、Bitcoinの承認には約3時間かかるため、新しくプッシュされたコミットは、証明ファイルがtimestampsブランチに現れるまで完全にタイムスタンプされたものとして扱わないこと。
最後に、誰でも.otsファイルをBitcoinブロックチェーンに対して独立して検証できる。証明は標準のOpenTimestampsレシートとBitcoinブロックデータに依存しているため、検証はTimestamp GITが利用可能であり続けることに依存しない。
自動タイムスタンプのベストプラクティス
1. すべての重要リポジトリで有効にする
パブリックリポジトリだけにタイムスタンプを付与すると、プライベートな内部作業が保護されない。パテントトロールや従業員との紛争は、インフラの外に出ることのないプロプライエタリなシステムに関わることが多い。それらにはプライベートリポジトリプランまたはEnterprise ZKモードを使用する。
2. 営業秘密にはEnterprise ZKモードを使用する
リポジトリに営業秘密や規制対象コードが含まれる場合、サードパーティアプリに読み取りアクセスを一切許可しないこと。GitHub Actionを使用して、コミットハッシュのみが環境の外に出るようにする。
3. timestampsブランチを保護する
.otsレシートとマニフェストファイルはあなたの証拠だ。専用のtimestampsブランチまたはシャドウリポジトリを不変の証拠ストレージとして扱う。書き込みアクセスをアプリと必要な管理者に制限する。
4. 監査記録を定期的にアーカイブする
監査CSVとPDF証明書を、四半期ごとやメジャーリリース前などのスケジュールでダウンロードする。コピーをコンプライアンスまたは法務アーカイブに保管する。ブロックチェーンの証明は独立して存在するが、監査証跡を整理しておくと法的レビューがはるかに容易になる。
5. READMEに検証バッジを追加する
公開検証バッジは、リポジトリで自動タイムスタンプが有効になっていることを示す簡単な方法だ。ダッシュボードまたは認証APIからのバッジリンクを使用して、Shields.ioバッジをREADMEに埋め込む。
FAQ
GitHub Appは私のソースコードを読み取るのか?
いいえ。標準モードでは、アプリが読み取るのはHEADコミットハッシュのみだ。Enterprise ZKモードでは、あなたの側のGitHub ActionがコミットハッシュのみをAPIにプッシュするため、アプリがリポジトリにアクセスすることは一切ない。
コミットがタイムスタンプされるまでどのくらいかかるのか?
コミットは1日を通して収集され、夜間バッチでBitcoinにアンカーされる。バッチ送信後、Bitcoinの承認には通常約3時間かかる。承認されると.ots証明ファイルを受け取る。
Timestamp GITを使わずにタイムスタンプを検証できるか?
はい。証明は標準のOpenTimestamps .otsファイルだ。誰でもファイルをダウンロードし、オープンソースツールを使用してBitcoinブロックチェーンに対してローカルで検証できる。Timestamp GITはWebベースの検証ツールとPDF証明書も提供している。
セルフホスティングは利用できるか?
はい。Timestamp GITはセルフホスティング用のDockerイメージを提供しており、エアギャップ環境や高度に規制された環境に適している。期間限定のデモライセンスはリクエストに応じて利用可能だ。
結論:セットして忘れる
手動タイムスタンプは、誰かが実行を覚えていることに依存するため壊れやすい。GitHub Appベースのパイプラインは、その失敗モードを取り除く。
Timestamp GITを使えば、一度インストールし、リポジトリを選択すれば、あとは夜間ワーカーがコミットハッシュをBitcoinにアンカーする。チームは通常どおりコードを書き続ける。証拠は.otsファイル、監査レポート、ステータスバッジとして自動的に蓄積される。
今すぐTimestamp GIT GitHub Appをインストールするか、パブリックリポジトリ向けの無料プランから始めよう。ProおよびEnterpriseプランは、プライベートリポジトリとより厳格なゼロ知識デプロイメント向けに利用可能だ。
関連記事
- 特許なしでソフトウェアIPを保護する方法
- Timestamp GITによる無料のオープンソースGitタイムスタンプ
- 暗号タイムスタンプとは何か、そしてそれはコードをどのように保護するのか