Unix/Linuxの標準的なコマンドを、Windowsのコンソール上で動かす「Windows CoreUtils」が公開された。これにより、Windows側でもLinux側(WSL側)でも同じコマンドが使えるようになった。Windows CoreUtilsのコマンドは、原則として「exe」の拡張子を持つ実行ファイルとして利用する。
とりあえず、利用したければ、以下のwingetコマンドを実行する。
winget install Microsoft.Coreutils
あるいは、Windows CoreUtilsのリポジトリのリリースページ(https://github.com/microsoft/coreutils/releases/tag/v2026.5.29)からインストーラーをダウンロードしてもよい。もちろん、ソースコードをダウンロードして自分でビルドすることも可能である。
そもそもWindows CoreUtilsとは?
Windows CoreUtilsは、uutilsプロジェクトのcoreutils(以下、uutils/coreutils)を、MicrosoftがWindows用に実装したもの。uutilsは、広く普及したコマンドラインユーティリティをRustで再実装するプロジェクトであり、coreutilsはそのうちPOSIXやSUS(Single UNIX Specification)で定義されたコマンドを実装している。たとえば、Linuxでは従来C言語などで記述されていたGNU Core Utilities(以下、GNU Core Utils)を置き換えることを目指している。
そもそもGNU Core Utilsは、それまでGNUで個別に開発されていたUnix/Linuxの標準的なPOSIXコマンド、あるいはSUS(Single Unix Specification)コマンドに統一性を持たせるため、1つのパッケージにまとめたものだ。ただし、GNU Core Utilsには、POSIX/SUSコマンド以外の独自コマンドも含まれている。
Unixの開発者の一人であるブライアン・カーニハンは、V6UNIXの完成後に「Software Tools」(日本語訳は「ソフトウェア作法」共立出版)という書籍を上梓している。この本は、UNIXのシェルや標準コマンドのコンセプトを元に単機能のユーティリティの開発を解説している。
ただし、利用言語はカーニハンが開発したRatforであり、コマンドラインでコマンド出力と入力のパイプライン接続を必要とするが、特定のプラットフォームやOSを想定してはいない。この本の影響で、シェル上の外部コマンドとして、UNIX的な単機能コマンドが多く作られるようになった。これらを「Software Tools」と総称することがある。MS-DOSやWindows用のSoftware Toolsあるいはその中の単独コマンドは、今でもフリーソフトの配布が続いているものがある。
V6UNIXはベル研以外にも配布されたため、このあたりからUNIXに触れるユーザーが増えた。これにカーニハンのSoftware Toolsが提唱するコンセプトが組み合わさり、UNIXやそのツール群の評価が高まった。
これに感銘を受けた開発者は、UNIX互換環境の開発に着手するSoftware Toolsのコマンドを、自分のプラットフォームに移植するといった活動をした。GNU Core Utilsは、LinuxのようなUNIXに似た環境にSoftware Tools的なものを提供するためのプロジェクトであった。
2015年にRustの安定版が登場して普及するにつれ、システムの根幹部分の記述にRustを使う事例が増えてきた。uutilsはそうした動きの1つで、広くコマンドラインツールを対象にしている。
Windows固有の事情を考慮して改良が加えられている
Windows CoreUtilsは、Microsoftがuutils/CoreUtilsをWindows 11用に変更を加えて、別プロジェクトとして立ち上げたものだ。uutilsプロジェクトにもWindowsの実装があり、バイナリが配布されている。両者の違いは、Windows固有の事情を考慮しているかどうかである。
Windowsには、MS-DOS時代から文字列検索フィルタープログラム「find.exe」やソートフィルタープログラム「sort.exe」が含まれている。Unix/Linuxにも同名のコマンドがあり、このままでは名前が衝突してしまう。
find.exeやsort.exeは、昔から存在するバッチファイルなどで利用されている可能性があるため、簡単には置き換えられない。そこで、Windows CoreUtilsでは、find.exeやsort.exeをコンテキストに従い、DOSコマンドとUnix(GNU)コマンドの動作を切り替えて動作できるようにした。
具体的には、DOSコマンドの使い方をした場合には、DOSのfind.exeとして動作する。たとえばfind.exeでは、検索キーワードをダブルクオートで括ることが必須であり、オプション文字にスラッシュを使う。こうした使い方をしている場合には、DOSコマンドのfind.exeとして動作し、オプション文字にハイフンを使っている場合にはUnixコマンドとして動作する。
非常に簡単な例だが、同じWindows CoreUtilsのfind.exeにDOSコマンドのヘルプオプション「/?」を与えたときと、Unixコマンドのヘルプオプション「--help」を与えた時では出力が異なる。
そのほか、uutils/coreutilsのdirコマンドは、cmd.exeの内部コマンドdirと衝突してしまうため、Windows CoreUtilsには含まれていない。こうしたコマンドごとの互換性に関しては、GitHubのWindows CoreUtilsのページに記述がある。
●Coreutils for Windows: Installer & Packaging(英語)
https://github.com/microsoft/coreutils
また、Windows CoreUtilsのコマンドごとの解説は、以下のページにある。
●WindowsのCoreutilsの概要
https://learn.microsoft.com/ja-jp/windows/core-utils/overview
●WindowsコマンドのCoreutils
https://learn.microsoft.com/ja-jp/windows/core-utils/commands
なお、上記のリンクのうちコマンドの解説は、uutilsプロジェクトのDocumentationページに飛ぶ。ここに簡単なコマンドのヘルプがあるが、文書としては執筆途中のものがある。
Windows CoreUtilsの実装
Windows CoreUtilsは、uutils/coreutilsをベースにしている。
grep:uutils/grep(https://github.com/uutils/grep)
find、xargs:uutils/findutils(https://github.com/uutils/findutils)
その他のコマンド:uutils/coreutils(https://github.com/uutils/coreutils/releases)
が元になるリポジトリである。
uutils/coreutilsは、多数のコマンドファイルをインストールすることになるため、ストレージの利用効率を考慮してBusybox形式を使う。Busybox形式とは、複数のコマンドを1つのバイナリ実行ファイルの中に入れて、起動時の名前(コマンドラインの0番目の引数)で、名前に応じたコマンド処理を実行するというもの。組み込み系などで広く採用されている方式で、たとえばAndroidに組み込まれているシェル(デバッグ用シェル)もこの構造を利用している。
uutils/coreutilsをベースにしているWindows CoreUtilsも同じ構造を持つ。現在配布中のバージョンでは「C:\Program Files\coreutils」にインストールされる。ここにあるcoreutils.exeがBusyboxファイル(実体)で、binまたはcmdフォルダにあるのは、実体へのハードリンクである。
これまで一部の処理をWSL側コマンドでしてきた、あるいはUnixやLinuxの利用が長かった、あるいは現在でもメインのユーザーには、同等のコマンドがそのまま利用できるメリットはありそうだ。筆者もPowerShellよりは、長く使ってきたcmd.exeやUnix環境のほうが「勝手に手が動く」感じがあり、WSL側のLinuxコマンドを使ってしまうことがあった。
なお現状では、GNU Core Utilsとuutilsには細かい動作の違いがあり、GNU Core Utilsのテストプログラムのすべてに合格しているわけではない。場合によっては、その違いが見えてしまう可能性もある。
本記事はアフィリエイトプログラムによる収益を得ている場合があります

この連載の記事
-
第530回
PC
Windows 11でタスクバーの位置の移動機能が復活するのは結局どうなった? プレビュー版の現状を見る -
第529回
PC
Windowsの標準スクリプト言語であるPowerShellの現状をあらためて紹介する -
第528回
PC
Windows 11の標準機能でメモリに問題がないかを診断する -
第527回
PC
Windowsがクラッシュする原因を究明する方法 AIを活用すると結構早い -
第526回
PC
今年6月にPCが起動しなくなる心配はないが、セキュアブートが機能しないとWindowsのセキュリティ機能は一部使えなくなる -
第525回
PC
6月以降「PCが起動不可能に?」と間違った騒がれ方をしている原因の「セキュアブート」とは? -
第524回
PC
Windows Insider Programが変化 チャンネルが3つになって整理される -
第523回
PC
AI傾倒に一息入れて、既存のWindowsの改良を宣言するMicrosoft タスクバーを画面の上下左右に移動可能に!? -
第522回
PC
Windowsでも完全キーボード操作派は注目! PowerToysのコマンドパレット -
第521回
PC
Windowsでアプリをインストールしたときに警告が表示する「Defender SmartScreen」と「Smart App Control」 - この連載の一覧へ












