VisualStudioCode + Java + SpringBoot

#VisualStudioCode + Java + SpringBoot

## はじめに

Java開発にどんなエディタを使っているでしょうか？

- Eclipse
- InteliJ
- NetBeans

などが有名です。
私自身、仕事上Javaを書くことが非常に多いのですが、IDEはEclipseですね。
Pleiades All in Oneが多いですね。
やはり、よく使うものがあらかじめインストールされているから、構築にかかるコストが低いのが一番だからではないでしょうか
ただ、Eclipseは重いんですよね…特に起動が…

## VisualStudioCode

Microsoftが提供しているVisualStudioのテキストエディタです。
Windowsはもちろん、macOS・Linuxにも対応しています。
高速起動・軽いので最近はよく使っています。
テキストエディタなんですが、多彩なプラグインやデバッグ機能を標準搭載しておりでほぼプラグインと設定次第でほぼIDEのように使えます。

## VisualStudioCode + Java + SpringBoot

そんなVisualStudioCodeは、様々な言語の開発ができます。
最近知ったんですが、Javaの開発もできると…
ということでJavaの環境構築とSpringBootも使えるということなのでSpringBootの環境構築を備忘録で残しておきます。

### VisualStudioCodeのダウンロードとインストール(win)

Windowsの環境構築です。

