猫でもわかるWeb開発・プログラミング

本業エンジニアリングマネージャー。副業Webエンジニア。Web開発のヒントや、副業、日常生活のことを書きます。

「良いコード」「良い設計」は環境でも変わる

例えば、最近僕が体験した事例を挙げると、

Dataflow の例

Google Cloud Dataflow のパイプラインを実装していた。Dataflow その名の通りデータ処理を行う基盤で、例えば、データベースから取ってきたデータを CSV に変換して Google Cloud Storage や AWS S3 にアップロードする、といったコードが書ける。

Dataflow は各処理のステップに名前をつけることができる。例えば、データベースからユーザーのデータを取ってくる処理に「Fetch User Data From Database」とつけたり、CSV に変換する処理を「Transform User Entity to CSV」とつけたりできる。

一般的には、「Fetch User Data From Database」を「Fetch Database」や「Fetch User」と省略するとわかりづらくなるので、通常は「Fetch User Data From Database」のように、必要な情報が全部得られかつ簡潔な名前がいい。

ただし、Google Cloud Dataflow の UI では、ステップ名が15文字程度しか表示されず、溢れた分は表示されない。この場合は「Fetch User」のように、多少情報が欠落していても、UI上でちゃんと表示される名前が良い

interface の例

例えば、DDD (ドメイン駆動設計) を取り入れて「依存性の逆転」を導入したとする。データベースのアクセス部分について interface を使って、Domainレイヤーが Infrastructure レイヤーに(コードの見た目上は)依存しないようにする方法だ。

一般的にはいい設計であると言われるが、IDE でコードジャンプする際に一回 interface を挟むことになるため、効率が悪くなってしまう

それでも interface を使った方がいい場合もある。その方がテストのモックを注入しやすくなったり。ただ、私はあまり interface 好まない。素直にコードジャンプできる方が嬉しい。

私の経験上 interface を効果的に使える人間は少ないので、interface を導入するメリットよりも、IDE で一発でコードジャンプできるメリットの方が圧倒的に大きいと思う。

さいごに

このように「良いコード」は Google Cloud や IDE の仕様など、周りの環境に大きく左右されるし、Google Cloud や IDE の仕様が変われば「良いコード」も変わる可能性がある。