NTT DATA

DATA INSIGHT

NTT DATAの「知見」と「先見」を社会へ届けるメディア

キーワードで探す
カテゴリで探す
サービスで探す
業種で探す
トピックで探す
キーワードで探す
カテゴリで探す
サービスで探す
業種で探す
トピックで探す
2019.10.29技術トレンド/展望

Spring Boot ~クラウドネイティブアプリケーション開発の第一歩~

企業のDX推進に当たりシステムのコスト削減及びアジリティ向上を実現するためにクラウドネイティブアプリケーションを構築することが主流になっている。
本記事では、クラウドネイティブアプリケーション開発を進める第一歩としてSpring Bootを紹介する。

Spring Bootとは

Spring BootはSpring Framework(※1)のプロジェクトの一つです。2019年10月現在ではバージョン2.2.0がリリースされています。 Spring Bootはバージョンアップとともに便利な機能が追加され続けており、幅広い分野のエンタープライズアプリケーション開発で採用されています。

Spring Bootの特徴

Spring Frameworkは20以上の様々なSpringプロジェクトが存在しており、大きなエコシステムを形成しています。Spring Frameworkでのアプリケーション開発では、これらの機能を適切に組み合わせて1つのアプリケーションを作ることになります。
しかし、Springプロジェクトは機能が豊富であるため、Springアプリケーションの開発では、小規模なアプリケーションの開発であってもライブラリの組み合わせやその設定方法が難解であることが課題となっていました。

Spring Bootは主に以下の3つの特徴によってSpring Frameworkの課題を克服し、より迅速なアプリケーションの開発を可能としています。

  • Auto-configuration
    依存ライブラリを定義するだけでオススメの設定が反映されるため開発者が設定を記述することなくデフォルトの状態でさまざまな機能を利用できます。
  • Embedded Servlet Container
    Spring Bootは組み込みサーバを同封しているためアプリケーションサーバにデプロイする必要もなくなり、Javaのmainメソッドを実行すればアプリケーションを実行できます。
  • Executable Jar
    Spring Bootを使うと、アプリケーションを、依存ライブラリを同封した即実行可能なJar形式でパッケージングできるため、1つのコマンドを実行するだけで簡単にアプリケーションを実行できます。

Spring Bootは上記以外にも、依存ライブラリ等が設定済みのSpring Bootプロジェクトを生成することができるSpring Initializr、開発作業をサポートするDeveloper Tools、アプリケーションの監視を行うSpring Boot Actuator、テストをサポートする機能など、様々な機能を提供しています。

クラウドネイティブなアプリケーションとの親和性

クラウドネイティブなアプリケーションについては、各社様々な定義をしています。
Pivotalではクラウドネイティブなシステムを実現するための要素として以下の4点を提示しています。(※2)

  • DevOps
  • 継続的なデリバリ
  • マイクロサービス
  • コンテナ

クラウドネイティブなアプリケーションは上記要素と親和性の高いアプリケーションを示し、Spring Bootは特にマイクロサービスやコンテナと親和性が高いと言えます。

マイクロサービスとは、粒度が細かく自律的に動作するアプリケーションを組み合わせてシステムを構築するアーキテクチャです。「マイクロサービス」という言葉は、James Lewis氏が2012年に発表した 33rd Degree - Conference for Java Masters - Micro services - Java, the Unix Way(※3)にて初めて使われたといわれています。

Spring Bootは、 33rd Degree - Conference for Java Masters - Micro services - Java, the Unix Way にて定義されているマイクロサービスのほとんどの要素を満たしているため、マイクロサービスとの親和性が高いと言えます。

  • Small with a single responsibility
    • 各アプリケーションは1つの機能だけを持つ
    • すべて頭に入る程に小さい
    • いつでも捨てることができる程に小さい
  • Located in different VCS roots
    • 各アプリケーションは完全に独立している
    • 共通モジュールはライブラリとして作成・使用する

Spring Bootは、アプリケーションの設定、実行、開発作業、テストをサポートする機能を提供しています。そのため、Spring Bootは小規模なアプリを迅速に開発しデプロイするのに向いていると言えます。

  • Containerless and installed as well behaved Unix services
    • 組み込みWebコンテナ(試験容易性、デプロイ容易性が向上する)
    • 実行可能Jar形式でのパッケージング、Unixのサービススクリプトでの実行

Spring BootのEmbedded Servlet Container、Executable Jarにより、容易にコンテナ上のUnixのサービススクリプトに登録できます。

  • Status aware and auto-scaling
    • 各アプリケーションがヘルスチェック、メトリクスの収集に対応している

Spring Bootは、ヘルスチェックやメトリクスの収集等に対応するSpring Boot Actuatorという機能を提供しています。

