準備物
今回は Spring REST Docs、Asciidoc、Github actions と Github Pages を使用します。
- Java 21
- Gradle
- Spring Boot 3.3.2
- Asciidoc
- Github のアカウント
- 飲み物 🍺
何故Gradle?
今回 gradle を使う理由としてはビルドの速さです。最低10倍から最高100倍まで早いとの記事もあります。
Spring チームが Maven から Gradle に変更した理由でもあります。
Github Pages を設定する
まず Github Pages の設定を変更してください。
Github Pages の Build と Deploy を Github Actions でやるための設定になります。
Repository > Settings > Pages > Build and deployment > Source
で Github Actions
を選択
Gradle に asciidoc の設定を入れます
この設定は Spring をビルドする時に asciidoc を生成して結果物の index.html
を /static/docs
にコピーする設定になります。
今回は groovy
ではなく kotlin
を使います。 理由としてはどんどん Kotlin + Spring が増えつつあり kotlin での書き方の勉強のため使いました。
build.gradle.kt
index.adoc を作っておく
index.html
を生成するための adoc を用意します。
基本的に Spring REST Docs を用いてテストを書いてビルドすると build/generated-snippets
の中に snippet
が生成されます。
これらを src/docs/asciidoc/
の中に index.adoc
ファイルを作って snippets
を index.adoc
の中に入れ込むと asciidoctor
がビルドする時に index.html
を生成してくれます。
Github の workflows を書きます
最終段階です。Github actions を用いてプロジェクトをビルドして、生成された API 明細(asciidoc)を Github pages に Deploy します。
0. Trigger
紹介するための workflow なので push
する時に actions が動くようにします。
1.ビルドする
プロジェクトをビルドしてビルドする時生成された asciidoc(index.html
) を次の job で使うために upload
します
2.Github Pages に Deploy します
Upload した index.html
を Download します。
Download した index.html
をそのまま Github Pages に Deploy します。
何故 index.html
?
Github Pagesはエントリーポイントとしてindex.htmlを探します。
workflows全文確認
確認する
Githubに入り Code > Deployments
でご確認できます。
画像を見せることが今はできないので後ほど修正しておきます。
結果
- 自動化されたAPI文書の生成ができるようになりました
- 文書が実際のテストコードから(テストがPASSされたことが前提)生成されるため、文書とコードとの相違が発生する可能性が低くなります
- 必要であればasciidocではなくopenapiにもできます
- ci/cdパイプラインを用いて文書を生成して配布しているため、文書の最新化を測れるし文書化の負荷が減ります
以上です。