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
muno92
PRO
December 19, 2025
Programming
290
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
580
forteeの改修から振り返るPHPerKaigi 2026
muno92
PRO
3
430
Cloudflare Tunnelで開発環境をインターネットに公開する
muno92
PRO
0
120
PsySHから紐解くREPLの仕組み
muno92
PRO
1
890
RayでPHPのデバッグをちょっと快適にする
muno92
PRO
0
740
Appleウォレット / Googleウォレットに チケットを保存する方法
muno92
PRO
2
4.8k
歴史を重ねたシステムの開発に趣味で関わり始めて
muno92
PRO
1
620
PHPでGoogle Walletにチケットを追加する
muno92
PRO
0
890
カンファレンススタッフはいいぞ
muno92
PRO
1
420
Other Decks in Programming
See All in Programming
Apache Hive: Toward a Cloud Native Lakehouse
okumin
0
180
JAWS-UG横浜 #102 AWSサ終供養LT会 成仏できない AWS サービスたち 〜本日、三体供養します〜
maroon1st
0
340
What's New in Android 2026
veronikapj
0
250
<title><a id="</title>君はこのHTMLをパースできるか"></a></title> #雑LT_study
pizzacat83
0
140
PostgreSQL 18で考えるUUID主キー
kazuhiro1982
0
460
【QA Test Talk Vol.8】AI-DLC による Whole Team Approach の加速
pkshadeck
PRO
0
120
Android CLI
fornewid
0
210
VibeCodingからAgenticWorkflowへ
starfish719
0
320
自動化したのに回らないテスト運用の壁ーAI時代の品質責任と生産性
mfunaki
0
130
仕様駆動開発へのトライを機に チームに適合する手法を模索し続けている話
freee
PRO
0
450
属人化した知識を、 AIが辿れる地図にする
pkshadeck
PRO
1
150
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
4
380
Featured
See All Featured
Context Engineering - Making Every Token Count
addyosmani
9
1k
The Spectacular Lies of Maps
axbom
PRO
1
890
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
How to Talk to Developers About Accessibility
jct
2
490
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
Navigating Weather and Climate Data
rabernat
0
460
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
Leo the Paperboy
mayatellez
8
2.1k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
730
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