micronautドキュメント目次メモ

# これは何？

micronaut の[ユーザーガイド](http://docs.micronaut.io/latest/guide/index.html)のどこをを読めばいいかのメモ。
対象は ver1.3.4 のドキュメント。

# 1 Introduction

いわゆる「説明」。背景の説明あり。

## 1.1 What's New?

過去バージョンからの変更履歴。依存ライブラリの記述あり。

# 2 Quick Start

2章全体で、 Hello world アプリを作るまでの手順を解説。

## 2.1 Build/Install the CLI

さまざまなインストール方法の解説。

### 2.1.1 Install with Sdkman

中略。

### 2.1.2 Install with Homebrew

中略。

### 2.1.3 Install with MacPorts

中略。

### 2.1.4 Install through Binary on Windows

中略。

### 2.1.5 Building from Source

中略。

## 2.2 Creating a Server Application

アプリケーション作成の手順を順に説明。
単純なcontrollerのソースと、`@Controller`, `@Get` アノテーションの説明あり。

## 2.3 Setting up an IDE

各IDEの説明だけでなく、mainクラスの説明も。

## 2.4 Creating a Client

micronaut が持つ HTTP client 機能の利用法サンプル。
テストクラス作成の過程で各機能を説明。

## 2.5 Deploying the Application

実行可能jarファイルの作り方。
具体的には以下のどちらか。

```shell
./gradlew assemble
./mvnw package
```

# 3 Inversion of Control

3章は、いわゆるDIの実現方法について。

## 3.1 Defining Beans

Beanの定義例。

## 3.2 How Does it Work?

Beanが裏でどう動いているかの説明。

## 3.3 The BeanContext

`BeanContext`インターフェースの概要。

## 3.4 Injectable Container Types

Beanを扱う方法の一覧表あり。

## 3.5 Bean Qualifiers

Beanの選ばれ方について。

- 名前による
- アノテーションによる
- Beanの優先度（`@Primary`アノテーション）

## 3.6 Scopes

Beanのスコープ（生存範囲）について。

### 3.6.1 Built-In Scopes

既定のスコープの表。

### 3.6.2 Refreshable Scope

任意のタイミングでクリアできる`@Refreshable`スコープについて。

### 3.6.3 Scopes on Meta Annotations

スコープの指定方法について。

## 3.7 Bean Factories

Beanを生成する`@Factory`アノテーションと、nullを返していい条件について。


## 3.8 Conditional Beans

条件を設定する`@Requires`アノテーションについて。
条件付きBean生成のデバッグ方法も。

## 3.9 Bean Replacement

Beanを入れ替える`@Replaces`アノテーションについて。
使用例として、実装を推奨する`＠DefaultImplementation`を説明。

## 3.10 Bean Configurations

Beanをグルーピングする`@Configuration`アノテーションについて。

## 3.11 Life-Cycle Methods

Beanの生成/破棄時に実行される`@PostConstruct`、`@PreDestroy`アノテーションについて。

## 3.12 Context Events

pub/sub的に使えるイベント機構について。

## 3.13 Bean Events

`@PostConstruct`の前後にさらに細かく制御するための、`BeanInitializedEventListener`, `BeanCreatedEventListener` について。

## 3.14 Bean Introspection

クラスの情報を取得する Introspector クラスの挙動について。

## 3.15 Bean Validation

Beanのバリデーションについて。
micronaut標準ではバリデーションをサポートしているものの、仕様完全準拠ではないことに注意。

## 3.16 Bean Annotation Metadata

アノテーションの拡張について。

## 3.17 Micronaut Beans And Spring

Springとの連携について。

## 3.18 Android Support

Android開発について。

# 4 Application Configuration

4章は、アプリケーションの構成と設定の渡し方について。

## 4.1 The Environment

環境変数による基本的な手段について。

## 4.2 Externalized Configuration with PropertySources

`PropertySources`を用いた方法について。

## 4.3 Configuration Injection

`@Value`アノテーションによる参照について。

## 4.4 Configuration Properties

タイプセーフな設定を実現する`@ConfigurationProperties`アノテーションについて。

## 4.5 Custom Type Converters

独自形式をサポートするための`TypeConverter`クラスについて。

## 4.6 Using `@EachProperty` to Drive Configuration

`@EachProperty`アノテーションによる個別設定の実現について。

## 4.7 Using `@EachBean` to Drive Configuration

`@EachBean`アノテーションによるBeanの切り替えについて。

## 4.8 Immutable Configuration

イミュータブルのサポートについて。

## 4.9 JMX Support

JMX(Java Management Extensions) について。

# 5 Aspect Oriented Programming

5章は、AOP（アスペクト志向プログラミング）について。

## 5.1 Around Advice

`Around Advice`と、アドバイスの書き方について。
例として、スタブ値を設定する`@Stub`アノテーションの説明あり。

## 5.2 Introduction Advice

実装を提供する形式の`Introduction Advice`について。

## 5.3 Method Adapter Advice

メソッドに修飾する`Method Adapter Advice`について。
例として`@EventListener`アノテーション。

## 5.4 Validation Advice

バリデーションについて。詳細はJSR 380を参照。

## 5.5 Cache Advice

キャッシュを制御する`Cache Advice`と、キャッシュ機構について。

## 5.6 Retry Advice

リトライを制御する`Retry Advice`について。
例として`@Retryable`アノテーションと`@CircuitBreaker`アノテーション。

## 5.7 Scheduled Tasks

バックグラウンドタスクのスケジュール使える`@Scheduled`アノテーションと、バックグラウンドタスクの制御について。

## 5.8 Bridging Spring AOP

Spring AOPとの連携について。

# 6 The HTTP Server

6章は、HTTPサーバーとの連携について。

## 6.1 Running the Embedded Server

組み込みサーバーについて。

## 6.2 Running Server on a Specific Port

組み込みサーバーのポート番号の指定について。

## 6.3 HTTP Routing

URIパスの指定について。

## 6.4 Simple Request Binding

URIパラメータやCookieのバインディングについて。

## 6.5 Host Resolution

ホスト名の取得方法について。

## 6.6 Client IP Address

クライアントIPアドレスの取得方法について。

## 6.7 The HttpRequest and HttpResponse

HTTPリクエスト情報の詳細について。

## 6.8 Response Status

HTTPレスポンスコードについて。

## 6.9 Response Content-Type

レスポンスのコンテンツタイプの指定方法について。

## 6.10 Accepted Request Content-Type

リクエストのコンテンツタイプの指定方法について。

## 6.11 Reactive HTTP Request Processing

リアクティブ処理について。

### 6.11.1 Using the `@Body` Annotation

データを受け取る`@Body`アノテーションについて。

### 6.11.2 Reactive Responses

レスポンスの返し方について。

## 6.12 JSON Binding with Jackson

JSONの扱い方について。

## 6.13 Data Validation

バリデーションについて。

## 6.14 Serving Static Resources

静的リソースについて。

## 6.15 Error Handling

エラー処理や例外ハンドリングについて。

## 6.16 API Versioning

APIのバージョン管理について。

## 6.17 Handling Form Data

フォームデータの処理について。

## 6.18 Writing Response Data

応答の返し方、特にノンブロッキングI/Oについて。

## 6.19 File Uploads

ファイルアップロードの処理について。

## 6.20 File Transfers

ファイル送信の方法について。

## 6.21 HTTP Filters

HTTPフィルタについて。

## 6.22 HTTP Sessions

セッション管理の方法について。

## 6.23 Server Sent Events

サーバー送信イベントの使い方について。

## 6.24 WebSocket Support

`WebSocket`サポートの概要。

### 6.24.1 Using `@ServerWebSocket`

URIにマッピングする`@ServerWebSocket`について。

### 6.24.2 Using `@ClientWebSocket`

micronaut側はクライアントとなる`@ClientWebSocket`について。

## 6.25 Server Events

サーバーイベントとそのリスナーについて。

## 6.26 Configuring the HTTP Server

HTTPサーバーの設定について。

### 6.26.1 Configuring Server Thread Pools

HTTPサーバーのスレッド構成について。

### 6.26.2 Configuring CORS

CORS（Cross Origin Resource Sharing）について。

### 6.26.3 Securing the Server with HTTPS

HTTPSサポートと証明書使用について。

### 6.26.4 Enabling HTTP and HTTPS

HTTP/HTTPSの有効化について。

## 6.27 Server Side View Rendering

サーバーサイドレンダリングの紹介。

## 6.28 OpenAPI / Swagger Support

OpenAPIとの連携の紹介。

## 6.29 GraphQL Support

GraphQLサポートの紹介。

# 7 The HTTP Client

7章は、組み込まれているHTTPクライアント機能について。

## 7.1 Using the Low-Level HTTP Client

基本機能の`HttpClient`インターフェースと、`Flowable`な`RxHttpClient`がある。

### 7.1.1 Sending your first HTTP request

基本的な使用方法、デバッグ方法の解説。

### 7.1.2 Posting a Request Body

リクエストの送信方法について。
一部をパラメータ化するURIテンプレート機能の紹介。

### 7.1.3 Multipart Client Uploads

マルチパートリクエストの送信方法について。

### 7.1.4 Streaming JSON over HTTP

ストリーミング通信について。

### 7.1.5 Configuring HTTP clients

HTTPクライアントの設定について。

### 7.1.6 Error Responses

400以上のレスポンスが返された場合、`HttpClientResponseException`例外が発生。

### 7.1.7 Bind Errors

リクエストのバインドエラーについて。

## 7.2 Declarative HTTP Clients with `@Client`

`@Client`アノテーションを使用したクライアントの動作について。

### 7.2.1 Customizing Parameter Binding

パラメータのバインディングについて。

### 7.2.2 Streaming with `@Client`

ストリーミングのクライアント処理について。

### 7.2.3 Error Responses

通信エラーのハンドリングについて。

### 7.2.4 Customizing Request Headers

リクエストヘッダーのカスタマイズ方法について。

### 7.2.5 Customizing Jackson Settings

Jacksonの設定方法について。

### 7.2.6 Retry and Circuit Breaker

リトライ制御について。

### 7.2.7 Client Fallbacks

障害発生時のフォールバック機構について。

### 7.2.8 Netflix Hystrix Support

フォールトトレランスのサポートについて。

## 7.3 HTTP Client Filters

クライアントとしてのHTTPフィルタについて。

## 7.4 HTTP Client Sample

サンプルはチュートリアルを参照。

# 8 Cloud Native Features

8章は、クラウド対応について。

## 8.1 Cloud Configuration

提供されている対応環境について。

### 8.1.1 Distributed Configuration

分散されたマイクロサービスでの共有について。

### 8.1.2 HashiCorp Consul Support

HashiCorp Consul対応について。

### 8.1.3 HashiCorp Vault Support

HashiCorp Vault対応について。

### 8.1.4 Spring Cloud Config Support

Spring Cloud対応について。

### 8.1.5 AWS Parameter Store Support

AWS Parameter Store対応について。

## 8.2 Service Discovery

サービスディスカバリ機能について。

### 8.2.1 Consul Support

Consul対応について。

### 8.2.2 Eureka Support

Eureka対応について。

### 8.2.3 Kubernetes Support

Kubernetes対応について。

### 8.2.4 AWS Route 53 Support

AWS Route 53対応について。

### 8.2.5 Manual Service Discovery Configuration

サービスディスカバリの手動設定について。

## 8.3 Client Side Load Balancing

サービスディスカバリを利用した負荷分散について。

### 8.3.1 Netflix Ribbon Support

Netflix Ribbon対応について。

## 8.4 Distributed Tracing

分散トレーシングについて。

### 8.4.1 Tracing with Zipkin

Zipkin対応について。

### 8.4.2 Tracing with Jaeger

Jaeger対応について。

# 9 Serverless Functions

9章は、サーバーレス構成への対応について。

## 9.1 Writing Functions

サーバーレスの実装方法について。

### 9.1.1 FunctionApplication

サーバーレスアプリケーションを定義する`FunctionApplication`クラスについて。

### 9.1.2 FunctionBean

関数の動作を記述する`@FunctionBean`アノテーションについて。

### 9.1.3 Groovy Functions

Groovyスクリプトとしての記述方法について。

## 9.2 Running Functions

実装した関数の実行方法について。

### 9.2.1 Functions as Web Applications

Webアプリケーションとして実行する方法。

### 9.2.2 Functions as CLI Applications

CLIアプリケーションとして実行する方法。

## 9.3 Deploying Functions

サーバーレス構成のデプロイについて。

### 9.3.1 Deploying Functions to AWS Lambda

AWS Lambda環境へのデプロイについて。

### 9.3.2 Deploying Functions to OpenFaaS

OpenFaaS環境へのデプロイについて。

## 9.4 Calling Functions with FunctionClient

アプリケーションから直接呼び出すFunctionClient形式のサポートについて。

# 10 Message-Driven Microservices

10章は、メッセージ駆動型のマイクロサービス構成について。

## 10.1 Kafka Support

Apache Kafka対応について。

## 10.2 RabbitMQ Support

RabbitMQ対応について。

# 11 Standalone Command Line Applications

11章は、CLIアプリケーションとして動作させる方法について。

## 11.1 Picocli Support

Picocli対応について。

# 12 Configurations

12章は、よく使用されるコンポーネントとの連携モジュールについて。

## 12.1 Configurations for Data Access

データベースアクセスのためのモジュール紹介。

### 12.1.1 Configuring a SQL Data Source

SQLデータソースの構成について。

### 12.1.2 Configuring Hibernate

Hibernate / JPA の構成について。

### 12.1.3 Configuring MongoDB

MongoDBの構成について。

### 12.1.4 Configuring Neo4j

Neo4j Bolt Driverの構成について。

### 12.1.5 Configuring Postgres

Postgresの構成について。

### 12.1.6 Configuring Redis

Redisの構成について。

### 12.1.7 Configuring Cassandra

Cassandraの構成について。

### 12.1.8 Configuring Liquibase

Liquibaseの構成について。

### 12.1.9 Configuring Flyway

Flywayの構成について。

# 13 Language Support

13章は、各JVM言語のサポートについて。

## 13.1 Micronaut for Java

Java言語について。

### 13.1.1 Using Micronaut with Java 9+

Java 9以降での注意点について。

### 13.1.2 Incremental Annotation Processing with Gradle

Gradleを利用したインクリメンタル処理について。

### 13.1.3 Using Project Lombok

Project Lombokを使用する際の注意点について。

### 13.1.4 Configuring an IDE

IDEを使用する際の設定方法について。

### 13.1.5 Retaining Parameter Names

メソッドパラメータ名が保持されないことで発生する問題へのトラブルシューティングについて。

## 13.2 Micronaut for Groovy

Groovy言語について。

## 13.3 Micronaut for Kotlin

Kotlin言語について。

### 13.3.1 Kotlin, Kapt and IntelliJ

KotlinとIntelliJの組み合わせについて。

### 13.3.2 Incremental Annotation Processing with Gradle and Kapt

GradleとKaptを使用した際のインクリメンタル処理について。

### 13.3.3 Kotlin and AOP Advice

KotlinでAOPを実現する際の注意点について。

### 13.3.4 Kotlin and Retaining Parameter Names

メソッドパラメータ名が保持されないことで発生する問題へのトラブルシューティングについて。

### 13.3.5 Coroutines Support

コルーチンのサポートについて。

## 13.4 Micronaut for GraalVM

GraalVMについて。

### 13.4.1 Microservices as GraalVM native images

GraalVMネイティブイメージへの対応について。

### 13.4.2 GraalVM and Micronaut FAQ

GraalVMを使用する際のFAQ。

# 14 Management & Monitoring

14章は、管理エンドポイントの構成について。

## 14.1 Creating Endpoints

管理エンドポイントの作成について。

### 14.1.1 The Endpoint Annotation

エンドポイントを作成する`@Endpoint`アノテーションについて。

###　14.1.2 Endpoint Methods

エンドポイントで実装するメソッドについて。

### 14.1.3 Endpoint Configuration

エンドポイント構成の設定について。

## 14.2 Built-In Endpoints

組み込みエンドポイントの紹介。

### 14.2.1 The Beans Endpoint

Bean定義に関する情報を返す、Beansエンドポイントについて。

### 14.2.2 The Info Endpoint

静的情報を返すInfoエンドポイントとカスタマイズ方法にについて。

### 14.2.3 The Health Endpoint

動作状態を返す、Healthエンドポイントについて。

### 14.2.4 The Metrics Endpoint

Micrometerと連携する、Metricsエンドポイントについて。

### 14.2.5 The Refresh Endpoint

アプリケーションの状態を更新し再インスタンス化しなおす、Refreshエンドポイントについて。

### 14.2.6 The Routes Endpoint

URI情報を返す、Routesエンドポイントについて。

### 14.2.7 The Loggers Endpoint

ロガーの情報とログレベルを設定する、Loggersエンドポイントについて。

### 14.2.8 The Caches Endpoint

アプリケーション内のキャッシュを制御する、Cachesエンドポイントについて。

### 14.2.9 The Server Stop Endpoint

サーバーを停止する、Stopエンドポイントについて。
デフォルトでは無効。

### 14.2.10 The Environment Endpoint

環境情報を取得する、Environmentエンドポイントについて。

# 15 Security

15章は、セキュリティ機能の紹介。

# 16 Multi-Tenancy

16章は、マルチテナンシーについて。

## 16.1 Multi-Tenancy GORM

GORMとの連携について。

# 17 Micronaut CLI

17章は、micronautでの開発で使用する`mn`コマンドの説明について。

## 17.1 Creating a Project

プロジェクトの作成について。

## 17.2 Profiles

テンプレート等を含む、プロファイル機能について。

### 17.2.1 Comparing Versions

バージョンの比較方法について。

## 17.3 Features

追加の依存関係を構成する、フィーチャーについて。

## 17.4 Commands

プロファイルに含まれる、実行可能なコマンドについて。

## 17.5 Reloading

15章は、開発時の再起動（ホットリロード等）について。

### 17.5.1 Automatic Restart

再起動の方法について。

### 17.5.2 JRebel

JRebelとの連携について。

### 17.5.3 Spring-Loaded

Spring-Loadedとの連携について。

### 17.5.4 Reloading with Gradle

Gradleを利用している場合の再起動について。

### 17.5.5 Reloading with an IDE

IDEを利用している場合の再起動について。

## 17.6 Proxy Configuration

HTTPプロキシ環境下での操作方法について。

# 18 Appendices

18章は付録。

## 18.1 Frequently Asked Questions (FAQ)

micronautに関するFAQ。

## 18.2 Using Snapshots

micronautの配布方法について。

## 18.3 Common Problems

micronautを使用する際に発生する一般的な問題について（トラブルシューティング）。

## 18.4 Breaking Changes

これまで/これからの重大な変更について。