Keycloak 26.0.5 でエッジケースな不具合を踏んだ感想話

どうも！

以前のポエムでは Keycloak の最近の動向を褒めました：[最近の Keycloak はとてもえらい](https://qiita.com/chota60/items/6dc5859830d86a2a0da4)

今回もポエムです。
最新のバージョンにアップデートした際、遭遇した不具合とその調査を完走した感想を散文的に共有します。世の中の Keycloak ユーザーの何かの足しにできたらな、と思いますー！

## 想定読者

こんな人の共感や情報収集の足しにできれば幸い、くらいのテンションで書いています。

- Keycloak を運用している
- Keycloak を検討している

## この記事で話すこと

- 最新（寄り）の不具合を踏んだことによる学び
- 学びを踏まえて、どんなスタンスを取って運用していくべきか

## 遭遇した不具合と対応の方針

遭遇したのは大きく二つ。より詳細な話は別記事に切り出してるので、多くは語りません。

- [Keycloak 25.0.1 ~ 26.0.5 にて iPhone でログインすると not found 画面に遷移する](https://qiita.com/chota60/items/7f27ea8d5d1687102a26)
- [Keycloak 26.0.5 にて、管理画面で realm を切り替えられない件](https://qiita.com/chota60/items/482c234fd19788926b97)


実はどちらの変更についても、すでに issue が切られており、修正したり、暫定対応を打つためのヒントが公開されている状態でした。

具体としては、PR を先んじて取り込むことと、修正版のリリースを待つことで解決していく方針をとりました。

## そもそもなぜ最新のバージョンにアップデートしていたのか

往々にして、ソフトウェアのメジャーアップデート直後は不具合がありがちとされています。今回踏んだものも含め、感覚的にはその説は正しいと思っています。

Keycloak では[セキュリティポリシー](https://www.keycloak.org/security)との兼ね合いから、マイナーバージョンまでは最新のものに追従することが実質的に推奨されています。
また、Keycloak は近年開発活動が非常に活発であり、メジャーアップデートのたびに実験的な機能も含めて様々な改修が行われています。多くの自分たちのユースケースには無関係な機能とともに、非常に有意義な機能変更・改修が含まれています。

したがって、セキュリティ的な側面と機能改修による恩恵を得たいという側面の両面を得るため、積極的に最新のマイナーバージョンまで追従するという方針を現在選択しています。

## 不具合を踏み抜くことで見出したスタイル

こうしたメンタルを持って運用を進めていくのが良さそうだ、と思ったポイントがいくつかあります。

### 未来を予測するよりも、腹を括る方に精神を割く

STG 環境などで軽く動作確認をしても、特定のケースだけで発生するような不具合は検知しづらいものです。
リハーサルとして確認することは重要ですが、全てのケースを担保し続けることは負担が大きく、また Keycloak 本体のテストやフローによって保証されている部分も大きいです。


特に、最新バージョンというやつには紹介したようなエッジケースに遭遇することが往々にしてあります。
今回はたまたますでに踏んでいる人が居ただけで、PR が出てきないような不具合も踏み抜くはずです。

頑張って全てのケースで動作を保証しに行くよりも、「そういうこともある」と腹を括っておくことのほうが結果的にコスパよく立ち回れる気がします。

### 不幸な未来に、みんなで向き合う

いわば最新の不具合に遭遇した場合、まずは以下のアプローチによって調査を深めることが良いはずです。

- 事象の結果として何が起きているのか、抽象的な事実を収集する
- ログと実装[^1]の照らし合わせることで、事実を具体的に把握する
- issue や discussion , そして PR を確認し、他に同じ事象と向き合っている人がいないか確認する

今回のケースにとどまらず、これらのアプローチは起きている事象の把握から対策案、あるいは一時的な対応方針を立てる助けになるはずです。

そして、逆も然りなはず。つまり、調査を通じて自分が初めて踏んでいる不具合だと思ったなら、他の人が上記の調査を行う際参照できるようにすべきです。

そうすることできっと、不幸な未来も避けられるはずです。やっていきたいなと思います。

[^1]:Keycloak は OSS であり、コードが全量公開されています（ https://github.com/keycloak/keycloak ）。そのため、やろうと思えば手元で不具合を再現し、IDE でトレースすることも可能なはずです。


## これからやっていくべきこと

「今回はたまたま先駆者がいた」ため、なんとかなりました。
先駆者がいない場合に、自分が行動を取れるよう、 Keycloak 本体以外の部分を強化すべきだと思っています。

### 収集できる事実を拡張する

エッジケースな不具合に遭遇し、その対策を考えたい時必要になるのは、何よりも事実の情報です。

- 事実の量を増やす
    - アプリケーションログ
    - DB ログ
    - ネットワークログ
- 事実の種類を増やす
    - ユーザや管理者のイベントを DB だけでなく、ログにも出力する
    - `/metrics` によるパフォーマンス関連の情報を収集する
    - Sentry などのツールによる恒常的な観測によってエラー情報やログイン数などの数値を把握できるようにする
- 事実へのアクセスポイントを増やす
    - 方法は不明ですが、サマリーや監視の仕組みを整えるアプローチがあるはず

こういったことを改善として積み上げることで、何かあった時の対処方法が増えるはずです。
追加の仕組みをどうにかして取り入れる、という過程が必要になるので実現コストとの見合いになるとは思いますが、やっていきたいところです :cat: 

### Keycloak のコミュニティに接する量を増やす

どれだけ事実を集めても、共有しなくては、避けられたはずの不幸な未来を誰かに迎えさせてしまいます。
とはいえ、外部のコミュニティにフィードバックを送ることには困難が伴います。

もちろん個人差はありますが、自分は以下のことを意識して萎縮しがちです。

- 「一見様お断り」「俺たちには俺たちのやり方がある」という空気感
- 的を得ない発言に価値はない雰囲気
- 誤った発言を一度したらそれ以降見向きはされない雰囲気

~~全部雰囲気なので、ただの杞憂説がとてもありますね！~~
これを乗り越えるため、単純な接触機会を増やしていくことを続けていこうと思います。

[以前の自分の記事](https://qiita.com/chota60/items/6dc5859830d86a2a0da4)で触れていますが、近年の Keycloak ではさまざまな活動が行われており、アプローチは取りやすいはずです。
今回不具合調査の過程でも、いろんな issue や discussion を読みました。

Keycloak を取り巻く組織や利用者・開発者両面を知ることで、恐怖を減らして運用していきたいと思います :cat: 


それではー!