このページの本文へ

Windows Info 第82回

Windows Subsystem for LinuxからWindowsバイナリが起動可能に

2017年01月29日 10時00分更新

文● 塩田紳二 編集● ASCII.jp

  • この記事をはてなブックマークに追加
  • 本文印刷

 現在配布が行なわれているWindows Insider Program(WIP)のRS2 Insider Preview Build 14951以降(以下プレビュー版と略す)では、Windows Subsystem for Linux(WSL、Bash on Windows:BOWとも)の機能が拡張されており、bash側からWindowsデスクトップアプリケーション(Win32アプリケーション)の起動が可能になった。

 マイクロソフトのブログでは、この機能を「Windows Subsystem for Linux - interoperability with Win32 applications」と呼んでいる(以下、Win32相互運用性と略す)。

 このWin32相互運用性は、単純にWin32アプリケーションを起動するだけでなく、引数に指定された「ファイルパスの変換」と「標準入出力などリダイレクションの制御」も行なう。

 また、WSLを起動するinitプロセスの機能が拡張されており、起動時のWindows側のPATH環境変数をWSL側に持ち込むようだ。このため、特にWin32側のPATH設定などをしなくても、Win32アプリケーションを起動できるようになる。ただし、Linuxでは実行ファイルの拡張子の省略(Windowsではexe/com/batの拡張子は省略可能)がないため、実行ファイルは「cmd.exe」のようにファイル名を完全に指定する必要がある。

WindowsとLinux間のパスの変換

 Win32相互運用性では、Win32アプリ側が動作するのはWindows環境だが、起動するbashはWSL内となる。Windowsの環境では、パスにドライブ名などを含むパス表記(UNC、Universal Naming Convention)が使われる。これに対してWSL内では、Linuxのパス表記方法が使われている。

 WSLには2つのファイルシステムがあり、1つはLinuxのファイルシステム(ルートディレクトリ以下)であり、これはVolFS(Volume File System)と呼ばれている。もう1つは、WSL側からWindows側のファイルをアクセスするためのDrvFS(Drive File System)で、こちらは、VolFSの/mnt/以下にドライブ文字のディレクトリが作られ、たとえば「/mnt/c」が「C:\」に相当する。

 コマンドラインの引数は、プログラム自身が解釈し、必要に応じてファイル名をフルパスなどに変換している。このとき、使われる「カレントディレクトリ」(Windowsではカレントフォルダ)は、プログラムの起動時に環境情報として渡される。プログラムを起動するbash側では、引数のどれがファイルなのかは判断できず、単純に引数にある環境変数やシェル変数などを展開(変数を変数値で置き換える)するだけだ。

 このため、Win32相互運用性でも、引数自体にはまったく手をつけないが、環境情報である「カレントディレクトリ」だけは、パスをUNCに変換して、Windows側に手渡す。

 ただし、VolFS(WSLのルートディレクトリ以下、DrvFS以外の部分)内のパスがカレントディレクトリだった場合には、現在のWin32相互運用性では、Bash.exeの起動フォルダである「%windir%\system32」(一般的にはC:\Windows\System32)が使われる。

 VolFSは、Linux側のファイルシステムであるため、Windows側からのアクセスが制限されている。これは、WindowsとLinuxではファイルロックのポリシーが違い、安全なアクセスを実現するためのコストが小さくないからだ。このため、VolFS側にあるファイルは、Win32相互運用性ではアクセスすることができない。処理する場合には、Linux側でVolFSからDrvFS側にファイルをコピーするなどが必要になる。

 WSL側では引数を勝手には変換しないため、Win32プログラムの引数に直接Windowsのパスを記述することもできる。

WSL側でWin32アプリケーションを起動するとき、\はbashが解釈するエスケープ文字なので\\とするか、パスをシングルクオートで括る

 注意したいのは、UNCで使われる\(逆スラッシュ)は、bashのコマンドラインではエスケープ文字として解釈されるため、表記に注意が必要になることだ。具体的には「\」を「\\」としてエスケープ文字として解釈が行われてもいいようにするか、Windows側のパスをシングルクオートで括り、エスケープ文字の解釈を行わせないようにするかである。

notepad.exe 'c:\temp\test.txt' 引数をシングルクオートで囲む
notepad.exe c:\\temp\\test.txt \を\\とする

 実は、Windows自体は、パスの区切り文字としてスラッシュ「/」も受け付けるため、必ずしも、逆スラッシュ(円マーク)で指定しなくてもよい。たとえば、前述の例では、

notepad.exe c:/temp/test.txt

と表記しても動作する。ただし、Windowsのコマンドラインプログラム(GUIを持たずコンソールで動作することを前提に作られたコマンドライン用実行プログラム)では、この表記がエラーになる。

 標準のオプション指定文字がスラッシュであるため、これをファイルパスとは解釈しないからだ。たとえば、「dir」コマンドは、ファイルパスは逆スラッシュ区切りでしか受け付けない。逆にGUIを使うWin32プログラムの大半はオプション指定を持たないため、スラッシュ区切りでもパスを解釈できるものが多い。ただし、GUIを使うプログラムの中にもオプション指定を受け付けるものがある。

 逆に、引数としてDrvFSのパスを直接表記してしまうとエラーになる。

