Shellの範囲を理論と応用で拡張する
- ★ 期待通りに使用できますか? Bash on Ubuntu on Windows。
2016年8月から、[Bash on Ubuntu on Windows](以下、BoWと省略)はWindows 10に組み込まれました。そのため、Windows上でUbuntuとBashの両方を使用できるようになりました。
「もし開発ができるなら面白いだろう」と考えている人も多いのではないでしょうか?
私たちはBoWを使用して、実際の開発環境を模倣し、期待に応えられるかを検証しました。
BoWを使用してアプリケーションを開発する
Windows 10 Anniversary Updateから導入された[BoW]は、2017年4月のCreators Updateによって強化され、開発ツールも利用可能になりました。この投稿では、BoWを使用して開発することで期待通りに動作するかを検証します。
開発環境について
私たちは次の環境で開発と検証を行いました。
Windows 10 Pro 64bit, version 1703, build 15063.138 (Creators Update)
16GB RAM
Intel Core i7-5500U CPU @ 2.40GHz
BoWはCreators Updateから以下の環境を使用しています[指示1]。
▼指示1 BoWの情報(この投稿で使用されている)
$ uname -a
Linux DESKTOP-T3CMM04 4.4.0-43-Microsoft #1-Microsoft ⇙
Wed Dec 31 14:42:53 PST 2014 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.1 LTS"
(*1) ターミナルの表示について、特に記録がない場合はBoWのターミナルが表示されます。
BoWの導入方法についてはこの記事では省略しています。インターネット上の記事を参考にしてください(*2)。
BoWが導入された後、Start Menuから起動できます。[Bash on Ubuntu on Windows]を選択するか、キーボードで…+…を押して、[実行したいファイル名]を入力します。
(*2) 参考リンク
検証内容
この環境を使用して、次のようなシンプルなサンプルアプリケーションを開発して、その感想を確認します。
(*3) サンプルコードはGitHubで公開されています。
●JavaとPlay Frameworkを使用してWeb開発
●Vue.jsとnpmを使用してフロントエンド開発
●Pythonを使ってシンプルなTwitterクライアントを開発
さらに、上記以外にもMastodon用のCOBOL環境を作成したりもしました。
このような内容はブログで紹介しているので、興味があればご覧ください(*4)。
(*4) リンク1 リンク2
BoWとWindows環境の接続
BoWを使用する場合、基本的にはWindows上のエディタやIDEを使用することが一般的です。WindowsからBoWの共有フォルダにアクセスできないため、Windows上で(C:¥work)というフォルダを作成し、そのフォルダをBoWとWindows両方で参照できるようにします。このままBoWを使用すると少し不便なので、$HOMEにシンボリックリンクを作成して使用するのが良いでしょう[指示2]。
▼指示2 Windowsのフォルダにシンボリックリンクを作成する方法
$ ln -s /mnt/c/work $HOME/work
$ ln -l work
lrwxrwxrwx 1 kunst kunst 11 April 29 17:58 work -> /mnt/c/work
BoW環境にOpen JDK 8をインストールする
$ sudo apt-get install openjdk-8-jdk
sbtは公式サイトの[Linuxへのインストール手順]に従ってインストールします(*7)。
▼指示3 sbtをインストールする方法
$ echo "deb https://dl.bintray.com/sbt/debian /" | ⇙
sudo tee -a /etc/apt/sources.list.d/sbt.list
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 ⇙
--recv 2EE0E64E40A89B84B2DF73499E82A75642AC823
$ sudo apt-get update
$ sudo apt-get install sbt
(*7) 参考リンク
開発準備(BoW環境)
BoW環境でPlay Applicationのテンプレートを作成します。テンプレートを作成するには、sbt newコマンドを使用します(*8)。
(*8) 参考リンク
$ sbt new playframework/play-java-seed.g8
ここではいくつかの質問がありますが、[指示4]に従ってname以外は空欄のままでEnterキーを押せばOKです。
▼指示4 テンプレート作成時の質問
このテンプレートはPlay Javaプロジェクトを生成します
name [play-java-seed]: play-java8-sample ←プロジェクト名を入力
organization [com.example]: ←空欄のままでEnter
scala_version [2.11.11]: ←空欄のままでEnter
play_version [2.5.14]: ←空欄のままでEnter
テンプレートは./play-java8-sampleに適用されました。
開発準備(Windows環境)
BoWを使用してプロジェクトのテンプレートを作成したので、Windowsから作成したプロジェクト(C:¥work¥play-java8-sample)を開きます。
IDEにはIntelliJ IDEAを使用します(Windows環境でJavaアプリケーションをコンパイルする場合、JDKも必要です)。
開発
BoWでdevサーバーを起動し、WindowsのIDEでソースコードを修正しながら開発を進めます。
devサーバーは次のコマンドで起動します。
$npm run dev
その後、ブラウザで[localhost:8080]にアクセスします。ここではホットデプロイとホットリロードが処理されているため、ソースコードが変更されると画面が自動的にリロードされます。(図11)
このような条件で開発が始まります。
サンプルコードはほぼNote 10で紹介されたコードと同じなので、この部分は省略します。
BoWを使用してnpmを使えば、Windowsにnpmをインストールしなくても開発が可能です。
作者はBoWでnpmを実行し、上書きして動作させることができました。
便利機能: openコマンド
2017年4月のCreators Updateにより、BoWから直接Windowsでバイナリを実行できるようになりました。
これにより、現行のディレクトリを開いて、Macのopenコマンドのようにコマンドを実行できるようになり、非常に便利です。
List 3に示されたスクリプトを作成し、$HOME/binにPATHを設定します。これにより、openやopen word\js-sampleなどのディレクトリを開くことができます。
ただし、BoWの仕組みではWindowsの外部フォルダ(例えば、/mnt/c/内のフォルダ)は開けません。
List 3 bin/open
#! /bin/bash
"if [ $# -eq 0 ]; then
DIR=.
else
DIR=""$*""
fi
explorer.exe $DIR"
便利機能 [Pathの変更コマンド]
BoWのターミナルを使用し、Windows上でPathを変更したい場合や、WindowsのPathをBoWで使用したい場合に便利なコマンドを作成します。
以下のように、List 1、2のようなコマンドを使うと便利です。
例えば、下記のようにします。
$ echo "/mnt/c/work/python-sample" | u2w
C:\work\python-sample
$ echo "C:\work\python-sample|e" | w2u
/mnt/c/work/python-sample
▼ List 1 Windows PathをUbuntu Pathに変更するコマンド(bin/w2u)
#!/bin/bash
sed 's_ \\_/_g' | sed -r 's_^(.)(:)_/mnt/\L\1_g'
▼ List 2 Ubuntu PathをWindows Pathに変更するコマンド
#!/bin/bash
sed -r 's_^(/mnt/)(.)_\U\2:_g' | 's_/_\\_g'
PythonでTwitterクライアントを簡単に開発
次に、Pythonを使用してTwitterクライアントを開発します。
これは開発環境を検証するための簡単なCLIクライアントで、タイムラインを表示します。
開発準備(BoW環境)
BoWの標準的なパッケージ管理ツールがインストールされていないので、インストールします。
$sudo apt install python3-pip
pipを使用して必要なライブラリをインストールします。
$pip3 install requests_oauthlib
開発準備(Windows環境)
Pythonの開発検証のためにサンプルプロジェクトを使用せずに進めます。
Windows上で[C://work/python-sample]というディレクトリを作成し、Atomなどのエディタを使います。
開発
また、今回もdevサーバーは使用せず、Windowsのエディタでソースコードを修正し、BoWから実行します。
完成したコードはGitHubのNote 13に記載されています。
次に、コマンドラインでツールを実行します。
これにより、タイムラインが表示されます(図12)。
BoWのPythonからTwitter APIを呼び出すことで、データを抽出することができます。
まとめ
Java、JavaScript、Pythonなどの多くの言語で、すべての環境が準備されていれば、問題なく開発を進めることができます(多少の準備が必要な場合もありますが)。
個人的な観点では、Windows上でLinux仮想マシンを作成し、開発を進めるような感覚です。
Windowsで開発する場合、多くの開発ツールをインストールしなければならないため、環境が混乱する可能性があります。
BoWを開発環境として使用すると、ある程度環境を分けることができ、自動化されたシェルスクリプトなどの利点があります。
さらに、仮想環境だけでなく、純粋なネイティブ環境で開発を進めることができます。将来的には、これが開発の選択肢となるでしょう。
BoW環境の再構築
BoW環境が期待通りに動作しない場合や、環境を最初から再構築する場合の手順を紹介します。
管理者権限でコマンドプロンプトを開き、次の2つのコマンドを実行します。
>lxrun /uninstall
>lxrun /install
再構築しても、/rootや/homeフォルダは削除されないため、設定ファイル(ユーザーや.bashrcなど)を再利用できます。
Map 12 完成後のTwitterクライアント
$ ./sample.py
おやすみなさい
これでもう無線のレンジを独自これでもう無線のレンジを独自これでもう無線のレンジを独自
これでもう無線のレンジを独自これでもう無線のレンジを独自これでもう無線のレンジを独自
これでもう無線のレンジを独自これでもう無線のレンジを独自これでもう無線のレンジを独自
これでもう無線のレンジを独自これでもう無線のレンジを独自これでもう無線のレンジを独自
BoWでPythonをVisual Studio Codeに統合する方法
Pythonの開発をテストするために、最初からVisual Studio Codeを使用する予定でした。しかし、Visual Studio Code内でBoWのPythonを直接統合するのは難しく、この投稿ではその方法は省略しています(もちろん、Windows環境でインストールすれば問題なく使えます)。
しかし、テスト段階では、BoW内でVisual Studio Codeを使ってPythonを実行することができました。
この方法ではPylint(Pythonコードチェッカー)は使用できません。
まず、Python用のプラグインをインストールします(図13)。インストール後、Visual Studio Codeを再起動すると、*.pyファイルが色付けされます。
次に、Ctrl + ,を押してsettings.jsonを開き、(List 4のように)設定します。その後、”C:\work\python.bat“というファイルをsettings.jsonで編集し、List 5の内容を追加します。
設定が完了したら、Visual Studio Codeのエディタで右クリックし、「Run Python File in Terminal」を選択すれば、IDE上でファイルが実行されます(図14)。
図13: Pythonプラグインのインストール
List 4: settings.jsonの修正
// デフォルト設定を上書きするため、このファイル内に設定を記載します
{
""python.pythonPath"": ""C:/work/python.bat""
}
List 5: python.bat
bash.exe -c "echo %* | sed 's_\\\\_/_g' | sed -r 's_^(.)(:)_/mnt/\\L\\1_g' | xargs python3"
図14: Visual Studio CodeでBoWのPythonを実行