DockerでSpringbootの開発環境を構築する(InteliJ IDEA編)

DockerでSpringbootの開発環境を構築する(InteliJ IDEA編)

目次

この記事では、Java SpringBoot を利用してWebアプリケーションを開発する為のDockerを利用した環境構築手順についてご紹介します。

※ この環境を利用する為には、事前にdocker、docker-composeが動作する状態であることが前提条件です。

Windowsの場合は、以下を参考に事前に「WSL」と「Docker Desktop for Windows」を用意してください

WSLのインストール

Windowsをご利用している方は、Dockerを利用する為にシェルコマンドを実行できる環境を用意する必要があるため、以下を参考にしてWSLをインストールしてください。

https://docs.microsoft.com/ja-jp/windows/wsl/install

WSLをインストールしたらUbuntuのターミナルを起動します。

# 初回起動時に、ユーザ名とパスワードが聞かれます。
# 何も入力せずにEnterを押すとroot ユーザーで利用できるようになるので、rootユーザーとして設定します。

# 初めにライブラリを最新化します。
$ apt update

# 日本語に対応しておきます。
$ apt -y install language-pack-ja
$ update-locale LANG=ja_JP.UTF8
$ apt -y install manpages-ja manpages-ja-dev

Docker Desktop for Windows のインストール

Windowsをご利用している方は、以下を参考にしてDocker Desktop for Windowsをインストールしてください。

参考 https://docs.docker.com/docker-for-windows/install/

↓コマンドプロンプトでバージョンが表示されればOK
docker --version

WSL2から、Docker for Windows を利用できるようにする(Windowsの場合)

  1. 通知領域から、dockerのアイコンを右クリックして、Settingを選択
  2. Generalのexpose deamon on~~のチェックを入れます。
  3. ResourcesのWSL INTEGRATION から、”Ubuntu” をスイッチをONにします。
# WSL 側のルートを Docker for Windows に合わせるように WSL のマウント設定を行います。
$ vi /etc/wsl.conf
---
[automount]
root = /
options = "metadata"
---

# 以下のように Cドライブのパスが"/mnt/c/"→"/c/" に変更されていれば正常です。
$ cd /c/Users/USER/github
$ pwd
/c/Users/USER/github

# WSL 上にDockerとDocker Composeをインストールする。
$ apt install docker
$ apt install docker-compose

これでWSLからWindows側にインストールしたDockerが利用できるようになります。

ソースコードをダウンロードする

こちら から「use this template」をクリックして自分のGithubリポジトリに複製して、Githubからローカルにダウンロードしてください。

Windows の場合はWSL側ではなく、必ずWindows側のディレクトリに配置してください。 WSL側でSpringbootを起動した場合はホスト側のブラウザからアクセスが出来なくなってしまいます。

# ソースコードを配置したいディレクトリに移動する
cd /c/Users/USER/github

# Githubからソースコードをダウンロードする
git clone git@github.com:xxxx/java-springboot-boilerplate.git

WSL の場合は、MySQLのConfファイルがWindows側のディスクにあると権限の違いでDockerコンテナがロードできなくなるのでWindows側で読み取り専用に変更してください

https://github.com/isystk/java-springboot-boilerplate/raw/master/wsl-mysql.png

IntelliJ IDEAのインストール

IntelliJ IDEA をダウンロードしてインストールを行います。無料のCommunity版で問題ありません。

# コードフォーマッターを設定する
「Preferences - Editor - Code Style - Java」にて、Schemeのところの設定アイコンから、"intellij-java-google-style.xml" をインポートする。

# Lombok pluginをインストールする(既にインストールされている場合は不要です)
「Preferences - Plugins - Marketplace」から、"Lombok"をインストール後、InteliJを再起動する

# Annotation Processingを有効にする
「Preferences - Build,Execution,Deployment - Compiler - Annotation Processors」から、
”Enable annotation processing” を有効にする

# デバック時のホットスワップを有効にする
「Preferences - Advanced Settings - Compiler」から、”Allow auto-make to start even if developed application is currently running” を有効にする。

MySQL Client のインストール

# MySQLに接続する為のコマンドをインストールします。(バージョンは何でもOKです)

# Windowsの場合
$ apt install mysql-client

# Macの場合
$ brew install mysql-client

Node.js のインストール

# Windowsの場合
$ curl -L git.io/nodebrew | perl - setup

# Macの場合
$ brew install nodebrew

# nodebrew をシェルのパスに追加する
$ echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.bashrc

# Node.js をインストール 
$ mkdir -p ~/.nodebrew/src
$ nodebrew ls-remote
$ nodebrew install v16.13.1
$ nodebrew use v16.13.1
$ npm install -g yarn

📦 ディレクトリ構造

