Skip to content

ADR-007: VitePress採用(ドキュメントツール)

ステータス

採用済み

意思決定者

  • 太田裕貴(CTO)

決定日

2024年頃


背景(Context)

Qudenの開発チームは、技術ドキュメント、API仕様、開発ガイド等を管理する必要があります。従来はNotionを使用していましたが、以下の課題がありました。

現状の課題

  • Notionはコラボレーションツールとしては優秀だが、技術ドキュメントとしては制約がある
  • コードブロックのシンタックスハイライトが限定的
  • Markdownファイルとして管理できないため、Gitでのバージョン管理ができない
  • ローカル検索が不十分
  • 開発者向けのドキュメントツールとしての機能(目次自動生成、リンク検証等)が不足

解決したいこと

  • Markdownでドキュメントを管理し、Gitでバージョン管理
  • 強力なシンタックスハイライト
  • ローカル検索機能
  • 高速で軽量な静的サイト生成
  • 開発者フレンドリーなドキュメント作成環境

要件(Requirements)

機能要件

  • Markdownでドキュメントを記述
  • コードブロックの強力なシンタックスハイライト
  • ローカル検索機能
  • 目次自動生成
  • レスポンシブデザイン
  • ダークモード対応

非機能要件

  • パフォーマンス: 高速なページ読み込み
  • 開発効率: ホットリロード、プレビュー機能
  • 保守性: シンプルな設定ファイル
  • カスタマイズ性: テーマのカスタマイズが容易

制約条件

  • 技術的制約: Viteベースで高速ビルド
  • ビジネス的制約: 無料のオープンソースツール
  • 時間的制約: 既存NotionドキュメントからのMarkdown移行が容易

検討した選択肢

選択肢1: Notion(現状維持)

概要

Notionをそのままドキュメント管理ツールとして使用。

メリット

  • 学習コストゼロ(既に使用中)
  • リッチなコラボレーション機能
  • データベース機能が強力

デメリット

  • Gitでのバージョン管理ができない
  • コードブロックのシンタックスハイライトが限定的
  • Markdown出力が不完全
  • ローカル検索が不十分
  • 技術ドキュメントとしての機能が不足

実装コスト

  • 初期実装: ゼロ
  • 学習コスト: ゼロ
  • 保守コスト: 中(外部ツールで管理)

選択肢2: Docusaurus(Meta製)

概要

Reactベースの静的サイトジェネレーター。Meta(Facebook)が開発。

メリット

  • Reactベースでカスタマイズ性が高い
  • 多言語対応が強力
  • バージョニング機能
  • プラグインエコシステムが充実

デメリット

  • ビルドが遅い(Reactベース)
  • 設定ファイルが複雑
  • カスタマイズに React の知識が必要
  • オーバースペック(Quden の用途には不要な機能が多い)

実装コスト

  • 初期実装: 中
  • 学習コスト: 中〜高
  • 保守コスト: 中

選択肢3: VitePress(Vue公式)

概要

Viteベースの静的サイトジェネレーター。Vue.js 公式ドキュメントで使用されている。

メリット

  • Viteベースで高速: ビルド・HMRが非常に高速
  • シンプルな設定: 最小限の設定でドキュメントサイトを構築
  • Markdown拡張: Vue コンポーネントをMarkdown内で使用可能
  • 強力なシンタックスハイライト: Shikiによる美しいコードハイライト
  • ローカル検索: 標準でローカル検索機能を提供
  • 軽量: 静的サイト生成で、ランタイムが軽量
  • ダークモード: 標準対応
  • レスポンシブ: モバイルフレンドリー

デメリット

  • Vueエコシステムに依存
  • プラグインエコシステムがDocusaurusより小さい
  • バージョニング機能がない(将来的に追加予定)

実装コスト

  • 初期実装: 低
  • 学習コスト: 低
  • 保守コスト: 低(シンプルな設定)

決定(Decision)

選択した技術: VitePress

