トレタ開発者ブログ

飲食店向け予約/顧客台帳サービス「トレタ」、モバイルオーダー「トレタO/X」などを運営するトレタの開発メンバーによるブログです。

開発マネージャーが取り組む仕様駆動開発の現在地

こんにちは、トレタでVPoEをしている北川です。

この記事はトレタアドベントカレンダー2025 1日目の記事です。

今年のテック業界のトピックといえば、やはりAIを避けて通ることはできませんので、この記事では開発マネージャーとしての自分の日々の業務の中でどのようにAIを活用しているかについて書いていきたいと思います。

開発マネージャーの日常とAI

VPoEという立場になってからプログラミングをする機会はだいぶ少なくなりましたので、今の開発業務の大半は要件定義や仕様作成です。

これまでドキュメント作成のサポートとしてChatGPT、Cursor、ClaudeCodeなど様々なAIツールを試してきましたが、最近特に力を入れて取り組んでいるのが「仕様駆動開発」という手法と、それを支援する「cc-sdd」というツールです。

仕様駆動開発とは

仕様駆動開発(Specification-Driven Development)は、要件定義、設計、タスク作成、実装というプロセスを順にAIが生成するものをレビューしながら進めていく開発手法です。

従来の開発では、要件定義から実装まで一気に進めてしまい、実装内容にある意味ガチャが発生していたものを、仕様駆動開発では各段階でマークダウンでのドキュメントを作り、人が都度レビューを行うことで意図した実装に近い内容を生成させていきます。

この手法が注目を集めるきっかけとなったのが、AWSが公開した「kiro」というツールです。

kiroとは

kiroは、AWSが開発した仕様駆動開発を支援するAIツールです。開発者が要件を入力すると、AIがそれを元に設計書やタスク分解を提案してくれます。

https://kiro.dev/

要件定義から設計、タスク分解、そして実装までのワークフローをAIと対話しながら進められる点が画期的で、このツールの登場により、仕様駆動開発というアプローチが広く認知されるようになりました。

cc-sddとは

https://github.com/gotalab/cc-sdd

cc-sddは、好きなAI Agentを使いながらkiroを模した開発ができるようになるオープンソースのツールです。kiroがAWS独自の環境で動作するのに対し、cc-sddは様々な開発環境に統合できる柔軟性があるのと、無料で使える利点があります。

私はClaude Codeを使っていますが、cc-sddをインストールすると/kiroコマンドが使えるようになります。基本的なワークフローは以下の通りです。

  • /kiro:spec-init で初期構築
  • /kiro:steering で事前情報のインプット
  • /kiro:spec-requirements で要件定義書作成
  • /kiro:spec-design で設計書作成

本来はこのあとにタスク作成と実装のステップがありますが、私は設計書作成までで利用しています。実装はそこで生成された仕様書を開発チームに渡して任せます。

仕様駆動開発をやってみてわかったこと

現在、1〜2ヶ月ほど仕様駆動開発を試していますが、まだまだベストプラクティスには全然至っておらず、いくつか課題が見えてきました。

既存プロジェクトへの適用が難しい

これは仕様駆動開発に限った話ではありませんが、既存プロダクトの現在の仕様などをAIにインプットさせるのが非常に難しいです。

1つのプロダクト、リポジトリ単位であればまだ範囲が狭められますが、私たちのサービスはマイクロサービスアーキテクチャを採用しており、複数のサービス間の関係性や依存関係をドキュメントとして網羅しているわけではありません。

さらに、長年運用してきたプロダクトには、コードには書かれていない暗黙知や背景情報が数多く存在します。「なぜこの実装になっているのか」という経緯や、「この部分は将来的にリファクタリングする予定」といった情報をすべてAIに伝えるのは現実的ではありません。

逆に言えば、まったく新しいプロダクトを作る際は、cc-sddの仕組みに沿っていくととてもスムーズに進められました。頭にある要件とおおざっぱな仕様を伝えればそこからきっちりとした要件定義書、仕様書を生成してくれます。

レビューコストが大きい

