本記事をご覧くださりありがとうございます。 管理人のコンです。
本ブログでは、私の体験談を交えながら様々な技術の紹介をさせていただいております。
そんな私ですが、最近ようやく「去年の自分のコードよりは、少しはマシになったかな…」と思えるようになってきました。(あくまで個人の感想です)
コードの読みやすさだったり、ファイルやクラスごとに役割をしっかり分けることだったり。まだまだ勉強中ですが、以前よりは管理しやすいコードが書けるようになったと信じています。
そんな私が「これを学んだら、コードの整理整頓が上手くなった!」と感じた経験を、少しお話しできればと思います。
ただし、この記事で紹介する内容は、あくまで工場などの現場でツールを作っていたプログラマーの話です。Webサービスの開発など、専門性の高い職種の方にとっては「レベルが低い」と感じる部分もあるかもしれませんが、その点はご容赦ください。(自信の無さが滲み出ている)
必要な勉強
コード品質を上げる、というのは少し抽象的な言葉ですよね。 機能にバグがないこと、他の人が読みやすいこと、将来の変更がしやすいこと…人によって、またプロジェクトの段階によって重視する点は異なります。
私は、この品質向上の道のりを、大きく2つのステップに分けて考えると分かりやすいと感じています。
- Step1:まず、一本の筋の通ったコードを書く(単一ファイルでの実践)
- Step2:次に、複数のファイルやクラスを連携させる「設計」を学ぶ
このステップを順に踏むことで、無理なくコードの品質を高めていけるはずです。
(デザインパターンなど、さらに高度な話もありますが、今回はこの2ステップに絞ってお話しします。)
Step1:まずは、一本の筋の通ったコードを書く
何はともあれ、まずは自分の書きたい処理を、一つのファイルの中で分かりやすく書けるようになることが全ての土台です。
プログラミングの第一歩は、当然ながら「作りたいものを、意図した通りに動かせる」ことです。
文法や基本的なライブラリの使い方を学ぶ必要がありますが、私がこの段階で特におすすめしたいのが、Udemy講座の「現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル」です。
この講座はPythonの基礎から応用まで情報量が圧倒的で、データベースやWebアプリの基本まで触れてくれます。「プログラマーではなく、ソフトウェアエンジニアを育てるんだ」という気概を感じる素晴らしい講座です。
セールの時は1500円~2000円くらいで買えるので、セールの時を狙いましょう!!
「動く」から「読みやすい」へ
そして、動くコードが書けるようになったら、次に意識するのが「読みやすさ」です。ここで役立つのが、言わずと知れた名著「リーダブルコード」です。
さらにコードを綺麗に書くためには、変数の付け方やネストが深いコードにならないような注意が必要です。
ここで役立つ本が、皆様ご存知の「リーダブルコード」です。
この本が教えてくれる「分かりやすい変数名」「コメントの書き方」「ネストを浅くする工夫」といったテクニックは、言語を問わず、コードの品質を上げる上で欠かせません。
未来の自分や他の人が読んでも理解できるコードを目指しましょう。
Step2:複数のファイルを連携させる「設計」を学ぶ
一つのファイルに読みやすいコードが書けるようになったら、次はいよいよ、より複雑なアプリケーションを作るための「設計」の考え方を学びます。
Pythonで複雑なロジックを扱おうとすると、どうしても一つのファイルが長大になりがちです。そこで、「どのファイルに、どのコードを書くべきか」という整理術が必要になります。 その強力な指針となるのが、ドメイン駆動開発(DDD)という考え方です。
ドメイン駆動開発(DDD)でコードの「置き場所」を決める
ドメイン駆動開発とは、ざっくり言うと、ソフトウェアが扱う「業務領域(ドメイン)」の知識を整理し、その構造を素直にコードに反映させる設計手法です。 この思想を学ぶことで、関連するデータと処理を「クラス」としてひとまとめにし、適切なファイルに配置することができるようになります。結果として、コードの見通しが劇的に良くなり、変更にも強くなります。
私は最初、「ドメイン駆動開発設計入門」という本でこの概念を学び、大きな衝撃を受けました。
この本はC#で書かれているのですが、その本質的な考え方はPythonにも全く同じように応用できます。
例えば、「値オブジェクト(ValueObject)」や「エンティティ(Entity)」といった概念をPythonのクラスで表現することで、コードの責務が明確になり、品質が向上するのを実感できるはずです。
内容は非常に分かりやすく、ドメインオブジェクトを表現するValueObjectやEntityなどの考え方や知識の凝集などが学べて非常にためになる内容です。
個人的にはドメイン駆動開発を学ぶことで、クラスとメソッドを読みやすく書けるようになったかと思います。
おわりに
ここまで読んでいただき、誠にありがとうございます。
今回紹介したステップは、僕自身が「こうすれば良かったな」「これを学んで変わったな」と感じた道のりです。
特に、ドメイン駆動開発の考え方を学ぶ際に、C#で書かれた本を読んだ経験は、結果的に自分の視野を広げてくれました。最近ではTypeScriptにも触れていますが、複数の言語に触れることで、それぞれの言語の思想や得意なことを知り、それが巡り巡ってメインで使うPythonのコードを良くすることに繋がるんだな、と実感しています。
- Python: データ分析、機械学習、Webバックエンドなど、とにかく万能。
- C#: オブジェクト指向やドメイン駆動など、堅牢なソフトウェア設計の知見が豊富。
- TypeScript: 型の恩恵を受けながら、安全にフロントエンド開発ができる。
最後は僕のつぶやきのようになってしまいましたが、この記事が、皆さんがコード品質向上の旅路を進む上での、何かしらの参考になれば嬉しいです。