僕が今回re:Invent 2024に参加して一番良いと思ったセッションはAmazon CTOであるDr.WernerのKeynoteでした。
彼のKeynoteはSimplexityについて話でした。動画は公式サイトでも見ることができますし、内容はいろいろなブログでも紹介されているので、ここでは割愛します。
そのKeynoteで紹介されていたLessons In Simplexitiy
は組織やアーキテクチャだけでなく、「見通しのいいコード」を文章化したものだったので、ここで紹介したいと思います。
「見通しの良いコード」とは
まずはじめに、僕は見通しの良いコードが好きです。
ただ、見通しの良いコードは状況によっても変わり、文章化することも難しく、主観的な部分が多いので僕の中でもうまく言語化(一般化)できずにいました。
ただ、コードを読んだときにそのコードが何をしているのかがすぐにわかるコードは明らかに見通しの良いコードだと思います。
そんな中、Dr.WernerのKeynoteを見て、「見通しの良いコード」を言語化することについてのヒントを得ることができました。
Keynoteの Lessons In Simplexity で紹介されていた6つの教訓
Dr.WernerのKeynoteでは、Amazon、AWSがこれまでにSimplexityを通して学んだという、以下の6つの教訓が紹介されていました。
- Make evolvality a requirement
- Break complexity into pieces
- Align organization to architecture
- Organizize into cells
- Design predictable systems
- Automate complexity
Keynoteを見ているうちに、これらの教訓が見通しの良いコードを言語化したものではないかと感じました。 それぞれの教訓について、見通しの良いコードを書くためのヒントとして考えてみます。
- Make evolvality a requirement
これはコードの拡張性を意識することと言い換えることができると思います。
例えば決済実装でクレジットカード決済だけをサポートする要件だったとしても、将来的にQRコード決済など他の決済方法を追加する可能性があるかもしれません。
それを考慮して拡張できるように考えることで、必然的にコードが関数やクラスなどに分割されていくことになると思います。
- Break complexity into pieces
これはそのままですね。複雑なコードを関数やクラスなどに分割することで、コードの理解がしやすくなります。
- Align organization to architecture
これは、Keynoteでは組織の話でしたが、Clean Architectureなどのアーキテクチャを利用してコードの責務を明確にして分離することが、コード理解のしやすさに大きく影響すると思います。
- Organizize into cells
これも コード実装という観点では「Break complexity into pieces」に似ています。
Keynoteではセルベースのアーキテクチャにすることで影響の範囲を最小化する、その上でセルのサイズを考えることが大事と紹介していました。
コード実装に関してはクラスや関数の拡張性や柔軟性を保ちつつ責務をいかに小さくできるか、というようにバランスを取ることが大事と読み替えることができると思います。
- Design predictable systems
これはまさに「見通し」の良いコードを表していますが、関数、クラス、変数、その他コードに現れるすべての「名前」をきちんと考えることが大事だと思います。
- Automate complexity
最後は自動化の部分です。自動化はあらゆるところで重要ですが、見通しの良いコードという観点では、僕はテストコードを書き、自動テストを行うことが非常に重要だと考えています。 なぜなら見通しの良いコードは、テストも書きやすいように適度に記述や責務が分割されている場合が多いからです。 あとは見通しの良いコードとは直接関係無いですが、テストコードを読むことで実装を理解できる時もあるので、バグを防ぐだけでなく、コードの理解という意味においてもテストコードは非常に重要だと思います。
まとめ
re:Invent 2024のDr.WernerのKeynoteは、アーキテクチャやサービス設計だけなく、コードを書く際にも参考になる教訓がたくさん詰まっていました。
コードは自動生成する機会も増えましたが、アプリケーションコードのアーキテクチャやデザインパターンはまだまだ人間が判断する必要があります。
Dr. WernerのKyenoteからヒントを得ることができたので、これからコードを書く際やコードレビューを行っていく上で大いに参考にしていきたいと思います。