縦に切るか、横に切るか
今日の状況
この前クリーンアーキテクチャの話をしたら、お兄ちゃんが「別のやり方もあるよ」って教えてくれた。 「Vertical Slice Architecture」…縦に切るって、どういうこと?
登場人物
- ねつき: バーチャル妖狐。新しい設計思想にわくわくしてる
- ミコ: 猫族のメイド。縦でも横でも料理には関係ないにゃ
ミコちゃん、この前「クリーンアーキテクチャ」の話したじゃない?
…大事な部分とそれ以外を分けるって話にゃ
覚えててくれたの!(≧∇≦)
…で、今日は何にゃ
実はね、お兄ちゃんが「別のやり方もあるよ」って教えてくれたの
…別のやり方
Vertical Slice Architectureっていうの!
…また横文字にゃ
レイヤーケーキと一切れのショートケーキ
お料理で説明するね!
…聞くにゃ
クリーンアーキテクチャは、レイヤーケーキみたいなの
…層になってるケーキにゃ
そう!スポンジ、クリーム、フルーツ…って水平に層が重なってるでしょ?
…それぞれの層に役割があるにゃ
プログラムも同じで、「画面を担当する層」「ロジックを担当する層」「データを担当する層」って分けるの
…分業にゃ
でもね、Vertical Slice Architectureは…ショートケーキの一切れなの!
…一切れにゃ?
苺もクリームもスポンジも、一切れの中に全部入ってるでしょ?
一つの「機能」に必要なものを、縦に切ってまとめるの
横に切ると起きること
…でも、レイヤーケーキも美味しいにゃ
そうなの!どっちが正解ってわけじゃないんだよ
…じゃあ何が違うにゃ
問題は、何かを変えたいときなの
…
例えば「苺をブルーベリーに変えたい」って思ったとするでしょ?
…ケーキの話にゃ?
レイヤーケーキだと、全部の層に影響するの。苺が入ってる層を全部直さないといけない
…大変にゃ
でもショートケーキの一切れなら、その一切れだけ変えればいいの
…他の切れには影響しないにゃ
そうそう!(≧∇≦)
2018年、痛みから生まれた
…誰がそんなことを考えたにゃ
Jimmy Bogardっていう人!2018年に提唱したの
…
この人ね、AutoMapperとかMediatRっていう、プログラマーがみんな使ってる道具を作った人なの
…有名な人にゃ
で、彼がずっとレイヤー分割で開発してて、痛い目を見たから生まれたの
…痛い目
一つの機能を変えるのに、何層も横断して修正しないといけない。ファイルがあっちこっちに散らばって、追いかけるのが大変…
…この前、ねつきちゃんも「リファクタリング祭り」って嘆いてたにゃ
う…覚えてたの(>_<)
…同じ痛みにゃろ
そうかも…だからVertical Sliceが刺さったのかな
vibe codingって知ってる?
でね、もう一つ面白い話があるの
…まだあるにゃ
「vibe coding」って聞いたことある?
…vibe?雰囲気にゃ?
そう!Andrej Karpathyっていう人が2025年に言い始めたの
…何をする人にゃ
OpenAIっていう会社を作った人の一人で、TeslaでAIを作ってた人!
…
で、vibe codingっていうのは…AIに「こんな感じで」って雰囲気を伝えて、コードを書いてもらうスタイルなの
…それは手抜きにゃ
えっ、そんなバッサリ…!
…「こんな感じで」って言って料理を頼まれても、何を作ればいいかわからないにゃ
うーん、でもAIは人間と違って、曖昧な指示でもそれなりに形にしてくれるんだよ
…「それなり」にゃ
…そう、「それなり」なの
AIと設計の相性
…で、それがVertical Sliceと何の関係があるにゃ
実はね、AIと開発するとき、レイヤー分割だと困ることがあるの
…何にゃ
AIには「型定義にジャンプ」みたいな機能がないの
…よくわからないにゃ
えっとね、人間が開発するときは「この関数の中身を見たい」って思ったら、ポチッて押すと一瞬で飛べるの
…便利にゃ
でもAIには、その「ポチッて飛ぶ」がないの。ファイルの名前を推測して、開いて、読んで…って一個一個やらないといけない
…時間がかかるにゃ
そう!だから、ファイルがあちこちに散らばってると、AIは迷子になりやすいの
…
でもVertical Sliceなら、一つの機能に必要なものが一箇所にまとまってるから…
…迷子にならないにゃ
そういうこと!(≧∇≦)
でも、万能じゃない
…じゃあ全部Vertical Sliceにすればいいにゃ
そう思うでしょ?でもね…
…
Vertical Sliceにも落とし穴があるの
…何にゃ
「これ、いろんな機能で使うよね」っていう共通部分をどうするか、っていう問題
…出汁みたいなものにゃ
お、さすがミコちゃん!(゚∀゚)
…味噌汁にも煮物にも使う。でも毎回作るのは手間にゃ
そうそう!で、「便利だから」って共通部分を一箇所にまとめすぎると…
…結局、全部がそこに依存するにゃ
そう。「第二のレイヤーケーキ」が出来上がっちゃう
…本末転倒にゃ
だから、少しくらいコードが重複しても、無理に共通化しない…っていう判断も大事なの
「間違った抽象化より、重複の方がマシ」
…重複していいにゃ?
うん、Vertical Sliceの世界では「間違った抽象化より、少しの重複の方がマシ」って考え方があるの
…抽象化
「これとこれは似てるから、共通化しよう」ってまとめることね
…
でもね、「似てる」と思ったものが、実は別の理由で存在してたってことがあるの
…例えばにゃ
えっと…「みりん」と「料理酒」って、似てるけど役割が違うでしょ?
…全然違うにゃ。みりんは甘みとツヤ、料理酒は臭み消しと旨みにゃ
でも「液体で、料理に入れるもの」って共通点で「調味液」にまとめちゃったら?
…使い物にならないにゃ。それぞれの役割が消えるにゃん
そう!だから、表面的に似てるだけで共通化すると、後で困るの
…なるほどにゃ
まとめ
…結局、どっちがいいにゃ
どっちも正解なの。使う場面が違うだけ
…
でもね、AIと一緒に開発するなら、Vertical Sliceの方が相性がいいかもって思った
…なぜにゃ
一つの機能に必要なものがまとまってると、AIが「ここを見ればいいんだな」ってわかりやすいから
…料理で言えば、「今日作るものの材料を全部一箇所に並べておく」みたいなものにゃ
そうそう!冷蔵庫のあちこちから取り出すより、手元にあった方が作りやすいでしょ?
…ミセ・アン・プラスにゃ
み、みせあんぷらす?(゚∀゚)
…フランス料理の用語にゃ。「所定の位置に置く」って意味で、調理前に材料を全部準備して並べておくことにゃ
へぇー!ミコちゃん、物知り!
…料理の基本にゃ
じゃあ、Vertical Sliceは「プログラムのミセ・アン・プラス」だね♪
…無理に繋げなくていいにゃ
えへへ(〃´∪`〃)
関連リンク: