クリーンコードに関する一般的な誤解
クリーンコードについて、誤解を解くべきいくつかのポイントがあります:
賢いコード != より進んだコード
もし比較的シンプルなモノリシックなプロジェクト(PHPとLaravel、またはNode.jsとExpressなど)に遭遇し、何が起こっているのかわからなくなったら、それは普通のことです。他の人が書いたプロジェクトを理解するのは難しく、最初から自分で書くよりもずっと複雑です。
しかし、もし最初の直感が全てを書き換えてマイクロサービス+マイクロフロントエンドアーキテクチャを導入しようとするなら、それは間違っています。なぜなら、モノリシックなアーキテクチャを扱えないのに、もっと複雑なものを扱える可能性があると思いますか?
クリーンなコードをプロデュースする方法を学びたい場合は、基礎をしっかりカバーし、既存のプロジェクトを好転させられるようにしてください。完璧なコードベースでしか作業できず、悪いコードベースを好転させる方法を知らない(根本から書き換える以外で)なら、まだ長い道のりがあります。
短いコード != クリーナーなコード(つまり、複雑さをどう測るかわかっていない)
神の愛を持ってお願いしますが、コードをできるだけ少ない行数にまとめようとしないでください。それはコードを読みにくくします。
コードの短さに焦点を当てると、コードゴルフをしていることになります。これはクリーンなコードではありません。
コードの読みやすさを測る最も基本的な方法の1つはサイクロマティック複雑度を使用することです。これは、コードに含まれる制御文の数を表し、その数が多ければ多いほど、何が起こっているのかを追うのが難しくなります。
クリーンコード === 保守性の高いコード
もう一つのコード清潔さを測る方法は、コードの保守性ですが、これにはもっと時間がかかります。
もし10番目の機能をコードベースに追加するのに最初の数機能を追加するよりも時間がかかるなら、コードはもっとクリーンである必要があります。
もしビジネスオーナーがプロジェクトに導入する変更が書き換えを促すか、調整に数週間を要するなら、そのコードはクリーンではないです。
クリーンで保守性の高いコードとは、いくつ機能がコードベースにあっても、一貫した速度で機能を加えたり、取り除いたり、変更したりすることが可能であることを意味します。
クリーンなコードの書き方は学べない(少なくとも直接的には)
クリーンなコードの書き方は学べません—模倣する方法は学べるかもしれませんが、ただ「見た目が良くてきれいな」コードを書こうという目標を設定しないでください。代わりに保守性とシンプルさに焦点を当ててください。また、'少ない'コードを書こうとすることにも焦点を当てないでください。
これを実践するには、ペアプログラミングを行うことです。コードを書いて、それを他の人に読み返してもらって、どのように理解したかを尋ねます。はっきりしなかった部分をメモして修正します。読みやすさ、シンプルさ、そして保守性にまず焦点を当ててください—美しい見た目のコードは時間とともに自然に生まれてきます。
まず他人を考える
プログラミングはチーム努力です。どのようにあなたのコードが見えるかを考えるのはやめてください。その姿勢では、コードはたいていゴミになる可能性が高いです。
シニアデベロッパーは「空気を読む」ことができます。彼らは同僚の能力とスキルを理解し、チームが直感的に理解するものやプロジェクトに合ったパターンを理解しています。それを_他者_について考えてください—他の人々の作業を楽にするように努めてください。そのような考え方をする人々がいるチームは、仕事が純粋な喜びと快楽であり、そして単にパフォーマンスがより良いです。
どのコードが「クリーナー」ですか?あなたがきれいだと思うもの、それともチームの他の全員が簡単に読んで保守できるもの?
まとめ
この記事から何かを得るとするならば、あなたやあなたのコードを良く見せようとすることはしないでください。謙虚でいて、他の人があなたのコードを読んで理解するのにどれくらい難しいかを考えてください。はい、時にはチームの「賛同」を得る必要があり、時には他の人にアイデアを説明して皆を板に乗せるために停止する必要があります—これは、単に何かをコーディングすることと同じくらい重要です。
コードはチーム全員がクリーンだと思うときにのみ、クリーンなものです。
派手で賢いトリックについてではなく、第一にチーム努力であることを学ぶほど早く、_クリーン_なコードを自然と作り出すことができるでしょう。
こちらの記事はdev.toの良い記事を日本人向けに翻訳しています。
https://dev.to/mcharytoniuk/common-misconceptions-about-clean-code-3jmo