Slide 1

Slide 1 text

© SIOS Technology, Inc. All rights Reserved. WSL2、Docker、VS Codeで 劇的に改善される Windows開発環境 武井 宜⾏ サイオステクノロジー株式会社 2021年1⽉29⽇

Slide 2

Slide 2 text

© SIOS Technology, Inc. All rights Reserved. ⽬次 2 序章︓ Windowsによる開発の歴史 第2章︓WSL1&2のしくみ 第3章︓ WSL2、Windows Terminalで改善︕︕ 第4章︓さらに進化︕︕Visual Studio Code、Dockerで改善︕︕

Slide 3

Slide 3 text

© SIOS Technology, Inc. All rights Reserved. About Me 3 BCPVUNF Noriyuki TAKEI ෢Ҫ ٓߦ Information • サイオステクノロジー株式会社 • Microsoft MVP for Azure • VS Code Meetup Organizer Favorites • Azure • Squash • Sweets blog https://tech-lab.sios.jp/ core skill Cloud Native, Serverless全般 Twitter @noriyukitakei

Slide 4

Slide 4 text

© SIOS Technology, Inc. All rights Reserved. 本セッションの概要 4

Slide 5

Slide 5 text

© SIOS Technology, Inc. All rights Reserved. 本セッションの概要 5 以下の3つの技術により Windowsの開発環境をすごい便利なものに しようというお話です。 Docker WSL Visual Studio Code

Slide 6

Slide 6 text

© SIOS Technology, Inc. All rights Reserved. 本セッションの概要 6 https://tech-lab.sios.jp/archives/21023 今回のセッションのお話は、 弊社技術ブログでもご覧頂けます。

Slide 7

Slide 7 text

© SIOS Technology, Inc. All rights Reserved. 本セッションの概要 7 また、今回お話する内容は WEB+DB Press vol.117にも 執筆した内容です。 こちらもぜひよろしく おねがいします︕︕

Slide 8

Slide 8 text

© SIOS Technology, Inc. All rights Reserved. 本セッションの概要 8 ハッシュタグ #SIOSTech もしくは @noriyukitakei に忌憚ないご意⾒ お願いいたします

Slide 9

Slide 9 text

© SIOS Technology, Inc. All rights Reserved. 序章︓Windowsによる開発の歴史 9

Slide 10

Slide 10 text

© SIOS Technology, Inc. All rights Reserved. Windowsによる開発の歴史 10 Windowsのメリットはこんなのがあります。 初⼼者でも馴染みやすい画⾯構成 直感的なインターフェース ⾳楽や動画などのメディア系ファイルとの 相性のよさ 本セッションの ブログのURL

Slide 11

Slide 11 text

© SIOS Technology, Inc. All rights Reserved. Windowsによる開発の歴史 11 ただし、以下のようなデメリットもあります。。。 実⾏環境の差異(開発はWindows,本番はLinux)による 想定外の動作 例えば、アップロードしたファイルが⽂字化けしたとか、、、 例えば、改⾏コードがWindowsとLinuxで違うせいで、、、 本セッションの ブログのURL

Slide 12

Slide 12 text

© SIOS Technology, Inc. All rights Reserved. Windowsによる開発の歴史 12 Windowsでの開発は以下のような歴史をたどってきました。 ⼀つの開発環境を共有 Windows上に開発に必要なミドルウェアを構築 仮想環境によるアプローチ 本セッションの ブログのURL

Slide 13

Slide 13 text

© SIOS Technology, Inc. All rights Reserved. Windowsによる開発の歴史 13 ⼀つの開発環境を共有 Webサーバー Linux Runtime (JavaやPHPなどのアプリケーション実⾏環境) Middleware(ApacheやTomcatなど) ソースコード public void hello() { system.out.println(“Hello!!”); } 本セッションの ブログのURL ftp ftp ftp ftp ftp ftp ftp ftp ftp ftp

Slide 14

Slide 14 text

© SIOS Technology, Inc. All rights Reserved. Windowsによる開発の歴史 14 本セッションの ブログのURL Windows上に開発に必要なミドルウェアを構築 Windows PHP Apache ソースコード Windows PHP Apache ソースコード Windows PHP Apache ソースコード Windows PHP Apache ソースコード Windows PHP Apache ソースコード Windows PHP Apache ソースコード

Slide 15

Slide 15 text

© SIOS Technology, Inc. All rights Reserved. Windowsによる開発の歴史 15 仮想環境によるアプローチ Windows PHP Apache ソースコード 仮想環境 ソースコード Windows PHP Apache ソースコード 仮想環境 ソースコード Windows PHP Apache ソースコード 仮想環境 ソースコード Windows PHP Apache ソースコード 仮想環境 ソースコード Windows PHP Apache ソースコード 仮想環境 ソースコード Windows PHP Apache ソースコード 仮想環境 ソースコード 本セッションの ブログのURL

Slide 16

Slide 16 text

© SIOS Technology, Inc. All rights Reserved. Windowsによる開発の歴史 16 ⼀つの開発環境を 共有 Windows上に 開発に必要な ミドルウェアを 構築 仮想環境による アプローチ 実⾏環境の差異 環境構築の⼿間 環境の独⽴性 ◯ Linuxの環境をみんなで 共有するので、実⾏環境 の際はない。 ◯ 既に出来上がっている環 境をみんなで共有するの で、開発者が環境構築し なくてよい。 ☓ みんなで1つの環境を共 有するので、誰かが変な コード上げたりすると、 環境が動かなくなる。 ☓ Windowsなので、本番環 境がLinuxの場合、差異 が⼤きくある。 ☓ Windows上にランタイム とかミドルウェアインス トールするので超⼤変。 ◯ 開発者専⽤の環境なので 、何をやっても他のユー ザーに影響はなし。 ◯ 仮想環境上のOSを本番の ものと合わせれば、実⾏ 環境の際はない ☓ 仮想環境上にOSからイン ストールするので、超⼤ 変。 ◯ 開発者専⽤の環境なので 、何をやっても他のユー ザーに影響はなし。 ポータビリティ ☓ OSのイメージが⼤きすぎ るので、なかなかに他の 環境に簡単に移⾏できな い。 ☓ OSのイメージが⼤きすぎ るので、なかなかに他の 環境に簡単に移⾏できな い。 ☓ OSのイメージが⼤きすぎ るので、なかなかに他の 環境に簡単に移⾏できな い。