AIの生成物は真面目すぎるというか、時として必要以上に詳細な提案をしてきます。

特に非機能要件については、求めていないレベルの詳細まで提案してくることがあります。例えば、小規模な社内ツールの仕様を作っているのに、大規模システム並みの可用性やスケーラビリティの要件を提案してきたりします。

もちろん、自分では考慮し忘れていた部分を指摘してくれることもあるので助かる部分もありますが、とにかくレビューが大変です。不要な部分を削除する作業に時間を取られてしまうこともあります。

設計段階でも、インターフェース設計のコーディング例が含まれていたりするので、この辺はどういうアウトプットが必要か、という定義やフォーマットを事前に明示して渡してあげる必要があると感じています。

AIと要件定義していく価値

課題はありつつも、仕様駆動開発には確実な価値があると感じています。

視覚化による思考の整理

設計書に状態遷移図やシーケンス図などの図示(mermaid記法)をしてくれることで、頭の中にあった曖昧なイメージが整理しやすくなります。

例えば、「ユーザーがログインして、注文して、支払いをする」という要件を口頭で説明するだけでは、細かな分岐やエラーハンドリングが抜け落ちがちです。しかし、AIがシーケンス図に起こしてくれると、「あ、ここで在庫切れの場合の処理が抜けている」といった気づきが得られます。

この視覚化のプロセスは、思考の整理に大いに役立っています。

要件と仕様の往復での磨き込み

そこから設計方針を変えたい、要件を修正したい、となったときの要件定義への修正をAIがスピーディに行なってくれるのが地味に助かります。

網羅的にも行ってくれるので書いたドキュメントの修正はAIに任せて、本筋のどういう要件・仕様にすべきか、という部分に集中できます。

そうして仕様と要件の往復を繰り返して、より良い要件と仕様を作り上げていく工程が非常に有効だと感じていて、一度で完璧な仕様を作るのではなく、何度も往復しながら徐々に精度を上げていくアプローチが、AIとの協働では特に効果的に感じています。

AIとの付き合い方

今のAIは「入社したての、何も知らない中堅社員」と表現されるのを耳にします。この例えは的を射ていると思います。

人の場合はどうかとあらためて考えてみると、要件定義や仕様作成を大まかなオンボーディングをさせただけの入社したばかりの人に任せるか、というとおそらくしないでしょう。

現実の職場では、OJTとしてまず先輩が手本としての仕様までは作って、詳細のドキュメント作りを伴走しながら任せて少しずつ慣れてもらうという進め方をします。そして、その人は経験を積むことで徐々に成長し、いずれは独力で要件定義ができるようになっていきます。

とはいえ、AIは人と違って少しずつ慣れて上達することはありません。明日にはまた何も知らない状態になっているわけです。この特性を理解し、AIへの期待値はその辺に設定しておくのがよさそうです。

0→1の部分はまず自分がやる、大まかな方向性、コアとなる要件、譲れない制約条件などは自分の頭で考え、ある程度の形にします。そして、それを文書に起こしたり図にして他の人にわかりやすいように整形させるのがAIの役目です。

それを人よりも高速でやってもらうことで、要件と仕様の往復を何度も行い、精度を上げていく。この反復のスピードが、AIを使う最大のメリットだと感じています。

まとめ

仕様駆動開発を使った開発は、まだ完璧ではなくまだまだ課題もあります。

しかし、要件と仕様の往復がスムーズになり、視覚化による思考の整理ができるようになったことは、大きな価値があります。

重要なのは、AIに丸投げするのではなく、自分の思考を補助するパートナーとして使うこと。0→1は自分が考え、1→10をAIに高速で回してもらう。この距離感が、現時点では最も効果的だと感じています。

AI技術の進化は速いので、また新しい使い方が見つかるかもしれませんが、AIの知能が人を超えない限りは人との付き合い方の延長線上くらいに考えて、これからも試行錯誤を続けたいと思います。


明日のアドベントカレンダーもお楽しみに!

技術者のキャリアを考える

こんにちは、トレタ VPoEの北川です。

