【開発】【設計】DesignDoc - j-komatsu/myCheatSheet GitHub Wiki

DesignDoc(デザインドキュメント)について

目次

  1. DesignDocとは
  2. 用途と特徴
  3. ツール一覧
  4. DesignDocの構成要素
  5. 作成手順
  6. 実装例
  7. まとめ

DesignDocとは

読み方: デザインドキュメント

概要: DesignDoc(デザインドキュメント)は、ソフトウェア開発において、システムや機能の設計内容を詳細に記述した文書です。

用途と特徴

項目 内容
目的 システムや機能の設計内容を明確化し、関係者間の共通理解を促進する。
特徴 - 設計の背景や目的を明確化- 技術的な詳細やトレードオフの記録- 将来的な保守や拡張の指針となる
MD利用有無 Markdown形式での記述が一般的で、視覚的に整理しやすい。

ツール一覧

DesignDocを作成・管理する際に使用される代表的なツールを紹介します。

ツール 読み方 用途 Markdown対応 特徴
Confluence コンフルエンス ナレッジ共有・ドキュメント管理 × リッチテキストエディタを採用し、チームでの共同編集が可能
Kibela キベラ ナレッジ共有・社内Wiki Markdown対応でエンジニア向けの情報共有に最適
Notion ノーション ドキュメント・データ管理 マークダウンをサポートし、タスク管理やデータベース管理も可能
Obsidian オブシディアン Markdownベースのノート管理 ローカル環境で動作し、プライベートなドキュメント管理に最適
MkDocs エムケイドックス 静的サイト生成 Markdownで記述した文書をHTMLに変換し、ドキュメントサイトを作成可能
Docusaurus ドキュサウルス 静的サイト生成 Reactベースのドキュメント管理ツールで、Markdownを活用可能
Miro ミロ オンラインホワイトボード × 図やフローチャート、リアルタイムのブレインストーミングに特化
Lucidchart ルシッドチャート 図やフローチャート作成 × UIデザインやプロセス図を作成でき、チームコラボレーション向け
PlantUML プラントユーエムエル UML図作成 UML図をコードで記述可能で、設計図の自動生成が可能
Swagger スワッガー API設計 OpenAPI仕様に基づき、REST APIの設計・ドキュメント化が可能
Postman ポストマン APIテスト × APIのテストや設計、モック作成に適している

各ツールの詳細

1. Confluence(コンフルエンス)

  • Atlassianが提供するナレッジ管理ツール。
  • リッチテキストエディタを採用し、WYSIWYG形式での編集が可能。
  • チームの情報共有に最適。
  • Markdownには対応していないが、プラグインを利用すれば対応可能。

2. Kibela(キベラ)

  • Markdownに完全対応した日本発のナレッジ共有ツール。
  • GitHubとの連携が容易で、エンジニアに人気。
  • タグ付けやグループ分けができ、情報整理がしやすい。

3. Notion(ノーション)

  • ドキュメント、タスク管理、データベース機能を備えたオールインワンツール。
  • Markdownのインポート・エクスポートに対応。
  • チームコラボレーション機能が豊富。

4. Obsidian(オブシディアン)

  • ローカル環境で動作するMarkdownベースのノートアプリ。
  • プラグインを追加することで機能を拡張可能。
  • プライバシー重視のユーザー向け。

5. MkDocs(エムケイドックス) / Docusaurus(ドキュサウルス)

  • Markdownを元にドキュメントサイトを生成する静的サイトジェネレーター。
  • MkDocs: シンプルで軽量、静的な技術文書向け。
  • Docusaurus: Reactを活用し、カスタマイズ性が高い。

6. Miro(ミロ) / Lucidchart(ルシッドチャート)

  • Miro: オンラインでホワイトボードを共有し、ブレインストーミングやUX設計に活用可能。
  • Lucidchart: プロセスフローやネットワーク図などの作成が容易。

7. PlantUML(プラントユーエムエル)

  • UML図をコードで記述できるツール。
  • GitHubやJiraとの連携が可能。
  • 設計の自動化に貢献。

