最終更新日: 2025年8月29日
CodeGarden アイコン

CodeGarden

JavaScript/TypeScript Code Visualizer

はじめに

CodeGarden は、JavaScript/TypeScriptのソース構造を「星と線」のビジュアルで俯瞰・分析するデスクトップアプリです。関数やブロックをノードとして描画し、階層や呼び出し関係をエッジとして表現します。複数の表示パターンとビジュアルスタイルを切り替えながら、設計やリファクタの勘所を素早く見つけられます。

言語サポート: 現在はJavaScript/TypeScriptのみ完全対応。ES6+、JSX、TypeScriptの高度な構文をサポートしています。

🎯 初心者ガイド - CodeGardenをはじめよう

📚 CodeGardenって何?

CodeGardenは、JavaScriptやTypeScriptのコードを「星空のように美しく」視覚化するツールです。 複雑なコードの構造を、星(ノード)と線(関係性)で表現し、一目で全体像を把握できるようにします。

✨ こんな時に使えます

  • 大きなプロジェクトの全体構造を把握したい
  • 複雑なコードを理解しやすくしたい
  • コードの品質や問題点を見つけたい
  • チームでコードレビューをしたい
  • リファクタリングの計画を立てたい

🎨 何ができるの?

  • 関数・クラスを「星」として表示
  • コードの関係性を「線」で表現
  • 複雑度や品質を色やサイズで表示
  • 13種類の表示パターンから選択
  • 詳細な品質レポートを生成

🚀 はじめての使い方(3ステップ)

1

ファイルを開く

アプリを起動して、左上の「Open File」ボタンをクリック。JavaScriptやTypeScriptファイル(.js, .jsx, .ts, .tsx)を選択してください。

📁 例: main.js, app.ts, component.tsx
2

表示を調整する

左側のパネルで以下の設定を調整できます:

  • Analyzer: 解析方法(最初は「Basic」でOK)
  • Render Pattern: 表示パターン(最初は「v1 放射状」でOK)
  • Star Density: 星の密集具合(スライダーで調整)
3

コードを探索する

右側の星空キャンバスで以下を試してみてください:

  • ドラッグ: 画面を移動
  • マウスホイール: 拡大・縮小
  • ダブルクリック: 星を選択してソースコードを表示・関連ノードを強調
  • Escキー: 選択を解除

🌟 表示されるものの意味

✨ 星(ノード)について

関数 - プログラムの処理単位
クラス - オブジェクトの設計図
ブロック - コードのまとまり
変数 - データを保存する場所

🔗 線(エッジ)について

  • 実線: 包含関係(親子関係)
  • 点線: 呼び出し関係(関数の呼び出し)
  • 太い線: 重要な関係性
  • 色の濃さ: 関係の強さ

💡 初心者のためのコツ

🎯 まず全体を見る

最初は画面全体を引いて、コード全体の構造を把握しましょう。大きな関数やクラスが目立つ星として見えます。

🔍 気になる星をクリック

大きな星や複雑そうな星をダブルクリックすると、そのコードの詳細が表示されます。

🎨 表示パターンを変える

「Render Pattern」を変更すると、同じコードでも異なる角度から見ることができます。

🏗️ 階層構造を確認

Basic アナライザーとRenderer v6(グリッド/深度)で、コードのネスト構造を確認できます。

📊 メトリクスを活用

ノードのメトリクス(cc/nest/lines/score)で、複雑度やネスト深度を数値で確認できます。

❓ よくある質問(初心者向け)

Q. 何も表示されない場合はどうすればいい?

JavaScriptやTypeScriptファイルを開いているか確認してください。また、ファイルに構文エラーがないか確認してみてください。

Q. 星が多すぎて見にくい場合は?

「Star Density」スライダーを右に動かして星を分散させましょう。また、「Render Pattern」を「v6 グリッド」に変更すると整理されて見やすくなります。

Q. どの表示パターンがおすすめ?

初心者の方には「v1 放射状」がおすすめです。全体像を把握しやすく、直感的に理解できます。慣れてきたら他のパターンも試してみてください。

Q. 色の意味は?

色はコードの種類を表しています。青は関数、オレンジは制御フロー、黄色はループなどです。星のサイズは複雑度や重要度を示します。

🖥️ 実際のアプリ画面

CodeGardenのメイン画面では、左側のサイドバーでコントロールし、右側のキャンバスでコードを視覚化します。

CodeGardenメイン画面

CodeGardenメイン画面 - 左側で設定、右側で視覚化

📊 品質評価システムの見方

CodeGardenは、コードの品質を複数の指標で評価し、分かりやすいスコアで表示します。

🌟 総合スコア(78%)

これはコード全体の品質を0-100%で表したものです。78%は「B評価」で「平均以上」の品質を意味します。

📈 主要指標
  • 複雑度 80%: コードの理解しやすさ
  • 保守性 95%: 修正や拡張のしやすさ
  • セキュリティ 100%: セキュリティ上の問題
  • MI 100: 保守性指数(Maintainability Index)
⚠️ 注意が必要な指標
  • 構造 22%: コードの構造的複雑さ
  • 技術的負債: 修正が必要な問題の蓄積
  • コードスメル: 改善すべきコードの問題

実際のメイン画面

CodeGardenメイン画面 - 基本表示

CodeGardenメイン画面 - 左側サイドバーと右側コード視覚化

CodeGardenメイン画面 - 詳細表示

CodeGardenメイン画面 - サイドバーの詳細情報とExtended metrics

品質レポートの実際の画面