Slide 17

Slide 17 text

© SIOS Technology, Inc. All rights Reserved. Windowsによる開発の歴史 17 本セッションの ブログのURL 全て以下の最新テクノロジーで解決します︕︕ Docker WSL Visual Studio Code

Slide 18

Slide 18 text

© SIOS Technology, Inc. All rights Reserved. Windowsによる開発の歴史 18 Windows Subsystem for Linux Windowsの中でLinuxを実⾏できるテクノロジーです。 Virtual Boxなどの仮想環境に⽐べて⾼速に起動、相互の ファイルアクセスなどWindowsとの親和性が⾼いのが特徴 です。 Visual Studio Code マイクロソフトによって開発され、Windows、Mac、 Linuxなど様々な環境で動作します。また、動作も軽量で、 プラグインによって⾃由に機能拡張できるのが特徴です。 Docker コンテナ仮想化を使って、アプリケーションを開発・配 置・実⾏するためのオープンソースソフトウェアです。後 ほど詳しく説明します。

Slide 19

Slide 19 text

© SIOS Technology, Inc. All rights Reserved. Windowsによる開発の歴史 19 本セッションの ブログのURL WSLのインストール Windowsの左下の検索ボックスに 「powershell」と⼊⼒すると、メニュー の中に「Windows PowerShell」が表⽰さ れます。それを右クリックして、「管理者 として実⾏」をクリックして下さい。

Slide 20

Slide 20 text

© SIOS Technology, Inc. All rights Reserved. Windowsによる開発の歴史 20 WSLのインストール Windows PowerShell Copyright (C) Microsoft Corporation. All rights reserved. 新しいクロスプラットフォームの PowerShell をお試しください https://aka.ms/pscore6 PS C:\Windows\system32> Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux この操作を完了するために、今すぐコンピューターを再起動しますか? [Y] Yes [N] No [?] ヘルプ (既定値は "Y"): 本セッションの ブログのURL PowerShellのWindowが表⽰されるので、以下のコマンドを実⾏して下さい。 再起動の有無を聞かれますので、Yを⼊⼒し、エンターを押して下さい。

Slide 21

Slide 21 text

© SIOS Technology, Inc. All rights Reserved. Windowsによる開発の歴史 21 本セッションの ブログのURL WSLのインストール 次に、Windowsの左下の検索ボックスに 「microsoft store」と⼊⼒すると、メ ニューの中に「Microsoft Store」が表⽰ されますので、それをクリックして下さい。

Slide 22

Slide 22 text

© SIOS Technology, Inc. All rights Reserved. Windowsによる開発の歴史 22 本セッションの ブログのURL WSLのインストール 画⾯上部のテキストボックスに「wsl」と⼊⼒してエンターを押して下 さい。

Slide 23

Slide 23 text

© SIOS Technology, Inc. All rights Reserved. Windowsによる開発の歴史 23 本セッションの ブログのURL WSLのインストール 「Ubuntu XXXX」をクリック して下さい。

Slide 24

Slide 24 text

© SIOS Technology, Inc. All rights Reserved. Windowsによる開発の歴史 24 本セッションの ブログのURL WSLのインストール 「Get」をクリックして下 さい。

Slide 25

Slide 25 text

© SIOS Technology, Inc. All rights Reserved. Windowsによる開発の歴史 25 本セッションの ブログのURL WSLのインストール 「No, thanks」をクリックして下さい。

Slide 26

Slide 26 text

© SIOS Technology, Inc. All rights Reserved. Windowsによる開発の歴史 26 本セッションの ブログのURL WSLのインストール 右図のようにプログレ スバーが表⽰されてイ ンストールが始まりま す。

Slide 27

Slide 27 text

© SIOS Technology, Inc. All rights Reserved. Windowsによる開発の歴史 27 本セッションの ブログのURL WSLのインストール ダウンロードが完了する と右図のようになりま す。

Slide 28

Slide 28 text

© SIOS Technology, Inc. All rights Reserved. Windowsによる開発の歴史 28 本セッションの ブログのURL 以下のURLにアクセスし、Windows10⽤のインストーラーをダウンロード して下さい。ウィザードに従うだけで簡単にインストール出来ます。 https://code.visualstudio.com/download Visual Studio Codeのインストール

Slide 29

Slide 29 text

© SIOS Technology, Inc. All rights Reserved. Windowsによる開発の歴史 29 本セッションの ブログのURL Visual Studio Codeのインストール ついでに⽇本語化もします。上部メニューから「View」→「Command Palete…」の順にクリックします。

Slide 30

Slide 30 text

© SIOS Technology, Inc. All rights Reserved. Windowsによる開発の歴史 30 本セッションの ブログのURL Visual Studio Codeのインストール 「Install additional languages…」をクリックします。

Slide 31

Slide 31 text

© SIOS Technology, Inc. All rights Reserved. Windowsによる開発の歴史 31 本セッションの ブログのURL Visual Studio Codeのインストール 左側に⾔語⼀覧が表⽰されますので 「⽇本語」の横にある「Install」を クリックして、Visual Studio Code を再起動すれば、⽇本語化は完了で す。

Slide 32

Slide 32 text

© SIOS Technology, Inc. All rights Reserved. Windowsによる開発の歴史 32 本セッションの ブログのURL Windows Terminalのインストール Microsoft Storeを起動して、以下のように「windows terminal」を⼊⼒しま す。「Windows Terminal (Preview)」と表⽰されるのでクリックします。

Slide 33

Slide 33 text

© SIOS Technology, Inc. All rights Reserved. Windowsによる開発の歴史 33 本セッションの ブログのURL Windows Terminalのインストール 後はWindows Subsystem for Linuxのインストールと同様の⼿順を実施すれ ばインストールは完了します。

Slide 34

Slide 34 text

