GitHub AppでGitコミットのタイムスタンプ処理を自動化する
Gitコミットがいつ存在したかを証明しようとしたことがあるなら、手動の手順はすでにご存じでしょう。コミットハッシュを抽出し、マニフェストを作成し、確認を待ち、レシートファイルを安全な場所に保存し、それを繰り返す。これは反復的で忘れやすく、複数のリポジトリやチームメンバーが関わった瞬間に破綻します。
GitHub Appを使ってGitコミットのビットコインタイムスタンプ処理を自動化する、より良い方法があります。Timestamp GITは存在証明をバックグラウンドサービスに変えます。GitHub Appを一度インストールし、リポジトリを接続すれば、すべてのコミットが毎晩ビットコインブロックチェーンに固定されます。生のプロトコルツールを実行したり、cronジョブを覚えたり、ブロックチェーンの専門家になる必要はありません。生のOpenTimestampsワークフローは存在しますが、手動で行うのは困難な方法です。
この記事では、自動化ワークフロー、一度きりのセットアップ、コミットからビットコイン固定までの間に何が起こるか、そして結果の証明を監視・利用する方法について説明します。
排除できる手動タイムスタンプ処理の苦労
Gitコミットのタイムスタンプ処理を手動で行うプロセスは通常、次のようになります。
- コミットにタイムスタンプを付けるべきだったことを思い出すまで待つ。
- Gitからコミットハッシュを抽出する。
- 存在を証明したいハッシュを含むファイルを準備する。
- そのファイルに対してタイムスタンプツールを実行する。
- 証明が作成され確認されるのを待つ。
- レシートを耐久性のある場所に保存する。
- 後で正確な手順を説明するよう誰にも求められないことを願う。
このワークフローには3つの深刻な問題があります。
第一に、開発者はタイムスタンプを付けるのを忘れます。存在証明は、タイムスタンプが紛争前に作成された場合にのみ役立ちます。3か月後に思い出した場合、証拠は本来よりも弱くなる可能性があります。
第二に、証明が失われます。ノートパソコン、古いバックアップドライブ、またはランダムなチャネルに保存されたレシートファイルは監査証跡ではありません。法的またはコンプライアンスの文脈では、レシートの欠落は証拠の欠落のように見えます。
第三に、手動の手順はスケールしません。ソロ開発者はリリースコミットに時々タイムスタンプを付けることができます。15のリポジトリ、複数の貢献者、毎日のマージがあるスタートアップは、誰かが毎晩手動でハッシュをエクスポートすることに依存できません。
Timestamp GITは、OpenTimestampsプロトコル全体をマネージドサービスの背後で自動化します。この製品はソースコードを読み取りません。コミットハッシュのみを収集し、それらをバッチ処理し、ビットコインブロックチェーンに埋め込まれた暗号証明を作成します。CLIに触れる必要はなく、Merkleツリーを構築する必要もなく、確認プロセスを見守る必要もありません。
一度きりのセットアップ:リポジトリを接続する
セットアップパスは、一度行えばその後は忘れられるように設計されています。
まずTimestamp GIT GitHub Appをインストールし、監視したいリポジトリを選択します。パブリックリポジトリは無料のオープンソースプランでカバーできます。プライベートリポジトリはPro AgencyまたはEnterprise ZKプランで利用できます。
Timestamp GITは2つのデプロイメントモードを提供します。
スタンダードモード
スタンダードモードでは、GitHub AppがGitHub Webhookを通じてリポジトリを監視します。新しいコミットが現れると、アプリはHEADコミットハッシュのみを読み取ります。
GitHubはコミットハッシュのみのアクセススコープを提供していないため、GitHubの権限ではソースリポジトリへの読み取り専用アクセスが必要です。Timestamp GITは、証明が書き込まれるターゲットリポジトリへの読み書きアクセスも必要とします。証明ブランチは同じリポジトリに置くことも、別のシャドウリポジトリに置くこともできます。
重要な点:ソースコードが読み取られたり、コピーされたり、保存されたりすることはありません。コミットハッシュのみがTimestamp GITパイプラインに入ります。
Enterprise ZKモード
Enterprise ZKモードは、第三者にリポジトリの読み取りアクセスを一切付与できないチーム向けです。代わりに、12行のGitHub Actionが独自のインフラストラクチャ上で実行され、コミットハッシュのみをTimestamp GIT APIにプッシュします。
このモードでは、Timestamp GITは証明が保存されるターゲットリポジトリへの読み書きアクセスのみを必要とします。ソースリポジトリへの読み取りアクセスは不要です。ソースコードが環境から出ることはありません。
初期接続後は手動の手順はありません。監視対象リポジトリへのすべてのコミットが自動的に取得されます。
自動化パイプライン:コミットからビットコイン固定まで
リポジトリが接続されると、自動化パイプラインが残りを処理します。
パイプラインは次のように機能します。
-
コミット検出
GitHub AppがWebhookを通じて新しいコミットを検出するか、GitHub ActionがコミットハッシュをAPIにプッシュします。 -
ハッシュキュー
コミットハッシュはバッチ処理のためにインメモリのキーバリューストアに保存されます。 -
夜間バッチ
毎晩、ワーカーが保留中のハッシュをグループ化し、各リポジトリのマニフェスト.txtファイルを作成します。 -
MerkleツリーとOpenTimestamps
Timestamp GITはネイティブにMerkleツリーを構築し、公開カレンダーを使用してOpenTimestamps証明を作成し、Merkleルートをビットコインブロックチェーンに固定します。 -
証明の配信
マニフェストと.otsレシートファイルは、専用のtimestampsブランチまたはシャドウリポジトリにプッシュバックされます。
ビットコインの確認には通常数時間、通常は約3時間かかります。つまり、証明は通常、夜間バッチが送信された翌日に利用可能になります。
公開APIを通じてリポジトリの現在のステータスを確認できます。
curl -s https://timestampgit.dev/api/statusLast/acme/widget-api
curl -s https://timestampgit.dev/api/statusCount/acme/widget-api
curl -s https://timestampgit.dev/api/statusSummary/acme/widget-api
プライベートリポジトリは、これらのURLに暗号化されたHMACを追加するため、許可されたユーザーのみがステータスを確認できます。HMACはTimestamp GITサーバーインスタンスに固有です。
APIは検証およびレポートのエンドポイントも公開しています。
GET /api/verify/{user}/{repo}/{date}は、特定の日のローカル検証のための完全なMerkleチェーンデータを返します。GET /api/audit/{user}/{repo}は、完全な監査台帳をCSVとしてダウンロードします。GET /api/report/{user}/{repo}/{date}は、特定の日のPDF証明書をダウンロードします。
リポジトリ管理エンドポイントGET /api/repos/{user}は、GitHub Appインストール後に監視対象リポジトリを一覧表示します。
Enterprise ZKモードの場合、セットアップウィザードが署名付きURLを提供します。GitHub Actionはコミット識別子のみをそのURLに投稿します。ワークフローは意図的に小さく、GitHub Actionsですでに利用可能なイベントペイロード以外のソースチェックアウトは必要ありません。
監視と障害処理
自動化は観測可能であるべきです。Timestamp GITは各リポジトリの公開ステータスダッシュボードを提供します。
ダッシュボードには以下が含まれます。
- 証明の寿命
- 最古の固定日
- 毎日の規則性
- ビットコインブロックとトランザクションデータ
- カレンダーヒートマップ
- ダウンロード可能な監査CSV
- PDF証明書のダウンロード
READMEに検証バッジを埋め込むこともできます。認証されたGET /api/badgeLink/{user}/{repo}エンドポイントは、Shields.io用のバッジURLとすぐに使えるMarkdownスニペットを返します。バッジは検証ステータスを公開表示し、検証ページにリンクします。
ビットコインの確認が予想より長くかかる場合、ステータスダッシュボードは証明がプロセスのどこにあるかを示します。システムは夜間にバッチ処理するため、確認が遅い場合は通常、証明が消えるのではなく、通常より数時間遅れて表示されることを意味します。キューに入れられたハッシュはパイプラインに残り、現在の状態をステータスページで確認できます。
重要な保証:証明はTimestamp GITが利用可能であり続けることに依存しません。.otsファイルはリポジトリに保存され、証明はSHA-256とビットコインブロックデータのみに依存します。会社が消滅してもローカルで検証できます。
自動タイムスタンプ処理のベストプラクティス
自動化は手動の負担を取り除きますが、いくつかの習慣が証拠をより強固にします。
リリースだけでなく、すべてのコミットにタイムスタンプを付ける。
リリースは有用なマイルストーンですが、コミットハッシュの継続的なチェーンははるかに豊かな記録を作成します。紛争が特定の実装詳細に関するものである場合、リリースレベルのタイムスタンプは粗すぎる可能性があります。
証明には専用のシャドウリポジトリを使用する。
.otsファイルとマニフェストファイルを別の証明リポジトリに保管すると、メインリポジトリがクリーンに保たれます。また、すべての証明データが1か所にあるため、監査収集も容易になります。
エアギャップ環境にはDockerセルフホスティングを検討する。
Timestamp GITは、最大限の制御が必要なチーム向けにDockerイメージとして利用できます。クイックスタート設定は次のとおりです。
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の接続とインスタンスの設定を案内します。期間限定のデモライセンスはDockerライセンスページから入手できます。
監査レポートを定期的にダウンロードする。
CSV監査台帳とPDF証明書を法的文書として扱ってください。他のIP保護記録と一緒に保管してください。紛争が始まるまで証拠収集を待ってはいけません。
タイムスタンプ処理を他のIP保護戦略と組み合わせる。
タイムスタンプ処理は特許、契約、営業秘密ポリシーの代替ではありません。それは、それらの他の戦略をはるかに挑戦しにくくする暗号学的証明です。
FAQ
GitHub Appはソースコードへのアクセスを必要としますか?
いいえ。スタンダードモードでは、GitHub Appはコード自体ではなくHEADコミットハッシュのみを読み取ります。Enterprise ZKモードでは、インフラストラクチャ上のGitHub ActionがコミットハッシュのみをAPIにプッシュするため、ソースコードが環境から出ることはありません。
コミットがタイムスタンプされるまでどのくらいかかりますか?
コミットは夜間にバッチ処理されます。ビットコイン固定プロセスは通常、バッチ送信後数時間かかるため、証明は通常翌日に利用可能になります。リアルタイムの更新はステータスダッシュボードで確認できます。
Timestamp GITに依存せずにタイムスタンプを検証できますか?
はい。証明は標準のOpenTimestamps .otsファイルであり、公開ツールとビットコインブロックチェーンを使用して独立して検証できます。Timestamp GITはブラウザベースの検証ページとダウンロード可能なPDF証明書も提供します。
Timestamp GITが廃業したらどうなりますか?
証明はビットコインブロックチェーンに固定されており、SHA-256やOpenTimestampsなどのオープンスタンダードのみを使用しているため、有効なままです。いつでもオフラインで検証でき、.otsファイルはリポジトリに保存されています。
証明を自動化し、制御を維持する
手動のタイムスタンプ処理は内部的に売り込みやすく、実際には持続が困難です。存在証明の価値は一貫性から生まれます。すべてのコミット、毎日、欠落したレシートなしで。
Timestamp GITはそれをバックグラウンドプロセスに変えます。GitHub Appを一度インストールし、リポジトリを接続すれば、夜間パイプラインがコミットハッシュ、Merkleツリー、OpenTimestamps証明、ビットコイン固定、証明配信を処理します。ダッシュボード、バッジ、CSV監査、PDF証明書を通じて結果を監視します。
パブリックリポジトリは無料で開始できます。プライベートリポジトリはPro AgencyとEnterprise ZKでカバーされます。エアギャップ制御が必要な場合は、Dockerセルフホストライセンスが同じ自動化を独自のインフラストラクチャ内に配置します。
Timestamp GITから始めて、存在証明をコミットワークフローの通常の一部にしましょう。