概要
- Goatmire Elixir ConfでのSaša Jurić氏による「Tell Me a Story」講演の要点
- コードレビューとPull Request(PR)の課題と改善策
- レビューしやすいPRの作り方とコミットメッセージの重要性
- クリーンなコミット履歴がもたらす価値
- コラボレーションを成功に導くための具体的なプラクティス
Goatmire Elixir Conf「Tell Me a Story」講演レポート
- Goatmire Elixir Conf にてSaša Jurić氏が「Tell Me a Story」を発表
- 演劇的なストーリーテリング と 実践的な技術アドバイス の融合
- 技術的な内容 を物語として展開し、理解しやすさと面白さを両立
- 講演録画は後日オンライン公開予定、視聴を強く推奨
コードレビューとPull Request(PR)の課題
- コードレビュー は多くのエンジニアが敬遠しがちな作業
- PRが 大規模・複雑・理解困難・テスト困難 になりやすい現状
- 「Looks Good To Me」や表面的な指摘で済ませてしまう傾向
- git blame で責任を個人に押し付けがちだが、システム全体の責任は全員にある
レビューしやすいPRとは
- 理解困難なPR は著者に返却することを推奨
- 「理解できないので承認できない」と伝える勇気の重要性
- 本当にレビュー可能なPRとは「 5〜10分でレビュー可能」な範囲
- 中堅〜シニアレベル の開発者が対象、初心者や10xエンジニアではない
- PRのスコープを縮小 し、1つの機能でも複数PRに分割
- 目安は 300行以内、 500行超えはレビュー困難
ストーリー性のあるコミットの作り方
- コミットは物語を語るもの として設計
- 変更内容を 段階的かつ論理的 に提示し、レビュアーが思考の流れを追いやすくする
- 「add dependency」「implement file upload feature」などの 汎用的なコミットメッセージ は避ける
- 目的や背景、具体的な変更点を明記
デモによる実践例
- Saša氏は 152行の追加と2行の削除 を 13個のコミット に分割
- コミットごとのストーリーを追うことで、なぜその変更が必要かが明確に
- 例:mix.exsへの:runtime_tools追加の理由も、コミットの流れで納得
イテレーティブな開発とコミットの整理
- fixupコミット を活用し、インタラクティブリベースで履歴をクリーンに保つ
- autosquash オプションで自動的にfixup対象に統合
- コンフリクト解決が困難な場合は 新規コミット作成も許容
- 履歴の一貫性と可読性を重視
クリーンな履歴の価値
- 全コミットがコンパイル可能・アプリが動作可能 であることを推奨
- git bisect によるバグ発見効率の向上
- 大規模コミットやビルド不能コミットは デバッグを困難 に
- ストーリー性ある履歴が 回帰調査やコード理解 に役立つ
コラボレーション成功のためのポイント
- フォーカスしたPR と ストーリー性あるコミット で早期フィードバック
- レビュアーが理解しやすく、 質の高いレビュー が得られる
- 履歴が明快 なため、過去の経緯も追いやすい
- 次回PR作成時は「 レビュアーがストーリーを追えるか」を意識
- 小さな改善から始める(例:300行以内、説明的なメッセージ)
参考リソース
- git blame :各行の最終変更者・リビジョン表示
- git rebase :コミット履歴の整理
- git fixup :過去コミットの修正
- git bisect :バグ導入コミットの特定