VSCodeのターミナル上でnpmコマンドを実行しようとしたのですが、以下のようなエラーが出てしまいました。

npm : このシステムではスクリプトの実行が無効になっているため、ファイル C:\Users\username\AppData\Roaming\npm\npm.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。
発生場所 行:1 文字:1
+ npm -v
+ ~~~
+ CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
コマンドプロンプトでは正常に実行できているので、npmがインストールされていないというわけでもありません。

VSCodeでエラーになってしまうのは、PowerShellのスクリプト実行ポリシーによって、署名付きでないスクリプト実行がブロックされているためです。実行ポリシーを変更することで、npm等のコマンドが実行できるようになります。
VSCodeのターミナルでコマンドがセキュリティエラーで実行できない時の対処法
現在の実行ポリシーを確認する
VSCodeのターミナル上で以下コマンドを実行することで、現在のポリシーを確認できます。
Get-ExecutionPolicy
結果は「Restricted」と出ると思います。

実行ポリシーの詳細はabout_Execution_Policiesをご参照ください。Restrictedは「個々のコマンドは許可されますが、スクリプトは許可されません。」となっているので、ポリシーによってnpmがブロックされているということですね。
実行ポリシーを変更する
ブロックを解除するために、ターミナル上で以下コマンドを実行します。
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
これで、npmコマンドが実行可能になります。再度Get-ExecutionPolicyを実行すると、「RemoteSigned」に結果が変わります。

なお、ローカルコンピューターに書かれたスクリプトにはデジタル署名は必要なくなりますが、インターネットからダウンロードされたものは署名がないと実行できません。
実行ポリシーを元に戻す
ポリシーを元に戻すには、下記いずれかのコマンドを実行します。
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Undefined
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Restricted
あとがき
ちなみに、以下コマンドを実行すると、ポリシーを各スコープ毎に確認できます。
Get-ExecutionPolicy -List
CurrentUserがRemoteSignedに変わっていることが確認できますね。

- MachinePolicy:管理者で強制された設定
- UserPolicy:ユーザー単位のポリシー
- Process:今開いているPowerShellにだけ有効
- CurrentUser:現在のユーザー
- LocalMachine:PC全体に適用



コメントを残す