ろぼいんブログ
更新:

【PowerToys】コマンドが見つからないときにパッケージを提案する「Command Not Found」の使い方

Command Not Foundの実行に必要なものをすべてインストールした画面

2024年1月10日にリリースされた PowerToys v0.77.0では、PowerShellでコマンドの実行に失敗したときに、足りないパッケージを提案する「Command Not Found」機能が追加されました。

この記事では、Command Not Foundの特徴や使い方、動作しない場合の対処法などについて紹介します。

Command Not Foundとは

「Command Not Found」は、パッケージの不足が原因でPowerShellコマンドの実行が失敗したときに、インストールするべきパッケージを提案してくれる機能です。

Windowsのパワーユーザー向けに高度で便利な機能を数多く提供している、Microsoft製のオープンソースツール「 PowerToys 」のv0.77.0以降に搭載されています。

PowerShellでコマンドを実行しようとしたとき、次のようなエラーメッセージが表示されたことはありませんか?

try{(()=>{function a(e){if(!e)return;let t=e.getAttribute("tabindex")!==null,n=e.scrollWidth>e.clientWidth;n&&!t?e.setAttribute("tabindex","0"):!n&&t&&e.removeAttribute("tabindex")}var u=window.requestIdleCallback||(e=>setTimeout(e,1)),i=window.cancelIdleCallback||clearTimeout;function l(e){let t=new Set,n,r;return new ResizeObserver(c=>{c.forEach(o=>t.add(o.target)),n&&clearTimeout(n),r&&i(r),n=setTimeout(()=>{r&&i(r),r=u(()=>{t.forEach(o=>e(o)),t.clear()})},250)})}function d(e,t){e.querySelectorAll?.(".expressive-code pre > code").forEach(n=>{let r=n.parentElement;r&&t.observe(r)})}var s=l(a);d(document,s);var b=new MutationObserver(e=>e.forEach(t=>t.addedNodes.forEach(n=>{d(n,s)})));b.observe(document.body,{childList:!0,subtree:!0});document.addEventListener("astro:page-load",()=>{d(document,s)});})();}catch(e){console.error("[EC] tabindex-js-module failed:",e)}try{(()=>{function i(o){let e=document.createElement("pre");Object.assign(e.style,{opacity:"0",pointerEvents:"none",position:"absolute",overflow:"hidden",left:"0",top:"0",width:"20px",height:"20px",webkitUserSelect:"auto",userSelect:"all"}),e.ariaHidden="true",e.textContent=o,document.body.appendChild(e);let a=document.createRange();a.selectNode(e);let n=getSelection();if(!n)return!1;n.removeAllRanges(),n.addRange(a);let r=!1;try{r=document.execCommand("copy")}finally{n.removeAllRanges(),document.body.removeChild(e)}return r}async function l(o){let e=o.currentTarget,a=e.dataset,n=!1,r=a.code.replace(/\u007f/g,` `);try{await navigator.clipboard.writeText(r),n=!0}catch{n=i(r)}if(!n||e.parentNode?.querySelector(".feedback"))return;let t=document.createElement("div");t.classList.add("feedback"),t.append(a.copied),e.before(t),t.offsetWidth,requestAnimationFrame(()=>t?.classList.add("show"));let c=()=>!t||t.classList.remove("show"),d=()=>{!t||parseFloat(getComputedStyle(t).opacity)>0||(t.remove(),t=void 0)};setTimeout(c,1500),setTimeout(d,2500),e.addEventListener("blur",c),t.addEventListener("transitioncancel",d),t.addEventListener("transitionend",d)}function s(o){o.querySelectorAll?.(".expressive-code .copy button").forEach(e=>e.addEventListener("click",l))}s(document);var u=new MutationObserver(o=>o.forEach(e=>e.addedNodes.forEach(a=>{s(a)})));u.observe(document.body,{childList:!0,subtree:!0});document.addEventListener("astro:page-load",()=>{s(document)});})();}catch(e){console.error("[EC] copy-js-module failed:",e)}
powertoys: The term 'コマンド名' is not recognized as a name of a cmdlet, function, script file, or executable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

これは、実行しようとしたコマンドが見つからなかったときに発生するエラーです。

Command Not Foundは、PowerShellコマンドの実行時にコマンドが見つからないというエラーが発生すると、そのコマンドを提供しているパッケージをインストールするためのコマンドを表示してくれます。

パッケージ名を検索してインストールする必要がなくなるので、コマンドの実行に失敗したときに、すぐに対処できるようになります。

Command Not Foundの使い方

インストール方法

Command Not Foundはデフォルトでは有効化されていないため、使用するには最初に必要なコンポーネントをインストールする必要があります。

動作に必要なコンポーネントをインストールするには、PowerToysの設定画面を開き、[Command Not Found]タブを表示します。

Command Not Foundの設定画面
Command Not Foundの設定画面

[インストール]という青いボタンが表示されているので、これをクリックします。コマンドプロンプトが自動で起動し、必要なコンポーネントがインストールされます。

インストールが完了すると、[インストール]ボタンが[アンインストール]ボタンに代わり、横に[Installed ✅]という表示が追加されます。

