4.5K Views
September 11, 25
スライド概要
人間にもAIにも理解可能な「実装設計図」をチームの共有知として確立するために、kencomチームがとったアプローチについて解説します。
イベント概要: https://dena.connpass.com/event/364933/
アーカイブ動画:https://youtu.be/r0CO2zEWgJg
DeNA が社会の技術向上に貢献するため、業務で得た知見を積極的に外部に発信する、DeNA 公式のアカウントです。DeNA エンジニアの登壇資料をお届けします。
PRDから始める、生きたドキュメントと 実装への最短ルート 黒木 保 DeSCヘルスケア製品開発統括部プロダクト開発部開発グループ 株式会社ディー・エヌ・エー © DeNA Co., Ltd. 1
自己紹介 黒木 保 (tamotsu.kuroki) DeSCヘルスケア製品開発統括部プロダクト開発部開発グループ ● ● ● 2022年4月: DeNA入社 2022年7月: DeSCヘルスケア配属 ○ kencom 新規開発・保守・運用チーム 最近 ○ kencom 効率化チーム ○ kencom データ連携リアーキテクチャチーム @John-bardera @John_bardera [email protected] © DeNA Co., Ltd. 2
kencomって? 1 ● 2015年からサービス提供! ● いろんな健診・ライフログ データをアプリで見れる! ● ポイントとかの概念がある! ● ユーザにも種類がある! © DeNA Co., Ltd. 3
要求をどうやって コードに落としていますか? © DeNA Co., Ltd. 4
2 コードに落とすまで ● 要望 © DeNA Co., Ltd. 5
2 コードに落とすまで ● 要望 ● ユーザーストーリー © DeNA Co., Ltd. 6
2 コードに落とすまで ● 要望 ● ユーザーストーリー ● 機能要件 © DeNA Co., Ltd. 7
2 コードに落とすまで ● 要望 ● ユーザーストーリー ● 機能要件 ● ドメインモデル設計 © DeNA Co., Ltd. 8
2 コードに落とすまで ● 要望 ● ユーザーストーリー ● 機能要件 ● ドメインモデル設計 ● DB設計 ● … © DeNA Co., Ltd. 9
全て「共有知」にできていますか? © DeNA Co., Ltd. 10
3 私たちにはできていなかった ● ドキュメントが部分的にしか存在しない ● 人によってドキュメントの質が不安定 ● 情報が古く、メンテナンスされていない ● 結局、実装した人に聞くしかない ● 最終的には、コードを読まないとわからない © DeNA Co., Ltd. 11
なぜできなかったのか © DeNA Co., Ltd. 12
なぜできなかったのか A. 圧倒的にコストが高いから。 © DeNA Co., Ltd. 13
「暗黙知」へ依存 © DeNA Co., Ltd. 14
暗黙知による課題 © DeNA Co., Ltd. 15
手戻りコストの増大 共有知が足りておらず、レビュー段階で実装の修正が必要になる © DeNA Co., Ltd. 16
開発の属人化・ブラックボックス化 担当者不在による開発停止リスク © DeNA Co., Ltd. 17
AI活用の阻害 指示に必要な「実装意図」「ドメイン知識」の不足 © DeNA Co., Ltd. 18
私たちのアプローチ © DeNA Co., Ltd. 19
まずゴールを設定した © DeNA Co., Ltd. 20
人間にもAIにも理解可能な 「実装設計図」 をチームの共有知として確立する © DeNA Co., Ltd. 21
1 © DeNA Co., Ltd. 要件駆動ドメインモデリング自動化プロセスの全体像 22
要件駆動ドメインモデリング自動化プロセスの狙い 2 ● ドメインモデルなどの仕様と同時に、 仕様の意図を含めた情報全てが管理できる ● AIのプロセスとしてまとめることで、設計の道順で迷わない、質が一定 ● コードと同じリポジトリにあることで、AI活用が容易 ● 単純にGitによる差分・ログ管理が可能 © DeNA Co., Ltd. 23
3 © DeNA Co., Ltd. ユーザーストーリーの作成 24
ユーザーストーリーの作成 3 ● 入力 ● ○ 要求(PRD) ○ (Legacy Code) 出力 ○ ユーザーストーリー ■ © DeNA Co., Ltd. 受け入れ基準を持つ 25
要求の例: 3 ユーザーストーリーの作成 # 企業データ連携 PRD ## 業務背景 ● 入力: 要求(PRD) ○ 現在はPRDほど厳密ではない ○ 「あるドメインモデルは、 こういう業務背景をもち、 ざっくりこんなことを実現 したい」を書いたもの 弊社システムに契約企業より提供された企業データを取り込み、他のす べてのデータ(社員等)の基盤となる企業マスターデータを構築します。 ## スコープ - `弊社システム API`からの企業データ取り込み(同期処理) - 企業マスターデータの管理(新規作成・更新・論理削除) - 外部システム向け企業情報提供 API - データ連携結果の監視機能 ## 実現したいこと ### データ連携 - `us-0010`: `弊社システム API`による企業データ取り込み ### API 提供 - `us-0011`: 企業情報取得 API を提供 © DeNA Co., Ltd. 26
3 ユーザーストーリーの作成 テンプレート: # [機能名] ユーザーストーリー ● プロンプト ## ストーリー ○ ユーザーストーリーは こうあるべき!に従って - As a [ユーザーの種類・役割] - I want [実現したい機能・行動] - So that [得られる価値・目的] ○ ファイルに出力して ### No [XXXX-0010] ○ わからないことは人に聞いて - Given - [前提条件1] - [前提条件2] - When - [実行する行動] - Then - [期待される結果] … © DeNA Co., Ltd. 27
3 ユーザーストーリーの作成 ユーザーストーリーの例: # 企業データ取り込み ユーザーストーリー ● 出力: ユーザーストーリー ○ ○ © DeNA Co., Ltd. 受け入れ基準は他にも 「既存企業レコード更新」 「企業レコード論理削除」 「API接続エラー時の処理」 「データ形式エラー時の処 理」 ファイルとして出力される ## ストーリー - As a システム管理者 - I want 弊社システムAPIから企業データを取り込みたい - So that 企業マスターデータを最新状態に維持し、他のデータ連携の基 盤を構築できる ## 受け入れ基準 ### No 0010-0010: 新規企業レコード作成 - Given - 弊社システムAPIから取得した企業データのうち、企業IDがDBに存在 しない企業がある - When - 企業データ取り込み処理を実行する - Then - 新規企業レコードが作成される - 企業ID、企業名、企業コード、その他企業情報がDBに保存される - 作成日時、更新日時が現在時刻で保存される 28
4 © DeNA Co., Ltd. 概念抽出の作成 29
概念抽出の作成 4 ● 入力 ユーザーストーリー ○ ● 出力 ○ © DeNA Co., Ltd. 用語集 30
4 概念抽出の作成 テンプレート: ● プロンプト ○ ○ テンプレートに従って わかんないことは人に聞いて # 用語集 ## [プロジェクト識別名] プロジェクトで使用される用語の定義集 ### [ドメイン識別名] #### [日本語名] ○ 検索で辿り着ける形式知はい らないよ ○ ファイルに出力して - 英語名: [英語名] - 略語: [略語1(省略可能)] - 説明: [説明] #### [日本語名] - 英語名: [英語名] - 説明: [説明] © DeNA Co., Ltd. 31
用語集の例: 4 概念抽出の作成 ## 企業データ連携プロジェクトで使用される用語の定義集 ### 企業・マスターデータ関連 ● 出力: 用語集 ○ ドメインに関連すること ○ システムに関連すること ○ エンジニア用語まで ■ 「論理削除」とか #### 企業 - 英語名: company - 説明: 弊社システムから取得される企業情報を表すエンティティ。企業 マスターデータの基本単位となる #### 企業名(カナ) - 英語名: name_kana - 説明: 企業の正式名称のカナ表記 … ### システム・データ連携関連 #### 弊社システム - 英語名: internal_system - 説明: 企業情報の唯一のデータソースとして機能する上流システム … © DeNA Co., Ltd. 32
5 © DeNA Co., Ltd. ドメインモデルの作成 33
ドメインモデルの作成 5 ● 入力 ● ○ ユーザーストーリー ○ 用語集 ○ (追加で制約の情報等) 出力 ○ © DeNA Co., Ltd. ドメインモデル 34
テンプレート:
5
ドメインモデルの作成
● プロンプト
© DeNA Co., Ltd.
○
純粋にドメインモデルのみ
定義して
○
テンプレート(サンプル)に
従って
○
制約とか、わかんないことは
人に聞いて
○
mermaidでファイルに
出力して
# サンプル
```mermaid
classDiagram
%% 学校:教育機関全体を表す。複数のクラスを持つ。
class School {
%% 学校名:学校の正式名称
%% 制約: 必須、100文字まで
+String name
}
%% 学級:学校に所属し、複数の生徒が在籍する単位。いわゆる「クラ
ス」。
%% 予約語と紛らわしいため `SchoolClass` としている
class SchoolClass {
%% 学級名:年度や組を含む名称(例:「2025年度 1年A組」)
%% 制約: 必須、50文字まで
+String name
}
%% 学校は、複数のクラスで構成される(Composition)
%% 学校が廃校になれば、クラスも存在しなくなる強い関係。
School "1" *-- "*" SchoolClass : 構成される
```
35
5 ドメインモデルの作成 ● 出力: ドメインモデル © DeNA Co., Ltd. ○ sampleに従って 制約や説明含めて記述 ○ mermaidなので 人も認識しやすい! 36
ドメインモデルの例: 5 ドメインモデルの作成 ● 出力: ドメインモデル ○ ○ sampleに従って 制約や説明含めて記述 mermaidなので 人も認識しやすい! ```mermaid classDiagram %% 企業:企業データ連携における中心的なエンティティ。弊社システ ムから取得される企業情報を表す。 class Company { %% 企業ID:企業を一意に識別するための識別子 %% 制約: 必須、弊社システムが管理する主キー +String company_id %% 企業コード:企業ごとにdescにおいて一意に採番している文字列 %% 制約: 必須、5文字まで、英数字とアンダースコア +String company_code %% 企業名(カナ):企業名のカタカナ表記 %% 制約: 必須、1000文字まで、全角カタカナと長音記号のみ +String name_kana %% 従業員数:企業の従業員数 %% 制約: 必須、0以上999999以下の整数 +Integer num_employees ... } ``` © DeNA Co., Ltd. 37
6 © DeNA Co., Ltd. 整合性確認とデータ変化例の作成 38
整合性確認とデータ変化例の作成 6 ● 入力 ● ○ ユーザーストーリー ○ ドメインモデル 出力 © DeNA Co., Ltd. ○ (整合性の確認) ○ データ変化例 39
6 整合性確認とデータ変化例の作成 ● プロンプト: 整合性確認 © DeNA Co., Ltd. ○ ユーザーストーリーと ドメインモデルを比べて 過不足ないかチェックして ○ 結果、実際ErrorLogが あった方が良いと指摘 40
6 整合性確認とデータ変化例の作成 ● プロンプト: データ変化例の作成 © DeNA Co., Ltd. ○ ユーザーストーリーの 受け入れ条件から Given/Thenを定義して ○ サンプルを元に作成して ○ ファイルに出力して 41
6 整合性確認とデータ変化例の作成 ● プロンプト: データ変化例の作成 © DeNA Co., Ltd. ○ ユーザーストーリーの 受け入れ条件から Given/Thenを定義して ○ サンプルを元に作成して ○ ファイルに出力して 42
結果と学び © DeNA Co., Ltd. 43
1 目的の達成と現在地 ● 実装前の「共有知化」を達成 ○ ◎: 目的であった一定の質の共通認識が形成できた → 生成物をまずリポジトリに含めて良いかのレビュー体制により 仕様の認識齟齬が減少 © DeNA Co., Ltd. 44
1 目的の達成と現在地 ● 実装前の「共有知化」を達成 ○ ◎: 目的であった一定の質の共通認識が形成できた → 生成物をまずリポジトリに含めて良いかのレビュー体制により 仕様の認識齟齬が減少 ○ © DeNA Co., Ltd. △: 資料に落とし込めない暗黙知は依然存在している 45
1 目的の達成と現在地 ● 実装前の「共有知化」を達成 ○ ◎: 目的であった一定の質の共通認識が形成できた → 生成物をまずリポジトリに含めて良いかのレビュー体制により 仕様の認識齟齬が減少 © DeNA Co., Ltd. ○ △: 資料に落とし込めない暗黙知は依然存在している ○ △: 長期的にこのプロセスで管理可能かは、まだ評価できない 46
2 AI活用の基盤構築 ● AIの指示書としての活用 ○ ユーザーストーリー ■ ○ ドメインモデル ■ © DeNA Co., Ltd. API実装やテストコードの生成にマッチ DB設計、Protobufスキーマの生成にマッチ 47
まとめ © DeNA Co., Ltd. 48
まとめ 1 ● 「高コストな作業」だったドキュメンテーションが AIの支援によって、低コストとなった。 ● そのドキュメントが、さらなるAI活用を加速させた。 © DeNA Co., Ltd. 49
明日からできること 2 1. 次のタスクの要求をコピーする 2. AIにお願いする 「この要求から、考えられるユーザーストーリーを5つ挙げてください」 3. ドキュメントとして残してみる © DeNA Co., Ltd. 50
3 来たれ!kencomチームへ! https://engineering.dena.com/team/kencom/ © DeNA Co., Ltd. 51
© DeNA Co., Ltd. 52