メインコンテンツまでスキップ

アーキテクチャと設計原則

ts-graphviz のアーキテクチャと設計原則を理解することで、ライブラリをより効果的に活用し、その開発に貢献できます。

設計原則

主要な概念

ts-graphviz は、モジュール性、拡張性、使いやすさを実現するために、以下の主要な概念に基づいて構築されています。

  1. TypeScript ファースト設計と型定義: 主に TypeScript 用に設計されており、強力な型付けと TypeScript プロジェクトへのシームレスな統合を提供します。ライブラリには DOT 言語要素の包括的な型定義が含まれており、Graphviz 要素との型安全な対話が可能です。

  2. オブジェクト指向 API: グラフ、ノード、エッジなどのグラフ要素を作成・操作するためのオブジェクト指向 API を提供します。これにより、複雑なグラフ構造を直感的かつ効率的に扱えます。

  3. モジュール設計: 特定の目的を果たす複数のパッケージに分割されています。このモジュール性により、ユーザーは必要な機能だけを含めることができ、保守性と柔軟性が向上します。

  4. AST サポート: 抽象構文木(AST)レベルで DOT 言語グラフを処理するためのモジュールが含まれています。これにより、グラフを構造を保ったまま解析・生成でき、プログラム的な操作や変換が容易になります。

  5. ランタイムアダプター: Node.js や Deno など、さまざまなランタイム環境で Graphviz コマンドを実行できるアダプター関数を提供します。これらのアダプターはラッパーとして機能し、さまざまなプラットフォームとのシームレスな統合を可能にします。

  6. 拡張性: 拡張性を念頭に設計されており、特定のユースケースに合わせて機能を拡張できます。

  7. マルチパラダイムサポート: オブジェクト指向プログラミング、宣言的プログラミング、関数型プログラミングなど、さまざまなプログラミングパラダイムに対応しています。ユーザーは自分のニーズに最適なプログラミングスタイルを選択できます。

パッケージアーキテクチャ

ts-graphviz は、特定の役割を持つ複数のパッケージで構成されています。

  • ts-graphviz(メインパッケージ): グラフの作成と操作のための高レベルな API を提供し、ほとんどのユーザーに適しています。

  • @ts-graphviz/core: モデルと関数のコア実装を含み、内部的に使用され、高度な利用にも利用可能です。

  • @ts-graphviz/common: Graphviz のドメイン知識を集約し、型定義、定数、ユーティリティを提供します。型定義のカスタマイズや属性の拡張などのユースケースをサポートします。

  • @ts-graphviz/ast: DOT 言語グラフを抽象構文木(AST)レベルで解析、操作、生成するためのツールを提供します。

  • @ts-graphviz/adapter: さまざまなランタイム環境(Node.js、Deno)で Graphviz コマンドを実行し、DOT 文字列を画像に変換します。

  • @ts-graphviz/react: React の宣言的な UI パラダイムを使用してグラフを定義でき、JSX で DOT 言語モデルを表現できます。

依存関係グラフ

パッケージ間の関係は以下のように視覚化できます。

依存関係グラフ

このモジュールアーキテクチャにより:

  • 保守性: 個々のパッケージを他に影響を与えずに保守・更新しやすくなります。

  • 柔軟性: ユーザーは特定のユースケースに必要なパッケージだけを選択できます。

  • 拡張性: ライブラリの進化に伴い、新機能やパッケージの追加が容易になります。

重要なポイント

  • 初心者向け: グラフの作成と操作に必要なすべての基本機能を提供するメインパッケージ ts-graphviz から始めてください。

  • 高度なユーザー向け: 機能を拡張したり、動作をカスタマイズしたり、さまざまな環境と統合する必要がある場合は、内部パッケージを探索してください。