notepad.exe /mnt/c/Temp/test.txt エラー
cd /mnt/c/Temp カレントディレクトリを使う
notepad.exe test.txt エラーにならない

 エラーになるのは、引数などは変換されずにそのままWin32アプリケーションに渡されるからだ。Win32アプリケーションは、UNC形式のパスが前提であるため、DrvFS形式のパスを解釈できない。

標準入出力の変換

 Win32相互運用性のもう1つの機能が、WSLとWindows側の標準入出力の接続だ。Windowsでもbashでも、パイプ"|"でプログラム間の標準入出力を接続したり、">"や"<"で切り替えを行なうことができるが、Win32相互運用性では、WSLとWindowsの標準入出力を接続することができる。たとえば、bash上で

cmd.exe /c dir | grep "test"

として、WSLでWin32ソフトウェアであるcmd.exeを起動し、その出力をWSL側のLinuxソフトウェアであるgrepの標準入力と接続できる。

Win32相互運用性では、Win32とWSL間で標準入出力によるデータの受け渡しが可能

逆に

ls | find.exe '"test"'

として、Linuxのlsコマンドの出力をWin32側のFind.exeの入力と接続することも可能。ただし、Find.exeの引数はダブルクオートで括る必要があるが、Bashが解釈して評価した結果としてダブルクオートをはずしてしまうためシングルクオートでくくり、ダブルクオートが解釈されないようにする必要がある。

 リダイレクションは、bashが解釈して、WSL側で標準入出力を設定するため、リダイレクト先のファイルの指定には、WSL側のパス指定を使う必要がある。Win32アプリケーションでも、VolFS内へのファイルの書き込みが利用できる。

リダイレクションを使えばWin32アプリからLinux側のファイルシステム(VolFS)へのアクセスが可能になる

 だが、Windows側では、コマンドプロンプトウィンドウ内で

dir | bash -c "grep 'test'"

として、cmd.exe側の標準入出力をbash側へつなぐことはできないようだ。bash.exe自体には、標準入出力はあるものの、それをWSL側で起動される/bin/bashに接続することはできない。Win32相互運用性があるため、前述のようにWSLからcmd.exeを起動するなどしてWindows側でコマンドを動作させれば実質的には同等のことが可能となるため、基本的には問題になることはないだろう。

 次回は、このWin32相互運用性を実現している仕組みについて解説する。

カテゴリートップへ

この連載の記事
1
【整備済み品】 富士通 ノートパソコン LIFEBOOK MU937 超軽量 薄型ノートPC■Win11搭載 / MS Office H&B 2019 / FHD(1920x1080)/第七世代 Celeron/8GBメモリ/SSD 256GB/Webカメラ内蔵/13.3インチ
【整備済み品】 富士通 ノートパソコン LIFEBOOK MU937 超軽量 薄型ノートPC■Win11搭載 / MS Office H&B 2019 / FHD(1920x1080)/第七世代 Celeron/8GBメモリ/SSD 256GB/Webカメラ内蔵/13.3インチ
¥19,800
2
Lenovo ノートパソコン パソコン IdeaPad Slim 3 14.0インチ 第13世代 インテル® Core™ i5 プロセッサー搭載 13420H メモリ16GB SSD512GB MS Office 2024搭載 Windows11 バッテリー駆動14.1時間 重量1.39kg ルナグレー 83K00072JP ノートPC
Lenovo ノートパソコン パソコン IdeaPad Slim 3 14.0インチ 第13世代 インテル® Core™ i5 プロセッサー搭載 13420H メモリ16GB SSD512GB MS Office 2024搭載 Windows11 バッテリー駆動14.1時間 重量1.39kg ルナグレー 83K00072JP ノートPC
¥107,800
3
【整備済み品】中古 ノートパソコン NEC VersaPro VKT16/15.6型・第8世代Core i5-8250U(最大動作3.4GHz)/快適メモリ8GB/ 高速SSD 256GB/Win11 Pro/MS Office 2019付属/テンキー付, Webカメラ, USB3.0, HDMI, VGA, 有線LAN, WIFI内蔵, Bluetooth/ACアダプター付属/180日間保証
【整備済み品】中古 ノートパソコン NEC VersaPro VKT16/15.6型・第8世代Core i5-8250U(最大動作3.4GHz)/快適メモリ8GB/ 高速SSD 256GB/Win11 Pro/MS Office 2019付属/テンキー付, Webカメラ, USB3.0, HDMI, VGA, 有線LAN, WIFI内蔵, Bluetooth/ACアダプター付属/180日間保証
¥26,880
4
【Amazon.co.jp限定】 HP ノートパソコン 15-fd 15.6インチ インテル Core i5-1334U メモリ16GB SSD512GB Windows 11 Microsoft Office 2024搭載 カメラシャッター 指紋認証 薄型 Copilotキー搭載 ナチュラルシルバー (BJ0M4PA-AAAB)
【Amazon.co.jp限定】 HP ノートパソコン 15-fd 15.6インチ インテル Core i5-1334U メモリ16GB SSD512GB Windows 11 Microsoft Office 2024搭載 カメラシャッター 指紋認証 薄型 Copilotキー搭載 ナチュラルシルバー (BJ0M4PA-AAAB)
¥181,469
5
【整備済み品】富士通 ノートパソコン LIFEBOOK U9310 13.3型FHD(1920x1080) 超軽薄 ノートPC/第10世代 Core i5-10310U@1.7GHz/ 8GB メモリ/高速ストレージ SSD/Webカメラ/WIFI/Type-C/HDMI/win11&MS Office 2019 搭載 ビジネス 在宅勤務向け パソコン (メモリ:8GB/SSD:256GB)
【整備済み品】富士通 ノートパソコン LIFEBOOK U9310 13.3型FHD(1920x1080) 超軽薄 ノートPC/第10世代 Core i5-10310U@1.7GHz/ 8GB メモリ/高速ストレージ SSD/Webカメラ/WIFI/Type-C/HDMI/win11&MS Office 2019 搭載 ビジネス 在宅勤務向け パソコン (メモリ:8GB/SSD:256GB)
¥36,979

