mcpField
P
pub-package-explorer

pub-package-explorer

github.com/hexsis-llc開発172 回インストール1 週間前に更新
リポジトリ

pub-package-explorer について

DartやFlutterのパッケージソースを調べるワークフローで、プロジェクトに未追加のパッケージも対象にできます。package_config.jsonから導入済みパッケージを特定するか、dart pub unpackでソースを取得します。

主な機能

  1. 01導入済みパッケージのパス解決
  2. 02パッケージソースの確認
  3. 03追加前のパッケージ展開
  4. 04指定バージョンの処理
  5. 05設定不足時の復旧案内

活用シーン

  1. 01依存パッケージの公開API確認
  2. 02追加前のパッケージソース確認
  3. 03プロジェクトで解決されたバージョンの確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/hexsis-llc/skills --skill pub-package-explorer

インストール後、Claude Code で/pub-package-explorerを入力して読み込まれたか確認します。

詳細

Pub Package Explorer

プロジェクトに現在インストールされていないパッケージも含め、Dart または Flutter のパッケージのソースコードを読むには、このワークフローを使用します。

ソースの取得方法を選択する

  1. パッケージがすでにプロジェクトの依存関係グラフにある場合は、.dart_tool/package_config.json を優先します。
  2. パッケージが package_config.json にない場合、または依存関係に追加する前にソースを調べる場合は、dart pub unpack を使用します。
  3. どちらも利用できる場合は、プロジェクトで解決されたバージョンと一致させるため、インストール済みのパッケージパスを優先します。

パッケージのソースパスを解決する

  1. プロジェクトに .dart_tool/package_config.json があることを確認します。
  2. packages[] から name に一致するパッケージエントリを読み取ります。
  3. 次の値を抽出します。
  • rootUri(パッケージルート。通常は pub キャッシュ内です)
  • packageUri(通常は lib/ です)
  1. rootUri + packageUri でソースパスを組み立てます。
  2. ファイルを読み取る前に、file:// URI をファイルシステムパスに変換します。

次のコマンドパターンを使用します。

PACKAGE="analyzer"
CONFIG=".dart_tool/package_config.json"

SOURCE_URI="$(jq -r --arg pkg "$PACKAGE" '
  .packages[]
  | select(.name == $pkg)
  | (.rootUri + (if (.rootUri | endswith("/")) then "" else "/" end) + .packageUri)
' "$CONFIG")"

URI をローカルパスに変換します。

SOURCE_PATH="$(printf '%s\n' "$SOURCE_URI" | sed 's#^file://##')"

次に、そのディレクトリ内のソースファイルを調べます(rg、ls、cat)。

インストールされていないパッケージを展開する

パッケージが .dart_tool/package_config.json にない場合、またはインストール前に確認する必要がある場合は、この方法を使用します。

PACKAGE="analyzer"              # or "analyzer:7.4.0"
OUTPUT_DIR="/tmp/pub-unpack"

mkdir -p "$OUTPUT_DIR"
dart pub unpack "$PACKAGE" --output "$OUTPUT_DIR"

展開されたディレクトリを見つけて、内容を調べます。

PACKAGE_NAME="${PACKAGE%%:*}"
UNPACKED_DIR="$(find "$OUTPUT_DIR" -maxdepth 1 -type d -name "${PACKAGE_NAME}-*" | sort | tail -n 1)"

ls "$UNPACKED_DIR"
ls "$UNPACKED_DIR/lib"
rg --files "$UNPACKED_DIR/lib"

注意:

  • dart pub unpack は、現在のプロジェクトの依存関係に含まれていないパッケージもダウンロードして展開します。
  • 出力ディレクトリに上書きが必要な展開済みコピーがすでにある場合は、--force を使用します。
  • --output は、展開された <package>-<version> フォルダーの作成場所を指定します。

便利なバリエーション

  • パッケージルートのみを返します。
jq -r --arg pkg "$PACKAGE" '
  .packages[]
  | select(.name == $pkg)
  | .rootUri
' .dart_tool/package_config.json
  • ルートとパッケージ URI の両方を返します。
jq -r --arg pkg "$PACKAGE" '
  .packages[]
  | select(.name == $pkg)
  | "\(.rootUri)\t\(.packageUri)"
' .dart_tool/package_config.json

確認とエラー処理

  • package_config.json に一致するパッケージがない場合は、処理を中止せずに dart pub unpack に切り替えます。
  • .dart_tool/package_config.json がない場合は、先に依存関係を解決して(dart pub get または flutter pub get)、再試行します。
  • パッケージ API はパッケージルートではなくサブパスから公開されている場合があるため、rootUri + packageUri から読み取ることを優先します。
  • dart pub unpack が失敗した場合は、正確な失敗内容(ネットワークアクセス、無効な記述子、出力パスへのアクセス許可など)を報告します。

コメント