品質レポート - メイン画面

品質レポート - コード品質分析レポートのメイン画面(総合スコア68% C+評価)

📊 総合評価
  • 総合スコア: 68% - 平均的なコード品質
  • 評価: C+ - 平均以下
  • 保守性: 100% - 優れた保守性
  • 業界標準: SonarQube C+、CodeClimate GPA 2.7
⚠️ 主要な課題
  • 技術的負債: 非常に高い(57.8pt)
  • コードスメル: 非常に多い(33個)
  • コード構造: 26% - 改善が必要
  • 複雑度: 89% - 理解が困難
品質レポート - 詳細指標

品質レポート - 詳細指標と技術的負債の詳細分析

📄 HTMLレポート出力機能

品質レポートは、HTML形式でエクスポートして保存・共有することができます

HTMLレポート出力 - 品質分析レポート

HTMLレポート出力 - コード品質分析レポートのエクスポート機能

📊 レポートの内容
  • 総合品質スコア: コード全体の品質評価
  • 詳細指標: 複雑度、保守性、セキュリティなど
  • 技術的負債: 修正が必要な問題の一覧
  • コードスメル: 改善すべきコードの問題点
  • 改善提案: 具体的なアクションプラン
💡 活用方法
  • チーム共有: 開発チームでの品質議論
  • 進捗管理: 改善作業の進捗追跡
  • ドキュメント化: プロジェクトの品質記録
  • レビュー資料: コードレビューの参考資料

🔍 解析パターン(アナライザー)の違い

CodeGardenには5つの解析パターンがあり、それぞれ異なる角度からコードを分析します。

📋 Basic(基本構造)

初心者におすすめ

  • 関数、クラス、ブロックの基本構造を解析
  • サイクロマティック複雑度を計算
  • 最も軽量で高速
  • 基本的な品質指標を提供

🔗 CallGraph(呼び出し関係)

関数の依存関係を重視

  • 関数間の呼び出し関係を解析
  • 依存性グラフを構築
  • ファンイン・ファンアウトを計算
  • リファクタリング計画に有用

📊 MetricsExt(詳細指標)

詳細な品質分析

  • 技術的負債、コードスメルを詳細分析
  • 保守性指標を計算
  • セキュリティスコアを提供
  • Extended metricsが利用可能

🌐 MultiLang(多言語対応)

TypeScript特化

  • TypeScript固有の構文を認識
  • インターフェース、ジェネリクスに対応
  • デコレータ、列挙型を適切に処理
  • 型安全性を考慮した解析

🎯 Category-Aware(カテゴリ認識)

スマートな分類解析

  • ノードの重要度を自動判定
  • カテゴリ統計を自動計算
  • JavaScript/TypeScript固有の分類
  • 関連性を考慮した分析

解析パターンの実際の違い

CodeGardenメイン画面 - 解析パターン比較

CodeGardenメイン画面 - 異なる解析パターンの表示例

📈 Extended metrics(拡張メトリクス)とは

MetricsExt解析を使用すると、より詳細な品質指標が表示されます。

💸 技術的負債(Technical Debt)

コードの問題が将来的に修正コストとして蓄積される「負債」を数値化します。

  • info: 0.00〜1.99 - 改善候補
  • minor: 2.00〜4.99 - 中程度の改善タスク
  • major: 5.00〜9.99 - 優先して対処すべき負債
  • critical: 10.00以上 - 早急な是正が必要

👃 コードスメル(Code Smells)

コードの品質を損なう「匂い」(問題点)を検出します。

  • Major: 重大な問題(長い関数、複雑な関数)
  • Minor: 軽微な問題(深いネスト、パラメータ過多)
  • Info: 情報(未使用変数、マジックナンバー)

Extended metricsの実際の表示

Extended metrics表示

Extended metrics - サイドバーでの技術的負債とコードスメル表示

💡 改善提案の見方

品質レポートでは、具体的な改善提案も表示されます。

改善提案画面

改善提案 - HIGH/MEDIUM優先度の具体的な実施ステップ

🔴 HIGH(高優先度)

早急に対処すべき問題です。

  • コードスメルの修正
  • セキュリティ問題の解決
🟡 MEDIUM(中優先度)

計画的に対処する問題です。

  • ネスト深度の削減
  • 関数の分割

🎯 次のステップ

基本操作に慣れたら、以下の機能も試してみてください:

  • 推奨レイアウト: Overview/CallGraph/Categoryの3つのプリセットで最適な表示設定を一括適用
  • 品質レポート: コードの問題点や改善点を確認
  • HTMLレポート出力: 品質分析結果をHTMLファイルで保存・共有
  • 複数の表示パターン: 異なる角度からコードを分析
  • Extended metrics: 詳細な品質指標を表示
  • 改善提案の実行: 品質レポートの提案に従ってコードを改善

クイックスタート

  1. アプリを起動し、左上の Open File をクリック、またはJavaScript/TypeScriptファイルをドラッグ&ドロップします。
  2. 必要に応じて Analyzer(Basic / CallGraph / MetricsExt / MultiLang / Category-Aware)と Render Pattern を選びます。
  3. Star Densityスライダーで星々の密集具合を調整し、表示密度を最適化します。
  4. キャンバス上でドラッグ(移動)、ホイール(拡大縮小)、ダブルクリック(選択&コード表示)を使って探索します。
  5. Quality Reportボタンでコード品質分析レポートを表示し、HTML形式でエクスポートできます。
  6. 推奨レイアウトの3つのプリセット(Overview/CallGraph/Category)で、目的に応じた最適な表示設定を一括適用できます。