選択理由

  1. 要件との適合性

    • Markdownでドキュメントを記述でき、Gitでバージョン管理可能
    • Shikiによる強力なシンタックスハイライト
    • ローカル検索機能が標準で提供
    • 目次自動生成、レスポンシブデザイン、ダークモードすべて標準対応
  2. 技術的妥当性

    • Viteベースの高速ビルド: 開発時のHMRが非常に高速で、開発効率が向上
    • シンプルな設定: 最小限の設定でドキュメントサイトを構築可能
    • Markdown拡張: Vueコンポーネントを埋め込み可能で、カスタマイズ性が高い
    • 軽量: 静的サイト生成で、パフォーマンスが優れている
  3. コスト対効果

    • 学習コストが低く、短期間でドキュメントサイトを構築可能
    • オープンソースで無料
    • 保守コストが低い(シンプルな設定)
  4. 将来性

    • Vue.js公式ドキュメントで使用されており、継続的な開発が期待できる
    • Viteエコシステムの成長により、さらなる機能追加が期待できる

実装方針

  1. Markdownファイルの管理

    • data/dev_docs/ ディレクトリで Markdown ファイルを管理
    • Gitでバージョン管理
  2. サイドバー・ナビゲーション

    • .vitepress/config.mts で設定
    • ドキュメントのカテゴリごとにサイドバーを構成
  3. ローカル検索

    • search.provider: 'local' で設定
    • 日本語検索もサポート
  4. テーマのカスタマイズ

    • デフォルトテーマをベースに、必要に応じてカスタマイズ
  5. Notion → Markdown 移行

    • Notion API を使って、既存ドキュメントをMarkdownに変換
    • 定期的に同期スクリプトを実行

受け入れたトレードオフ

トレードオフ1: Vueエコシステムへの依存

  • 影響: Vueエコシステムに依存する
  • 受け入れ理由: チームがTypeScript/JavaScriptに慣れており、Vueの学習コストは低い
  • 軽減策: カスタマイズが必要な場合のみVueコンポーネントを作成

トレードオフ2: バージョニング機能の不在

  • 影響: ドキュメントのバージョニング機能がない
  • 受け入れ理由: Qudenのドキュメントは最新版のみを管理すれば十分
  • 軽減策: 必要に応じて、Gitのタグ・ブランチでバージョン管理

トレードオフ3: プラグインエコシステムの小ささ

  • 影響: Docusaurusと比べて、プラグインが少ない
  • 受け入れ理由: Qudenの用途では、標準機能で十分
  • 軽減策: 必要に応じて、Vueコンポーネントでカスタム機能を実装

結果(振り返り)

うまくいったこと(Pros)

  • 高速なビルド: Viteベースで、ビルド・HMRが非常に高速
  • シンプルな設定: 最小限の設定でドキュメントサイトを構築できた
  • 美しいコードハイライト: Shikiによるコードハイライトが非常に美しい
  • ローカル検索: 標準のローカル検索が強力で、日本語検索も問題なく動作
  • Markdownベース: Gitでバージョン管理でき、開発者フレンドリー

うまくいかなかったこと(Cons)

  • Notion移行の手間: Notion APIを使った移行スクリプトの作成に時間がかかった
  • カスタマイズの学習: Vueコンポーネントのカスタマイズに若干の学習コストがあった

学び

  • Markdownの威力: Markdownベースでドキュメントを管理することで、開発者の生産性が向上
  • ローカル検索の重要性: ローカル検索機能により、ドキュメントの検索性が大幅に向上
  • Viteの高速性: Viteの高速なHMRにより、ドキュメント作成の効率が大幅に向上

今後の改善点

  • Notion同期の自動化: Notion APIを使った定期的な同期スクリプトの自動化
  • カスタムコンポーネントの追加: 必要に応じて、カスタムVueコンポーネントを追加
  • OGP画像の自動生成: ドキュメントページのOGP画像を自動生成する仕組みの導入

参考リンク


関連ドキュメント