待ち望んでいたコマンドライン
Windows開発者は、冗長なPowerShellコマンドに常に不満を感じています。筋肉の記憶はls、cat、cpを求めますが、システムはGet-ChildItem、Get-Content、Copy-Itemを要求します。この不一致はコンテキストスイッチを強制し、ワークフローを妨げ、簡潔なUNIXコマンドを長いPowerShellコマンドレットに翻訳する貴重な時間を浪費させます。ネイティブで使い慣れたコマンドライン体験が決定的に不足していました。
Microsoftは今、決定的なソリューションを提供します:Microsoft Coreutils。これは、uutils/coreutilsプロジェクトのネイティブでMicrosoftがメンテナンスするポートであり、コマンドラインのギャップを直接埋めます。GNU CoreutilsのRustによる再実装に基づいて構築されており、WSLや仮想化レイヤーを必要とせず、Windows環境内でネイティブに動作します。オーバーヘッドなしで強力なUNIX機能を手に入れましょう。
WinGet install Microsoft.Coreutilsでインストールすると、すぐに不可欠なコマンドのスイートが利用可能になります。次のような使い慣れたツールにアクセスできます。
catgrepfindxargssort
これらは既存のWindows Terminal内で直接動作します。これにより、LinuxやWSL用に既に作成したのと同じフラグ、パイプ、スクリプトを使用して、確立されたUNIXの筋肉の記憶を活用し、即座に生産性を向上させることができます。あなたのコマンドラインは大幅なアップグレードを遂げました。
あなたの筋肉の記憶が戻ってきました
コマンドラインの筋肉の記憶を取り戻しましょう。Microsoft.CoreutilsをWinGet install Microsoft.Coreutilsという1つの簡単なコマンドでインストールしてください。このパッケージは、GNU CoreutilsのRustによる再実装であるuutils/coreutilsプロジェクトのMicrosoftがメンテナンスするビルドです。仮想化レイヤーなしでWindows上でネイティブに動作するcat、grep、find、xargs、sortなどの不可欠なUNIXスタイルの実行可能ファイルにすぐにアクセスできます。これにより、お気に入りのコマンドがCMDまたはPowerShellに直接もたらされます。
LinuxやWSLで信頼しているのと同じフラグとパイプを使用して、強力なスクリプトを実行しましょう。例えば、find . -name "*.ts" | xargs grep "TODO"を使用して、特定の「TODO」文字列を含むすべてのTypeScriptファイルを見つけることができます。このコマンドは期待どおりに正確に機能し、既存のスクリプトと筋肉の記憶が完全に移行できることを示しています。何も変わっていないように感じますが、それがポイントです。
あなたのレガシーを保護しましょう。Microsoftは、新しいUnixバージョンと並行して、オリジナルのDOSのsortとfindのポートをバンドルしました。このインテリジェントな設計により、DOSスタイルの構文に依存する古いCMDスクリプトの破損を防ぎ、それらを同時に実行できるようにします。従来のDOSコマンドと最新のUnixコマンドの両方が共存し、妥協することなく完全な後方互換性を提供します。
避けるべきPowerShellの落とし穴
PowerShellの組み込みエイリアスは、重要な落とし穴を生み出します。ls、cat、rmなどのコマンドは優先順位を維持し、新しくインストールされたCoreutilsの実行可能ファイルよりもPowerShellのネイティブコマンドレットを実行します。lsを呼び出すと、内部的には依然としてGet-ChildItemが起動されます。UNIXコマンドにアクセスするには、明示的にls.exeを呼び出すか、そのコマンドの既存のPowerShellエイリアスをクリアする必要があります。
パイプ処理には制限があることを予期してください。PowerShellのオブジェクトベースのパイプラインは、ネイティブの実行可能ファイルとやり取りする際にバイナリストリームを破損する可能性があります。例えば、xargsやfindのようなコマンドは、PowerShellの出力処理がバイナリストリームの期待と衝突することが多いため、期待される入力または出力で問題に遭遇する可能性があります。これにより、予期しない動作やデータ破損につながる可能性があります。
これは完全なPOSIX environmentではないことを理解してください。chmodやchownのような重要なコマンドは、偽装されたりエミュレートされたりしているのではなく、完全に存在しません。WindowsはファイルパーミッションをAccess Control Lists (ACLs)を介して管理しており、これはUNIX-like systemsで使用されるパーミッションビットとは根本的に異なります。POSIXパーミッションを直接操作することはできません。これらはネイティブバイナリであり、完全なLinux environmentではありません。
この記事が気に入ったら、毎朝同じようなものをメールで受け取れます。
1日1通 · 2クリックで解除 · サードパーティのトラッキングなし
WSL Killer? そうではありません。
Coreutilsは堅牢なGNU CoreutilsをWindowsに提供しますが、WSLの代替品ではありません。この違いを理解してください:Coreutilsはネイティブバイナリを提供し、既存のWindowsコマンドラインを強化して、おなじみのUnixライクなコマンドへの利便性と直接アクセスを提供します。これは完全なLinux environmentのエミュレーションではありません。重要な点として、chmodやchownのようなPOSIX featuresが機能することを期待しないでください。これらは意図的に省略されています。WindowsはパーミッションビットではなくACLsに依存しているため、このツールはOS全体を仮想化することなくワークフローを効率化します。
日常の迅速なスクリプト作成に理想的なCoreutilsは、完全なWSL instanceが不要なオーバーヘッドを発生させるタスクの自動化において威力を発揮します。find . -name "*.ts" | xargs grep "TODO"のようなおなじみのワンライナーをPowerShellまたはCMDで直接実行し、コンテキスト切り替えなしで、すでに知っているコマンドを使用して迅速なファイル操作、テキスト処理、データフィルタリングを可能にします。これらのコマンドを既存のbatch scriptsやPowerShell workflowsにシームレスに統合できます。
MicrosoftによるCoreutilsのリリースは、単なる利便性だけでなく、ネイティブWindows developer experienceの強化に対する明確なコミットメントを示す重要な戦略的転換です。MicrosoftがメンテナンスするUnix toolingをWindows上で提供することで、platforms間のギャップが大幅に縮まり、開発者はクロスプラットフォームの筋肉記憶にすぐにアクセスできるようになります。これにより、Windowsは現代の開発にとってより強力で多用途なenvironmentとなり、オープンで統合されたecosystemに対するMicrosoftの献身を強調しています。
よくある質問
Microsoft Coreutilsとは何ですか?
これは、Microsoftがメンテナンスする、Windows用のネイティブUNIX command-line utilitiesのパッケージであり、古典的なGNU Coreutilsの現代的なRustによる再実装に基づいています。
Coreutilsをインストールした後でもWSLは必要ですか?
はい、完全なLinux environmentのためには必要です。Coreutilsは特定のコマンドバイナリを提供しますが、パーミッション管理(chmod)のような機能を備えた完全なPOSIX-compliant systemではありません。
PowerShell aliasの代わりに、実際のlsコマンドを使用するにはどうすればよいですか?
実行可能ファイルを直接呼び出す(ls.exe)か、セッションまたはプロファイルでRemove-Item alias:lsコマンドを使用してlsのPowerShell aliasを削除する必要があります。
これはGit Bashよりも優れていますか?
異なります。CoreutilsはCMDまたはPowerShellに直接統合されるネイティブWindows binariesを提供しますが、Git Bashは別のBash emulation environmentを提供します。

