世界約50カ国の国と地域から集まった個性豊かなプロダクトメンバーたちの声を通して、モノづくりへの姿勢や雰囲気をダイレクトにお伝えするTech Talksシリーズ。
今回は、PayPayへ新たに実装された、待望の取引履歴のダウンロード機能について、開発を通じての課題や学びを聞きました。

Chiueh Yu Jiuan(Gwen)
Product Manager
台湾出身のGwenです。台湾企業でのPM経験を経て、人々の生活にインパクトを与えるB2C領域での仕事に魅力を感じ2022年12月にPayPayに入社しました。日本屈指の決済アプリであるPayPayに携われることにワクワクしています。

Yana Nugraha
Backend Engineer
インドネシア出身のYanaです。旅行会社やニュースサイトでバックエンドエンジニアとして働いたのち、2023年5月にPayPayに入りました。来日して痛感した現金社会の現状を、PayPayがどう変えていくのか、非常に楽しみです。

David Fox
iOS Engineer
北アイルランド出身のDavidです。2023年1月にPayPayで働き始めました。ロンドンや日本の様々な企業で15年ほどiOSアプリケーションの開発に携わってきました。情熱を持ち、ユーザーファーストな姿勢でプロダクト開発に取り組むことで、素晴らしいユーザー体験を提供できると信じています。

Fransisca Afriani
QA Engineer
インドネシア出身のFransiscaです。開発者としてキャリアをスタートした後、QAエンジニアへとシフトし、金融業界で働いてきました。2023年3月にPayPayに入り、日常生活への影響が大きいPayPayの品質保証に携わっています。
今回のプロジェクト概要を教えてください
Gwen:
今回実装したのは、PayPayアプリ上でユーザーが行った取引の履歴を、CSV形式で簡単にダウンロードできる機能です。履歴のダウンロードに対応することで、様々な場面で収支管理にお役立ていただけるようになりました。例えば、確定申告や家計簿アプリを使う際、ダウンロードしたCSVファイルを家計簿アプリや会計ソフトなどに取り込むことで、簡単かつ便利に確定申告の作成や家計管理が可能になります。
プロジェクト開始のきっかけは、ユーザーがPayPay上の取引を確認し、PayPay以外のサービスを使って手動で帳簿付けを行っていたことです。帳簿付けをお手伝いすることで、PayPayアプリを使った個人の資産管理を始めてもらう第一歩にしたいと考えました。
プロジェクトにおける、それぞれの役割は?
Gwen:
私はプロダクトマネージャーとして、機能の設計やロードマップ作成をリードし、関連部門との調整も行いました。取引履歴にはPayPayのすべてのデータが含まれているため、仕様をしっかりと定義したうえで、プロダクトメンバーや経営陣はもちろん、ビジネス/PR/CSチームといったさまざまな関係者と協力し、実装を進めていく必要がありました。
加えて、この機能は2024年度の確定申告が始まる前までにリリースすることが求められました。多くのステークホルダーと連携して素早く開発を進め、バグを全て解決し、高品質なサービスに仕上げるのがミッションでした。

Yana:
私の役割は、機能の要であるCSVファイルを作成し、ダウンロード可能にするためのバックエンドコンポーネントを開発することでした。また、PayPay上で行われる20通りほどある取引種別を理解したうえで、各パターンをどのように取引履歴一覧へ落とし込んでいくかを検討し、エンジニアたちへ共有する役割も担いました。
David:
本機能のPayPayのiOSアプリへの実装を担当しました。加えて、ビジネス部門から依頼された機能について、技術的な観点から実現可能性を検討し、各チームとその内容の連携も行いました。例えば、ユーザーにアプリ外での操作を要求せず、アプリ内に取引履歴のスプレッドシートを表示させたいというリクエストがありましたが、開発を始める前に、このような要件を実現できるのかを調査し、ドキュメントを作成する役割もありました。さらに、ユーザー体験の向上という観点から、各機能がどのように動作するかの仕様策定にも協力しました。
Fransisca:
QAエンジニアとして、開発された機能が要件を満たしていることを確認し、想定通りに動作することを保証するのが私のミッションでした。エンジニアやプロダクトマネージャー、デザイナーなどと協力して数多くのテストケースを想定し、機能のリリース前に不具合を発見していきました。
開発において、特にチャレンジングだった箇所は?
Yana:
まず、大量の取引履歴をダウンロードした(例:PayPayのヘビーユーザーが過去の全取引を一斉にダウンロードした)場合でも、ストレスなく使える環境を用意する方法に悩まされました。全てダウンロードするとなると、生成までに10分近くかかることもあり、生成中に何らかの要因でダウンロードに失敗した場合、ユーザーにはさらなる待ち時間が発生します。ユーザー体験を損なうことがないよう、生成失敗時も、途中からダウンロードを再開できる機能の実装が必要でした。実装にあたっては、ステートマシンを活用して対処しました。ステートマシンは、大量の取引に対応するために負荷を減らしシンプルな構造とするため、あえてフレームワークを活用せずアナログで実装し、あらゆる段階からのスムーズなやり直しを実現しました。