対応ファイル形式: .js, .jsx, .ts, .tsx ファイルをサポートしています。
星 = ノード(関数/ブロック) / 線 = 階層・呼び出し 基本操作 ・ドラッグ: 移動 ・マウスホイール: 拡大縮小 ・ダブルクリック: その星を選択 & コードを別ウィンドウ表示 ・Esc: 選択解除

ソースビューアー機能

ソースビューアー - 詳細コード表示

ソースビューアー - 星をダブルクリックで開く詳細コード表示

📝 ソースビューアーの機能
  • シンタックスハイライト: JavaScript/TypeScriptの構文を色分け表示
  • 行番号表示: コードの行番号を左側に表示
  • ミニマップ: コード全体の構造を右側に表示
  • ダークテーマ: 目に優しいダークテーマで表示
  • 日本語コメント対応: 日本語コメントも適切に表示
  • エラーハンドリング表示: try-catch文などのエラー処理も視覚化
🎯 活用方法
  • コード理解: 複雑な関数の詳細を確認
  • デバッグ支援: 問題のあるコードの特定
  • 学習支援: コードの構造とロジックの理解
  • レビュー支援: コードレビューの参考資料
CodeGarden アプリ画面

実際のCodeGardenアプリケーション画面 - 左側のコントロールパネルと右側のコード視覚化

アプリケーションの様々な画面

関連ノード強調表示機能

関連ノード強調表示 - 星をダブルクリックすると関連する星々が強調表示される

🔍 関連ノード強調表示機能
  • サブツリー選択: 選択したノードとその子ノードが強調表示
  • 関係性の可視化: 親子関係や呼び出し関係が明確に表示
  • メトリクス表示: 選択ノードの詳細情報(cc/nest/lines/score)を表示
  • 選択サマリー: サイドバーに選択されたノード群の統計情報を表示
  • インタラクティブ操作: 選択状態での詳細なコード探索が可能
💡 活用方法
  • コード理解: 特定の関数やブロックの影響範囲を把握
  • デバッグ支援: 問題のあるコードの関連部分を特定
  • リファクタリング: 変更対象のコード範囲を事前確認
  • 依存関係分析: 関数間の呼び出し関係を視覚的に理解
Category-Aware解析

Category-Aware解析

Pastelスタイル

Pastelスタイル

Grid/Depthパターン

Grid/Depthパターン

画面構成

📱 アプリケーションの実際の画面

メイン画面

CodeGarden メイン画面

左側のコントロールパネルと右側のコード視覚化エリア

Star Density機能

Star Density機能の詳細

Star Densityスライダーでノードの密集具合を調整

サイドバー

  • Controls: Open File / Reset View / Analyzer / Render Pattern / Visual Style / Star Density
  • Summary: ファイルパス、行数、関数数、最大深さ、言語、主要カテゴリ
  • Selection Summary: 選択ノード群の統計(行数、cc、nest、score合計、最大深さなど)
  • Quality Report: コード品質分析レポートの表示とHTMLエクスポート機能
  • Documents: 各種ドキュメント(XML仕様/表示パターンガイド)
  • Language: 英語 / 日本語 / 中国語 / ドイツ語 / ヒンディー語 / 韓国語 切替

キャンバス

  • 白い星空の背景に、ノードとエッジが描画されます。
  • 選択中はラベルとメタ情報(cc/nest/lines/score)が表示されます。
  • 選択サブツリーは淡くハイライトされ、全体が追いやすくなります。
  • ダブルクリック: 星をダブルクリックすると、そのノードのソースコードがSource Viewerで表示されます。
  • 関連ノード強調: 選択したノードとその子ノードが強調表示され、関係性が可視化されます。

操作とコントロール

ファイル操作

  • Open File: 解析対象のJavaScript/TypeScriptファイル(.js, .jsx, .ts, .tsx)を開きます。
  • Drag & Drop: 左ペインにドラッグ&ドロップでもOK。

レポート出力

  • Quality Report: コード品質分析レポートを表示し、HTML形式でエクスポートできます。
  • HTML Export: レポートをHTMLファイルとして保存し、チーム共有やドキュメント化に活用できます。

ビュー操作

  • Reset View: カメラを中央・等倍にリセットします。
  • Esc: 選択解除。ダブルクリック: サブツリー選択&ソースコード表示。
  • Source Viewer: 星をダブルクリックすると、そのノードのソースコードが別ウィンドウで表示されます。
  • 関連ノード強調: 選択したノードとその子ノードが強調表示され、サイドバーに選択サマリーが表示されます。

星々の密集具合調整

  • Star Density: 星(ノード)の密集具合を調整できます。
  • Dense: 星を密集させて、限られた空間に多くの情報を表示。
  • Normal: 標準的な密集度で、見やすさと情報量のバランスを取る。
  • Sparse: 星を分散させて、各ノードを大きく表示し、詳細を確認しやすくする。
Star Density機能

Star Densityスライダーでノードの密集具合を動的に調整

