旧来のサービスを構築する手段としては、以下のようなものがありましたが、SOAPやWSDLといった複数の仕様群を理解する必要があり、習得の敷居が高かった印象がありました。

  • EJBを用いたリモートEJB
  • SOAP/WSDLを用いたWebサービス
  • JAX-RSを用いたREST API

それに対し、最近では、Spring BootやNetflix OSSなど、マイクロサービスの構築を簡易にするためのフレームワークが登場してきています。

今回は、これまでとは趣向を変え、実際にSpring Bootを利用してマイクロサービスを作ってみます。HelloWorldと出力するだけのアプリケーションで簡単に作れますので、ぜひお手元の環境で試してみてください。

Spring Boot

Spring Bootは、Springプロダクトの一つで、Springフレームワークベースのマイクロサービスアプリケーションを簡易に構築可能です。パソコンの電源を入れるとBoot(ブート)プロセスが走り、Windows等のOSを即座に使い始められるのと同様、Spring Bootにより、プロジェクトが始まった段階でアプリケーションが動作する状態から開発を始めることができます。

もう少し突っ込んだイメージとしては、Spring Bootは「CoC(Convention over Configuration、設定より規約)」の考えをベースに作られており、規約に従った標準的な動作で良ければ、特段の設定は必要ありません。また、規約から外れる部分については、必要に応じてアノテーション等を用いて設定することが可能です。

SpringプロダクトにおけるSpring Bootの位置付け

Spring Bootでのマイクロサービス作成手順

論より証拠ということで、Spring Bootアプリケーションを作ってみます。

必要な作業は以下の3ステップです。

  1. Mavenプロジェクトの作成
  2. pom.xmlの修正
  3. コントローラクラスの作成

なお、開発環境として、NetBeans が導入されていることを前提とします。もちろんIntelliJやEclipse等でも同様の手順で実現可能です。

以下、順に説明していきましょう。

1. Mavenプロジェクトの作成

NetBeansにて[ファイル]-[新規プロジェクト]を押下します。

[新規プロジェクト]ウィザードが立ち上がりますので、以下を選択し[次へ]を押下します。

  • カテゴリ : Maven
  • プロジェクト : Javaアプリケーション

Maven、Javaアプリケーションを選択

そのまま、[終了]ボタンを押下します。

終了ボタンを選択

[mavenproject1]プロジェクトが作成されました。

プロジェクトが作成された

2. pom.xmlの修正

[プロジェクト]ビューにおいて、[mavenproject1]-[プロジェクト・ファイル]-[pom.xml]をダブルクリックで開き、以下の内容を追加します。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.3.6.RELEASE</version>
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

3. コントローラクラスの作成

[プロジェクト]ビューにおいて、[mavenproject1]-[ソース・パッケージ]-[org.mavenproject1]を右クリックし、[新規]-[Javaクラス]を押下します。

[New Javaクラス]ウィザードにて以下を入力し、[終了]を押下します。

  • クラス名 : BootSample

BootSampleクラスを作成

BootSampleクラスが追加されました。

BootSampleクラスが追加された

BootSampleクラスに対し、以下の内容を追加します。なお、コメントは省略しています。

package org.mavenproject1;

import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.web.bind.annotation.*;

@RestController
@EnableAutoConfiguration
public class BootSample {

    @RequestMapping("/")
    String hello() {
        return "Hello World!";
    }
    public static void main(String[] args) throws Exception {
        SpringApplication.run(SampleBoot.class, args);
    }
}

動かしてみる

[mavenproject1]を右クリックし、[ビルド]を押下します。以下の通り、[BUILD SUCCESS]が表示されれば成功です。

------------------------------------------------------------------------
BUILD SUCCESS
------------------------------------------------------------------------
Total time: 6.765s
Finished at: Mon Jul 11 02:03:40 JST 2016
Final Memory: 13M/225M
------------------------------------------------------------------------

[mavenproject1]-[ソース・パッケージ]-[org.mavenproject1]-[BootSample.java]を右クリックし、[ファイルの実行]を押下します。

mainメソッドが起動し、組み込みTomcat上でSpring Bootアプリケーションが起動します(ログより一部抜粋)。

ブラウザからhttp://localhost:8080/にアクセスすると以下の通り表示されます。

http://localhost:8080/にアクセスすると表示される画面

まとめ

今回は、Spring Bootフレームワークを用いて実際にマイクロサービスを作る手順を紹介しました。

REST APIを作るのが案外簡単であることが実感できたのではないでしょうか。Spring Bootに限らず、Googleが開発したGo言語(golang)等、先進的なフレームワークの出現により、ますますREST APIのようなアプリケーション開発が簡単にできる時代になってきており、こういったフレームワークの存在が、マイクロサービス化を後押ししています。

次回は、James Lewis氏・Martin Fowler氏が名付けたマイクロサービスの「9つの特徴」を振り返り、これまでの説明と対応付けていきます。

著者紹介


正野 勇嗣 (SHONO Yuji ) - NTTデータ シニア・エキスパート

2011年頃まで開発自動化技術のR&Dに従事。その後、開発プロジェクト支援やトラブルシューティング等に主戦場を移す。「ソースコード自動生成」に加えて、JenkinsやMaven等の「ビルド自動化」、JsTestDriverやSelenium等の「テスト自動化」を扱うようになり、多様化する開発自動化技術動向に興味。

最近は第四の自動化であるInfrastructure as Code等の「基盤自動化」の魅力に惹かれている。開発自動化技術に関する雑誌・記事執筆も行う。2児のパパ。