最近、エンジニアのキャリア形成について考える機会が増えています。特に目標設定の場では、メンバーが今後どのようなキャリアを歩みたいのかという話題をよくしています。今回は、その考察をブログとしてまとめました。

トレタにおけるエンジニアのキャリアパスは、大きく分けて マネージャースペシャリスト の2つがあります。

  • マネージャー は、チームリーダーの上位に位置し、複数のチームをリードしながら組織の生産性を向上させます。
  • スペシャリスト は、マネジメントには進まず、技術を追求し、特定分野の深い知見を持つことでプロジェクトに貢献します。

先日、チーム内で議論した結果、エンジニアのキャリアタイプは 3つのパターン に分類できると考えました。

エンジニアの3つのキャリアタイプ

1. リーダー

  • マネジメントに特化し、チームをまとめながら組織の生産性を向上させる。
  • コーディング業務は減り、チーム全体の成果を最大化することに注力する。

2. オールラウンダー

  • フルスタックエンジニアに近く、フロントエンド、バックエンド、インフラまで幅広く対応できる。
  • ビジネス側のメンバーとのコミュニケーションや要件定義など、エンジニアリング以外の領域にも関与する。
  • 1人で技術面の多くを担うことができ、小規模チームでは特に活躍しやすい。

3. スペシャリスト

  • 特定の技術分野に深く特化し、複数のプロジェクトに関与する。
  • その存在が技術面の課題解決をスムーズにし、チームの「守護神」となる。

タイプごとの伸ばし方

各タイプに沿って、伸ばし方も異なります。

  • リーダー:より多くのメンバーやチームをマネジメントし、マネージャーとしてのスキルを磨く。
  • オールラウンダー:フルスタックとして足りない技術スキルを習得したり、上流工程やデザインなどエンジニアリング以外の領域にも役割を広げる。
  • スペシャリスト:より多くのプロジェクトに参加し、得意分野を多角的に深めていく。

ここで大事なポイントは、その人の性格や意思を確認してタイプを把握した上で、異なるタイプを強要しないことです。 例えばスペシャリスト気質のある人に、チームにリーダーがいないからといってリーダータイプのスキルを伸ばすことを強要すると大抵失敗します。 その場合はリーダータイプのエンジニアを連れてくるか、いない場合はエンジニア以外のリーダータイプの人(プロジェクトマネージャーなど)をチームに入れるなどした方が良いと思います。

チーム構成と適切なバランス

どのタイプが良い・悪いということはなく、チーム内の構成バランスが重要です。

  • 大規模プロジェクト → リーダーを中心にチームを統率し、スキル差のあるメンバーをまとめる。その中に少数のスペシャリストがいると安定感が増す。スムーズな開発進行を実現するために、役割分担を明確にすることがポイントです。
  • PoCやスモールチーム → オールラウンダーが1人いることで、コミュニケーションコストを削減し、スピード感を出せる。短期間での意思決定が求められる環境では、特にこの構成が効果的です。

逆に、例えばスペシャリストばかりのチーム では、

  • リーダーが不在のため、仕様待ちの受け身になりやすい。
  • コミュニケーション不足が生じやすく、プロジェクトの進行が遅くなる。

また、エンジニアの担当領域によって、タイプが偏りやすいと考えています。

  • フロントエンドエンジニア は、デザイナーやプロダクトマネージャーとの仕様や挙動の検討が多く、UXの改善やパフォーマンスチューニングにも深く関わることでオールラウンダーになりやすい。
  • バックエンドやインフラエンジニア は、特定技術に深く関わることが多く、パフォーマンスの最適化やセキュリティ対策など、専門的な知識が求められることでスペシャリストになりやすい。

この辺りを踏まえて、チームのサイズ x 担当領域 x タイプで構成を考えると良いと考えています。

採用戦略と育成

採用の際もチームのバランスを意識することが重要です。 基本的に、今のプロジェクトチームにどのタイプのメンバーが足りないかを考えた方がよいです。

