pub-package-explorer について
DartやFlutterのパッケージソースを調べるワークフローで、プロジェクトに未追加のパッケージも対象にできます。package_config.jsonから導入済みパッケージを特定するか、dart pub unpackでソースを取得します。
主な機能
- 01導入済みパッケージのパス解決
- 02パッケージソースの確認
- 03追加前のパッケージ展開
- 04指定バージョンの処理
- 05設定不足時の復旧案内
活用シーン
- 01依存パッケージの公開API確認
- 02追加前のパッケージソース確認
- 03プロジェクトで解決されたバージョンの確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ hexsis-llc/ skills --skill pub-package-explorerインストール後、Claude Code で/pub-package-explorerを入力して読み込まれたか確認します。
詳細
Pub Package Explorer
プロジェクトに現在インストールされていないパッケージも含め、Dart または Flutter のパッケージのソースコードを読むには、このワークフローを使用します。
ソースの取得方法を選択する
- パッケージがすでにプロジェクトの依存関係グラフにある場合は、
.dart_tool/package_config.jsonを優先します。 - パッケージが
package_config.jsonにない場合、または依存関係に追加する前にソースを調べる場合は、dart pub unpackを使用します。 - どちらも利用できる場合は、プロジェクトで解決されたバージョンと一致させるため、インストール済みのパッケージパスを優先します。
パッケージのソースパスを解決する
- プロジェクトに
.dart_tool/package_config.jsonがあることを確認します。 packages[]からnameに一致するパッケージエントリを読み取ります。- 次の値を抽出します。
rootUri(パッケージルート。通常は pub キャッシュ内です)packageUri(通常はlib/です)
rootUri + packageUriでソースパスを組み立てます。- ファイルを読み取る前に、
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が失敗した場合は、正確な失敗内容(ネットワークアクセス、無効な記述子、出力パスへのアクセス許可など)を報告します。
コメント
Markdown 対応