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
日本初のキャッシュレス即売会を支えた決済アプリ pixiv PAYの技術
Search
orekyuu
November 06, 2018
Technology
1
1.5k
日本初のキャッシュレス即売会を支えた決済アプリ pixiv PAYの技術
orekyuu
November 06, 2018
Tweet
Share
More Decks by orekyuu
See All by orekyuu
[JJUG CCC 2022 fall] Fargate上のJVMからCPUを認識するまで 〜正しく認識されないCPUの謎を追え〜
orekyuu
1
2.1k
OpenJDKアンカンファレンス 2022-09
orekyuu
0
150
至極の難問言語仕様クイズ 〜最強のマルチリンガル決定戦〜
orekyuu
2
2.1k
burikaigi2021 Rails製ECサイトの決済速度を上げろ!〜決済処理チューニングの記録〜
orekyuu
3
1.6k
実際困る!クロスドメイン間のセッション管理を考えよう
orekyuu
1
840
pixiv PAYで運用している フレンズパターン
orekyuu
1
3.4k
Other Decks in Technology
See All in Technology
ABWG2024採択者が語るエンジニアとしての自分自身の見つけ方〜発信して、つながって、世界を広げていく〜
maimyyym
1
230
マルチアカウント環境における組織ポリシーについて まとめてみる
nrinetcom
PRO
2
110
プルリクエストレビューを終わらせるためのチーム体制 / The Team for Completing Pull Request Reviews
nekonenene
3
1.5k
サバイバルモード下でのエンジニアリングマネジメント
konifar
22
7.4k
プロダクト開発者目線での Entra ID 活用
sansantech
PRO
0
140
エンジニア主導の企画立案を可能にする組織とは?
recruitengineers
PRO
1
310
【Snowflake九州ユーザー会#2】BigQueryとSnowflakeを比較してそれぞれの良し悪しを掴む / BigQuery vs Snowflake: Pros & Cons
civitaspo
3
1.1k
20250307_エンジニアじゃないけどAzureはじめてみた
ponponmikankan
2
180
手を動かしてレベルアップしよう!
maruto
0
260
DeepSeekとは?何がいいの? - Databricksと学ぶDeepSeek! 〜これからのLLMに備えよ!〜
taka_aki
1
180
Amazon Athenaから利用時のGlueのIcebergテーブルのメンテナンスについて
nayuts
0
120
IAMのマニアックな話2025
nrinetcom
PRO
6
1.4k
Featured
See All Featured
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
11
540
The Language of Interfaces
destraynor
156
24k
A better future with KSS
kneath
238
17k
Building Your Own Lightsaber
phodgson
104
6.2k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Making the Leap to Tech Lead
cromwellryan
133
9.1k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Optimising Largest Contentful Paint
csswizardry
34
3.1k
Six Lessons from altMBA
skipperchong
27
3.6k
Done Done
chrislema
182
16k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
21
2.5k
Transcript
ຊॳͷΩϟογϡϨεଈചձΛ ࢧܾ͑ͨࡁΞϓϦ pixiv PAYͷٕज़ ۚ༞ଠ / ޒेཛྷ໌
pixiv PAYͱ
త ΫϦΤʔλʔ͕ಉਓࢽͳͲͷ࡞ΛചΔ ଈചձͰΘΕΔ͜ͱΛతͱͨ͠ ΩϟογϡϨεܾࡁαʔϏε
എܠ •ଈചձͰݱۚࢧ͍ʹΑΔ͞·͟·ͳෆศ͕͋͞Δ •େྔͷ͓Γͷ४උ •͓Γͷࡶ͔͞Β1000ԁͳͲΩϦྑֹ͍ۚʹͤ͟ΔΛಘͳ͍ •ച্ۚͷ౪ϦεΫ •ւ֎ސ٬ຊԁݱۚΛ४උ͢Δඞཁ͕͋Δ •ੈͷதͷΩϟογϡϨεԽɺిࢠܾࡁͷීٴ •͔͠͠ઐ༻ͷػց͕ඞཁͳͲͷཧ༝Ͱಋೖॳظඅ༻͕ߴ͍
pixiv PAYͰఏڙ͍ͨ͠αʔϏεʢఏڙࡁΈؚΉʣ •ଟ༷ͳܾࡁํ๏ •ΧʔυܾࡁɺίϯϏχೖۚϙΠϯτܾࡁɺച্ۚར༻ߪೖ •ϨδػೳʢΧʔυܾࡁҎ֎ʹɺݱۚձܭܭࢉՄೳʣ •ചΓखͱങ͍खΛͭͳ͙ػೳ •ϑΥϩϫʔʹϝοηʔδΛૹΔػೳ •ܾࡁ࣌ʹϖΠοʂͬͯΔػೳ •༏͞ΜʹͬͯΒ͍͍ͨɻͦͯͦ͠ΕΛ࣮͍ͨ͠ɻ
RubyͰ։ൃ͢Δ͜ͱΛܾΊͨʢRubyͷརʣ •৽͍͠ܗͷܾࡁαʔϏεͱͯ͠ɺ৽ػೳͲΜͲΜՃ͍ͨ͠ •ੈͷதʹ·ͩͳ͍ͷΛࢼߦࡨޡͰ࡞Γ্͍͛ͯ͘ •Railsͷॊೈ͞ɺ։ൃޮͷྑ͞ͱϚον •RailsͷαʔϏε͕ࣾʹଟ͋ͬͨ͘ •RailsΤϯδχΞ͕ࣾʹطʹଟ͍ͨ͘
RubyͰ։ൃ͢Δ͜ͱΛܾΊͨʢRubyͷ՝ͱݒ೦ʣ • ଈചձͰܾࡁॲཧ։࢝ޙͷظؒʹूத͢Δ • 300ళͷଈചձͰɺ։ޙʹಉܾ࣌ࡁ͕300ۙ͘ͳΔ • ಉ࣌ʹൃੜ͢Δଟ͘ͷܾࡁϦΫΤετΛॲཧ͢Δ͜ͱ͕Ͱ͖Δ͔ • ຊൃද͜ͷʹతΛߜ͓ͬͯ͠͠·͢
pixiv PAY։ൃεέδϡʔϧ • 20176݄ ։ൃελʔτ • 20178݄ ϦϦʔε • RailsΤϯδχΞʢͱεϚϗΞϓϦΤϯδχΞʣ͕
ࣾʹطʹଟ͍ͨ͘ͷͰμογϡͰ࡞Εͨ • ϦϦʔεޙɺRails΄΅2ਓͰ։ൃ
pixiv PAY ͷػೳ (ࠓݱࡏ) •εϚϗʹೖΕͨpixiv PAYΞϓϦͰQRίʔυͰചങ •ΫϨΧPayPalͰܾࡁʢαʔόଆͰॲཧʣ •ίϯϏχͰೖۚͨ͠ϙΠϯτͰങ͍Մೳ •ଈചձʹಛԽͯ͠εϜʔεʹചങͰ͖ΔϨδػೳ •ෳਓͰചΓࢠ͕Ͱ͖ΔΞγελϯτػೳ
•ߪೖऀϑΥϩϫʔͷϝοηʔδૹ৴ɺ৽ணใ͓Βͤ •ΠϕϯτొػೳͰࢀՃ͍ͯ͠ΔചΓखΛݕࡧՄೳ •৽ػೳΛͲΜͲΜՃ͍ͯ͠Δ
ࣗݾհ •ޒेཛྷ໌ / twitter: igaiga555 •ϑϦʔϥϯε RailsΤϯδχΞ •RubyWorld Conference 2013,
2014 ߨԋ •ౡࠜݝRuby߹॓ɺRailsࣉࢠɺRails GirlsͳͲͰߨࢣ •ஶॻʮθϩ͔ΒΘ͔ΔRubyೖʯ 11/22ൃച
ऀަ
ࣗݾհ •ۚ༞ଠ / twitter: orekyuu •ϐΫγϒגࣜձࣾ RailsΤϯδχΞ •Ruby Business Users
Conference 2018ొஃ
pixiv MARKET • 20186݄ ຊॳΩϟογϡϨεಉਓࢽଈചΠϕϯτ pixiv MARKETΛ։࠵ • pixiv PAYΛମݧͯ͠Β͏ڥΛͭ͘Δ
• WiFiࣗͨͪͰઃܭͯ͠ఏڙ • ళฮΛ300ʹઃఆ
None
՝ •300ళฮಉܾ࣌ࡁ •։࢝ޙʹܾࡁ͕ूத͢Δͱ༧ •300ܾࡁ͕ಉ࣌ʹ͘Δ͜ͱΛఆ
pixiv PAY ͷγεςϜߏ •Ruby, Rails •ΞϓϦέʔγϣϯαʔό3 •ͦΕͧΕunicorn workerϓϩηε50 • ܾࣾࡁج൫αʔϏεΛ௨ͯ͡ෳͷ֎෦ܾࡁߦαʔϏεΛར༻
• ΫϨδοτΧʔυ, PayPal, ίϯϏχࣄલೖۚϙΠϯτ
ରԠࡦ •ܾࡁॲཧͷߴԽ •λΠϜΞτରࡦ
ܾࡁॲཧͷߴԽ •ܾࡁॲཧ͍ •֎෦αʔϏεAPIΛར༻͢ΔͨΊ •͍ͷͰܾࡁͷଌఆ͔Βߦͬͨ
ܾࡁͷଌఆ •pixivi PAY͔Βܾࣾࡁج൫ͷMockԽܾͨ͠ࡁAPIΛୟ͍ͯɺେྔͷܾࡁϦ ΫΤετΛૹͬͨͱ͖ʹ͍ͱ͜Ζ͕ͳ͍͔Λௐͨ •ຊ൪ͷΞϓϦέʔγϣϯαʔόΛ1Γͯͦ͜͠ͰςετΛͨ͠ •unicornϓϩηε30Ͱ25ചങ(50Ϣʔβʔ)ฒྻͰܾࡁΛ࣮ߦ͠ϦΫΤετ͔ ΒϨεϙϯε·Ͱͷ࣌ؒΛଌఆ •ଌఆ݁Ռ •2ඵ(֎෦APIԠͱ΄΅ಉ)Ͱฦ͖͍ͬͯͯΔϦΫΤετ͕େͩ ͕ɺ5ඵ͔͔͍ۙͬͯ͘ΔϦΫΤετ͕͋ͬͨɻ
•ܾࡁͷSlack௨Ͱ٧·͍ͬͯͨͷͰͦ͜ΛඇಉظԽͯ͠ߴԽ
ܾࡁॲཧ࣌ؒʢߴԽޙʣ •֎෦APIͱͷଓ͕ඞཁͳΫϨδοτΧʔυɺPayPal֎෦APIͷॲཧ࣌ؒΑΓ ͘Ͱ͖ͳ͍ •ඇಉظԽݕ౼͕͓ͨ͠٬༷ͷചങ্͛ΒͣݟૹΓ •֎෦APIͷॲཧ૬ͷʢ΄΅ʣݶք·ͰߴԽͰ͖ͨ •pixiv PAYͷॲཧҎԼͷ௨Γ •ΫϨδοτΧʔυ: 1ʙ2ඵʢ֎෦API1ʙ2ඵʣ •PayPal:
3ʙ4ඵʢ֎෦API3ʙ4ඵʣ •ϙΠϯτ: 0.2ඵʢ֎෦APIෆཁʣ
λΠϜΞτ •க໋తͳ •ചΓखͱങ͍खͷؒͰ݁Ռ͕ҟͳͬͯදࣔ͞ΕΔ •ചΓखͱങ͍खʹചങࣦഊ͍ͯ͠ΔΑ͏ʹݟ͑Δ͕ɺ࣮ࡍޭ͠ ͍ͯΔέʔεى͜Γ͑Δ •ൃੜ͍ͯ͠ΔͱࢥΘΕΔϩάͰɺnginx͕εςʔλείʔυ499Λฦ ͍ͯ͠Δ͜ͱ͕͋Δ͜ͱ͕͔ͬͨ •εςʔλείʔυ499ͱɿRailsαʔό͕200OKΛฦ͕͢ɺΫϥΠΞ ϯτଆ͕ͦΕΛड͚औΒͣλΠϜΞτͰ͢Δέʔε •λΠϜΞτΛશʹ͙ํ๏ͳ͍
͋Δέʔε ങ͍ख"QQ OHJOY 0, 0, 0,
&SSPS ܾࡁॲཧͰλΠϜΞτ͢Δ߹ ചΓख"QQ 3BJMT 0, ਖ਼ৗʹ ॲཧྃ &SSPS OHJOY͕ ϨεϙϯεΛ ฦ͢ࡍɺ ΞϓϦ͕طʹ ͬͯͳ͍࣌ ܾࡁ ޭ ܾࡁ ࣦഊ දࣔͷ૬ҧ
λΠϜΞτͷղܾํ๏ •ܾࡁAPIΛҎԼͷ2ͭʹ •ܾࡁAPI(ঢ়ଶΛભҠͤ͞Δ) •݁Ռ֬ೝAPI(ঢ়ଶભҠͳ͠)
Λղܾͨ͠έʔε &SSPS࣌ ങ͍ख"QQ OHJOY 0, 0, &SSPS
ܾࡁॲཧͰλΠϜΞτ͢Δ߹ ചΓख"QQ 3BJMT 0, ਖ਼ৗʹ ॲཧྃ &SSPS ܾࡁ ޭ ܾࡁ ޭ ද͕ࣔҰக 0, 0, 0, Τϥʔ࣌ ࠶߹ͤ
Λղܾͨ͠έʔε ௨ৗ&SSPS࣌ ങ͍ख"QQ OHJOY &SSPS ܾࡁॲཧͰλΠϜΞτ͢Δ߹ ചΓख"QQ 3BJMT &SSPS ਖ਼ৗʹ
ҟৗॲཧ &SSPS ܾࡁ ࣦഊ ܾࡁ ࣦഊ ද͕ࣔҰக &SSPS Τϥʔ࣌ ࠶߹ͤ &SSPS &SSPS &SSPS &SSPS
͕ى͖ͳ͍͔Λ͔֬ΊΔςετ • ίʔυΛॻ͍ͯෛՙςετΛ࣮ࢪ • ߴෛՙ࣌ʹ͕ى͖ͳ͍͜ͱΛ֬ೝͰ͖ͨ • ࣾͰ80ਓूΊ࣮ͯࡍͷΞϓϦͱαʔόڥͰ Ұ੪ʹܾࡁ͢ΔςετΛ࣮ࢪ • Τϥʔ͕Ͱͳ͍͜ͱΛ֬ೝͰ͖ͨ
ଈചձͷ݁Ռ •ଈചձ։࢝ޙʹҰؾʹΞΫη ε͕૿͍͑ͯΔ •ϐʔΫ࣌ͷಉܾ࣌ࡁ(ॲཧ࣌ؒ 2ʙ4ඵ)1ؒʹ80ܾࡁ •ภΓ͕͋ΔͨΊɺඵؒ࠷େͷಉ ܾ࣌ࡁॲཧ6ॲཧ/ඵ
ଈചձΞΫηεσʔλͷ݁ •ܾࡁAPIʢॲཧ࣌ؒ2ʙ4ඵʣ࠷େ80ॲཧ/ •ඵؒ࠷େͷಉܾ࣌ࡁॲཧ6ॲཧ/ඵ •APαʔόʔ3߹ܭ150Workerʹಉܾ࣌ࡁॲཧ͕6ॲཧ •ఆΑΓগͳ͘ɺͳ͘ॲཧΛࡹ͘͜ͱ͕Ͱ͖ͨ •ܾࡁ͕ूத͢Δ։࢝ޙॲཧͰ͖ͨ •ཧతʹɺαʔόΛ૿͢͜ͱͰ͞ΒʹॲཧͰ͖ΔϦΫΤετ Λ૿ͤΔ͜ͱ͕͔ͬͨ
໌Β͔ʹͳٕͬͨज़త՝ •كʹॲཧʹ͕͔͔࣌ؒ͘ΔϦΫΤετ͕ൃੜ͍ͯ͠Δ͜ͱ͕ଈ ചձޙͷϩάνΣοΫͰ໌Β͔ʹͳͬͨ •nginxͷϩάΛ࣌ؒͷ͔͔ͬͨͷͰ߱ॱʹιʔτ͢Δͱɺฏৗ ࣌ͱൺͯ໌Β͔ʹ͍ʢ2ʙ4ඵʣͷ͕ݟ͔ͭͬͨɻ •Ұ෦ͷAPI͚ͩͰͳ͘શAPIͰكʹྼԽ͍ͯ͠Δݱ͕ݟΒΕͨɻ •࣍ͷϖʔδͰQRίʔυੜAPIͷϩάΛྫʹઆ໌͠·͢
QRίʔυੜAPIͷϩά •ϩάΛ͍ॱͰιʔτ͢Δͱ2ඵҎ্͔͔͍ͬͯΔͷ͕ݟ͔ͭͬͨɻ •ීஈ0.5ඵҎԼ •QRίʔυੜAPIͷϩά(͍ॱ)
Ծઆ: ϦΫΤετ͕ଟ͘ɺWorkerΛ͍Ռͨͨ͠ʁ • WorkerΛ͍Ռͨ͢έʔεߟ͑ʹ͍͘ • 150WorkerΛ͍Δ΄ͲͷͷϦΫΤετ དྷ͍ͯͳ͔ͬͨ • ͞ΒʹɺϐʔΫλΠϜҎ֎ʹѱԽ͍ͯ͠Δ έʔε͕͋ͬͨ
Ծઆ: unicornͷ࠶ىಈʹΑͬͯ͘ͳΔʁ •unicorn͕࠶ىಈͨ͠ͱ͖ʹ͘ͳΔέʔε͕ൃੜ͠͏Δ •ϩά͔Βunicorn worker killerʹΑͬͯԿ͔࠶ىಈ͍ͯ͠Δ͜ͱ͕໌ •unicorn worker killer: ϦΫΤετճͰunicornΛ࠶ىಈ͢ΔΈ
•࠶ىಈޙͷϨεϙϯε4ඵ͔͔͍ͬͯͨ •mysqlͷίωΫγϣϯ࡞ʹ͕͔͔࣌ؒΔʁ •ϥΠϒϥϦಡΈࠐΈʹ͕͔͔࣌ؒΔʁ •Πϕϯτதunicornϓϩηεͷఆظ࠶ىಈͷ੍ͳͲͷํ๏Λݕ౼த
Ծઆ: unicornͷ࠶ىಈʹΑͬͯ͘ͳΔʁ •unicorn࠶ىಈ࣌ʹ͘ͳΔέʔε͕ൃੜ͢Δ •ҰํͰ͜Ε͚ͩͰશͯͷϨεϙϯελΠϜ ͷѱԽΛઆ໌Ͱ͖ͳ͍ •ϩάʹ͍ͬͯΔѱԽ͍ͯ͠ΔϨεϙϯεͷ ʹରͯ͠࠶ىಈͷ͕߹Θͳ͍ •ଞʹϨεϙϯε͕͘ͳΔݪҼ͕͋Δʁ
·ͱΊ •ଈചձͰͷܾࡁΛ؆୯ʹ͢ΔαʔϏεpixiv PAY ΛRuby, RailsΛͬͯ։ൃͨ͠ •ຊॳͷΩϟογϡϨεಉਓࢽଈചΠϕϯτΛ։࠵͠ɺ 300ళฮͷܾࡁΛॲཧ͢Δ͜ͱ͕Ͱ͖ͨ •Ruby, RailsΛͬͨγεςϜͰɺαʔόΛ૿͢͜ͱͰ ΑΓଟ͘ͷܾࡁϦΫΤετΛॲཧͰ͖Δݟ௨͠Λཱͯͨ
એ • ଈചձΛΓ্͍͖͍͛ͯͨΤϯδχΞΛืू͍ͯ͠·͢ • ࢲୡͱҰॹʹRailsΛॻ͖·͠ΐ͏ʂ