📖

クラウドワークスで案件を受注して思ったこと。。

2022/01/09に公開

今回は技術的な記事、、ではなく2021年のちょっとした愚痴となっております。
2021年は、8件ほど案件が取れました。
その中でもPHP(Laravel)とJavascriptの案件を多く取ることができました。

低単価であるためがっつり稼ぎたいっていう人には向いてませんが、副業で小金稼ぎをしたいという人にはPHPとJSはいいのかなと思います。
機能追加やシステムの改修を主に受注していました。その中でも、「Fat Controller」 が目立ったと思いました。
そうなる原因の一つとして、DDDやクリーンアーキテクチャの概念をそもそも知らない。もしくは、納期的な関係から設計デザインを組み込むことができなかった。
この2パターンが考えられると思います。

こちらのお題を取り扱うことは非常に難しいですが、「Fat Controller」が必ずしも悪といった記事ではないということは伝えたいです。
私自身も、卒業研究で校内のグループウェアシステムを開発した際にFatなControllerをたくさん作ってしまいました。
その時はDDDやクリーンアーキテクチャといった設計の知識がなく、ただ、Controllerに処理を書くModelに処理を書くといった感じでコーディングを進めていきました。
結果として、校内で優秀賞をいただくことができましたが、現在そのコードを見るとひどいことになっています。(何度かリファクタを試みましたが挫けましたw)

ではなぜ、Fat Controllerではダメなのでしょうか?
それは簡単です。「コードの可読性」 が落ちるからです。
サービス(Webアプリやスマホアプリ)というのは作って終わりではなく、継続的に半永久的に改善していくものです。
この可読性が落ちることで、今後のサービス保守に多大なダメージを与えます。

ある程度アプリを作れるほどの実力につけられたなら、設計について学ぶのがいいのではないかと考えました。
幸いにも私は専門時代にユースケース記述からロバストネス図やシーケンス図、クラス図までを学習していて、DDDやクリーンアーキテクチャを勉強した際に、この辺りが重要になるといったことが分かりました。(他にもアーキテクチャはたくさんありますが、、、)

設計は書かないにしても、service, repositoryなどの役割に分けて開発をしていくだけでもFatなControllerは避けられるのかなと感じました。
useCaseやbinder, presenterなどはシステムの規模に応じたり、言語に応じて採用するかしないか決めてもいいのかなと思います。(クラウドワークスでの案件の話をしているので実際の現場ではこう!といったコメントは避けていただきたいです。)

技術的なことを記事にするとすごい長い記事になってしまって読むのが億劫になると思い短い記事にしました。
この記事を書いて、ただアプリが作れるエンジニアっていうのは価値がないのかなと考えています。この先もエンジニアとしてやって行くのであれば多少は身につけていかなければならない技術かなと思っています。
また、私もまだまだ実務経験がないので自分自身への戒めといった記事にもなっております。

参考サイト

成瀬さんの信者ではありませんが、とても分かりやすい記事だったので載せておきます。
特にクリーンアーキテクチャの動画は見やすかったです。

https://qiita.com/nrslib/items/a5f902c4defc83bd46b8
https://nrslib.com/adop/https://nrslib.com/adop/
https://nrslib.com/bottomup-ddd/https://nrslib.com/bottomup-ddd/

Discussion