解析と描画

  • Analyzer:
    • Basic: 基本構造と複雑度(cc/nest 等)
    • CallGraph: 関数の呼び出し関係と依存性
    • MetricsExt: 文、分岐、ループなどの詳細メトリクス
    • MultiLang: 多言語対応の言語固有機能検出
    • Category-Aware: カテゴリを意識したスマート解析
  • Render Pattern: v1..v13 の並べ方(後述)。
  • Visual Style: v1..v4 の色・形・線の表現(後述)。
  • レイアウトインサイト: サイドバーに現在のレンダーパターン/選択中アナライザー/密集度を自動表示。切替後の状態確認やチーム共有メモに便利です。
  • レイアウトプリセット: 「Overview」「CallGraph」「Category」の3プリセットでアナライザー・パターン・スタイル・密集度を一括適用。最後に開いたファイルへ即座に反映され、再解析まで自動で完了します。
  • 拡張メトリクス: 技術的負債とコードスメルのサマリーカードに加え、詳細リストで各ノードの課題と加点理由を追跡可能。品質レポート(Quality Report)と同じ集計結果がリアルタイムに並びます。
  • Call Graph パネル: CallGraph 解析や XML にコール情報が含まれる場合に出現し、最大20件の呼び出し関係(関数/呼び出し元/行番号)を表形式で提示します。

推奨レイアウト機能

プロジェクト概要ビュー

プロジェクト概要ビュー - 複雑度と拡張メトリクスを強調

コールグラフ特化ビュー

コールグラフ特化ビュー - 呼び出し関係を力学レイアウトで強調

カテゴリ洞察ビュー

カテゴリ洞察ビュー - カテゴリ帯とグルーピングを強調

📊 Overview(プロジェクト概要)
  • アナライザー: MetricsExt
  • パターン: v7 サンバースト
  • スタイル: v2 ウォーム
  • 用途: 複雑度と拡張メトリクスを強調
🔗 CallGraph(コールグラフ)
  • アナライザー: CallGraph
  • パターン: v10 呼び出し重視
  • スタイル: v3 ハイコントラスト
  • 用途: 呼び出し関係を力学レイアウトで強調
🏷️ Category(カテゴリ洞察)
  • アナライザー: Category-Aware
  • パターン: v9 カテゴリ帯
  • スタイル: v4 パステル
  • 用途: カテゴリ帯とグルーピングを強調

拡張メトリクス機能

拡張メトリクス - 技術的負債とコードスメル

技術的負債とコードスメルの詳細分析

拡張メトリクス - 問題の詳細リスト

具体的な問題項目の詳細リスト

⚠️ 技術的負債(Technical Debt)
  • 総合スコア: 11.240 (critical)
  • 深刻度: CRITICALレベル
  • 主要問題: 長すぎる関数(87行、289行)
  • 影響: 保守性と可読性の大幅な低下
🔍 コードスメル(Code Smells)
  • 総数: 5個検出
  • 重要(Major): 4個
  • 軽微(Minor): 1個
  • 情報(Info): 0個
📋 検出される問題の種類
Long Function(長すぎる関数)

関数が50行を超えている場合に検出。保守性とテストの困難さを示します。

Too Many Returns(戻り値が多すぎる)

関数が3つ以上のreturn文を持っている場合に検出。複雑性の増加を示します。

Documents機能

サイドバーのDocumentsセクション

サイドバーのDocumentsセクション

マニュアルの多言語選択画面

マニュアルの多言語選択画面

📚 Documentsセクション
  • User Manual: ユーザーマニュアル(doc/index.html)
  • XML Spec: XML仕様書(XML_FORMAT.md)
  • Render Pattern Spec: レンダーパターン仕様(RENDER_PATTERNS.md)
  • アクセス: サイドバーから直接クリックで開く
🌍 多言語対応マニュアル
  • English: 英語版マニュアル
  • 日本語: 日本語版マニュアル
  • Deutsch: ドイツ語版マニュアル
  • 中文: 中国語版マニュアル
  • 한국어: 韓国語版マニュアル
  • हिंदी: ヒンディー語版マニュアル
📖 マニュアルの特徴
JavaScript/TypeScript対応

ES6+とTypeScript、JSXサポートを含む包括的な機能説明

多言語インターフェース

6言語でのマニュアル提供により、グローバルなユーザーサポート

Selection Summary機能

Selection Summary機能 - 星々をセレクトした際の情報表示

星々をセレクトした際のSelection Summary表示

📊 Selection Summaryの表示内容
  • Nodes: 選択されたノード数(例:13個)
  • Functions / Blocks: 選択内の関数数とブロック数
  • Total lines: 選択範囲の総行数(重複含む)
  • Avg cc / Avg nest: 平均循環複雑度とネスト深度
  • Score sum / Max depth: スコア合計と最大深度
🎯 選択機能の活用方法
  • ドラッグ選択: マウスで範囲をドラッグして複数ノードを選択
  • Ctrl+クリック: 個別ノードを追加選択
  • リアルタイム更新: 選択と同時に情報が更新
  • 詳細分析: 選択範囲の品質指標を確認
📈 表示されるメトリクスの詳細
循環複雑度(cc)

コードの分岐の複雑さを示す指標。値が高いほど複雑で保守が困難

ネスト深度(nest)

コードの入れ子の深さを示す指標。深いネストは可読性を低下

スコア合計(Score sum)

選択範囲の品質スコアの合計値。大きいほど重要なコード要素

最大深度(Max depth)

選択範囲内での最大ネスト深度。構造の複雑さを把握

表示パターン (v1..v13)

以下は要点の抜粋です。詳細はアプリ内の「Render Pattern Spec」を参照してください。

基本パターン

v1 放射状
黄金角配置で全体俯瞰に最適。骨格をコンパクトに。
v2 同心円
深さ順に層を並べ、階層比較に向く。
v3 リング+微ジッター
重なりを少し崩し視認性向上。
v4 渦巻
BFS順で増え方・密度の雰囲気を一望。
v5 親周辺集約
親ノードの周辺に関連ノードを集約。
v6 グリッド
深さごとに整列。偏り確認に最適。

