Springプロジェクト作成
Spring Frameworkを「Spring Tool Suite」などを使って、Apache Mavenプロジェクトの作成から配布まで行ってみます。まず、プロジェクトをどのように作成して実行するのか、その基本から説明します。
Spring FrameworkとSTS
「Spring Framework」という名前は、Javaプログラマーなら誰でも一度は聞いたことがあるでしょう。しかし「特にサーバー開発に強力なフレームワークである」程度は知っていても、具体的な内容は意外と知らない人も多いです。
その大きな理由は、Spring Frameworkが巨大だからです。Spring Frameworkは1つのフレームワークではありません。多くのフレームワークの集合体です。すべてのフレームワークの土台になるもの、その上に構築される汎用的なもの、Webやデータベースなど特定用途に特化した他のフレームワークとの橋渡しをするものなど、とにかく多くのフレームワークがSpring Frameworkには含まれています。そのため、全体像がぼんやりして分かりにくくなりがちです。
これからSpring Frameworkを学ぶ人は、まず「すべての土台になっている技術」から理解していくとよいでしょう。その次に、データベースアクセスやWebのMVCアプリケーション開発など、自分の開発ですぐに使える分野のフレームワークを学ぶことをおすすめします。それ以外はひとまず後回しにし、優先順位を付けないと覚えるのが難しくなります。
さて、このSpring Frameworkで開発する場合、まず頭に入れておきたいのは「専用開発ツールの準備」です。
Spring Frameworkの開発元であった米国Pivotalは、Spring Frameworkを使った開発のための専用ツールを提供していました。「Spring Tool Suite (STS)」と呼ばれるもので、Eclipseをベースに専用プラグインを組み合わせて作られています。
Spring Frameworkを使ったプログラムでは、多数のライブラリを必要に応じて組み合わせて準備する必要があります。これをすべて手作業で行うのは非常に大変です。そのため一般的には、Apache Mavenというオープンソースのビルドツールを使ってプロジェクトを作成し、利用するようになっています。STSはMavenと主要なプロジェクトテンプレートを組み合わせ、簡単な設定だけで必要なライブラリを組み込んだプロジェクトを作成できるようにしています。
したがって、Spring Frameworkを利用する場合は、特別な理由がない限りSTSを使うようにしましょう。コマンドラインからMavenコマンドでプロジェクトを作成しても構いませんが、STSを使う場合に比べると手間がかかります。もちろん「Mavenに慣れているので問題ない」という人は、Mavenベースで開発を進めてもよいでしょう。STSは次のページからダウンロードできます。
Windowsの場合、標準でダウンロードされるものは32bit版の場合があります。64bit版JDKをインストールしている場合は、「See All Versions」リンクをクリックし、そこで64bit版STSをダウンロードして使用しましょう。
Mavenでプロジェクト作成
Springを利用するプロジェクト作成について説明します。まず、Mavenを利用している場合の作成方法です。コマンドプロンプトまたはターミナルを起動し、プロジェクトを作成する場所へ cd コマンドで移動した後、次のように実行します。
$ mvn archetype:generate
実行すると、利用可能なアーキタイプ(archetype)の一覧が表示されます。元の例では、2017年9月2日時点で1,981個が表示されました。
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:2.2:generate (default-cli) > generate-sources @ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:2.2:generate (default-cli) < generate-sources @ standalone-pom <<<
[INFO]
[INFO] --- maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Interactive mode
[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
Choose archetype:
... 省略 ...
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 1027:
ここではそのままEnterを押します。
Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
1: 1.0-alpha-1
2: 1.0-alpha-2
3: 1.0-alpha-3
4: 1.0-alpha-4
5: 1.0
6: 1.1
Choose a number: 6:
最新バージョンがデフォルトで指定されているので、そのままEnterを押します。
Define value for property 'groupId': :
グループID(groupId)を指定します。ここでは com.devkuma.spring と入力しました。
Define value for property 'artifactId': :
アーティファクトIDを指定します。ここでは MySpringApp と入力しました。
Define value for property 'version': 1.0-SNAPSHOT: :
versionプロパティの設定です。デフォルトのままでよいので、そのままEnterを押します。
Define value for property 'package': com.devkuma.spring: :
プログラムのパッケージを指定します。これはグループIDが指定されているので、そのままEnterを押すのがよいでしょう。
ここまで設定した内容が表示され、間違いがなければそのままEnterを押します。間違いがある場合は N を入力してEnterを押し、再入力します。
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 1027:
Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
1: 1.0-alpha-1
2: 1.0-alpha-2
3: 1.0-alpha-3
4: 1.0-alpha-4
5: 1.0
6: 1.1
Choose a number: 6:
Define value for property 'groupId': : com.devkuma.spring
Define value for property 'artifactId': : MySpringApp
Define value for property 'version': 1.0-SNAPSHOT: :
Define value for property 'package': com.devkuma.spring: :
Confirm properties configuration:
groupId: com.devkuma.spring
artifactId: MySpringApp
version: 1.0-SNAPSHOT
package: com.devkuma.spring
Y: :
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.1
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: basedir, Value: /Users/kimkc/dev
[INFO] Parameter: package, Value: com.devkuma.spring
[INFO] Parameter: groupId, Value: com.devkuma.spring
[INFO] Parameter: artifactId, Value: MySpringApp
[INFO] Parameter: packageName, Value: com.devkuma.spring
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: /Users/kimkc/dev/MySpringApp
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 20:35 min
[INFO] Finished at: 2017-09-02T23:39:12+09:00
[INFO] Final Memory: 13M/234M
[INFO] ------------------------------------------------------------------------
これでプロジェクトが生成されました。
プロジェクトとpom.xml
生成されたプロジェクトフォルダー、ここでは MySpringApp フォルダーには、src フォルダーと pom.xml ファイルが作成されています。
src フォルダーはプロジェクトファイルをまとめておく場所です。ここには次のようなフォルダーがあります。
- main フォルダー: プログラムで使用するファイルをまとめておく場所です。
- test フォルダー: プログラムで使用する単体テストのソースコードをまとめておく場所です。
main フォルダーの中には java フォルダーがあり、その中のパッケージ構成に従って App.java というソースコードファイルが生成されています。これはサンプルとして作成されたソースコードで、Spring Frameworkとはまったく関係のない、単純なJavaアプリケーションです。
もう1つは、Mavenプロジェクトで非常に重要な pom.xml です。このファイルは、プロジェクトに必要なライブラリなどの情報を記述するファイルです。Mavenはこのファイルの情報をもとに、必要なファイルをダウンロードしてプロジェクトを作成します。つまり、この pom.xml を正しく記述しないと、プロジェクトを正しく作成できません。
.
├── pom.xml
└── src
├── main
│ └── java
│ └── com
│ └── devkuma
│ └── spring
│ └── App.java
└── test
└── java
└── com
└── devkuma
└── spring
└── AppTest.java
以下は、標準で記述される pom.xml の例です。pom.xml は <project> タグの中に次のようなタグで構成されます。
<groupId>: グループIDは、プロジェクトごとに識別できる一意な名前です。通常はパッケージ命名規則、つまりドメインを逆順にした形式に従うのが一般的です。必要に応じて下位グループを作成できます。<artifactId>: アーティファクトIDは、jarファイル名からバージョン情報を除いた名前です。自由に付けられますが、小文字を使い、変な特殊文字は使わないようにします。<version>: バージョンを表すテキストです。<packaging>: パッケージの種類です。jar、war、pomなどがあり、ここではjarを指定しているため、パッケージングするとjarが生成されます。<name>: プロジェクト名です。<url>: URLです。一般的にはhttp://maven.apache.orgが指定されます。<properties>: 各種プロパティを記述する場所です。ここでは<project.build.sourceEncoding>が指定されており、プロジェクトの標準エンコーディングを指定しています。<dependencies>: この中に<dependency>タグを使って必要なライブラリ情報を記述します。標準ではJUnitライブラリの情報が記述されています。
こうしたタグを記述し、必要なライブラリを構成していくことが、Mavenによるプロジェクト作成の基本です。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.devkuma.spring</groupId>
<artifactId>MySpringApp</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>MySpringApp</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
pom.xmlにSpringのコアライブラリを追加する
Spring Frameworkを利用するための pom.xml を作成しましょう。今回はSpring Frameworkの中核となるライブラリだけを含めることにします。
修正した pom.xml では、<dependencies> タグの中に次のタグが追加されています。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
これは spring-context というライブラリを追加するものです。バージョンは、この文章が書かれた時点の4.x系の最新バージョンです。MavenはこのようにライブラリのgroupId、artifactId、versionを指定すると、該当ライブラリをダウンロードしてプロジェクトに含めます。
なお今回は、必要なものを最小限にするためJUnitライブラリを削除しました。これに伴い、src フォルダーにある test フォルダーも削除する必要があります。JUnitがないため、単体テストのソースコードファイルを残しておくとビルドエラーが発生します。
必要なライブラリがダウンロードされ、プロジェクトがビルドされるとJarファイルが作成されます。target フォルダーが生成されるので中を確認しましょう。すると MySpringApp-0.0.1-SNAPSHOT.jar というファイルが生成されているはずです。これがビルドされたJarファイルです。
では、これを実行します。コマンドラインで cd target を実行して target フォルダーへ移動し、次のように実行します。
java -classpath.; MySpringApp-0.0.1-SNAPSHOT.jar com.devkuma.spring.App
クラスパスに MySpringApp-0.0.1-SNAPSHOT.jar を指定し、com.devkuma.spring.App を実行します。これでAppクラスのmainメソッドが実行され、Hello World! というテキストが表示されます。
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.devkuma.spring</groupId>
<artifactId>MySpringApp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<java.version>1.6</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- Spring and Transactions -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
</dependencies>
</project>
STSでSpringプロジェクト作成
続いて、STSを使ってプロジェクトを作成する方法を見ていきます。STSにはSpring Framework関連のプロジェクトテンプレートがいくつか用意されています。大きく分けると「Spring Legacy Project」と「Spring Starter Project」に分類できます。
Spring Legacy Project: 一般的なSpring Frameworkプロジェクトです。必要に応じてSpring Frameworkのライブラリを組み込んで利用します。
Spring Starter Project: Spring Bootというアプリケーションの高速開発フレームワークを利用したプロジェクトです。簡単なライブラリを追加するだけで、必要なフレームワークをまとめて含められるようになっています。
Spring Frameworkの基本を学ぶには、「Springプロジェクト」を使用します。Spring Starter ProjectはSpring Boot向けのものなので、Spring Bootを利用するようになったら使うことにしましょう。
プロジェクト作成手順
- STSを起動し、[File]メニューの[New]メニューから[Spring Legacy Project]メニューを選択します。

- 表示されたダイアログで、次のように設定します。
Project name: プロジェクト名です。先ほどMavenで生成したものと同じにしたい場合は MySpringApp と入力します。
Template: Simple Project の中にある Simple Spring Maven を選択します。
Working sets: ここでは特に使用しないため、チェックボックスはOFFにしておきます。
これで「Finish」ボタンを押すと、プロジェクトが作成されます。ただし、この段階では特にJavaソースコードファイルは作成されないため、後で必要に応じてクラスを作成していきます。

実行に必要な作業
-
パッケージエクスプローラー(package explorer)でプロジェクトを選択し、[Run]メニューの[Run As]内から[Maven Install]メニューを選択します。これでビルドが完了します。
-
アプリケーションを実行するには、実行するアプリケーションクラスのソースコードファイルを選択し、[Run]メニューの[Run As]内から[Java Application]メニューを選択します。
- これでSTSを使ってプロジェクトを作成し、それを実行するまでの作業を行えるようになりました。Spring Frameworkを利用した具体的なプログラミングは次から進めていきます。