Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Agent on Rails - AIをDDDのレールの上で制御する

Avatar for maku. maku.
June 07, 2025
100

Agent on Rails - AIをDDDのレールの上で制御する

Avatar for maku.

maku.

June 07, 2025
Tweet

Transcript

  1. 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
  2. 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
  3. " 技術的 ドメイン " ビジネス 技術 " ユビキタス言語 " モデルを明示的に表現

    な課題ではなく、 において価値のある部分や 複雑な部分にフォーカスしよF 側と 側が協調してモデリングしよF そのために共通の を話そF するソフトウェアを書こう DDDの考え方(ざっくり)
  4. $ 技術的 ドメイン $ ビジネス 技術 $ ユビキタス言語 $ モデルを明示的に表現する

    な課題ではなく、 において価値のある部分や 複雑な部分にフォーカスしよG 側と 側が協調してモデリングしよG そのために共通の を話そG ソフトウェアを書こう $                             ‰ $ $ ‰ $ モデルを明示的に表現 ‰ するソフトウェアを書こう DDDの考え方(ざっくり)
  5. $ 技術的 ドメイン $ ビジネス 技術 $ ユビキタス言語 $ モデルを明示的に表現する

    な課題ではなく、 において価値のある部分や 複雑な部分にフォーカスしよG 側と 側が協調してモデリングしよG そのために共通の を話そG ソフトウェアを書こう $                             l $ $ l $ モデルを明示的に表現 → ORM等の具体的な実装よりも、モデルを優先する l するソフトウェアを書こう
 DDDの考え方(ざっくり)
  6. 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
  7. 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 , ; , ; , , , , ; , ; []
  8. 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
  9. 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 , , , . ; . . . ; . < > ( ) ( ) ( ) {