8. Swagger(スワッガー) / Postman(ポストマン)

  • Swagger(OpenAPI): REST APIの設計、ドキュメント自動生成。
  • Postman: APIのテストやモック作成に特化。
    • APIリクエストの作成・実行: GET, POST, PUT, DELETE などのHTTPリクエストを簡単に作成・実行可能。
    • コレクション機能: APIリクエストをグループ化して管理できる。
    • 環境変数の利用: テスト環境や本番環境で異なる設定を簡単に切り替えられる。
    • スクリプトによるテスト自動化: JavaScriptベースのスクリプトでレスポンスの検証が可能。
    • Mock Server 機能: APIが未完成の状態でもテストを進められる。
    • Swagger(OpenAPI)との統合: OpenAPI仕様をインポートしてAPIドキュメントとして活用可能。
  • Swagger(OpenAPI): REST APIの設計、ドキュメント自動生成。
  • Postman: APIのテストやモック作成に特化。

DesignDocの構成要素

DesignDocは以下の要素で構成されます。

  1. タイトルと概要: ドキュメントのタイトルと、設計対象の概要を記述します。
  2. 背景と目的: なぜこの設計が必要か、その背景と目的を説明します。
  3. 要件定義: 機能要件や非機能要件を明確にします。
  4. 設計詳細: システムのアーキテクチャやデータフロー、使用する技術などの詳細を記述します。
  5. トレードオフと代替案: 検討した他の方法や、それらを採用しなかった理由を記載します。
  6. テスト計画: どのようにテストを行うか、その計画を示します。
  7. リスクと課題: 想定されるリスクや現在の課題を列挙します。

作成手順

以下の手順でDesignDocを作成します。

  1. 情報収集: 要件や制約条件を関係者から収集します。
  2. 構成の決定: 上記の構成要素に基づき、ドキュメントのアウトラインを作成します。
  3. 詳細記述: 各セクションに詳細な情報を記述します。
  4. レビュー: 関係者にドキュメントを共有し、フィードバックをもらいます。
  5. 修正と更新: フィードバックを反映し、ドキュメントを更新します。

実装例

以下に、簡単なDesignDocのサンプルを示します。

タイトルと概要

タイトル: ユーザー認証機能の設計

概要: 本ドキュメントは、新規に導入するユーザー認証機能の設計内容を記述します。

背景と目的

現在のシステムでは、ユーザー認証が不十分であり、セキュリティリスクが高まっています。そこで、安全性の高い認証機能を導入し、ユーザーの信頼性を向上させることを目的とします。

要件定義

  • 機能要件:
    • ユーザー登録
    • ログイン
    • パスワードリセット
  • 非機能要件:
    • パスワードの暗号化
    • 多要素認証の導入

設計詳細

以下に、システムのアーキテクチャ図を示します。

graph TD;
  A[ユーザー] --> B[認証サーバー];
  B --> C[データベース];
  B --> D[多要素認証サービス];

トレードオフと代替案

  • 代替案1: 外部認証サービスの利用

    • メリット: 実装コストの削減
    • デメリット: カスタマイズ性の低下
  • 代替案2: 現行システムの改修

    • メリット: 既存資産の活用
    • デメリット: セキュリティ強度の不足

テスト計画

  • 単体テスト: 各機能の動作確認
  • 結合テスト: システム全体の連携確認
  • 負荷テスト: 高負荷時の性能確認

リスクと課題

  • リスク: 新機能導入による既存機能への影響
  • 課題: ユーザーへの周知と教育

追加: DesignDocの実際の適用例

1. 新規システム開発の設計

  • 例: ECサイトの注文管理システム
  • 目的: スケーラブルな設計を実現し、将来的な拡張を容易にする
  • 設計要素:
    • データフロー(注文受付 → 決済処理 → 在庫更新)
    • API設計(注文API、決済API、通知API)
    • エラーハンドリング(決済失敗時のリトライ処理)

2. 既存システムのリファクタリング

  • 例: レガシーコードのモダナイズ
  • 目的: 技術的負債を解消し、メンテナンス性を向上
  • 設計要素:
    • コードのモジュール化(責務分離、関数の再利用)
    • パフォーマンス改善(キャッシュ導入、データベース最適化)
    • テスト戦略(単体テスト・結合テストの強化)

3. APIの設計とドキュメント化

  • 例: RESTful APIの開発
  • 目的: 外部システムとの連携を円滑にする
  • 設計要素:
    • エンドポイント設計(GET /users, POST /orders)
    • 認証方式(JWT、OAuth2.0)
    • レスポンスフォーマット(JSON, エラーハンドリング)
    • 自動生成ドキュメント(Swagger, OpenAPI)

まとめ

DesignDocは、ソフトウェア開発における設計内容を明確化し、関係者間の共通理解を促進する重要なドキュメントです。 このように、DesignDocは様々な開発シーンで活用され、プロジェクトの成功に大きく貢献します。