---
title: 現物確認のススメ
tags: 
author: [chota60](https://www.docswell.com/user/chota60)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/9729WYWZJR.jpg?width=480
description: TSUDOI by giftee Tech #3: https://giftee.connpass.com/event/391373/  発表資料です！
published: June 09, 26
canonical: https://www.docswell.com/s/chota60/K4N4EQ-genbutsu
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/9729WYWZJR.jpg)

現物確認のススメ
情報は足で稼ぐ。
chota60


# Page. 2

![Page Image](https://bcdn.docswell.com/page/DJY4LGLN7M.jpg)

はじめに
自慢じゃないかも・・・（不安）


# Page. 3

![Page Image](https://bcdn.docswell.com/page/V7NY4G4VE8.jpg)

はじめに
自慢じゃないかも・・・（不安）
こまけえことはいいんだよ！って人むけ
です！


# Page. 4

![Page Image](https://bcdn.docswell.com/page/YJ9PQWQV73.jpg)

Who?
- chota60
- ギフティ
- 共通IDの運用・保守
- 最近はチルめな音楽が好き


# Page. 5

![Page Image](https://bcdn.docswell.com/page/GJ8DGNG4JD.jpg)

Who?
- chota60
- ギフティ
- 共通ID群の運用・保守
- 最近はチルめな音楽が好き


# Page. 6

![Page Image](https://bcdn.docswell.com/page/LJLMGPGVER.jpg)

目次
- 共通ID群を実現する Keycloak
- Keycloak 運用のお仕事
- 現物確認のススメ


# Page. 7

![Page Image](https://bcdn.docswell.com/page/47MYQ4QN7W.jpg)

共通ID群を実現する Keycloak


# Page. 8

![Page Image](https://bcdn.docswell.com/page/P7R98W84E9.jpg)

共通ID
- 異なるアプリケーション間で共通の認証情報を扱う箱
- 利用者は一度のログインでアプリケーション群を利用できる
- 例：リクルートID、楽天ID、Google アカウント


# Page. 9

![Page Image](https://bcdn.docswell.com/page/PJXQ8P8Z7X.jpg)

共通ID群
例えば以下のように複数の向き先、複数のサービス群を扱っています
- 個人向け : giftee.com
- 法人向け : giftee for Business
- 自治体向け: 旅先納税
※あくまでイメージ


# Page. 10

![Page Image](https://bcdn.docswell.com/page/3JK9KDKVJD.jpg)

ギフティから個人が購入し、個人が受け取る（BtoCtoC）
https://giftee.com/about


# Page. 11

![Page Image](https://bcdn.docswell.com/page/LE3WZR3QE5.jpg)

ギフティから法人が購入し、個人（従業員や顧客）が受け取る（BtoBtoB/BtoBtoE）
https://giftee.biz/about/


# Page. 12

![Page Image](https://bcdn.docswell.com/page/8EDKRY4W7G.jpg)

ギフティから自治体が購入し、個人（旅行者など）が受け取る（BtoGtoC）
https://giftee.co.jp/pressrelease20221102_01/


# Page. 13

![Page Image](https://bcdn.docswell.com/page/V7PKW6MXJ8.jpg)

共通ID群
ギフティのサービスには、多様な利用者がいる
- 発行する人も異なれば、受け取る人も異なる
- 共通IDが必要な場合もあれば、不要な場合もある
- 一緒にすべき場合もあれば、分けるべき場合もある
この複雑さがギフティにおける共通 IDの難しさであり、面白さです


# Page. 14

![Page Image](https://bcdn.docswell.com/page/2JVV8393JQ.jpg)

共通ID群を支える Keycloak
- ギフティのサービスは基本的に薄利多売型
- MAU 課金な Auth0 などの IDaaS はアンマッチ
そのためギフティでは、 Keycloak という OSS を採用しています


# Page. 15

![Page Image](https://bcdn.docswell.com/page/5EGL53ZYJL.jpg)

Keycloak
- Identity and Access Management を実現する OSS
- CNCF Incubating
- マルチテナント対応
- コンテナ環境に適合


# Page. 16

![Page Image](https://bcdn.docswell.com/page/4JQYZ5L67P.jpg)

Keycloak
共通IDを柔軟に実現するOSS
- 容易なセルフホスティング
- 柔軟なテナント設定
- 組み込みだけで提供可能な様々な認証方法


# Page. 17

![Page Image](https://bcdn.docswell.com/page/K74W39DME1.jpg)

ちょろっと demoします


# Page. 18

![Page Image](https://bcdn.docswell.com/page/LJ1Y1KZYEG.jpg)

Keycloak 運用のお仕事


# Page. 19

![Page Image](https://bcdn.docswell.com/page/GJWG8D9172.jpg)

ワンストップなソリューション
導入から運用・保守まで伴走します
- 仕様検討・フィージビリティ検証
- インフラ構築
- UI作成
- テナントの作成
- 連携のための初期設定の実施
- サービスイン後の保守
- アップグレードなどの運用


# Page. 20

![Page Image](https://bcdn.docswell.com/page/4EZL8G9X73.jpg)

Keycloak は柔軟
選択可能な設定が盛りだくさん
- 認証情報の連携プロトコル
- テナントの定義
- ユーザーの属性
- 認証フロー、MFA、アカウントロックなど


# Page. 21

![Page Image](https://bcdn.docswell.com/page/Y76WPYKP7V.jpg)

「なんでもできる」というのは自由ではない
なんでもできるというのは、選択肢が存在しないのと同じです
少しでも負担をなくすため、弊 Keycloak では制約を設けています


# Page. 22

![Page Image](https://bcdn.docswell.com/page/G75MKGPP74.jpg)

アプリケーション連携のための制約
SAML, OpenID Connect, OAuth を用いた認証など様々な方法が存在
↓
実質デファクトである、 OpenID Connect 1.0 を採用
+認証フローは特別な事情がない限り、認可コードフローのみ対応


# Page. 23

![Page Image](https://bcdn.docswell.com/page/9J29WY6ZER.jpg)

ユーザー属性はビジネス要件と割り切る
原則「やらないこと」として下記のポリシーを掲げています
- 認可判断は行わない
- ユーザーの属性情報を保持しない
- クライアント独自の対応はしない
あくまで「認証」に特化した薄い基盤として立てています


# Page. 24

![Page Image](https://bcdn.docswell.com/page/DEY4LG9NJM.jpg)

個別対応という苦難
繋ぎ方は決まっていて、できる範囲も決まっている
それでも個別対応が必要になる局面が存在します


# Page. 25

![Page Image](https://bcdn.docswell.com/page/VJNY4GLV78.jpg)

かんたん


# Page. 26

![Page Image](https://bcdn.docswell.com/page/YE9PQW4VJ3.jpg)

UI
まずはシンプルにこれ
- アプリケーションは自分たち用の画面が欲しいがち
- 共通のUIしかできない、ということは訴求力を失う
- デザインをいい感じにする、というのが必須のタスクになる


# Page. 27

![Page Image](https://bcdn.docswell.com/page/GE8DGNQ4ED.jpg)

初回ログインフロー
稀に良くあるケース
- 利用規約を読んで欲しい
- メールアドレスを登録して欲しい
- パスワードを変更して欲しい（初期パスでログインした場合）


# Page. 28

![Page Image](https://bcdn.docswell.com/page/LELMGPXV7R.jpg)

これらは調査すればなんとかなる
大体ドキュメントに書いてある
- 公式ドキュメント
- 公式 Slack
- 公式 discussions


# Page. 29

![Page Image](https://bcdn.docswell.com/page/4JMYQ4LNJW.jpg)

公式ドキュメント：Server Administration Guide
https://www.keycloak.org/docs/latest/server_admin/index.html


# Page. 30

![Page Image](https://bcdn.docswell.com/page/PJR98WK479.jpg)

discussion の一例
https://github.com/keycloak/keycloak/discussions/8962


# Page. 31

![Page Image](https://bcdn.docswell.com/page/PEXQ8PLZJX.jpg)

むづかしい


# Page. 32

![Page Image](https://bcdn.docswell.com/page/3EK9KDLVED.jpg)

認証方法のカスタマイズ
難易度が高いケースの代表例
- 2段階認証を入れたい
- 「特定の IdP でログイン」を入れたい
- 特殊な拡張がはいった SAML 認証でログインさせたい


# Page. 33

![Page Image](https://bcdn.docswell.com/page/L73WZR6Q75.jpg)

そのほかにも
まだまだある、謎の要望（謎ではない）
- ログインなど特定のイベントをメール通知させたい
- メールアドレスだけで仮登録するフローを組みたい
- 合言葉を知っている人だけに登録させたい
- 連番のパスワードを使いたい（ majiska ? ）


# Page. 34

![Page Image](https://bcdn.docswell.com/page/87DKRYVWJG.jpg)

こ、困る・・・


# Page. 35

![Page Image](https://bcdn.docswell.com/page/VJPKW6VXE8.jpg)

どうするか


# Page. 36

![Page Image](https://bcdn.docswell.com/page/2EVV83Z3EQ.jpg)

現物確認のススメ


# Page. 37

![Page Image](https://bcdn.docswell.com/page/57GL534YEL.jpg)

一般的な情報は n 次情報
Qiita や Zenn の記事は、何次情報かわからないほど間に年月や文脈が挟
まっています
LLM による情報も同様です
何より、公式ドキュメントですら、一次情報にすぎません
より確実な情報が欲しいなら、 零次情報 にあたるべきです


# Page. 38

![Page Image](https://bcdn.docswell.com/page/4EQYZ5G6JP.jpg)

零次情報としてのコード
プログラムを定義しているコードは、ドキュメント以前のドキュメントです
それで動いているなら、それを見るのが確実です


# Page. 39

![Page Image](https://bcdn.docswell.com/page/KJ4W395M71.jpg)

零次情報としてのコード
そもそも、OSS はコードが公開されています
ならそれをみるのが、確実です！


# Page. 40

![Page Image](https://bcdn.docswell.com/page/LE1Y1KWY7G.jpg)

聞いてみたこともある
ドキュメントにはこの情報なさそうなんだけど、どゆこと？
と聞いたら、実装みるといいよってコミュニティの方に言われました
この経験に影響されてたりもします


# Page. 41

![Page Image](https://bcdn.docswell.com/page/GEWG8D61J2.jpg)

質問したことがある回（CNCF の Slack）


# Page. 42

![Page Image](https://bcdn.docswell.com/page/47ZL8GYXJ3.jpg)

二つ、方法を紹介します
- 由緒正しきデバッグ
- 最近のメタ


# Page. 43

![Page Image](https://bcdn.docswell.com/page/YJ6WPYDPJV.jpg)

由緒正しきデバッグ
Keycloak は Quarkus というフレームワークでできた Web アプリ
→つまり、ローカルでデバッグできる！


# Page. 44

![Page Image](https://bcdn.docswell.com/page/GJ5MKG3PJ4.jpg)

IDE を使ったデバッグ
詳しい方法は割愛しますが、IDE の機能を使えばデバッグできます


# Page. 45

![Page Image](https://bcdn.docswell.com/page/LE3WZR66E5.jpg)

ビルド時に生成される Dockerﬁle を編集
FROM registry.access.redhat.com/ubi8/openjdk-21:1.18
ENV LANGUAGE=&#039;en_US:en&#039;
# We make four distinct layers so if there are application changes the library layers can be re-used
COPY --chown=185 target/quarkus-app/lib/ /deployments/lib/
COPY --chown=185 target/quarkus-app/*.jar /deployments/
COPY --chown=185 target/quarkus-app/app/ /deployments/app/
COPY --chown=185 target/quarkus-app/quarkus/ /deployments/quarkus/
EXPOSE 8080
USER 185
ENV JAVA_OPTS_APPEND=&quot;-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager&quot;
ENV JAVA_APP_JAR=&quot;/deployments/quarkus-run.jar&quot;
# この設定を入れることで、 5005 ポートがデバッグ用のポートになる
ENV JAVA_TOOL_OPTIONS=&quot;-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005&quot;
ENTRYPOINT [ &quot;/opt/jboss/container/java/run/run-java.sh&quot; ]


# Page. 46

![Page Image](https://bcdn.docswell.com/page/8EDKRYVM7G.jpg)

あとは素直に
# docker image の build
docker build -f src/main/Docker/Dockerfile.jvm -t sample-quarkus --platform linux/arm64/v8 .
# 5005 port を開放して起動
docker run -i --rm -p 8080:8080 -p 5005:5005 sample-quarkus


# Page. 47

![Page Image](https://bcdn.docswell.com/page/V7PKW6VQJ8.jpg)

ただし
実はもうこの手法は使っていません
前述のデバッグ手段も、現在も使えるか微妙かも・・・


# Page. 48

![Page Image](https://bcdn.docswell.com/page/2JVV83ZPJQ.jpg)

現代のメタ＝生成 AI
まあやっぱ楽なんすよね（堕落）


# Page. 49

![Page Image](https://bcdn.docswell.com/page/5EGL534QJL.jpg)

生成AIに聞いてみる
まあ手法として一定強そうです
GPT 4.2 あたりから普通に Keycloak のことも知っています
が、あくまで集合知に過ぎないので、これでも足りない場合があります


# Page. 50

![Page Image](https://bcdn.docswell.com/page/4JQYZ5GW7P.jpg)

例題
- Keycloak には、パスワード再設定の機能があります
- 基本的にはログイン画面から遷移できるようになっています
- この時、ログイン時専用のセッションも引き継がれます
→ 「あれ？じゃあ固定のpathで遷移できるの？🧐」
固定のpathで遷移させられるなら、ユーザー移行の時に使えるはず・・・調べ
たいなあ・・・


# Page. 51

![Page Image](https://bcdn.docswell.com/page/K74W3951E1.jpg)

Gemini によると、結論らしい


# Page. 52

![Page Image](https://bcdn.docswell.com/page/LJ1Y1KW5EG.jpg)

ほんまか？


# Page. 53

![Page Image](https://bcdn.docswell.com/page/GJWG8D6W72.jpg)

色々言われると怪しく見える


# Page. 54

![Page Image](https://bcdn.docswell.com/page/4EZL8GY273.jpg)

より正確な情報のためには？
なんの文脈も持たない生成 AI は集合知から答えを出します
が、我々は集合知がカバーしているかわからない機能を探しています
したがって、こんなものはアテにすべきではありません（断言）


# Page. 55

![Page Image](https://bcdn.docswell.com/page/Y76WPYR67V.jpg)

そう、コードです
OSS はコードが公開されています
ということは、生成 AI の手がとどくところにコードをおいて、調査して貰えばい
いわけです


# Page. 56

![Page Image](https://bcdn.docswell.com/page/G75MKG8574.jpg)

というわけで、リトライ！


# Page. 57

![Page Image](https://bcdn.docswell.com/page/9J29WYKGER.jpg)

良さそう
なんかいけそうじゃね？
でも無根拠に言ってるんじゃねえの？


# Page. 58

![Page Image](https://bcdn.docswell.com/page/DEY4LGNGJM.jpg)

色々な探し方をしている、の図


# Page. 59

![Page Image](https://bcdn.docswell.com/page/VJNY4GX878.jpg)

良さそう
テキトーに言ってるわけじゃなかった！
実際この返答に合わせて調べると、すんなりいけました
結局動くコードが全てであり、それに近い手法をとるべき
その現物を確認するためのバフとして生成 AIは活用できる
と言えそう


# Page. 60

![Page Image](https://bcdn.docswell.com/page/YE9PQW8XJ3.jpg)

まとめ


# Page. 61

![Page Image](https://bcdn.docswell.com/page/GE8DGN89ED.jpg)

話したこと
- 共通ID群を実現する Keycloak
- Keycloak 運用のお仕事
- 現物確認のススメ


# Page. 62

![Page Image](https://bcdn.docswell.com/page/LELMGPRM7R.jpg)

大事にしていること
- 生成AIの言うことを鵜呑みにしない
- 実際に動かして試した情報が一番
- 実際のコードを解析した情報が二番


# Page. 63

![Page Image](https://bcdn.docswell.com/page/4JMYQ4R6JW.jpg)

確実さはどの時代も大事
結局、確実な情報が一番大事
取れる手法は全てとる
それでアプリケーションや利用者が得すればハッピー
こういうメンタリティで今後もやっていこうと思います


# Page. 64

![Page Image](https://bcdn.docswell.com/page/PJR98WRN79.jpg)

Thank you !


