パッケージマネージャ検出
motion-plus-installer は、利用するパッケージマネージャー(例: pnpm, npm, yarn, bun)を自動検出して、ダウンロードした .tgz をプロジェクトへ追加します。
このページでは検出の順序と、意図したマネージャーを使うための対処法を説明します。
検出の優先順位
自動検出は以下の順序で行われます(上位が優先)。
- 環境変数
npm_config_user_agentの解析 - 環境変数
npm_execpathの解析 - プロジェクトの
package.jsonのpackageManagerフィールド - ロックファイルの存在確認(
pnpm-lock.yaml,package-lock.json,yarn.lock,bun.lockb) - 実行可能ファイルの存在チェック(
pnpm,yarn,bunを順に確認) - 上記どれにも当てはまらない場合は
npmを選択
このロジックにより、ローカル環境や CI 環境で一般的に使われているマネージャーを高い精度で推測できます。
各ステップの説明
npm_config_user_agent/npm_execpath:- Node 実行時に設定される npm/Yarn/PNPM のユーザーエージェントや実行パスを参照します。npx や pnpm dlx 経由での実行時に有用です。
package.jsonのpackageManager:- 例:
"packageManager": "pnpm@8.0.0"のように設定されている場合、そのマネージャーを優先します。
- 例:
- ロックファイル:
- リポジトリに残っているロックファイルから明示的に判定します(
pnpm-lock.yaml→pnpm、package-lock.json→npm、yarn.lock→yarn、bun.lockb→bun)。
- リポジトリに残っているロックファイルから明示的に判定します(
- 実行可能ファイルの有無チェック:
- ローカル環境に
pnpm/yarn/bunがインストールされているか--version実行で確認します。
- ローカル環境に
推奨
自動検出が期待通りでない場合や CI 環境で確実に特定のマネージャーを使いたい場合は、CLI オプション --pm-cmd <cmd> を指定してください(例: --pm-cmd pnpm)。
sh
# pnpm を使う例
pnpm dlx motion-plus-installer i motion-plus --pm-cmd pnpmsh
# npm を使う例
npx motion-plus-installer i motion-plus --pm-cmd npmsh
# yarn を使う例
yarn dlx motion-plus-installer i motion-plus --pm-cmd yarn実行後に呼ばれるコマンド
インストーラは検出したマネージャーに応じて以下のように .tgz をプロジェクトに追加します。
pnpm,yarnの場合:pnpm add ./path/to/file.tgz/yarn add ./path/to/file.tgznpmの場合:npm install ./path/to/file.tgz
(内部では、指定した --pm-cmd の先頭トークンをコマンド名として解析し、サブコマンドは上記のように組み立てられます。)
CI の注意
CI では環境が固定されているため、明示的に --pm-cmd を指定することを推奨します。特に node イメージやランナーが複数のパッケージマネージャを含む場合、検出結果が変わることがあります。
例(GitHub Actions):
yaml
- name: Install Motion package
run: npx motion-plus-installer i motion-plus --pm-cmd pnpm
env:
MOTION_TOKEN: ${{ secrets.MOTION_TOKEN }}トラブルシュート
検出結果を知りたい場合は、--pm-cmd <cmd> を指定して明示的に実行ログを確認してください。
まれに、npm_config_user_agent が空で package.json に packageManager が設定されていないと、グローバルにインストールされた pnpm が優先される場合があります。CI では --pm-cmd 指定で回避できます。