IntelliJ IDEA + Maven + Tomcat 9 を利用した開発環境構築

## はじめに
タイトルの通り、開発環境構築時の内容を記載します。
同じ環境のそれっぽい記事は何個かあったのですが、要所で設定内容が違ったり、私の環境では動かすことができないことがありましたので、備忘録として残します。

本記事では、
Tomcatインストールから、サーバ起動~デプロイまでの手順を記載します。
対象環境は、 **macOS 10.13.4** です。

## TomcatインストールとMaven設定

### 1. Tomcatのインストール
[Apache Tomcat](http://tomcat.apache.org/)からダウンロードし、ローカルに展開します。もしくは、`brew` コマンドでTomcatをインストールします(2018/04/17時点では、 **Tomcat 9.0.6** がインストールされます)。

`brew`コマンドでインストールした場合は、以下場所にインストールされます。

- **<インストール先>/tomcat/9.0.6**

### 2. Tomcat Managerの設定
Tomcat Manager を利用できるように、**tomcat-users.xml** にユーザ(`user`)とロール(`role`)を設定します。

**tomcat-users.xml** は、以下場所に格納されています。

- **<インストール先>/tomcat/9.0.6/libexec/conf**

```xml
<role rolename="manager-script"/>
<role rolename="manager-gui"/>
<user username="admin" password="admin" roles="manager-script,manager-gui"/>
```

ロールの意味合いは、以下の通りです。

- **manger-script**
> *本家ドキュメントより*
 Access to the HTML interface

- **manger-gui**
> *本家ドキュメントより*
Access to the tools-friendly plain text interface that is described in this document, and to the "Server Status" page.

とりあえず、ブラウザとツールから利用できるように上記ロールを設定します。

### 3. Maven 設定ファイルのサーバ設定
後ほど利用するMaven プラグインからアクセスできるように、先に **settings.xml** にサーバ(`server`)を設定をしておきます。

**settings.xml** の格納先は設定により変わりますが、デフォルトであれば以下場所に格納されています。

- **<ユーザホーム>/.m2**

```xml
<servers>
   <server>
     <id>localhost</id>
     <username>admin</username>
     <password>admin</password>
   </server>
</servers>
```

サーバID(任意)と先ほど追加した管理者ユーザのユーザ名とパスワードを設定します。

## アプリケーション作成とサーバ起動

### 4. IntelliJでアプリケーションを作成
IntelliJ を起動し、[New] -> [Project]を選択します。次に、[New Project]ダイアログが表示されるので、画像の通り、 [**Maven**] -> [Create from archetype] -> [maven-archetype-webapp]　を選択し、[Next]をクリックします。 

<img width="842" alt="01_intellij_new_project.png" src="https://qiita-image-store.s3.amazonaws.com/0/170140/b9628a09-cfb1-d7a8-5e11-a05efa1e387a.png">

[GroupId] と [ArtifactId] を入力し、[Next]をクリックします。

<img width="842" alt="02_intellij_new_project.png" src="https://qiita-image-store.s3.amazonaws.com/0/170140/889f2334-3fec-3eb2-c326-b6a386cbd0d4.png">

内容に問題がなければ、[Next]をクリックします。

<img width="841" alt="03_intellij_new_project.png" src="https://qiita-image-store.s3.amazonaws.com/0/170140/cd934c06-3859-ce92-0bdd-eef94573e4d4.png">

プロジェクトの保存先を指定し、[Finish]をクリックします。
<img width="840" alt="04_intellij_new_project.png" src="https://qiita-image-store.s3.amazonaws.com/0/170140/3211e5b8-ccfb-0b4a-95ee-91df34fee001.png">

プロジェクト作成はここまでです。
プロジェクト画面が開いたら、リポジトリの自動ダウンロードを設定しておくと便利です。

### ５. Tomcatの設定

次に、**pom.xml** を修正していきます。ここでは、プラグインのみを追加します。
`configuration`では、`settings.xml`に追記した`id`を`<server>`に指定します。

<img width="1129" alt="05_intellij_pom_edit.png" src="https://qiita-image-store.s3.amazonaws.com/0/170140/156f58df-1dfc-c8ed-7d8b-92279805cc61.png">

右上の[Edit Configurations...]をクリックします。

<img width="1134" alt="06_intellij_edit_configuration.png" src="https://qiita-image-store.s3.amazonaws.com/0/170140/2a355d96-9313-12d5-71ab-436bcef815ea.png">

左ペインから[Tomcat Server] -> [Local]を選択します。次に、右上の[Configure]をクリックします。

<img width="1002" alt="07_intellij_tomcat_setting.png" src="https://qiita-image-store.s3.amazonaws.com/0/170140/b61e4595-83c0-7b6d-e772-f7b0f72c945c.png">

[Tomcat Server]ダイアログの[Tomcat Home]に、Tomcatのインストールディレクトリを指定します。
今回の場合は、**<インストール先>/tomcat/9.0.6/libexec** となります。入力が完了したら、[OK]をクリックします。

<img width="1004" alt="08_intellij_tomcat_setting.png" src="https://qiita-image-store.s3.amazonaws.com/0/170140/cacfcf4f-0079-9607-a4ed-257e574ad5e2.png">

[Server]画面に戻り、[Application Server]に**Tomcat 9.0.6**と表示されていることを確認し、[OK]をクリックします。

<img width="1001" alt="09_intellij_tomcat_setting.png" src="https://qiita-image-store.s3.amazonaws.com/0/170140/3d0b023a-8349-769c-30f4-136beb60e530.png">

次に、左上の[+]ボタンをクリックし、[Tomcat Server] -> [Local] を選択します。

<img width="1003" alt="10_intellij_tomcat_add_setting.png" src="https://qiita-image-store.s3.amazonaws.com/0/170140/068453b0-d6f4-1a17-c68b-c35f75cd84e6.png">

[Name]に任意の設定名(demo-server)を入力し、[Application Server]では、**Tomcat 9.0.6** を選択します。次に、[Deployment]をクリックします。

<img width="1003" alt="11_intellij_tomcat_add_setting.png" src="https://qiita-image-store.s3.amazonaws.com/0/170140/a1f14d6a-f613-0144-9aa3-da86ef784594.png">

[+]ボタンをクリックする。次に、[Select Artifacts Deploy]ダイアログで、デプロイするアプリケーション(demo.war)を選択し、[OK]をクリックします。

<img width="1001" alt="12_intellij_tomcat_add_setting.png" src="https://qiita-image-store.s3.amazonaws.com/0/170140/90247bd1-3043-41eb-4eae-eaec7d3ed60e.png">

[Application context]に、コンテキストルートを設定し、[OK]をクリックします。

<img width="1002" alt="13_intellij_tomcat_add_setting.png" src="https://qiita-image-store.s3.amazonaws.com/0/170140/621a0008-9c2e-7d14-e211-69364f79afe5.png">

### 6. Tomcat 起動と再デプロイ
トップ画面に戻り、右上を[demo-server]に設定し、実行[>]ボタンをクリックします。

<img width="1129" alt="14_intellij_top.png" src="https://qiita-image-store.s3.amazonaws.com/0/170140/baf1a068-b15d-ec6a-b655-29aa765a38c2.png">

画面下にコンソールが出力されるので、エラーが出ないことを確認します。

<img width="1131" alt="15_intellij_run_server.png" src="https://qiita-image-store.s3.amazonaws.com/0/170140/c4988428-d4c9-deda-46e4-a816fc2ebdd0.png">

トップページが表示されることを確認します。デフォルトでは、**Hello World!** と出力されます。

<img width="1027" alt="16_welcom_page.png" src="https://qiita-image-store.s3.amazonaws.com/0/170140/8a39ccc3-f84e-28c8-ba78-6a26b08088fb.png">

ここまでの流れで、サーバが起動し、トップ画面が表示されることが確認できました。
次にファイルを修正し、デプロイする流れを確認していきます。

IntelliJに戻し、JSPを修正します。今回は、Hello World!をHello World!!!に修正します。
次に、[Maven Project] -> [tomcat7:deploy]をクリックします。

<img width="1131" alt="17_intellij_edit_jsp.png" src="https://qiita-image-store.s3.amazonaws.com/0/170140/b459bf97-3841-3914-3ad9-9b74b9f94fd2.png">

画面下にコンソールが出力されるので、エラーが出ないことを確認します。

<img width="1129" alt="18_intellij_app_deploy.png" src="https://qiita-image-store.s3.amazonaws.com/0/170140/12b5ffa0-f355-a21c-5143-6e9e00b83780.png">

ブラウザに戻り、先ほど表示していた画面をリロードします。Hello World!!!に変わっていることを確認します。

<img width="1026" alt="19_reload_welcome_page.png" src="https://qiita-image-store.s3.amazonaws.com/0/170140/39032965-e0ad-9e4b-ad2a-74c9ece3e0fa.png">

## 最後に
長ったらしい手順みたいになってしまいましたが、最後まで読んでいただきありがとうございます。

今回は、今までよく使われていたような構成で開発環境構築をしてみました。
私ごとですが、現在の業務では、Windows + Eclipse + Tomcatといった環境で作業しているため、Mavenプラグインの設定部分やIntelliJの設定部分で結構はまってしまいましたが、一応調べきり、動作するところまで確認できたので、よかったと思っています。

本記事に関するツッコミなどがあれば、ご連絡いただければと思います。