高度パターン

v7 サンバースト
重さ(行数/子孫数)に応じて角度配分。
v8 深さリング(順序保持)
兄弟関係を崩さず俯瞰。
v9 カテゴリ帯+拡散
カテゴリ別バンド配置で重なり抑制。
v10 呼び出し重視
CallGraph を円配置+フォース指向で。

高度なパターン

v11 TypeScript対応
TypeScript固有の構文要素(インターフェース、ジェネリクス、デコレータ等)に最適化されたレイアウト。
v12 カテゴリ強化
重要度ベースのバンド配置、サブグループ化。カテゴリの出現頻度に基づく自動配置。
v13 拡張黄金角
TypeScript/JavaScript対応の黄金角配置。カテゴリ別の半径調整を含む最適化されたレイアウト。
v1 放射状 v2 同心円 v3 リング+ジッター v4 渦巻 v5 親周辺集約 v6 グリッド v7 サンバースト v8 深さリング v9 カテゴリ帯 v10 呼び出し重視 v11 多言語対応 v12 カテゴリ強化
v13 拡張黄金角
v13 拡張黄金角パターンのイメージ
全表示パターンのイメージ(v1〜v13)

ビジュアルスタイル (v1..v4)

概要

  • v1: クール・ブルー(寒色系の基本スタイル)。
  • v2: ウォーム・サンセット(暖色系+ハロー/サンバースト効果)。
  • v3: ハイコントラスト(ノード鮮やか/エッジはモノトーンのネオン破線)。
  • v4: パステル(水彩風の柔らかい表現)。
メモ: ズームやノード数に応じて、描画を自動的に軽量化します(視認性は維持)。

凡例

関数(基本カテゴリ)
条件/分岐(制御フロー)
ループ(反復処理)
switch/その他(制御構造)

実際のスタイル例

Style v3 (High Contrast)

Style v3 (High Contrast) - ノード鮮やか、エッジはネオン破線

Style v4 (Pastel)

Style v4 (Pastel) - 水彩風の柔らかい表現

概要/選択サマリ

概要パネル

  • File: 解析ファイルのパス
  • Lines: 総行数
  • Functions: 関数数
  • Max depth: ツリーの最大深さ
  • Language: 検出されたプログラミング言語(JavaScript, TypeScript, Java, C++, Go, Rust, Python等)
  • Categories: 主要カテゴリの統計情報(上位3カテゴリを表示)

選択サマリ

  • Nodes / Blocks / Functions / Classes / Interfaces
  • Total lines重複を除いたユニーク行数
  • Avg cc(サイクロマティック複雑度の平均), Avg nest(ネスティング深さの平均)
  • Score sum(視認性のための合成指標), Max depth(最大深さ)
  • Category breakdown(カテゴリ別の詳細統計)
  • 重複除去アルゴリズム: 連続する行範囲を統合して正確なユニーク行数を計算

解析データXML(要約)

アプリ内部では、解析結果を統一フォーマット(XML v2)へ変換し、描画時に再構築しています。

summary

  • totalLines, filePath, functionCount, maxDepth, deadCodeCount
  • language, categoryCount, totalComplexity, averageNesting

node

  • 属性: id, kind, category, name
  • loc: start, end, lines
  • complexity: cyclomatic, nestingDepth
  • layout: depth, angle, radius
  • metrics(拡張): 文数、分岐数、ループ数、呼び出し数、return文数、例外処理数、switch文数など
  • language: 検出されたプログラミング言語
  • category: 関数、クラス、インターフェース、トレイト、構造体、列挙型、ブロック、制御フロー、データ構造、マクロ、テンプレート、デコレータ、ラムダ、コルーチン、テストなど

edge

  • 属性: id, kindhierarchy / call), from, to
  • 関係性: 継承、実装、依存、呼び出し、包含、参照など

詳細はアプリ内の「XML Spec (XML_FORMAT.md)」で確認できます。

データ形式と内部処理

内部データ形式

  • XML フォーマット: アプリ内部で解析結果を統一フォーマット(XML v2)として管理しています。
  • 解析結果の保存: 現在のアプリでは、解析結果はセッション中のみ保持されます。
  • 外部エクスポート: 将来的な機能拡張として、解析結果の外部保存が検討されています。

技術仕様

  • AST解析: 各言語の構文解析木を基にした構造化データ
  • メトリクス計算: 複雑度、ネスティング深さ、行数などの統計情報
  • レイアウト情報: 表示パターンに応じた座標・角度・半径データ
注意: 現在のバージョンでは、解析結果の永続化機能は提供されていません。解析結果を保存したい場合は、アプリを終了する前に必要な情報を記録してください。

性能とコツ

  • ノード数が非常に多い場合は、v6(グリッド)v9(カテゴリ帯)で俯瞰→気になる領域を拡大。
  • スタイル v2〜v4 は装飾を含みます。ズームやノード数に応じて自動的に軽量化されます(視認性は維持)。
  • 呼び出し線が多い場合は、v10以外に切り替えると見やすくなります。
  • TypeScriptファイルの場合は、v11(TypeScript対応)v13(拡張黄金角)が最適です。TypeScript固有の最適化が適用されます。
  • Star Densityを活用して、ノード数や画面サイズに応じて最適な表示密度を設定してください。密集させると全体像を把握しやすく、分散させると個別ノードの詳細が確認しやすくなります。

