LoginSignup
4
7

More than 5 years have passed since last update.

Bash on WindowsからWindowsアプリを起動する

Last updated at Posted at 2017-05-15

(2017/08/29 追記)
コメントにいただいた手法の通り、現在はexeファイルのダイレクト指定で起動できます。
またWindows側でもパスを通せばsakura.exeのように打つことで起動できます。
この原因はWindows10のCreators Updateが充てられていなかったためでした。
コメントありがとうございました。
技術面での記録としてこの記事は残しておきます。

これは経験を記録した備忘録です。手順通りやると#3あたりから痛い目にあいます。
そのあたりを了承して読んでください。

1 何故に遠回りするのか?

Bash on Windows(BoW)を使っていると、やっぱりまだどこかしら不便さが残ります。
UNIXシステムでは標準のX WindowシステムもWindows経由するだけで一気に見栄えが変わります。
だったら最初からLinuxなりなんなり使えばいいと思われるでしょうが、今から改めて入れるのが面倒なのではなくWindows専用アプリに組み込むためには準備してしまった方が早いのです。
それにcmd.exeに環境整えるよりも早いと思うし。

2 Bash on Windowsの導入

機能実装から時間がかなり経過しているので、ご存知の方も多いと思います。
以下の記事を参考にしながらBoWを導入しました。


(以下は個人的な問題かもしれません)
記事中の「リポジトリの変更」で、日本サーバー設定する際に jaist.ac.jp がすごく重いことがある。
Byte/sの単位の通信速度は致命的ですので、異常に遅いときは(双方)回線の太さをチェックするといいでしょう。
Ubuntu 日本国内のダウンロードサイト
僕個人は 山形大学 の回線がいいのではないかと思ってます。


ただBoWはデフォルトではCドライブの奥の奥にシステムクラスの隠しフォルダとして存在しています。

C:\Users\[Username]\AppData\Local\lxss\rootfs

てことでこんなところにホームディレクトリ設定されたら、Windowsシステムと相互利用する際に不便極まりない。
よって下の記事を参考にホームディレクトリを変更する。

さてそうなると/etc/passwdを編集しなくてはなりません。
何も考えずにsudo -S emacs /etc/passwdとか適当なエディタを起動してCUI環境で見ましょう。
え、きれいに見えた?それは幸せなことです。アプデをきっちり充てていたのでしょう。
当初は表示が見切れたりして厳しい時代があったのです。
あとX Window SystemのWindows用を入れた方はGUIでも見れるでしょう。見やすいと言えるかは人それぞれです。
不幸にもかつての僕みたいに表示が崩れるなど残念な経験をするとこう感じることでしょう。
「せっかくWindowsで動かしてるんだから、編集もWindowsで慣れたエディタ使いたいなあ」
なおLinuxで普段使うエディタは gedit だったりします。
ここは我慢して、viなりemacsなりで

username:x:1000:1000:"",,,:/home/username:/bin/bash

の行を

username:x:1000:1000:"",,,:/mnt/d/home:/bin/bash

とかに変更しましょう。ここではDドライブ直下のhomeフォルダにホームディレクトリを指定することにしましょう。
Bashに戻りpwdと叩いて/mnt/d/home/と出力されればめでたしめでたし。
あとは好きなようにライブラリなり、コマンドなりを追加しましょう。

3 Bash on Windows経由でWindowsプログラムを動かす

まあ、あらかたの方はこんなこと考えないと思います。
でもニッチな世界で無理を通そうとする僕には、こういう技が必要なんです!検索しても引っかからないような世界を開拓するのが役目なんです。
そのきっかけは上でも書きましたが、当時のエディタが(当然ですが見栄えや機能的に)残念だったのでWindows側で処理しようと思い立ったからです。
サンプルとしてBashからサクラエディタをWindowsで起動することを目標にしましょう。これができれば文字コードも改行コードも気にせずに作業できますね!

目標のコマンドイメージ
sakura hogehoge.txt &

残念ながら、デフォルトではBash経由でWindowsプログラムを動かすことはできません。
そこでBash(Ubuntu)とWindows間を疑似的に通信することでやりとりを行うという荒業を行います。
今回wstartを用います。

この二つの記事を参考に頑張りましょう。

3.1 node.jsをインストール

  • Windows版

単純にNode.jsから安定版(4.5.0)1をダウンロードしてインストール。

  • Linux版

Bash on Ubuntu on Windows上のapt-getでインストールされるnodejsとnpmはバージョン条件を満たさないようなので、Ubuntuに最新のNode.jsを難なくインストールするを参考にしてn packageを使ってインストール。

そのまま従って入れましょう。
インストールはREADMEを参考にしましょう。日本語化もされているので困るところは少ないでしょう。
唯一引っかかる可能性があるのは、<WINUSERNAME>の箇所でしょう。Windowsユーザー名の指定とありますが、もしうまくいかなかった際には名前全体を大文字で打ち込んでみましょう。案外すんなりいくことが多いです。

3.2 動作確認

cmd.exeを起動して、wstartと打ち込みましょう。

2017-05-13T13:19:07.282Z [1] Starting server 1.0.1
2017-05-13T13:19:07.294Z [1] Listening on port 62000

