More Related Content
Similar to 「WindowsデスクトップでWeb開発 改訂版」サンプル (20)
More from Hiroyuki Ohnaka (20)
「WindowsデスクトップでWeb開発 改訂版」サンプル
- 18. Enter new UNIX username: azusa
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.
⼆回⽬の起動以降はスタートメニューから「Ubuntu」を選択するか、コマンドプロンプトからubuntu コ
マンドを実⾏することでシェルを起動できます。
Microsoftが製品として扱う「Debian」Microsoftが製品として扱う「Debian」
MicrosoftストアではWSLのLinuxディストリビューションとして「Debian」*17が扱われていま
す。DebianはGPLをはじめとするフリーソフトウェアの精神を尊重することをうたっているLinux
ディストリビューションです。ハロウィーン⽂章 *18に代表されるように、かつてフリーソフトウェア
のコミュニティーと対⽴する姿勢を明らかにしていたMicrosoftが、フリーソフトウェアの精神を具
現しようとするプロジェクトであるDebianを⾃社ストアのラインアップに⼊れていることには、著者
には感慨深いものがあります。
WSL2の有効化WSL2の有効化
「Linux⽤Windowsサブシステム」の導⼊直後では、コード.8のようにWSL がデフォルトのサブシス
テムとして選択されるようになっています。
コード.8:WSL1がデフォルトの状態
wsl -l -v
NAME STATE VERSION
* Ubuntu-18.04 Stopped 1
Ubuntu Stopped 1
WSL の仮想マシン(ディストリビューション)をWSL に変換するには、コード.9wsl --set-version
(仮想マシン名) 2を実⾏します。
実⾏時に「WSL2を実⾏するには、カーネルコンポーネントの更新が必要です。」というメッセージが表
⽰される場合は、メッセージ出⼒に従い、WSL2Linuxカーネルの更新*19 のサイトから、x マシン
⽤の最新のWSL Linuxカーネル更新プログラムパッケージをダウンロードし、インストールします。
25
*17 https://www.microsoft.com/ja-jp/p/debian/9msvkqc78pk6?activetab=pivot:overviewtab
*18 https://cruel.org/freeware/halloween.html
- 19. VSCodeとDockerによるリモート開発VSCodeとDockerによるリモート開発
VSCodeでは、「Remote-Container」拡張機能を使⽤することにより、Dockerコンテナー上で起動す
るVSCodeにリモート接続して開発を⾏えます。
「Remote-Container」の拡張機能では、devcontainerという仕様にもとづいて、コンテナーを作成し
ます。このことにより、アプリケーションのソースコードと開発環境を単⼀のレポジトリー上でコード化で
きます。
devcontainer.jsondevcontainer.json
devcontainerを作成するには、プロジェクトの.devcontainer/devcontainer.json に設定を記述し
ます。
devcontainer.json を含んだディレクトリーを開いて、ステータスバー左下の「Openaremote
Window」のアイコンをクリックします。次にコマンドパレットから「RemoteContainers:Reopenin
Container」を選択します。devcontainerが起動すると、コンテナー内でVSCodeが起動します。
コード.19:devcontainer.json
{
name: Ruby on Rail Sample,
dockerFile: Dockerfile,
// Comment out the next line to run as root instead. Linux users,
// update Dockerfile with your user's UID/GID if not 1000.
runArgs: [-u, vscode],
// Use 'settings' to set *default* container specific settings.json
values on container create.
// You can edit these settings after create using File Preferences
Settings Remote.
settings:{
terminal.integrated.shell.linux: /bin/bash
},
// Uncomment the next line if you want to publish any ports.
// appPort: [],
// Uncomment the next line to run commands after the container is
created.
// postCreateCommand: java -version,
forwardPorts: [3000],
extensions: [
wingrunr21.vscode-ruby,
bung87.rails
36
- 20. ]
}
devcontainer.jsonの各項⽬についてdevcontainer.jsonの各項⽬について
コード.19はdevcontainer.jsonのサンプルです。それぞれの項⽬を以下に説明します。
dockerfile :devcontainer.jsonからの、Dockerfileへの相対パスです。
runArgs :devcontainerを実⾏するdocker run *29 コマンドへの引数です。devcontainerで
はシェルをroot以外で実⾏することが推奨されているため、通常Dockerfile内で作成するユー
ザーを指定します。
settings :devcontainer内で実⾏するVSCodeの設定です。コード.19の例では、VSCodeの
統合ターミナル内で起動するシェルを指定しています。
appPort :devcontainerが公開(expose)するためのポートです。VSCodeのリモート接続で
は、コンテナーが公開しているポートを検出してポート転送することによりデスクトップ環境から
アクセスを⾏うため、ポートの公開はDockerfile上の記述で⾏い、後述するforwardPortsを使
⽤します。
forwardPorts :デスクトップ環境から転送するポートを指定します。
extensions :devcontainer上のVSCodeに組み込む拡張機能を指定します。
devContainerのDockerfiledevContainerのDockerfile
devContainerで使⽤するDockerイメージには、以下の条件があります。Dockerfileのパスは
.devContainer/Dockerfile が推奨です。
Linuxディストリビューションが以下のいずれかであり、
アーキテクチャーがx _ /ARMv l(AArch )/ARMv l(AArch )のDebian9以降,
Ubuntu16.04以降,CentOS/RedHatEnterpriseLinux(RHEL)7以降
x _ AlpineLinux3.7+
他のglibcベースのLinux
加えて、コンテナー内でシェルを起動するためのユーザーが作成されていることが必要です。
GitHubに各⾔語ごとのdevcontainerのサンプルが公開されています。これをベースにしてカスタマ
イズしていきます。
https://github.com/Microsoft/vscode-remote-try-node
https://github.com/Microsoft/vscode-remote-try-python
https://github.com/Microsoft/vscode-remote-try-go
https://github.com/Microsoft/vscode-remote-try-java
https://github.com/Microsoft/vscode-remote-try-dotnetcore
37
*29 https://docs.docker.com/engine/reference/commandline/run/
- 22. VagrantonHyper-VVagrantonHyper-V
WSL を使⽤するには、Windows のHyper-Vの機能を有効にする必要があります。Hyper-Vが提
供されていないWindows のHomeエディションにも、Hyper-Vの機能サブセットが⽤意されていま
す。
そのWSL に限らず、DockerforWindowsやWindowsサンドボックスなど、Windowsの⼤型アップ
デートで提供される開発者向けの新機能は、Hyper-Vを前提としています。
Hyper-Vは、IntelのVT-xなどの仮想化⽀援機能を使⽤します。このことは、他のアプリケーションに
対して排他の関係となります。開発者向けの仮想化ソフトウェアの標準であるOracleVMVirtualBox
が動作しない場合があります。このことはWindowsデスクトップ上でHyper-Vを導⼊する上での障壁
になっています。
Hyper-V上でVirtualBoxは「動く」のかHyper-V上でVirtualBoxは「動く」のか
VirtualBoxはバージョン6.0より、実験的機能としてHyper-Vを仮想化プラットフォームとしてサ
ポートしています。*31
バージョンを重ねるごとにHyper-V上でのVirtualBoxの動作も実装が進み、Linuxディストリ
ビューションによってはインストールに成功する例も出てきました。しかし、ディストリビューション
によっては、エラーが発⽣しインストールに失敗するものや、Vagrantの動作に必要な
VirtualBoxGuestAdditionsの組み込みに失敗するものなどがあり、Hyper-V環境での
VirtualBoxの動作は、常⽤できる⽔準には未だ達していないのが現状です。
アーキテクチャー上の制約からWebアプリケーションの開発環境にWSLやDockerによるリモート開発
を使⽤できない場合は、仮想マシン上の使⽤を検討することになります。
その中で、Webアプリケーションの開発環境として必要な要件を整理すると、必要なものは、
VirtualBoxそのものでなく、仮想マシンを統⼀したコマンドで容易に操作できることの出来るコマンド
ラインインターフェース(CLI)である、ということなります。
そこで選択肢としてあがってくるのが、開発環境として仮想マシンを管理するソフトウェアであるVagrant
のHyper-VProviderです。Vagrantを使⽤することにより、macOSなど他のOS上でVirtualBoxを使
⽤する開発者とも、Ansible等による仮想マシンのプロビジョニングのスクリプトを共有できるメリットが
あります。
この章では、Vagrantが使⽤する仮想プラットフォームとしてHyper-Vを使⽤する上でのポイントについ
て書きます。
43
*31 https://docs.oracle.com/cd/E97728_01/F12469/html/hyperv-support.html
- 24. コード.27:環境変数の指定
VAGRANT_DEFAULT_PROVIDER=hyperv
終了・再起動終了・再起動
終了・再起動などのオプションはVagrantの標準と同じです。((コード.28))
コード.28:終了・再起動
# 再起動
vagrant reload
# 終了
vagrant halt
# 仮想マシンの破棄
vagrant destroy
起動時の仮想マシンへの接続起動時の仮想マシンへの接続
Hyper-Vでは、仮想マシンのネットワークインターフェース(NIC)と、ホスト側のネットワークを、「仮想ス
イッチ」というインターフェースで接続します。
Hyper-V上に仮想スイッチが複数作成している場合は、Vagrantにより仮想マシンを起動する際に、プ
ロンプト上でどの仮想スイッチに接続するかを選択します。
ホストとなるWindowsデスク上にDockerforWindowsがインストールされている場合は、Docker
forWindowsが「DockerNAT」という仮想スイッチを作成します。この場合は、Vagrantによる仮想マ
シンの起動時のスイッチの選択は必須です。
共有ディレクトリーのマウント共有ディレクトリーのマウント
VagrantのHyper-VProviderは、ホストと仮想マシン間のフォルダーの共有をServerMessage
Block(SMB)によるディレクトリーの共有で⾏います。
このため、仮想マシンからホストの共有フォルダーの認証情報の⼊⼒が必要です。
⼊⼒するアカウントはMicrosoftアカウントの場合は、Microsoftアカウントのメールアドレスとパスワー
ドでActiveDirectory *32アカウントの場合は、ADアカウントのローカルパートとパスワードです。
Vagrantのdotenvプラグインを使⽤すると、アカウントの設定を環境変数で⾏うことができます。(コー
ド.29) *33
45
*32 以下AD