初めに
こんにちは。CYBIRD Advent Calendar 2023の21日目の担当者の@dave_cです。20日目は@ice_matcha3さんの「ロードバランサの流量調整を動的にやってみた!」でした。
ボーイスカウトルールって何?
最近色々なエンジニアとの話したところ気ついたのが、あまり知られていない方針だそうですので、記事を作ろうと思いました。この方針に応じてコードの品質をアップできると思います。
プログラミングにおけるボーイスカウトルールとは、開発者が見つけたコードをより綺麗な状態にしておくべきだという原則です。名前は、アメリカのボーイスカウト団体のモットー「Leave No Trace(痕跡を残さないようにする)」から来ており、自然を訪れた時よりも良い状態にしておくことを奨励しています。
Robert C. Martin (よりUncle Bobの名前でよく知られている)によると「Clean Code」の方針の一部となっています。
プログラミングにおいてボーイスカウトルールを適用するということは、開発者がコードの一部を作業するたびに、リファクタリング、最適化、または改善する機会ことです。たとえ、その部分のコードベースに直接関連しない主要なタスクであっても、次のようなことが含まれます。
- コードをより読みやすく、モジュール化された状態にリファクタリングする
- 変数や関数の名前を、目的をよりよく反映するように改善する
- 不要なコードや使われていないコードを削除する
- コードを理解しやすくするために、コメントやドキュメントを追加・更新する
- パフォーマンスやリソースの使用を改善するために、コードを最適化する
- 小さなバグを修正したり、技術的負債に対処したりする
- テストがないコードに対してテストを追加する
など
重要なのは、処理自体を変わらないように注意が必要です。
そして、該当のタスク以外の修正をするとしたら、レビュアー、他のチームメンバーを混乱しないようにPRを作るときにちゃんとそれの理由を教えることです。
ボーイスカウトルールに従うことで、開発者は徐々により綺麗で保守性の高い信頼性のあるコードベースに貢献することができます。この慣行は、開発者だけでなく、コードの理解や保守に必要な時間と労力を削減できるため、チーム全体にも利益をもたらします。
ボーイスカウトルールの問題
エンジニアは多くの場合、品質への配慮が限定的かまったく考慮されず、時間制限の下で働くことを強いられます。短期的な成果に重点を置くと、将来の生産性のボトルネック、つまり技術的負債が生じます。悪循環です。
私たちはできるだけ早くリリースすることを目指しているため、品質をあまり気にせずに新しいコードを追加します。これにより、今後の作業がより困難になりますが、それでもすぐにリリースしたいので、コードを綺麗にしません。さらに、問題を作成し、問題にフラグを立ててスプリントに追加する簡単な方法がない場合、問題のあるコードをコードベースに残すと、時間の経過とともに技術的負債が増加します。 待つ時間が長くなるほど、コードをクリーンアップするのが難しくなります。コードの健全性は悪化し続け、最終的には選択肢がなくなり、大規模なクリーンアップを実行する必要が生じ、最悪の場合、開発がしばらく完全に停止することになります。これらはすべて、ソフトウェアの品質への投資はコストに見合わず、リリースまでの時間が遅くなるという誤った信念によるものです。
ボーイスカウトのルールを適用することでサイクルを断ち切ることができますが、実際に適用するのは簡単ではありません。
問題をより明確に理解するために、少しエンジニアの立場になってみましょう。
タスクを割り当てられました。 計画時に見積もりを約束したため、一定の期間内に作業を終わらせる必要があります。 目標を達成して予定どおりにビジネス価値を提供したいと思っていますが、コードよりも綺麗にして残したいです。これにより、チームメンバーや私が後でコードに取り組むことが容易になります。 今後の作業をより迅速にリリースできるようになり、品質も向上するため、ビジネスに利益がもたらされます。
しかし、コードを綺麗にするのためどれくらい時間を使ってよいのかをどうやって分かりますか? 最も価値があるものを特定するにはどうすればよいですか? コードベース全体をクリーンアップすることはできません。
答えるのが難しい質問です。作業をどれだけ早く完了できるかによって異なります。また、選択肢の箇所が多すぎると、さらに最も価値のあるものをいくつか特定するのは困難です。
上記のことを踏まえると、どのような行動を取ればよいでしょうか?
クリーンアップしすぎてリリースが遅れる可能性があります。逆に、いくつかのことをクリーンアップするかもしれませんが、「もっとも重要なものはクリーンアップしません」という危険もあります。
コードをより良くするための3段階の戦略
コードをクリーンアップするためにすべての開発プロセスを停止する必要がある状況を回避するには、エンジニアチームが次のボーイスカウト規則の拡張版に従うようにしてください。
- すぐに修正できる小規模な技術的負債やコードベースの問題が見つかった場合は、すぐに修正してください。
- 修正に時間がかかる可能性がある問題、または確信が持てない問題が見つかった場合は、コードに FIXME/TODOコメントを残して、チケットを作成します。
- 大きな問題を継続的に追跡し、優先順位を付けてスプリントの一部に追加します。
こうすることで、常に発見したときよりも優れたコードを残し、健全なコードベースを得ることができます。
まとめ
サッカーの場合では、日本チームが世界中に更衣室が前より綺麗な状態に残されるで知られていると思いますが、コードの場合でも来年に向けてそうしたいと考えています。
最後に
CYBIRD Advent Calendar 2023、 明日は@yoooosuさんの投稿です。ぜひ、それもご覧ください!