© SIOS Technology, Inc. All rights Reserved. 第2章︓ WSL1&2のしくみ 34

Slide 35

Slide 35 text

© SIOS Technology, Inc. All rights Reserved. WSL1&2のしくみ 35 特にファイルアクセスが⾮常に簡単です。Virtual Boxでも、Sambaなどの CIFSプロトコルに対応したサーバーを⽴てれば、もちろん可能ですが、そ の設定は煩雑です。WSLは特定のパスにアクセスするだけで、WSL(Linux) 上のファイルにアクセスができます。 Windows – Linux間の親和性 WSLのメリットはこんなにたくさんあります︕︕ WSLの起動は、ほぼ⼀瞬です。Virtual Boxなどの仮想環境は、昨今のOSの 起動が早くなったとはいえ、WSLには遠く及びません。開発においてLinux の環境が必要になったとき、たとえ5秒待たされるのさえストレスに感じま す。 ⾼速起動 Virtual Boxを始めとした仮想環境は、ネットワークやストレージ、メモリ を始めとした各種リソースの設定、それからOSやミドルウェアのインス トール、設定と、かなりの⼿間と時間を要します。それと⽐べて、WSLを 導⼊するまでは10分程度で、OSインストール済みの環境が出来上がります。 導⼊の容易さ

Slide 36

Slide 36 text

© SIOS Technology, Inc. All rights Reserved. WSL1&2のしくみ 36 本セッションの ブログのURL WindowsからWSL上のファイルにアクセスするためには、「 \\wsl$\[ディストリビューションの名前]」というパスにアクセスす ればOKです。ディストリビューションがUbuntuの場合は 「\\wsl$\Ubuntu-18.04」となります。

Slide 37

Slide 37 text

© SIOS Technology, Inc. All rights Reserved. WSL1&2のしくみ 37 本セッションの ブログのURL 逆に、LinuxからWindowsの場合は、「/mnt/[ドライブ名]」という パスにアクセスすると、Windowsの指定したドライブ直下にアクセ スが出来ます。Cドライブにアクセスする場合は、「/mnt/c」とな ります。

Slide 38

Slide 38 text

© SIOS Technology, Inc. All rights Reserved. WSL1&2のしくみ 38 本セッションの ブログのURL WSL1とWSL2のアーキテクチャは⼤きな違いがあります。

Slide 39

Slide 39 text

© SIOS Technology, Inc. All rights Reserved. WSL1&2のしくみ 39 本セッションの ブログのURL WSL1のアーキテクチャ Linuxカーネルのファンクションコールが、 LXCoreというシステムによって、Windows へのファンクションコールに変換されて、動 作している。 Linuxカーネルは存在しない。LXCoreにより 擬似的にLinuxっぽくしている。 そのため、Linuxのファンクションコールに 強く依存するDockerなどは動作しない。

Slide 40

Slide 40 text

© SIOS Technology, Inc. All rights Reserved. WSL1&2のしくみ 40 本セッションの ブログのURL WSL2のアーキテクチャ Hyper-Vベースの仮想マシンサービス上に Linuxカーネルを搭載したOSが動作する。 Hyper-Vは、WSL2専⽤にカスタマイズされ た軽量なものであり、さらにLinuxカーネル もマイクロソフト独⾃パッチを当てることで 軽量化を実現している。 ネイティブなLinuxカー熱で動作するので、 Dockerも動作する︕︕

Slide 41

Slide 41 text

© SIOS Technology, Inc. All rights Reserved. WSL1&2のしくみ 41 本セッションの ブログのURL では、どんなときも WSL2を使ったほうが よいの︖

Slide 42

Slide 42 text

© SIOS Technology, Inc. All rights Reserved. WSL1&2のしくみ 42 本セッションの ブログのURL WSL1とWSL2のパフォーマンステスト(Linux→Linux) ■ WSL1 (300MB書き出すのに0.18秒) $ time dd if=/dev/zero of=test bs=1k count=300000 300000+0 records in 300000+0 records out 307200000 bytes (307 MB, 293 MiB) copied, 1.79515 s, 171 MB/s real 0m1.839s user 0m0.125s sys 0m1.641s ■ WSL2 (300MB書き出すのに0.05秒) $ time dd if=/dev/zero of=test bs=1k count=300000 300000+0 records in 300000+0 records out 307200000 bytes (307 MB, 293 MiB) copied, 1.79515 s, 171 MB/s real 0m1.839s user 0m0.125s sys 0m1.641s

Slide 43

Slide 43 text

© SIOS Technology, Inc. All rights Reserved. WSL1&2のしくみ 43 本セッションの ブログのURL WSL1とWSL2のパフォーマンステスト(Linux→Windows) ■ WSL1 (300MB書き出すのに0.19秒) # time dd if=/dev/zero of=/mnt/c/data/test bs=1k count=300000 300000+0 records in 300000+0 records out 307200000 bytes (307 MB, 293 MiB) copied, 1.96355 s, 156 MB/s real 0m1.979s user 0m0.063s sys 0m1.813s ■ WSL2 (300MB書き出すのに1分45秒) # time dd if=/dev/zero of=/mnt/c/data/test bs=1k count=300000 300000+0 records in 300000+0 records out 307200000 bytes (307 MB, 293 MiB) copied, 105.718 s, 2.9 MB/s real 1m45.729s user 0m3.770s sys 0m26.386s

Slide 44

Slide 44 text

© SIOS Technology, Inc. All rights Reserved. WSL1&2のしくみ 44 本セッションの ブログのURL まとめますと、以下のとおりです。 WSLからWindowsへのファイルアクセスが多い場合は、WSL1のほうがい い。 WSL1ではWindows側のファイルアクセスにDrvFsというプロコトルを使っ ており、WSL2ではPlan 9 Filesystem Protocol(9P)というプロトコルを利 ⽤しています。このプロトコルの性能差が原因と思われる。 MSの公式ドキュメントにも記載がある。 https://docs.microsoft.com/en-us/windows/wsl/compare- versions#exceptions-for-using-wsl-1-rather-than-wsl-2

Slide 45

Slide 45 text

