ちょっと話題の記事

第3回 Spring開発環境の整備

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

【求人のご案内】Javaアプリ開発エンジニア募集

よく訓練されたアップル信者、都元です。大変お待たせいたしました。評判がそこそこ良いのは知っていたのですが、AWSネタに押し流されて放置してしまいました。ただ、私のSpring愛は衰えておりませんので、ぼちぼちと続きを書いて行きたいと思います。冷静に見ると5ヶ月も間を開けてしまいましたね。ごめんなさいごめんなさい。というわけで、下記をおさらいの上、読み進んでみてください。(私も読んでから書かないと流れが掴めませんw)

  1. 第1回 はじめてのSpring Framework
  2. 第2回 Springの様々な設定記述 – AnnotationもJavaもあるんだよ

というわけで、前回までは、DIコンテナの考え方や、beanの定義方法 *1等について解説しました。手続き的な記述と宣言的な記述の分離など、思い出して頂けましたでしょうか。

さて今回はちょっと毛色を変えて、Springを使ったJava開発の開発環境についてご紹介します。

Java開発環境と言えば、最近IntelliJ IDEAの隆盛が目覚ましい限りですが、ワタクシ、IDEAの機能を解説できるほど使い込めておりません。IntelliJ IDEA派の方は、申し訳ありませんがこの辺りを見てください。まぁ多分IntelliJであれば特にインストール等何もせずに、上手い事Springに対応してくれると思います。

Eclipseプラグインの整備

というわけで、本エントリではEclipseをベースにした環境のご紹介になります。まずはEclipseをダウンロードしましょう。Eclipseダウンロードサイトから、Eclipse 4.3 (Kepler) ベースのもので、自分のプラットフォームに合ったもの(ここではMac OS X 64bitで検証しています)をダウンロードしてください。Eclipseには「Eclipse IDE for Java EE Developers」や「Eclipse IDE for Java Developers」等、本当に数多くのディストリビューションがあります *2。が、とりあえず「Eclipse Classic IDE for Java EE Developers」が無難 *3と覚えておいて頂ければと思います。

Spring Tool Suite (STS)の導入

2013-08-28_1046

メニューバーのHelpより「Eclipse Marketplace...」を開くと、プラグインの検索画面が出てきますので、「STS」で検索して下図のプラグインのInstallボタンを押しましょう。

2013-08-28_1058-sts

次に現れるプラグインの詳細画面ですが、正直私も、どのプラグインがどの部分の機能を担っているのか、きちんと把握できていませんw ひとまず、下の方は今の所個人的に使う機会が全くないので、いつもこんな感じに選択しています。もっと用途が見えていれば、Springのどのコンポーネントを使うのかに応じて絞ると良いでしょう。まぁ全部選択しても大きな問題にはならないかもしれません。

2013-08-28_1121-sts-features

あとはいつものようにインストールを進め、Eclipseの再起動まで終わらせましょう。

Gradle Integration for Eclipseの導入

えーと、Spring陣営はGroovy陣営と仲良しです。というわけで、ビルドツールにはGradleを使ってみましょう。というわけで、Eclipseに対してGradleのプラグインを導入します。同じようにMarketplaceを呼び出し、「Gradle」で検索します。

2013-08-28_1103-gradle

そしてプラグインの選択。そう、このプラグインもSpring陣営が開発したものです。さっき敢えてチェックを外したDashboardとUAAは、やっぱり今回も外してしまいます。

2013-08-28_1105-gradle-features

執筆時点で Gradle Integration for Eclipse プラグインのダウンロードサイトのパーミッション設定がどうやら一部おかしいようです。「install anyway?」と問われたら、Yesで強制インストールしてください。

その他プラグインの導入

どんどん話がSpringから逸れていきますが、あとはお好みでプラグインを投入しましょう。都元個人的には、以下のようなプラグインが好きです。

  • EGit
  • Path Tools
  • FindBugs Eclipse Plugin
  • Checkstyle Plug-in
  • Quick JUnit

プロジェクトの作成

さて、諸々のインストールが終わったら、Gradleプロジェクトを作ってみましょう。

2013-08-28_1132-new-gradle-project

