Build 2016で発表され話題となった「Windows 10でネイティブ動作するbash」(「Windows Subsystem for Linux」)。ベータ版という位置付けだが、先日Windows 10 Anniversary Updateに含まれる形で提供が開始され、いよいよユーザーに身近な存在となった。その概念から導入の実際、ネイティブLinux環境との違いなどについて、2回にわたりレポートする。
「Windows Subsystem for Linux」の衝撃
MicrosoftがWindows 10向けに提供する「Windows 10 Anniversary Update」は、2015年11月公開の「Threshold 2」以来10ヵ月ぶりとなる大型アップデート。生体認証機能をサポートする「Windows Hello」や音声アシスタント「Cortana」など多くの機能が強化され、規模としてはThreshold 2をしのぐといっていい。
そのうち本稿で採り上げるのは、UNIX系OSで広く利用されているシェル「bash」がネイティブサポートされたこと。Ubuntu Linuxをサブシステムで動作させる機構が追加されたため、bashのみならずLinuxのコマンドをWindows(実際にはコマンドプロンプト)から透過的に利用できるようになったのだ。
これまでもWindowsにはCygwinやMSYS2などUNIXシェルが動作する環境は存在したが、それらが依存するPOSIX互換レイヤーがオーバーヘッドを生じるうえ、ディレクトリ構造がWindowsともUNIXとも異なってしまうなど"クセ"があり、WindowsでUNIX由来の機能/コマンドをスムースに利用する仕組みが存在しなかった。
一方、対比されることが多いOS X(macOS)といえば、ネイティブのBSDレイヤーを持ちSingle UNIX Specificationの認証を受けた「UNIX」であり、LinuxなどのPC-UNIXとソースコードレベルで高い互換性を備える。LAMP(Linux+Apache+MySQL+{PHP|Perl|Python})という言葉があるように、WEBアプリ開発環境をLinux上で構築することが一種のトレンドとして存在するが、同様の環境をOS X上で構築することは難しくない。Windowsでこれを実現しようとなると、仮想マシンを用意したりCygwinに手を入れたりひと苦労で、結構な数のデベロッパーがMacに移行したこともうなずける。
Windows 10 Anniversary Updateに含まれる「Windows Subsystem for Linux」は、まさにそこを意識した機能といえる。仮想環境でもPOSIX互換レイヤーでもなく、サブシステムとしてUbuntu Linuxを動作させれば、ほぼネイティブにLinuxの機能(バイナリ)がWindowsから呼び出せる。Build 2016での発表以来、シェル「bash」がネイティブ動作することばかりクローズアップされているが、bashはあくまで"窓口"に過ぎず、その本質はLinuxをWindowsサブシステムで動作可能にしたことにある。
「Ubuntu On Windows」のセットアップ
繰り返しになるが、Windows 10上でネイティブ動作するbash、およびLinuxのプログラム(コマンド)を手に入れるには、Windows 10 Anniversary Updateを適用し、その後「Ubuntu on Windows」のセットアップを行なうという手順になる。
誤解のないように補足しておくと、Ubuntu Linuxをネイティブ動作させるためのサブシステム(Windows Subsystem for Linux)はWindows 10 Anniversary Updateにオプションの形で含まれるが、Ubuntu Linuxのイメージファイルは後から追加することになる。
セットアップは若干煩雑で数回のシステム再起動を伴うが、いったん済ませてしまえば次回以降はコマンドプロンプトから「bash」を実行するだけでLinuxとしての機能を呼び出せる。まずは、作業を進めてみよう。