こんにちは、サイオステクノロジー技術部 武井(Twitter:@noriyukitakei)です。今回はWindows Subsystem for Linuxを用いて、Webアプリケーション開発環境を劇的に改善してみたいと思います。3回シリーズでお届けする予定で、第2回目は導入編となります。
※ 本記事は技術評論社「Software Design」2019年11月号(詳細はこちら)に私が寄稿した「Microsoft Azureで最新Webアプリ開発」の記事をベースとしております(本ブログ掲載は技術評論社様ご了承済みです)。
※ WSLでなくDockerとVisual Studio Codeを合わせた事例もありますので、是非ご参考下さい!!
- Visual Studio Code + Docker + Remote DevelopmentでTomcat上のWebアプリを超簡単にデバッグ
- Visual Studio CodeのRemote DevelopmentとDockerで快適な開発環境をゲット
WSL1とWSL2の導入方法
本章では、WSL1とWSL2の導入方法をご紹介致します。
WSL2を直接インストールすることは出来ず、まず従来通りWSL1をインストールしてから、PowerShellでWSL2に変換するという作業が必要になります。
また、前提条件として、Windows Insider Preview Build 18917以降が動作している環境であることが必須です。その環境の導入方法については、割愛させて頂きます(※1)。
※1 Windows Insiderに登録して更新プログラムを受け取っていれば使用可能ですが、Windows Insider Previewは開発中のバージョンにより、まだバグが残っている可能性もあるため、動作については自己責任の範囲でお願い致します
WSL1のインストール
まずWSL1の導入方法をご説明致します。
スタートボタンを右クリックして、「アプリと機能(F)」をクリックします。
「プログラムと機能」をクリックします。
「Windowsの機能の有効化または無効化」をクリックし、「Windows Subsystem for Linux」をチェックして「OK」をクリックします。OSを再起動すると、WSLのインストールは完了です。
Microsoft Storeを起動し、検索用のボックスに「wsl」と入力すると、その候補に」「Run Linux on Windows」が表示されますので、それをクリックします。
「Ubuntu」をクリックし、次画面にて「Get」をクリックします。
これでWSLのインストールは終わりです。では、WSLを起動してみましょう。スタートボタンをクリックすると、以下のように「Ubuntu」のアイコンが表示されますので、クリックします。
初回だけ起動に数分かかりますが、その後にログインするためのユーザー名とパスワードを入力すれば起動は完了です。
Installing, this may take a few minutes... Please create a default UNIX user account. The username does not need to match your Windows username. For more information visit: https://aka.ms/wslusers Enter new UNIX username: ntakei Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Installation successful! To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details. ntakei@NORIYUKITAK6BAC:~$
いかがでしたでしょうか?こんなにも簡単にLinux on Windowsの環境が構築出来てしまいました。素晴らしいですね、WSL!!
WSL2のインストール
次に、WSL2のインストール方法をご説明致します。WSL2のインストールは、GUIでの方法は提供されておらず、PowerShellで実施します。先程作成したWSL1のOSをWSL2の形式に変換するというアプローチを取ります。
まず、PowerShellを管理者権限で起動し、以下のコマンドを実行します。
PS> Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform この操作を完了するために、今すぐコンピューターを再起動しますか? [Y] Yes [N] No [?] ヘルプ (既定値は "Y"):
Yを入力してOSを再起動します。OS起動後に再びPowerShellを起動します。今回は管理者権限でなくても問題ありません。以下のコマンドを実行して、「変換が完了しました。」と表示されれば、WSL2への変換は成功です。
PS C:\Users\ntakei> wsl --set-version Ubuntu 2 変換中です。この処理には数分かかることがあります... WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください 変換が完了しました。
ちなみに筆者の環境では、最初は以下のエラーが出てWSL2への変換が失敗しました。筆者の環境は、Windows on Parallels on Macな環境で検証したので、ParallelsをPro Editionにアップグレードして、「ネストされた仮想化」を有効にする必要がありました。他の環境でも同様のエラーが出た場合には、ご参考頂ければ思います。
PS C:\Users\ntakei> wsl --set-version Ubuntu 2 変換中です。この処理には数分かかることがあります... WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください Windows の仮想マシン プラットフォーム機能を有効にして、BIOS で仮想化が有効になっていることを確認してください。 詳細については、https://aka.ms/wsl2-install を参照してください
WSLにAzureCLIを導入
本章では、WSLにAzure CLIを導入する方法をご紹介します。これにより、Azureの管理が劇的に改善します。
Azure CLIとは、Azureの各種リソースをコマンドラインで管理できるインターフェースで、例えば、Virtual Machineを作成したり、一覧を表示するといったことが可能です。
Azure CLIは、もちろんWindowsでも使うことができます。しかし、Azure CLIで出力されるようなテキストの処理は、断然、Bashを始めとしたLinux上のシェルの方が優れています。メディア系ファイルの操作に優れたWindowsで音楽や動画を楽しみながら、Linux上でAzure CLIを使って、その結果を華麗にsedやawkしたいと思いませんか?
そんな夢を叶えてくれるのが、WSLです。WSL上ではLinuxを稼働することができるので、もちろんAzure CLIをインストールすることが可能です。
では、早速実践してみましょう。Azure CLIのインストールは以下のコマンドをWSLで実行してウィザードに従うだけです。
※本手順はWSLのディストリビューションがUbuntuであることを前提としています
$ curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
Azure CLIを使うためには、まずAzureのテナントにログインする必要があります。以下のコマンドを実行して下さい。
$ az login To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code XXXXXXXXX to authenticate.
先のコマンドの実行結果に表示されているように「https://microsoft.com/devicelogin」のURLにブラウザからアクセスして、表示されているコードを入力します。
Azureにログインするためのログインフォームが表示されますので、Azure CLIで操作したいサブスクリプションが紐付いているアカウントでログインします。
ログインが完了したら、Virtual Machineの一覧を出力してみましょう。下記の例は、Virtual Machineの各項目タブ区切りで出力している例です(少々わかりにくいですが)。
$ az vm list --output tsv None None None /subscriptions/XXXX/resourceGroups/XXXX/providers/Microsoft.Compute/virtualMachines/XXXX None None None japaneast XXXX None Succeeded None XXXX Microsoft.Compute/virtualMachines XXXX None
さて、ここからがWSL上でAzure CLIを動かす真骨頂です。Virtual Machineのリージョンが東日本のものだけを出力したいとします。リージョンは8列目に出力されている「japaneast」です。PowerShellでは難しいですが、Linuxではawkを使った以下のコマンドで一発です。
$ az vm list --output tsv | awk '$8 == "japaneast" { print }'
まとめ
いかがでしたしょうか?WSL1とWSL2のインストール方法をご説明いたしました。これであなたのWindowsの中にLinuxが生まれます。次は、その3:実践編として、WSL2でWebアプリケーションの開発環境を劇的に改善してみたいと思います。
※ WSLでなくDockerとVisual Studio Codeを合わせた事例もありますので、是非ご参考下さい!!