© SIOS Technology, Inc. All rights Reserved. WSL1&2のしくみ 45 本セッションの ブログのURL 項⽬ WSL1 WSL2 実現⽅式 LXCoreによるコマンドの 変換 Linuxカーネル Windows10 Home 利⽤可能 利⽤可能 仮想マシン⽀援機能 不要 必要 セットアップ WSLインストール後すぐ 利⽤可能 WSLインストール後、 WSL2への変換が必要 ファイルアクセス (Linux→Linux) 低速 ⾼速 ファイルアクセス (Linux→Windows) ⾼速 低速

Slide 46

Slide 46 text

© SIOS Technology, Inc. All rights Reserved. 第3章︓ WSL2、Windows Terminalで改善︕︕ 46

Slide 47

Slide 47 text

© SIOS Technology, Inc. All rights Reserved. WSL2、Windows Terminalで改善︕︕ 47 本セッションの ブログのURL ユースケースその1︓WSLを使ったWindowsとLinux間のシームレスな開発 本章のタイトルにもなっており、最もご紹介したいユースケースです。WSL を使ったWindowsとLinux間の実践的開発⽅法を説明します。 まず、以下のような開発の要件があるとします。 • 開発⾔語はPHP • WebサーバーはApache • アプリケーションの実⾏基盤(OS)はLinux まずはWSLの利便性をご理解頂くために、あえてWSLを使わずに、Virtual Boxなどの仮想環境を使って開発するケースを考えてみます。そして、その次 にWSLを使って開発するケースを説明し、その両者を⽐較することで、WSL のメリットをご理解頂けたらと思います。

Slide 48

Slide 48 text

© SIOS Technology, Inc. All rights Reserved. WSL2、Windows Terminalで改善︕︕ 48 ユースケースその1︓WSLを使ったWindowsとLinux間のシームレスな開発 WSLを使わない場合 Virtual BoxにOSから⼊れなくては いけないのでとっても⾯倒。 ソースコードの同期についても⾊ 々設定をしなければいけない。。 。

Slide 49

Slide 49 text

© SIOS Technology, Inc. All rights Reserved. WSL2、Windows Terminalで改善︕︕ 49 ユースケースその1︓WSLを使ったWindowsとLinux間のシームレスな開発 WSLを使う場合 WSLは既にOSインストール済みな ので、ラクチン。 WSL上のソースコードへのアクセ スも、特定のパスを指定するだけ でいいから、これもラクチン。

Slide 50

Slide 50 text

© SIOS Technology, Inc. All rights Reserved. WSL2、Windows Terminalで改善︕︕ 50 本セッションの ブログのURL ユースケースその1︓WSLを使ったWindowsとLinux間のシームレスな開発 百聞は⼀⾒に如かずということで、実際に構築してみます。 Windowsの左下の検索ボックスに「Ubuntu」と⼊⼒すると、第1章でインストールした「Ubuntu 18.04 LTS」が表⽰されるので、それをクリックします。すると、コンソールが起動するので、ユー ザー名とパスワードを⼊⼒します。 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 ". See "man sudo_root" for details. ntakei@NORIYUKITAKA0D3:~$

Slide 51

Slide 51 text

© SIOS Technology, Inc. All rights Reserved. WSL2、Windows Terminalで改善︕︕ 51 本セッションの ブログのURL ユースケースその1︓WSLを使ったWindowsとLinux間のシームレスな開発 ApacheとPHPのインストールを実施します。 $ sudo apt-get update $ sudo apt-get install -y apache2 php

Slide 52

Slide 52 text

© SIOS Technology, Inc. All rights Reserved. WSL2、Windows Terminalで改善︕︕ 52 本セッションの ブログのURL ユースケースその1︓WSLを使ったWindowsとLinux間のシームレスな開発 これで開発する準備は整いました。さて、これから実際にPHPスクリプトを作成するわけですが、 WSLでは第2章で紹介したように、エクスプローラーから「\\wsl$\Ubuntu-18.04」というパスにアクセ スすれば、WSL上のUbuntuのディレクトリに直接アクセスできます。よって、ApacheのDocument Rootである「\\wsl$\Ubuntu-18.04\var\www\html」にアクセスして、そのディレクトリにIDEなどで test.phpというファイル名で以下のPHPスクリプト作成します。 ブラウザで「http://localhost/test.php」にアクセスすると「hoge」と表⽰されるはずで す。 とっても簡単です︕︕

Slide 53

Slide 53 text

© SIOS Technology, Inc. All rights Reserved. WSL2、Windows Terminalで改善︕︕ 53 本セッションの ブログのURL ユースケースその1︓WSLを使ったWindowsとLinux間のシームレスな開発 今まで説明した「WSLと仮想化ソフトフェアによる開発環境構築の違い」を下図にまとめました。

Slide 54

Slide 54 text

© SIOS Technology, Inc. All rights Reserved. WSL2、Windows Terminalで改善︕︕ 54 本セッションの ブログのURL ユースケースその2︓SSHによるポートフォワード 顧客のネットワーク上にあるサーバーにアクセスする場合、踏み台SSHサーバーを経由して、クライ アントPCのローカルにポートを持ってきて、そのポート経由で接続する「ポートフォワード」を使う 場合が多々あります。

Slide 55

Slide 55 text

© SIOS Technology, Inc. All rights Reserved. WSL2、Windows Terminalで改善︕︕ 55 本セッションの ブログのURL ユースケースその2︓SSHによるポートフォワード Windowsの場合ですと、⾊々と⾯倒なことがあります。 Teratermだと設定が結構⾯倒くさい。SSHコマンドだとワンライナーでできることも多数の⼿順を 踏む必要がある。 Virtual Boxなどの仮想化ソフトウェアでクライアントPC内でLinuxを構築して、そちらでsshコマン ドでポートフォワードしてもいいが、クライントPCからlocalhostでアクセスできないので使い勝⼿ が悪い。

Slide 56

Slide 56 text

© SIOS Technology, Inc. All rights Reserved. WSL2、Windows Terminalで改善︕︕ 56 本セッションの ブログのURL ユースケースその2︓SSHによるポートフォワード WSLならとっても便利で簡単︕︕localhostでアクセスが可能なので、Linuxでsshのポートフォワー ドしているのと同じ感覚で使えます︕︕

