Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
2年のAppleウォレットパス開発の振り返り
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
muno92
PRO
December 19, 2025
Programming
300
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
2年のAppleウォレットパス開発の振り返り
muno92
PRO
December 19, 2025
More Decks by muno92
See All by muno92
PHPでバイナリをパースして理解するASN.1
muno92
PRO
0
600
forteeの改修から振り返るPHPerKaigi 2026
muno92
PRO
3
450
Cloudflare Tunnelで開発環境をインターネットに公開する
muno92
PRO
0
130
PsySHから紐解くREPLの仕組み
muno92
PRO
1
900
RayでPHPのデバッグをちょっと快適にする
muno92
PRO
0
750
Appleウォレット / Googleウォレットに チケットを保存する方法
muno92
PRO
2
4.9k
歴史を重ねたシステムの開発に趣味で関わり始めて
muno92
PRO
1
620
PHPでGoogle Walletにチケットを追加する
muno92
PRO
0
910
カンファレンススタッフはいいぞ
muno92
PRO
1
430
Other Decks in Programming
See All in Programming
S3 を使うアプリケーションをローカル完結で動かすことに全力を注いでみた / Running S3 Apps Offline
contour_gara
0
660
まずはプロンプトガイドを読もう、話はそれからだ
kiakiraki
1
230
Introducing Stack Pull Request in GitHub
kkamegawa
0
110
AI駆動開発にグラフDBを重ねてみた
satoshi256kbyte
0
220
go-spidermonkeyでAIエージェントのCode Modeを実装する
syumai
3
1.3k
Jindong: Introducing Declarative Haptics in Compose Multiplatform
l2hyunwoo
0
130
Webエンジニアなのにブラウザの仕組みがわからないので、Pythonで自作してみた
tatsuki12
4
1.1k
AI Readyの正体はデータマネジメントだ メダリオン2.0の最前線
freee
PRO
0
420
<title><a id="</title>君はこのHTMLをパースできるか"></a></title> #雑LT_study
pizzacat83
0
180
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
270
業務時間外もAIに働いてもらう話
colorful12
2
7.2k
複数の Claude Code が"放置"されてしまう問題をCLI ダッシュボードを自作して解決した話
sumihiro3
1
740
Featured
See All Featured
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
220
Exploring anti-patterns in Rails
aemeredith
3
480
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Fireside Chat
paigeccino
42
4k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
630
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
490
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
For a Future-Friendly Web
brad_frost
183
10k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
2
3.8k
The World Runs on Bad Software
bkeepers
PRO
72
12k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Transcript
2年のAppleウォレット パス開発の振り返り 2025/12/20 PHPer⼤忘LT会 2025 @muno_92
⾃⼰紹介 • X (Twitter): @muno_92 • PHPer • 趣味: カンファレンススタッフ
◦ PHPerKaigi ◦ PHPカンファレンス⼩⽥原 ◦ iOSDC Japan 2
2年経ったforteeのウォレット機能 • 2023年12⽉頃〜 • Appleウォレット‧Google ウォレットの両⽅に対応 3
fortee (フォルテ) • カンファレンス運営が便利になるシステム • PHPerKaigi / iOSDC Japan 委員⻑の⻑⾕川さんが開発
• PHP製 https://fortee.jp 4
Appleウォレットとは • ウォレットアプリで搭乗券などの 「パス」を管理できるサービス • イベントチケットに使うと ◦ イベント毎に専⽤アプリを⼊れ なくても簡単にチケットを出せ るようになる
5
Appleウォレット(のパス)の開発 を振り返ります 6
きっかけ • iOSDC Japan 2023 (9/1〜9/3) ◦ チケットのQRコードをブラウザで提⽰ ▪ 開くのに⼿間取る⼈も
• アンケート「(要約) Appleウォレットに追加できると良 いかも」 7
🤔「Appleウォレットの実装って どんな感じなんだろう?」 8
作った Appleウォレット Google ウォレット 9
開発の歴史 • 最⼩実装版 (2023/12/2〜) • 更新対応版 (2024/11/26〜) • ⼀括更新対応版 (2025/9/15〜)
10
最⼩実装版 (2023/12/2〜) • 必要最低限 ◦ パスをiPhoneに新規追加 ◦ チケット番号‧QRコードの表⽰ • それ以外は割り切った
11
詳しい実装については https://fortee.jp/iosdc-japan-2024/proposal/cf6f4134-8ae5-4b4a-b001-d4abeffc03b4 12
初期開発の振り返り • 機能を絞ったことで想定より早くリリースできた 🎉 ◦ 意図してなかったがPHPカンファレンス北海道2024 に間に合い、便利だと実感できた • 後々ネックになってくる設計も‧‧‧ 13
2023/12時点 • ✅ パスの新規発⾏ • ❌ キャンセル時の無効化 • ❌ カンファレンス終了後のアーカイブ
• ❌ カンファレンス共通情報の埋込‧⼀括更新 14
更新対応版 (2024/11/26〜) • パスの更新に対応 • できるようになったこと ◦ 参加者名の表⽰‧変更反映 ◦ キャンセル時の無効化
◦ カンファレンス終了後のアーカイブ 15
補⾜: パスのアーカイブ • イベントの終了時刻を埋め込むと終了後に⾃動でアー カイブしてくれる • 終了イベントのパスで埋め尽くされなくて済む ◦ 地味に便利 •
更新対応とセットで埋め込んだ ◦ 万が⼀時間が変わった時に更新できないと困るので 16
パス更新に対応していなかった理由 • パスの更新はめんどい ◦ サーバーからiPhone内のパスは直接更新できない ◦ 「iPhoneに更新がある事を伝える」→「更新後の パスを取ってこさせる」必要がある 17
forteeから発⾏したAppleウォレットのパスを更新できるようにしま した && 更新⽅法の解説 18
forteeから発⾏したAppleウォレットのパスを更新できるようにしま した && 更新⽅法の解説 19
forteeから発⾏したAppleウォレットのパスを更新できるようにしま した && 更新⽅法の解説 20
地味に⾯倒だったけど対応 💪 21
更新対応の振り返り • チケットのキャンセルなど運⽤に必要な機能を備えら れた • パスの更新フローについて⾃信を持って説明できるよ うになった ◦ 「ドキュメントを読んで知っている」とは⼤違い 22
2024/12時点 • ✅ パスの新規発⾏ • ✅ キャンセル時の無効化 • ✅ カンファレンス終了後のアーカイブ
• ❌ カンファレンス共通情報の埋込‧⼀括更新 23
⼀括更新対応版 (2025/9/15〜) • ⾒た⽬上はあまり変わっていない • ⼀括更新する仕組みを追加した 24
なぜ⼀括更新したくなったのか • 「受付の近くにいるときだけロック画⾯ にパスを表⽰」をやりたかった 25
iBeaconで「受付近く」を判別 • Bluetooth Low Energy (BLE) を使⽤した技術 • Appleウォレットの場合 ◦
受信したビーコンとUUIDが⼀致したパスがロック 画⾯に表⽰される 26 iBeacon ‧UUID: XXX UUID: XXX
UUIDは変えたくなるかも知れない • 変更する場合、全てのパスに埋め込んだUUIDを更新し ないといけない • ⼀括更新とセットで実装した 27
パスの⼀括更新 • ⼀括更新⽤のAPIは無い • パスの数だけ更新処理をバッチで回す ◦ 1更新毎に複数のリクエストがforteeに⾶んでくるの で更新ペースは若⼲配慮している 28
ちなみに: Google ウォレット • Google ウォレットはチケットを構成する情報が2つ に分かれている ◦ 共通情報 (パスクラス)
◦ 各参加者固有の情報 (パスオブジェクト) • 共通情報を更新したい場合はパスクラスをPUT or PATCHリクエストで更新するだけでOK ◦ とても楽 29
伏線回収: パスの更新⽇時 • パス更新時、iPhoneにパスの更新⽇時を伝えない といけない • それまで ◦ パスの更新⽇時 =
参加者レコードの更新⽇時 ◦ ビーコンのUUIDが変わった場合、参加者レ コードは更新されない 🤯 30
お茶を濁した • パスの更新⽇時 = max(参加者レコードの更新⽇時, ウォ レット共通設定の更新⽇時) • もう1つ条件が増えたらリファクタリングするかな ‧‧‧
31
⼀括更新対応の振り返り • iBeacon動かなかった‧‧‧ ◦ リベンジしたい • カンファレンス共通情報を追加しやすい基盤は作れた 32
現在 • ✅ パスの新規発⾏ • ✅ キャンセル時の無効化 • ✅ カンファレンス終了後のアーカイブ
• ✅ カンファレンス共通情報の埋込‧⼀括更新 33
forteeの開発以外にも 34
旅先で実機確認したり 35
各社のパスをコレクションしたり 36
開発⽤のツールを作ったり 37
⽇々ウォレットを楽しんでいます 38
まとめ • ちょっとした好奇⼼で開発したネタが2年続いている ◦ 今でも楽しい ◦ 2年続くと反省点も⾒つかる • 気になったネタがあったら気軽に取り組んでみると良 い出会いがあるかも
39
ご清聴ありがとうございました 40