Spring BootでHelloWorld

Spring Bootを利用したWebアプリケーションの開発を体験してもらうため、最小限の構成、最小限の操作でHelloWorldアプリケーションを構築する手順を示します。HelloWorld表示までの作業時間はおおよそ10分です。

0.前提とする環境

JDK8もしくはJDK11がインストールされていることを前提とします。

1.Spring Initializrによるプロジェクト作成

Spring Bootプロジェクトを作成するためのWebサービスであるSpring Initializr(https://start.spring.io/)を利用してプロジェクトを作成します。なお、Spring InitializrはInternet Explorerをサポートしていないので別のブラウザを利用してください。

Projectに「Gradle Project」、Dependenciesに「Spring Web」を設定します。また、Options内のJavaには環境に応じたバージョンを設定します。設定が完了したら、「Generate the project」ボタンを押下し、zip圧縮されたSpring Bootプロジェクトをダウンロードしてください。ダウンロードした圧縮ファイルは適当なフォルダに解凍してください。

図1:Spring Initializrの例

図1:Spring Initializrの例

2.HelloWorldの実装

HelloWorldを出力する処理を実装します。Spring Initializrにより自動生成されたDemoApplicationクラス(src\main\java\com\example\demo\DemoApplication.java)に対し、下記のように、helloメソッド及び各種アノテーションを追記します。実際の開発ではSpring Tool SuiteなどのIDEを利用しますが、本手順ではメモ帳などのテキストエディタによる編集でも構いません。


	package com.example.demo;

	import org.springframework.boot.SpringApplication;
	import org.springframework.boot.autoconfigure.SpringBootApplication;
	import org.springframework.web.bind.annotation.RestController;
	import org.springframework.web.bind.annotation.GetMapping;

	@SpringBootApplication
	@RestController
	public class DemoApplication {

		public static void main(String[] args) {
			SpringApplication.run(DemoApplication.class, args);
		}

		@GetMapping
		public String hello() {
			return "Hello World!";
		}
	}
	

なお、デフォルト設定では、Webアプリケーションが使用するポートが8080となっています。既にポート8080を利用中である場合、ポートを変更するためにプロパティファイル(src\main\resources\application.properties)にserver.port=8088など適当なポート追記してください。

3.ビルド&実行

作成したHelloWorldアプリケーションをビルド&実行します。
コマンドプロンプトなどを利用し、プロジェクト直下にカレントディレクトリを移動した後、下記コマンドの実行を実行します。

図2:ビルド&実行の例

図2:ビルド&実行の例

ビルドが成功すると、アプリケーションが起動します。

図3:ビルド&実行結果の例

図3:ビルド&実行結果の例

なお、プロキシ環境配下で実行する場合は、事前準備としてGradleにプロキシの設定が必要です。gradlew.bat(もしくはgradlew)のDEFAULT_JVM_OPTSを設定している箇所に下記の設定を追記してください。設定値は実行環境に合わせ、適切な値を設定してください。

  • -Dhttp.proxyHost=proxy.example.com
  • -Dhttp.proxyPort=8080
  • -Dhttp.proxyUser=proxyuser
  • -Dhttp.proxyPassword=somepassword
  • -Dhttps.proxyHost=proxy.example.com
  • -Dhttps.proxyPort=8080
  • -Dhttps.proxyUser=proxyuser
  • -Dhttps.proxyPassword=somepassword
  • -Djdk.http.auth.tunneling.disabledSchemes=""

4.動作確認

ブラウザを利用して動作確認をします。
ブラウザでhttp://localhost:8080/にアクセスすると下記のようにHelloWorldが表示されます。

図4:動作確認結果の例

図4:動作確認結果の例

実行中のアプリケーションを終了する場合は、コマンドプロンプトでCtrl+Cを入力し、アプリケーションを終了してください。

以上で、Spring BootによるHelloWorldアプリケーションの作成は完了です。Spring Bootを使うことで、従来必要であった、pom.xmlの設定、web.xmlの設定、アプリケーションサーバの構築やデプロイ作業などが不要となり、非常に簡単にWebアプリケーションを構築できることがわかると思います。

まとめ

本記事では、Spring Bootの特徴、クラウドネイティブなアプリケーションとの親和性、Spring BootでのHelloWorld表示手順を紹介しました。
Spring Bootを活用し、クラウドネイティブなアプリケーション開発を推進していきましょう。

※1

Spring FrameworkはNTTデータが標準的に使用しているFrameworkである。 Spring Frameworkについて詳しく知りたい方は、TERASOLUNA FWの開発ガイドライン(http://terasolunaorg.github.io/guideline/)を一読することを推奨する。

お問い合わせ