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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
muno92
PRO
December 19, 2025
Programming
260
0
Share
2年のAppleウォレットパス開発の振り返り
muno92
PRO
December 19, 2025
More Decks by muno92
See All by muno92
PHPでバイナリをパースして理解するASN.1
muno92
PRO
0
490
forteeの改修から振り返るPHPerKaigi 2026
muno92
PRO
3
360
Cloudflare Tunnelで開発環境をインターネットに公開する
muno92
PRO
0
110
PsySHから紐解くREPLの仕組み
muno92
PRO
1
850
RayでPHPのデバッグをちょっと快適にする
muno92
PRO
0
690
Appleウォレット / Googleウォレットに チケットを保存する方法
muno92
PRO
2
4.6k
歴史を重ねたシステムの開発に趣味で関わり始めて
muno92
PRO
1
610
PHPでGoogle Walletにチケットを追加する
muno92
PRO
0
860
カンファレンススタッフはいいぞ
muno92
PRO
1
420
Other Decks in Programming
See All in Programming
CLIであることを活かしたGitHub Copilot CLI活用術 / GitHub Copilot CLI Pro Tips & Tricks
nao_mk2
1
1.2k
AI駆動開発勉強会 広島支部 第一回勉強会 AI駆動開発概要とワークショップ
hayatoshimiu
0
430
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.1k
タクシーアプリ『GO』の バックエンド開発のおける AI利活用と若者のすべて
pyama86
3
1.8k
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
130
Spec-Driven Development with AI-Agents: From High-Level Requirements to Working Software
antonarhipov
2
440
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
3
1.8k
The Arts and Crafts of Work in the AI Era — Toward Mastery in Software Development
kuranuki
1
710
AI時代の仕事技芸論 — ソフトウェア開発で「遊ぶように働く」職人的熟達のすすめ
kuranuki
1
600
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.1k
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
170
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
180
Featured
See All Featured
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.5k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
600
WCS-LA-2024
lcolladotor
0
610
Are puppies a ranking factor?
jonoalderson
1
3.5k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
How to build a perfect <img>
jonoalderson
1
5.6k
Test your architecture with Archunit
thirion
1
2.3k
Thoughts on Productivity
jonyablonski
76
5.2k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
150
How to Ace a Technical Interview
jacobian
281
24k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
230
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