概要
目的
本書は、サーバーサイド Kotlin を用いた Web API の作成方法についてまとめた本です。最終的に Spring Boot、Arrow を用いて Web API を作成できる状態を目指します。補足的な要素において jqwik と Database Rider を利用したテスト(ユニットテスト、DB テスト、API 統合テスト)も紹介します。
Kotlin は柔軟な表現力と強力な型システムを持つ言語です。筆者は、Kotlin を利用することで、可読性が高く保守しやすいアプリケーションを作成可能だと考えます。
しかし、Kotlin は本来 Better Java として作られたにもかかわらず、「サーバーサイド Kotlin」と言われるほど、日本ではネイティブアプリケーション向けの印象が強いです。そのせいか、Kotlin をサーバサイドの言語として実践し、日本語で記事や書籍にまとめたものが限られています。
筆者自身、Kotlin の経験が長いわけではありませんが、Kotlin の良さを知ってもらうために、本書を作成しました。
本書の構成
「とりあえず手を動かして Hello World したい」という考え方のもと、第 1 章で Kotlin の簡単に Hello World と FizzBuzz を実装します。そして、第 2 章で Spring Boot を利用した CRUD API の作り方まで説明します。最後に、第 3 章で Arrow とほかのライブラリを利用した、より実践的なアプリケーションを作成します。付録 A に本書を読み進めるのにあたって必要な Kotlin の基礎文法の知識をすべて記述しました。
付録 A をいつ読み始めても良いですが、オブジェクト指向の経験がなければ第 1 章の前に、ほかの言語の経験がある状態でも Kotlin の経験がなければ第 3 章の前に読むことを勧めます。また、Kotlin の経験があっても Arrow の経験がなければ、「📃3.3 ドメインオブジェクトの実装」までに「📃A.5 Arrow によるエラーハンドリング」を読むことを推奨します。
章 | タイトル | 内容 |
---|---|---|
第 1 章 | Kotlin 入門 | 環境構築から始め、HelloWorld と FizzBuzz の実装によって、Kotlin の簡単な書き方に慣れてもらいます |
第 2 章 | Spring Boot 入門 | Spring Boot を使った HelloWorld と 簡易 CRUD まで実装し、Kotlin で Web API を作成する手順を学びます |
第 3 章 | 実践 | Spring Boot と Arrow およびアーキテクチャ構成について筆者が考える実践的な Web API の作成方法について解説します |
付録 A | Kotlin の基礎文法 | 本書で大きく取り扱う Kotlin、Spring Boot、Arrow の基礎文法を解説します |
ロードマップ
先述の内容を踏まえた具体的なロードマップは以下になります。書籍の現在地を把握するのに使ってください。書籍でも項目ごとにロードマップを登場させます。
本編のロードマップ
付録のロードマップ
想定読者
想定している読者は以下です。
- Kotlin で Web API のアプリケーションを作成したい方
- Kotlin の経験がなくても、可能な限り実践できるように説明する予定です
- オブジェクト指向言語の経験がある方
- オブジェクト指向の基本的な概念や用語を知っていることが前提になっています。言語は問いません
- オブジェクト指向言語を学んだことがなくても理解できるように言葉を選んでいますが、すべてをカバーできているわけではないことに注意してください
以下の知識を持っていると、読み進めやすいです。どれも必須ではありません。
- Java の基礎文法
- Kotlin は Java の構文を簡略化した文法が多いです。基本的な部分を知っていると読み進めやすいです
- Spring Boot の基本的な使い方
- Kotlin と Java で Spring Boot は同様の使い方をします。特に、アノテーションを使った DI コンテナやレイヤの責務の分離について知っていると Spring Boot の事前知識として十分です
- 関数型プログラミングに触れたことがある方
- 本書では Either 型が登場します。知識として必須ではありませんが、概念としてあらかじめ知っていると楽です
本書を読むと何が得られるか
本編で下記のような内容を得られます。
- Kotlin を用いた新規プロジェクトの作成方法
- Spring Boot を用いた Web アプリケーション作成の基本
- Kotlin と Arrow を組み合わせた関数型プログラミングによる Web API の作成方法
本書がカバーしないこと
- プログラミング未経験者を対象とした解説
- プログラミングの経験がまったくない人を対象にしていません
- 認証認可
- 認証認可について議論すると膨大な量になり本書の主題から外れるため、除外しています
- Kotlin の機能について網羅的な解説とベストプラクティス
- 付録 A で本書に出現する文法について軽く触れますが、網羅的ではありません。より良い書き方も存在すると考えているので、ぜひコメントで教えてください
- Spring Boot 以外のライブラリを用いないプレーンなアプリケーションの作り方
- 本書では Spring Boot のほかに Arrow を利用します。理由は、より保守性の高いコードと実装の簡略化のためです。これらを導入できない現場だと本書の内容をうまく活用できない可能性があります
- O/R マッパの選定
- Kotlin および Java には複数 O/R マッパがあります。それぞれのベストプラクティスに合わせて O/R マッパは選定する必要がありますが、それについて本書では触れません。本書では Spring JDBC を利用します
- ログ設計
- 本来はログを出力するべき部分でも、ログの実装を省略しています
サンプルコード
本書で利用するすべてのソースコードは下記のリポジトリに記載しています。
それぞれの節ごとに該当する名前のパスに配置したので、適宜参照してください。
節の初めにそれぞれのリンクも記載します。
v1 から v2 の変更点
本書は、v1 から v2 に更新されました。主な変更点は下表の通りです。v1 バージョンはすでに見ることができません。以前 v1 を読んでいた方々にとって、大きな変更点は No.1 から No.3 です。ほかは細かな変更となっています。
No. | 変更内容 | 理由 |
---|---|---|
1 | Spring Boot v3 へ移行 | Spring Boot v2 EOL のため |
2 | OpenAPI Generator の実装を削除 | OpenAPI Generator は Kotlin を初めて学ぶ人向けには独特すぎたため |
3 | Arrow のバージョンを v1.1 系から v1.2 系に更新 | Arrow の Validated 型と ValidatedNel 型が非推奨になり、EitherNel 型の利用が推奨されていたため |
4 | SpringDoc を追加 | OpenAPI Generator を利用しなくなりましたが、openapi.yaml を生成は必須要件だと考えたため追加 |
5 | 共通例外ハンドラの実装 | バリデーションエラーや汎用的な例外(エンドポイントがない、許可されたメソッドでない、など)をハンドリングするために追加 |
6 | インフラ層の DB テストを削除 | API 統合テストとインフラ層の DB テストで役割の重複がしていたため、API 統合テストに統一 |
使用技術
対象 OS と IDE について
本書は、macOS(M1)と IntelliJ IDEA で解説します。
Windows と VSCode は対象外です。
対象 | OS | エディタ or IDE |
---|---|---|
○ | macOS | IntelliJ IDEA |
× | macOS | VSCode |
× | Windows | IntelliJ IDEA |
× | Windows | VSCode |
言語、DB、利用パッケージ
下表の技術を使用します。すべての解説はしません。
項目 | 要素 |
---|---|
言語 | Kotlin |
DB | postgresql |
主要パッケージ | Spring Boot、Arrow、Spring JDBC |
テスト関連パッケージ | assertj、jqwik、DatabseRider、jacoco |
その他 | detekt、dokka、SpringDoc |