- [ここ](https://azure.microsoft.com/ja-jp/products/visual-studio-code/)でダウンロードします。
- ダウンロードしたVSCodeUserSetup-x64-X.XX.X.exeを起動する。
- 「Visual Studio Code セットアップウィザードの開始」で「次へ(N) >」を押下する。
- 「使用許諾契約書の同意」で「同意する(A)」にチェックを入れて「次へ(N) >」を押下する。
- 「インストール先の指定」でインストール場所を指定する。デフォルトでもいいですがC直下にしてみました。
- 「次へ(N) >」を押下する。
- 「プログラムグループの指定」でそのまま「次へ(N) >」を押下する。
- 「追加タスクの選択」で以下を選択する。

```
* 「エクスプローラーのファイル コンテキスト メニューに[Code で開く]アクションを追加する」
* 「エクスプローラーのディレクトリ コンテキスト メニューに[Code で開く]アクションを追加する」
* 「サポートされているファイルの種類のエディターとして、Codeを登録する」
* 「PATHへの追加(再起動後に使用可能)」
```
を選択します。

* 「次へ(N) >」を押下する。
* 「インストール準備完了」で「インストール(I)」を押下する。
* 「インストール状況」ののち、「Visual Studio Code セット アップウィザードの完了」で「完了(F)」を押下する。

### 拡張機能の追加

VisualStudioCodeの拡張機能(プラグイン)を追加します。

- 日本語化：Japanese Language Pack for Visual Studio Code
- Java開発：Java Extension Pack

### JDKのインストール

JDKをインストールし、環境変数を追加してください。(略)

### Java:Homeの設定

- 「Ctrl」 + 「,」で「設定」ウィンドウを開く。
- 「設定の検索」で「Java:Home」と入力すると以下が表示される。

```
Java: Home
Specifies the folder path to the JDK (8 or more recent) used to launch the Java Language Server.
On Windows, backslashes must be escaped, i.e.
"java.home":"C:\\Program Files\\Java\\jdk1.8.0_161"
```

「setting.jsonで編集」を押下する。

```json:setting.json
{
    "java.home": "C:\\XXXX\\Java\\jdk1.8.0_131"
}
```

JDKが配置されているところまでのパス(JAVA_HOME)をsetting.jsonに記載します。

これで、Javaの開発に関する最低限のところは完了しました。

### Javaプロジェクトの作成

Javaプロジェクトを作成してみます。

- 「Ctrl」 + 「Shift」 + 「P」で「コマンドパレット」を表示し、以下を入力。

```
Java: Create Java Project
```

- 「フォルダーを指定」でworkspaceとするディレクトリを設定します。

- 「Input a java project name」でJavaプロジェクトの名前を指定します。

- 新しいウィンドウが表示されプロジェクトが表示されます。
  プロジェクトの中にはbinとsrcディレクトリがあり、中にApp.classとApp.javaがあります。

### 便利な機能

- App.javaのmainメソッドの上にRun | Debugがあります。
  Runで実行、Debugでデバッグ実行です。

- ブレークポイントは左に表示されている数字のさらに左にフォーカスすると赤い丸が表示されるので表示されている状態でクリックするとブレークポイントを設置できます。

- 実行引数はデバッグ→歯車アイコン→launch.json
実行構成に"args":を追加することで実行引数を渡すことができます。

```json
{
    "configurations": [
        {
            "type": "java",
            "name": "CodeLens (Launch) - App",
            "request": "launch",
            "mainClass": "app.App",
            "projectName": "test_project",
            "args": "" ← これ
        }
    ]
}
```

- コードフォーマット：「Alt」 + 「Shift」 + 「F」

- コンソールの使用

launch.jsonに

```json
  "console": "integratedTerminal",
```
  を設定する

### SpringBoot

SpringBootを使えるようにするため、拡張機能を追加します。

- SpringBootの拡張機能:「Spring Boot Extension Pack」
- Lombokの拡張機能：「Lombok Annotations Support for VS Code」

### SpringBootプロジェクト

SpringBootプロジェクトを作成します。

- 「Ctrl」 + 「Shift」 + 「P」で「コマンドパレット」を開き、以下を入力。

```
Spring Initializr: Generate a Maven Project
```

- Specify project langueage.で「Java」を入力(選択)
- Input Group Id for your project.で「Group ID」を入力
- Input Arifact Id for your project.で「Arifact ID」を入力
- Specify Spring Boot versionで「2.1.6」を入力(選択)
- Search for dependenciesで以下を選択

```
* Spring Web Starter
* Spring Boot DevTools
* Lombok
* Thymeleaf
* MySQL Driver
* MyBatis Framework
```

- Selected 6 dependenciesを押下

### DBの設定

- MySQLのインストール(略)
- DBの作成

```sql
CREATE DATABASE test_db CHARACTER SET utf8;
```

- テーブルの作成

```sql
CREATE TABLE IF NOT EXISTS
member                                              -- テーブル名
(
    MAIL_ADDRESS varchar(255) NOT NULL PRIMARY KEY  -- メールアドレス：PK
    ,NAME varchar(255) NOT NULL                     -- 名前
    ,CREATED_DATE datetime                          -- 登録日時
    ,CREATED_USER varchar(255)                      -- 登録者
    ,UPDATED_DATE datetime                          -- 更新日時
    ,UPDATED_USER varchar(255)                      -- 更新者
);
```
- application.propertiesにDBの接続設定を追加

```properties:application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/test_db
spring.datasource.username=root
spring.datasource.password=
```

- アプリケーションを立ち上げ、```http://localhost:8080/```とアプリにアクセスできます。

### MyBatis Generator

ORマッパーとしてMyBatisを使用しています。
MyBatisにはMyBatis GeneratorというDBからjavaファイルを自動生成してくれるツールがあり
Eclipseではプラグインをインストールすると使えたのですが
VisualStudioCodeでは、どうすればいいのかを考えてみました。

- mybatis-generatorのダウンロード

[ここ](https://github.com/mybatis/generator/releases)でmybatis-generator-core-X.X.X.zipをダウンロードし、解凍する。

- 解凍した資材の中のlib/mybatis-generator-core-X.X.X.jarをsrc/main/resourcesに配置する
- generatorConfig.xmlの配置する

src/main/resources/generatorConfig.xmlを配置する

```xml:generatorConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
<generatorConfiguration>
    <!-- JDBCドライバまでのパス -->
    <classPathEntry location="/Users/XXX/XXX/mysql/mysql-connector-java/8.0.16/mysql-connector-java-8.0.16.jar"/>
    <context id="local">
        <!-- 接続先DB情報 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/test_db?useSSL=false&amp;nullCatalogMeansCurrent=true" userId="root"
                        password="" />
        <!-- Model(Entity)作成先 -->
        <javaModelGenerator targetPackage="xxx.xxx.app.db.entity"
                        targetProject="/Users/XXX/Documents/workspace/xxx/src/main/java" />
        <!-- Mapper.xml作成先 -->
        <sqlMapGenerator targetPackage="xxx.xxx.db.mapper"
                        targetProject="/Users/XXX/Documents/workspace/xxx/src/main/resources" />
        <!-- Mapper.java作成先 -->
        <javaClientGenerator targetPackage="xxx.xxx.db.mapper"
                        targetProject="/Users/XXX/Documents/workspace/xxx/src/main/java"
                        type="XMLMAPPER" />
        <!-- 生成対象テーブル -->
        <table schema="test_db" tableName="member" ></table>
    </context>
</generatorConfiguration>
```

- mybatis-generatorの起動
powershell(VSCode内)起動
xxx\src\main\resourcesに移動して以下のコマンドをキック

```powershell:powershell
> java -jar .\mybatis-generator-core-X.X.X.jar -configfile .\generatorConfig.xml -overwrite
```