【果てなき荒野】コードをどこまできれいにするのかの悩み
読みやすいコード/設計にすることはとても素晴らしいことだ。
そんなことは、わかっているんです。
リーダブルコードも読みました。設計に関する書籍も読みました。
エンジニアになって4年ほど経過した、今、きれいごとだけではやっていけない現実と向き合っています。
変遷
私がどんなプロダクトコードたちと向き合ってきたかの変遷を軽く紹介しておきます。
主観的な感想です。
1つ目: 暗黒
リリースしてからおそらく10年位は経過しているサービス。複数の決済手段なのに、決済記録のテーブルが1つしかなかったり、イミュータブルじゃなかったり。使われなくなったコードの残骸があったり、正しい仕様は誰もわかっていない機能があったり。設計思想が入り混じっていて、時代の変遷を感じられるようなプロダクトコードでした。単純に自分の能力もない状態で、崖から落とされた気持ち。暗黒期でした。レビュー終わらない。。。コードをリファクタしてきれいにしようとするにも、既存コードががんじがらめに絡みついてくるような感じです。
2つ目: 設計思想に縛られる
新規プロダクトを0から開発することができました。1つ目の姉妹サービスということもあり、ユーザー認証/決済周りは、1つ目のプロダクトに相乗りする形。1つ目のプロダクトの二の舞いになりたくない!という気持ちがあり、イミュータブルデータモデルにしてみたり〜、ドメイン駆動設計結構がちがちにしたり〜、TypeScript使ってみたり〜、フロントにテスト入れてみたり〜と、色々やりました。
各種感想/反省↓↓
-
イミュータブルデータモデル
シンプルに考えられるので、開発体験は良かったところもあった。しかし、データ取得処理を考慮できておらず、複雑になりがちだった、、。売上/ユーザー動向のデータの取得も結構面倒だった。もう少し緩めにやればよかった。 -
ドメイン駆動設計(仮)
自分自身があまり理解していなかったけど、やれって言われたからやった感が強かった。これ冗長なのでは??と100回くらい思ったけど、そういうものかと思って、頑張って実装した。半年でサービス終了したから、保守しやすさとか感じる前に終わった。 -
TypeScript
はじめてのTypeScriptだったので、はじめの開発体験は悪かった。いちいち型エラーになるので、大変だったが、慣れれば、安心感は得られた。 -
フロントエンドテスト
不安定すぎた。途中で結局なくした。もっといい方法があったはず。輪読会したけど、嫌だった記憶がある。
3つ目: 開放
リリースしてから6年のサービス。途中からの参加という感じで、ゲストの気分だったかもしれません。結構テキトウにやってました。1つ目、2つ目のプロダクトより、設計について思想を持っている人が少なかった?ので、あまり縛られなかった感覚です。(単純に難しい機能を実装しなかったというのもある。)
フロントエンドのアトミックデザインは、何がいいのかよくわからなかったし、同じようなコンポーネントだらけで、それはやだなと思っていた。決済が複数決済手段に対して、1つのコントローラーで頑張っていて、いいような悪いような感じがしました。と思えば、いろいろ大変な部分はあったが、1つ目よりはまだまだまし過ぎて、油断してました。(キャッシュ/広告とか好きな部分もあった)クソコード生み出してすみません。
4つ目: 自由
運良くまた新規プロダクト開発。はじめの5ヶ月くらいは一人での開発かつ、機能も少なくシンプルだったので、開発体験はよかったです。リリースまでの速度優先だったので、テキトウな部分も多々あります。そして、だんだんと辻褄が合わない場面が出てきて、複雑になってきている現状。(ほかプロダクトと比べるとまだまだまし)
答えはない
素晴らしくきれいで、美しいコードにすることが理想ですが、、
現実は残酷で、素早い実装を求められたり、自分の力不足で、クソコードを生み出してしまうことがあります。
また、せっかく時間をかけてきれいに作っても、ビジネス上の理由でサービスが終了してしまうこともあります。サービスは、リリースしてユーザーの反応を見ないことには、どのくらいの寿命なのかわからないのです。予想より、早逝かもしれないし、長寿かもしれない。
どこまでコードをきれいにしていくべきなのか、答えはないし、プロダクトの置かれている状況によって違うのかなと思います。
シンプル & 中庸
今試行錯誤していく中で、大切なのかもしれないと思っていることは、シンプルと中庸です。
-
シンプル
そもそも仕様をシンプルにすることが大切だなと思います。この場合は~~とか複雑な仕様にして、複雑なコードが生まれると、それをきれいにしなくては!という気持ちが生まれますが、、そもそもシンプルな仕様ならば、そこまで複雑なコードにはならないはずです。 -
中庸
古代ギリシャの哲学者 アリストテレスさんの言葉を借りました。やりすぎてもだめだし、やらなすぎてもだめ、という考え方です。自分の中でも、設計にこだわりすぎてはだめで、こだわりすぎなくてもだめ。チーム内でも、ふわふわしてる人ばかりだとだめで、厳しい人ばかりでもだめ。極端に執着せずに、どちらの視点も持って、バランスよくしていく。
まとめ
果てなき荒野を、迷いながら真理を探求していくのだと思います。
Discussion