AI と一緒に開発する個人開発者・小規模チーム。
今はここに集中する。エコシステムと実績が育てば、対象は自然に広がる。
コードの最終責任は人間にある。AI がどれだけ進化しても、これは変わらない。
- AI がレビューもする時代が来ても、プロダクトの責任を負うのは人間
- だから人間は「必要なときに読んで、正しさを判断できる」状態を維持しなければならない
- 法律のように、普段は読まなくても、読めば理解できる状態を保つ
「AI が書いて、人間が読む」は 今この思想が必要とされる理由の説明 であって、思想そのものではない。
思想の核は 「読む側への最適化」。 読み手が人間でも AI でも、WHAT が明確で構造が予測可能なコードが最も価値がある。
だから Orbit は「書きやすさ」より「読みやすさ」を優先する。
AI にコードを任せると、開発スピードは上がる。 でも、人間の理解が追いつかないまま進むと「理解負債」が溜まる。
理解負債 — コードベースに対する人間の理解が、実装の進行に置いていかれること。
技術的負債はリファクタリングで返せる。 理解負債は、コードを読み直すところからやり直すしかない。もっと厄介だ。
毎日読む人: 文脈が頭にある → 多少バラついても追える
たまに読む人: 文脈がない → 構造が揃っていないと追えない
- AI に任せる範囲が広がれば、人間がコードを読む頻度は下がる
- 理解負債は「コードを読まない期間」に比例して溜まる
- 規約で構造が揃っていれば、間が空いても「前と同じパターンだ」と即座に復帰できる
- 規約は理解負債の利子をゼロにする仕組み
Orbit が言う「読みやすい」とは、具体的にこういうことだ:
一行一行を見て、日本語(あるいは英語)に訳せること。
// ✅ 訳せる
// 「params から id を取って、API を叩いて、結果を返す」
const { data: user } = useUser(params.id);
// ❌ 訳せない — 裏の知識がないと意味がわからない
export const loader = createLoader("users", { include: ["posts"] });「全部見せる」でも「全部隠す」でもない。情報を階層化する。
全部隠す 階層化 全部見せる
Rails Orbit TanStack
resources :users export function getUser() useQuery({ queryKey,
queryFn, staleTime,
gcTime, retry, ... })
| 層 | 問い | 例 |
|---|---|---|
| WHAT | このコードは何をしているか? | 「ユーザーを取得する」 |
| HOW | それはどう実現されているか? | 「HTTP POST で /rpc/users/getUser に飛ぶ」 |
「何をしているか(WHAT)」はコードに書いてあること。 「どうやっているか(HOW)」は抽象化してよい。ただし境界を明示すること。
- 「境界の明示」=
server.tsというファイル名。「ここに書いた関数はサーバーで動く」ことをファイル名が示す - HOW(HTTP 通信、Hono、RPC 変換)は知らなくていい
Level 1: コードを読んで「何をしているか」がわかる → 誰でも
Level 2: 「なぜそう書くのか」がわかる → 規約を学べば
Level 3: 「裏で何が起きているか」がわかる → 掘れば
一箇所読めば、他のファイルも同じ構造だと予測できる。
routes/users/page.tsx → hooks を呼んで JSX を書く
routes/posts/page.tsx → hooks を呼んで JSX を書く(同じパターン)
routes/comments/page.tsx → hooks を呼んで JSX を書く(同じパターン)
パターンが揃っていれば、2つ目以降は「翻訳」すら要らない。見た瞬間にわかる。
API の自由度が高いと、AI は毎回違う書き方をする。 同じチームの中でも書き方がバラつく。レビューのたびに「これどっちの書き方?」と考える羽目になる。
Orbit は、同じことをやるなら同じコードになるように API を設計する。 AI が書いても人間が書いても、出てくるコードが同じ。 だからレビューで「書き方の違い」に悩まず、「ロジックが正しいか」に集中できる。
Orbit の規約は、こうすればうまくいくという舗装道路だ。
- デフォルトに従えば、シンプルで読みやすいコードになる
- 規約から逸れることは禁止しない。柔軟性はオプションとして残す
- 縛りたい人はカスタム lint で厳しくすればいい
Rails のように規約に従わないと辛くなる設計ではない。 道を歩けば快適だが、脇に逸れることを禁止しない。
React Compiler(自動メモ化)は、不要な再レンダリングを自動で排除してくれる。 しかし、既存のライブラリの多くは Rules of React に違反しており、Compiler と共存できない。
React Hook Form は Proxy ベースのリアクティビティが壊れた。 TanStack Table はクラスインスタンスのメモ化失敗で連鎖的に最適化が無効化された。
Orbit は最初から Rules of React に厳密に従って設計する:
useSyncExternalStoreで外部ストアと同期する- Proxy ベースのリアクティビティを使わない
- クラスインスタンスを hooks 内で露出しない
- hooks の戻り値を後から変更しない
後追いで互換性対応に苦しむのではなく、設計段階で解決する。
| 従来のフレームワーク | Orbit |
|---|---|
| 書きやすさを追求 | 読みやすさを追求 |
| 短く書ける | 読めばわかる |
| 自由に書ける | 正しい書き方が1つ |
| 規約で隠す | 規約で階層化する |
| 人間が書く前提 | 人間が最終責任を持つ前提 |