Slide 1

Slide 1 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup #3 〜 VS Code + Docker + Remote Developmentで Tomcat上のWebアプリを 超簡単にデバッグ 〜 技術部 2020年2⽉19⽇ 武井 宜⾏ サイオステクノロジー株式会社

Slide 2

Slide 2 text

© SIOS Technology, Inc. All rights Reserved. About me 2 Internal Only BCPVUNF Noriyuki TAKEI ෢Ҫ ٓߦ Information • サイオステクノロジー株式会社 • クラウドネイティブアプリケーション • 千葉県在住 Favorites • Azure • Squash • Sweets blog https://tech-lab.sios.jp/ core skill Azure Kubernetes Service Azure Bot Service

Slide 3

Slide 3 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 3 Internal Only みなさん、 Visual Studio Codeの Remote Development 使ってますか︖ 本セッションの ブログのURL

Slide 4

Slide 4 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 4 Internal Only リモートサーバー上のコードを直接編集が可能 SSHで接続可能なリモートサーバーやコンテナ、WSL上に あるファイルをVisual Studio Codeから直接編集できる Remote Developmentとは︖ 拡張機能をリモートサーバーにインストールし、 リモートサーバー上で動作させることが可能 本セッションの ブログのURL

Slide 5

Slide 5 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 5 Internal Only 今回は Tomcat上の Webアプリを VS Codeでデバッグします。 本セッションの ブログのURL

Slide 6

Slide 6 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 6 Internal Only まずはちょっと イケてないやり⽅ 本セッションの ブログのURL

Slide 7

Slide 7 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 7 Internal Only 本セッションの ブログのURL OS PC Tomcat Web アプリケーション Java Visual Studio Code Tomcat for Java プラグイン ソースコード 構成はこんな感じ

Slide 8

Slide 8 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 8 Internal Only 本セッションの ブログのURL Java Extension Pack(Javaのコード補完などを⾏ってくれる便利な拡 張機能)を⼊れます。

Slide 9

Slide 9 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 9 Internal Only 本セッションの ブログのURL Tomcat for Javaプラグインを⼊れます。今回のキモです。これで Tomcat上のWebアプリを稼働・デバッグ出来ます。

Slide 10

Slide 10 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 10 Internal Only 本セッションの ブログのURL Mavenでプロジェクトの雛形を作成します。 $ mvn archetype:generate -DgroupId=com.example \ -DartifactId=helloworld \ -DarchetypeArtifactId=maven-archetype-webapp \ -DinteractiveMode=false こんなファイルとディレクトリが 出来上がります。

Slide 11

