マイクロソフトの開発者向けカンファレンス「//Build/」にて、”Windows Server 8 apps must run without a GUI – learn more now”というセッションがあったそうです。私はWindows Server用サーバアプリケーションを業務で開発していますので、刺激的ですね。なお題名に “must” とあるものの、必須ではなく強い推奨ですので勘違い無きよう 🙂
さて、セッション内で言われているリソースの話やセキュリティの話は「おっしゃるとおり」ですので議論の余地は無いと思います。ただ、捉え方によっては常にGUIを備えることで(言い方は悪いですが)技術的知識・経験の浅い人でも操作できることを最大の価値としてきたWindowsが、PowerShell上の「コマンドだけの世界」に戻ることになるのではないでしょうか。そして「コマンドだけ」という部分だけに着目するならば、そこはnix(UNIXやLinux)勢の独壇場だと私は考えています。私にとっては、今でも実用に耐えるnixのコマンドライン環境は本当に優秀な環境であり、MS-DOSを引きずるWindowsのコマンドライン環境は「放置された廃墟」です。
nixのコマンド環境を考えると、困ることがあっても探せば何らかの解決方法が見つかってきました。また基本機能は十分強力ですから、(機能面では)コマンドだけで業務をこなすにあたって不足は無いと感じます。ちなみに私が業務でnix用サーバアプリケーションを開発する際にはWindows XPからTeraTerm (SSH)でリモートログインし、vimとmakeとシェルスクリプトで全開発作業を行っています。X Windowを使うのは、システム設定を変更する際に「設定ファイルがドコにあるのか分からないからGUIメニューで探した方が速い」場面だけです。実経験として、*nixではGUIが無くとも最初から何一つ問題がありませんでした。
Windowsのコマンド環境を考えると、第一にバッチファイルや標準コマンド群といった基本機能が貧弱すぎます。この点はPowerShellを導入することで改善しますが、まだまだWindows Server 2003などが主流で残っている現状ですからPowerShellが使えることを前提にはできません。第二に、コマンド操作用画面として使うCMD.EXEの多言語対応度合いの低さが問題です。日本語WindowsではShift_JIS以外を選択できず、レジストリを変更して無理矢理UTF-8に対応させたならカーソル位置が正しく表示されず妙な動きをします(無理矢理動かしているので当然ですが)。コマンドプロンプトでShift_JIS文字列しか表示できないため、C/C++で開発するコマンドを内部文字コードUTF-8とするのが無駄に難しくなり、多言語化もほぼ不可能です(Shift_JIS文字しか表示できない環境では日本語・英語以外の文字を表示できないので確認もできない)。第三は、権限昇格の仕組みがコマンドベースでは実現できない問題です。Windows 7などでは、特権が必要な場面に出くわすたびに特権で起動したCMD.EXEのインスタンスを再作成し、そちらで作業する必要に迫られます。もちろん最初から特権でCMD.EXEを起動しておけば手間的には良いのですが、それは「UNIXシステムへ常にrootでログインする」のと同じですから、そんなことを強制される環境は、とても使いたいと思いません。以上の問題はすべて、アプリの作り込みでは解決できません。こうした面があるため、魅力的なWindows向けのコマンドアプリを開発しても、その実行環境が魅力的で無いため、トータルで魅力が失われる気がしてしまいます。そして、コマンドアプリのニーズを実感として感じていないというトドメがあり、結局Windows向けのコマンドアプリにまったく投資してきませんでした。
GUIを考えるとWindowsに軍配が上がりますが、コマンドという観点では*nixに大きく軍配が上がると思います。そうだというのにコマンドベースのサーバアプリがWindows Server向けに求められるというのは、面白い話です。少なくとも私にとってのWindows Serverの価値を、少し考え直す必要があると思います。