トラブルシュート

  • 何も表示されない: ソースに構造が少ない/パースに失敗。別ファイルで確認してください。
  • 重い: 全体表示時は装飾が軽量化されます。v6v9に切り替え、拡大して詳細を確認してください。
  • 中心がズレる(v6): 最新版ではグリッド全体を原点中心に配置するよう修正済みです。
  • TypeScriptファイルで解析が不完全: MultiLangCategory-Awareアナライザーを試してください。TypeScript固有の構文要素が適切に認識されます。
  • レンダリングが遅い: v1v6などの軽量パターンに切り替えてください。v11-v13はTypeScript対応のため若干重くなる場合があります。

FAQ

Q. スコア(score)とは?

行数・複雑度などを統合した視認性指標です。大きいほど目立つノードとして描かれ、着目候補になります。

Q. 品質レポートのスコアはどう計算される?

総合スコアは、コード複雑度、構造、保守性、技術的負債、コードスメルなどを総合的に評価して0-100%で算出されます。業界標準(SonarQube、CodeClimate、ISO 25010)との比較も提供されます。

Q. ネスト構造の深さはどう確認できる?

Basic アナライザーを使用すると、コードの階層構造が視覚的に表示されます。ノードの色分けやグリッド配置で深さを確認でき、メトリクス表示(nest値)で具体的なネスト深度を数値で確認できます。特にRenderer v6(グリッド/深度)パターンが階層構造の確認に適しています。

Q. 推奨レイアウトの使い分けは?

3つのプリセットは用途に応じて使い分けます。Overviewは複雑度と拡張メトリクスを強調するサンバースト配置で、プロジェクト全体の概要把握に適しています。CallGraphは呼び出し関係を力学レイアウトで強調し、関数間の依存関係分析に最適です。Categoryはカテゴリ帯とグルーピングを強調し、コードの分類と構造理解に役立ちます。

Q. 拡張メトリクスで何が分かる?

MetricsExtアナライザーを選択すると、技術的負債とコードスメルの詳細な分析が表示されます。技術的負債は数値化されたスコアで表示され、コードスメルは具体的な問題項目(長すぎる関数、戻り値が多すぎる等)としてリストアップされます。各問題には深刻度(MAJOR/MINOR)が表示され、優先順位をつけて改善に取り組めます。

Q. Documents機能は何に使える?

サイドバーのDocumentsセクションから、ユーザーマニュアル、XML仕様書、レンダーパターン仕様書にアクセスできます。特にユーザーマニュアルは6言語(英語、日本語、ドイツ語、中国語、韓国語、ヒンディー語)で提供されており、グローバルなユーザーサポートを実現しています。各ドキュメントはクリック一つで開くことができ、詳細な機能説明や仕様確認に便利です。

Q. Selection Summaryで何が分かる?

星々(ノード)を選択すると、サイドバーのSelection Summaryセクションに選択範囲の詳細情報が表示されます。選択されたノード数、関数・ブロック数、総行数、平均循環複雑度、平均ネスト深度、スコア合計、最大深度などのメトリクスがリアルタイムで更新され、選択範囲のコード品質を定量的に把握できます。ドラッグ選択やCtrl+クリックで複数ノードを選択し、特定のコード領域の分析に活用できます。

Q. XML/JSON のどちらを使うべき?

アプリ外で解析を再利用する場合は JSON が簡便です。XML は内部の標準形式で、仕様の確認に向きます。

Q. どのパターンを選べばよい?

最初は v1/v9 で俯瞰 → 密度や関係が気になれば v10 → 詳細比較は v2/v6 → TypeScript対応は v11/v13、の流れがスムーズです。TypeScript固有の最適化が必要な場合は v11/v13 を優先してください。

解析パターンの詳細説明

📋 Basic アナライザー(Grundlegend (Struktur))

基本的なAST解析を行い、関数、クラス、ブロックの階層構造と複雑度(サイクロマティック複雑度、ネスティング深さ)を計算します。最も軽量で高速な解析が可能です。言語検出とカテゴリ決定も含みます。

階層構造の視覚化

階層構造表示 - Basic アナライザー

階層構造表示 - Basic アナライザーによるネスト構造の可視化(Renderer v6 グリッド/深度パターン)

🏗️ 階層構造の特徴
  • ネスト深度の可視化: コードの階層構造が明確に表示
  • ブロック構造: 関数内のブロック(if文、for文など)を識別
  • 関数階層: 関数の包含関係とネスト構造を表示
  • 変数スコープ: 変数の有効範囲を視覚的に理解
🔍 ネスト構造の確認方法
  • 深さの色分け: ノードの色で階層の深さを表現
  • グリッド配置: 深さごとに整列して表示
  • メトリクス表示: cc/nest/lines/scoreで詳細情報
  • 選択サマリー: 選択したノード群の統計情報

CallGraph アナライザー

関数間の呼び出し関係を解析し、依存性グラフを構築します。関数の入次数・出次数、ファンイン・ファンアウトなどの指標を提供します。階層エッジとコールエッジの両方を生成します。

MetricsExt アナライザー

詳細なメトリクスを計算します。文数、分岐数、ループ数、return文数、例外処理数、switch文数など、コードの品質指標を数値化します。言語固有の構文要素も検出します。また、技術的負債、コードスメル、保守性指標などの高度な品質分析も含みます。

MultiLang アナライザー

TypeScript対応の解析を行い、TypeScript固有の構文要素(インターフェース、ジェネリクス、デコレータ、列挙型、型エイリアスなど)を適切に認識します。JavaScriptとTypeScriptの言語特性に対応します。

