🛠️

NotionベースのSpec-Driven Development(SDD)を試作した

に公開

生成AIを利用した開発が当たり前になっていますが、最近はもう少し進んで、より自律的なマルチエージェント開発であったり、より仕様的な厳格さを伴うためのSpec-Driven Development(SDD、仕様駆動開発)やAI-DLCなどの生成AIとの協働性を強化した開発も当たり前になりつつあるかと思います。

このような生成AIでの開発で、AIに仕様を読み書きさせるにあたり、いくつかの方法があります。

  • リポジトリで直接テキストファイル(Markdownなどを含む)として読み書きする
  • Notionなどのドキュメントの管理を目的としたサービスと連携して、ドキュメント管理して読み書きする

また、生成AIと人間の境目についても異なるアプローチがあります。

  • 生成AIが主に仕様等を作成・編集し、人間はレビューをメインとする
  • 生成AIと人間の両方が仕様等を作成・編集をし、相互にレビューをする

分類すると、テキストファイルベースでの扱いはエンジニア寄りであり、最終的な実装のしやすさがメリットとなる一方、エンジニア以外からすれば、ナレッジサービス等で管理されている情報のほうが読みやすく、検索性や可視化のしやすさなどのメリットがあります。

このようなある種の分断が起きてしまうと、ナレッジもエンジニアとそれ以外でそれぞれ管理されるような状況も生まれてしまいます。

そこで、「既存でもナレッジが集約されているNotionなどにドキュメントを貯める前提でSpec-Driven Developmentできないか?」ということで、今回試してみました。

notion_sdd

https://github.com/naokirin/notion_sdd

notion_sdd は、複数のAIエージェントで利用可能な、仕様等の情報をNotionに記録することを前提としたSpec-Driven Development用のルールセットです。

導入は基本的に、以下の3つを実行することでできます。

  • Notion MCPの導入(API Keyは不要)
  • 導入するプロジェクトでのinstall.shの実行(curl, unzipのみで可能)
  • Notion側に必要なデータベースの作成(基本的にAIエージェントで実行可能)

Notion MCPのセットアップ以外はほとんど考えることがないので、非常に簡単に導入はできると思います。細かい設定も可能ですが、そこはリポジトリでの説明にまかせて割愛します。

注意点として、一般的なSDDとフェーズが少し違うところがありますが、Spec Kitと概ね同様のフローとなっています。

試してみた感想

試してみた感じでは、「それなりにSDD自体はでき、メリットもある」ということはわかりました。
ただし、やはりリポジトリ管理のテキストベースで行うことのメリットも多くあり、Notionなどで管理するほうがよいとまでは言い切れない点もあることがわかりました。

Notion(既存のナレッジマネジメントサービス)を使うメリット・デメリット

さて、SDDをMarkdown以外と連携して行うことのメリット・デメリットを記載していきます。

Notionで行うメリット

  • 個人のタスクと全体で共有する仕様等の情報を分離しやすい
  • リモートリポジトリに上げなくても、チーム内外へNotionで情報共有ができる
  • Notionの機能や表示で、情報の可視化や見やすさのコントロールをしやすい
  • 情報の操作がしやすい

Notionで行うデメリット

  • 開発状況とSDDで作成・編集された情報の同期が難しい(バージョン管理外となるため)
  • リポジトリ内のテキストではないので、インデックス化されていなかったりして、コンテキスト管理が難しい
  • 長くはないもののテキストに比べてNotionへのアクセスによる待ちが発生する
  • エディタから離れないとSpec等の情報が確認できない

メリット・デメリットの整理

ざっくりと書き出してみましたが、Notionであるメリットは「情報共有のコントロールのしやすさ」に尽きます。複数名への情報共有はもちろん、情報を自分の見たい形に調整しやすいことも挙げられます。
以下はお試しでTodoアプリ作成でAIに自動作成されたNotionの一部ですが、見やすい形式に調整したり、フィルタしたりすることができるので、ある程度内容を一覧しやすくなりました。

一方で、やはり実装箇所と分離するので、管理の難しさは出てきます。ここはテキストベースの管理がエンジニア寄りであったことを考えるとわかっていたことではありますが、やはりそうかなという部分です。
テキスト・Notionの両方を用いることも考えられますが、今回は連動が必要な管理するものが増える事によるデメリットのほうが大きいと判断しました。

まとめ

個人的には、まだまだ生成AIと協働的に開発していくスタイルは模索中かなと思っていますが、一つの形式を試すことができた点は非常に良かったです。

個人的には「悪くはない」スタイルではあったので、さらにプライベートなどで試してみたいなと思っています。

Discussion