.
├── docker
│   ├── mysql (DBサーバー)
│   │   ├── conf.d (mysqlの設定ファイル)
│   │   └─── logs (mysqlのログ)
│   ├── nginx (Webサーバー)
│   │   ├── conf.d (nginxの設定ファイル)
│   │   ├── logs (nginxのログ)
│   │   └── ssl (SSL自己証明書)
│   ├── phpmyadmin (DB管理コンソール)
│   ├── s3 (Minio)
│   ├── solr (検索エンジン)
│   │   ├── data (solrのデータファイル)
│   │   └── logs (solrのログ)
│   └── docker-compose.yml
├── batch (バッチ)
│   └── src
│       └── main
│           ├── java
│           └── resources
├── business (共通ロジック)
│   └── src
│       └── main
│           ├── java
│           └── resources
│               ├── doma-gen (doma2のジェネレータ)
│               └── sample.a5er (ER図)
├── htdocs
│   └── thumb (アップロード画像の一時保存)
├── web (Web共通ロジック)
│   └── src
│       └── main
│           ├── java
│           └── resources
├── web-admin (管理画面)
│   └── src
│       └── main
│           ├── java
│           └── resources
├── web-front (フロント画面)
│   ├── src
│   │   └── main
│   │       ├── java
│   │       └── resources
│   └── resources (フロントエンドモジュール)
│       ├── node_modules
│       ├── package.json
│       ├── public
│       ├── src
│       │   ├── @types
│       │   ├── __test__
│       │   ├── auth
│       │   ├── components
│       │   ├── constants
│       │   ├── index.tsx
│       │   ├── pages
│       │   ├── react-app-env.d.ts
│       │   ├── reportWebVitals.ts
│       │   ├── router.tsx
│       │   ├── services
│       │   ├── setupTests.ts
│       │   ├── static
│       │   ├── stores
│       │   ├── stories
│       │   ├── styles
│       │   └── utilities
│       ├── tsconfig.json
│       └── yarn.lock
├── dc.sh (Docker操作用スクリプト)
└── build.gradle (Gradle用設定ファイル)

🔧 開発環境の構築

各種デーモンを起動する

# 初期化
$ ./dc.sh init

# すべてのDockerコンテナを起動する
$ ./dc.sh start

# データベースが立ち上がるまで少し待ちます。(初回は5分程度)

# データベースが起動したら、MySQLにログインしてみる
$ ./dc.sh mysql login

Minio にS3バケットを作成する

$ ./dc.sh aws local

# バケットを作成する
aws --endpoint-url <http://host.docker.internal:9000> s3 mb s3://aws.isystk.com

# バケットを公開する
POLICY='{ "Version": "2012-10-17", "Statement": [{ "Sid": "MakeItPublic", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::aws.isystk.com/*" }] }'
aws --endpoint-url <http://host.docker.internal:9000> s3api put-bucket-policy --bucket aws.isystk.com --policy "${POLICY}"

# バケットの一覧を確認する
aws --endpoint-url <http://host.docker.internal:9000> s3 ls

# テストファイルをアップロードする
aws --endpoint-url <http://host.docker.internal:9000> s3 cp ./front.png s3://aws.isystk.com

# ブラウザでアップロードした画像を表示してみる
$ open <http://localhost:9000/aws.isystk.com/front.png>

バックエンド環境を構築する

# Gradleで利用できるタスクの一覧を確認します。
$ ./gradlew tasks

# Flywayでベースライン作成とマイグレードを実行します。
$ ./gradlew business::flywayMigrate
$ ./gradlew business::flywayInfo

# (既存のSQLを修正するなどして整合性エラーになる場合は以下を実施してください。) 
$ ./gradlew business::flywayRepair
# (すべてのオブジェクトを削除して初期化したい場合は以下を実施してください。)
$ ./gradlew business::flywayClean

# バッチを実行して商品マスタデータを登録する
# ※ Windowsの場合はWSLからコマンド実行ではなくInteliJ側のGradleから起動しないと正常に動作しないので注意してください。
$ ./gradlew batch::bootRun -Pargs=--job=importMstJob

# 管理画面側のアプリケーションを起動します。
# ※ Windowsの場合はWSLからコマンド実行ではなくInteliJ側のGradleから起動しないとブラウザからアクセスできないので注意してください。
$ ./gradlew web-admin::bootRun

# バッチを実行してSolrに商品データをインデックスする
# ※ Windowsの場合はWSLからコマンド実行ではなくInteliJ側のGradleから起動しないと正常に動作しないので注意してください。
$ ./gradlew batch::bootRun -Pargs=--job=solrRegistJob

# フロント側のアプリケーションを起動します。
# ※ Windowsの場合はWSLからコマンド実行ではなくInteliJ側のGradleから起動しないとブラウザからアクセスできないので注意してください。
$ ./gradlew web-front::bootRun

フロントエンド環境を構築する

# フロントエンドをビルドする。
$ cd web-front/resources 
$ yarn 
$ yarn build

🖊️ Docker 操作用シェルスクリプトの使い方

Usage:
  $(basename ${0}) [command] [<options>]

Options:
  stats|st                 Dockerコンテナの状態を表示します。
  init                     Dockerコンテナ・イメージ・生成ファイルの状態を初期化します。
  start                    すべてのDaemonを起動します。
  stop                     すべてのDaemonを停止します。
  nginx restart            NginXを再起動します。
  mysql login              MySQLデータベースにログインします。
  mysql export <PAHT>      MySQLデータベースのdumpファイルをエクスポートします。
  mysql import <PAHT>      MySQLデータベースにdumpファイルをインポートします。
  mysql restart            MySQLデータベースを再起動します。
  --version, -v     バージョンを表示します。
  --help, -h        ヘルプを表示します。

PhpMyAdmin

MySQLデータベースに接続してデータの参照や編集が可能です。Dockerを起動後に利用可能です。

Mailhog

ダミーのメールサーバーです。実際にはメールは送信されず、送信されたメールはブラウザで閲覧できます。Dockerを起動後に利用可能です。

Minio

S3に準拠したダミーのオブジェクトストレージです。Dockerを起動後に利用可能です。

Solr

Solrの管理コンソールです。インデックスされたデータを検索したり出来ます。Dockerを起動後に利用可能です。

Swagger

作成したAPIの一覧を確認したりデータを検索できます。フロントを起動後に利用可能です。

ソースコード

https://github.com/isystk/java-springboot-boilerplate

コメントを残す

入力エリアすべてが必須項目です。メールアドレスが公開されることはありません。

内容をご確認の上、送信してください。