Category-Aware アナライザー

カテゴリを意識したスマート解析を行い、ノードの重要度や関連性を考慮した分析結果を提供します。カテゴリ統計の自動計算と、JavaScript/TypeScript固有のカテゴリマッピングを含みます。

品質スコアシステム

📊 総合品質評価

CodeGardenは、コードの品質を多角的に評価し、分かりやすいスコアで表示します。総合スコアは0-100%で表され、業界標準との比較も提供されます。

🌟 評価基準
  • A+ (90-100%): 優秀なコード品質
  • A (80-89%): 良好なコード品質
  • B (70-79%): 平均以上の品質
  • C+ (60-69%): 平均的な品質
  • C (50-59%): 改善が必要
  • D (40-49%): 大幅な改善が必要
📈 業界標準比較
  • SonarQube: 業界標準の静的解析ツール
  • CodeClimate: GPA(Grade Point Average)評価
  • ISO 25010: 国際標準の品質モデル
  • Halstead Volume: 保守性指標の計算

技術的負債(Technical Debt)

複雑性、ネスト深度、関数長、パラメータ数に基づいて技術的負債を積み上げ評価します。合計値はソースの状態に応じて増減し、深刻度(info / minor / major / critical)で自動分類されます。

  • info: 0.00〜1.99 — 改善候補の把握段階
  • minor: 2.00〜4.99 — 優先度中程度の改善タスク
  • major: 5.00〜9.99 — 優先して対処すべき負債
  • critical: 10.00以上 — 早急な是正が必要な状態

コードスメル(Code Smells)

以下のコードスメルを自動検出します:

  • 長い関数: 50行以上(S138)
  • 複雑な関数: サイクロマティック複雑度10以上(S1541)
  • 深いネスト: ネスト深度5以上(S134)
  • パラメータ過多: 5個以上(S107)
  • マジックナンバー: ハードコードされた数値(S109)
  • 未使用変数: 定義されているが使用されていない変数(S1481)

保守性指標(Maintainability Index)

Halstead Volume、複雑性、関数長、関数数、カテゴリ多様性を考慮した保守性指標を0-100の範囲で計算します。高いほど保守性が良いことを示します。

📈 詳細品質指標

レポートでは、以下の詳細な品質指標が表示されます:

🧠 コード複雑度

コードの理解と変更の難易度を測定

  • サイクロマティック複雑度
  • ネスティング深さ
  • 関数の長さ
  • パラメータ数
🏗️ コード構造

コード構造の整理度と論理性を評価

  • モジュール化の程度
  • 関心の分離
  • 設計パターンの適用
  • 命名規則の遵守

その他の指標

  • コード重複率: 関数名と行数ベースの重複検出
  • 結合度: モジュール間の依存関係の強さ
  • 凝集度: モジュール内の関連性の強さ
  • セキュリティスコア: 危険な関数名やパターンの検出

品質レポートの実際の画面

品質レポート画面

品質レポート画面 - コードの品質を詳細に分析し、改善提案を提供

言語対応

完全サポート言語

JavaScript (ES6+)

  • 基本構文: 関数、クラス、オブジェクト、配列
  • ES6+機能: アロー関数、クラス、モジュール、テンプレートリテラル
  • JSX対応: React等のJSX構文を完全サポート
  • 高度な機能: 非同期処理(async/await)、デコレータ、動的インポート

TypeScript

  • 型システム: インターフェース、列挙型、ジェネリクス、型エイリアス
  • 高度な構文: デコレータ、名前空間、モジュール拡張
  • JavaScript互換: すべてのJavaScript機能を継承
  • 型安全性: コンパイル時の型チェックとエラー検出
注意: 現在のバージョンでは、JavaScript/TypeScriptのみが完全サポートされています。他の言語のファイルは構文解析でエラーが発生する可能性があります。

現在サポートされている言語固有の特徴

  • JavaScript: ES6+機能、動的型付け、プロトタイプベース継承、非同期処理、アロー関数、スプレッド/レスト演算子、分割代入
  • TypeScript: 静的型付け、高度な型システム、インターフェース、ジェネリクス、デコレータ、非同期処理、TS固有構文、型注釈

品質とテスト結果

📊 テスト結果の概要

✅ テストの結果

  • テストスイート: 28個すべて成功
  • テストケース: 825個すべて成功
  • 実行時間: 7.244秒
  • スナップショット: 0個

📈 テストカバレッジ

  • ステートメント: 56.92%
  • ブランチ: 52.71%
  • 関数: 49.61%
  • : 58.61%

🔧 テスト環境

🧪 テストフレームワーク

  • Jest: メインテストフレームワーク
  • Babel Jest: ES6+構文対応
  • Jest Environment JSDOM: ブラウザ環境シミュレーション

⚙️ 開発環境

  • Node.js: JavaScript実行環境
  • Electron: デスクトップアプリフレームワーク
  • Playwright: E2Eテスト用ブラウザ自動化

🔍 テストの種類

🧪 ユニットテスト

  • 個別の機能を一つずつ確認
  • 構文解析、メトリクス計算
  • 描画エンジン、インタラクション

🔗 統合テスト

  • 複数の機能が連携して動くか確認
  • ファイル解析パイプライン
  • アナライザー切り替え

🚀 E2Eテスト

  • アプリ全体が正しく動くか確認
  • Electron統合テスト
  • レンダラー詳細テスト

📋 テスト結果の詳細

✓ Test Suites: 28 passed, 28 total
✓ Tests: 825 passed, 825 total
✓ Snapshots: 0 total
⏱️ Time: 7.244 s