必要なコンポーネントをインストールしたようす
必要なコンポーネントをインストールしたようす

また、追加で依存関係をインストールする必要がある場合は、該当する項目に[Not detected ✕]というテキストと[インストール]ボタンが表示されます。この[インストール]ボタンをクリックすると、その依存関係が自動的にインストールされます。

PowerToysの設定画面でCommand Not Foundモジュールが[Installed]になっており、すべての依存関係が[Detected]になっているのを確認したら、準備は完了です。PowerToysの設定画面は閉じてしまって大丈夫です。

Command Not Foundの実行に必要なものをすべてインストールした画面
Command Not Foundの実行に必要なものをすべてインストールした画面

実際に使ってみる

Command Not Foundを利用する準備が整ったので、実際に使ってみましょう。

Command Not Foundをインストールしてから初めてPowerShellを起動すると、次のようなメッセージが表示されます。このメッセージは、初回起動時にのみ表示されます。

Terminal window
PowerShell 7.4.0
Loading personal and system profiles took 637ms.
PS C:\Users\UserName>

このメッセージは、PowerShellのプロファイル(スタートアップスクリプト)を読み込んでいることを示しています。PowerShellのプロファイルは、PowerShellを起動するたびに読み込まれます。

PowerShellのプロファイルは、PowerShellの起動時に実行するコマンドを記述できる機能です。Command Not Foundは、PowerShellプロファイルを利用して動作します。

では、実際にインストールされていないコマンドを実行し、Command Not Foundを使ってみましょう。私の場合はpowertoysコマンドをインストールしていないので、これで試してみます。

powertoysコマンドを実行したようす
powertoysコマンドを実行したようす

powertoysコマンドが見つからないというエラーメッセージとともに、Command Not Foundがpowertoysをインストールするためのwingetコマンドを提案してくれました。

提案されたコマンドを実行すると、powertoysコマンドを提供しているパッケージがインストールされます。

Terminal window
winget install --id Microsoft.PowerToys

Command Not Foundが動作しない場合の対処法

Command Not Foundが動作しない場合は、次の対処法を試してみてください。

PowerShellのバージョンを確認する

Command Not Foundは、PowerShell v7.4以降を利用している必要があります。PowerShellのバージョンを確認して、v7.4以降を利用しているかどうかを確認してください。

PowerShellのバージョンは、PowerShellを起動して最初に表示されるメッセージか、$PSVersionTableコマンドで確認できます。

PowerShellを起動して最初に表示されるメッセージ
PowerShell 7.4.0
PS C:\Users\UserName>
$PSVersionTableコマンドで確認した結果
PS C:\Users\UserName> $PSVersionTable
Name Value
---- -----
PSVersion 7.4.0
PSEdition Core
GitCommitId 7.4.0
OS Microsoft Windows 10.0.22621
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0

PowerShellを再起動する

PowerShellを一度終了してから再度起動してみてください。これによって、PowerShellプロファイル(スタートアップスクリプト)が再読み込みされ、Command Not Foundが適用される可能性があります。

PowerShellを再インストールする

Command Not Foundには 既知の問題 が複数存在しています。とくに、MSIXファイルを利用してPowerShellをインストールしている場合は、Command Not Foundが動作しないようです。

MSIX経由でインストールしている場合は、PowerShellを一度アンインストールしてから、次のwingetコマンドを使って再インストールしてみてください。

Terminal window
winget install --id Microsoft.Powershell --source winget

PowerShellを使っていることを確認する

Windowsには、「Windows PowerShell」と「PowerShell」が存在し、これらは別のものです。Command Not Foundは「PowerShell」に対してのみ動作します。また、標準のコマンドプロンプトに対しても動作しません。

Windows PowerShellではなくPowerShellを使っていることを確認してください

まとめ

PowerShellでコマンドの実行に失敗したときに、足りないパッケージを提案してくれる「Command Not Found」機能について紹介しました。

Command Not Foundは、PowerToysのv0.77.0で追加された機能です。

PowerToysにはさまざまな便利機能が搭載されているので、ぜひ使ってみてください。

おすすめアイテム

※このリンクを経由して商品を購入すると、当サイトの運営者が報酬を得ることがあります。詳細はこちら

このサイトを支援する

Buy Me a CoffeeまたはGitHub Sponsorsで支援していただけると、サイトの運営やコンテンツ制作の励みになります。定期的な支援と一度限りの支援がありますので、お間違いのないようにお願いします。

Buy me a coffee

著者のアイコン画像

生まれた時から、母国語よりも先にJavaScriptを使っていました。ネットの海のどこにもいなくてどこにでもいます。

Webフロントエンドプログラマーで、テクノロジーに関する話題を追いかけています。動画編集やプログラミングが趣味で、たまにデザインなどもやっています。主にTypeScriptを使用したWebフロントエンド開発を専門とし、便利で実用的なブラウザー拡張機能を作成しています。また、個人ブログを通じて、IT関連のニュースやハウツー、技術的なプログラミング情報を発信しています。

最新記事