メタプログラミングで実現する「コードを仕様にする」仕組み/nikkei-tech-talk43
by
日本経済新聞社 エンジニア採用事務局
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
メタプログラミングで実現する「コードを 仕様にする」仕組み NIKKEI Tech Talk #43 日本経済新聞社 若原
Slide 2
Slide 2 text
日経の会社 紹介
Slide 3
Slide 3 text
自己紹介 名前と所属 - 若原 義隆 - 日本経済新聞社 情報サービスユニット 今の仕事 - 日経KAI backend 開発 - FastAPI / Pydantic / LLM基盤 - 開発者向け仕組みづくり 今日のテーマとの接続 - 「コードを仕様にする」仕組みを開発
Slide 4
Slide 4 text
仕事で関 わっている サービス紹 介
Slide 5
Slide 5 text
目次 1.背景と課題 2. 型中心設計とコード=仕様 3.メタプログラミングによる実装 4.開発者体験の変化と今後
Slide 6
Slide 6 text
1.背景と課題
Slide 7
Slide 7 text
1-1.仕様はコードから人間が転記していた • レスポンス型の変更があった場合に毎回発生 • 実装と仕様が人間を経由 • 更新漏れが起きやすい APIのレスポンスの型 (Pythonコード) 人間が読んで仕様書に転記 仕様書 (Notion)
Slide 8
Slide 8 text
1-2.なぜ仕様はズレていくのか • 最初はコードと仕様書を同じ内容で作成 • 例えばanswer_typeが増えるだけで修正する必要がある • 更新漏れやメンテ忘れが発生 # 実装ではこう定義 class AnswerType(SseJsonEvent): answer_type: Literal["rag", "chat", ...] # 仕様書はこんな感じ answer_type: enum: - rag - chat
Slide 9
Slide 9 text
2.型中心設計とコード=仕様
Slide 10
Slide 10 text
2-1.なぜ今「コード=仕様」が現実的になった のか - FastAPI / Pydantic により型中心のAPI設計が一般化 - model_json_schema() で型からスキーマを自動生成できる - OpenAPI と自然につながる仕組みが揃った - 以前は「設計思想」だったものが、実装可能になった
Slide 11
Slide 11 text
2-2.コード=仕様になる ・実装コード ・Notion仕様 ・レスポンスサンプル (それぞれ更新) ・型定義 ↓ ・仕様生成 Before After
Slide 12
Slide 12 text
3.メタプログラミングによる 実装
Slide 13
Slide 13 text
3-1.型+メタ情報による仕様の自動生成 ① 型定義 ② 型の集約 ③ スキーマ生成 ④ 仕様として出力 class AnswerType(SseJsonEvent): event_name: ClassVar[str] ="answer_type" answer_type: Literal["rag", "chat",...] EVENT_REGISTRY OpenAPI / Redoc model_json
Slide 14
Slide 14 text
3-2.実際の仕様書 • 以下を見ながらデモをします https://fluffy-dollop-qmrgrwk.pages.github.io/
Slide 15
Slide 15 text
4.開発者体験の変化と今後
Slide 16
Slide 16 text
4-1.開発者体験はこう変わった • 型が正しければ仕様も正しい ・実装+仕様更新を意識 ・仕様書の更新漏れに伴う作 業の発生 ・仕様更新の確認待ち ・コード上で型を書き仕様を表 現することに注力 ・仕様書は自動で作成される ・個人が止まらずに開発を進 められる Before After
Slide 17
Slide 17 text
4-2.なぜ自律的に進めやすくなったか - 仕様更新を意識しなくてよくなった - レビューが仕様チェックから設計議論へ - 仕様が一新されるような機能開発の心理的コストが下がった - 横展開しやすい
Slide 18
Slide 18 text
4-3.AI時代にもそのまま使える • 同じソースから作成される 人間向けの生成物 (Redoc) 型のついたコード AI向けの生成物 (Yaml, Json)
Slide 19
Slide 19 text
4-4.まとめ • 型を中心に設計した • メタ情報で仕様を自動生成した • 仕様メンテナンスから解放された • 自律的な開発の推進へも寄与した