Slide 57

Slide 57 text

© SIOS Technology, Inc. All rights Reserved. WSL2、Windows Terminalで改善︕︕ 57 ユースケースその4︓DockerをWindows 10 Homeでも利⽤できる 本セッションの ブログのURL 以前は「Docker Desktop for Windows」は、Hyper-Vの利⽤を前提として いた。 Hyper-VはProfessional Edition以上が必要なので、Dockerも必然的 にそれに引きづられていた。 WSL2では、WSL2向けのHyper-VがHomeエディションに内包されることと なり、Docker Desktop for Windowsは、このHyper-Vを使うことで、 Dockerエンジンを動作することができる。 詳細は4章にて︕︕

Slide 58

Slide 58 text

© SIOS Technology, Inc. All rights Reserved. WSL2、Windows Terminalで改善︕︕ 58 ユースケースその5︓複数シェルを⼀括管理︕ Windows Terminal サービスが多様化し、PowerShell、WSL、Azureなど ⾊んなものを使うようになってきた。 サービスごとに個別のインターフェース(PowerShellのプロンプト、 WSLのターミナル、Azureのポータル)を起動するのはめんどくさい。 Windows Terminalなら統合的に管理可能︕︕ 本セッションの ブログのURL

Slide 59

Slide 59 text

© SIOS Technology, Inc. All rights Reserved. WSL2、Windows Terminalで改善︕︕ 59 ユースケースその5︓複数シェルを⼀括管理︕ Windows Terminal 本セッションの ブログのURL 早速実践してみましょう︕︕その前にWindows Terminalを使わずに、PowerShell、WSL、Azure Cloud Shell(Azureへの操作実施するための、ブラウザ上で稼働するシェル)を同時に使うと、以下の ようにとっちらかったデスクトップになります(汗)

Slide 60

Slide 60 text

© SIOS Technology, Inc. All rights Reserved. WSL2、Windows Terminalで改善︕︕ 60 ユースケースその5︓複数シェルを⼀括管理︕ Windows Terminal 本セッションの ブログのURL Windows Terminalを使うとスッキリします︕︕ まずは基本的な操作を説明します。インストールは序章で済ませ ているので、早速起動してみます。 Windowsの左下の検索ボックスに「windows terminal」と⼊⼒ すると、メニューの中に「Windows Terminal」が表⽰されます ので、それをクリックして下さい。

Slide 61

Slide 61 text

© SIOS Technology, Inc. All rights Reserved. WSL2、Windows Terminalで改善︕︕ 61 ユースケースその5︓複数シェルを⼀括管理︕ Windows Terminal 本セッションの ブログのURL Windows Terminalが起動します。タブメニューの⼀番右端のボタンをクリックすると、様々なサー ビス向けのターミナル⼀覧が表⽰されます。ターミナル名をクリックすると、そのサービスに応じた ターミナルが起動します。

Slide 62

Slide 62 text

© SIOS Technology, Inc. All rights Reserved. WSL2、Windows Terminalで改善︕︕ 62 ユースケースその5︓複数シェルを⼀括管理︕ Windows Terminal 本セッションの ブログのURL これでPowerShell、WSL、Azure Cloud Shellのターミナルが起動しました。全てのターミナルが⼀ つのウィンドウに集約され、タブで切り替えることができるので、⾮常にデスクトップがスッキリし ます。

Slide 63

Slide 63 text

© SIOS Technology, Inc. All rights Reserved. WSL2、Windows Terminalで改善︕︕ 63 ユースケースその5︓複数シェルを⼀括管理︕ Windows Terminal 本セッションの ブログのURL では、起動したターミナルの中で、Azure Cloud Shellを使ってみましょう。Windows Terminalに 表⽰されている「Azure」のタブをクリックするとターミナルに以下のようなメッセージが表⽰され ています。メッセージの通り、ブラウザを起動し、https://microsoft.com/deviceloginにアクセス します。 To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code XXXXXXXXX to authenticate. This code will expire in 15 minutes.

Slide 64

Slide 64 text

© SIOS Technology, Inc. All rights Reserved. WSL2、Windows Terminalで改善︕︕ 64 ユースケースその5︓複数シェルを⼀括管理︕ Windows Terminal 本セッションの ブログのURL ターミナルに表⽰されてたcodeを⼊⼒して、「Next」をクリックします。

Slide 65

Slide 65 text

© SIOS Technology, Inc. All rights Reserved. WSL2、Windows Terminalで改善︕︕ 65 ユースケースその5︓複数シェルを⼀括管理︕ Windows Terminal 本セッションの ブログのURL Azureにアクセスが可能なアカウント情報を⼊⼒します。

Slide 66

Slide 66 text

© SIOS Technology, Inc. All rights Reserved. WSL2、Windows Terminalで改善︕︕ 66 ユースケースその5︓複数シェルを⼀括管理︕ Windows Terminal 本セッションの ブログのURL ログインが成功すると、Windows Terminal側にAzureテナントの⼀覧が表⽰されて、Azureへの操作 が可能になります。 To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code HBNZ649U4 to authenticate. This code will expire in 15 minutes. Authenticated. Tenant 0: SIOS Technology, Inc. (Azure検証環境) (XXXX.onmicrosoft.com) Tenant 1: サイオステクノロジー株式会社 (YYYY.onmicrosoft.com) Please enter the desired tenant number. >

Slide 67

Slide 67 text

© SIOS Technology, Inc. All rights Reserved. 第4章︓さらに進化︕︕ Visual Studio Code、Dockerで改善︕︕ 67

Slide 68

Slide 68 text

© SIOS Technology, Inc. All rights Reserved. さらに進化︕︕Visual Studio Code、Dockerで改善︕︕ 68 本セッションの ブログのURL Dockerってなに︖

Slide 69

Slide 69 text

