Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

フロンターレをマイクロサービス化する

More than 3 years have passed since last update.

この記事はFUJITSU Advent Calendar 2017の17日目です。

本稿では、フロンターレの選手情報を、富士通のMicroProfile実装であるLauncherを使用し、REST APIで提供するプログラムを作成する方法を紹介します。

その前に、MicroProfileとは

MicroProfileは、企業向けマイクロサービスをJavaで実現するための仕様検討などを行うコミュニティです。 (http://microprofile.io)
本稿では、MicroProfile 1.1で策定されている、以下の4つのAPIを使います。

  • JAX-RS
  • CDI
  • JSON-P
  • Config

プログラム作成にあたり事前に用意するもの

Launcherの中に上記4つのAPIがすべて含まれているので、それ以外のライブラリやJava EE用の開発環境等は不要です。

処理の流れ

  1. Config APIを使い、フロンターレのページのURLや、必要に応じてPROXY情報を取得します。
  2. フロンターレのページからHTMLを取得します。取得したHTMLをゴリゴリ解析、選手情報一覧を作成します。(ここはMicroProfileと関係なし)
  3. RESTのエンドポイントをJAX-RS/CDIで作成します。
  4. リクエストが来たら、JSONで返却します。

ソースの作成

Frontale.javaのConfig APIのところだけ、解説。

Frontale.java
     71     Config config = ConfigProvider.getConfig();

ConfigProviderからConfigオブジェクトを取得します。実際のプロパティ値は、このConfigオブジェクトを通して獲得します。

Frontale.java
     77       url = config.getValue("frontale.url", String.class);

getValueメソッドの第一引数にプロパティ名、第二引数に型を渡します。プロパティ値が見つからなければ、NoSuchElementExceptionがスローされるます。

プロパティの指定はいろいろな方法がありますが、このプログラムでは、デフォルトのプロパティファイルを使用し、以下のように記述します。

microprofile-config.properties
  frontale.url = http://www.frontale.co.jp/profile/2017/number.html

コンパイル

% javac -classpath launcher-1.0.jar -d classes *.java

jarの作成

クラスファイルおよびプロパティファイルは、以下のように、jarにまとめておきます。

% jar tf frontale.jar
META-INF/
META-INF/MANIFEST.MF
WEB-INF/
WEB-INF/classes/
WEB-INF/classes/META-INF/
WEB-INF/classes/kzr/
WEB-INF/classes/kzr/frontale/
WEB-INF/classes/META-INF/microprofile-config.properties
WEB-INF/classes/kzr/frontale/Frontale$1.class
WEB-INF/classes/kzr/frontale/Frontale$Parser.class
WEB-INF/classes/kzr/frontale/Frontale$Parser2.class
WEB-INF/classes/kzr/frontale/Frontale.class
WEB-INF/classes/kzr/frontale/FrontaleApplication.class
WEB-INF/classes/kzr/frontale/FrontaleService.class
WEB-INF/classes/kzr/frontale/Player.class

アプリの起動

以下のコマンドを実行するだけ。JDK以外、事前のインストールは不要。

% java -Djava.io.tmpdir=. -jar launcher-1.0.jar --deploy frontale.jar​

実行結果

  • 選手の番号一覧 (http://localhost:8080/list)

  • 狩野健太の情報 (http://localhost:8080/25)

おわりに

「マイクロサービス化」というのは言い過ぎでしたが、ここで紹介したように、MicroProfileを使うことで、簡単に軽量コンテナで動作するアプリケーションを作成することができるようになります。

fujitsu
富士通グループのソフトウェア技術者有志により運営しているコミュニティです。
http://www.fujitsu.com/jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away