Slide 11 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 11 Internal Only サンプルのサーブレットを作成します。普通のハロワです。 package com.example; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class Hello extends HttpServlet { private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { PrintWriter out; res.setContentType("text/html; charset=utf-8"); out = res.getWriter(); out.println(""); out.println("

Hello World!

"); out.println(""); } } Hello.java 本セッションの ブログのURL

Slide 12

Slide 12 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 12 Internal Only 本セッションの ブログのURL 先程作成したHello.javaを以下のようなディレクトリを作成して配置 します。

Slide 13

Slide 13 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 13 Internal Only おなじみのpom.xmlです。 4.0.0 com.example helloworld war 1.0-SNAPSHOT helloworld Maven Webapp http://maven.apache.org 1.6 1.6 pom.xml 本セッションの ブログのURL

Slide 14

Slide 14 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 14 Internal Only junit junit 3.8.1 test javax.servlet javax.servlet-api 3.0.1 compile helloworld pom.xml 〜 前ページからの続き 〜 本セッションの ブログのURL

Slide 15

Slide 15 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 15 Internal Only web.xmlに以下の内容を追加します。おなじみのServletのURLマッピ ングですね。 Archetype Created Web Application Hello com.example.Hello Hello /hello web.xml 本セッションの ブログのURL

Slide 16

Slide 16 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 16 Internal Only 本セッションの ブログのURL Tomcatをダウンロードして解凍します(2020年1⽉22⽇時点での8.5 系最新バージョンです)。 $ wget http://ftp.riken.jp/net/apache/tomcat/tomcat-8/v8.5.50/bin/apache- tomcat-8.5.50.tar.gz $ tar xzvf apache-tomcat-8.5.50.tar.gz

Slide 17

Slide 17 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 17 Internal Only 解凍して出来たTomcatディレクトリをMavenプロジェクト直下に移動 します。以下のようになります。 本セッションの ブログのURL

Slide 18

Slide 18 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 18 Internal Only Visual Studio Code左メニュー部最上部の四⾓が2つ重なっているア イコンをクリックして「Open Folder」をクリックします。そして先 程作成した「helloworld」のディレクトリを選択します。 本セッションの ブログのURL

Slide 19

Slide 19 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 19 Internal Only 本セッションの ブログのURL コマンドパレットを起動します。

Slide 20

Slide 20 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 20 Internal Only 本セッションの ブログのURL 「Tomcat: Add Tomcat Server」を選択します。

Slide 21

Slide 21 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 21 Internal Only 先程Tomcatを解凍したディレクトリ(apache-tomcat-8.5.50)を選択 します。 本セッションの ブログのURL

Slide 22

Slide 22 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 22 Internal Only 本セッションの ブログのURL 画⾯左下部に「TOMCAT SERVERS」というのが表⽰され、その中に 先程選択したTomcatが表⽰されます。右クリックして「Start」をク リックします。

Slide 23

Slide 23 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 23 Internal Only 下記のように緑⾊になれば、正常に起動した証拠です。 本セッションの ブログのURL

Slide 24

Slide 24 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 24 Internal Only 本セッションの ブログのURL 「helloworld」ディレクトリに移動し、以下のコマンドを実⾏して warファイルを作成します。 $ mvn package

Slide 25

Slide 25 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 25 Internal Only 本セッションの ブログのURL targetディレクトリ配下に「helloworld.war」ができますので、それ を右クリックして「Debug on Tomcat Server」をクリックします。

Slide 26

Slide 26 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 26 Internal Only 本セッションの ブログのURL Hello.javaを開いて、任意の地点にブレークポイントを打ちます。

Slide 27

Slide 27 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 27 Internal Only 本セッションの ブログのURL 「http://127.0.0.1:8080/helloworld/hello」にブラウザでアクセス します。すると先程ブレークポイントを打ったところで⽌まりま す︕︕ステキーΣ(゚∀゚ノ)ノキャー

Slide 28

Slide 28 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 28 Internal Only 本セッションの ブログのURL イケてない・・・

Slide 29

Slide 29 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 29 Internal Only 本セッションの ブログのURL OS PC Tomcat Web アプリケーション Java Visual Studio Code Tomcat for Java プラグイン ソースコード プラグインをローカルにイ ンストールしなければなら ない。 JavaやTomcatをローカル にインストールしなければ ならない。

Slide 30

Slide 30 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 30 Internal Only 本セッションの ブログのURL それ、 Remote Developmentと Dockerで 解決できますから︕︕

Slide 31

Slide 31 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 31 Internal Only 本セッションの ブログのURL Remote DevelopmentとDockerを使うとこんな感じになります。

Slide 32

Slide 32 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 32 Internal Only 本セッションの ブログのURL 左部メニュー最下部にあるアイコン(四⾓が4つ並んでいるもの)をク リックし、「remote development」と⼊⼒し、Remote Developmentの拡張機能をインストールします。

Slide 33

Slide 33 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 33 Internal Only 本セッションの ブログのURL 次に新しいディレクトリを作成し、以下のようにファイルを作成しま す。srcディレクトリとpom.xmlは先程作成したものからまんまコピー したものです。そして今回新しく作成する必要があるのは、以下の2つ です。 • .devcontainerディレクトリとその配下のファイル • .vscodeディレクトリとその配下のファイル

Slide 34

Slide 34 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 34 Internal Only 本セッションの ブログのURL まず.devcontainer/Dockerfileの内容から説明します。コンテナを作 成するために必要なおなじみのものです。 # Tomcatのイメージをダウンロードします。 FROM tomcat:8.5.49-jdk8-openjdk # ローカルのソースコードをマウントするためのディレクトリを作成します。 RUN mkdir /opt/project # Mavenをインストールします。 RUN apt-get update && \ apt-get -y install maven Dockerfile

Slide 35

Slide 35 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 35 Internal Only 次に.devcontainer/devcontainer.jsonの内容です。VS Codeからコ ンテナを⽣成するための設定を記載します。 { # 任意の名前でOKです。 "name": "Hello", # Remoteでログインしたいコンテナを作成するためのDockerfileの名称を指定します。 "dockerFile": "Dockerfile", # この設定によりホストOSの8080宛の通信がコンテナの8080に転送されます。 "forwardPorts": [8080], # コンテナに⼊ったときに最初にここで指定したものがカレントディレクトリになります。 "workspaceFolder": "/opt/project", # ホストOSのVisual Studio Codeのプロジェクト直下のディレクトリをコンテナの/opt/projectディ レクトリにマウント>します。 "mounts": [ "source=${localWorkspaceFolder},target=/opt/project,type=bind,consistency=cached" ] devcontainer.json 本セッションの ブログのURL

Slide 36

Slide 36 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 36 Internal Only # コンテナが⽣成されたときに、コンテナ側にインストールする拡張機能です。 # これを指定しないと、コンテナが再⽣成すると拡張機能が消えます。 # 今回はJava Extension PackとTomcat for Javaをインストールします。 "extensions": [ "adashen.vscode-tomcat", "vscjava.vscode-java-pack" ] } devcontainer.json 〜 前ページからの続き 〜 本セッションの ブログのURL

Slide 37

Slide 37 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 37 Internal Only 本セッションの ブログのURL 次に.vscode/settings.jsonの内容です。これはHot Code Replaceの 定義です。これをautoにしておくと、javaファイルを変更したときに、 わざわざwarを作り直さなくても、⾃動的にTomcatに変更内容が反映 されます。 { "java.debug.settings.hotCodeReplace": "auto" } settings.json

Slide 38

Slide 38 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 38 Internal Only 本セッションの ブログのURL これで準備は整いました。Remote Developmentの機能でコンテナに 接続します。Visual Studio Codeの左隅にある緑のボタンをクリック します。

Slide 39

Slide 39 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 39 Internal Only 本セッションの ブログのURL すると以下のようなリストが表⽰されますので、「Remote- Containers: Open Folder in Container…」 をクリックします。そし て先程作成したディレクトリを選択します。

Slide 40

Slide 40 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 40 Internal Only 本セッションの ブログのURL 初回はちょっと時間がかかります。

Slide 41

Slide 41 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 41 Internal Only 本セッションの ブログのURL コマンドパレットを起動します。

Slide 42

Slide 42 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 42 Internal Only 本セッションの ブログのURL 「Tomcat: Add Tomcat Server」を選択します。

Slide 43

Slide 43 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 43 Internal Only 本セッションの ブログのURL コンテナ側のTomcatディレクトリである「/usr/local/tomcat」を選 択して、「OK」をクリックします。

Slide 44

Slide 44 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 44 Internal Only 本セッションの ブログのURL 画⾯左下部に「TOMCAT SERVERS」というのが表⽰され、その中に 先程選択したTomcatが表⽰されます。右クリックして「Start」をク リックします。

Slide 45

Slide 45 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 45 Internal Only 本セッションの ブログのURL 下記のように緑⾊になれば、正常に起動した証拠です。

Slide 46

Slide 46 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 46 Internal Only 本セッションの ブログのURL TERMINALにて「mvn package」と⼊⼒してwarファイルを作成しま す。

Slide 47

Slide 47 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 47 Internal Only 本セッションの ブログのURL targetディレクトリ配下に「helloworld.war」ができますので、それ を右クリックして「Debug on Tomcat Server」をクリックします。

Slide 48

Slide 48 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 48 Internal Only 本セッションの ブログのURL Hello.javaを開いて、任意の地点にブレークポイントを打ちます。

Slide 49

Slide 49 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 49 Internal Only 本セッションの ブログのURL 「http://127.0.0.1:8080/helloworld/hello」にブラウザでアクセス します。すると先程ブレークポイントを打ったところで⽌まりま す︕︕ステキーΣ(゚∀゚ノ)ノキャー

Slide 50

Slide 50 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 50 Internal Only 本セッションの ブログのURL 繰り返しになりますが、今回の環境は以下の通りとてもスッキリして ます。

Slide 51

Slide 51 text

© SIOS Technology, Inc. All rights Reserved. VS Code Meetup 51 Internal Only VS Code スゴイ︕︕ 本セッションの ブログのURL

Slide 52

Slide 52 text

© SIOS Technology, Inc. All rights Reserved. さいごに 52 Internal Only 本資料の内容は 以下のブログで公開しています。 技術ブログ「SIOS TECH.LAB」 https://tech-lab.sios.jp/

Slide 53

Slide 53 text

© SIOS Technology, Inc. All rights Reserved. さいごに 53 Internal Only 2019年11⽉号のSoftware Designの Azure特集に執筆しました。