【設計書難民へ】React,VueのUMLを自動生成するライブラリを作りました!
UML Document Generator
ReactとVueに対応したドキュメント自動生成ライブラリを作成しました!npmでインストール可能です。
設計書難民の方にぜひ使っていただきたいです!!!
🚀 このライブラリを生み出した理由
皆さんは、コードが設計書なReactやVueプロジェクトで、コードの構造を理解するのに苦労したことはありませんか?私も同じ悩みを抱えていました。
コードにコメントも書いてないし、意味わかんねーよ状態でした。
複雑化するフロントエンドコードの構造を把握するため、「もっと直感的にわかる方法はないのか」と考えた末に生まれたのが、このUML Document Generatorです。
🛠 開発のモチベーション
私が解決したかった課題は以下の3つです:
- コードの構造を可視化したい
- 色々なコードに対応できる柔軟性が欲しい
- 完全は求めないから認知負荷が減るような設計書が欲しい
🤖 ライブラリの機能について
概要
ReactやVueのコードを検出して(tsx, jsx, vueを検出して)3つのUMLと、コンポーネントの概要をまとめたmarkdownドキュメントを出力します。
このツールの特徴は、LLM(大規模言語モデル)を活用してコードを解析し、UML図を自動生成する点です。OpenAI、Anthropic、OLLamaに対応しております。
サポートする図の種類
以下の3種類のUML図を自動生成できます:
- 状態遷移図: コンポーネントの状態変化を可視化
- アクティビティ図: ワークフローや処理の流れを表現
- シーケンス図: オブジェクト間の相互作用を描画
状態遷移図: TODOアプリでのコンポーネントの例
アクティビティ図: TODOアプリでのコンポーネントの例
シーケンス図: TODOアプリでのコンポーネントの例
プラスでmarkdownドキュメントも生成します:
- markdownドキュメント: コンポーネントの状態、イベントハンドラ、処理内容などを記載
markdown設計書: TODOアプリでのコンポーネントの例
フレームワーク対応
現在、以下のフレームワークに対応しています:
- React(
.tsx
,.jsx
) - Vue(
.vue
)
使用例: Reactプロジェクトでの実行
コマンドラインで対象のフォルダ、アウトプットのフォルダやフレームワークを指定して叩くだけです。
# インストール
npm install uml-document-generator -g
# 実行
uml-document-generator -i ./src -o ./output -f react --openai-key YOUR_API_KEY
オプション
いくつかの設定が可能です:
オプション | 説明 | 必須 | デフォルト値 |
---|---|---|---|
-i, --input <path> |
React,Vueファイルのディレクトリパス | ✅ | - |
-o, --output <path> |
UMLファイルの出力ディレクトリ | ❌ | ./uml |
-f, --framework <type> |
使用するフレームワーク(reactまたはvue) | ✅ | - |
-s, --service <type> |
使用するAIサービス(openaiまたはclaudeまたはollama) | ❌ | openai |
-m, --model <model> |
使用するモデル | ❌ | openai: gpt-4o-mini claude: claude-3.5-sonnet-20241022 ollama: llama3.1
|
--openai-key <key> |
OpenAI APIキー(環境変数 OPENAI_API_KEY でも設定可能) | ❌ | - |
--claude-key <key> |
Claude APIキー(環境変数 ANTHROPIC_API_KEY でも設定可能) | ❌ | - |
--env <path> |
環境変数ファイルのパス | ❌ | .env |
コストについて
OpenAIのgpt-4o-mini
では、700行程度のコードで約1円程度と、非常に低コストを実現しています。
今後の展望
現在は限定的な機能ですが、やる気があれば他のフレームワークに対応していきます。
AzureAD環境が用意できれば、Azure Openaiにも対応したいところです。
📕 おわりに
ここまでお読みいただきありがとうございました!!
このツールは、私自身の開発体験を改善するために生まれました。皆さんのプロジェクトでも、コードの可視化と理解に役立てていただければ幸いです。
また、OSS(オープンソースソフトウェア)のため、Pull Requestやissue起票も積極的に歓迎しております!
Discussion