© SIOS Technology, Inc. All rights Reserved. さらに進化︕︕Visual Studio Code、Dockerで改善︕︕ 69 仮想化は仮想化ソフトウェアにゲストOSが あり、プロセスはゲストOS上のカーネルを 利⽤する。 コンテナは、ホストOS上のカーネルを共有 する。 ゲストOSが不要な分、コンテナは軽量にな る。この軽量化が開発環境を構築するのに ⼤きく寄与する。 コンテナ同⼠はホストOS同⼠の namespaceという技術によって完全に実⾏ 空間が分離しているので、お互い⼲渉する ことはない。

Slide 70

Slide 70 text

© SIOS Technology, Inc. All rights Reserved. さらに進化︕︕Visual Studio Code、Dockerで改善︕︕ 70 Dockerの詳細についてはここでは語りきれないので ⼩⽣の以下のブログをぜひ⾒て下さい︕︕ 世界⼀わかりみが深いコンテナ & Docker⼊⾨ https://tech-lab.sios.jp/archives/18811

Slide 71

Slide 71 text

© SIOS Technology, Inc. All rights Reserved. さらに進化︕︕Visual Studio Code、Dockerで改善︕︕ 71 WSL2とDockerは相性ぴったり︕︕ Docker Desktop for Windowsは、Moby VMと いうLinuxの仮想マシンを起 動し、その仮想マシン内の Linuxカーネルを使ってコン テナを起動します。Moby VMの起動には仮想化ハイ パーバイザーであるHyper- Vが必要となり、Hyper-Vは Windows 10 Pro以上が必 要となります。

Slide 72

Slide 72 text

© SIOS Technology, Inc. All rights Reserved. さらに進化︕︕Visual Studio Code、Dockerで改善︕︕ 72 WSL2とDockerは相性ぴったり︕︕ Docker Desktop WSL 2 backendの場合は、Docker コンテナ稼働に必要な仮想 化ハイパーバイザー、Linux 仮想マシン、Linuxカーネル はすべてWSL2をインストー ルすると⾃動的に作成され ます。さらに、WSL2専⽤の 軽量化Hyper-Vは、 Windows 10 Homeにも利 ⽤できるように設計されて あるため、Docker Desktop WSL 2 backendと組み合わ せることで、Windows 10 HomeでもDockerが利⽤で きるのです。

Slide 73

Slide 73 text

© SIOS Technology, Inc. All rights Reserved. さらに進化︕︕Visual Studio Code、Dockerで改善︕︕ 73 Visual Studio CodeとDockerは相性ぴったり︕︕ Visual Studio CodeのRemote Development拡張機能を使うと、開発に必要なコンテナを⾃動で⽣ 成してくれます︕︕ ① 事前に定義したコンテナ関連設 定ファイルに基づきDockerにコン テナ作成の命令を出す。 ② Docker HubにDockerイメージ を取得しにいく。 ③ Dockerイメージからコンテナを ⽣成する。 ④ コンテナ上のソースコードをマ ウントする。VS Codeからコンテ ナ上のソースを直接修正できる。

Slide 74

Slide 74 text

© SIOS Technology, Inc. All rights Reserved. さらに進化︕︕Visual Studio Code、Dockerで改善︕︕ 74 本セッションの ブログのURL Visual Studio Code、Docker、WSL2を使うと 新たな開発スタイルが 誕⽣します。︕︕

Slide 75

Slide 75 text

© SIOS Technology, Inc. All rights Reserved. さらに進化︕︕Visual Studio Code、Dockerで改善︕︕ 75 ① 開発リーダーはDockerfileとソースコードを Gitリポジトリにpushします。 ② 開発エンジニアは、Gitリポジトリから Dockerfileとソースコードをclone or pullします。 ※開発エンジニアのPC上にあるGitで⾏われます ③ 開発エンジニアは、Dockerfileに従って、開発 環境のコンテナを作成します。Dockerエンジン は、 Dockerfileの内容に従って、適宜 DockerHubを参照します。 ④ 開発エンジニアは、修正したソースコードを GitHubにpush or pullします。 ※これはDockerコンテナ内のGitから⾏われます。 ⑤ 開発リーダーは、GitHubにpushされたソース コードに基づき、Dockerイメージを作成、 DockerリポジトリにPushします。 ⑥ Kubernetesなどのコンテナオーケストレー ターによって読み込まれて、本番環境が作成され ます。 本セッションの ブログのURL

Slide 76

Slide 76 text

© SIOS Technology, Inc. All rights Reserved. さらに進化︕︕Visual Studio Code、Dockerで改善︕︕ 76 この開発スタイルのメリットは以下のとおりです。 コンテナはカーネルを含まないので、軽量で可搬性に優れています。 Docker HubやDockerリポジトリからイメージをPull、Pushしても軽量な のでネットワーク帯域を圧迫しないですし、ダウンロードも⾼速です。 ネットワーク 帯域を 圧迫しない Gitリポジトリの中にあるコンテナ関連設定ファイル(Dockerfileその他)を Pullして、それをもとにVS CodeのRemote Development拡張機能が開発 に必要なコンテナを作ってくれるので、開発環境の構築をする必要がない。 環境構築の⼿間が 軽減される 開発環境で開発に使っていたコンテナをそのまま本番環境に持っていくの で、序章で説明したような、開発環境と本番環境の差異による不具合が発 ⽣しない。 実⾏環境の差異が ない

Slide 77

Slide 77 text

© SIOS Technology, Inc. All rights Reserved. さらに進化︕︕Visual Studio Code、Dockerで改善︕︕ 77 本セッションの ブログのURL この開発スタイルに基づいて 開発を実践してみましょう︕︕

Slide 78

Slide 78 text

