目次
WSL(Windows Subsystem for Linux)環境構築
Windows10のWSL(Windows Subsystem for Linux)を使えるようにする方法と、個人的にPythonの開発・テスト時に使うオススメのコマンド例を2つほど紹介します。
Windows Subsystem for Linux(以後 WSL)は、Windows10のコマンドプロンプトからLinuxのコマンドを使えるようになる仕組みです。
僕はLinux使いではありません。
それでも、サーバーを立てたりする時とかに使わなくてはいけないときがあるので、基本的なLinuxのパーミッションやコマンドについての知識を忘れないよう、練習する環境は必要なのです。
WSLを有効にする
WSLはWindows10のデフォルトで有効になってません。
有効にするには、コントロールパネルの「プログラムと機能」の「Windowsの機能の有効かまたは無効化」で以下のダイアログボックスを表示します。
上記のように、「Windows Subsystem for Linux」にチェックを付けてOKして、そのまま再起動します。
Linuxディストリビューションのインストール
再起動できたら「コマンドプロンプト」を立ち上げてbashと打ち込んで実行します。
そしたら、こんなエラーメッセージが表示されるはずです。
そこに表示されているURLにアクセスします。
マイクロソフトストアを開くかと聞いてくるのでOKすると以下の画面になります。
(2019/07/14時点です)
自分は「ubuntu」を選びました。
理由は使ったことのある回数が一番多いから・・だけです。
入手ボタンを押すとダウンロードされます。
ここで起動すると、インストールが開始します。
途中でユーザ名、パスワードの設定を聞いてくるので、入力します。
Windowsのユーザ名と一致している必要はありません。
ユーザ名とパスワードを入力してOKになったら、一旦終了です。
この時設定したユーザ名とパスワードは忘れないようにしないといけません。
通常使う分にはいらないのですが、sudoコマンドなど、パスワードを聞いてくるケースがありますから。
さて。
もう一度、コマンドプロンプトを立ち上げて、bashと入力します。
以下のようにLinuxのbashプロンプトがでたら、OKです。
ちなみに、bashプロンプトで「exit」と打ち込みEnterを押すと、元のコマンドプロンプトに戻ります。
WSLを使ってみる
bashプロンプト上では当然、Linuxのコマンドを実行できます。
さらに、bashプロンプトではWindowsのコマンドも使えます。
なので。
うまく使えば、WindowsコマンドとLinuxコマンドを連結したワンライナーまで書けてしまうという柔軟さがあります。
といっても。
bash上でWindowsコマンドを使うには、ちょっとだけ注意すべき点があります。
- オプションは「/」ではなく、「-」で与える必要がある
- パスの区切り文字が「\」ではなく「/」でないといけない
- Windowsのコマンドは、.exeなど拡張子を省略しない方が良い
てな感じです。
WindowsとLinuxのコマンドを混在して使う例
たとえば、Dirコマンドを使ってみます。
普通のコマンドプロンプトで実行するとこんな感じ。
オプションは「/b」のように「/」ですし、パス区切りも「\」です。
これをbashプロンプトで実行します。
dir -b ./00_sk/*.py のように、オプションを「-」にして、パス区切りを「/」にしたら、ちゃんと実行できました。
これができれば、Windowsコマンドと、Linuxコマンドを混在させたワンライナーが使えて超便利です。
例として「autopep8」を使って、フォルダにあるpythonファイルの一括整形をやってみます。
autopep8はPythonの標準コーディングスタイルPEP8に準拠する形に、ソースコードを自動フォーマットしてくれる超便利なウールです。
でも、ワイルドカードが使えないので、フォルダ内のPythonソースを一括でフォーマットしたいときなどは、ちょっと工夫が必要になります。
それをWSLの機能を使うとワンライナーで、スマートに書けます。
かつ、これは、Windowsの「dir」の出力をパイプでつなぎ、Linuxの「xargs」にWindowsにインストールした「autopep8.exe」を渡して、一括実行させるというハイブリッドの例でもあります。
dir -b ./00_sk/*.py | xargs autopep8.exe --in-place --aggressive --aggressive
これで、カレントフォルダ「.」にある「00_sk」フォルダの下の「拡張子py」のファイルが、順次「autopep8.exe --in-place --aggressive --aggressive <fname>」の「<fname>」の部分にはまって、実行されていきます。
開発・テストに便利なLinuxコマンドの例
今度は、Linuxのコマンド単体で便利なのに、Windowsでは使いづらかったコマンドの例をやってみます。
tailコマンドです。
tailは、ファイルの最後から指定行分表示するという単機能コマンドですが、これが、ログの監視とかでは非常に役に立ちます。
例えば、監視対象のログファイルがカレントフォルダのlogsの下にある「testlog.log」だったとしたら、以下のようなコマンドをうちます。
tail -f ./logs/testlog.log
tail -f にすると、ファイルの最後尾から10行ぶん表示して、待機状態にはいります。
このままファイルの変更を監視して、書き込みがあると表示を更新してくれるので、ログの監視にピッタリなのです。
プログラムで適切なログを出力するようにしていれば、時間のかかる処理でも、状況がわからずに待っているより、ログが流れるのを見ている方が精神的には良いです。
このログファイルに書き込む処理を流してみます。
import logging # ログをファイルにはきだす logging.basicConfig(filename='logs/testlog.log', level=logging.DEBUG) # ログを出力する for i in range(100): logging.info('warning %s %s', 'testlog', str(i))
これを流すと、コマンドプロンプト上をログがさーーっと流れて行って、以下のような表示でまた待機にはいります。
いい感じです。
監視を打ち切る時は、「Ctrl+C」を押します。
まとめ
もちろん、Windows上でLinuxのシェルを動かしているわけですから、若干制約はあります。
特に大きいのは、Windows側からWSL上のファイルにアクセスができないってことですかね。
でも、WindowsとWSL(Linux)の相互運用性を高める改善はどんどん行われているようですし、なにより、その程度の制約など気にならないくらいに、Windowsのシェル環境が強力かつ便利になるのは間違いないです。
Linuxの勉強目的なら、仮想環境でLinuxサーバーを立ち上げた方が良いと思うのですが、LinuxとWindowsの便利なところをハイブリッド化して、快適なシェル環境を構築できる可能性ができたというだけで、WSLは素晴らしい。
個人的にはそう思っています。
ではでは。