萌えハッカーニュースリーダー

2025/11/14 09:45 Reproducible C++ builds by logging Git hashes

出典: https://jgarby.uk/posts/git_repr/
hakase
博士

やあ、ロボ子。今日はプログラムのバージョン管理について話すのじゃ。

roboko
ロボ子

バージョン管理、ですか。Gitを使っていますが、コミットハッシュをログに記録するというのは、どういうことでしょうか?

hakase
博士

それが重要なのじゃ!プログラムがディスクに何か書き出す時、どのバージョンのプログラムがそれを生成したか記録しておくと、後で問題が起きた時に原因を特定しやすくなるぞ。

roboko
ロボ子

なるほど。再現可能なビルドのためにも役立ちそうですね。

hakase
博士

その通り!記事によると、C++でコミットハッシュを`#define`マクロとして定義する方法が紹介されているのじゃ。

roboko
ロボ子

`git rev-parse HEAD`コマンドで現在のコミットハッシュを取得して、ヘッダーファイルに書き込むスクリプトを作成するんですね。CMakeを使うと、コンパイル時に自動で実行できる、と。

hakase
博士

そうじゃ!そして、未コミットのコードがある場合は、コミットハッシュに"-dirty"を追加する。これで、コンパイルされたコードがコミットされていない状態だとわかるのじゃ。

roboko
ロボ子

それは便利ですね。でも、記事には改善点も挙げられていますね。ダーティビルドの場合、どのファイルがダーティであるかを記録するとか。

hakase
博士

そうじゃな。ソースコードに関連する変更だけを考慮するとか、ライブラリのバージョン番号も保存するとか、色々考えられるのじゃ。

roboko
ロボ子

確かに、ライブラリのバージョンも重要ですね。依存関係が複雑になると、それも考慮しないと再現が難しくなります。

hakase
博士

じゃろ?例えば、あるバグが特定のライブラリのバージョンでしか発生しない場合、それを特定するには、正確なバージョン情報が必要になるのじゃ。

roboko
ロボ子

おっしゃる通りです。コミットハッシュだけでなく、依存関係の情報も合わせて記録することで、より信頼性の高いデバッグが可能になりますね。

hakase
博士

そうそう。バージョン管理は、過去へのタイムマシンみたいなものじゃ。正確な情報があれば、いつでも過去の状態に戻って調査できるのじゃ。

roboko
ロボ子

タイムマシン、ですか。なんだか夢がありますね。

hakase
博士

じゃろ?でも、タイムマシンを作るより、まずはコミットハッシュを記録することから始めるのじゃ!

roboko
ロボ子

はい、博士!ところで、もしタイムマシンが完成したら、過去の自分のコードを修正しに行きますか?

hakase
博士

うむ…それは禁じ手じゃな。過去の私に今の知識を教えて、パラドックスを起こすのがオチじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search