© SIOS Technology, Inc. All rights Reserved. さらに進化︕︕Visual Studio Code、Dockerで改善︕︕ 78 本セッションの ブログのURL 事前準備︓Docker Desktop for Windowsのインストール 第3章でも説明したように、Docker Desktop for Windowsは今まではHyper-Vを内包する Professionalエディション以上が必要でした。しかし、WSL2ではWSL2向けのHyper-VがHomeエ ディションに内包されることとなり、Docker Desktop for Windowsは、このHyper-Vを使うことで、 Dockerエンジンを動作することができます。よって、まずWSL2が必要なのですが、WSL2はWSL1 をアップグレードすることでインストールします。 Windowsの左下の検索ボックスに「powershell」と⼊⼒すると、メニューの中に「Windows PowerShell」が表⽰されます。それを右クリックして、「管理者として実⾏」をクリックして下さ い。以下のコマンドを実⾏して、「操作は正常に完了しました。」と表⽰されれば成功です。 PS C:\Windows\system32> dism.exe /online /enable-feature /featurename:Microsoft-Windows- Subsystem-Linux /all /norestart 展開イメージのサービスと管理ツール バージョン: 10.0.19041.1 イメージのバージョン: 10.0.19041.207 機能を有効にしています [==========================100.0%==========================] 操作は正常に完了しました。

Slide 79

Slide 79 text

© SIOS Technology, Inc. All rights Reserved. さらに進化︕︕Visual Studio Code、Dockerで改善︕︕ 79 本セッションの ブログのURL 事前準備︓Docker Desktop for Windowsのインストール 次に、同じPowerShellのウィンドウで以下のコマンドを実⾏します。「操作は正常に完了しまし た。」と表⽰されれば成功です。 PS C:\Windows\system32> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart 展開イメージのサービスと管理ツール バージョン: 10.0.19041.1 イメージのバージョン: 10.0.19041.207 機能を有効にしています [==========================100.0%==========================] 操作は正常に完了しました。

Slide 80

Slide 80 text

© SIOS Technology, Inc. All rights Reserved. さらに進化︕︕Visual Studio Code、Dockerで改善︕︕ 80 本セッションの ブログのURL 事前準備︓Docker Desktop for Windowsのインストール Docker Desktop for Windowsを使うためには、WSL2のLinuxカーネルを更新する必要が あります。以下のURLの「this link」をクリックし、Linux kernel update packageをダウ ンロードして実⾏します。ウィザード通りに進んでいけばインストールは完了します。 https://docs.microsoft.com/en-us/windows/wsl/wsl2-kernel 以下のリンクをクリックして、「Download Docker Desktop Edge X.X.X.X or a later release.」(X.X.X.Xはバージョン番号)をクリックし絵、Docker Desktop for Windowsを ダウンロードして実⾏します。ウィザード通りに進んでいけばインストールは完了します。 https://docs.docker.com/docker-for-windows/wsl-tech-preview/#download ※ 以下のリリースノートにある通り、Windows 10のHomeエディションでDocker Desktop for Windowsを利⽤するためには、2.2.2.0以降のバージョンをダウンロードし て下さい。 https://docs.docker.com/docker-for-windows/edge-release-notes/#docker-desktop-community- 2220

Slide 81

Slide 81 text

© SIOS Technology, Inc. All rights Reserved. さらに進化︕︕Visual Studio Code、Dockerで改善︕︕ 81 本セッションの ブログのURL ①はもう既に完了し ていて必要なファイ ルはGitリポジトリ に上がっているもの とします。

Slide 82

Slide 82 text

© SIOS Technology, Inc. All rights Reserved. さらに進化︕︕Visual Studio Code、Dockerで改善︕︕ 82 本セッションの ブログのURL というここで イマココ(②)

Slide 83

Slide 83 text

© SIOS Technology, Inc. All rights Reserved. さらに進化︕︕Visual Studio Code、Dockerで改善︕︕ 83 本セッションの ブログのURL ②ソースコードおよびコンテナ関連設定ファイルの作成、GitへのPush Gitリポジトリ(GitHubなど)にPushするためのソースコードやコンテナ関連の設定ファイル (Dockerfile)を作成します。そのファイル群やディレクトリ構成は以下の通りとなります。 GitリポジトリのTop !"" .devcontainer # !"" devcontainer.json # $"" Dockerfile $"" src $"" index.php 上記のファイルを作成し、GitリポジトリにPushします。 では、これより以降は、上記に記載のファイルの詳細を⼀つずつ説明していきます。

Slide 84

Slide 84 text

