【開催レポ】Cookpad Tech Kitchen #22 決済基盤の最新事情

こんにちは。ユーザー・決済基盤部の大石です。 2019年11月27日にCookpad Tech Kitchen #22 決済基盤の最新事情を開催しました。

f:id:eisuke-oishi:20191212180318p:plain

クックパッドの技術的な知見を定期的にアウトプットすることを目的とする本イベントの22回目のテーマは「決済」ということで、我々ユーザー・決済基盤部から宇津三吉大石 が登壇し、クックパッドの決済基盤での取り組みについて発表させていただきました。

発表プログラム

大石 英介「クックパッドにおける決済基盤の歴史とこれから」

まず最初に大石からクックパッドの決済基盤 Financier の変遷とユーザー・決済基盤部という決済基盤の運用や開発を行う部署としてなぜ独立しているのか、そしてこれからの展望について話させていただきました。

クックパッドの決済基盤は日々進化しており、その中でもアプリ内課金のサポートが一つの大きな転機であり、このあとの宇津、三吉によるアプリ内課金に関する発表につながるイントロダクションとなりました。

宇津 宏一「アプリ内課金の最新事情 クライアントサイド編」

次に宇津より、決済基盤とアプリ内課金の機能をつなぐクライアントライブラリ Cusine を中心に、決済に関するクライアントライブラリの技術スタックや導入理由などを発表いたしました。

三吉 貴大「アプリ内定期購入における状態管理と"通知"の活用」

最後は三吉より、決済基盤で実装されている Google Play real-time developer notification / Apple App Store server-to-server notification を活用したサブスクリプションの状態管理について話させていただきました。

Q&Aセッション

最後に登壇者を交えてQ&Aセッションを行いました。いくつかの質問をピックアップして紹介致します。

決済部分専門のチームだと新規開発よりも運用工数が増えていくことで増してくるマンネリ感。打開策としてどういったことをやっていたりしますか?

運用に関してはできるかぎり自動化や利用者が解決できるようにして、人間によるオペレーションや運用負荷を抑えるようにしています。いまのところは運用に忙殺されてなにもできないということは避けられてると思います。

APIを扱うSDKはイメージが着くが、決済や認証などはアプリのライフサイクル/UIのどこでその処理を行うか?が重要だと思っている。が、そのSDKを呼び出すタイミングなどはどう制御しているのか?(導入時に支援としてモブしたりとか??)

SDKにおいては実装ガイドラインも提供しています。ガイドラインでは導入時に実装すべき事と呼び出しタイミングについても触れられており、これを元に実装して頂いています。もちろん、モブプログラミングのように直接導入支援を行ったケースもあります。

感想

決済をテーマにしたイベントというのは他のテーマに比べて多くはない印象でどうなるか不安もありました。しかし参加者の皆様の多くが決済の実装や運用に関わっていらっしゃったようで、懇親会では突っ込んだ質問が飛び交い決済に関わるエンジニア同士の一体感を感じました。 参加者の皆様の取り組みなどもお聞きし、我々の決済基盤もまだまだやるべきことがあるなと刺激にもなりました。今回お話した内容はごく一部ではあるのでまた開催できればと企んでいます。

最後に

我らユーザー・決済基盤部は決済あるいはユーザー管理や認証・認可に興味のあるエンジニアを募集しております。まずはお話だけでもという方も歓迎ですので、下記より応募ください! https://cookpad.wd3.myworkdayjobs.com/ja-JP/jobs/job/-/_R-001685

/* */ @import "/css/theme/report/report.css"; /* */ /* */ body{ background-image: url('https://cdn-ak.f.st-hatena.com/images/fotolife/c/cookpadtech/20140527/20140527163350.png'); background-repeat: repeat-x; background-color:transparent; background-attachment: scroll; background-position: left top;} /* */ body{ border-top: 3px solid orange; color: #3c3c3c; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ Pro W3', 'Hiragino Kaku Gothic Pro', Meiryo, Osaka, 'MS Pゴシック', sans-serif; line-height: 1.8; font-size: 16px; } a { text-decoration: underline; color: #693e1c; } a:hover { color: #80400e; text-decoration: underline; } .entry-title a{ color: rgb(176, 108, 28); cursor: auto; display: inline; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ Pro W3', 'Hiragino Kaku Gothic Pro', Meiryo, Osaka, 'MS Pゴシック', sans-serif; font-size: 30px; font-weight: bold; height: auto; line-height: 40.5px; text-decoration: underline solid rgb(176, 108, 28); width: auto; line-height: 1.35; } .date a { color: #9b8b6c; font-size: 14px; text-decoration: none; font-weight: normal; } .urllist-title-link { font-size: 14px; } /* Recent Entries */ .recent-entries a{ color: #693e1c; } .recent-entries a:visited { color: #4d2200; text-decoration: none; } .hatena-module-recent-entries li { padding-bottom: 8px; border-bottom-width: 0px; } /*Widget*/ .hatena-module-body li { list-style-type: circle; } .hatena-module-body a{ text-decoration: none; } .hatena-module-body a:hover{ text-decoration: underline; } /* Widget name */ .hatena-module-title, .hatena-module-title a{ color: #b06c1c; margin-top: 20px; margin-bottom: 7px; } /* work frame*/ #container { width: 970px; text-align: center; margin: 0 auto; background: transparent; padding: 0 30px; } #wrapper { float: left; overflow: hidden; width: 660px; } #box2 { width: 240px; float: right; font-size: 14px; word-wrap: break-word; } /*#blog-title-inner{*/ /*margin-top: 3px;*/ /*height: 125px;*/ /*background-position: left 0px;*/ /*}*/ /*.header-image-only #blog-title-inner {*/ /*background-repeat: no-repeat;*/ /*position: relative;*/ /*height: 200px;*/ /*display: none;*/ /*}*/ /*#blog-title {*/ /*margin-top: 3px;*/ /*height: 125px;*/ /*background-image: url('https://cdn-ak.f.st-hatena.com/images/fotolife/c/cookpadtech/20140527/20140527172848.png');*/ /*background-repeat: no-repeat;*/ /*background-position: left 0px;*/ /*}*/