こんな感じの出力がなされればうまく機能しているでしょう。Bash側でwstart .と打ち込んでエクスプローラーが起動すればOK。

3.3 応用

ここまでうまくいったら後はwstart部分に引数でフルパス指定すればいいじゃん?
そう、これでうまくいくならこの記事は長くならなかったはず。てことで、サクラエディタをフルパスで起動してみましょうか。

3.3.1 フルパス指定

wstart /mnt/c/Program\ Files\ \(x86\)/sakura/sakura.exe

おそらく素直に起動せず、新しいDOS窓が開くだけだと思います。これはDOS窓における以下のコマンドと等価のためです。
cmd /c start "C:\Program Files (x86)\sakura\sakura.exe"

この通りにDOS窓で実行すると先ほどと同じ結果が得られます。
別窓を開いても困るだけなので、出てきた窓を大人しく閉じて次の作戦を考える。

3.3.2 実行ファイル名で指定

フルパスがうまくいかないのなら、実行ファイル名だけで動けば問題なし。
と、慌ててwstart sakura.exe hogehoge.txt &なんて打ち込むような人はいないと思うが、これだと「sakuraなど知らん」とWindowsに叱られて終わります。
「そうだよ、パスを通さなくちゃ」
と次の発想にたどり着くので、パスを通す。
WindowsのPATHの通し方はいろんなところに書かれています。頑張って通しました!
意気揚々と
wstart sakura.exe hogehoge.txt &
打ち込んで戻ってくる返事は、
'sakura.exe' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

お約束ながら、残念な結果になりますね。パスが通っているだけではうまくいかないだけでなく、フルでプログラム名を打つのにも困ります。
追撃すると、この作業はなくても問題ないです。次行きましょう。

3.3.3 レジストリいじるか

(警告)
ここから先はレジストリ領域に触れることになります。パラメータを追加するだけですが、操作ミスに注意してください。また内容を理解して慎重に操作して下さい。不具合でても責任は負えませんのであらかじめ断っておきます。

wstartコマンドは引数に別コマンドを受け取る。なので、wstart cmdとか打つと新しいDOS窓が開くというわけだ。
なら、この仕組みを応用してしまえばいいではないか?と考えるのは自然な発想だろう。
ということで、目標コマンドは次のように修正される。
wstart sakura hogehoge.txt &
するとこんな記事に出会った。

さて、記事中の4つの方法のうち1,3,4はどうも失敗したようなので、残りの2にかけることにする。
そうしたら、こんなことが書かれているのに気づく。

startコマンドは,HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths というレジストリキーの値を参照する。
もしもこのレジストリの中にアプリケーションのファイルパスが含まれていれば,

  • start ファイル名
  • 「ファイル名を指定して実行」

のどちらからも実行する事ができるのだ。

とか言われたら、やるしかない。regeditからレジストリエディタを開いて、HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\を探す。
そこにsakura.exeフォルダを追加し、「値のデータ」にサクラエディタへのフルパスを指定する。

保存後には念のため、(なくても構わないと思うが)再起動しておくとよい。
戻ってきたら、Win側のnode.jsサーバーが動いている状態で、wstart sakura hogehoge.txt &と打ち込んでみよう。
見事にバックグラウンドでサクラエディタが起動する。
最後が少し面倒だが、こうすれば問題なくエディタをWindows仕様で使うことができる。
後は好きなだけプログラムを書いて、チェックして、リリースをしていこう。

最後に、文字コードはUTF-8、改行コードはLFにするのをお忘れなく。

4 まとめ

  • Bash on Windowsを入れる
  • node.jsをインストール(Win,Bashともに)
  • wstartもインストール(Win,Bashともに)
  • どうしてもWindows側のプログラムを起動したいなら、レジストリに追記する。

5 トラブル時は?(2017-08-20追記)

  • 以下のようなエラーが出るとき

throw er; // Unhandled 'error' event

Windows側でnode.jsが起動していないときにこのエラーが返ります。
cmd.exe でwstartが起動しているか確認しましょう。
DOS窓起動しっぱなしは気になりますが、我慢するしかないようです。

  • 最近、node.jsに関して最新バージョン8の場合にうまく動作しないことがありました。記事執筆時のバージョン7.10.0では機能することを確認していますので、問題が起きたときは最新版を使わないのも一つの手でしょう。

各OSタイプでのバージョン管理は、それぞれ以下のページを参照してください。
バージョン管理ソフトが異なったりする関係で少し面倒ですが、node.jsのバージョンだけ合わせればいいでしょう。

Windowsの場合
Linuxの場合

  • それでも直らない?

wstartを再インストールしましょう。基本ですね。

6 コメントへの返答(2017-08-29追記)

sakura.exeで起動しません? notepad.exeとかは?

これは記事中にも書きましたが、ダイレクトでのexe指定は起動しません。Windowsに叱られるのがオチです。
またnotepad.exeは、Windowsの改行・文字コードが(CR+LF)+SJIS固定のはずです。他に変更できません。
よってUNIX系システムでは何の役にも立つことはありません。
高機能な他のテキストエディタを利用しましょう。



  1. 最新版は 7.10.0 のようです(2017.5.16現在) 

4
7
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7