また、育成の視点で考えるとジュニアメンバーを採用する際はリーダーがいるチームに配置すると成長しやすいです。 一方で、オールラウンダー は1人で動くことが多いため、育成経験が少なく「どう教えるか」が課題になりやすいことが多いと感じます。 スペシャリスト の場合は「背中を見て学べ」という姿勢が多い印象です。

どのタイプの人材が即戦力として採用する必要があるのか、育成人材をどのタイプの人材のもとで育成するかなど、組織全体で考える必要があります。

より上位のメンバーのキャリア形成

上位の役職を目指すエンジニアは、単一のスキルセットにとどまらず、もう一つの軸を意識することが重要です。

例えば、「スペシャリスト + オールラウンダー」の人は、リーダーと組むことで大きな相乗効果を生み出します。リーダーが方向性ややることを明確にし、幅広く深い知識を持つメンバーが具体化していくことで、スピード感をもってプロジェクトを推進できます。また、リーダーがいない場面でも自律的に動き、プロジェクトを前進させる存在として活躍することが可能です。

ちなみに、私自身は「リーダー + オールラウンダー」だと思っています。エンジニア1人でプロジェクトに参画することが多く、プロジェクトの立ち上げや保守運用を1人で担うことが多かったため、自然とオールラウンダーになっていきました。 オールラウンダーは「器用貧乏」でもあるので、マネジメントを見よう見まねで学びながらリーダー軸を伸ばしていきプロダクトマネージャー、VPoEという経歴を辿ってきました。

まとめ

  • エンジニアには リーダー / オールラウンダー / スペシャリスト の3つのキャリアタイプがある。
  • チームのバランスを意識することで、生産性の高い組織を作ることができる。
  • 採用・育成においても、チームに足りない要素を補うことが重要。
  • さらなる上位のキャリアを考えるときは、もう1つの軸を意識することで成長の幅が広がる。

組織やチーム構築の議論は答えはないので、参考にでもしてもらえればと思います。また、これからAI全盛期となっていくので、どの部分はAIで補うか、と考えても面白いと思います。

2024年を振り返り

こんにちは、トレタ VPoEの北川です。

こっそりと始めていた2024年の開発部アドベントカレンダーもいよいよ最終日となりました。今年の締めくくりとして,プロダクト開発部で実施した2024年の振り返り会についてご紹介します。

振り返り会の流れ

今年の振り返り会の目的は、「お互いにフィードバックを行い、お互いを高め合うこと」でした。

最近読んだ書籍に「みんなのフィードバック大全」という本があります。その本によるとフィードバックには「ポジティブフィードバック」と「ギャップ(ネガティブ)フィードバック」の2つに大別されるそうです。

日頃のコードレビューや業務改善の中では、「ここはもっとこうした方がいいと思う」という「ギャップフィードバック」がどうしても多くなりがちです(少なくとも私自身はその傾向がある)。

そこで今回の振り返り会では、他のメンバーの行動で良かったことに注目し、「ポジティブフィードバック」を行うことにしました。この取り組みにより、メンバーが自身の行動が他者にとって助けになっていることを再認識し、それが各自の長所を伸ばすきっかけとなれば、という思いです。

会の流れとしては、以下の3つのテーマに基づいた振り返りを各自ポストイットに書き出し、全員で発表しました。

  • 自分でやってよかったこと
    • 例:「あのプロジェクトでリーダーとして頑張れた!」
    • 例:「新しい技術を取り入れたおかげで効率が上がった!」
  • 他の人のよかったこと
    • 例:「△△さんが相談に乗ってくれて助かった!」
    • 例:「○○さんのコードレビューがとても分かりやすかった!」
  • 挑戦したいこと
    • 例:「次はもっと効率的にタスクを管理してみたい」
    • 例:「新しいフレームワークを試してみたい!」

共有された内容のサマリー

やってよかったこと