© SIOS Technology, Inc. All rights Reserved. さらに進化︕︕Visual Studio Code、Dockerで改善︕︕ 84 ②ソースコードおよびコンテナ関連設定ファイルの作成、GitへのPush ■ .devcontainer/devcontainer.json Remote Development拡張機 能を使うと、Visual Studio CodeからDockerコンテナに接 続しDocker上のファイルを直接 編集できるのはもちろんのこと、 Dockerコンテナ⾃体の⽣成も拡 張機能で⾏うことができます。 devcontainer.jsonは、⽣成す るコンテナファイルの詳細につ いて記述し、その記述内容に よって、コンテナのイメージや マウントの設定などが決定しま す。今回の実践における具体的 な設定内容は以下のとおりです。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 { # 設定を⼀意に識別する任意の名称です。 "name": "Hello", # コンテナを作成するためのDockerfileのファイル名を指定します。 # Dockerfileの内容については後述します。 "dockerFile": "Dockerfile", # この設定によりホストOSの80宛の通信がコンテナの80に転送されます。 # ホストPCからブラウザで動作確認するために必要です。 "forwardPorts": [80], # デフォルトではVisual Studio Codeからのコンテナ起動時のコマンドは # while sleep 1000; do :; doneに上書きされてしまいますが、それを防⽌します。 "overrideCommand": false, # Gitリポジトリのsrcディレクトリを、Apacheのドキュメントルートである/var/www/htmlに # マウントします。 "mounts": [ "source=${localWorkspaceFolder}/src,target=/var/www/html,type=bind,consistency=cached" ] }

Slide 85

Slide 85 text

© SIOS Technology, Inc. All rights Reserved. さらに進化︕︕Visual Studio Code、Dockerで改善︕︕ 85 本セッションの ブログのURL ②ソースコードおよびコンテナ関連設定ファイルの作成、GitへのPush ■ .devcontainer/Dockerfile Visual Studio CodeのRemote Development拡張機能で⽣成されるコンテナ内で実施するコマンドを 定義したDockerfileです。先に説明したとおり、.devcontainer/devcontainer.jsonで定義されていま す。 1 2 3 4 5 6 # PHPとApacheがインストールされたOfficialイメージをPullします。 FROM php:7.2.30-apache # 修正したソースコードをGitリポジトリにアップするために # コンテナ上にGitをインストールします。 RUN apt-get update && apt-get -y install git 上記のDockerfileでGitをインストールしていますが、Visual Studio CodeのRemote Development 拡張機能を利⽤すると、Visual Studio CodeのGitの機能はコンテナ側で 動作します。そのため、コンテナ側にもGitのインストールが必要になります。

Slide 86

Slide 86 text

© SIOS Technology, Inc. All rights Reserved. さらに進化︕︕Visual Studio Code、Dockerで改善︕︕ 86 本セッションの ブログのURL ②ソースコードおよびコンテナ関連設定ファイルの作成、GitへのPush ■ src/index.php 1 2 3 ブラウザにhogeと表⽰するだけの簡単なPHPスクリプトです。

Slide 87

Slide 87 text

© SIOS Technology, Inc. All rights Reserved. さらに進化︕︕Visual Studio Code、Dockerで改善︕︕ 87 本セッションの ブログのURL イマココ(③)

Slide 88

Slide 88 text

© SIOS Technology, Inc. All rights Reserved. さらに進化︕︕Visual Studio Code、Dockerで改善︕︕ 88 本セッションの ブログのURL ③開発環境の構築 開発リーダーがGitレポジトリにPushしたファイルを、開発エンジニアはホストOS上のGitでPullをし て取得します。これらのファイル(.devcontainerディレクトリ配下のファイル)とRemote Development拡張機能により、開発環境に必要なDockerコンテナを⽣成します。Visual Studio Codeを起動して、左下の緑のボタンをクリックして下さい。

Slide 89

Slide 89 text

© SIOS Technology, Inc. All rights Reserved. さらに進化︕︕Visual Studio Code、Dockerで改善︕︕ 89 本セッションの ブログのURL ③開発環境の構築 以下のようなリストが表⽰されますので、「Remote-Containers: Open Folder in Container…」 をクリックします。そして先程PullしたGitディレクトリを選択します。

Slide 90

Slide 90 text

© SIOS Technology, Inc. All rights Reserved. さらに進化︕︕Visual Studio Code、Dockerで改善︕︕ 90 本セッションの ブログのURL ③開発環境の構築 Visual Studio Codeの右下の⽅に以下の画⾯が表⽰され、コンテナの⽣成が始まります。初回は Docker HubからイメージをPullしたりコンテナを⽣成したりしますので、時間がかかりますが、2回 ⽬以降は素早く起動できます。

Slide 91

Slide 91 text

© SIOS Technology, Inc. All rights Reserved. さらに進化︕︕Visual Studio Code、Dockerで改善︕︕ 91 本セッションの ブログのURL ③開発環境の構築 以下のような画⾯が表⽰されれば成功です。画⾯左部に表⽰されているのはコンテナの中のファイル です。このファイルを修正すると、コンテナの中のファイルが修正されます。

Slide 92

Slide 92 text

© SIOS Technology, Inc. All rights Reserved. さらに進化︕︕Visual Studio Code、Dockerで改善︕︕ 92 本セッションの ブログのURL ③開発環境の構築 画⾯下部のTerminalはコンテナ内部のShellになります。ps axと⼊⼒してプロセスを⾒てみますと、 たしかにコンテナ内部で起動しているプロセスのみが表⽰されている(PIDが1のプロセスがApacheの 親プロセス)ことがわかります。 root@9af07dd07639:/workspaces/webapp# ps ax PID TTY STAT TIME COMMAND 1 ? Ss 0:00 apache2 -DFOREGROUND 18 ? S 0:00 apache2 -DFOREGROUND 19 ? S 0:00 apache2 -DFOREGROUND 20 ? S 0:00 apache2 -DFOREGROUND 21 ? S 0:00 apache2 -DFOREGROUND 22 ? S 0:00 apache2 -DFOREGROUND 23 ? Ss 0:00 /bin/sh ... 以下略 ...

Slide 93

Slide 93 text

© SIOS Technology, Inc. All rights Reserved. さらに進化︕︕Visual Studio Code、Dockerで改善︕︕ 93 本セッションの ブログのURL イマココ(④)

Slide 94

Slide 94 text

© SIOS Technology, Inc. All rights Reserved. さらに進化︕︕Visual Studio Code、Dockerで改善︕︕ 94 本セッションの ブログのURL ④ ソースコードの修正およびGitへのPush ①をクリックして、Commitのコメントを⼊⼒し、②をクリックしてCommitします。

Slide 95

Slide 95 text

© SIOS Technology, Inc. All rights Reserved. さらに進化︕︕Visual Studio Code、Dockerで改善︕︕ 95 本セッションの ブログのURL ④ ソースコードの修正およびGitへのPush 先程GitにCommitしたファイルをPushします。「図9 GitへのPush」の⾚い枠の部分をクリックする とPushは完了します。 ホストPCのブラウザからhttp://localhost/にアクセスすると、ブラウザ上に「fuga」と 表⽰されるはずです。

Slide 96

Slide 96 text

© SIOS Technology, Inc. All rights Reserved. さらに進化︕︕Visual Studio Code、Dockerで改善︕︕ 96 本セッションの ブログのURL ココ(⑤)については今回は割愛させて頂 きます。実際は、Azure Kubernetes ServiceやWeb App for Containersなど にデプロイすることになるかと思います。

Slide 97

Slide 97 text

© SIOS Technology, Inc. All rights Reserved. 最後に︕︕ 97 本セッションの ブログのURL 【連載】WSL2、Visual Studio Code、DockerでグッとよくなるWindows開発環境 https://tech-lab.sios.jp/archives/21023 Visual Studio CodeのRemote DevelopmentとDockerで快適な開発環境 をゲット https://tech-lab.sios.jp/archives/18677 【連載】世界⼀わかりみが深いコンテナ & Docker⼊⾨ https://tech-lab.sios.jp/archives/18811 WSL2で劇的に変わるあなたのWebアプリケーション開発環境 https://tech-lab.sios.jp/archives/18431 関連ブログ