今全力で書いてるそれ、クソコードかもよ。

sugitani
·

食傷気味の話題かもしれないが、俺は新卒2年目あたりの2007年にニコニコ生放送を実装した。リーダーとして最初は主にバックエンドを実装していた。

当時はPHPが全盛だった、いろんなフレームワークが出てきたのもこの時期だ。例えばCakePHPやSymfonyは2005年、Zend Frameworkは2006年が初リリースだそうだ。

ただどのフレームワークが良いのか悪いのか、生き残るのかあるいは滅びるのかがさっぱり分からなかった。

大学生の時にmojaviというフレームワークの解説記事を書いたが、それは後継は沢山できたもののあっという間に滅んでしまった。

だからニコ生を作るときは自社で長期で保守できるコンパクトな物を作ろうとおもって自分で書いた。SugiFWと名付けた。当時の全力を尽くしたものだったとおもう。

皆が知ってるとおりニコ生は成長し、大量のコンテンツと文化とお金と雇用を生み出した。

だがSugiFWはクソだった。クソはクソを呼びニコ生は保守が困難なプロダクトになった。得られた結果はこれだ

Scalaに至るまでの物語 - Septeni × Scala 第一回 から抜粋

ユニットテストをはじめとした品質保証のいろはを知らずに、身につける機会無しに突き進んだ結果だ。そういう時代だったと思うし不思議もないし瑕疵もないとおもうが、それでもダメな仕事だ。自分を許すわけにはいかない。

みな偉大なコードだとオブラートに包んだ言い方でこれはクソだといっている。そうだな。

セプテーニ時代

それからセプテーニというところに転職をして GANMA! (iOS/Android)という漫画サービスを実装した。2013年だ。

CTOとしての文化面の改革を沢山行ったが、コード書きとしても、今度こそ自分の誇れるコードを、という思いを込めて頑張っていた。

Scalaを導入し、エリック本を読みDDDを実戦しつつ、アーキテクチャもEric本を意識したレイヤードアーキテクチャに挑戦、テストも整備、ニコ生の時とは比べものにならないぐらい、そこでの開発生活の幸福を追求できるものを目指したはずだった。

資料も残っている GANMA!でDDDをやってみてから1年くらい経った

でもね

クソだったこれも。

2020年のAoyamaさんの Re-architecting in GANMA! から抜粋

詳細はスライドを見ていただきたいところだが、2013年では最新だったレイヤードアーキテクチャが根源の一つだ。

当時はなかった実戦ドメイン駆動設計Clean Architectureによりもたらされた依存性逆転の原則の活用や、それ以降の様々な知識を仕入れた自分からみれば、間違い無くクソだ。

SUGAR時代

SUGARというライブ配信サービスも作った(iOS/Android)。 2017年の話しだ。

GANMA!での反省を踏まえ、かつ新しくもたらされた知識を動員し、少なくとも自分ではかなり悪くない手の入れやすさだと考えている。

現にいまはいろいろあってバックエンドもアプリも1人で全てを保守しているが、疎結合の徹底とテストが編み込まれているので思い切ったこともやりやすく、データベースをPlanetScaleに引っ越すだとか、k8sの利用方法を大きく変えるだとかの重めの保守もほいほいやれている。自分ではかなりの傑作だと思っている。

ではこれはクソコードではないのか?というとたぶんクソだ。

触った方はクソだったと言うかもしれない、そうでも無かったというかもしれない、わからない。でもたぶん、クソだな、と思う人は居ると思う。もちろんクソだなんて過激なことを思ったり言ったりというのは誇張でレアケースかもしれないが、でも古くて欠点が多くてできれば触りたくないなという意識を保つ人はいるだろう。

自分も歩みを止めていない、さらに改善できること、より良い方法や道具があることを知ってしまっている、過去の自分はまだ満足が仕事ができていない。

NUNW時代

NUNWはニューと読む。前職だ。

そこではFOLLOW MEと呼ばれる有料SNSサービスをやっていた。

これもご多分に漏れず辛い状況だった。

沢山の改善をやった

こんなに辛いことになるから、最初にがんばろう / 辛い開発状況をどうにかするためにやった13のこと

という記事に纏めてある。

この記事にはこんなことをやってあんなことをやったと沢山書いてあるが、端的に言うと "いろいろ酷かったので直しているの" という事が書いてある。

ニコ生に対して改善をしている、GANMA!に対して改善をしている、という話しと同列だ。

しかしFOLLOW MEを書いてきてくださったこれまでのエンジニアの方はクソコードを書いていたのか?

たぶん違う、というか間違い違う。全力を尽くして良い物を書こうとしていたはずだ

"事情"が薄く積もっていった、あるいは進んだ世界から観測された、その結果として"改善しなきゃ"と指を指されているだけに過ぎない。

何が言いたいのか

"腕ってやつは、上がってると感じてなきゃダメなんだよ。"

俺は、これまで書いたコードは全部クソコードに見えるのが当然だとしたい。勉強を続け腕を上げ続けたい。短い時間で素早く良いコードを書き、楽しい実装生活を送りたい。

大人だからクソコードだ、なんてことは俺は他人には言わない。言わないけど、自分のコードがクソだと言われたら、そうだよな、今の俺なら俺もそう思うよ、と思いたい。

いまはCQRS+ESでいろいろやっている。興味があれば数日前に書いた CQRS+ESって知ってる?いやー、やらんよねそこまで…とおもってたが? に目を通して戴ければ分かって戴けるかもしれない。

楽しく今の俺が最も進んだ俺だぜ、という気分でガリガリ書いている。

無事にリリースできて、長生きしてくれれば、きっとクソコードだと罵倒される日も来るだろうよ。

おわり。

付録

ずっと昔に書いた 技術的負債について考えた では土台になる部分のクソコードは許すなー的なことを書いてますが、"最初から辛い"か"最初は悪くなかった"の違いということでご容赦くださいませ

@sugitani
ブラックキャット・カーニバル株式会社代表 / SUGAR株式会社元CTO→現顧問 / NUNW株式会社元CTO / 株式会社FLINTERS元CTO / 株式会社ドワンゴ元ニコ生初代開発リーダー github.com/y-sugitani