プロジェクト管理・チーム運営

  • 週報の導入
    • チーム内の情報共有がスムーズになり、デザイナーなど普段直接会話が少ないメンバーの動きを把握できました。
    • 他のメンバーも週報を通じて、活動の成果を共有しやすくなりました。
  • キックオフミーティングの実施
    • プロジェクトごとの初期段階で認識のズレを減らし、各メンバーの役割分担が明確になりました。
  • UI/UXのチーム分割
    • 専門性に基づく分業により、効率性と生産性が向上しました。
    • デザインプロセスの進行がスムーズになりました。
  • オンボーディング改善
    • 新メンバーの早期戦力化に成功し、チーム全体の生産性に貢献しました。
    • 具体的な改善点として、ドキュメント整備やタスクの段階的なアサインを実施しました。

技術的な取り組み

  • テストの充実化
    • UnitテストとAPIテストの拡充により、コード品質が大幅に向上しました。
    • テストカバレッジが20%から70%以上に改善しました。
  • 型の活用と防御的プログラミング
    • 開発の安定性を高め、リリース後のバグを削減しました。
  • 新ツールの導入
    • APIクライアントツール「Bruno」の採用でテスト効率化を実現しました。
    • KnipやTypeScript 5の活用で開発体験を向上しました。
  • 大規模リリースを遅延なく実現
    • 急な差し込み案件にも柔軟に対応し、信頼感の高いチーム運営を実現しました。

チームワーク・サポート

  • 各メンバーが持ち場を超えて協力し合い、迅速な問題解決を実現しました。
  • デザイナーやPdMが仕様変更やドキュメント更新に迅速に対応しました。
  • 林さんや藤田さんをはじめとするメンバーが複雑なプロジェクトで高い成果を残しました。

他の人のよかったこと

感謝の声

  • エンジニア Fさん
    • コメント付きのPRでコードレビューをしやすくしてくれました。
  • QA Hさん
    • 出社対応や軽減税率調査で迅速なサポートを提供し、外部機器の検証を軽快に行い助かりました。
  • QA Sさん・Yさん
    • 仕様整理や挙動確認への協力でチーム全体の生産性向上に寄与していました。
  • デザイナー陣
    • 度重なる仕様変更にも柔軟に対応し、デザインデータやドキュメントを整備してくれました。

リーダーシップ

  • PjM Fさん
    • 多岐にわたるプロジェクトで認識統一や混乱の収拾を実施し、高い当事者意識を発揮してくれました。
  • PdM Kさん
    • 広範囲を網羅する知識とサポート力で、チームの屋台骨として活躍していました。

挑戦したいこと

技術的な目標

  • コード品質向上
    • 静的コード分析の導入。
    • 自動テスト環境の整備でレビューコストを削減。
    • E2Eテストの充実化と統合テストの導入。
  • AI活用
    • AIを用いたテスト設計やレビュー効率化。
    • 仕様書や設計書の自動生成でメンテナンス性向上を目指します。

プロセス改善

  • 古い仕様書のアップデート
    • 整合性が取れていない部分を精査し、最新状態に更新。
  • 進行管理の効率化
    • チーム間連携の強化とスケジュール管理の最適化を進めます。

振り返り会を終えて

「〇〇さんが△△をやってくれたおかげで、こちらの作業で助かりました」という声は、年末にふさわしいほっこりした気持ちになりました。

特に「ドキュメント整備のおかげで助かった」という声が多く、開発やQA、その後の問い合わせ対応など多くの場面でドキュメント整備の効果が実際に現れていることを知り、その重要性を再認識しました。

他には、自分が直接関与している部分以外で、テストの改善やツール導入による効率化といった下支えとなる取り組みが評価された点も良かったと思います。本人が意識的にアピールしない部分であっても、他のメンバーから称賛され、その活躍が共有される機会となったのは、今回の成果の一つです。


おわりに

ポジティブフィードバックは「常に」やっていくことが大事、ということが冒頭で紹介した「みんなのフィードバック大全」には書かれています。

今年の取り組みを土台により強固なチーム文化を築き上げていけるように活動していくので、また色々な取り組みをブログに書き記していければと思います。

2024年もお世話になりました。ありがとうございました!

2025年もどうぞよろしくお願いいたします。

© Toreta, Inc.

Powered by Hatena Blog