WindowsのコマンドプロンプトとWindows Subsystem for Linux

Qiitaの投稿記事を眺めていると、たまに、おやっと思うような投稿記事が注目を集めていることに気づく。WindowsのBATファイルやコマンドプロンプト関連の投稿記事もそんな1つだ。

Windows向けの開発をしている場合はもとより、Windowsを開発プラットフォームにしているならば、いくらWindowsGUI操作が中心とは言っても、コマンドでの操作が必要となることも多い。

UNIX/Linuxユーザーからすれば、Windowsのコマンドは力不足と思うだろう。実際そうではあるのだが、恐らく想像よりはかなりマシだ。パイプもリダイレクトもあるし、forコマンドなどは結構いろんなことができる。

昔、Windowsをメインプラットフォームにしていた頃は、客先などで標準機能しか使えないところに出向く可能性などもあったので、コマンドプロンプト操作を普段から多用していた*1。同僚などは、私がGUIをほとんど使わずにコマンドプロンプトだけで操作しているのを見て驚いたほどだ。

最近も熊本地震への支援のため、Windows上で簡単な処理を行うツールを用意する必要に迫られたことがあった。最初はバッチファイルでどうにかならないかを考えたのだが、ファイルの選択をドラッグアンドドロップで行わなければならないため、C#で開発することに最終的にはなったのだが、その際に久しぶりにコマンドプロンプトを触った。

さすがに久しぶり過ぎて、少し苦労してしまったのだが、その際参考にさせて貰ったのが私の古くからの友人である山近さんが書かれた「Windowsコマンドプロンプトポケットリファレンス」だ。そう言えば、昔はこういう記事がWindows関連の雑誌 *2 などでも人気記事だったなと思い出しながら参考にさせて貰った。

[改訂新版]Windowsコマンドプロンプトポケットリファレンス

[改訂新版]Windowsコマンドプロンプトポケットリファレンス

 

Microsoftコマンドライン系の充実には長年努力しているにも関わらず、なかなか報われない。古くはWindows 98から提供された*3WSHがある。WSHはWMI (Windows Management Instrumentation) と組み合わせることでかなりのことができた。

それでも、UNIXのシェルの充実にはかなわないと、SFU (Services for UNIX) という製品で提供したUNIXサブシステムでUNIXシェルそのものをサポートしたりもしたが、Windows ServerにSUA (Subsystem for UNIX-Based Application) として搭載されるようになった後、しばらくしたら無くなってしまった。

Windows上でのシェル環境としてはPowerShellがその後主役となった。これもまたかなり強力なツールであり、Windowsのシステム管理であれば、これで十分まかなえるのであるが、逆に機能が抱負過ぎ、また他プラットフォーム上でのシェルと互換が無いため、開発者に愛用されているとは言いがたい。あくまでも私見だが。

そんな中、今回、Windows 10 Anniversary UpdateでWindows Subsystem for Linux が提供されてた。

今年春にサンフランシスコで開催されたBuildでMicrosoft社員に聞いてみたのだが、SFUUNIXサブシステムはWindowsのシステム管理にUNIXシェルのツールなどを流用するための手段として考えられたのだが、それに無理があったらしい。つまり、UNIX/Linuxはシステム管理がテキスト(ファイル)ベースであるため、UNIXシェルとの相性が良い。一方、Windowsレジストリなどに収容されたデータを専用ツールでアクセスするというシステムとなっている。そのため、単にUNIXシェルを使えるようにしても意味はなく、その反省がPowerShellに繋がったと話していた。

Windows 10 Anniversary Updateで提供されるUbuntu環境とBashは目的が全く異なる。MacOSLinuxに流れてしまった(主に)Web開発者を取り戻すために、Linux環境そのものをWindows上に用意した。そのため、SFUUNIXサブシステムで実現されていたプログラムレベルのWindowsとの相互運用は実現されていない*4。まだベータ版ということで、日本語の扱いなど微妙のようだが、今後の発展は楽しみだ。

それにしても、Windows Subsystem for Linuxという名前、逆じゃないのかと思ったが、目的を考えると、なるほどと思えてくる。

*1:同じ理由でキーボードもJISキーボードとUSキーボードを両方使えるようにしていた

*2: 日本から撤退してしまったIDGが出していたWindows NT Worldなど

*3:今でも使える

*4:そう考えると、SFUUNIX環境でWin32やCOMのアプリと連携できたのは凄い