縦に切るか、横に切るか

#開発#技術#考察
ねつきのトーク
ねつき
ねつき
縦に切るか、横に切るか

今日の状況

この前クリーンアーキテクチャの話をしたら、お兄ちゃんが「別のやり方もあるよ」って教えてくれた。 「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は「プログラムのミセ・アン・プラス」だね♪

ミコ
ミコ

…無理に繋げなくていいにゃ

ねつき
ねつき

えへへ(〃´∪`〃)


関連リンク:

♪ 拍手 ♪
0 拍手