SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Spring Bootで作るマイクロサービス

多様化するJavaのフレームワーク問題を解決する、「Spring Boot」とは?

Spring Bootで作るマイクロサービス 第1回


Spring Bootとは(2)

アプリケーションの実行方法から配布形態までをカバーするフレームワーク

 Spring Bootが他のフレームワークと大きく異なるもう1つの特徴として、アプリケーションの実行方法から配布形態までカバーしている点が挙げられます。

 Spring Bootでプロジェクトを作ると、リスト2の通りメインクラスが用意されます。Webフレームワークなどではメインクラスを自分で触ることができないことが多々ありますが、さまざまな利用ケースを想定した場合にメインクラスを自分で変更可能なことは非常に大切です。

 特にミドルウェアなどを組込み用として内包してしまう場合には、その起動から停止までのライフタイムを完全にコントロールしたいことがあります。その場合、メインクラスから提供されているので、それらのライフタイムは完全にコントロール可能です。

 また、メインクラスが提供されていることで、Java初心者にとってもイメージしやすい構造になっていると思います。

[リスト2]Spring Bootのメインクラス
package com.coltware.springboot.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Part1Application {

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

 そして、Spring Bootをビルドすると実行可能な1つのJarファイルができあがり、その中に依存しているライブラリなどがすべて含まれるようになっています。従って、できあがったJarファイルを実行する際にもリスト3の通り1つのファイルを指定するだけです。

[リスト3]Spring Bootで作成したアプリケーションのビルドから実行したときの例
$./gradlew build
// ・・省略・・・
$java -jar build/libs/demo-0.0.1.jar

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.1.0.RELEASE)

2018-11-25 15:51:52,883 INFO  [main] boot.StartupInfoLogger (StartupInfoLogger.java:50) - Starting Part1Application on xxxxxx with PID 25343
2018-11-25 15:51:52,890 DEBUG [main] boot.StartupInfoLogger (StartupInfoLogger.java:53) - Running with Spring Boot v2.1.0.RELEASE, Spring v5.1.2.RELEASE
2018-11-25 15:51:52,891 INFO  [main] boot.SpringApplication (SpringApplication.java:675) - No active profile set, falling back to default profiles: default
2018-11-25 15:51:55,049 INFO  [main] boot.StartupInfoLogger (StartupInfoLogger.java:59) - Started Part1Application in 2.544 seconds (JVM running for 3.592)

 1つのJarファイルで完結しているので、アプリケーションを配布する際にも1つのファイルで済みます。また、実行時に依存するライブラリのバージョンなどが環境によって異なることもなくなります。

 こうした特徴は単純ではありますが、Dockerなどのコンテナ上で動的にサービスを起動したり落としたりする場合のメンテナンスが非常に簡単になります。また、依存しているライブラリはJarファイル内のBOOT-INFフォルダに含まれるので、ライブラリとバージョンなどはそこから調べることもできます。

Java 11への対応状況

 2018年10月30日にリリースされたSpring Boot 2.1からJava 11がサポートされました。内部で利用しているSpring FrameworkのバージョンもJava 11対応された5.1に変更されています。また、まだまだJava全体としてJava 8がベースとして普及していることもあり、Java 8での互換性に関しても問題なくサポートされます。

 もちろん、Java 9以降モジュール対応されたアプリケーションにも対応しています。しかし、Spring Bootで作成するアプリケーションが、依存するすべてのライブラリも含めて、モジュール対応されているわけではありません。

 このため、モジュール対応されたアプリケーションを作る場合にはSpring Bootとは関係がない課題や疑問が生じると思われます。Spring Bootを初めて使う場合には避けた方がよいと思います。

最後に

 Springのプロジェクトも非常に多岐にわたるようになり、どのプロジェクトがどのように使われているのか、どのように使えばよいのか分かりにくくなってしまっています。筆者にとっても、久しぶりにSpringプロジェクトのWebサイトを見ると、どこから手をつけてよいのか迷うほどプロジェクトが増えています。

 また、Springプロジェクトに限らず、さまざまなフレームワーク、ライブラリも含めるとますますどのような構成がよいのか分かりにくいでしょう。

 Spring Bootはこういった状況の中で、組み合わせの成功パターンを管理するためのフレームワークと言えます。従って、Spring Bootだけを見ていると全体像がつかみにくいのですが、Spring Frameworkの特徴やこれまでの課題点が分かると、Spring Bootがより理解しやすくなると思います。

 そして、各種ライブラリやミドルウェア単体などのノウハウは十分蓄積されていると言えますが、組み合わせのノウハウはなかなか見つかりません。Spring Bootを使うことで組み合わせが共通化されやすくなります。また、Starterというキーワードもあるので、迷った場合にも同様の課題を持った人などが既に共有しているケースもありノウハウも見つけやすいはずです。

 こういった背景がSpring Bootの注目度が高まっている理由の1つではないかと思います。次回からは、サンプルアプリケーションを作りながらSpring Bootの使い方を説明していきます。

参考資料

 

本連載の書籍が発売されました!

Javaによる高速Webアプリケーション開発のためのSpring Boot入門

Amazon(POD) Amazon(電子書籍) その他

Javaによる高速Webアプリケーション開発のためのSpring Boot入門

著者:WINGSプロジェクト 小林昌弘
発売日:2020年5月31日(水)
価格(POD):2,200円(税込)
価格(電書):1,760円(税込)

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
Spring Bootで作るマイクロサービス連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 小林 昌弘(コバヤシ マサヒロ)

WINGSプロジェクト について> 有限会社 WINGSプロジェクト が運営する、テクニカル執筆コミュニティ(代表 ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/11310 2020/06/01 18:34

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー