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全体に適用

投稿者

himecasのアバター

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Table of Contents