Bash
ATOM
Windows10
BashOnUbuntuOnWindows

Bash on Windowsで真面目に開発環境を整備する

More than 1 year has passed since last update.

序章

皆さん、アプリケーション開発マシンのOSは何をお使いでしょうか?
想像ですが、Windowsアプリ開発でない限り恐らくMacが最も優勢であろうと思います。

私は一時期頑なにWindowsで頑張っていました。
しかし今作っているサービスで使うライブラリや周辺ツールがどうしてもWindowsでは正しく動かず、かといってMacを調達するのも色々辛く、ググりまくるのに疲れたこともあり遂にギブアップ。

Windowsの入ったSSDを窓から投げ捨て、今は平穏にCentOS+KDEで開発をしています。
なぜUbuntuじゃないのかといえば単に慣れていたのと、Desktop用途といえばUbuntuみたいな流れに反抗してみたかったという単なる自己満足です。
更に蛇足としては、SUSEとかGentooみたいなOSも触ってみたくはありましたがあまり趣味に走りすぎるとそれはそれでトラブルの元であり、仕事に支障を来たしては元も子もないためある程度は妥協したのです。
Officeなんかは月に1度、主に月末の事務手続き系くらいにしか使わないのでその時だけ古いWindowsマシンを引っ張り出してきてチャチャっとやっつけることにしました。

閑話休題。

さて昨年からBash on WindowsがBetaテストを開始していたのは皆様ご存知かと思いますが、つい先日この秋から正式版になることが発表されました。
これによりWindowsでもLinuxネイティブのバイナリーをBash上で動かすことが可能になり、私が七転八倒したWindows機での開発がいよいよ現実的なものになりました。

家が建つような大金を積んでZenBook3(512GP)を購入したこともあり、Windowsで真面目に開発環境を構築した際に困ったポイントとその解決法をナレッジとしてここに共有させて頂くことで、迷える窓を救う一助になれればと思います。

テキストエディターをどうやって動かすか

「え、そんなの単純にWindowsでエディターを起動してAppData\lxss配下をちょいちょいのパッパッといじればいいんじゃないの?」と思った貴方、ヤバいです。
まず大事な基礎知識として、Bash on Windows内部のファイルをWindowsから編集するとファイルが あぼーん してしまいます。

詳細はこちらを参照のこと

この問題があるため、迂闊にBash側ファイルを触るわけにはいかないのです。
そしてBash on WindowsにはGUI環境がありません。
なのでAtom等を起動することができないため、何とかしてこれを回避する必要があります。
(GUIが要らないテキストエディターをお使いの方は特に問題ありません)

やや強引にでも動かすには

エディターがちゃんと動くのならばX11 Server系のアプリで何とかするのが手っ取り早いと思います。
MobaXtermなんかが色々便利で手っ取り早いのでおススメです。

MobaXtermの紹介はこちらの記事を参照

でも全部が全部動くというわけでもないようで、実際のところ私の環境でAtomはなぜかKernelPanicを起こしてしまい起動できませんでした。
xeyesあたりはちゃんと動くからイケると思ったんだけどなぁ……。

ファイル破壊問題の回避

Bash on WindowsではWindows側のドライブを/mnt/cといった形でマウントしています。
そしてこの中身はちゃんと配慮されているようで、どちらから触っても壊れることはありません。
なのでWindowsアプリケーションから触りたいファイルだけここに配置します。

/mnt配下に移動するのは面倒、違和感を何とかしたい

安全策で行くのならばそれ用のディレクトリを作った上で/home/username/mnt/c/Users/username/BoWという具合にエイリアスを張るのがよいでしょう。
(BoWディレクトリは他の場所や名前でも大丈夫)

私はちょっと思い切ってWindows側で/etc/passwdのホームディレクトリを/mnt/c/Users/username/BoW配下に変更してしまいました。
こんな感じです。

username:x:1000:1000:"",,,:/mnt/c/Users/username/BoW:/bin/bash

パーミッションが全部777になっている

仕様ですので諦めるしかないです。
Gitを使う場合パーミッションが全部変わって惨事が起こる可能性があるため、パーミッション変更を無視するように設定しておきましょう。

$ git config --global core.filemode false

.sshの鍵が読めない

パーミッションを400とかにしておかないとsshコマンドで怒られるアレですが、ホームを/mnt/c配下にした場合は777固定になってしまうためそのままでは直しようがありません。
/mnt/c配下以外のどこか適当な場所に置き直すことで妥協しました。

Atomで目的のディレクトリを開くのがめんどい

Bash側からWindowsのファイルを実行することができるので以下のエイリアスを張ります。
ちゃんと引数も受け取ってくれるのでBash on Windows側のディレクトリを指定して開けます(勿論/mnt/c配下のみ)。

$ alias atom='cmd.exe /c "C:\Users\username\AppData\Local\atom\bin\atom.cmd"'

ちなみに/mnt/c以外の場所(例えば/etc/とか)で起動しようとすると正しく開けずWindows側のデスクトップに飛ばされます。

$ cd /etc
$ atom .
現在の作業ディレクトリを変換できません。C:\Users\username\Desktop を使用します

まとめ

  • WindowsからBash on Windowsのファイルを直接操作するのは厳禁
  • Windowsから編集したいファイルは/mnt/c配下に配置する
    • アクセスがめんどい場合はエイリアスやホームディレクトリ変更で何とかする
  • GUIでしか動かないLinuxアプリはX Serverでなんとかできるかも