そう、そう。
だからあと、設計にその手小柄する部分どこだっていう、そういう戦略的なところも考えなきゃいけないので、それを選択してここにコストかけますとかっていうような交渉とかしなきゃいけないですし。
それから、あと何でしょうね、やっぱその辺の設計をうまく回すためには組織どうするのみたいな。
特に僕はDDDやってるんですけど、DDDっていうとやっぱりビジネスサイドの人とのコミュニケーションを三つに取らなきゃいけないんで。
コミュニケーション設計どうするんだよって、そこのコミュニケーションがどうしても素になると、やっぱりそれが品質にも非常に影響してくるので。
そこの取り計らいもしなきゃいけないしとかってなると、結局組織の話だとやっぱり政治家よみたいな。
全体的に政治をやらなきゃいけない。
いや、ほんとめちゃくちゃ気持ちがわかるなっていうのが、僕も普段やってることは何かっていうと、リモートなんで、うちはフルリモートなので、コミュニケーションは基本スラックになるんですよ。
これだけだとやっぱりアーキテクトとしてやっぱり組織と馴染んでいくの厳しいんで、ハドルが空いてれば必ず突っ込んでってとりあえず喋るみたいなのを常日頃からやって、
なるべく開発チームと離れないようにみたいな、なるべく親近感を持ってもらうみたいな。
僕はあなたたちに苦しめようなどと思ってはいませんと。
どちらかというと味方ですみたいな。
そうです、大事ですね。
ソフトウェアって必ずしも技術力を生むだけでそうなったのではなくて、CEOとかPDMとかがいて、
その組織の形がありつつ、なんとかかんとか世の中の何かを自動化するなりやんなりして、お金を稼ぐ装置になっていったっていう根的思想があるじゃないですか。
それを無視しちゃうと改善できないんですよね。
それすごい難しいなって本当に毎日頭悩ませてますね。
歴史的な経緯とかっていうところも調べなきゃいけなかったりとかして、
私は考古学者なんですか?みたいなところもありますよね。
考古学ですよね。スラックの過去ログとかを延々と漁って。
なるほど、こういう経緯でこうなったのかな?みたいな。
この人いるのかな?みたいな。
ああ、いないみたいな。
いないね、もういないね。
そうそう、だいたいいない。
そうか。
やっぱりじゃあ大体やることが一緒なんだな、きっとっていうのがすごく。
まあ多分そういう。
で、アーキテクトって僕そんな仕事やってないんですよとか言ってても、
必ず組織に押している課題っていうのは、
誰がそれを拾ってやるかとかっていうの関係なしに存在していて、
だから何かしらその賜り類とか、課題解決しにいってるんですよね。
だから、うちの会社アーキテクトなんていませんよとか言っても、
誰かしらそれに相当することは一人ないし誰かが多分やってるはずなんですよね。
やってる。
ただやっぱりそれを戦略的にコントロールしようと思ったら、
やっぱりちゃんと専門的な知識を持って、
ちゃんと組織立てて、ちゃんと系統立てて、
やっぱり解決しにいくっていうことが必要なので、
やっぱりそれはちゃんとアーキテクトっていう人を置いて、
立ち向かった方がいいのかなって思いますね。
逆にそういうのがないと、うちは全然設計に対して無関心みたいな。
設計っていうものを系統立てて、
戦略的に解決するっていうところを内外に示せなくなるんじゃないかなと思うんですよね。
そういう課題が押してることすらもしかしたら気づけないかもしれない。
そういう明治的に設計とかアーキテクトとか、
いうのをちゃんと立てておかないと。
と思います。
いや、ほんとですね。
RailsとかNHPだとLaravelっていうRATのラピッドアプリケーション開発のフレームワークがあるんですけど、
あいつらで作っていって、
オールマッパーついていて簡単にVC作れますよみたいな。
ほとんどの必要となるような機能がありますっていう状態で作っていって、
たぶんある程度のところまでは人間の脳にうまく収まるぐらいのレベル感のソフトウェアのサイズになってるのかなって思っていて。
あるときすごい事業がうまくいって売れ出すと一気にやっぱ跳ねるんですよね。
機能も増えるし、人も増えるし。
データ量が一気に増えて、どんどん破綻していきますよみたいな。
それをどう戦略的に食い止めていくかみたいなところが腕伸びするところになるんだろうな。
ある何かしらの敷地を超えると、
なんかそうなっていくんですかね。
最初は十分コントロールできるレベルのシステムの規模だったり、データの規模だったのかもしれないんだけども、
なんかそれが一気にガッと大きくなってきて、
あれ?なんかだんだん集中がつかなくなってくるみたいな。
だんだん少しずつ手遅れになってくるみたいな。
そうなんですよね。
いやもう本当、本当だから、大変だな。
なんかあんまり詳細は言えないことが多いな。
あ、そうそう。
りのくぞさんとかって、メトリクスとかってなんか取ったりしてますか?アーキテクチャの改善のために何か。
取ってますね。
例えば何ですか?うちとかだと循環複雑度とか、
今最近入るだと4Kとか取って、なんとなく外形的にソフトウェアの良し悪しみたいなところを見てるんですけど。
うちはCodeClimate使ってますね。
なるほどなるほど。
CodeClimateってのはGitHubのリポジトリと連携して、
そのメトリクスを自動で計測してくれるオンラインのサービスなんですけど。
それ使うと自動で負債をスコアリングしてくれたりとか、
あと時系列で負債の増減をグラフ化してくれたりとか。
いう風にしてくれるんで、それで悪くなった部分を、
メインのブランチにコミットされるたびに、
自動で計測が走ってくれるんで、
だから何か品質が悪くてすぐに検知できるんですよね。
じゃあ負債になった部分を全部対処するかって言ったらそうでもない。
見た上でこれは対処しなきゃいけないなとか、
これはちょっとあまり、確かに負債ではあるけども、
ここやってもあんまり何か上手味が出ないよねみたいな感じで、
どれ全部やるんじゃなくて、
戦略的に取捨選択していくって感じですね。
やっぱりそういうリズメでできる部分もあるっていう感じですよね。
そうですね。
うちもMetrix撮り始めて、
ずっと最近は循環複雑を撮ってて、
結構面白いですよね。
この間マージされたやつで1位が入れ替わったみたいな、
悪い1位ですけど。
撮ってなかったらあんまりそういう話ができないんだけど。
撮ってるとリズメでそういう話ができる。
計測は制御の基本ですからね。
そうですね。
それはなんかやっぱり僕としてもやっぱり同じ感じで、やっぱりなり手がすごく少ない。
うーん。
そういうのもあって、周囲になかなかご理解してもらえないっていうのもあるんじゃないかなと。
普通に仕事やってるとやっぱり仕様を満たすようにソースコードを書くっていうので、
一番の近道はトランザクショナルスクリプトなんだなっていう気はちょっとやっぱすごかったですね。
目の前に一つ何気ない文献文記を置いて、循環的複雑の位置上げるっていう。
いやいやいや。
1コミットずつ繰り返すと、いつの間にか大きくなっているみたいな。
波動犬ができちゃうわけですね。
波動犬ができちゃうわけですね。
いやもう、これは言って大丈夫かな。
こないだみんなと設計話とかをしながら画面共有して見てた時にパッて開いたら、
息のいい波動犬。みんなまだ見たことない波動犬。
会社で発見したやつが大爆笑でした。こんな綺麗な波動犬があるんだ。
それはひどいな。
昔の本なんですけども、質の悪いコードは東風から見たらすぐわかると。
モニターを東風から見るとコードが左右にうねってるんだと。
左右にうねってるからそれすぐわかる。
だから品質が悪いかどうかを少し離れて見ろっていうのが何かの本に書いてありました。
なるほど。すごいですねそれは。
プログラミングトポロジーみたいな文字列の構造で。
エディターで折り返し設定しないと永遠に右スクロールが終わらないみたいなコードありますよね。
引数めっちゃ多いみたいなパズルがありますからね。
僕なんかもうトランザクションスクリプトパターンで書くのも気持ち悪くて。
もちろん設計っていうものを何も知らなかった頃っていうのは別にそれに対してあまり違和感を覚えなかったんですけど、
今それを書こうと思うとすごい無視図が走るんですよ。
普通にちゃんとデータの普遍条件とかオブジェクトの普遍条件とか考えて書くっていうのが普通に当たり前みたいな。
それで慣れちゃったらそっちで書く方が全然早くて、
逆にトランザクションスクリプトで書く方が気持ちは悪くて手が止まっちゃうんですよね。
僕もテストから書くんで、トランザクショナルスクリプト的な形だとテストしにくくてしょうがない。
やっぱ書けないですよね。どんなに簡易的に粗雑に一個目動くように作るんですけど、
それでもやっぱある程度もう形が分かれた状態になるようになる。
そうですよね。人の行動を受け継いで1メソッドが2000行くらいあったりするとやっぱこうきますよね。
2000行ってバケモンですね。クラスだったら分かるんですけど、メソッドが?みたいな。
そうそう。これは実に見事だみたいな。
僕も脳内メモリーがすごい貧弱なんで、200行とかエディターの縦の画面に収まらないと乗らないんですよね、メモリー。
脳内メモリーが少ないっていうのは、それは僕は良いことだと僕は思ってます。
むしろ、中にはそういうキャッシュメモリーがすごく多い人がいて、
いますよね。
こんな長いコードでも普通に乗りますけどっていう風に自慢してくる人がいますけども、
でもみんなあなたのような人なんじゃないですよって。
普通はマジカルナンバーフォーって言って、普通は人間が一度に同時に把握可能な個数っていうのは大体約4個だっていう風に言われてます。
だから僕はこれ身の黒本にも書いたんですけども、
一クラス内で取り扱う概念は大体4個以内に収めましょう。
そうすれば一クラスでは大体100行くらいあって、多くても200行くらいになったものなんですよっていう風なことを書いてて。
それ以上になると普通の人にとって認知負荷が爆発して、記憶に負荷がかかって、何書いてんのこのコードってわかんなくなっちゃうわけですよね。
やっぱりシステム開発っていうのはたった一人でやるんじゃなくて、
要するに目の前の仕様を満たすために構造とかは無視して、仕様を満たすだけのコードを書く人ですね。
コメントが早く、開発スピードが早く、フロントって言ってるのはフロントエンドではなくて、
PDMとかPMとか、プロダクトオーナー側からは受けがいいと。
とにかく動くものをすごく早く作れるから、ビジネスサイドからするとあいつは天才だなんだけど、
エンジニアからしてみると技術不細の塊をドカンって残していく人だから、
エンジニアからは嫌われるみたいな人を、戦術的プログラミングのゴンゲっていう意味でタクティカルトルネードという風にその本を読んでる。
そういう風にして複雑性が増していくんですよ、みたいな。
でもすごい、その本の、書者の人がお知り合いなのかどうかわからないですけど、
Facebookで動くからリリースしようぜっていうのは、多分ベンチャーとかではすごく有効な指標だったと思うんですけど、
結果としてFacebookは複雑性に耐えられなくなって、今はすごくちゃんと設計するようになったと。
その結果、リアクトとか、PHP界隈でいうと、PHPの新しいものを、ヒップホップJS、
名前が出てこなくなっちゃった。
ヒップホップVM。
新しい。
ハック。
ハックを作ったりとかっていうことになったんで、やっぱりよく考えて書いた方がいいんだろうなっていうな。
その本でも耐性するにはどっちのやり方でも成功はするけども、
エンジニア的にはちゃんと設計した方が幸せになるよね、みたいなことが書いてあった気がします。
まあでも言うて、変更容易性を高めるような設計っていうのは、
長いスパンをかけて価値を発揮する、経時変化で発揮していくものなんで、
そういうスタートアップとか、序盤ではある種ちょっとコストってか、
最初にスピードを発揮できない重荷にしかどうしてもならないっていうのはどうしても厳しいところですよね。
そうなんですよね。
だからスピードも持ちつつ、変更容易性もある程度担保しながらみたいな、
トレードオフを上手にできるレベルのプログラマーってなるとやっぱり、
もう本当にやっぱ数が少ないっていう感じはしてしまいますね。
で、まあ悪口でもなんでもないですけど、やっぱりララベルでもレールズでも、
やっぱ酷いコードは大量に生み出されていくのが見えているので、
って感じがしますね。
いやーそりゃそうだよなと思ってリリースしたいもんだって。
しょうがないと思う。
やっぱりその辺、スタートアップ時はどうしてもやっぱりソフトウェアの品質属性っていろいろあって、
どれもトレードオフになるので、スタートアップの時はやっぱり機能性、
要は顧客にどんだけ利率するかっていう指標ですけども、
それを重視しつつも、でもそれだけだとまずいから、
最低限品質を保てるように変更用意性に少しだけコストかけて、
だんだんシステムのスケールに従って、
だんだん変更用意性の方に少しずつコストかけていくみたいな感じで、
そういう品質のコントロールできる人が必要なんですよね。
でも、あんまりいないですよね、たぶん。
いないですよね。
大抵がーって炎上してから誰か助けてくれーみたいな。
そうそうそうそう。
大抵その時は天越えしてるっていう感じですよね。
でも1回目の助けてくれーできちんとリプレイスできたら、たぶん。
その後10年くらいはきっと幸せになるみたいな。
やっぱすごいなぁ。
最初の話題でもう45分が過ぎてしまった。
本当だ、15分くらいで終わっちゃうよ。
すごくいい話ができたなと思って。
そうですね。だから概念は知ってもらいつつ、
あんまり中二にならないようにみんなと仲良くして。
目の前にある生きたコードが一番の材料だと思うんで、
それで改善していってもらうと一番いいですよね。