2026-01-10 自分とは違う考えを持っている感じが面白い
bouzuya/tsukota-web の application crate をおおむね完了し、 api crate もなんとなく形になってきた。
今回は層間での変換を減らそうと、 Use Case / Application Service の入力・出力に使用する構造体は serde::Deserialize, serde::Serialize を実装して、 HTTP Request Body / Response Body でも流用しようと考えている。
この考えを伝えて AI エージェントに実装させると、パスパラメーターとリクエストボディに分けて、リクエストボディ部分だけ構造体を定義してきた。「なるほど、そういう解釈になるのか」と思った。パスパラメーターは対象のリソースを、リクエストボディは操作内容を指定するということらしい。自分とは違う考えを持っている感じが面白い。
ぼくとしては Use Case の段階でパスパラメーター (対象) とリクエストボディ (操作内容) での区別はしたくない。結果的に HTTP のエンドポイントとして、更新系の Use Case を POST /commands/{use_case_name} の形にしてパスパラメーターをなくすことにした。
参照系はリソースベースのものなので一貫性がないのだけど、更新系は <form action="..."> や fetch(...) のように隠れてしまうので、それらは別で考えても問題はないと判断した。実際に画面をつくりはじめたときに、方針を転換するかもしれない。
明日はインメモリでいいのでバックエンドのサーバーが立ち上がるようにしよう。それが終わったらフロントエンドに着手していこうかな。永続化や認証まわりは先送りする形で。
今日のコミット。