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
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
muno92
PRO
December 19, 2025
Programming
0
230
2年のAppleウォレットパス開発の振り返り
muno92
PRO
December 19, 2025
Tweet
Share
More Decks by muno92
See All by muno92
forteeの改修から振り返るPHPerKaigi 2026
muno92
PRO
0
28
Cloudflare Tunnelで開発環境をインターネットに公開する
muno92
PRO
0
75
PsySHから紐解くREPLの仕組み
muno92
PRO
1
800
RayでPHPのデバッグをちょっと快適にする
muno92
PRO
0
630
Appleウォレット / Googleウォレットに チケットを保存する方法
muno92
PRO
2
4.3k
歴史を重ねたシステムの開発に趣味で関わり始めて
muno92
PRO
1
580
PHPでGoogle Walletにチケットを追加する
muno92
PRO
0
820
カンファレンススタッフはいいぞ
muno92
PRO
1
410
PHPerKaigi 2022をきっかけにPHPStanにコントリビュートした話 / PHPerKaigi makes me PHPStan's Contributor
muno92
PRO
0
880
Other Decks in Programming
See All in Programming
AI活用のコスパを最大化する方法
ochtum
0
350
PHP 7.4でもOpenTelemetryゼロコード計装がしたい! / PHPerKaigi 2026
arthur1
1
430
Takumiから考えるSecurity_Maturity_Model.pdf
gessy0129
1
170
Java 21/25 Virtual Threads 소개
debop
0
300
メッセージングを利用して時間的結合を分離しよう #phperkaigi
kajitack
3
490
Migration to Signals, Signal Forms, Resource API, and NgRx Signal Store @Angular Days 03/2026 Munich
manfredsteyer
PRO
0
180
Windows on Ryzen and I
seosoft
0
430
モダンOBSプラグイン開発
umireon
0
190
ベクトル検索のフィルタを用いた機械学習モデルとの統合 / python-meetup-fukuoka-06-vector-attr
monochromegane
2
570
How to stabilize UI tests using XCTest
akkeylab
0
140
AI Assistants for Your Angular Solutions
manfredsteyer
PRO
0
160
Codex CLI でつくる、Issue から merge までの開発フロー
amata1219
0
240
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
97
6.6k
Typedesign – Prime Four
hannesfritz
42
3k
Chasing Engaging Ingredients in Design
codingconduct
0
150
A Tale of Four Properties
chriscoyier
163
24k
Making Projects Easy
brettharned
120
6.6k
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
Deep Space Network (abreviated)
tonyrice
0
97
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.8k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.4k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.2k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
10k
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