SpringBoot on IntelliJ IDEA Community version.

# この記事について
社内の勉強会でSpringBootを使うのですが、STSはちょっと重いので、IntelliJ IDEAを使おうと思っています。
経験の浅いメンバーも多いので、IDEのセットアップ方法などから比較的丹念に記述しようと思います。
使うライブラリなどの構成は、以下のとおりです。

- SpringBoot 1.5.3
- h2 database(そのうち他のDBに乗り換えるかも)
- JPA
- Thymeleaf
- LOMBOK
- JMS(当面出番なし)
- SpringBatch(当面出番なし)

なお、1Entityのみ作成した状態のInitial commit版を下記にUPしてあります。
https://github.com/akiraabe/bookshelf/tree/tag-0.0.1

## アプリの機能
ざっくり言うと書籍管理です。どちらかというと本自体を管理するというよりは本に関連したナレッジの蓄積とそのデータの活用というのをテーマにしています。(SpringBootでやるのは情報の管理までです)

# IntelliJ IDEAのセットアップ
JDKはインストール済みという前提にします。また、Eclipseなどを多少利用している経験者を想定して記載します。
## IDEAインストール
まずは、IDEAのインストールですが、ここは詳細は省略します。以下に本家のURLのみ記載しておきます。
https://www.jetbrains.com/idea/
Community版の方を選択してください。（Ultimateは有償です）

## プロジェクトをVCS(Version Control System:今回はGitHub)から作成
状況によって起動後の画面が異なりますが既存プロジェクトがない場合は以下の画面が立ち上がります。
ここで、[Check out from Version Control] > [GitHub]を選択してください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/130262/db8a59af-5f74-03d0-bf81-7ea3cace1216.png)

次に、GitHubのリポジトリのURLやローカルのプロジェクト作成先のPathを設定します。
※以下の画面はデフォルトのプロジェクトPathと異なっていますが特に深い意味はありません。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/130262/e4d7cd06-be00-0ee1-19e2-adaf47269706.png)

"Check outが完了したので、プロジェクトを開くか？"と聞いてきますので、[Yes]で応答してください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/130262/5270250a-e4bb-b82e-b013-bab8216f4131.png)

IDEAを起動してプロジェクトの構成を展開した状態では、下の図のようになっていると思います。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/130262/6877b6a5-96fa-db47-1953-0831fe8a9847.png)

## ここで、いくつか設定を行ないます。

### LOMBOKを使えるようにする
LOMBOKとは何か？についてはググってください（雑）。

#### LOMBOKのPluginをIDEAにインストールする
[File] > [Settings] > [Plugins]として、以下の画面にたどり着いてください。
※PluginはIDEのインストール時にあわせてインストールする方法もあります。

ここで、search画面にlombokと入力します。No Plugins found Search in repositories.というリンクが表示されるのでそれをクリックします。
そうすると、以下の画面からPluginをインストール出来ます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/130262/43ab63b8-11b4-ce3e-00ab-5601c987135c.png)

インストールしたらIDEAの再起動を要求されるはずなので応じてください。

#### Annotation Processingを有効化する
[File] > [Settings] > [Build,Execution...] > [Compiler] > [Annotation Processors]として、以下の画面にたどり着いてください。
ここで、[Enable annotation processing]をチェックし、OKをクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/130262/11af6710-30dc-00ac-3555-71faa7dedea6.png)

### Keyアサインを変更する（お好みで）
IDEAのKeyアサインはかなり独特なので、好みのアサインに変える方が多いそうです。私は慣れの問題でEclipseのキーアサインに変更しています。好みの問題ですが、Eclipseからの乗り換え組にはおすすめです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/130262/9563269c-4a0a-e2c2-d388-22372c41788e.png)

## ようやくBuild…
これで無事にBuildが出来ます。

IDEAの画面下部にある[Terminal]というボタンをクリックし、Terminalを立ち上げます。
以下のような画面になるはずです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/130262/079f7b43-0810-ced2-00d2-2325a0670ea1.png)

ここで、`mvn package`と入力し、Buildします。
※mavenは事前にインストール必要と思います。
ここからダウンロードして、pathを通しておいてください。
https://maven.apache.org/

![image.png](https://qiita-image-store.s3.amazonaws.com/0/130262/cd77123f-c3dc-5f38-45ef-a8e0164d4849.png)

BuildがSuccessとなっていることを確認してください。エラーの際には色々調査が必要ですので、勉強会関係者の方は直接ご連絡ください。（その他の方はコメントくだされば、可能な範囲で対応しますが、ベストエフォートということでご了解ください）
![image.png](https://qiita-image-store.s3.amazonaws.com/0/130262/6bc49ef7-1bc5-e255-895e-495d6361ceaa.png)

## SpringBoot Applicationの起動
SpringBootの特徴の一つに、jarを作ればWebアプリが実行できるというのがあります。
従来のWebアプリは、WebApplicationServer(Tomcatなど)や、RDBMSを別途起動し、Deployしてというのが通常であり、環境設定にかなり手間がかかっていました。
SpringBootのアプリケーションもWarを作成しDeployすることももちろん出来ますが、それよりもお手軽に、mainメソッドを持ったJavaApplicationをIDEから起動することで、Webアプリの実行が可能です。

実際にやってみたほうがわかりやすいですね。
トップパッケージの位置に、プロジェクト名＋ApplicationというJavaファイルがありますので、これを実行します。(今回は、BookshelfApplication.java)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/130262/f9738de2-1f27-41ae-dfc1-dfa48a1f6e58.png)

以下が起動に成功した状態です。
ポイントとして、コンソール上部にCreate Table文が見えます。これはJPAに与えるパラメータ設定で、起動時にcreateテーブルをする方法をとっているためです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/130262/2f3ed413-6107-6d64-c993-634d73f8696b.png)

## アクセスしてみる
http://localhost:8080/book
で書籍一覧にアクセス出来ます。
SpringSecurityを組み込んであるので、とりあえず現時点ではBasic認証を求められます。
その際には、user=user, password=passwordとして入力してください。(意識の低い設定ですが、設定ファイルをGitHubにさらしている関係上あえて)

現時点では非常に地味ですが、これから随時拡張していきましょう！
![image.png](https://qiita-image-store.s3.amazonaws.com/0/130262/6a7af4c9-1c3c-1ef0-20fa-cb4754d22b6a.png)

とりあえず以上です。

## PostgreSQLのインストールと設定に関する追記（2017/6/3）
データベースをh2からPostgreSQLに変更したのでインストールと必要な設定について最低限記述します。

### PostgreSQLのインストール
本家のサイトから安定版の最新をダウンロードしインストールしてください。
https://www.postgresql.org/

インストールはほぼデフォルトで構いません。
インストール中に、postresというsuperユーザのpasswordを設定しますので忘れないようにしましょう。

### 今回のアプリ用に、ロールとデータベースを生成します。
sql shell(psql)を立ち上げて以下のコマンドを入力します。

- role の作成

```sql
CREATE ROLE bookshelf WITH LOGIN PASSWORD 'bookshelf';
```

- db作成

```sql
CREATE DATABASE bookshelf OWNER bookshelf;
```

なお、CREATE TABLEなどは、
bookshelf/src/main/resources/schema.sql
に記載してあり、SpringBootの起動時に実行されるので、ここでは考慮不要です。