📊 カバレッジ詳細

  • 全体: 56.92% statements, 52.71% branches
  • 関数: 49.61% (123/248)
  • 行数: 58.61% (1736/2961)

📁 モジュール別

  • Core Analysis: 56.95% statements
  • Export Module: 73.07% statements
  • Renderer Engine: 56.08% statements

💡 品質の考え方

✅ テストの品質

  • 825個のテスト: 全て成功(100%成功率)
  • 主要機能: 解析・描画・エクスポートの全機能をカバー
  • 実用性重視: 実際の使用場面で重要な機能は高品質でテスト済み

🎯 品質向上への取り組み

  • 包括的テスト: 新機能追加時も既存機能の動作確認
  • 自動化テスト: 定期的な動作確認による品質維持
  • 継続的改善: テスト結果の分析に基づく継続的なテスト強化

⚠️ 品質の限界について

🔍 完璧性の保証について

重要なポイント: カバレッジ率やテスト結果は品質の指標の一つですが、以下の理由により完璧性を保証するものではありません:

  • テストの限界: すべての実行パスやエッジケースを完全にカバーすることは現実的に困難
  • 環境依存性: 異なるOS、ブラウザ、デバイスでの動作の完全保証は困難
  • ユーザー操作の多様性: 予期しないユーザー操作パターンの完全予測は困難
  • 外部依存関係: サードパーティライブラリやシステム環境の変化への完全対応は困難

✅ できる限りのテスト実施について

品質向上への取り組み: 完璧性は保証できませんが、以下の方法でできる限りの包括的なテストを実施しています:

  • 多層テスト戦略: ユニット・統合・E2Eテストの組み合わせによる包括的検証
  • 主要機能の重点テスト: コア機能(解析・描画・エクスポート)の高品質保証
  • エッジケースの考慮: 異常入力・エラー状態・境界条件のテスト
  • 継続的改善: テスト結果の分析に基づく継続的なテスト強化
  • 実用性重視: 実際の使用場面で発生しうる問題の重点的テスト
🎯 現実的な品質目標: 完璧性ではなく、実用的なレベルでの品質向上を目指しています。主要機能の安定性、ユーザビリティ、パフォーマンスを重視し、継続的な改善を通じて品質向上に取り組んでいます。
✅ まとめ: 825個のテストケースがすべて成功し、主要機能は高品質でテストされています。カバレッジ率は低いものの、実際に重要な機能は十分にテストされており、実用性の観点からは十分な品質保証が実現されています。

使用しているOSSとライセンス

本アプリケーションは、以下のオープンソースソフトウェアに支えられています。提供元コミュニティと貢献者の皆様に深く感謝いたします。

ライブラリ ライセンス リンク
Electron MIT LICENSE
monaco-editor MIT LICENSE
p5 LGPL-2.1-or-later LICENSE
marked MIT LICENSE
@babel/parser MIT LICENSE
最新の依存パッケージとライセンス(2025年9月時点)

アプリケーション本体と開発ツールで利用している主な npm パッケージとライセンスです。MIT 系ライセンスが大半であり、Playwright 系のみ Apache-2.0、p5.js は LGPL-2.1-or-later です。

区分 パッケージ ライセンス
アプリ主要依存 Electron 38.1.2 MIT
monaco-editor 0.49.0 MIT
marked 12.0.2 MIT
p5 2.0.4 LGPL-2.1-or-later
解析エンジン @babel/parser 7.28.3 MIT
@babel/core 7.28.3 ほか Babel 系 MIT
ビルド・テスト electron-builder 26.0.12 MIT
cross-env 7.0.3 MIT
jest / babel-jest / @types/jest 30.x MIT
@playwright/test 1.54.2 / playwright 1.54.2 Apache License 2.0
リソース生成 png2icons 2.0.1 MIT

依存関係の詳細はプロジェクトルートの package.json および analyze-dependencies.js のレポート生成機能をご参照ください。

MIT License(全文)
            MIT License
            
            Permission is hereby granted, free of charge, to any person obtaining a copy
            of this software and associated documentation files (the "Software"), to deal
            in the Software without restriction, including without limitation the rights
            to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
            copies of the Software, and to permit persons to whom the Software is
            furnished to do so, subject to the following conditions:
            
            The above copyright notice and this permission notice shall be included in all
            copies or substantial portions of the Software.
            
            THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
            IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
            FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
            AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
            LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
            OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
            SOFTWARE.
                            
LGPL v2.1(主要条項の要約と全文)

要約(参考):

  • ライブラリ自体の改変・再配布は、同一ライセンスでの配布とソース開示が必要です。
  • ライブラリをリンクして利用するアプリケーションは、ライセンスの影響を受けず独自ライセンスで配布可能です(ただしライブラリの差し替えを妨げない形での配布が推奨されます)。
  • ライセンス全文は以下および GNU のサイトをご参照ください。

GNU Lesser General Public License v2.1(原文)

LGPL v2.1(原文・全文を展開)
                GNU LESSER GENERAL PUBLIC LICENSE
                Version 2.1, February 1999
                
                Copyright (C) 1991, 1999 Free Software Foundation, Inc.
                51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
                Everyone is permitted to copy and distribute verbatim copies
                of this license document, but changing it is not allowed.
                
                [... 省略せず全文を参照する場合は上記GNUサイトの原文をご確認ください ...]
                                    

🐱 作者について

Udon Soba

日本の個人開発者として、アーティストの視点でソフトウェアを開発しています