Amazonのアソシエイトとして、ASCII.jpは適格販売により収入を得ています。

ASCII倶楽部

注目ニュース

  • 角川アスキー総合研究所

プレミアム実機レビュー

ピックアップ
1
KIOXIA(キオクシア) 旧東芝メモリ microSD 128GB UHS-I Class10 (最大読出速度100MB/s) Nintendo Switch動作確認済 国内サポート正規品 メーカー保証5年 KLMEA128G
KIOXIA(キオクシア) 旧東芝メモリ microSD 128GB UHS-I Class10 (最大読出速度100MB/s) Nintendo Switch動作確認済 国内サポート正規品 メーカー保証5年 KLMEA128G
¥1,880
2
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
¥1,890
3
【Amazon.co.jp限定】バッファロー microSD 32GB 100MB/s UHS-1 U1 microSDHC【 Nintendo Switch 対応 】V10 A1 IPX7 Full HD RMSD-032U11HA/N
【Amazon.co.jp限定】バッファロー microSD 32GB 100MB/s UHS-1 U1 microSDHC【 Nintendo Switch 対応 】V10 A1 IPX7 Full HD RMSD-032U11HA/N
¥980
4
Anker iPhone充電ケーブル PowerLine II ライトニングケーブル MFi認証 超高耐久 iPhone 14 / 14 Pro Max / 14 Plus / 13 / 13 Pro / 12 / 11 / X/XS/XR / 8 Plus 各種対応 (0.9m ホワイト)
Anker iPhone充電ケーブル PowerLine II ライトニングケーブル MFi認証 超高耐久 iPhone 14 / 14 Pro Max / 14 Plus / 13 / 13 Pro / 12 / 11 / X/XS/XR / 8 Plus 各種対応 (0.9m ホワイト)
¥990
5
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
¥740
6
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
¥980
7
【Amazon.co.jp限定】 ロジクール 静音 ワイヤレス トラックボール マウス M575SPd Bluetooth Logibolt 無線 windows mac iPad OS Chrome トラックボールマウス ブラック M575 M575SP 国内正規品 ※Amazon.co.jp限定 壁紙ダウンロード付き
【Amazon.co.jp限定】 ロジクール 静音 ワイヤレス トラックボール マウス M575SPd Bluetooth Logibolt 無線 windows mac iPad OS Chrome トラックボールマウス ブラック M575 M575SP 国内正規品 ※Amazon.co.jp限定 壁紙ダウンロード付き
¥5,280
8
キヤノン Canon 純正 インクカートリッジ BCI-381(BK/C/M/Y)+380 5色マルチパック BCI-381+380/5MP 長さ:5.3cm 幅:13.9cm 高さ:10.75cm
キヤノン Canon 純正 インクカートリッジ BCI-381(BK/C/M/Y)+380 5色マルチパック BCI-381+380/5MP 長さ:5.3cm 幅:13.9cm 高さ:10.75cm
¥5,545
9
バッファロー SDカード 128GB 100MB/s UHS-1 スピードクラス1 VideoSpeedClass10 IPX7 Full HD データ復旧サービス対応 RSDC-128U11HA/N
バッファロー SDカード 128GB 100MB/s UHS-1 スピードクラス1 VideoSpeedClass10 IPX7 Full HD データ復旧サービス対応 RSDC-128U11HA/N
¥1,980
10
バッファロー マウス 無線 ワイヤレス 5ボタン 【戻る/進むボタン搭載】 小型 軽量 節電モデル 最大584日使用可能 BlueLED ブラック BSMBW315BK
バッファロー マウス 無線 ワイヤレス 5ボタン 【戻る/進むボタン搭載】 小型 軽量 節電モデル 最大584日使用可能 BlueLED ブラック BSMBW315BK
¥1,040

Amazonのアソシエイトとして、ASCII.jpは適格販売により収入を得ています。

デジタル用語辞典

ASCII.jpメール デジタルMac/iPodマガジン