JA Architecture Technology Stack - aku11i/phantom GitHub Wiki

テクノロジースタック

English | 日本語

このドキュメントでは、Phantomで使用されている言語、フレームワーク、ツール、テクノロジーについて詳しく説明します。

コアテクノロジー

言語とランタイム

TypeScript

ソース: package.json#L48

  • バージョン: 5.8.0-dev(ネイティブプレビュー機能を使用)
  • ターゲット: ES2023
  • モジュールシステム: ESモジュール(ESM)
  • 型チェック: Strictモード有効

使用している主なTypeScript機能:

  • 厳密なnullチェック
  • 型推論
  • Resultパターン用のユニオン型
  • テスト用のモジュール拡張

Node.js

ソース: package.json#L36

  • 最小バージョン: v22.0.0
  • 使用機能:
    • ネイティブESモジュール
    • 組み込みテストランナー
    • ネイティブモジュールモッキング
    • 子プロセス管理

ランタイム依存関係ゼロ

ソース: package.json#L50

Phantomにはランタイム依存関係がありません。これにより以下が実現されます:

  • より高速なインストール
  • より小さなパッケージサイズ
  • より良いセキュリティ態勢
  • 簡素化されたデプロイメント

ビルドツール

esbuild

ソース: build.ts

  • 目的: 高速JavaScript/TypeScriptバンドラー
  • バージョン: 0.24.2
  • 用途: CLI実行可能ファイルのビルド

ビルド設定:

{
  bundle: true,
  minify: false,  // デバッグ用に読みやすく保つ
  platform: "node",
  target: "node22",
  format: "esm",
  sourcemap: true
}

TypeScript Native Preview

ソース: package.json#L46

  • パッケージ: @typescript/native-preview
  • 目的: 実験的なTypeScript機能へのアクセス
  • 利点: 最新の言語機能とパフォーマンス改善

コード品質ツール

Biome

ソース: biome.json

  • バージョン: 1.9.4
  • 目的: 高速フォーマッターとリンター
  • 置き換え: ESLint + Prettier

設定のハイライト:

{
  "formatter": {
    "indentStyle": "tab",
    "lineWidth": 100,
    "quoteStyle": "double"
  },
  "linter": {
    "rules": {
      "recommended": true,
      "noPrototypeBuiltins": "off",
      "noUselessElse": "off"
    }
  }
}

従来のツールに対する利点:

  • ESLintより10-20倍高速
  • フォーマットとリンティングの単一ツール
  • パフォーマンスのためRustで記述
  • 優れたTypeScriptサポート

パッケージ管理

pnpm

ソース: package.json#L37

  • バージョン: 10.8.1以上
  • 目的: 高速でディスクスペース効率的なパッケージマネージャー

利点:

  • 効率的な依存関係ストレージ
  • 厳密な依存関係解決
  • より高速なインストール
  • より良いモノレポサポート

開発依存関係

型定義

ソース: package.json#L45

  • @types/node: v22.10.2
    • Node.js API型定義
    • TypeScript IntelliSenseを有効化

テストツール

組み込みNode.jsテストランナー:

  • 外部テストフレームワークなし
  • ネイティブモジュールモッキング
  • 組み込みアサーション
  • 並列テスト実行

バージョン管理とコラボレーション

Git

  • バージョン: 2.5.0+(worktreeサポート用)
  • 用途: コア機能はGit CLIに依存
  • 使用機能:
    • Worktree管理
    • ブランチ操作
    • リポジトリ情報

GitHub

  • 課題追跡: GitHub Issues
  • コードレビュー: GitHub Pull Requests
  • CI/CD: GitHub Actions
  • パッケージレジストリ: GitHub経由のnpm

CI/CDパイプライン

GitHub Actions

ソース: .github/workflows/

ワークフロー設定:

  • Node.jsバージョン: v22、v24
  • オペレーティングシステム: Linux、macOS、Windows
  • 品質チェック:
    • リンティング(Biome)
    • 型チェック(TypeScript)
    • ユニットテスト(Node.jsテストランナー)

アーキテクチャパターン

