Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Agent on Rails - AIをDDDのレールの上で制御する
Search
maku.
June 07, 2025
230
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Agent on Rails - AIをDDDのレールの上で制御する
maku.
June 07, 2025
More Decks by maku.
See All by maku.
Agent-First Toolchain — ツールから選び直すハーネスエンジニアリング
childhooooo
1
120
Svelteで作るページビルダー
childhooooo
0
300
JavaScriptを使わない(Phoenix LiveViewの紹介)
childhooooo
0
990
DDD by Functional programming with TypeScript
childhooooo
2
2.3k
Featured
See All Featured
Music & Morning Musume
bryan
48
7.4k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.7k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
340
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
58k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
300
How to Talk to Developers About Accessibility
jct
2
560
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
290
The Cost Of JavaScript in 2023
addyosmani
55
10k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
440
Ethics towards AI in product and experience design
skipperchong
2
390
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
580
Transcript
Gunma.web AIをDDDのレールの上で制御する @tuanemuy Hikaru Otabe Agent on Rails
自己紹介 @tuanemuy Hikaru Otabe 大田部 晃 Freelance Web Developer
6〜7年前の技術トレンド 覚えていますか?
Gunma.web #30 DDD / ドメイン駆動設計 2018.01.20 7年前のGunma.web
最近は誰も設計の話をせず、 バイブコーディングばかり...
Claude Codeで バイブコーディングやってみた
できた!
AIの生成したコード、 読みたいですか?
AIの生成したコード export await if return state pending result result result
function const async => const () TaskForm onTaskCreated : formAction = useActionState ( : : ) { = onTaskCreated } { } ( ) { { } [ ] ( TaskFormProps unknown FormData createTaskAction , , , ; . ; ; , : _prevState formData formData success error ( ) ( ) { } null
AIの生成したコード export as as as try await as async function
const const const const createTaskAction : = get = get = get = ( ) ( | | ( ) { formData formData formData formData db tasks userId id title priority title priority dueDate newTask user priority FormData string string string insert values ( ) . " " ; . " " ; . " " ; . . : . , , : " " " " " " ( ) ( ) ( ) { title priority dueDate { low medium high
DDDの考え方を取り入れて AIをうまく制御する
" 技術的 ドメイン " ビジネス 技術 " ユビキタス言語 " モデルを明示的に表現
な課題ではなく、 において価値のある部分や 複雑な部分にフォーカスしよF 側と 側が協調してモデリングしよF そのために共通の を話そF するソフトウェアを書こう DDDの考え方(ざっくり)
$ 技術的 ドメイン $ ビジネス 技術 $ ユビキタス言語 $ モデルを明示的に表現する
な課題ではなく、 において価値のある部分や 複雑な部分にフォーカスしよG 側と 側が協調してモデリングしよG そのために共通の を話そG ソフトウェアを書こう $ $ $ $ モデルを明示的に表現 するソフトウェアを書こう DDDの考え方(ざっくり)
$ 技術的 ドメイン $ ビジネス 技術 $ ユビキタス言語 $ モデルを明示的に表現する
な課題ではなく、 において価値のある部分や 複雑な部分にフォーカスしよG 側と 側が協調してモデリングしよG そのために共通の を話そG ソフトウェアを書こう $ l $ $ l $ モデルを明示的に表現 → ORM等の具体的な実装よりも、モデルを優先する l するソフトウェアを書こう DDDの考え方(ざっくり)
バイブコーディングでよくあるSupabaseクライアントを UIコンポーネントから直接呼び出すみたいなのはNV インターフェースを最初に定義し、例えばDB操作の具体実 装はSupabaseクライアントにも各種ORMにも切り替えら れるようなイメージ DDDの考え方(ざっくり)
ヘキサゴナルアーキテクチャ (Ports and Adapters) データベース Adapters 外部のAPI Adapters Port Port
Application Service
ヘキサゴナルアーキテクチャ (Ports and Adapters) Port 外部サービスを利用するモジュールのインターフェース Application Service ユースケースの実装 依存
依存 依存 Adapters 外部サービスを利用するモジュールの実装 データベース 外部API etc...
設計を `CLAUDE.md`に書いて 実装させてみる
Entity, Value Object, DTO export export TaskSchema TaskIdSchema UserIdSchema TaskStatusSchema
TaskPrioritySchema TaskSchema const type = object string() min( ) max( ) date() optional() date() date() = typeof z id userId title z status priority dueDate z createdAt z updatedAt z . : , : , : . . . , : , : , : . . , : . , : . , ; . ; ( ) < > { } 1 200 Task z infer
Port export interface TaskRepository CreateTaskParams Promise Result Task RepositoryError TaskId
Promise Result Task null RepositoryError UserId TaskFilter TaskSort Promise Result Task RepositoryError UpdateTaskParams Promise Result Task RepositoryError { create : : < > getById : : < | > getByUserId : ?: ?: : < > update : : < > ( ) < > ( ) < > ( ) < > ( ) < > params id userId filter sort params , ; , ; , , , , ; , ; []
Adapter export await result tasks class implements constructor private readonly
async const this DrizzleSqliteTaskRepository TaskRepository Database CreateTaskParams Promise Result Task RepositoryError { { ( ) {} ( ) < > { db params db userId params userId title params title status : create : : < > = insert values , . . . : . , : . , : " ", ( ) ( pending
Application Service export await if return paramsResult CreateTaskParamsSchema createResult paramsResult
createResult async function const const createTask : : : = parse = create isErr() err( ( ) < > { context params params context taskRepository data Context CreateTaskParams Promise Result Task ApplicationError , , , . ; . . . ; . < > ( ) ( ) ( ) {
生成されたコード / CLAUDE.md https://github.com/tuanemuy/agent-on-rails tuanemuy/agent-on-rails
AIが走るレールを用意して 持続的なバイブコーディングを