また、医療機関への支払いや給与受取といった内容を含む可能性のある取引履歴は、機密性が高いです。こうした情報を個人ユーザーがダウンロードできる機能は前例がなく、不正アクセスやデータ漏洩への備えとして新たなセキュリティ対策も求められました。潜在的なリスクを検討した結果、特にハイリスクな場面は「ダウンロード用のリンクが、第三者もアクセスできる状態」だと判断し、ユーザー体験への影響を最小限にとどめる対策として、ダウンロードリンクに5分の時間制限を設けました。同時にダウンロード可能ユーザーを本人確認済みユーザーへ限定し、第三者による不正アクセスへの対策を徹底しました。攻めと守り、いずれの側面でもユーザーファーストを第一に考えて開発したことで、使いやすい機能に仕上げられたと思います。
David:
本プロジェクトでは、コーディングレベルでもUIの観点からも複雑な日付に関する操作が必要でした。日付範囲を正しく処理し、UI上で日付関連の要素を仕様に沿う形で実装するのは、予想以上に難しいチャレンジでした。
また、レポートを生成するためのバックエンドのインターフェースは、二段階に分けて実装しました。ダウンロード用のトークンをリクエストし、トークンを二段階目のAPIコールで使うフローです。シンプルかつ分かりやすい形でこのフローを実装するために、Swift 5.5で導入された新しい非同期モデルであるSwift Concurrencyフレームワークを使用しました。結果、コードの可読性が改善され、処理が簡素化されました。
Fransisca:
取引データは正確かつ一貫した内容が求められ、すべての取引種別と支払い方法の組み合わせを網羅することが一番の課題でした。加えて、テスト中にデータベースの移行が行われていたため、途中で発生したデータ関連の課題はその移行に関連している可能性がありました。そのため、移行作業が終了した後にもう一度テストを実施し、正常な動作を確認しました。データ関連のトピックについてYanaさんと定期的に情報を共有できていたことで、データベース関連の動きが把握でき、迅速なバグ検知に繋がりました。

Gwen:
取引履歴にはPayPay上のすべての取引が含まれるため、さまざまな取引の定義とフローを完全に理解することに時間がかかりました。ですが、取引履歴は正確性を確保する必要があり、考えられるすべての取引パターンを管理・検証する必要がありました。また、期限に関しても、ユーザーが確定申告のための参考書類として活用できるように、2025年2月に機能リリースを目指しました。ですが、Fransiscaさんが言ったように、このプロジェクトはデータベースの移行期間と並行しており、遅延のリスクを抱えていました。ですが、遅延リスクを軽減するためにチーム間の調整に奔走し、さまざまなメンバーの協力を得られた結果、無事2月リリースを達成することができました。
プロジェクトにおける学びは?
David:
この機能の開発に、SwiftUIを活用しました。SwiftUIは現代的なUIレイアウトとデータバインディングを実現するためのフレームワークで、利便性の高いプレビュー機能を利用し、開発スピードとプロトタイピングのフローを大幅に改善しました。また、プロジェクト管理チームとのやり取りもスムーズになりましたね。
Yana:
CSVファイルに携わる経験を積めました。従来、CSVや文字コードのエンコードに携わる機会は少なく、日本語における文字化けへの対処など、新しいチャレンジも多いプロジェクトでした。ですが、シート関連の知見が深まりましたし、バックエンドを0から構築する経験や、パターン標準化のための調整なども、勉強になりました。
最後に、読者へのメッセージをお願いします
David:
PayPayは、SwiftUIやSwift Concurrencyのような最新のテクノロジーを導入しています。6,900万人(2025年5月時点)ものユーザーがいるサービスに携わり、最新の環境で開発したい人には最適な会社です。また、ユーザー体験から逆算して技術を取り入れることを大切にしているため、プロダクト設計やアイデア創出への貢献に興味があるエンジニアは、開発を楽しめるはずです。

Yana:
PayPayの開発現場では、背景や専門分野の異なるメンバーと一緒に開発を推進する必要があります。だからこそ、お互いの考えを率直に共有し、異なる視点は持ちつつも同じゴールを目指していくため、コミュニケーションを大切にできる方に向いている環境です。
Fransisca:
Yanaさんの言う通り、コミュニケーションはPayPayでの業務に欠かせません。特にQAメンバーは、機能の検証時に多くのチームと連携し、機能の品質を保証する必要があります。オープンにコミュニケーションを重ね、PayPayを通じて多くの人の生活を変えたい方は大歓迎です。
Gwen:
私たちはPayPayの開発者であり、ユーザーでもあります。だからこそ、自分たちの「こんな機能があったら良いのに」というアイデアをシェアし、実際に開発していける点が魅力的です。PayPayの機能改善に興味がある方のご応募をお待ちしています。
※募集状況、社員の所属等は取材当時のものです。

