Java で Spring Boot を使って Web サーバーを作る
まとめ記事ができました
このスクラップについて
現在、Box(企業向けクラウドストレージサービス)API の Java SDK のキャッチアップをしている。
キャッチアップの内容は下記のスクラップに投稿している。
OAuth 2.0 によるユーザー認証を試すために Java で Web サーバーを作る必要が生じた。
上記のスクラップに書き込んでも良かったが別のスクラップに分けた方が良さそうだったのでこのスクラップを作成した次第である。
Spring Boot は以前にも試したことがあり、その時は Java ではなくサーバーサイド Kotlin を使用した。
このスクラップでは Java を使って Spring Boot で簡単な Web サーバーを作ってみようと思う。
やりたいことは承認コード(認可コード)とアクセストークンを交換するだけなので短いスクラップになりそう。
ドキュメント選び
1 番目は日本語だがなんか違う気がする。
2 番目は Spring Boot というか Spring のクイックスタートだが実際には Spring Boot を扱っている、内容はシンプルで短い。
3 番目は Spring Boot の Getting Started で内容は詳細で長い。
とりあえず 2 番目から始めてみてダメだったら 3 番目を試してみよう。
今さらだが Spring と Spring Boot の違い
Spring Boot は Spring(厳密には Spring Framework)を基礎とした Web アプリ開発フレームワークといった感じなのだろうか。
プロジェクト作成
https://start.spring.io/ にアクセスする。
Dependencies セクションで Spring Web を追加する。
Generate ボタンを押して zip ファイルをダウンロードする。
ワークスペース作成
mkdir -p ~/workspace/java/hello-spring-boot
cd ~/workspace/java/hello-spring-boot
ダウンロードした zip ファイルをワークスペースのディレクトリ直下に移動して展開したら demo というディレクトリが作成された。
ディレクトリなしで直接展開されるイメージだったが、Spring Initializr の Web UI を使った場合はディレクトリありで展開されるのかな?
IntelliJ IDEA 起動
IntelliJ IDEA でワークスペースを開く。
とりあえず Ctrl + R を押すなどしてアプリが起動できるかを確認する。
http://localhost:8080/ にアクセスすると正常にエラーページが表示された。
コーディング
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController // 忘れがちなので注意
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@GetMapping("/hello")
public String hello(@RequestParam(value = "name", defaultValue = "World") String name) {
return String.format("Hello %s!", name);
}
}
コーディングが終わったら Ctrl + R を押してサーバーを再起動する。
終わってしまった
びっくりするくらいスムーズに簡単に終わってしまった。
Spring Boot は TypeScript の NestJS に似ているのでとっつきやすくてありがたい。
今まで Java を避けてたけどこんなに簡単に Web アプリを作れるのであれば魅力的に感じる。
IntelliJ IDEA のコーディング支援が素晴らしい、当り前だが Java は TypeScript よりも厳密に型をつけなければいけないのでその分コード補完の効きが良い。
Kotlin を使えば Java に比べてシンプルば書き方もできる。
様々な事情で Java を使わなければいけない仕事もあるし、単に Java と聞いただけで安心するお客さんもいそう(笑)
今後も機会を作って Spring Boot の勉強を続けたいと思う。
今後 Spring Boot について学ぶ時が来たら
公式サイトの Guides ページが参考になりそう。
今更だけど関連スクラップ
まとめ
- Spring Boot は Spring をベースにした Web アプリ開発フレームワーク。
- プロジェクトを作成するには srping initializr を使用する。
- プロジェクトを作成する際には Spring Web を依存関係に追加する必要がある。
- プロジェクト zip はディレクトリ付きで展開される。
- ダウンロードしたプロジェクトは手を加えなくてもすぐに実行できる。
- エンドポイントを作成するにはメソッドに GetMapping などのアノテーションを使用する。
- クエリ文字列などのリクエストに関するデータは RequestParam などでアノテーションした引数から取得できる。
- メソッドの戻り値がそのままリクエストボディとなる。