PowerShellにおける '&&' トークンエラーの解決方法
問題の説明
Windows PowerShellまたはVisual Studio Codeの統合ターミナルで以下のようなコマンドを実行しようとすると、エラーが発生します:
npm run build && node ./dist/main.js
エラーメッセージ:
The token '&&' is not a valid statement separator in this version.
このエラーは、PowerShellの古いバージョン(特にWindows PowerShell)で&&
演算子がサポートされていないために発生します。&&
はLinuxのbashシェルでは一般的な演算子で、左側のコマンドが成功した場合にのみ右側のコマンドを実行する制御演算子です。
解決方法
方法1: PowerShellのバージョンをアップグレードする
PowerShell 7.0以降では&&
および||
演算子が正式にサポートされています。
TIP
PowerShell GitHubリポジトリから最新版をダウンロードしてインストールできます。
方法2: セミコロンを使用する
PowerShellでは、複数のコマンドを逐次実行する場合にセミコロン;
を使用できます:
npm run build; node ./dist/main.js
WARNING
この方法では、最初のコマンドが失敗しても次のコマンドが実行されます。条件付き実行が必要な場合は次の方法を使用してください。
方法3: 条件付き実行のための明示的なチェック
PowerShellでbashの&&
と同じ動作を実現するには、明示的に終了コードをチェックします:
npm run build; if ($?) { node ./dist/main.js }
より堅牢な方法(リダイレクトを使用する場合):
npm run build; if ($LASTEXITCODE -eq 0) { node ./dist/main.js }
方法4: 別のターミナルを使用する
Git BashやCMD(コマンドプロンプト)など、&&
演算子をサポートする別のターミナルを使用する方法もあります:
# Git Bashでは問題なく動作します
npm run build && node ./dist/main.js
方法5: コマンドを別々に実行する
最も単純な解決策は、コマンドを別々に実行することです:
npm run build
node ./dist/main.js
技術的な背景
PowerShellとbashでは制御演算子の実装が異なります:
- bash:
&&
および||
を完全にサポート - Windows PowerShell (v5.1以下):
&&
および||
をサポートせず - PowerShell Core (v7.0以上): パイプラインチェーン演算子として
&&
および||
をサポート
推奨アプローチ
プロジェクトのビルドやデプロイメントスクリプトでは、条件付き実行が重要です。以下の方法が最も信頼性の高い解決策です:
# 推奨: 終了コードを明示的にチェック
npm run build
if ($LASTEXITCODE -eq 0) {
node ./dist/main.js
} else {
Write-Error "Build failed, skipping node execution"
}
まとめ
PowerShellで&&
演算子に関するエラーが発生した場合は、以下のいずれかの方法で解決できます:
- PowerShell 7+にアップグレードする
- セミコロン
;
でコマンドを区切る(条件付き実行不要の場合) - 明示的な終了コードチェックを使用する(条件付き実行が必要な場合)
- 別のターミナル(Git Bashなど)を使用する
- コマンドを別々に実行する
環境や要件に応じて最適な方法を選択してください。