関数型プログラミング

  • エラーハンドリング用のResult型
  • 可能な限り純粋関数
  • 不変データ構造
  • 関数合成

オブジェクト指向設計

  • SOLID原則
  • モジュールごとの単一責任
  • 依存性注入パターン
  • インターフェース分離

使用されているデザインパターン

  1. Resultパターン: 明示的なエラーハンドリング
  2. Builderパターン: コマンド構築
  3. Strategyパターン: コマンドハンドラー
  4. Facadeパターン: Git操作ラッパー

ファイルシステム構造

モジュール編成

src/
├── bin/              # エントリーポイント(ESM)
├── cli/              # CLIレイヤー
│   ├── handlers/     # コマンド実装
│   └── output.ts     # 出力フォーマット
└── core/             # ビジネスロジック
    ├── worktree/     # Worktree操作
    ├── git/          # Git抽象化
    ├── process/      # プロセス管理
    └── types/        # 型定義

ビルド出力

dist/
├── phantom.js        # メイン実行可能ファイル
└── phantom.js.map    # ソースマップ

パフォーマンス特性

起動パフォーマンス

  • コールドスタート: ~50ms
  • 要因:
    • 依存関係ゼロ
    • バンドルされた実行可能ファイル
    • 最小限の初期化

メモリ使用量

  • 基本メモリ: ~30MB
  • スケーラビリティ: worktree数に対して線形
  • バックグラウンドプロセスなし: アイドル時メモリゼロ

ビルドパフォーマンス

  • フルビルド: <1秒(esbuild)
  • 型チェック: ~2秒
  • テストスイート: ~1秒

セキュリティに関する考慮事項

入力検証

  • コマンド引数のサニタイズ
  • パストラバーサル防止
  • シェルインジェクション保護

プロセス分離

  • 制御された環境変数
  • 明示的なシェル呼び出し
  • evalや動的実行なし

依存関係のセキュリティ

  • ランタイム依存関係ゼロ = 最小限の攻撃面
  • 開発依存関係は定期的に更新
  • CIパイプラインでnpm audit

プラットフォームサポート

オペレーティングシステム

  • macOS: フルサポート
  • Linux: フルサポート
  • Windows: フルサポート(Git Bash使用)

シェルサポート

  • bash: プライマリサポート
  • zsh: 完全互換性
  • fish: 完全互換性
  • PowerShell: 基本的な互換性

将来のテクノロジーに関する考慮事項

潜在的な追加機能

  1. 設定管理

    • 設定ファイル用のTOML/YAML
    • 環境変数サポート
  2. プラグインシステム

    • 動的モジュールローディング
    • 拡張用API
  3. パフォーマンス監視

    • OpenTelemetry統合
    • メトリクス収集
  4. 追加言語サポート

    • パフォーマンスクリティカルな部分にRust
    • プラグイン用WebAssembly

テクノロジー原則

  1. 依存関係を最小限に: すべての依存関係は負債
  2. パフォーマンス優先: 高速なツールを選択
  3. 開発者体験: 優れたツーリング
  4. 型安全性: TypeScriptを最大限活用
  5. モダン標準: 最新の安定機能を使用

代替案との比較

vs. Git Worktree直接使用

機能 Git Worktree Phantom
学習曲線 緩やか
コマンド 複雑 シンプル
命名 パス 名前
統合 手動 自動化

vs. Git Clone

側面 Git Clone Phantom
ディスク使用量
セットアップ時間 遅い 高速
共有履歴 なし あり
コンテキスト切り替え 手動 即座

まとめ

Phantomのテクノロジースタックは以下を提供するよう慎重に選択されています:

  1. パフォーマンス: 高速実行と最小限のオーバーヘッド
  2. 信頼性: 型安全性と包括的なテスト
  3. シンプルさ: ランタイム依存関係ゼロ
  4. 開発者体験: モダンなツーリングとプラクティス
  5. 保守性: クリーンなアーキテクチャとコード品質

TypeScript、Node.js、モダンなビルドツールの組み合わせにより、Gitワークフローの生産性を向上させる堅牢で高性能なCLIツールが作成されます。