Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AIのための特別なアーキテクチャはいらない 0→1開発で実践した設計原則とガードレール
Search
株式会社カミナシ
May 10, 2026
Technology
980
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AIのための特別なアーキテクチャはいらない 0→1開発で実践した設計原則とガードレール
カミナシ Tech Night #3
https://kaminashi.connpass.com/event/387233/
Shimmy
ソフトウェアエンジニア
株式会社カミナシ
May 10, 2026
More Decks by 株式会社カミナシ
See All by 株式会社カミナシ
Bits AI を制するものは Datadog を制す / The player that controls Bits AI, controls Datadog
kaminashi
0
330
運用を犠牲にせずコストを制御し事業成長を支える B2B SaaS ID管理基盤におけるS3 Tableのログストレージ活用
kaminashi
1
840
AI時代こそ、スケールしないことをしよう -「作る人」から「なぜ作るか」を考える人へ / Do Things That Don't Scale in the AI Era — From How to Why
kaminashi
1
520
関数型の考えを TypeScript に持ち込んで、テストしやすい純粋関数を増やす / Pure at the Core, Effects at the Edge: Bringing Functional Thinking into TypeScript
kaminashi
2
530
AWS Summit Japan 2026の振り返りと2027へ向けて / AWS Summit Japan 2026 Recap and Prospects for 2027
kaminashi
1
820
Amazon Redshift zero-ETL 統合を活用した軽量なマルチプロダクトデータ可視化基盤 / Lightweight Multi-Product Data Visualization with Amazon Redshift Zero-ETL
kaminashi
0
570
実践 TanStack Start ― 新規プロダクトを開発して確立した、サーバーとクライアント境界の設計パターン / Practical TanStack Start Server-Client Boundary Patterns
kaminashi
3
1.1k
スクラムの中で AI-DLC workflow を 使い始めて3ヶ月の振り返り
kaminashi
0
1.3k
The essence of decision-making lies in primary data
kaminashi
0
1.6k
Other Decks in Technology
See All in Technology
Azure App Service / Container Apps の組み込み認証
kuniteru
0
210
PdMをやめて、 "プロダクトビルダー"という 働き方に変えました / PdM to Product Builder
shikichee
2
730
推論の観測、できていますか? 〜 Google Cloud Gemini Enterprise Agent Platformで 3つの Gemini モデルを実測して踏んだ、評価の罠 〜
shukob
PRO
0
160
動画配信アプリでの Engage SDK 導入 — TVer Android が Play ストアにコンテンツを届けるまで
techtver
PRO
0
140
振り返りこそエンジニアの本領
negima
0
320
Benchmarking Vector Databases: pgvector vs. LanceDB
tsho
0
150
Nav2、Nav3 ... はたまた自作?〜 作って理解する Nav3 の設計意図 〜 / Nav2, Nav3 ... or Build Your Own? — Understanding Nav3's design intent by building it from scratch
yanzm
0
250
深夜のクラウド懺悔室 1:29:300 or 1:0:0
kazzpapa3
0
190
リージョンの壁を越える、 ちょっと変わったAWSサービスの話
falken
PRO
0
270
grill-me(grilling):AI駆動開発を超助けてくれるSkill / grill me
mathbullet
0
110
生成AI時代の クレデンシャルとパーミッション設計
nrinetcom
PRO
4
1.6k
Microsoft 365 Copilot chat -tekoälypalvelun tietosuojaongelmat
hponka
0
500
Featured
See All Featured
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
440
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Making Projects Easy
brettharned
120
6.7k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6.1k
Building Adaptive Systems
keathley
44
3.2k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.9k
Designing for Performance
lara
611
70k
The agentic SEO stack - context over prompts
schlessera
0
900
Code Reviewing Like a Champion
maltzj
528
40k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Transcript
AIのための特別なアーキテクチャはいらない 0→1開発で実践した設計原則とガードレール カミナシ Tech Night #3
⾃⼰紹介 • 名前: Shimmy • 所属: 株式会社カミナシ ◦ ソフトウェアエンジニア ◦
カミナシで新規プロダクトを開発中 ◦ TanStack Startを使ってFull TypeScriptで開発 • その他: ◦ 最近はポケポケに時間を取られています ◦ AIのお陰で個⼈開発にまた⽕がついて、ゴリゴリコードを書いてます (AIが)
今⽇話すこと 1. AIの⼒を最⼤限引き出す設計条件 2. その設計を決定論的に守らせる仕組み
AIの⼒を最⼤限 引き出す条件
条件1: 関⼼の分離
Feature-First構成 関⼼事でディレクトリを分ける • ある機能を修正したいとき、修正したい箇所がまとまって いると扱いやすい • 1つの関⼼事がすべて1ディレクトリの中にあるのでAIの コンテキストに載せやすい • 並列にAI開発しても関⼼ごと別に分ければコンフリクトし
にくい
結合をバランスさせる 結合を「避ける」のではなく「バランスさせる」 • 「結合の強さ」が⾼いなら「距離」を短く ◦ -> Feature内部は⾼凝集 • 「距離」が⻑いなら「結合」を弱く ◦
-> Feature間は疎結合
Feature内のディレクトリ構成 • domain/ ◦ 純粋関数のみ • infrastructure/ ◦ DBアクセスなどI/O •
server/(api) ◦ オーケストレーション domainとinfrastructureを組み⽴てる • index.ts ◦ Public API 外部に公開するものだけをexport
Featureを横断するケー ス
パターン1: shared/ 複数featureが使う共通ロジックを切り出す • 純粋関数をsrc/shared/lib/に置く • 依存⽅向は常に features/ → shared/
パターン2: routes/ 複数featureを組み合わせるページ • 各featureのPublic APIをimportして統合する • featureは互いの存在を知らない
条件2: 価値の⾼いテスト
テストの4つの柱 『単体テストの考え⽅/使い⽅』より • 退⾏保護: バグを⾒逃さない • リファクタリング耐性: 内部を変えても壊れない • 迅速なフィードバック:
すぐ結果がわかる • 保守しやすさ: テスト⾃体がシンプル
出⼒値ベーステスト • Inputを⼊れてOutputを検証する • 内部実装に依存しない → リファクタリング耐性が⾼い • モック不要でAIに書かせやすい •
テスト実⾏が速い → AIの試⾏錯誤ループが速く回る
domain層の純粋関数 • Inputを受け取り、純粋関数を組み合わせて計算し、 Outputを返す • DB参照なし、副作⽤なし、I/Oなし
domain層の関数のテスト • テストはInputを組み⽴て 関数を呼び、Outputを検証するシンプルなもの • モック不要、DI不要
Functional Core + Imperative Shell I/Oとロジックを分離し、副作⽤を端においやる • Functional Core ◦
domain/ : 純粋関数でビジネスロジック • Imperative Shell ◦ infrastructure/: DBアクセスなどI/O操作 ◦ server/ : API層。組み⽴ててエンドポイントを提供する
設計を決定論的に 守らせる仕組み
なぜ「決定論的」的に守る必要があるか • ルールを教えただけでは守らないことがある • AIの出⼒速度に⼈間のレビューが追いつかない -> 決定論的に守る「ガードレールが必要」
ガードレールの条件 • 決定的であること ◦ AGENT.mdは確率的 → 守られないことがある -> 決定的なシステムが必 要
• 速くフィードバックできること(Shift Left) ◦ AIの試⾏錯誤ループの中でフィードバックしたい
静的解析 dependency-cruiser
dependency-cruiserで設計を強制する import⽂を静的解析して依存関係のルール違反を検出する ツール • 設計思想をdependency-cruiserのルールとする • 新規プロダクトでは12個のルールを定義
ルール定義①: 純粋なドメイン層 domain/からinfrastructure/やserver/をimportす るとエラー
ルール定義②: Feature間の疎結合 同⼀feature内はOK。別featureを直接importするとエラー
ルール定義③: Public API境界 index.tsを通さずにfeature内部を参照するとエラー
その他の静的解析ツール • knip: 未使⽤コードを検出 ◦ AI実装で⽣まれる未使⽤exportやファイルを⾃動検出 • Biome: コード品質を統⼀ ◦
any型禁⽌、⾮nullアサーション禁⽌、awaitされていないPromise検出
Git hooksで統合する
lefthook: コミット前に⾃動で弾く • pre-commit: Biomeのチェック + dependency-cruiser • pre-push: 型チェック
+ knip + テスト
開発フロー アウトプットではなく、プロセスを信頼できるものにす る 1. AIにコードを書かせる 2. git commit a. Biome
+ dependency-cruiser が⾛る b. 設計違反があればエラー c. → AIが⾃動修正 3. git push a. → 型チェック + knip + テスト が⾛る
まとめ
設計条件を振り返る • 関⼼の分離 ◦ 関⼼事ごとにファイルをまとめる ◦ AIのコンテキストに載せやすく、並列開発でもコンフリクトしにくい • 価値の⾼いテスト ◦
domain層を純粋関数で構成し、出⼒値ベースの単体テストを書く ◦ モック不要でリファクタリングに強い。質の⾼いテストを書きやすい構 造が整う • 依存⽅向の決定 ◦ 層ごとのルールを明確にする ◦ AIが迷わず、静的解析で機械的に強制できる
設計を決定論的に守らせる dependency-cruiserで設計思想をガードレールに • domain層から他の層をimportしたらエラー • 別featureを直接importしたらエラー • index.tsを通さずfeature内部を参照したらエラー knip +
Biome も活⽤し、lefthookで確定的に実⾏
良い設計をちゃんと守る
株式会社カミナシ https://kaminashi.jp