
マークルツリー入門 - Git・証明書の透明性・データ同期を支えるハッシュの木
データの塊をハッシュの木にまとめるマークルツリーの仕組みを、ブラウザで動くデモ付きで説明します。根のハッシュ1つで全体を表せる理由、log2(n)個のハッシュで済む包含証明、RFC 9162の0x00/0x01によるドメイン分離、Bitcoinの奇数個の扱いが招いたCVE-2012-2459、Git・Certificate Transparency・Cassandraでの使われ方までまとめます。

データの塊をハッシュの木にまとめるマークルツリーの仕組みを、ブラウザで動くデモ付きで説明します。根のハッシュ1つで全体を表せる理由、log2(n)個のハッシュで済む包含証明、RFC 9162の0x00/0x01によるドメイン分離、Bitcoinの奇数個の扱いが招いたCVE-2012-2459、Git・Certificate Transparency・Cassandraでの使われ方までまとめます。

ディレクトリごとに環境変数を出し入れするdirenvの基本を、3000番ポートを手元だけ3001番に変える例で説明します。.git/info/excludeでコミット対象から外す方法、Next.jsのPORTが.envでは効かない理由、.envrcの承認の仕組みまで扱います。

git diff の裏で動く diff アルゴリズムを、LCS と編集距離、編集グラフ、Myers の O(ND) アルゴリズム、patience diff、histogram diff の順に解説します。Python のミニ実装と、git diff --diff-algorithm の実測で「最小」と「読みやすい」が別物であることを確かめます。

Git の次の破壊的リリース Git 3.0 で予定されている変更を、公式の Documentation/BreakingChanges.adoc をもとに整理します。新規リポジトリの既定が SHA-256・reftable・main になり、safe.bareRepository が explicit に、git whatchanged などが削除され、ビルドに Rust が必須になる予定です。壊れるのは Git 本体ではなく周辺のスクリプト・フック・CI であることを示し、その箇所を洗い出して新しい既定値でテストを試走できる自作 CLI「git3ready」を紹介します。

Claude Code や Codex を隔離された git worktree の中で同時に何本も走らせるためのデスクトップアプリ、Orca(onorca.dev)を公式ドキュメントとGitHubリポジトリを一次ソースに整理します。ADEという呼び方の中身、worktreeモデル、node_modulesと.envの共有設定、ターミナルの実体、SSH/リモート/クラウドVMの4つの実行形態、Orca CLI、テレメトリ、そして導入前に把握しておきたい注意点まで。

Gitの.git/objectsに何が保存されているのかを、手元で実行できるコマンドとともに解説します。オブジェクトIDがどう計算されるか、blob/tree/commitの生バイト列、ブランチやHEADの正体、.git/indexとreflogの実体、そしてpackfileのdelta圧縮まで。公式ドキュメントとPro Gitを出典に、スナップショットモデルと差分圧縮という2層の設計を整理します。

git でシークレット(秘密情報)を漏洩させる代表的なアンチパターンを26個「展示」した自作OSS「leak-museum」を公開しました。committed .env、クラウドキー、SSH/TLS秘密鍵、Kubernetes Secret(base64は暗号化ではない)、消したつもりでも履歴に残るケース、フロントエンドのバンドル+ソースマップ、弱いJWT署名鍵まで、なぜ壊滅的かと正しい対処をセットで解説。全て偽の資格情報で、gitleaks / trufflehog などシークレットスキャナーのテスト用コーパスとしても使えます。設計意図(スキャナーの盲点を突く展示、push protection 対策の意図的な破損)と、正しい手本 good-example・チェックリストまで紹介します。

Git の merge と rebase の違いを実務目線で整理します。マージコミットで分岐を残す merge と、コミットを付け替えて直線的にする rebase の仕組み、fast-forward と --no-ff と squash の違い、「公開済みブランチを rebase しない」黄金律、git rebase -i での squash / fixup、コンフリクト処理、git pull --rebase、そして reflog や ORIG_HEAD でのやり直しまで、Git 公式ドキュメントを一次ソースにまとめます。

日常で使う Git コマンドを用途別に整理し、設定しておくと作業が速くなる alias(git config の alias とシェルの alias)を紹介します。長いコマンドを短く、面倒な操作をワンコマンドにして、Git のタイプ量を減らすための実践的なまとめです。

GUI から TUI(ターミナルUI)へ移る開発者が増えています。キーボードだけでステージング・対話的リベース・stash を高速にこなす lazygit、Rust 製で軽量な gitui、ログ閲覧に強い tig を、特徴と使いどころで比較します。ターミナルから手を離さず Git を回したい人向けのまとめです。

Git コミットメッセージの軽量な規約 Conventional Commits 1.0.0 を、type / scope / description / body / footer / 破壊的変更の書き方から、commitlint + Husky による強制、semantic-release との連携まで実装目線で整理します。

git-http-backend では Git LFS が動かなかった経験から、LFS に対応するセルフホスト型 Git サーバー OSS を調査。Gitea、Forgejo、GitLab CE、Gogs、OneDev、Soft Serve の特徴・要件・向いているケースを比較します。

Git LFS(Large File Storage)の仕組みと導入手順を解説。自前Gitサーバー(git-http-backend)では動かなかった実体験と、その理由・代替策もまとめています。

gitログ、ファイル更新履歴、Cursor・Claude Code・Codexの各AIエージェントログを情報源として、AIに1日の活動日記を自動生成してもらう仕組みを構築。さらにCRONとシェルスクリプトで完全自動化するまでの話。

mini.diffを使ってNeovimでGitの変更行を可視化し、hunk単位でのステージ・リセット操作を実現する設定を紹介します。gitsignsからの乗り換えにも最適。