また、せっかくの連載なので、最終的に小さなプロダクトを1つ作れるような方向性に進めようと思います。写真共有サイトでも作りますか。プロジェクト名は「berserker」で(適当w)。スクショはpartyalbumとかなってますが、気の迷いです。

2013-08-28_1246-new-gradle-project2

さて、プロジェクトを作るとこんな感じ。

2013-08-28_1251-project

build.gradleの調整

まずGradleのビルドファイルbuild.gradleをざっくり書き換えてしまいましょう。今時Java5とか無いですから。Java7でいきましょう。その他、以下をザックリとコピペで入れ替えてください。(各種ライブラリのバージョンが、エントリ投稿時の時代考証に合ってないのは気にしないでください!)

// -*- coding: utf-8; mode: groovy -*-

apply plugin: "java"

sourceCompatibility = 1.8
targetCompatibility = 1.8
tasks.withType(AbstractCompile) each {
  it.options.encoding = ext.defaultEncoding
}


// ======== libraries ========
repositories {
  mavenCentral()
}

dependencies {
  // spring
  compile "org.springframework:spring-context-support:$springVersion"
  
  // loggers
  compile "org.slf4j:slf4j-api:$slf4jVersion"
  compile "org.slf4j:jul-to-slf4j:$slf4jVersion"
  compile "ch.qos.logback:logback-classic:$logbackVersion"

  // other
  compile "org.projectlombok:lombok:$lombokVersion"
  compile "com.amazonaws:aws-java-sdk-sqs:$awsJavaSdkVersion"
  compile "javax.mail:mail:$javaMailVersion"
  
  // testing
  testCompile "junit:junit:$junitVersion"
  testCompile "org.hamcrest:hamcrest-library:$hamcrestVersion"
  testCompile "org.mockito:mockito-core:$mockitoCoreVersion"

}

// ======== wrapper ========
task wrapper(type: Wrapper) {
  gradleVersion = "2.12"
}

やっていることは、コンパイラバージョンの設定、エンコーディングの設定、Springやlogger等の依存ライブラリ定義ってところです。とくに難しいことはしていませんね。

上記の通りbuild.gradleの書換えが終わったら、Eclipseに認識させます。プロジェクトのコンテキストメニューより、Gradle>Refresh Allを選びましょう。build.gradleを書き換えた時は、必要に応じてRefreshするのを忘れないようにしてください。

2013-08-28_1257-gradle-refresh

Refreshが終わると、コンパイルエラーが出ます。Gradleが生成したコードはcommons-collectionsに依存していたのですが、build.gradleから依存を外してしまったからですね。まぁ、要らないので自動生成のクラスとXMLは消してしまいましょう。

git導入

必要に応じてですが、とりあえずgit/git-flowを導入しておきましょうか。.gitignoreは以下のような感じ。

$ vi .gitignore
.DS_Store

/bin
/target
/build
/.gradle

/env/*.gradle
/env/!_*.gradle

*.iml
/.idea
$ find . -type d -name .git -prune -o -type d -empty -exec touch {}/.gitkeep \;
$ git init
$ git add .
$ git commit -m'Initial commit'

まとめ & 次回予告

さて、あまりSpringっぽいことはしませんでしたが、今回は環境の整備ということでお送りいたしました。どこまでいけるか分かりませんが、写真共有サイトが完成するといいですねー。(他人事)

次回はどうしようかな…。データアクセスまわりのお話かな。ということで、この環境にMySQLへのアクセス環境を作っていきます。

超適当に、3分でERを描いてみました。同じイベントに参加した人同士で写真をシェアする感じですね。ユーザ・イベント・参加・写真といったエンティティを定義しています。

2013-08-28_1534-partyalbum-er

Gradleについて詳しく知りたくなったら、ちょうど最新号のWEB+DB PRESSで記事が出ていますので、オススメです。

Amazonでチェックする

では、近々また!

脚注

  1. XML-based, Annotation-based, Java-based
  2. 正直、種類が多いのは混乱を招くだけで、いい加減デメリットでしかない様な気がしてなりません。
  3. それぞれの中身と役割を良く理解しているのであれば、適切に選択してください。