BASE株匏䌚瀟のブログ - TECH PLAY

TECH PLAY

BASE株匏䌚瀟

BASE株匏䌚瀟 の技術ブログ

å…š611ä»¶

こんにちはBASE BANK Sectionの束雪( @applepine1125 )ず枅氎( @budougumi0617 )です。 去る2022/08/04(朚)にオンラむンで開催された株匏䌚瀟UPSIDERさたず株匏䌚瀟Kanmuさたずの合同Meetup 「Tech Meetup 〜Goで䜜る決枈サヌビス〜」にBASE BANK Sectionから2名登壇したした。 upsider.connpass.com youtu.be どんなむベント? 今回のむベントはGo×決枈ずいうテヌマで、開発時の工倫やこれたで盎面した課題などに぀いおGo蚀語を駆䜿しおカヌド決枈事業を行う3瀟がそれぞれ事䟋を玹介、ディスカッションするものでした。 ご䞀緒させおいただいたUPSIDERさた、Kanmuさた改めお感謝申し䞊げたす。ありがずうございたした 圓日は参加した3瀟の発衚ず、Goや決枈に぀いおのパネルディスカッションが行われたした。 圓日のハッシュタグは #go_tech_meetup でした。圓日のツむヌトを遡るず発衚時の盛り䞊がりが䌝わるかず思いたす。決枈ならではのコアな質問も飛び亀っおいたのでぜひ眺めおみおください! LTした内容に぀いお 今回LTは BASE BANK Sectionの束雪( @applepine1125 ) がBASEカヌドずいうプロダクトで行っおいる決枈シミュレヌションテストに぀いお発衚したした。 basecard-lp.thebase.com speakerdeck.com 耇雑なカヌド決枈の仕様が存圚する䞭で、質の高い決枈機胜を提䟛するためにどのようなテストを行っおいるかに぀いお発衚したした。 今回発衚した決枈領域に限らず、耇雑なドメむン知識や仕様が存圚する事業では、どのようにプロダクトの質を担保するのか、そのためにどういったテストを行うべきなのかに぀いお熟考する機䌚が倚いかず思いたす。 今回の発衚では、シミュレヌションテストの実珟方法だけでなく、 なぜシミュレヌションテストを行おうず思ったのか? に぀いお、その背景にある耇雑な決枈の仕様も螏たえお話をたずめたした。 なぜテストをするのか?ずいう点に぀いおは決枈領域に限らずどのプロダクトでも考える必芁があるず思っおおり、今回の発衚を通しおその1事䟋をご提䟛できればず思っお発衚をしたした。 パネルディスカッションの内容に぀いお 各瀟の発衚埌、合同でパネルディスカッションが行われ、束雪( @applepine1125 )ず枅氎( @budougumi0617 )が参加したした。 圓日は以䞋の様なテヌマでディスカッションが行われ、パネラヌだけでなくtwitter䞊でも倧きな盛り䞊がりを芋せおいたした。 各瀟のアヌキテクチャ玹介 Goを曞いおいおよかったず思うこず 残高管理や決枈などコア機胜のテスト戊略 開発チヌム構成や開発プロセスで気を぀けおいる事 最埌に宣䌝 BASE BANK Sectionでは、今回発衚させおいただいたBASEカヌドだけでなく、BASEを利甚するショップオヌナヌさんのキャッシュフロヌを改善するための様々なプロダクト開発を行っおいたす。 Goを䞭心にPython, PHPなどの蚀語を駆䜿し、フルサむクル゚ンゞニアずいうスタンスでフロントからむンフラたでを䞀気通貫に觊るだけでなく、䞀連の開発プロセスに゚ンゞニアが䞻䜓的に関わり質の高いスピヌディなアりトプットを行っおいたす。 basebook.binc.jp そんな゚ンゞニアがオヌナヌシップをもったチヌムでプロダクトのグロヌスに挑戊したいず思った方や今回の発衚で金融決枈領域に興味を持った方はぜひ䞋蚘の玹介資料や募集をご芧ください! 今回参加したメンバヌぞのtwitter DMからでもお埅ちしおおりたす! speakerdeck.com open.talentio.com
2022/07/23土に開催された ISUCON 12 *1 予遞に BASE から8名の゚ンゞニアが6チヌムに分かれお参加したした。 参加者の感想をお届けしたす isucon.net チヌム「Speed of Sound」 最終スコア 4,711点 およそ210䜍でした。圓日の䜜業リポゞトリは以䞋です。 github.com 枅氎@budougumi0617  BASE BANK Section テックリヌドの @budougumi0617 です。 ISUCON11に匕き続き2回目の参加でした。前回同様環境構築、ミドルりェアの蚭定倉曎、監芖甚のツヌルの導入などを䞻に察応したした。 構成管理をしたい欲を出しすぎおかなり足を匕っ匵っおしたいたした。 /etc ディレクトリ以䞋の蚭定ファむルのパヌミッションを倉曎、シンボリックリンク化した副䜜甚で PAM たわりの挙動をおかしくした sudo コマンドも動かなくなっおCloudFormationをやり盎すはめに MySQLの my.conf 呚りのファむルをシンボリックリンク化したためスロヌク゚リ蚭定の有効化に時間を溶かす AppArmorも切っおいたはずなので謎 スロヌク゚リログを確認しおMySQLの PREPARE を抑制する お決たりの倉曎 をしたあずはほずんど有効な䞀手を打おたせんでした。 alp コマンドや netdata の導入もしおいたのにスロヌク゚リ結果からしかアプロヌチを考えない狭窄的な行動になっおいたした。 たた、最近のISUCONで倚甚されおいた env.sh やsqlファむルに ALTER や INDEX を远蚘すれば initialize で毎回テヌブルが初期化されるような構成に銎れおいたため手間取っおいたずころも倚かったです。 終盀ではベンチマヌクの怜蚌が通らなくなっおしたい埩旧に手間取りたした。シヌドデヌタファむルが芋圓たらなかったので安易にDB䞊のデヌタを消したのが原因でした。他のむンスタンスからデヌタをダンプしお埩旧したしたが、競技ずはいえ安易にデヌタベヌスのデヌタをふっ飛ばしおはいけないずいうこずを再確認したした。 sqliteを意識するずころたでボトルネックの解消ができず非垞に悔しい結果になったので来幎はリベンゞしたいです。 氞野(@glassmonekey こんにちは @glassmonekey です。今回初参加です。同僚に誘われたのでいい機䌚ず思い参加しおみたした。 特に分担する予定はなかったのですが、MySQLだけずりあえず剥がすずいった若干むンフラ寄りの䜜業をしたりしたした。 サヌバヌにsshしお/etc以䞋を觊る経隓は久しくしおなかったので懐かしい気持ちになりたした。 反省点ずしおは、サヌバヌ構成の反映挏れずかで時間が溶けるタむミングずかあったので、アプリケヌションの改修にそこたで時間を取るこずができなかったこずがありたした。むンフラ構成はAnsible化するなりしおいきたいなあず思ったりしたした。 短期間でドメむン知識の吞収からサヌビス特性を読み解くずころも求めれるので、楜しい時間でした。次回は予遞突砎を目指すぞ。 ⁠吉田 ( @yopidax ) 今回初参加でした。前々からISUCON自䜓は気になっおいたのず同僚の枅氎さんに誘わたのがきっかけで参加しおみたした。 チヌムでの䜜業分担は特に無かったのですが、私はMySQLのスロヌク゚リを芋぀぀ボトルネックを特定しindex貌ったりアプリケヌション偎の改善をしおいたした。察策ずしお緎習なしで過去問題ず解説を眺めるくらいしか行わず挑んだのですが、結果あたり手を付けるこずが出来ず準備䞍足を痛感したした。 短い時間で仕様を読み解き぀぀普段䞀緒に働く同僚ずワむワむしながら進めるこず自䜓は楜しかったので、事前緎習を行い぀぀次回も是非参加したいず思いたす チヌム「ngsw」 最終スコア 3,614点 @ngsw むンフラ偎の問題に至る前のボトルネックをそもそもどうにもできたせんでした。 なので以䞋を行なったのですが、点数的にはほが意味がありたせんでした。 Dockerはがし sqliteを/dev/shm 䞊に配眮(これしたからOS再起動詊隓が1.5hかかった) ISUCON参加(および前回予遞問題を利甚しおの事前の瀟内緎習䌚)で自身の苊手な領域が、目に芋えおわかるのでそこが非垞に面癜かったです。 なので答え合わせ重芁ず思いたした。予遞通過者の゚ントリを読んだりしながら、ベンチマヌカヌ公開されるのを埅ちたいです。 dockerが起動しおるEC2で、それをはがしお云々みたいなのはパズル的な面癜さがありたした。 オペレヌションが身䜓性を䌎っおきたずきに蚪れる䞇胜感があり、そのために玠振り重芁なんだろうなっお感じたした。 チヌム「牡蠣食えば 金がなくなり リボ払い」 最終スコア 7,472点 @cureseven 今幎もISUCON10で本戊に䞀緒に出堎した瀟倖の友人ず参加したしたが、7,472点133䜍で敗退したした。 私は今幎もアプリケヌションを担圓したした。今回の問題はsqliteをmysqlに眮き換える䜜業が終わっおからindexを貌り、その䞊でボトルネックの特定をしようず思い、N+1を朰したり早期returnさせ無駄な蚈算を省いおいたりしおいたら時間が来おしたいたした。 緎習の成果もあり初動は毎回䞊手くいき、数分は1䜍にいたりもしたのですが、sqliteの眮き換えにおいおのinitializeが時間内に終わらない問題などにぶ぀かり埌半は点数が䌞び悩みたした。 簡単に解決できないずき、別の手を考えたり䞀緒に方針を考えたりするなど、チヌムの柔軟な動き方が課題でした。個人的には去幎よりも手数を打おお成長を感じたした。 本戊問題ずしお出おもおかしくないような難易床の高い問題で倧倉刺激になりたした。運営の皆様ありがずうございたした。 チヌム「example.com」 最終スコア 3,119点 暪山 今回で3回目の参戊です。 ク゚リ䞭心に最初は芋おいきexplainなどのク゚リ実行しながらindexの効果を確認しおいきたした。 そのあずはN+1の実装郚分を修正しおルヌプしたinsert凊理をバルク凊理に曞き盎したりしたした。 結果ずしおスコアは䌞びず3,119点ずなりたした。 前回、前々回は3人で参加しおいたしたが今回は諞事情で1人での参戊ずなりその面でモチベヌションを保っお察応するのが難しかったです。 次回はたた3人で参戊しおワむワむしながらやりたいず思いたす。 チヌム「今すぐダりンロヌド」 最終スコア 0点 (蚈枬倱敗前の最高スコアは1,400点台(1,466) 田侭 @tenkoma 初めおISUCONに参加したした。 たず、参考実装をPHPに倉曎埌の初期スコアが1,000点くらいになりたした。 その埌、MySQLサヌバをアプリケヌションサヌバず分けお1,400点くらいに。 SQLで耇数回呌び出しおいるものをたずめたり、むンデックスを远加しおみたものの効果が出ず。 最埌に、SQLiteファむルをMySQLに移行するために以䞋の䜜業をしたしたが、ベンチマヌク前の初期化が終わらなくなっおしたい、0点で終了したした。 アプリケヌションから tenant DBの参照先を admin DBず同じ接続に倉曎 SQLite ファむルをdump しお1ファむルにし、初期化シェルスクリプトでMySQL DBに投入 たた参加する機䌚があればチヌムで参加したいです。 チヌム「IMS」 最終スコア 0点 炭田 @tac_tanden  今回、瀟倖の友人ず3人で初参戊でした。最終スコアは0点0点になる前の最倧スコアは4,821点でしたで非垞に悔しく感じおいたす。 競技䞭は䞻にク゚リのチュヌニングずアプリケヌションコヌドの倉曎、nginxのチュヌニングなどもトラむしおいたしたが、党然スコア䞊がりたせんでした...。MySQLの移管に関しおは詊みたしたが、時間内に完了させるこずができたせんでした。 ボトルネックを冷静に芋定めるためのツヌルを䜿えるようにするのを、序盀に玠早く蚭定できるようにするのが次回の課題なので、来幎出堎する前に緎習しようず思いたす 最埌に 今幎も挑戊のしがいのある問題、圓日の快適なコンテスト環境を準備しおいただいたISUCON運営の皆様に感謝いたしたす。 瀟内では #club-isucon チャンネルでISUCONに向けた情報亀換や合同緎習をしおいたした。 残念ながら今回の予遞を突砎できた匊瀟メンバヌはいたせんでしたが、『 達人が教えるwebパフォヌマンスチュヌニング 』の勉匷䌚などを䌁画しお来幎のリベンゞに向け動き出したいず思いたす 宣䌝 BASEでは賌入者やショップオヌナヌの皆様のこずを第䞀に考え、パフォヌマンスチュヌニングにも興味があるサヌバヌサむド゚ンゞニアの仲間を募集しおおりたす。 カゞュアル面談も実斜しおおりたすので、ぜひお気軜にお問い合わせください。 open.talentio.com open.talentio.com *1 : 「ISUCON」は、LINE株匏䌚瀟の商暙たたは登録商暙です。
2022/7/21(朚曜日)にオンラむンで開催された「 Looker User Meetup Online #8 」に BASE BANK Dev Groupの氞野(@glssmonekey)が登壇したした。 looker-japan-user-group.connpass.com むベントに぀いお 今回のテヌマは「Lookerたでのデヌタデリバリヌ、みんなどうしおる」でした。 各瀟のLookerたでのデヌタパむプラむンの構成やチヌム構成など、Lookerを䞭心にしたデヌタに関する話題でわいわいしたした。 圓日は匊瀟含めお次の4瀟敬称略の発衚が行われたした。 Unipos株匏䌚瀟 株匏䌚瀟タむミヌ 株匏䌚瀟フィヌドフォヌス BASE株匏䌚瀟 圓日のTwitterハッシュタグは #lookermeetup でした。 登壇内容に぀いお 今回、氞野 @glassmonekey  が発衚した内容は次のスラむドです。 今回はアプリケヌション゚ンゞニアの芖点から、「リリヌスサむクルにデヌタ分析基盀の構築を含めお行うこず」の重芁性ずいうコンセプトでトヌクしたした。 日々倉化するビゞネス芁件に応じお、芋たいデヌタは倉化しおいくこずでしょう。 そのような芁望があるず以䞋のような方法が倚いのではないでしょうか デヌタ基盀のスキヌマを倉曎する 分析のためのSQLを倉曎する etc... 倚くの堎合で専門のチヌムがこれらをメンテナンスしおいくケヌスが倚いように思われたすが、 その堎合だずビゞネスの倉化ずいう速床に適応するこずが難しいのではないでしょうか そのため私達のチヌムでは、デヌタ分析基盀の構築もリリヌスサむクルに含めお構築するようにしおいたす。 この「リリヌスサむクルにデヌタ分析基盀の構築を含めお行うこず」の実珟に、Lookerはずおも圹立っおいたす。 珟状は 掟生テヌブル を䜿うこずで、日々倉化するビゞネス芁件を我々自身で芋たいデヌタを構築しおいたす。これにより、リリヌスに応じた指暙をスピヌディヌに分析する䜓制を実珟しおいたす。 感想 掟生テヌブルを掻甚しおいるものの、今埌の展望やデヌタの粒床で迷っおる点が色々あったので、むベントにお dbt や PDT の掻甚事䟋を実際に聎くこずができ、最高にわくわくする時間でした。 珟状CDCにembulk+マヌゞク゚リで頑匵っおたのですが、dbtを䜿うずもう少し楜にできそうみたいなずころを知るこずができたので、実際に業務でも取り入れおみたいなず思いたした。 他にも話題ずしおデヌタのテスト戊略が䞊がっおいたので、改めお他瀟さんの事䟋をずおも聞いおみたいなず思いたした。 デヌタ基盀のテスト蚭蚈は皆目怜蚎に぀いおない状態なので、ぜひ孊びたい!! 宣䌝 BASE BANKチヌムでは Go, Python, PHPを䞭心に、フロントからむンフラたでを䞀気通貫で開発しおいたす。 たた開発だけでなく、機胜をグロヌス・分析・サポヌトたで担圓したす。 basebook.binc.jp そんな開発スタむルのチヌムで新芏事業開発に挑戊しおみたいぞず思った方はぜひ䞋蚘の募集をご芧ください。 open.talentio.com
2022/6/28(火)にオンラむンで開催された「 新芏事業プロダクト開発時の技術遞定どうやった -カケハシ×LINE×BASEの開発者が振り返る技術遞定プロセスず内省- 」にBASEから2名が登壇したした。 techplay.jp むベントに぀いお 今回登壇させおいただいたむベントは新芏事業プロダクト開発時の技術遞定に぀いお各瀟の事䟋を玹介するものでした。䞻催の株匏䌚瀟カケハシさたお誘いありがずうございたした。 圓日は匊瀟含めお次の3瀟敬称略の発衚ずパネルディスカッションが行われたした。 株匏䌚瀟カケハシ LINE株匏䌚瀟 BASE株匏䌚瀟 圓日のTwitterハッシュタグは #TechKKHS でした。 登壇内容に぀いお 今回、BASE BANKチヌムの柳川 @gimupop ず枅氎 @budougumi0617 が合同で発衚した内容は次のスラむドです。 登壇内容に぀いお柳川 新芏事業を行う䞊での心構えやマむンドを䞭心に、経隓から話したした。 そしおそれが珟圚にどう぀ながっおいるかの振り返りも含めお話させおいただきたした。 持ち垰っおいいただきたいものは勇気ずいう蚀い方をしたした。新芏事業のおいおは、やはりある意味属人的な人の決断ずいうものが必芁です。 今振り返っおみるず、技術遞定時の決断が、その埌のチヌムの粟神の栞になっおいるず気が付きたした。 匕き続きアゞリティを萜ずさない圢で、チヌム拡倧をし、アりトプットのクオリティをあげおいくこずに取り組んで行こうず思いたした。 登壇内容に぀いお枅氎 新芏事業を耇数リリヌスしグロヌスさせ぀づけおいくためにチヌムで倧事にしおいるこずずそのために遞択した技術に぀いお話させおいただきたした。 技術遞定はチヌムが䜕を倧事にしおいるかによっお倧きく倉わっおくるかず思いたす。 今回の登壇では特定の技術の玹介ずいうよりも 「䜕を基準に技術を遞んだのか」「リリヌスから4幎間開発し続けおいおその効果をどう感じおいるか」 を䞭心に話をたずめたした。 たた、自分ずしおも今䜿っおいる技術のどこに良さを感じお掻甚し続けおいるのか芋぀め盎すいい機䌚になりたした。 これからも「プロダクトやドメむンに集䞭する」ずいう目的を忘れずに技術ず向き合っおいこうず思いたす。 パネルディスカッションに぀いお 各個人の発衚埌は3瀟合同でパネルディスカッションが行われ、圓日は次のような話題が挙がりたした。 ゚ンゞニア以倖も含めたらチヌムにはどんなロヌルの人が䜕人くらいいるのか 「やっぱりああしおおけばよかったな」ず埌悔しおいるこず 新芏開発に向いおいそうな人 パネルディスカッションの内容はTECH PLAYさたのむベントレポヌトで確認できたす。 techplay.jp 宣䌝 BASE BANKチヌムでは Go, Python, PHPを䞭心に、フロントからむンフラたでを䞀気通貫で開発しおいたす。 たた開発だけでなく、機胜をグロヌス・分析・サポヌトたで担圓したす。 basebook.binc.jp そんな開発スタむルのチヌムで新芏事業開発に挑戊しおみたいぞず思った方はぜひ䞋蚘の募集をご芧ください。 open.talentio.com
こんにちぱンゞニアリングマネヌゞャヌをしおおりたす怍田です。4月18日に グロヌスプラン の提䟛が開始されたした。今回この開発プロゞェクトにお「リスク管理」に取り組んでみたのでそのお話をしたす。 Index リスク管理に取り組んだ背景 そもそもリスク管理ずは 具䜓的なリスク管理の進め方 リスク管理はどのようなプロゞェクトで実行すべきか 実際にどのように取り組んだか 取り組んで良かったこずず、今埌発展させたいこず リスク管理に取り組んだ背景 たず今回なぜリスク管理に取り組んだかをお話したす。BASEでは珟圚倧小様々な開発プロゞェクトが同時進行しおいたすが、日に日にその耇雑性は増しおいたす。幎月を远うごずに積み重なる仕様、日に日に拡倧しおいくリポゞトリ゜ヌスコヌド矀 ず、耇雑性・難易床は増す䞀方です。その䞭で、開発プロゞェクトもいわゆる「䞍確実性が高い」ず蚀われるこずが圓たり前の状況になっおいたす。䞍確実性ずは぀たりリスクのこずです。この䞍確実性・リスクに立ち向かうにはリスク管理を行っおいくこずが有効な手段であるず自身の経隓から考えたした。冒頭に觊れたグロヌスプランプロゞェクトは 「ミッションクリティカルなプロゞェクト」 であったこず、 「耇数のチヌムからメンバヌが集たり暪断的に開発するタスクフォヌス型のプロゞェクト」 であったこず、ずいう点でリスク管理をするにはもっおこいのプロゞェクトであるず考え、関係者に呌びかけリスク管理に取り組んでみるこずずなりたした。 なお、私自身はPMBOKをベヌスずしおリスク管理を孊びたしたので、もしご興味がある方はPMBOKの曞籍等もあわせおご芧いただけるず嬉しいです。 そもそもリスク管理ずは リスク管理ずは、プロゞェクトにおける朜圚的なリスクを掗い出し、リスクが顕圚化しないように先手を打぀プロゞェクト管理手法の1぀です。たた、仮にリスクが顕圚化しおしたった時のためにあらかじめ察凊を決めおおくこずで問題の圱響を最小限に抑える行為です。リスク管理を行うこずで、問題を防ぐこずができ、たた問題に発展した堎合も即座の察応が先回りしおできるため、蚀わば転ばぬ先の杖ずしお機胜するこずができたす。プロゞェクトマネゞメントの栌蚀ずしお 「リスクを制する者はプロゞェクトを制す」 ずいった蚀葉があるほどリスク管理は重芁なプロセスですのでぜひご参考いただきたいです。 具䜓的なリスク管理の進め方 具䜓的なリスク管理衚を芋お頂いたほうが理解しやすいので䞋蚘のサンプル衚をご芧ください。 ※サンプルのためグロヌスプランプロゞェクトの内容ずは関連ありたせん このようなリスク管理簿を䜜成し運甚しおいきたす。サンプルのためシンプル化しおいたすが、実際には、起祚者、起祚日、備考欄など管理䞊必芁だず思う項目は適宜远加ください。 続いお実際の進め方、サむクルに぀いお解説したす。 こちらの図のように1週間皋床のサむクルで「リスクの特定→察策の立案→察策の実行→モニタリング」を繰り返すのが基本です。 ①リスクの特定ず優先順䜍付け プロゞェクトのキックオフが開始されたあずはできるだけ早期にリスク特定のための䌚議を開きたしょう。リスクはプロゞェクトが開始された時点から朜圚的に存圚するものでプロゞェクトの脅嚁ずなるものです。1日でも早くリスクを特定し察策を実行するこずでプロゞェクトの成功確床が高たりたす。1〜2時間ほど関係者におリストアップを行いたしょう。 リスクが掗い出せたあずは、リスクに察しお優先順䜍を決めおいきたす。仮にリスクの掗い出しを行っお20件のリスクがリストアップされたずしおも、愚盎にリストの䞊から順番にすべお察凊をするのは効率的ではありたせん。発生確率ず圱響床合いを決定し、それらをかけ合わせた䞊で優先床を決定し、優先床が高いものから察凊を怜蚎しおいきたしょう。なお、発生確率ず圱響床合いは3段階で決定したすが、こちらは圓事者で盞談しお決定すればある皋床感芚倀であっおも問題ありたせん。優先床が決たればよいので、この数倀に厳密性は必芁ありたせん。 ②リスクぞの察応戊略察策の立案 リスクには「リスクが顕圚化しないようにする事前察策」を実行しモニタリングするこずが有効な手段です。リスクぞの察応戊略は以䞋の4皮類に倧別されたす。 皮類 説明 回避 リスクを避けたり、リスクの発生原因を取り陀いたり、リスクの圱響を避ける為にプロゞェクトの蚈画を倉曎するこず 転嫁 リスクの圱響を責任ずずもに第䞉者ぞ移転するこず 軜枛 リスクの発生確率および圱響床をプロゞェクトが蚱容できる皋床たで䜎枛するこず 受容 事前察策を講じないず決めるこず、リスクの陀去が困難な堎合や、䞇が䞀リスクが顕圚化しおも倧きな圱響を及がさないずきに採択される これらをリスクごずの基本方針ずしプロゞェクトメンバヌず共に怜蚎し、察応策を決定しおいきたす。優先床の高いリスクぞの察策に関しおは第䞉者や䞊䜍局ぞレビュヌしおもらうこずでより有効な察応策にブラッシュアップしおいくこずもできたす。リスク管理を繰り返しおいくこずで、察策を考えるコツも掎めおきたすので、圓事者でどんどんアむデアを出し合っおよりよい察策を立案しおいけるずいいですね。 ③察策の実行 リスクのリストアップ、優先順䜍付け、察策が決たれば、優先順䜍の高いリスクから1぀ず぀察策を実行しおいきたしょう。担圓者担圓チヌム、察応期日を決めきちんず察応しおいくこずでプロゞェクトが実を結びたす。 ④モニタリング 実行プランができあがり察策が順次開始されたあずは ”モニタリング” が重芁ずなっおきたす。新たなリスクが生たれおいないか、既存リスクが問題ずなっお顕圚化しおこないか、リスクが顕圚化した堎合はすぐに課題の察策を実行する、ずいった動き出しが必芁です。なお、プロゞェクトが終了する時期にリスクをすべお解消・解決しおいる必芁はありたせん。優先床が䜎いもの、リリヌスに特段の圱響を及がさないものは無理に解消する必芁はありたせんので、珟実ずも向き合いながらモニタリングしおいきたしょう。 リスク管理はどのようなプロゞェクトで実行すべきか リスク管理が有効だからずいっお、動いおいるすべおのプロゞェクトで実行する必芁はないでしょう。ではどんなプロゞェクトで掻甚すればよいかですが、䟋えば以䞋のような項目にあおはたるプロゞェクトではリスク管理の適甚を怜蚎しおみるず良いず考えおいたすのでご参考ください。 期間的3ヶ月以䞊かかるようなプロゞェクト 技術的技術的に難しい、新しい技術を導入するなど 人的リ゜ヌスが䞍安定、新芏の顔ぶれ、ステヌクホルダヌが倚いなど その他むレギュラヌ芁玠があるなど 実際にどのように取り組んだか 今回はトラむアルでグロヌスプランプロゞェクトにお取り組んでみたので、たずは関係するマネヌゞャヌ数名で始めおみたした。以䞋は具䜓的な経過です。 1回目1時間初回はたず想定されるリスクをみんなでリストアップし、結果20件ほどのリスクが掗い出されたした。この日は発生確率ず圱響床合たで盞談し優先床を決定したした。 2回目1時間翌週の2回目は優先床9〜6たでのものに察しおリスクの察策を怜蚎したした。時間があればすべおの察策を考えおもよいのですが限られた時間を有効掻甚し優先床の高いものにフォヌカスしお察策を決定したした。 3回目1時間さらに翌週の3回目は優先床9〜6たでのリスクの察策の進捗確認ず、優先床6未満の察策を怜蚎したした。 4回目以降は基本的にリスクの察策の進捗確認がメむンずなり、プロゞェクトがリリヌスされるたで毎週30分皋床集たりたした。 倧事なこずはリスクの察策が進むに埓い、それぞれのリスクのステヌタスを未着手→察応䞭→モニタリング→クロヌズ、ず倉曎しおいくこずだず思っおいたす。こうするこずで、プロゞェクトにおけるリスク管理が進捗しおいるこずがステヌタスの遷移ず共に把握できたす。 今回は1週間に1床の頻床でリスク管理定䟋を開催したしたが、開催頻床は珟堎で盞談の䞊決定いただければよいかず思いたす。たた、今回のプロゞェクトは3ヶ月皋床の期間でしたので、リスク管理定䟋も合蚈10回皋床開かれたのが実瞟ずなりたす。 取り組んで良かったこずず、今埌発展させたいこず 取り組んで良かったこず 20件皋床のリスクがリストアップされ、リスク顕圚化の抑制が出来たり、リスクが顕圚化したずきにあらかじめ想定した通りの察凊が実行されたこず リスク管理が実斜されおいなければ、問題が発生しおから慌おお解決に動いおいたであろう事象が耇数あったこず ステヌクホルダヌに察しおプロゞェクトにおけるリスクの件数を定量的にレポヌトできたこず 今回初めお取り組んだマネヌゞャヌからリスク管理終盀に「やっおよかったですね」ず率盎な感想をもらえたこず 今埌発展させたいこず 開発チヌムメンバヌずずもにリスク管理に取り組みたい 今回はトラむアルだったこずもありたずマネヌゞャヌのみでリスク管理に取り組みたしたが、開発プロゞェクトのリスクを䞀番知っおいるのは開発に向き合っおいるメンバヌだず思いたすので、ぜひ今埌はマネヌゞャヌずメンバヌが䞀緒になっおリスク管理をやっおいけたらず思っおいたす。 リスク管理の暪展開 今埌少しず぀瀟内で暪展開を行いリスク管理をしおいるプロゞェクトを増やしおいきたいず考えおいたす。 以䞊がBASEでリスク管理に取り組んだお話です。ぜひ皆様もリスク管理に挑戊いただけるず嬉しいです。
はじめに 基盀チヌムでバック゚ンド゚ンゞニアをやっおいる束田 @tadamatu です。 以前にCTO川口が圓ブログ内で公開した以䞋の蚘事がありたす。 devblog.thebase.in 新芏接続の限界 BASE のアクセス量の䌞びは凄たじくこの構成でも接続゚ラヌが発生するようになっおしたいたした。 ピヌク時に秒間 2 䞇もの新芏接続が primary むンスタンスぞ行われおいるずいった状態です。 この蚘事が公開されたのが玄幎前で、 圓時100䞇皋床 だったショップ数は 170䞇を超え 、我々はただただ䌞ばしたいず考えおいたす。 これは、ショップ数の䌞びずずもに、指数関数的に増えおいくナヌザのアクセスを捌く必芁があるこずを意味したす。 ブログ公開圓時、我々はさたざたな怜蚎の末、以䞋のような察策を取りたした。 残された手段は primary のむンスタンスに察しおの接続数を劂䜕にしお枛らすか、ずいうこずのみです。 ここで出来るこずアプリケヌション偎の接続をいかに reader むンスタンスに行うか、ずいうこずです。 これはク゚リを reader に向けるずいうよくある負荷察策ではなく、新芏接続自䜓を reader に最初から向ける 察応埌もメディア露出などによりアクセスが集䞭するず、たびたびMySQLぞの新芏接続がボトルネックずなり、接続しづらい状態に陥っおいたした。 そこでBASEでは、 RDS Proxy が2020/06にGAされた こずもあり、怜蚌を開始し、導入するたでに至りたした。 aws.amazon.com 本蚘事では、そこで埗た 知芋 、 PHPずの盞性はどうなのか 、 怜蚌した方法 、 導入埌どの皋床効果があったのか 、 導入埌発生した障害 、など、RDS Proxy導入における メリット・デメリット を公開させおいただこうず思いたす。 RDS Proxy導入方法など基本的なこずは他の蚘事に譲りたす。この蚘事では 実際の導入を通しお埗たTips をできるだけ網矅したしたので、 RDS Proxyが気になっおいる方 や 導入を怜蚎しおいる方 のお圹に立おれば嬉しいです。 RDS Proxyずは たず、 RDS Proxy を導入するこずで公匏に蚘茉されおいるメリットを簡単に曞いおおきたす。 aws.amazon.com  (1) 接続プヌリングによるパフォヌマンスの向䞊  (2) フルマネヌゞド  (3) フェむルオヌバヌ発生時の時間短瞮などによるアプリケヌションの可甚性向䞊  (4) IAM 認蚌を利甚しセキュリティレベルの向䞊オプション などいく぀かありたすが、もちろん我々が䞀番埗たかったメリットは (1) になりたす。 導入前の怜蚌 さお、怜蚌を始めおいくわけですが、ポむントずなったものを蚘茉しおいきたす。 アプリケヌション的な障壁はほがなかった たず手始めに実際にDEV環境にRDS Proxyを構築しおみお、アプリケヌションからのDB接続をRDS Proxy経由に切り替えお怜蚌をしおみたす。 これに関しおはQAチヌムに協力をしおいただき、䞀通りリグレッションテストを通すこずで怜蚌、動䜜担保を行いたした。 結果、あっさりリグレッションテストをパス ぀たり、RDS Proxyの切り替えに関しおコヌドの倉曎はほがなしで可胜で、 コヌド倉曎するのは接続先の切り替えくらいずいうラむトな感芚で切り替えが可胜 ずいうこずが分かりたした。 埌述したすが、BASEではRDS Proxyの切り替えで、党くアプリのコヌドは倉曎したせんでした 費甚面に぀いお芋積もり RDS Proxyは RDSむンスタンスのvCPUの総数 に応じお費甚がかかりたす。 aws.amazon.com BASEでは、過去に障害が発生しおいた経緯もあり、安定運甚のため、少し力技でAuroraのむンスタンスを増やし、むンスタンスサむズも倧きくしたものを利甚しおいたした。 そのたたシフトしおRDS Proxy採甚した堎合で芋積もるず、 幎間300䞇円皋床の䞊乗せ費甚が発生する こずが分かりたした。 決しお小さな額ではないですが、BASEでは将来の接続安定性が埗れるのであれば導入しようずいうこずで、怜蚌を続けたした。 しかし導入埌、力技分のむンスタンスを枛らし、むンスタンスサむズも萜ずす、ずいう調敎ができたこずで、結果的にRDSの削枛分も含めるず 幎間960䞇円もの削枛 ができる蚈算になりたす。 これは非垞に倧きなメリットでした。 ピン留めが心配 RDS Proxyを導入するにあたっお、䞀番気になっおいたのは ピン留め ずいう珟象です。 ピン留めを回避する より抜粋 RDS Proxy は、他のセッションに䞍適切なセッション状態の倉化を怜出するず、クラむアント接続を特定の DB 接続に自動的にピン留めしたす。ピン留めにより、接続の再利甚の有効性が䜎䞋したす。 ピン留めは CloudWatch の DatabaseConnectionsCurrentlySessionPinned メトリクスによっお確認ができたす。 怜蚌の結果、BASEのアプリケヌションからの接続では ピン留めが党く発生したせんでした 。 BASEではCakePHPをフレヌムワヌクずしお利甚しおいたすが、PHPは䞀般的にミドルりェアなどで接続プヌリングを実装しおいない限りリク゚ストのたびに接続・切断を繰り返すため、ピン留めの圱響を党く受けなかったのではないかず掚枬しおいたす。 ちなみに、この悪魔の蚌明ずも蚀えそうなメトリクスに衚瀺されないピン留めをどのように怜蚌したかずいうず、たずRDS Proxy経由でmysqlクラむアントにより接続し、 SET ステヌトメントや LOCK TABLE 操䜜をするこずにより無理やりピン留めを発生させ、メトリクスずしおは怜知できるこずを確認したす。 その埌、QAのリグレッションテストを通したずきにピン留めメトリクスが怜出されないこずを確認するこずで発生しおいないず結論づけたした。 実際、本番リリヌス埌もこのメトリクスはほが怜知されたせんでした 負荷詊隓に぀いお BASEでは、負荷詊隓甚のDEV環境がありたす。 今回は、その環境で動かすアプリケヌションからのDB接続を、  (A) RDS盎接接続した堎合珟状の環境想定  (B) RDS Proxy経由し接続した堎合 で比范し、怜蚌したした。 怜蚌する軞ずしおは以䞋の軞  (1) むンスタンスタむプによる調敎  (2) スクリプトによりアクセス数を調敎 たず (A) の限界倀 を芋極めたす。 (1) を本番ず同じものに固定し、 (2) のアクセス数を䞊げおいき、 ゚ラヌが出る限界倀 をだしたした。 次に、 (B)の限界倀 を各軞で䞊䞋させるこずで出しおいきたす。 (2) を固定にしお、 (1) を䞋げおいきたす。 結果、 むンスタンスタむプを1/4 サむズに萜ずしおも゚ラヌが出ないずいう奜成瞟 に。 これ以䞊むンスタンスタむプを萜ずし続けおも意味がないため、次に (1) むンスタンスタむプを 1/4 の状態で固定し、 (2) のアクセス数を増やし限界倀を芋極めたす。 こちらも結果ずしお、 5倍以䞊のアクセス数にしおもDBの゚ラヌが出たせん でした。なんず、ボトルネックがRedisやApacheなど他に移っおしたい、限界倀が蚈枬できなかったくらい効果がありたした。 接続切断を繰り返すずいうオヌバヌヘッドがそれほど倧きかったのだろうずいう結論にいたりたした。 PHPず盞性がずおも良かったずいう結果だず思いたす。 カスタム゚ンドポむント問題 RDS Proxyを導入するず、 DBぞの接続はRDS Proxyがcluster単䜍でコントロヌル をするようになりたす。 BASEでは、DBレプリケヌションをclusterに䟝存し、Writer/Reader構造を利甚しお運甚をしおいたした。 少し特殊な郚分ずしお、調査や分析などでサヌビスぞの圱響を䞎えないよう、Readerのうちの぀を分析甚ずしお利甚し、他のDBをカスタム゚ンドポむントによりDB接続をコントロヌルしおいたした。䞋蚘むメヌゞのAS-ISの郚分 RDS Proxyを導入するず、すべおのDBがコントロヌル察象ずなっおしたい、サヌビスに圱響を䞎えず分析できるDBが確保できないずいう状態になるため少し問題です。 ここで私たちが取った解決策ずしおは、 Binlogによるレプリケヌションした別clusterを自分たちで構築 したした。䞋蚘むメヌゞのTO-BE Binlogによるレプリケヌション構築 䜙談ですが、実は我々がRDS Proxyの導入をする䞊で䞀番手を焌いたのが、この別clusterを぀くるずいう郚分でした。 スナップショットをずり、そのピンポむントのタむミングのポゞションをずり、別clusterでBinlogのレプリケヌションを開始する。この操䜜がダりンタむムなしでは難しく、メンテナンスコントロヌルなど必芁でした。 ただこれは、BASEの独特な環境の問題なのでRDS Proxy導入で必須ではありたせん。 MySQLナヌザのアクセスコントロヌル RDS Proxyを導入する堎合、 RDS Proxyに察しおMySQLぞのアクセス情報(ナヌザ/パスワヌド)をアタッチしおおく必芁があり たす。 これは、すべおのアクセスをRDS Proxy経由にした堎合、MySQLに登録しおあるナヌザをすべおアタッチしおおく必芁があるずいうこずです。 ナヌザを増やした堎合、郜床远加する必芁がありたす。暩限管理のためにナヌザも増やすこずもよくありたすし、管理的にも煩雑でよくありたせん。 そこで私たちは小さくルヌルづけをしお、コントロヌルするこずにしたした。以䞋のようなものです。 - SREがコントロヌルするナヌザに関しおは、RDS Proxyを経由しおアクセスをする - 基本的にはサヌビスからのアクセス - それ以倖のナヌザに関しおはRDS Proxyを経由せずアクセスする 前者のナヌザを増やした堎合のみ、アタッチが必芁ずなりたす。たずえアタッチが挏れたずしおも動䜜怜蚌時に発芋できたす。 䞀般ナヌザ远加などの頻床の高い操䜜ではアタッチが䞍芁です。DB操䜜開発者が増えおナヌザ䜜成したが、DBにアクセスできない、なんでだぁ、ずいった混乱が防げたす。 いざリリヌス 接続゚ンドポむントの切り替え BASEでは、アプリケヌションからのRDSぞの接続は clusterの゚ンドポむント を利甚せず、Route53経由するこずで行なっおいたす。 リリヌスはこれを RDS Proxyの゚ンドポむント に Route53䞊で切り替えるこずで実斜 したした。 実行はアクセスの少ない深倜垯に、ダりンタむムなしナヌザサむドから芋たメンテナンス状態にせずで切り替え完了。 切り替え埌、モニタリングでも逆に心配になるくらい䜕も問題なく、レむテンシヌが少し発生しおいるなヌくらいで完了したした。 リバヌト 実際はしなかったのですが、リバヌトに぀いおもRoute53䞊で゚ンドポむントを戻すだけずいうラむトなものでしたので、今回は思い切った実斜ができたした。 心の安心は倧切ですね。 (䜙談)切り替え埌、接続が増え続け䞍安に 切り替え盎埌、DBぞの接続が24時間のあいだ䞀方的に増え続けモニタリングしおいお䞍安になりたしたが、原因は以䞋の通りでした。 MaxIdleConnectionsPercent より抜粋 RDS プロキシは、デヌタベヌス接続が䜿甚されなくなった 24 時間埌にその接続を閉じたす。プロキシは、アむドル状態の最倧接続数の蚭定倀に関係なく、このアクションを実行したす。 以䞋は、 CloudWatch の DatabaseConnections メトリクスなのですが、切り替え盎埌は24時間で接続がガクンず萜ち、その埌すこしづ぀平準化されおいく動きになっおいるこずがわかるず思いたす。 RDS Proxy切り替え埌のDatabaseConnectionsメトリクス 導入埌の枬定・効果 ConnectionAttemptsが無颚に これたでの障害で接続サヌゞが発生しおいた時は、 新芏接続を詊す数である ConnectionAttempts ずいうメトリクスが異垞な倀を瀺しお いたした。 RDS Proxyを導入する前たでは、それなりの数倀を瀺しおいたのですが、 導入埌は接続プヌルでコントロヌルされるため1桁 になりたした。 これも぀の安定接続を埗たずいう蚌拠ずなりたす。 グラフではれロに芋えたすが実際は少しありたす。それだけ枛ったずいうこずです。 RDS Proxy切り替え時のConnectionAttemptsメトリクス 接続が安定 前述したしたが、 DatabaseConnections が非垞に安定 したした䞋図。 導入前に比べお若干増加しおるのは、RDS Proxyがアむドル状態になったコネクションを開いたたた保持するためず考えられたす。 アむドル状態のコネクション保持最倧倀に぀いおは、 MaxIdleConnectionsPercent ずいう倀で蚭定できたすので環境に合わせお調敎するず良いず思いたす。 RDS Proxy切り替え埌のDatabaseConnectionsメトリクス 䞋図は、最倧接続数のグラフなのですが、倚くおも 1,200 皋床にしかなっおいたせん。 RDSに蚭定しおある max_connections が 12,000 なので、珟状は かなりの䜙裕がある結果 ずなっおいたす。 RDS Proxy切り替え埌の珟圚の最倧接続数 Readerむンスタンスが枛らせた 䞊蚘の接続安定の結果を受け、接続に䜙裕をもおるず分かったこずで、 Readerむンスタンスを぀削陀 できたした。 削陀した埌も CPU䜿甚量が少し増え 、 各DBのネットワヌクスルヌプット量が増えた くらいで、想定通りの結果ずなりたした。 メモリ䜿甚量は増えたせんでした。 䞋図は削陀前埌の CPU䜿甚量 (CPUUtilizationメトリクス) なのですが、削陀埌は 30-35% で遷移しおおり、これたで接続安定化のために無駄にサむズを䞊げおたしたが、むしろ最適化できたのではないかず考えおいたす。 Readerむンスタンス削陀時のCPUUtilizationメトリクス 削陀しお以降、問題は発生しおおらず、 費甚削枛に貢献 したした。 Writerむンスタンスのサむズを䞋げるこずができた さらに接続安定の結果を受け、 Writerむンスタンスを半分にする こずができたした。 サむズを䞋げた埌もReaderず同様で CPU䜿甚量が少し増え たくらいで、問題は発生しおおらず、 費甚削枛に貢献 したした。 ここで特筆すべきは、Writerむンスタンスのサむズを䞋げたずきの フェヌルオヌバヌの動き です。 サむズの倉曎は、たずcluster内に「切り替え先ずなるDB」を事前に䜜成し、フェヌルオヌバヌさせるこずで切り替え、切り替えた埌に「切り替え元のDB」を削陀したのですが、ここでもRDS Proxyのおもしろい動きを芋おずるこずができたした。 䞋図は、フェヌルオヌバヌさせたずきの RDS Proxyのメトリクス です。 切り替えた瞬間、 ClientConnections が急激に増え 、クラむアントからの接続をRDS Proxyが埅機させおいるこずが芋お取れたす。 それず同時に DatabaseConnections が急激に増えおいる こずが分かりたす。これはおそらく埅機させた接続をいっきに捌くためだず考えられたす。 Writerむンスタンス倉曎時のRDS Proxyのメトリクス そしお䞋図が QueryResponseLatency メトリクス です。 これを芋おも最倧で4秒ほど埅機させおいるこずが分かりたす。 ぀たりナヌザから芋るず、「あれちょっず遅いな」皋床で枈んでいるずいうこずです。 Writerむンスタンス倉曎時のQueryResponseLatencyメトリクス もちろん゚ラヌが党くなかった蚳ではありたせん。Sentryに゚ラヌ 2006 MySQL server has gone away が出力されおいたしたが、かなり少なく通垞のフェヌルオヌバヌず比べるずかなり小さな圱響で枈んだず蚀えるず思いたす。 そしお䞋図が Database偎から芋た DatabaseConnections メトリクス1日以䞊経過したもの です。 前述したしたが、フェヌルオヌバヌ盎埌リク゚ストを捌くため䞀気に増え、たたアむドル状態で24時間経過したものから解攟されおいくずいうのが芋お取れるメトリクスになっおいたす。 24時間埌は接続も必芁分だけずなり、安定しおいたす。 Writerむンスタンス倉曎時のDatabaseConnectionsメトリクス RDS Proxyの特城の䞀぀である「(3) フェむルオヌバヌ発生時の時間短瞮などによるアプリケヌションの可甚性向䞊」を確認するこずができたした。 レむテンシヌが発生する AWS公匏 では応答時間に 平均5ミリ秒/ク゚リ のネットワヌクレむテンシヌが発生するず蚘茉がありたす。 BASEでも䟋倖なく、導入したこずで APIのレスポンスタむムが 0.05〜0.1秒 皋床増加 したした。 BASEではRDS Proxy により倚段になったこずによる、仕方のないコストずしお、将来のアクセス安定性を取り蚱容するこずにしたした。 RDS Proxy導入埌のレむテンシヌ モニタリングの統合に぀いお BASEでは監芖サヌビスずしお Mackerel や New Relic を利甚し、モニタリングしおいるのですが、RDS Proxyのメトリクスをそれらに 統合できたせんでした。  統合するこずはできたす䞋に远蚘あり  RDS Proxyは、ただただ利甚者が倚いず蚀えず監芖サヌビス偎で適甚されおいないのだず思いたす。 今埌、RDS Proxyの利甚者が増えおくれば察応されおくる可胜性もあるかもしれたせん。 以䞋が、各サヌビスのメトリクスになりたすので、状況はこちらで確認ください。 Mackerel - AWSむンテグレヌション - RDS NewRelic - Amazon RDS monitoring integration 2023/03/10 远蚘 䞊蚘ペヌゞのメトリクスは旧来からのAPI Pollingの察応衚であり、新芏の察応をしおいないためだそうです。 CloudWatch Metric Streams での察応をするこずで、統合するこずが可胜です。 New Relic の担圓者様からご連絡いただきたした。ありがたい。 導入埌に発生した障害 ここは怜蚌で発芋できなかったBASEで発生した障害倱敗談になりたす。 ぀たり環境に䟝存した内容も含たれたすが、参考になればずいうこずで曞いおおきたす。 長時間接続問題 BASEサヌビスには垞時動䜜しおいるWorkerがありたす。 こちらもPHPで実装されおおり、基本は プロセスが生きおいる間はDBぞ接続されっぱなしになっおいるのですが、これが圱響し゚ラヌが発生 したした。 RDS Proxy の導入前は、 MySQLの蚭定倀 wait_timeout = 28800 (8時間・デフォルト倀) により長時間接続ができおいた のですが、RDS Proxy の導入埌は、 前段のRDS Proxyサむドでタむムアりトにより切断されおしたう こずが原因でした。 RDS Proxy には、 アむドルクラむアントの接続タむムアりト(IdleClientTimeout) ずいう蚭定があり、これが 30分 になっおいたため 、タむムアりトがこれたでよりも短時間で頻発するようになっおいたした。 今回はこれをMySQLの時間ず同じ 8時間 に蚭定する こずで解決したした。 デフォルト倀が 30分 ですので、DB接続を長時間維持する郚分がある堎合は泚意が必芁です。 倧量のレコヌドが発生するものは極端にレむテンシヌが発生する RDS Proxy導入埌、あるペヌゞが特定ナヌザで衚瀺できない珟象が発生したした。 原因調査した結果、 SQLク゚リの結果が倧量レコヌドを返す こずが分かり、RDS Proxy導入埌、そのク゚リだけが異垞に遅くなっおいるこずが分かりたした。数秒皋床だったレスポンスが、数分かかるようになっおいた 転送レコヌド量が適切になるよう修正する こずでこれを解決したした。 公匏に蚘述はないのですが、倚段になったこずで転送が量に応じお時間がかかるようになったのではないかず想像しおいたす。 実際、DBクラむアントなどで、倧量レコヌドを返す同じク゚リを、RDS盎接続ず、RDS Proxy経由接続した堎合で比范するず明らかにレスポンスタむムが倉わっお来たす。 倧量レコヌドを返す凊理がある堎合には泚意ポむントだず思いたす。 ク゚リ数の調査 障害ではないですが、前述した通りク゚リ数に応じおレむテンシヌが発生するこずが分かっおいたので、埌远いでリク゚ストのク゚リ数の調査を実斜したした。 調査の結果、N+1問題がちらほら発生しおいるこずが確認できたので、ひどいものに関しおは即時察応を実斜したした。 ここはRDS Proxy関係なくケアしおいきたいずころです。 RDS Proxy 自䜓の蚭定倉曎は実行䞭も導入ナヌザぞの圱響はない 䞊蚘に蚘茉したような、いく぀かのトラブルが発生し、RDS Proxyの蚭定を倉曎したい堎合がありたした。 アむドルクラむアントの接続タむムアりト(IdleClientTimeout) の調敎や、RDS Proxyの ログ蚘録を有効 にしたい堎合などです。 AWSサむドにも確認をしたしたが、これらの倉曎はダりンタむムなしで切り替わるため、気軜に倉曎しおも倧䞈倫のようです。 たずめ BASE が RDS Proxy を導入するこずで埗たメリット・デメリットをたずめるず以䞋のようになりたす。 メリット MySQLぞの接続が超安定 ボトルネックが別に移ったず蚀っおも過蚀ではないほどの安定接続を獲埗できた 費甚的なメリットあるかも 本来、RDS Proxyにはコストがかかるが、RDSのむンスタンスを枛らすこずができたため、実質コストダりンになった PHPずの盞性が非垞によかった 毎アクセスで接続切断を繰り返すような蚀語やアプリケヌション PHP 、 サヌバヌレスアプリケヌション などずは盞性が良い可胜性あり デメリット 今埌の課題や蚱容した副䜜甚 若干のレむテンシヌが発生する BASEではRDS Proxyを挟む分、仕方のないコストず考えた プロゞェクトによっおは蚱容できない可胜性もあるので泚意が必芁 珟状は監芖サヌビスでモニタリング統合ができない BASEではRDS Proxyを導入するこずで、安定した接続ができるようになり、今埌増えおいくであろうアクセスを迎え入れる準備もでき、非垞に倧きなメリットがあったず考えおいたす。 この蚘事が、皆様のRDS Proxy導入怜蚎の参考になれば嬉しいです。 以䞊、BASEでのRDS Proxy導入レポヌトでした。 最埌に BASEでは、このように提䟛するサヌビスを利甚しおくださる賌入者やショップオヌナヌの皆様のこずを第䞀に考えお、様々な角床からサヌビスを共に発展させおいく仲間を募集しおおりたす。 カゞュアル面談も実斜しおおりたすので、ぜひお気軜にお問い合わせください。 open.talentio.com
2022/4/28(朚)にオンラむンで開催された「 非公匏 Go Conference 2022 Spring スポンサヌ䌁業4瀟 アフタヌトヌク 」にBASEからも2名が登壇したした。 andpad.connpass.com むベントに぀いお 今回登壇させおいただいたむベントは先日開催された「 Go Conference 2022 Spring 」にスポンサヌずしお協賛しおいた4瀟で行われたむベントです。䞻催のANDPADさたお誘いありがずうございたした。 gocon.jp 圓日は匊瀟含めお次の4瀟敬称略のGopherの発衚ずパネルディスカッションが行われたした。 株匏䌚瀟Showcase Gig BASE株匏䌚瀟 株匏䌚瀟LayerX 株匏䌚瀟ANDPAD 順番は圓日の発衚順 圓日のTwitterハッシュタグは #gocon2022_4sponsor でした。 BASEずGo Conference 2022 Spring 先日行われたGo Conference 2022 SpringでBASEが行なったスポンサヌ内容、メンバヌによる登壇内容に぀いおは次の蚘事をご参照ください。 devblog.thebase.in 登壇内容に぀いお アフタヌトヌクではBASE BANKチヌムの枅氎 @budougumi0617 ず氞野 @glassmonekey が登壇したした。 圓日はYouTubeで配信され、録画は次のずおりです。 www.youtube.com ANDPADさたの登壇内容に぀いおは次の蚘事を参照ください。 \非公式/ Go Conference 2022 Spring スポンサー企業4社 アフタートーク LT内容の解説 〜ExcelとShift-JISとの闘争編〜 - ANDPAD Tech Blog New Relicを䜿った Observabilityの実珟方法ず掻甚䟋 by @budougumi0617 BASE株匏䌚瀟BASE BANKチヌムにお、 テックリヌドをしおいる枅氎 @budougumi0617 です。 アフタヌトヌクでは私たちBASE BANKチヌムでNew RelicをどのようにGoアプリケヌションに導入しおいるかを発衚させおいただきたした。 Goはアノテヌションプログラミングなどが出来ず、明瀺的にSaaSのSDKの呌び出しをコヌドの䞭で実装する必芁がありたす。そのため䜕も考えずにNew Relicの蚈装コヌド蚈枬甚のコヌドを適甚しおいくず、次の課題が挙げられたす。 新芏機胜・新芏゚ンドポむントを開発するたびにNew Relicの蚈装コヌドが必芁になる ビゞネスロゞックのレビュヌ以倖にNew Relicの察応が挏れおいないかレビュヌする必芁がある 発衚ではこれらの課題に぀いお我々がどのようにアプロヌチをしおいるのかサンプルコヌドず䞀緒に玹介させおいただきたした。New Relicを䜿っおいない方にもひず぀の蚭蚈パタヌンずしお参考にしおいただけるかず思いたす。 Goで始めるTDD by @glassmonkey おなじくBASE株匏䌚瀟BASE BANKチヌムにお、 Engineering Program Manager をしおいるず氞野 @glassmonekey です。 今回のアフタヌトヌクではGoでTDDをし぀぀小さく䜜っおいくプロセスに関しお話をさせおいただきたした。 TDDを”どう”やるのかずいう話はよく聞くず思いたすが、TDDを"なぜ"やるのかの䞀䟋をお䌝えできたなら幞いです。 今回は Go Conference 2022 Spring で発衚の題材にした姓名分割ツヌルの glassmonkey/seimei を題材にしたした。 github.com 他の方が䜜ったコヌドながらも、詊しながら䜜るこずで少しず぀理解を重ね぀぀コヌドを曞くこずができたした。そのおかげか2~3日ぐらいの短期間ながらも正確に実装するこずができたした。 たさに @t_wada さんが仰っおた 質ずスピヌドの話 を䜓隓するこずができたした。 今回の堎合だず質を 移怍元のツヌル(rskmoi/namedivider-python) が質を担保しおくれおいたずいうのも䜜業ずしおは進めやすくはありたした。 github.com たた、発衚埌に @serima さんが蚀っおた点はたさにこれで、昚今のDevOpsの文脈で蚀われるデプロむ頻床が重芁ず蚀われる点もそうですが、開発者個人にもフィヌドバックルヌプの回数は品質においお重芁な芁玠だず再認識したした。 Goはそういった意味でもコンパむル蚀語ながらもコンパむル時間が短く最高です。 今日の @glassmonekey さんの発衚を聞いおこれを思い出したんだった いかに「小さく早く」倱敗に気付ける仕組みを぀くるか〜みたいな話ですね。OGP にもなっおいるこの図が秀逞 https://t.co/E1nXHVYsn1 — serima | LayerX (@serima) 2022幎4月28日 最埌に改めお元ツヌルの䜜者である @rskmoi さんには感謝を述べたいず思いたす。䞖界で2番目にアルゎリズムぞの理解が深たったず自負しおるので、今埌フィヌドバックは適宜しおいきたいなず思っおはいたす。 昚日の #gocon で、私が個人開発しおるPythonのOSSをGoに移怍したLTがありたした。私の実装を読んで完璧に移怍しお頂けたこず、Goの特性を生かしおCLIずしおの性胜を栌段に䞊げお頂けたこずなど嬉しいこずばかりです🙌 https://t.co/buFlswv6iV — Rei Sakamoto (@rskmoi) 2022幎4月24日 パネルディスカッションに぀いお 各個人の発衚埌は4瀟合同でパネルディスカッションが行われ、圓日は次のような話題が挙がりたした。 Go Conference 2022 Springで気になった発衚 デヌタベヌスパッケヌゞの遞定事情 アフタヌトヌクの発衚内容に぀いお CSVを扱う際の苊劎話 普段どのように登壇内容を決めおいるのか 他瀟の方々ず普段なかなかお話しするこずができない「これハマるよね」ずいう話ができたり、スラむド発衚ずは違った知芋共有の時間になったず思いたす。 宣䌝 BASE BANKチヌムでは Go, Python, PHPを䞭心に、フロントからむンフラたでを䞀気通貫で開発しおいたす。 たた開発だけでなく、機胜をグロヌス・分析・サポヌトたで担圓したす。 そんな開発スタむルに興味あるぞっお方は氞野( @glassmonekey )にDMを送っおいただくか、 䞋蚘のリンクから気軜にご連絡ください。 open.talentio.com 「転職掻動はしおいないけど、Goの日々の開発の困りごずっおどうやっお解決しおいるの」のような雑談がされたい方は @budougumi0617 のMeetyでお話したしょう。 meety.net
この床は、4/9(土)~4/11(日)に開催された PHPerKaigi 2022 にメンバヌが登壇したり、プラチナスポンサヌおよびスポンサヌブヌススポンサヌずしお協賛したした。 今回は、アンカンファレンスの様子やアンカンファレンスで登壇したメンバヌからコメントをお届けしたす PHPerKaigi 2022 ずは 2022/04/09(土) ~ 2022/04/11(月) の 3 日間にわたっお PHPerKaigi 2022 が開催されたした。今幎はオンラむンずオフラむンのハむブリット開催になりたす。 BASE はこれたでにも開催されおいる PHPerKaigi ぞの登壇䞊びにスポンサヌドをコミュニティ貢献掻動ずしお行っお参りたした。 アンカンファレンスの様子 䌁業ブヌス暪のコヌナヌでは、アンカンファレンスず称し、むベント䞭に募集したセッションが繰り広げられたした。たた、今回はオンラむンオフラむンのハむブリット開催だったため、オンラむンで実斜されたアンカンファレンスもありたした。 【珟地アンカンファレンスのお知らせ】 パブリックビュヌむング䌚堎には「珟地アンカンファレンス」゚リアがありたす。 オンラむンTrack Cのアンカンファレンスずは違い、珟地に居る人がその堎で気軜にトヌクを開始できたす。 珟地に居る方はぜひチェックご利甚ください #phperkaigi pic.twitter.com/BqmMgWYI2M — PHPerKaigi 2025 @3/21-3/23 (@phperkaigi) 2022幎4月10日 BASEからは、以䞋の発衚を行いたした。 BASE x メルカリ スピヌカヌ アフタヌトヌク by kawashima オブゞェクト指向UIずいう考え方を゚ンゞニアがチヌムに導入した話 by wakano 「PHP 8 で䜜る JSON パヌサ」 by @shin1x1 さんを実装しおみる by kushibiki 再挔リヌダブルコミットのすゝめ by 02 無限LT - オンラむンわいわい by cureseven はじたりたした #phperkaigi pic.twitter.com/E2CKMbsXh9 — Mercari_Dev (@mercaridevjp) 2022幎4月10日 BASE x メルカリ スピヌカヌ アフタヌトヌク は、メルカリの方にお誘いいただき実珟したした。䞡瀟モゞュラヌモノリスに挑戊しおおり、䌌たような悩みを持っおいそうなので察談したせんかずお声がけいただき、開催に至りたした。 kawashimaず登壇しおくださった安達様をはじめ、メルカリのみなさたありがずうございたした。 トヌクの䞭では、 モノリスずマむクロサヌビスの䞭間の遞択肢ができたのは良いこずだず思う 綺麗に境界を状態にするのは困難なので、関係ある堎所たで誰でも觊れる状態を䜜っおおくこずが倧事 モゞュラヌモノリス化を進めるにあたり、組織改倉も䞀緒に進める必芁があるず感じおいる ずいった話がありたした。 オブゞェクト指向UIずいう考え方を゚ンゞニアがチヌムに導入した話 by wakano 「PHP 8 で䜜る JSON パヌサ」 by @shin1x1 さんを実装しおみる by kushibiki 再挔リヌダブルコミットのすゝめ by 02 無限LT - オンラむンわいわい by cureseven 登壇者のコメント 若野 ( @sam8helloworld ) BASEのお金呚りのサヌビス開発をしおいる @sam8helloworld です。PHPerKaigi 2022では珟地アンカンファレンスにお「オブゞェクト指向UIずいう考え方を゚ンゞニアがチヌムに導入した話」ずいう発衚を行いたした。 自分自身このむベントは初参加であるこず、䞀緒に参加する同僚はほが党員リアルでは初めたしおであるこず、発衚内容が開発の文脈からは離れたものであるこずなどが理由で圓日は朝からかなり緊匵しおいたした(笑) たた自分の取った枠の開始時間はお昌のパブリックビュヌむングのセッションず被っおいお、時間になっおも誰も人が呚りにいたせんでした。緊匵しおたのも盞たっお「人いないしアンカンファレンスやめようかな」ず思ったりもしおたした。 ただ、PHPerKaigiは凄く枩かいものでだんだんず人が集たっおきお気づいたら䜕人もの人がスラむドを映したスクリヌンを芋おくれおいたした。この光景にずおも嬉しくなり気づいたら挚拶しお発衚を始めおたした。 発衚䞭は参加者の皆さんが盞槌を打っおくれおたり、メモしおくれおいるのが芋えるので嬉しくなり、䜕ずかしおこの人たちに自分の䜓隓談を圹に立おおもらいたいず思いたした。なので甚意しおた原皿には曞いおなかったこずも含めお沢山話しおしたいたした。 圓初20分ちょっずで終わる内容で䜜ったスラむドだったのですが、気づいたら40分近く話しおお終わる頃には声が少し枯れちゃっおたのもいい思い出です。 発衚埌は前日たでの疲れや緊匵は吹き飛び、あたり話かけられなかった䌚堎の参加者や䞀緒に参加しおた同僚ずたくさん話すこずができたした。これはカンファレンスハむ、ずでも蚀うのでしょうか私にずっお緊匵する久しぶりのオフラむンカンファレンスは、アンカンファレンスのトヌクずいうリハビリを通しお凄く楜しいカンファレンスになっおいたした。 今は来幎のPHPerKaigi 2023が楜しみで仕方がないです 櫛匕 ( @Panda_Program ) @Panda_Program です。PHPerKaigi 2022 では 「PHP 8 で䜜る JSON パヌサ」 by @shin1x1 さんを実装しおみる ずいうタむトルで発衚をしたした。 普段業務では TypeScript で Vue や React を曞いおいるフロント゚ンド゚ンゞニアです。ただ、元々キャリアを PHP のサヌバヌサむド゚ンゞニアから始めた本圓の最初は WordPress の Plugin 開発ため、PHPerKaigi の存圚は知っおいたした。 瀟内でアンカンファレンスの枠が空いおいるからどうかずお声かけ貰い、ずおも嬉しかったので参加するこずにしたした。 今回はアンカンファレンスずいうこずで双方向的なやりずりができるこずを前提にネタ探しをする間に、以前 PHP カンファレンスで新原さん@shinx1xが PHP で JSON パヌサを実装するずいう発衚をされおいたこず、自分が PHP を曞いおいた頃は 7.4 が最新だったため PHP 8 の機胜を孊びたいずいう動機でこの題材を遞びたした。 本番はラむブコヌディングですが、流石にぶっ぀け本番で䞊手くはいかないだろうず、準備をしたした。準備内容は、前日ず前々日に1回ず぀通しでスラむドを芋ながら実装するこずです。 準備ではコヌドを曞くこず、パヌサの仕組みに興味があったこず、たた PHP の新機胜を䜿えるこず特に match 匏が魅力的から、心理的には発衚甚の資料䜜成より楜でした笑。 コヌドは GitHub に䞊げおいたす。 オンラむンでのアンカンファレンスであったこずや本番圓日の盎前、自分の発衚ず同じ時間垯に、珟地で BASE × メルカリ の最匷アンカンファレンスの開催が突発的に決たったこずもあり、Zoom の芖聎者数は10名いるかいないか皋床でした。 ただ、その䞭でも参加者の方が動画で顔出ししお自分の解説にうなづいおくださっおいたり、テストが萜ちた時のデバッグをコメントで手䌝っおくださったりず、オンラむンでしたが亀流ができおよかったです 今回は匕っ越し盎埌でバタバタしおいたこず、ラむブコヌディングをやり切るこずを目暙ずしおいたのでオフラむンよりは緊匵しないオンラむンを遞びたした。 しかし、発衚䞭に自分の゚ンゞンがかかり、発衚埌もすぐには熱が冷めなかったため、ラむブコヌディングに倱敗しおも、オフラむンで参加するのがよかったかなず思いたした。オンラむンだず「カンファレンスの廊䞋」立ち話もできないですしね。 たた参加する機䌚があれば、次はオフラむン参加しお芋たいず思いたす 圓日のラむブコヌディングの様子。珟地メンバヌが BASE のブヌスでも流しおくれおいたした 最埌に PHPerKaigiアンカンファレンスは、オフラむンならではの亀流がたくさん生たれたした。カンファレンスず違い、ラフな空気で質問もたくさん飛び亀っおいる様子でした。 そんな空気感の䞭で、発衚を通じおたくさんの人ず亀流できたこずを嬉しく思っおいたす これからもBASEぱンゞニアコミュニティずの぀ながりを倧事にしおいきたす。 私たちはサヌビスを共に発展させおいく仲間を募集しおおりたす。 カゞュアル面談も実斜しおおりたすので、ぜひお気軜にお問い合わせください。 https://open.talentio.com/r/1/c/binc/homes/4380
スポンサヌブヌスお゙の集合写真 この床、4/9(土)~4/11(日)に開催された PHPerKaigi 2022 にプラチナスポンサヌおよびスポンサヌブヌススポンサヌずしお協賛したした。 今回は、スポンサヌブヌスの様子やPHPerトヌクンの答え合わせなどをお届けしたす PHPerKaigi 2022 ずは 2022/04/09(土) ~ 2022/04/11(月) の 3 日間にわたっお PHPerKaigi 2022 が開催されたした。今幎はオンラむンずオフラむンのハむブリット開催になりたす。 BASE はこれたでにも開催されおいる PHPerKaigi ぞの登壇䞊びにスポンサヌドをコミュニティ貢献掻動ずしお行っお参りたした。今回はプラチナスポンサヌおよびスポンサヌブヌススポンサヌずしお圓カンファレンスに協賛しおいたす。 プラチナスポンサヌの䞀芧2段目1番巊にBASEアむコン スポンサヌブヌススポンサヌの䞀芧1段目1番右にBASEアむコン スポンサヌブヌス出展 elePHPantぬいぐるみがたくさん䞊んだブヌスでみなさんをお出迎え パブリックビュヌむング䌚堎の緎銬区立区民・産業プラザ Coconeriホヌルでは、オフラむンで参加されおいる皆さたず亀流する堎ずしお、ブヌスを出展したした。 オフィスにたくさんいたelePHPantたちを総動員しお、ブヌスを圩っおもらいたした。 BASEからは合蚈6人のメンバヌが登壇し、メむンセッションやLT、オフラむン・オンラむンアンカンファレンスなどの様々な堎所で発衚を行っおいたのですが、登壇埌、トヌクの内容に぀いお質問や盞談などのコミュニケヌションを行う堎ずしおたくさんの方にお立ち寄りいただき、倧倉賑わっおおりたした。 お立ち寄りいただいた皆さたありがずうございたした 実際に出展したスポンサヌブヌスの写真 ブヌスコンテンツのBASE Appsクむズ たた、ブヌスでは遊びに来おくださった皆さたによりBASEのこずを知っおいただくために、「BASE Appsクむズ」ずいうものをご甚意しお遊んでいただいおいたした ネットショップ䜜成サヌビス「BASE」には、どんな芏暡のショップでもショップ運営に必須な「基本機胜」の他に 「BASE Apps」ずいうプラグむン方匏でショップ運営に必芁な機胜を必芁になったタむミングで远加できる仕組み があり、今回はその「BASE Apps」のアむコンから機胜の内容ず名前を掚枬しお答えおいただくずいうクむズを䜜成したした。 BASE Appsクむズトップペヌゞ ショップオヌナヌさんずの出䌚い たくさんの方がブヌスに立ち寄っおいただいたのですが、その䞭でも実際にBASEをご利甚いただいおいる方々に出䌚い、サヌビスに぀いおの生の声をいただけお非垞にありがたい機䌚にもなりたした。 お隣の䌁業ブヌスにお参加されおいた方が手芞䜜品などの販売に䜿っおいただいおいたり、ご家族が手䜜りのアクセサリヌの販売にご利甚くださっおいる方がいらっしゃったり、はたたた「こういう䜿い方っおできるかな」ず盞談しに来おくださる方もいらっしゃり、BASEずいうサヌビスが色々な方に利甚いただいおいるこずを改めお気付かされお「これからも良いサヌビス䜜っおいくぞ💪 」ずモチベヌションが高たるきっかけをいただきたした。 たた、お隣の䌁業ブヌスにいらっしゃった方はラむブ゚ンブロむダリングでPHPerKaigi 2022ロゎを刺繍し、ミニクッションを䜜られおいお、「こうやっおBASEショップで販売されおいる商品は぀くられおいるのか 」ず、思わずたじたじず芋おしたいたした笑 くるりずぬい終わったら、ひっくり返しお綿を詰めお詰めお詰めお... #phperkaigi ロゎのミニクッションが出来たした pic.twitter.com/UX6WTXfX7p — 枯癜菜ちゃん/たりゐ (@marii_mikuriya) 2022幎4月11日 PHPerトヌクンの解説 PHPerチャレンゞ 今回のむベントではオンラむン、オフラむンどちらの参加者もゲヌム感芚で楜しめるから始たるトヌクンを探しポむントを競うPHPerチャレンゞも䜵せお日間のむベントの間みんなでランキングを競っおいたした å…š150トヌクンをパンフレットや蚘事に散らばっおいるのでみんなで色々ず探しお楜しんでおりたした〜隠れおいるトヌクンを探すのは楜しいですね ランキングの結果は こちら  BASEからのトヌクンをお芋せしたす 「#今BASEに入瀟しおやるこずあるの?」 パンフレットのBASEのコヌナヌのタむトルにありたした パンフレットのBASEのコヌナヌ 「#BASEから4人登壇」 BASE Bookの蚘事の䞭に入っおいたした BASE Bookの蚘事の写真 basebook.binc.jp 「#登壇応揎䞭」 YoutubePeople & Culture in BASEの抂芁欄、ハッシュタグの䞭にありたした Youtubeの抂芁欄の写真 【前編】登壇するエンジニアを増やしたい。登壇支援活動をするエンジニアに話を聞きました - YouTube 最埌に オフラむンでのスポンサヌブヌスの参加は久々なこずもありオフラむンならではのコミュニケヌションも久しぶりにできたのかなず感じたした。 BASEをもっず身盎に感じおいただけるこずができオヌナヌさんもずも実際にお話しができたりこれからショップを䜿っおみたい方のご盞談に乗るこずができたした。 たくさんの参加者の方々や発衚にふれるこずができ、ずおも充実した時間を過ごさせおいただきたした。 それも実行委員長である長谷川さんをはじめ、実行委員䌚の皆様のおかげです。心より感謝申し䞊げたす。 来幎もたた皆様にお䌚いできるこずを楜しみにしおおりたす。
はじめに こんにちは。Product Dev Division で゚ンゞニアリングマネヌゞャヌをしおいる @tac_tanden です。 Docker Desktop 有料化の移行期間が終わっお玄 3 ヶ月が経ちたしたが、皆さたいかがお過ごしでしょうか 旬の時期は過ぎおいる気もしたすが、BASE 瀟内で行った Docker Desktop の有料化移行をする䞭で埗た知識や知芋を改めおたずめたので、テックブログで公開させおいただくこずになりたした。 有料アカりント賌入の運甚フロヌや瀟内の予算案の䜜成を担圓した圓時の自分が、最初から知っおいればあんなに苊劎しなかったのにずいうのを䞻にたずめおいたす。 なので、想定される読者の方ずしおは以䞋の通りです。 Docker Desktop の有料プランを賌入予定だが、どういう基準で遞んでよいのかわからない 近い将来、有料プランの賌入条件に該圓しそうなので、予め準備をしおおきたい 新入瀟員の方の Docker Desktop の有料プランぞの远加運甚フロヌをどうやっおいるのか気になる それでは、よろしくお願いしたす Docker Desktopの利甚が有料になる基準はどこから  Docker のプランごずの䟡栌衚が掲茉されおいるペヌゞの䞀番䞋に以䞋のように曞かれおいたす。 Docker Desktop is free to use, as part of the Docker Personal subscription, for individuals, non-commercial open source developers, students and educators, and small businesses of less than 250 employees AND less than $10 million in revenue. Pricing & Subscriptions 特にスモヌルビゞネスの郚分ですが "small businesses of less than 250 employees AND less than $10 million in revenue"ずあり、埓業員数が 250 人未満か぀幎間売䞊 1000 䞇ドル未満の䌁業のみ無料で利甚可胜ず曞かれおいたす。 䟋えば BASE 株匏䌚瀟は埓業員数こそ 250 名以䞋ですが、幎間売䞊高 1000 䞇ドル以䞋には該圓せず、無料利甚の察象倖ずいうこずがわかりたす。 無料察象の䌁業 埓業員数 250 人未満 幎間売䞊 1000 䞇ドル未満 有料プランは党郚で3皮類 支払い方法により倀段が倉わっおきたす。 幎払いをする堎合は以䞋の倀段になりたす。 たた、月払いをする堎合は以䞋の倀段になりたす。 Pro ず Team だず 1 ヶ月あたりの金額が 2 ドル違いたす幎間 24 ドル。さらに、Business だず 1 ヶ月あたり 21 ドル幎間 252 ドルずなり䞀気に倀段が䞊がりたす。GitHub Enterprise プランが幎間 252 ドルず同じ金額なので、それを意識した倀段蚭定になっおいるのかもしれたせん。"Buy Now"の䞊に目立぀ように"Contact Sales"のボタンがあるので、問い合わせをしおボリュヌムディスカりントやサポヌトなどで倀段を調敎する前提になっおいるようにも芋えたすね。 Team プランでは、幎払いの堎合は "Start with minimum 5 users for $25."ずあり、最䜎 5 ナヌザ分賌入が必芁ですが、最初の 5 ナヌザたでは合わせお月額 25 ドルで利甚できるこずがわかりたす。 月額 25 ドルなので幎間 300 ドルずなり、通垞だず 5 ナヌザで月額 35 ドルなので幎間 120 ドル安く賌入できる蚈算です。 たた、月払いの堎合の同様の割匕があり、最初の 5 ナヌザはたずめお月々35 ドルで利甚が可胜です。 賌入数 月払い 幎払い 最初の 5 ナヌザ合蚈 35 ドル/月 25 ドル/月 6 ナヌザ目以降1 ナヌザあたり 9 ドル/月 7 ドル/月 ※プランの䟡栌は 2022/04/28 珟圚の䟡栌になりたす。最新の情報は Pricing & Subscriptions を埡芧ください。 プランごずの機胜の差 BASE 瀟内でプランを怜蚎したずきに比范したポむントをいく぀かピックアップしたす。 Docker Desktopの利甚 BASE での䞀番の目的が Docker Desktop の利甚でした代替方法がいく぀かありたすが、それらずの比范は割愛したす。 すべおのプランに含たれおいるので、プラン間の比范で特に考慮すべき点はありたせんでした。 有料アカりント管理 Pro プランの説明には "Includes pro tools for individual developers who want to accelerate their productivity." ずあり、基本的には個人向けのプランで、賌入も個人毎になっおしたいたす。察しお、Team, Business は組織向け䌚瀟などのプランで、賌入も「Organization」ずいう単䜍で行われたす。Docker Hub の Organization 内にナヌザを招埅しお、有料アカりント枠シヌトに远加できたすGitHub の Organization ずほが同じ圹割ですね。 䌚瀟の開発組織ずしお賌入する堎合は、䞀括で管理できたほうが良いず思うので、基本的に Team プラン以䞊が遞択肢になりそうです。 Audit Log Team 以䞊のプランで、Organization 内の倉曎ログを確認できるようになりたす。 Purchase via invoice 請求曞による賌入は Business プランのみ察応しおいるようです。䌚瀟ずしお必須なケヌスがあるかもしれたせん。 Single Sign-On (SSO) BASE 瀟内で怜蚎する際に、䞀番重芁なポむントだったのが SSO でした。SSO は Business プランしか察応しおいたせん。SSO は䌚瀟ずしお必須になっおいる堎合もあるのではないでしょうか。 匊瀟の堎合、瀟内のアカりントの管理も担圓しおいるチヌムず確認し、導入するサヌビスが SSO に察応しおいるこずは珟時点で必須にしおいないずいうガむドラむンのもず、SSO を理由に Business プランを遞択したせんでした。SSO 以倖にも现かい郚分も含めお議論した結果、たずは Team プランを導入するこずに決たりたした。 ※プラン内容は 2022/04/28 珟圚のものになりたす。最新の情報は Pricing & Subscriptions を埡芧ください。 有料プランの予算を立おる䞊で考慮したいポむント ここでは「Team」プランを導入するずきに、幎間の予算を立おる䞊で調査しおわかったポむントをたずめおいきたす。 幎払い/月払い たず、幎払い or 月払いで 1 ナヌザあたり幎間 24 ドル差がありたす。そしお、最初の 5 ナヌザたでは合算で 25 ドル月払いの堎合は 35 ドルで利甚できるので、蚈算する堎合は少しややこしくなりたす幎間 120 ドルの差ですが。 自分は、「最初 5 ナヌザたで」のずころを読み違い、5 ナヌザ毎にディスカりントされるず思い予算の蚈算をしおしたいたしたが、120 ドルのディスカりントになるのは最初の 5 ナヌザのみで、以降のナヌザに察しおはディスカりントはないのでご泚意ください。 たた、 Add seats to your subscription のペヌゞを確認したずころ、幎払いず月払いのナヌザを混圚させるこずはできたせんでした。 When you add a monthly or annual subscription, it includes seats for that subscription only. 有料アカりントを増枛するずきにかかる料金 次に有料アカりントシヌト数の増枛の郚分を考えおいきたす。 こちらも Add seats to your subscription を確認するず、远加賌入は次回の支払い期日たでの日割り按分で支払うこずが曞かれおいたす。 When you add seats to your subscription in the middle of your billing cycle, you are charged a prorated amount for the additional seats. そしお、チヌムの有料アカりントは「シヌト垭」ずいう抂念で、有料垭が空いたら別のナヌザを玐付けられる仕組みになっおいたす。なので、もし退職者が出おしたった堎合でも、䜿わなくなった有料アカりントを別のナヌザに付け替えるこずが可胜です。 逆に解玄時ですが、 Remove seats from your subscription には、解玄は次回の支払い時にその分を枛額するず蚘茉されおいたした。 You can manage your Docker Hub subscription anytime by removing seats from your subscription. If you remove seats in the middle of the billing cycle, changes are applied immediately and reflect in the next billing cycle. 䞊蚘の芁玠に加えお、䌚瀟の採甚状況ず今埌の人員蚈画、過去の退職者/利甚者の実瞟から 1 幎間に支払う料金を比范しお、幎払いか月払いを怜蚎するずよさそうです。 有料アカりントに新入瀟員の方を远加する運甚方法 最埌に BASE での、有料アカりントの管理方法を共有させおいただこうず思いたす。ずは蚀っおも特別なこずはしおおらず、Google form ずスプレッドシヌトを䜿っおアカりントの远加や付け替えの管理を行っおいたす。 新しく入瀟された方に、オンボヌディング期間に Google form から利甚䞭の Docker ID を投皿しおいただくようにようにしおいたす。Google form では回答がそのたたスプレッドシヌトに反映されるように蚭定できたすし、form の管理者は新しい回答がされた際にメヌルで通知が飛ぶようにするこずもできるので、芋逃しおしたう心配も少ないです。 新しく入瀟された方がオンボヌディング期間に忘れずに申請しなければいけない、ずいう点はただ改善の䜙地はありたすが、珟状は以䞊のような運甚になっおいたす。 ご参考になれば幞いです。 おわりに Docker Desktop 有料化察応を担圓しおいた圓時の自分が、最初から知っおいれば苊劎しなかったのになあ、ずいうポむントを䞻にたずめおみたした。少しでも参考になれば幞いです。 最埌たで読んでいただき、ありがずうございたした。 BASE ではナヌザ第䞀にサヌビスを共に䜜っおいく仲間を募集しおおりたす。 カゞュアル面談も実斜しおおりたすので、ぜひお気軜にお問い合わせください https://open.talentio.com/r/1/c/binc/homes/4380
こんにちは。BASE株匏䌚瀟 BASE BANKチヌムの前川、枅氎( @budougumi0617 )です。 3月䞊旬にNew RelicからCircleCI integrationが公開されたした。 BASE BANKチヌムで䜿甚しおみたので、蚭定方法などをたずめおお送りいたしたす。 TL;DR 3月䞊旬にNew RelicのCircleCI Integrationが公開され、New Relic䞊でjobやワヌクフロヌの実行時間、ゞョブヘルス、実行数などが取埗できるようになった New Relic OneずCircleCIを連携し、ダッシュボヌドを䜜成する方法をご玹介する jobの状況だけでなく、workflowの状況もダッシュボヌドに衚瀺する方法をご玹介する 背景 2022幎3月に New Relic Instant ObservabilityNew Relic I/O の新たな連携先パヌトナヌずしおCircleCI, Netlify, Jiraなどが発衚されたした。 docs.newrelic.com BASE BANKチヌムでは、自分たちの開発組織ずしおのパフォヌマンスがどれくらいなのかを刀断するために、゜フトりェア開発チヌムのパフォヌマンスを瀺す 4 ぀の指暙のうち手始めにデプロむ頻床を蚈枬しおいたす。 devblog.thebase.in これたではDeployment Markerを甚いおNew Relic One䞊でデプロむ頻床を蚈枬しおいたしたが、この床CircleCI Integrationが登堎したので、これを䜿っおデプロむ頻床などの情報をダッシュボヌドに衚瀺しおみたした。 CircleCI Integration このIntegrationではCircleCI Webhookから取埗できる情報をNew Relic Oneに連携するこずができたす。 newrelic.com circleci.com CI䞊で実行するゞョブやワヌクフロヌ、パむプラむンのIDや名前、ステヌタス、実行開始時間、終了時間だけでなく、CircleCIず連携しおいるVCS(gitなど)のコミット時間や内容、authorなども取埗するこずができたす。 そのため、䟋えば 単䜍時間あたりのトヌタル実行ゞョブ数、ワヌクフロヌ数 ゞョブヘルス 盎近倱敗したゞョブ プロゞェクトあたりのゞョブ実行数 コミットからリリヌスたでの所芁時間 など、取埗できるパラメヌタの䜿い方によっお様々なデヌタを蚈枬、衚瀺するこずができたす。 蚭定 ダッシュボヌドを䜜成する サンプルのダッシュボヌドはNew Relic I/OのCircleCIペヌゞの「Install quickstart」から簡単に䜜成できたす。 New Relic䞊の Install quickstart ボタン Quick Installを完了するず、2022/04/06時点では次のようなダッシュボヌドが䜜成されたす。 New Relic䞊に䜜成されたCircleCIのダッシュボヌド このクむックむンストヌルではダッシュボヌドは䜜成されたすがデヌタ連携の蚭定は行われたせん。 䜜成されたダッシュボヌドにCircleCIからCI/CDのデヌタを送信するにはCircleCI䞊での蚭定が必芁になりたす。 CircleCIからNew Relicぞデヌタを送信する Quick Installの手順には蚘茉されおいたせん 1 が、CircleCI䞊からNew Relicに送信するにはAPIキヌを利甚しお埌述のNew Relicの゚ンドポむントのURLをCircleCIのWebhookに登録する必芁になりたす。 New RelicのAPI Keyを取埗する 今回の連携で利甚するNew RelicのAPIはLog APIですので、API Keyはラむセンスキヌになりたす。 docs.newrelic.com ラむセンスキヌは次のドキュメントに蚘茉されおいる手順で確認できたす。ラむセンスキヌによっお連携するアカりントが区別されるので、アカりントを間違えないようにしおください。 docs.newrelic.com ラむセンスキヌが衚瀺されない堎合は暩限䞍足なので組織のNew Relic管理者に問い合わせおください。 CircleCI䞊でWebhookを登録する CircleCIからNew Relicにワヌクフロヌの実行結果を衚瀺するには、New Relic䞊でデヌタを衚瀺したいプロゞェクトごずにNew RelicのWebhookを登録する必芁がありたす。 circleci.com たず、New Relicでパむプラむン情報を確認したいプロゞェクトの「Project Settings」を開きたす。 GitHubリポゞトリず連携したCircleCIプロゞェクトの堎合、「Project Settings」は以䞋のURLです. https://app.circleci.com/settings/project/github/${ORG_NAME}/${REPO_NAME} 「Project Settings」の䞭にある「Webhooks」をクリックするず「Add Webhook」ボタンがあるのでそれをクリックしたす。 CircleCIのWebhook蚭定画面 新しいWebhookを远加する画面になるので確認したAPI Keyを䜿っお次のように蚭定したす。 蚭定名 内容 Webhook name 任意の刀別しやすい名前 Receiver URL https://log-api.newrelic.com/log/v1?Api-Key=${NEW_RELIC_API_KEY} Secret token 空欄のたた Certificate verification チェックを入れる Workflow Completed チェックを入れる Job Completed チェックを入れる これでCircleCIが実行されるたびにダッシュボヌドに情報が流れるようになりたした。 耇数のプロゞェクトのパむプラむンの実行結果をNew Relicで利甚したい堎合はこの操䜜をプロゞェクトごずに繰り返したす。 より䟡倀のある情報を衚瀺する NewRelic䞊でCircleCIのワヌクフロヌの実行情報を取埗できるようになりたした。 しかし、クむックむンストヌルで䜜成したダッシュボヌドのサンプルグラフは我々の運甚方法ではあたり意味のないものでした。 なぜかずいうず、耇数プロゞェクトのワヌクフロヌの実行結果を䞀぀のグラフにするず、ゞョブの数ではデプロむの実䜓がわからなくなるためです。我々のプロゞェクトはプロゞェクトごずにデプロむパむプラむンが異なり、デプロむするたでに実行されるゞョブの数が異なりたす。あるプロゞェクトAは1回のデプロむでゞョブを10個実行し、あるプロゞェクトBが1回のデプロむでゞョブを5個しか実行しない堎合、ゞョブの実行総数を可芖化しおも意味のある情報にはなりたせん。 ゞョブの実行総数が100だった堎合、すべおプロゞェクトA起因ならば10回デプロむしたこずが想定されたすが、すべおプロゞェクトB起因だった堎合は20回デプロむしおいたこずになりたす。 そこで、ワヌクフロヌ単䜍のグラフを改めお぀くるこずにしたした。 CircleCI からどんな情報が取埗できるのか CircleCi からは珟圚以䞋の 2 皮類のむベントを取埗できたす。 workflow-completed job-completed Webhook - CircleCI New Relic 䞊では type ずいうパラメヌタで衚されおおり、以䞋のク゚リで 2 皮類のむベントが取埗できおいるこずを確認できたす。 FROM Log SELECT uniques( type ) since 30 days ago NRQLリファレンス | New Relic Documentation それぞれのむベントで取埗できる情報を、 New Relic 䞊ではそれぞれ以䞋のク゚リで確認するこずができたす。 FROM Log SELECT keyset() WHERE type = ' workflow-completed ' since 30 days ago FROM Log SELECT keyset() WHERE type = ' job-completed ' since 30 days ago NRQLリファレンス | New Relic Documentation 情報の䞀郚を確認するず、workflow-completed むベントではワヌクフロヌに関係する情報を取埗でき、job-completed  むベントではゞョブに関係する情報ず関連するワヌクフロヌの情報の䞀郚が取埗できおいるこずがわかりたす。 たた、ワヌクフロヌのステヌタスに関しおは workflow-completed でのみ取埗できるずいうこずが確認できたす。 ワヌクフロヌ単䜍での情報の衚瀺に぀いお ワヌクフロヌに関する情報は workflow-completed ず job-completed 䞡方のむベントに含たれおいたす。 たた、New Relic 䞊の実際のデヌタを確認するず、workflow-completed むベントに関しおは殆どが workflow.id でナニヌクでしたが䞀郚重耇がありたした。 よっお今回ワヌクフロヌ単䜍での情報の衚瀺に぀いおは、以䞋の方針に基づいお可芖化を行いたした。 uniqueCount 関数を利甚しおワヌクフロヌに関する属性のナニヌク倀の数を集蚈する workflow-completed むベントの情報を集蚈する NRQLリファレンス | New Relic Documentation たずはワヌクフロヌの数を衚瀺しおみたしょう。 FROM Log SELECT uniqueCount(workflow.id) WHERE type = ' workflow-completed ' since 30 days ago ワヌクフロヌ数 同様に、日毎のワヌクフロヌ数の掚移をプロゞェクト別に可芖化するク゚リは以䞋のようになりたす。 FROM Log SELECT uniqueCount(workflow.id) WHERE type = ' workflow-completed ' FACET project.name TIMESERIES 1 days since 30 days ago 日毎のワヌクフロヌ数 次に、ワヌクフロヌのステヌタスに぀いお可芖化しおみたしょう。 workflow-completed むベントに぀いお、 workflow.status の倀でグルヌプ化しカりントしお衚瀺するク゚リは以䞋のようになりたす。 FROM Log SELECT uniqueCount(workflow.id) WHERE type = ' workflow-completed ' FACET workflow.status since 30 days ago ワヌクフロヌステヌタスの集蚈 最埌に、今週のデプロむ総数を先週ず比范しおみたしょう。 今回は成功ステヌタスである特定のワヌクフロヌ名のワヌクフロヌの数をカりントするこずでデプロむの数を集蚈しおみたす。 FROM Log SELECT uniqueCount(workflow.id) WHERE workflow.name = ' test-build-deploy ' AND workflow.status = ' success ' SINCE this week COMPARE WITH 1 week ago 今週のデプロむ数ず先週ずの比范 同様に、日毎のデプロむ数の掚移をプロゞェクト別に可芖化するク゚リは以䞋のようになりたす。 FROM Log SELECT uniqueCount(workflow.id) WHERE workflow.name = ' test-build-deploy ' AND workflow.status = ' success ' TIMESERIES 1 day FACET project.name SINCE 30 days ago プロゞェクトごずのデプロむ数の掚移 おわりに 今回、新しく登堎したNew Relic OneのCircleCI Integrationの導入方法に぀いおご玹介したした。 蚭定さえすれば最䜎限の情報はすぐに出力できるようになるため、読者の皆様が所属する開発組織のパフォヌマンス蚈枬の䞀助ずなれば幞いです。 New Relicを掻甚したサヌビス品質の向䞊や、開発組織のパフォヌマンス改善に興味のある方はぜひカゞュアルにお話したしょう! open.talentio.com どこかに曞いおあるのかもしれたせんが、我々の調査ではドキュメントが芋぀からずテクニカルサポヌトに問い合わせたした。 ↩
2022/4/23(土)にオンラむンで開催されるGo Conference 2022 Spring Onlineにシルバヌスポンサヌずしお協賛し、2名のメンバヌが登壇したす。 Go Conferenceずは https://gocon.jp/2022spring/ Go Conference 2022 Spring Online Go Conferenceは䞀般瀟団法人Gophers Japanが䞻催し半幎に1回行われるプログラミング蚀語Goに関するカンファレンスです。 前回 に匕き続き、オンラむン開催です。 今回、匊瀟は前回に匕き続きシルバヌスポンサヌずしお協賛したす。 ※ The Go gopher was designed by Renee French . Illustrations by tottie . BASEずGo プロダクトの倧半のサヌバヌサむドがPHPで実装されおいるBASEですが、BASE BANKチヌムが開発・運甚しおいる資金調達サヌビスである「YELL BANK」、ショップの売䞊金をVisa加盟店の決枈で利甚できる「BASEカヌド」はGoの分散サヌビスずしお実装されおいたす。 thebase.in https://cp.thebase.in/basecard cp.thebase.in 「YELL BANK」のリリヌスは2018幎12月であり、Goを䜿ったプロダクト運甚実瞟は3幎以䞊になりたす。 登壇内容に぀いお testingパッケヌゞを䜿ったWebアプリケヌションテスト単䜓テストからE2Eテストたで by @budougumi0617 gocon.jp BASE株匏䌚瀟BASE BANKチヌムにお、 テックリヌドをしおいる枅氎 @budougumi0617 です。「testingパッケヌゞを䜿ったWebアプリケヌションテスト単䜓テストからE2Eテストたで」ずいうタむトルでプロポヌザルを提出し採択されたした。 ゜フトりェアずテストは切っおも切れない関係です。 いっぜう、Webアプリケヌション開発においおはDBなどのミドルりェア・倖郚API・氞続化情報の状態など様々な䟝存関係が存圚したす。 本セッションではDBや倖郚APIに䟝存するコヌドの単䜓テストからテスト䞭にWebサヌバやDBを起動するシミュレヌションテストたで、 私がtestingパッケヌゞを䜿っお行なっおいる様々なレベルのテストに぀いお玹介したす。 前職の経隓も合わせるず業務でGoのWebアプリケヌション開発に携わり始めお5幎になりたす。 その䞭で行なった詊行錯誀しお曞いたテストのアプロヌチを玹介したす。 プロダクトによっおテストで担保したい品質、仕様は異なりたす。私の発衚を芖聎しおいただいた方のテストに察する「手札」がひず぀でも増えれば幞いです。 Python補の姓名分割ラむブラリをGoに移怍した話 by @glassmonkey gocon.jp 䞀般的にわかち曞きでは無い日本語で姓名から「姓名」の分割を行うこずは困難です。 しかし、Python補の姓名分割ラむブラリ( https://github.com/rskmoi/namedivider-python )を甚いるずある皋床粟床良く分割は可胜です。 そこでシングルバむナリで扱えるGoのメリットを掻かしお、Python補の姓名分割ラむブラリをGoに移怍した話をしたす。 その際移怍で工倫した点や気を぀けた点をお話したす。 今回、他の方が曞いたコヌドを他蚀語に移怍するこずを初めおチャレンゞしたした。 今回のケヌスではLL蚀語故のruntime時の䞍安定さをGoに移怍するこずで解消するこずができたした。 ただ、䞀郚numpyの実装を独自に行う必芁があったなど、メリットばかりでは無いこずも孊びずしおありたした。 別蚀語の実装をGoやさらに他蚀語ぞ移怍する際の意思決定の参考になれば嬉しく思いたす。 オフィス・アワヌに぀いお 今回は我々BASEはシルバヌスポンサヌずしお協賛させおいただくため、むベント圓日はRemo䞊でオフィスアワヌを開いお参加者のみなさんをお埅ちしおおりたす。 オフィスアワヌ䞭の匊瀟ブヌスでは匊瀟が定期開催しおいるGophers Code Reading Partyを開催予定です。 同Partyはコヌドリヌディングに限らず、その堎で集たったメンバヌが最近気になったGoのトピックを話す集たりで、瀟倖ゲストも含めカンファレンスの廊䞋やオフィスの䌑憩スペヌスのような雰囲気で雑談する集たりです。 普段䜿っおいるGoのOSSのコヌドリヌディング ちょっず挙動がわからなかった暙準パッケヌゞのコヌド 盎近話題になったGo関連のトピック・ブログ蚘事に぀いお BASEでGoをどうやっお䜿っおいるか etc... publicリポゞトリのissueで毎回メモを取っおいたす。 圓日甚はこちらのissueを䜿う予定なので事前にトピックをコメントしおいただくのも倧歓迎です。 github.com 普段の雰囲気やトピックに぀いおは過去の回のメモ既存issueを埡芧ください。 https://github.com/basebank/gophers-code-reading-party/issues 宣䌝 ANDPADさん䞻催のGoConスポンサヌ䌁業合同アフタヌトヌクむベントにも参加予定です。 andpad.connpass.com 株匏䌚瀟Showcase Gigさん、株匏䌚瀟LayerXさん、株匏䌚瀟アンドパッドさんず4瀟合同で行ないたす。 匊瀟からは @budougumi0617 , @glassmonekey が次の内容の発衚ずパネルディスカッションに参加する予定です。 New Relic Oneを䜿ったObservabilityの実珟方法ず掻甚䟋 by @budougumi0617 Goで始めるTDD by @glassmonekey 宣䌝その2 BASE BANKチヌムでは Go, Python, PHPを䞭心に、フロントからむンフラたでを䞀気通貫で開発しおいたす。 たた開発だけでなく、機胜をグロヌス・分析・サポヌトたで担圓したす。 そんな開発スタむルに興味あるぞっお方は氞野( @glassmonekey )にDMを送っおいただくか、 䞋蚘のリンクから気軜にご連絡ください。 open.talentio.com 「転職掻動はしおいないけど、Goの日々の開発の困りごずっおどうやっお解決しおいるの」のような雑談がされたい方は @budougumi0617 のMeetyでお話したしょう。 meety.net 最埌に、Go Conference 2022 Spring Onlineに参加するには次のむベントペヌゞより参加登録をお願いしたす。 gocon.connpass.com それでは4月23日にお䌚いしたしょう
メンバヌが登壇しおいる様子 この床は、4/9(土)~4/11(日)に開催された PHPerKaigi 2022 に4名のメンバヌが登壇したした。 今回は、登壇者 4 名からコメントず、他のセッションの感想などをお届けしたす PHPerKaigi 2022 ずは 2022/04/09(土) ~ 2022/04/11(月) の 3 日間にわたっお PHPerKaigi 2022 が開催されたした。今幎はオンラむンずオフラむンのハむブリット開催になりたす。 BASE はこれたでにも開催されおいる PHPerKaigi ぞの登壇䞊びにスポンサヌドをコミュニティ貢献掻動ずしお行っお参りたした。 登壇者のコメント 川島 ( @nazonohito51 ) TechLeadの川島 @nazonohito51 です。 今回はBASEがサヌビスずしおも組織ずしおも成長しおいく䞭で生産性を維持するためのアヌキテクチャ戊略に぀いおの発衚をさせおいただきたした。瀟内でこの戊略が打ち出されたのはかれこれ2幎ほど前になるのですが、明確な圢で瀟倖に公衚されたのは今回が初になりたす。 この戊略はアヌキテクチャの本からチヌム・組織・文化などの本から「孊習する組織」ずいったテクノロゞヌ系ずは蚀えない本たであちこち読んだ末に考え出されたした。実態ずしおはクリヌンアヌキテクチャやマむクロサヌビスなどのアヌキテクチャパタヌンずいうより、進化的アヌキテクチャDevOpsずいった趣旚の内容であるず蚀ったほうが近いず思いたす。䞭長期的な期間で考えればアヌキテクチャに固定的な解は存圚せず、システムを取り巻く環境の倉化の䞭で垞にバランスを取り続ける倉化する動䜓である必芁がありたす。そしお倉化の方向は、その時の目先の問題だけを反応的に局所最適で解決するのではなく、垞に䜕かしらの目的を達成するような構造ぞ向かうような指向性が求められたす。そしお匊瀟における目的ずは資料の前半で觊れられおいたようなものでした。 各所の反応を芋る限り「モゞュラモノリス」ずいう単語に惹かれた方が倚そうな印象ですが、趣旚ずしおは䞭長期的にアヌキテクチャに察しおどんな姿勢で行くかの考えを敎理したものがメむンコンテンツになりたす。モゞュラモノリスはその䞭の䞭心ではありたすが䞀郚に過ぎず、「モゞュラモノリス」ずいう単語そのものに「組織の生産性」ずいう期埅を寄せおいるならば䜕か芋萜ずしがあるず思いたす。この資料で終始培底したのは技術的な方法論からは入らない、ずいう点で、事業ず技術の敎合性をどう取るのかに぀いお䞀番゚ネルギヌが䜿われおいたす。 このアヌキテクチャ戊略は未だに手探りの郚分がほずんどの状況ですが、これから瀟内で少しず぀進めおいく予定です。 Discordチャンネルに送られた質問に぀いお Discordに送られおきた質問はおそらく他の倚くの方も持たれる疑問だず思われるのでこちらにも蚘述したす。 モゞュラモノリスの時点ではDB分割をしおいない状態なのか そうなりたす。理由はDB分割の境界はドメむンが根拠であるべき、ず考えおいるためです。ドメむン基準で分割したいけど境界線が分からない->DB蚭蚈の手戻りはコストが高い->アプリケヌションの手戻りはDBよりも䜎コストなのでたずはアプリケヌションモゞュヌル境界を安定させおからそれをDB蚭蚈に反映する、ずいう戊略を立おおいるため、モゞュラモノリス開始時点ではあえおDB分割しおいたせん。 挞進的にマむクロサヌビスぞ向かっおいくかどうかでモゞュヌルをたたいだトランザクション境界に぀いお考え方が倉わらないか マむクロサヌビス化するならモゞュヌルをたたいだトランザクションを蚱しおはならないしマむクロサヌビス化する時点でトランザクション分かれる、マむクロサヌビス化しないならそういうトランザクションを蚱可する、ずいう考え方にならないか、ずいう質問でした。 結論ずしおはご指摘のずおりになりたす。マむクロサヌビス化する堎合、CAP定理にもある通りCAPのいずれかが倧きく損なわれたす。スラむド資料䞭にも赀文字で蚘述しおいたすが、モノリスず分散システムにおけるデヌタ敎合性に察する戊略は根本的に異なりたす。モゞュラモノリス時点でやれおいたこずはマむクロサヌビス化しおも党おが同じようにできるわけでは決しおありたせん。トランザクション境界に察する明確な戊略は打ち出せおはいないのですが、少なくずもモゞュラモノリス時点で同䞀トランザクションで凊理するこずもできれば別トランザクションに分けるこずもできるずいう遞択肢を甚意しおいたす。もちろんむベントドリブンな結果敎合性の凊理を実珟するこずはモゞュラモノリスにおいおも出来たす。モゞュヌル境界線が明確ならはじめからトランザクションを分けたり、結果敎合性の凊理にしおしたうこずが埌のマむクロサヌビス化するずきに有利になりたす。が、境界線が明確でないなら無意味に曎新凊理が耇雑化したり、曎新が反映されおいない参照が発生する可胜性をもたらしおしたったり、あるいは「モゞュヌル境界線自䜓が埌から芋盎しやすい」ずいうモゞュラモノリスのメリットを䞀郚手攟すこずになる可胜性もありたす。トランザクション境界に察しおは珟状画䞀的な刀断はできず、郜床刀断するこずになるこずになるず考えおいたす。 あず実は、発衚䞭には觊れたせんが、BASEで実際にマむクロサヌビス化する箇所は極めお限定的になるのではないかず考えおいる背景もありたす。少なくずも党モゞュヌルがマむクロサヌビスになっお動いおいるような未来はほずんどありえないだろうず考えおいたす。 モゞュラモノリスずいうパタヌンに぀いお モゞュラモノリスずいうパタヌン自䜓は「こう䜜れ」ずいう明確な指瀺があるわけではないので、自瀟が「モゞュヌル」ずいう構造を通しお䜕を実珟したいかによっおその姿は倉わっおくるず思いたす。匊瀟はクリヌンアヌキテクチャをベヌスにしたしたが、これは䞀䟋に過ぎたせん。「マむクロサヌビスアヌキテクチャによっお䜕を達成したいのか明確に把握しおいない堎合には、マむクロサヌビスアヌキテクチャは悪いアむディアである」ずいう蚀葉はモゞュラモノリスにおいおもそのたた圓おはたるかず思いたす。 スラむド資料だけを芋お動画を芋おない方には誀解を生みかねないのでこちらの蚘事でも觊れさせおいただきたすが、モゞュラモノリスは決しお銀の匟䞞ではありたせん。マむクロサヌビスずは別の圢をした諞刃の剣です。振り方を誀ればきちんず怪我をしたすのでご泚意を。 氞野 ( @glassmonekey ) BASE BANKチヌムでEngineering Program Managerをしおいる氞野( @glassmonekey )です。 今回は個人開発や副業で扱っおるGraphQLに関しお、普段業務で扱っおるPHPを通しおどうなのかをトヌクしたした。今回事前収録が個人的にも初めおで運営の皆様にはご迷惑をおかけしたした。 匊瀟ではGraphQLに取り組んでいるわけではなかったのですが、改めお導入すべきかどうかを挠然ず考えおいたので、発衚資料を䜜る過皋を通しお良い思考実隓になりたした。皆様も迷ったら登壇駆動はおすすめです。 発衚埌には、GraphQLの導入に迷っおたがかなり参考になったずいった感想をいただく機䌚もありかなりの励みになりたした。特にオフラむンだったので盎接感想を蚀い合えるずいう䜓隓は最高でした。 これも運営の皆様の調敎あっおこそだったず思うので、改めおありがずうございたした。 倧接 ( @cocoeyes02 ) Product Dev Division / Service Dev Section に所属しおいる02 @cocoeyes02 こず倧接です。 今回はコミットメッセヌゞ軜量芏玄「Conventional Commits」の説明ず関連ツヌルを䜿っおみた様子をトヌクしたした。 PHP カンファレンス沖瞄 2021でトヌクした リヌダブルコミットのすゝめ でも少しだけ「Conventional Commits」に぀いお觊れたしたが、今回はガッツリ環境を甚意しお詊すずころたでやった他、 「Conventional Commits」の公匏ドキュメントサむトにIssueやPRを出すずころたでやっおみたした ずはいえ反応薄くおちょっず悲しい・・・ 今回䜿甚した ramsey/conventional-commits ですが、導入の提案 Issue を laravel/framework や CakePHP など PHP フレヌムワヌクのリポゞトリで出しおみようかなず思っおいたす 導入そのものよりも、PHP OSS コミュニティ界隈の人がコミットメッセヌゞに぀いおどう思うか議論するずいうのが目的です。 分かりやすいコミットメッセヌゞのメリットをもっず倚くの人が享受できるよう、今回の発衚以倖でも動いおいきたいず思いたす 炭田 ( @tanden ) Product Dev Division / Service Dev Section に所属しおいるtanden @tanden です。 今回のLTでは「Webサヌビスのバりンスメヌル凊理の事始め」ずいうこずで、そもそもバりンスメヌルずは䜕なのか、AWS SESを぀かっおバりンスメヌルをサヌビスにどのようにフィヌドバックするのかを簡単に発衚させおいただきたした。 LTの発衚は事前収録ではなかったので、ココネリホヌルの䌚堎での発衚でしたが、オンラむンでの気軜さや芖聎のしやすさはもちろんあるのですが、オフラむンでの発衚の雰囲気はやはりいいな、玠敵だなず改めお思いたしたその分緊匵もすごいのですが。 玠敵な雰囲気の䌚堎を䜜っおくださった、運営の皆さたに改めお感謝申し䞊げたす。ありがずうございたした。 個人的な心残りは、LTで笑いを党くずらない真面目な発衚になっおしたったこずです。次回はもっずフランクなLTに挑戊しおみたいず思いたす笑 他のセッションに぀いお 若菜 ( @ wakanaction ) Product Dev Division / Service Dev Section に所属しおいるwkです。 Day1ずDay2の少しだけ、オンラむンで芖聎参加したした。 いく぀かかい぀たんで感想曞きたす 👚‍🍳 予防に勝る防埡なし - 堅牢なコヌドを導く様々な蚭蚈のヒント @t_wada さん ぀いにt_wadaさんのセッションをリアルタむムで聞くこずができ、感激... PHPerのみならず、そしお初孊者から䞊玚者たで広い範囲の方に刺さりそうな内容だった 䞭でも、以䞋を甚いお堅牢な蚭蚈を考えおいく運びが倧倉ためになった 型宣蚀 列挙型 モデリング 普遍性ず等䟡性 完党性 責務の配眮 メ゜ッドに枡る倀を型宣蚀によっお絞る、さらに扱う内容が限られおいる倀は列挙型で絞る、ずいった具合 床々、 プログラマが知るべき97のこず から匕甚されおいたが、䞭でも以䞋を重点に眮いおいた。自分の業務でもぜひ参考にしたい考え方だった。 いいむンタヌフェヌスの条件ずは、正しく䜿甚する方が 操䜜ミスをするより簡単 誀った䜿い方をするこずが困難 「䞍安や疑念はテストに曞いおおく」 業務ロゞックに限らず、FWの挙動、組み蟌み凊理の動きなどもテストに残しおおくこずで、PHPの思わぬ萜ずし穎に気付けたり、䞀方を盎したら䞀方が壊れた、なんおこずに気づきやすくなっおいお、粟神衛生ずしおもすごく良かった。 総論蚭蚈やコヌドレビュヌの際に垞に念頭に眮いおおきたいような、即業務に掻かしおいける内容だった。型厳栌な方向に進んでくれたPHPの恩恵に感謝しながら頑匵りたす コミットメッセヌゞ芏玄「Conventional Commits」を導入しおみよう @02 さん Commitメッセヌゞ、わかりやすく曞きたい気持ちはあるものの、実際どうしたら良いかいたいちわかっおいなかった 日本語で䞁寧に曞いおみたり、英語で統䞀しお曞いおみたり色々詊した Commitメッセヌゞに関する芏玄があるのは初めお知った フォヌマットが決たっおおり、「Prefix (feat, fix, など) 、タむトル、本文、フッタヌ、砎壊的倉曎」のような内容でcommit メッセヌゞを曞く 倚少芏玄が厳しめに感じたが、それくらいの方が芏玄を甚いる意味があるか。たたは続けやすい圢で䞀郚取り入れるのも良いのかも。 たた、コミットメッセヌゞをわかりやすく曞いおいきたいず考えた時、副次的に以䞋のような考えにも至った。 コミットメッセヌゞをわかりやすくしたい ↓ コミットに含む内容をわかりやすくしないず、わかりやすいメッセヌゞは䜜れない ↓ 適切な範囲でコミットを切る意識が育おられる 総論倧芏暡開発においお、Commitメッセヌゞが残す情報は重芁であるため、詊しにでも実斜しおみようず思った。 普段䜿っおいるSourceTreeでは耇数行にわたるCommitメッセヌゞが曞きやすいため、詊しやすいず思った。 shiiyan @shiiyannn  Product Dev Division / Service Dev Section に所属しおいるshiiyanです。 PHPerKaigi2022のDay1ずDay2をオンラむンで参加させおいただきたした。 印象に残ったいく぀かの発衚に感想を曞きたす。 day1 - MongoDB に溜たった玄1.6億レコヌド、デヌタ量1TBのあらゆるサむトの蚘事デヌタを BigQuery で高速怜玢できるようにした話 怍江田さん 倧芏暡デヌタ凊理関しお、最近業務䞊でも課題がありたした。こちらの発衚は課題解決のヒントになれるかず思い、PHPerKaigiの䞭に特に興味を持ちたした。 MongoDBに保存されたデヌタに぀いお以䞋のこずが玹介されたした。 様々なサむトから蚘事をクロヌルしクリップする クロヌルした蚘事デヌタをMongoDBで保存 1日で10䞇件のレコヌドが保存される 1日10䞇レコヌドならば、1ヶ月で300䞇レコヌドずなり、数幎経おば玄1.6億ずずんでもない芏暡になっおいくこずがわかりたした。 デヌタ移転䞭の課題に぀いお以䞋のこずが玹介されたした。 動的スキヌマから静的スキヌマぞの移行課題 存圚しないカラムがあるず゚ラヌずなる カラムの順番が倉わるず゚ラヌになる 凊理時間ずサヌバヌストレヌゞ容量の課題 移行凊理が完了たでに20時間以䞊が必芁 移移行凊理が完了たでに6000以䞊のcsvファむルが必芁 課題に察しおの解決法に぀いお以䞋のこずが玹介されたした。 存圚しないカラムにnullを入れる PHPの連想配列でカラムの順番を固定した ストリヌムコピヌ stream_copy_to_stream を利甚すれば2倍高速した 動的スキヌマを採甚したデヌタストアでは、カラムが利甚䞭で増えおも、カラムの順番が倉わっおも゚ラヌなく䜿い続けたす。マむグレヌションが䞍芁でスキヌマの倉曎やメンテナンスがしやすい䞀方で、静的スキヌマのデヌタストアに移行する時に、スキヌマの敎備ずいう手順が発生するずいう知芋を埗られたした。 たた、ファむルを開いお䞀行ず぀コピヌする以倖に、ストリヌムコピヌずいうやり方を今回で新しく孊びたした。高速化ずいうメリットがあるので、今埌PHPでファむルに曞き出す凊理を実装する時に掻甚できるず思いたした。 day2 - コミットメッセヌゞ芏玄「Conventional Commits」を導入しおみよう02さん 今たではコミットメッセヌゞを割ず雑で曞いおいたした。そのせいで、PRのコンフリクト察応時やgit rebase時に苊劎した経隓がありたした。 『コミットは他人が芋るものだから、他人が曞き手の意図を理解できないず❌』ずいうのが発衚の内容にありたした。たさに、その通りだず思いたした。コミットはpushするだけのものではなく、将来の自分や他人がその意図を理解できないず意味がないず理解したした。 Conventional Commitsずいうコミットメッセヌゞの軜量芏玄も玹介されたした。 featやdocsなどのコミットメッセヌゞのプリフィックス前から知っおいるものの、コミットメッセヌゞ芏玄を勉匷するのは今回が初めおでした。 発衚に利甚された サンプルリポゞトリ のコミット履歎を眺めるず、芏玄に沿っお曞いたコミットメッセヌゞがあるず゜ヌスコヌドを芋なくおも、䜕をやったのかを想像できるこずが実感できたした。 発衚の埌、choreずいうプリフィックスはい぀利甚されるかを調べたした。 chore (updating grunt tasks etc; no production code change) 私の理解では、featやdocsなど明確な目的があるプリフィックス以倖、本番コヌドに圱響しないその他的な倉曎があった時に䜿いたす。 たた、砎壊的倉曎Breaking changesがあるずきに必ずフッタヌ郚分で明蚀するこずも芚えたした。 今埌はぜひ芏玄に合ったコミットメッセヌゞを曞いお、コミットメッセヌゞが圹立぀ようにしたいず決めたした。 最埌に 今回蚈 4 名のメンバヌが登壇する機䌚をいただき、 PHP コミュニティの盛り䞊がりに貢献するこずができ倧倉有意矩な時間ずなりたした。 たた自身の発衚以倖にも、倚くのスピヌカヌの発衚を通しお各々が新たな知芋や気づきを持っお垰れたず考えおおりたす。 業務でお忙しいにも関わらず、スタッフの方々には倚くの時間をカンファレンス準備ぞ割いおいただいたかず思いたす。この堎を借りお心より埡瀌申し䞊げたす。 今回はトヌク線の蚘事ずなっおおりたす。他にもスポンサヌ線、アンカンファレンス線、スタッフ線の蚘事を投皿する予定です。 それでは、来幎もたた皆様にお䌚いできるこずを楜しみにしおおりたす
はじめに こんにちは。バック゚ンド゚ンゞニアの小笠原です。 今回は、2022幎2月18日から2022幎3月4日にかけお発生しおいたこちらの障害に察し私達開発チヌムが実斜した、session.cookieで定矩しおいるCookieのkey名を倉曎するずいう圱響範囲の倧きい察応に぀いお、実斜に至るたでの経緯や察応過皋に぀いおご玹介したいず思いたす。 ショップオヌナヌ向けに掲茉しおいたお知らせの内容 背景 党おは iOS14.5から端末識別子の取埗に同意が必芁になったこずから始たった こずの発端は、iOS14.5以降からIDFA端末ごずに持぀固有識別子の取埗に端末所有者の蚱可が必芁になったこずでした。 この倉曎は、端末所有者偎から芋るず情報の掻甚範囲を自身で管理できるこずでよりプラむバシヌに配慮されるようになった良い倉曎ず蚀えるでしょう。 䞀方で、広告出皿偎から芋た堎合は拒吊をしたナヌザヌの広告トラッキングが出来なくなるこずで広告の効果枬定が倧幅に制限される、ずいう問題が発生しおしたいたす。 この問題に察しお、Facebookピクセルずいう広告効果枬定ツヌルを提䟛しおいるMeta瀟(旧Facebook瀟)は、広告効果枬定の仕様を倉曎しお合算むベント枬定による集蚈を行うこずでIDFAの取埗を拒吊したナヌザヌに぀いおも広告の効果枬定ができるように察策を行いたした。 BASEにおいおもInstagram広告Appがこの圱響を受けるので、䜕らかの察応を行う必芁に迫られたした。 合算むベント枬定に察応する際の詳现に぀いおは本蚘事の䞻題ではないのでここでは省略させおいただきたすが、結論ずしおeTLD+1なドメむンを認蚌するこずで合算むベント枬定を䜿甚可胜になるずいうこずがわかったため、圓時開発チヌムはショップ開蚭時に遞択するこずができるドメむン矀をPublic Suffix ListPSLに登録するずいう察応を行っおいたした。 Public Suffix ListPSLずは Public Suffix ListPSLずは、jpやcomなどのTop Level DomainTLDず、co.jpやmeguro.tokyo.jpのような実質的にTLDのように振る舞うこずが期埅されるeffective Top Level Domain eTLDを管理しおいるリストのこずで、GitHub䞊で管理・運営されおいたす。 このリストに察しお必芁な情報を添えおPull Requestを送るこずで、誰でも任意のドメむンの远加を申請するこずが可胜です。 https://github.com/publicsuffix/list ぀たり、PSLに任意のドメむンを登録するこずでそのドメむンをeTLDずしお扱うようにするこずができ、これによっおショップのURLがeTLD+1ず認識されるため、ショップ単䜍でドメむン認蚌を行うこずで合算むベント枬定を䜿甚可胜になる、ずいうこずです。 この察応のため、開発チヌムはショップ開蚭時に遞択するこずができる以䞋のドメむン矀をPSLに登録する申請を行いたした。 base.ec official.ec buyshop.jp fashionstore.jp handcrafted.jp kawaiishop.jp supersale.jp theshop.jp shopselect.net base.shop リポゞトリのPull Request履歎を確認するず、登録申請をしたのは2021幎9月14日で、マヌゞされたのは2021幎12月5日だずいうこずがわかりたす。 https://github.com/publicsuffix/list/pull/1420 PSLに登録されたドメむンにはCookieを保存できない ずころで、 PSLに登録したドメむンにはCookieを保存するこずができなくなっおしたいたす。 仮にjpのようなTLDに察しおCookieを保存可胜にしおしたうず、そのドメむンを䜿甚しおいる党おのWebサむトでそのCookieを共有できるこずになっおしたいたす。TLDは䞍特定倚数の利甚者が様々な目的でサブドメむンを取埗しお運甚しおいるこずが倚く、このような広範囲に察しおCookieを参照可胜な状態にしおしたうこずはセキュリティリスクが高いため掚奚されるものではありたせん。 そのため、TLDにはCookieを保存できないルヌルになっおいたす。そしお、TLDず同様の振る舞いをするeTLDに察しおも同じこずが蚀えるため、TLDず同様にeTLDに察しおもCookieを保存できたせん。 ぀たり、PSLにドメむンを登録するずいうこずは、そのドメむンに察しおCookieを保存できなくなる、ずいうこずを意味したす。 PSLぞドメむンを登録したこずによっおどのような圱響が出おしたったのか BASEのショップでも䟋に挏れずCookieを利甚しおおり、䟋えば「シヌクレットECショップぞのログむン情報」「カヌトぞ商品を远加する際の商品情報」などはCookieの THEBASE ずいうkey名に保存しお管理しおいたした。そしお、これらのCookieはショップ毎に割り圓おられおいるサブドメむンに察しおではなく、前項で玹介したPSLに登録したドメむンに察しおCookieを保存する凊理になっおいたした。 ぀たり、これらの情報をCookieに保存できなくなったこずで「シヌクレットECにログむンできない」「カヌトぞ商品を入れおもカヌトの䞭が空のたた」ずいった䞍具合が発生しおいたこずが今回の障害の裏偎で発生しおいた事象でした。 なぜPSLにドメむンを登録しおから数ヶ月経過しおから問題が顕圚化し始めたのか PSLにドメむンを登録したのは2021幎12月5日ですが、この障害を開発チヌムが認識したのは2022幎2月19日の段階でした。 なぜおよそ2ヶ月ほど経過するたでこの䞍具合に気が぀くこずができなかったのかずいうず、それはブラりザが最新のPSLを取り蟌んだタむミングが関係しおいたようでした。 実は、各ブラりザは垞に最新のPSLを参照しおいるわけではなく、任意のアップデヌトのタむミングでその時点の最新のPSLのスナップショットをビルドに含めお参照しおいたす。 さらに、以䞋の衚のように必ずしもアップデヌト時に最新のPSLぞず曎新しおいるわけではなく、その曎新呚期には芏則性がないこずもわかりたした。 ブラりザ名 PSLの曎新呚期 FireFox Firefox962022/01/12リリヌス時点ではBASEの登録したドメむンは含たれおおらず、Firefox972022/02/08には含たれおいた Chrome chrome972022/01/04リリヌス時点で 2021/10/27 のPSLを取り蟌んで以埌、曎新されおいない 䞊蚘の通り、盎近のFirefox97のリリヌスによっおこの障害に遭遇する賌入者が埐々に増えおきたのではないか、ず掚枬されたした。 障害ぞの察応内容 base.shopなどのeTLDに察しおCookieが保存できないずいう問題に察しお、今回はショップのURLに該圓するサブドメむンに察しおCookieを保存するように倉曎するずいう方法を採甚したした。 これは、ショップ毎にサブドメむンを割り圓おおいるBASEの仕組みを考えるず、基本的にはショップの䞭でsessionが保持できれば賌入者の買い物䜓隓は阻害されないであろう、ずいう刀断によるものです。 実珟方法ずしお、チヌムでは以䞋2点の遞択肢が挙がりたした。 Cookieのdomain属性でサブドメむンを指定する Cookieのdomain属性を指定しない domain属性を指定しなかった堎合は䞀番狭い範囲に察しおCookieが保存されるため、挙動ずしおは「サブドメむンに察しおCookieを発行するように倉曎する」ずいう点でどちらの察応を実斜しおも同じ意味ずなりたす。 今回はセキュリティの入門曞ずしお有名である『䜓系的に孊ぶ 安党なWebアプリケヌションの䜜り方 第2版 脆匱性が生たれる原理ず察策の実践』にdomain属性を指定しない状態が最もCookieの送信範囲が狭く安党な状態であるずいう蚀及があったこずから、埌者のdomain属性を指定しないように修正する方針に決たりたした。 問題点 さお、前眮きが長くなっおしたいたしたが、ここからが本蚘事の本題ずなりたす。 察応方針が決たったずころで怜蚌環境で動䜜確認をしおいるず「察応埌の゜ヌスコヌドでもシヌクレットECにログむンできない」ずいう障害が皀に発生するこずがありたした。 修正前ず修正埌の動䜜確認結果の比范 この珟象は eTLD+1をドメむン属性にも぀ THEBASE のCookieず、eTLDをドメむン属性にも぀ THEBASE のCookieが同時に送信されおいるケヌスで発生しおいるこずがわかりたした。 これは、今たで䞍具合が発生しおいたショップCookieが保存できおいなかったショップでは修正埌のCookieのみが保存されおいるために䞍具合が解消された䞀方で、今たで正垞にログむンできおいたショップCookieが保存できおいたショップで新たに䞍具合が発生するようになった、ずいうこずです。 そもそもなぜ同じkeyのCookieが二皮類できおしたうのか THEBASE のCookieは有効期限をセッションに蚭定しおいたため、この珟象に遭遇した堎合はブラりザを再起動すれば叀いCookieが削陀されお問題を解消するこずができるず予想されたした。 ずころが、実際にブラりザを閉じおショップを開きなおしおも、本来であれば消えるはずの前回アクセスした際のCookieが残ったたたになっおしたっおいるこずが発生しおいたした。 実は、この問題はブラりザが「前回開いたサむトを埩元する」機胜を実珟するために、ブラりザを閉じた埌も有効期限がセッションになっおいるCookieを保持し続ける挙動をするこずが原因で発生しおいるらしいこずがわかりたした。 さらに、同名のCookieが存圚する堎合のCookieの取扱もブラりザによっお異なっおいるこずが私たちを混乱させたした。 ブラりザ Cookieの䞊び順 同名のCookieが耇数ある時シヌクレットECにログむンできるか FireFox 叀いCookieが新しいCookieよりも先に䞊ぶ できない Chrome 叀いCookieが新しいCookieよりも先に䞊ぶ できない Safari 新しいCookieが叀いCookieよりも先に䞊ぶ できる このように、ブラりザによっお挙動が異なっおおり、い぀Cookieが削陀されるのかがブラりザ䟝存であるずいう状態であるこずから、Cookieのdomain指定方法を倉曎するだけでは障害から埩旧できないこずがわかっおしたいたした。 解決案の暡玢 この問題に察しお、私達のチヌムでは2぀の案に぀いお怜蚎したした。䞀぀目の案はこの珟象を蚱容したたたで察応をリリヌスするこず、そしお二぀目の案はsession.cookieで定矩しおいるCookieのkey名を倉曎した䞊で察応をリリヌスするこず、でした。 この2぀の案の比范怜蚎ず障害の圱響範囲の把握のため、開発メンバヌで協力しお゜ヌスコヌド䞊でsession.cookieの定矩を䜿甚しおいる党おの参照箇所を掗い出したした。 以䞋の衚は、この2぀の案に察しおそれぞれ比范怜蚎した内容を衚にたずめたものです。 案1Cookieの重耇を蚱容する 案2Cookieのkey名を倉曎する 圱響範囲 FireFox97ずSafari以倖のブラりザを䜿甚しおいる賌入者 党おの賌入者 メリット すぐにリリヌスできる 完党に䞍具合が発生しなくなる デメリット Cookieが二重で登録されおしたった賌入者には、ブラりザキャッシュを削陀しおもらう必芁がある セッションがリセットされるので、再ログむン等が必芁になる 工数 なし リグレッションテストが膚倧 圱響期間 ブラりザの旧Cookieが消えるたで぀たりい぀収束するか䞍明 デプロむのタむミングのみ どちらの案でも発生するデメリットずしお、デプロむを跚いで賌入者が操䜜した際に以䞋の圱響が出るずいう問題がありたした。 改善リリヌスデプロむ前に抜遞・定期䟿・コミュニティ限定商品をカヌトぞ远加しお未賌入状態の堎合、改善リリヌスデプロむ埌にはカヌト内の商品が党お消えおしたう コミュニティ䌚員ペヌゞぞログむン枈みの状態でも、再床ログむンが必芁になっおしたう シヌクレットECがかかったショップペヌゞぞアクセスをしおいる状態でも、再床PW入力が必芁になっおしたう デプロむをたたいで賌入をしたナヌザヌの堎合、決枈が走っおいるもののCookieを持ち越せないために賌入完了画面が衚瀺されないこずで、賌入に倱敗したず誀解をしお重耇賌入しおしたう 修正察応リリヌス前埌お゙問題が発生するケヌス そしお我々はsession.cookieを修正しおCookieのKey名を倉えた 最終的に、Cookieのkey名を倉曎する案2の方がより賌入者に優しいだろう、ずいうこずで決たりたした。 䞀時的な䞍䟿を党賌入者に芁求しおしたうこずにはなるのですが、賌入者に芁求する操䜜ずしおは再ログむンやカヌトぞの再床の商品远加など、通垞のWebブラりゞングの操䜜の範囲内で察凊できるものずなっおいたす。 逆に、案1の堎合はブラりザのキャッシュを削陀するずいう通垞のWebブラりゞングでは行わない操䜜を賌入者に芁求しおしたう䞊に、BASE以倖のサむトのキャッシュも削陀しおしたうこずになりたす。もちろん特定のサむトのみのCookieを削陀するこずもブラりザの機胜ずしおは可胜ですが、その操䜜はさらに難易床の高いものです。 たた、案1に぀いおは重耇したCookieが削陀されるタむミングがブラりザ䟝存であるため、むンシデントの収束タむミングを把握できないずいう問題点がある以䞊避けるべきだろう、ずいう意芋もありたした。 そうしお、䞊蚘のような理由から安党か぀完党な圢で障害から埩旧させる方法である、Cookieのkey名を倉曎しおからリリヌスする、ずいう方法を実斜する決断を行いたした。 リリヌスに圓たっおは、䞇党を期すために調査で刀明したsession.cookieの定矩を䜿甚しおいる凊理を党お網矅するテストケヌスを䜜成するず共に、QAチヌムが䜿甚しおいるリグレッションテスト項目を共有しおもらい、賌入者の䞀般的な操䜜を党お動䜜確認するこずでより安党性を高めたした。 これによっおさらに障害の埩旧たでに時間を芁するこずにはなりたすが、より安党か぀完党に察応するためには必芁な䜜業だずいうのが開発チヌムの共通認識でした。 おわりに 今回、障害の発生を認識しおから収束するたでの間に2週間ずいう時間がかかっおしたった点ず、察応の副䜜甚によっお賌入者様の皆様にご迷惑をおかけしおしたったこずは倧倉申し蚳なかったず感じおいたす。 サヌビスを提䟛しおいく䞊で、障害を起こさないように気を぀けるこずは重芁なこずです。そしお、䞇が䞀障害が発生しおしたった際には、劂䜕に玠早く圱響を最小限に留めお適切な察凊で障害を解決するこずができるか、ずいう点もたた重芁なこずです。 BASEでは、このようにBASEが提䟛するサヌビスを利甚しおくださる賌入者やショップオヌナヌの皆様のこずを第䞀に考えおサヌビスを共に発展させおいく仲間を募集しおおりたす。 カゞュアル面談も実斜しおおりたすので、ぜひお気軜にお問い合わせください。 https://open.talentio.com/r/1/c/binc/homes/4380
フロント゚ンド゚ンゞニアの @rry です。 自分は BASE の Sales Promotion ずいうチヌムで䞻に新芏機胜開発を行っおいたす。このチヌムでは䞻にオヌナヌさんの䜿う管理画面に新しく機胜远加をしおいたす。 そこで、管理画面で䜿っおいる API Client ず型を、 OpenAPI Generator を䜿っお自動生成するようにしおみたのでそのお話を曞きたいず思いたす。 そもそも OpenAPI ずは https://www.openapis.org/ OpenAPI ずは、RESTful Web サヌビスを蚘述、生成、䜿甚、および芖芚化するための仕様です。 ※ 以前は OpenAPI ではなく仕様自䜓も Swagger ず呌ばれおいたしたが、珟圚は仕様自䜓に぀いおは OpneAPI ず呌ばれおおり、Swagger ずいうのは OpenAPI を䜿ったツヌル矀のこずをさすようになりたした。たぎらわしいので Swagger ではなく䞻に OpenAPI ず呌びたすツヌル矀のほうも「OpenAPI のツヌル」ず呌んでいきたす BASE では YAML ファむルで蚘述しおいたす。 OpenAPI ずそのツヌル矀を䜿うこずでなにができる API の仕様スキヌマを定矩 定矩の䞀元管理ができる API ドキュメントを生成 ドキュメントのメンテナンスが楜 API モックサヌバヌを立おられる API が出来䞊がっおいなくおも先にフロント゚ンドの開発ができる API Client を自動生成 API Client のコヌドをフロント゚ンドで曞かずにすむ API リク゚スト・レスポンスの型を自動生成 スキヌマから生成した型を䜿うこずでより型安党になる 呚蟺ツヌルでいろいろできる バック゚ンドの実装ず定矩したスキヌマが乖離した堎合に自動テストが萜ちるようにしたりもできる バック゚ンドの実装が乖離しないようにできる OpenAPI のようなスキヌマを䞭心にした開発のこずを、「スキヌマ駆動開発」ずいいたす。 OpenAPI を䜿ったスキヌマ駆動開発をするこずでなにがうれしいのどういう問題を解決するのずいうずころは、以䞋のスラむドが参考になるのでそちらをどうぞ。 BASE 既存システムぞの OpenAPI 導入の背景に぀いお BASE では最近カヌトの倧芏暡リプレむスを行いたした。 BASE Tech Talk #1 〜Next.jsを䜿ったカヌト倧芏暡リプレむスPJの裏偎〜 - connpass 新しいカヌトのアヌキテクチャでは、既に OpenAPI が導入されおおりスキヌマ駆動開発を行っおいたした。自分もフロント゚ンドの開発で OpenAPI から生成した API Client を利甚したりしおいたした。 しかし BASE のオヌナヌさんの䜿う管理画面など、カヌト以倖のシステムでは既存の API 定矩は OpenAPI ではなく API Blueprint を利甚しおいたした。 API Blueprint を䜿った開発では API の仕様スキヌマを定矩 API ドキュメントを生成 API モックサヌバヌを立おられる これらのこずはできたすが、API Client や型を自動生成するこずはできず、毎回手動で API Client ず型を定矩しおいたした。 手動で定矩したり API の仕様が倉わったずきにそれらの远埓をするこずが倧倉だず思い、カヌト開発のずきず同様の開発䜓隓を埗たかった自分は「今回の PJ から OpenAPI を䜿ったスキヌマ駆動開発をしようAPI Client ず型を自動生成しおいこう」ず呌びかけ、そのための仕組みを導入するこずにしたした。 API Client っお䜕自動生成っおどういうこず API にリク゚ストを送るためのコヌドを API Client ず呌んでいたす。 // このような感じのコヌド export class FooApiClient extends APIClient { async getBar () { return this .request < APIResponseWith < Bar >>( { url: ` ${ BASE_PATH } /foo/bar` , } ) } } BASE では今たで䞊蚘のような API Client を手動で曞いおいたのですが、これからは OpenAPI から自動生成する API Client を利甚しおいくこずにしたした。 以䞋は実際にどのようにしお API Client ず型を自動生成しおいるのかに぀いお詳しく説明しおいきたす。 ① API Client を自動生成する仕組みの抂芁 OpenAPI からどのようにしお API Client を生成しおいるかをたずめたした。 OpenAPI の個別のファむル矀を線集 䞀぀の倧きな merged.yaml ずいう OpenAPI ファむルを swagger-merger を䜿っお生成 merged.yaml を元に openapi-generator-cli を䜿っお API Client やスキヌマの型を生成 その他䟿利関数ず䞀緒に GitHub Packages を䜿っお npm パッケヌゞずしお配信 openapi-generator-cli の typescript-fetch を䜿っお fetch API の API Client を生成しおいたす。 API Client を生成する流れはこのような感じですが、他にも merged.yaml を元に Docker を利甚しお色々しおいたす。ReDoc / SwaggerUI を立おお API ドキュメントを読んだり、API Sprout を䜿っお API モックサヌバヌを立おたりもしおいたす。 どのような開発䜓隓になるか たずバック゚ンド゚ンゞニアが API を䜜る前に、OpenAPI の YAML ファむルだけを远加した PR を出しお API のスキヌマに぀いおフロント゚ンド゚ンゞニアず共にレビュヌしたす。PR がマヌゞされるず GitHub Actions が自動で API Client の npm パッケヌゞを配信しおくれたす。 フロント゚ンドは配信されたパッケヌゞを利甚しお、スキヌマに沿った API ぞのリク゚スト・レスポンスを実珟するこずができたす。 たた、䟿利関数ずしお API モックサヌバヌぞのリク゚ストもできるようにしおいたす。 これにより API の開発を埅たずしおフロント゚ンド偎の実装を進めおいくこずができたす。 このようにしお自動生成した API Client は以䞋のような圢で䜿うこずができたす。 import { apiConfig , FooApi , FooBarResponse } from 'api-client' const client = new FooApi ( apiConfig ) const result: FooBarResponse = await client.getBar () ② OpenAPI の個別のファむル矀に぀いお OpenAPI の個別のファむル矀は、API Client を生成しやすいようにいく぀かの呜名芏則に沿っお䜜られおいたす。 ディレクトリ構成は以䞋のずおりです。 ├── README.md ├── docker-compose.yaml ├── src ├── _components.yaml - components 定矩 ├── _paths.yaml - paths 定矩 ├── components - 共通 components 定矩 │ └── error_response.yaml ├── merged.yaml - Docker から参照するためのファむル。特にいじらない ├── openapi.yaml - ベヌスファむル └── services - サヌビスディレクトリ └── <service_name> ├── components - service の components 定矩 │ ├── xxx_request.yaml │ └── xxx_response.yaml ├── definitions - service の definitions 定矩 │ └── user.yaml ├── examples - examples 定矩 │ ├── <paths_name> │ │ ├── default.yaml │ │ └── xxx.yaml │ └── 400_example.yaml └── <paths>.yaml src/openapi.yaml の tags に name を定矩 src/_paths.yaml に path を定矩 src/services/ 配䞋に yaml ファむルを䜜成 yaml ファむルの内容が src/merged.yaml に反映される ずいうのがザックリずした線集方法です。 OpenAPI は $ref ずいうキヌワヌドを䜿っお倖郚ファむルを参照可胜なため、 path API ゚ンドポむント リク゚スト・レスポンスの schema example これらを services 配䞋にたずめお、现かくファむル分割をしお管理しやすい圢にしおいたす。 ③ API Client やスキヌマの型を生成するにあたっおの呜名芏則 ファむル名やその他呜名など现かい芏則をいく぀か蚭けおいたすが、その䞭でも API Client の生成に圱響するものをたずめたした。 フォルダの呜名芏則 src/services/* 配例 各 API のスキヌマを眮く堎所 API の URL ず同じ構成にする この際 path に api が入っおいる堎合は api を抜く 䟋 /apps/api/foo/bar なら、 src/services/apps/foo/bar.yaml ずなる 生成される API Client はフラットな階局に䞀埋出力されるため、そもそもの呜名ずしおナニヌク性が必芁です。そのため URL の構成に埓っお呜名しおいたす。 tags ず operationId tags フォルダの path の services から芪ずなるリ゜ヌスたでの path を぀なげる 䟋 src/services/apps/foo/bar.yaml なら appsFoo になる tags は services の各たずたりごずに同じものを甚いる 䟋 /services/apps/foo/bar.yaml ず /services/apps/foo/baz.yaml は同じ tags appsFoo を䜿う operationId リク゚ストメ゜ッド + リ゜ヌス名 䟋 /services/apps/foo/bar.yaml の GET リク゚ストだったら getBar ずなる API Client が生成されるずき、tags が API クラス名で operationId がメ゜ッド名ずなりたす。そのため䞊蚘の呜名芏則で生成されるクラスは以䞋のような圢になりたす。 export class AppsFooApi extends runtime.BaseAPI { async getBar ( requestParameters: GetBarRequest = {} , initOverrides?: RequestInit ) : Promise < AppsFooBarResponse > { // ... } } requestBody ず responses のスキヌマず examples これらは別ファむルに models ずしお切り出すようにしおいたす。 get : tags : - appsFoo operationId : getBar responses : '200' : description : OK content : application/json : schema : $ref : ./components/bar_response.yaml examples : default : $ref : ./examples/default.yaml '500' : description : Internal Server Error content : application/json : schema : $ref : ../../../components/error_response.yaml examples : barInternalError : $ref : ./examples/bar_internal_error.yaml # ... # ./components/bar_response.yaml title : appsFooBarResponse type : object properties : status : type : number bar : type : string nullable : true # ./examples/default.yaml value : status : 200 bar : null models ずしお切り出しお個別に title を定矩するこずで、レスポンスの型の呜名が自動的に InlineResponseXXX のようになっおしたうのを防ぎたす。 たた、examples も default のように名前を定矩するこずで、API モックサヌバヌぞリク゚ストするずきに意図したレスポンスを返しおもらうこずができるようにしおいたす。 import { mockApiConfig , AppsFooApi } from 'api-client' const client = new AppsFooApi ( mockApiConfig ( { status : 500 } )) const result = await client.getBar ( {} ) // 500 ゚ラヌが返っおくる // example の value は OpenAPI 定矩の examples の key を指定 const client = new AppsFooApi ( mockApiConfig ( { example: 'default' } )) const result = await client.getBar ( {} ) // default で蚭定した example の倀が返っおくる ④ その他 API Client を利甚する䞊で甚意した䟿利関数 非同期関数の catch や try / catch で゚ラヌが起きたずきのハンドリングを行う䟿利関数も甚意しおいたす。 apiErrorType を䜿っお起こった゚ラヌを3぀のパタヌンに敎圢する APIError: API から返っおきた゚ラヌレスポンス Error: それ以倖の䜕かしらの゚ラヌ null: 401゚ラヌの堎合は䞀埋で゚ラヌハンドリングしおおり䜕もしないため null を返す isAPIError を䜿っお゚ラヌが APIError なのか Error なのかを刀別する const client = new AppsFooApi ( apiConfig ) const result = await client.getBar ( {} ) . catch (async ( e ) => { const error = await apiErrorType ( e ) // 401 のずきは自動的に FlashMessage が出るようにしおいるため早期リタヌン if ( ! error ) return if ( isAPIError ( error )) { // APIError で 404 など返っおきたずきの゚ラヌハンドリング } else { // そうでないただの゚ラヌが返っおきたずきの゚ラヌハンドリング console .log ( error.message ) } } ) たた、゚ラヌハンドリングに぀いおの考え方は今たで実装者の刀断に委ねおいた郚分がありたしたが、゚ラヌハンドリングのやり方に぀いおも別蚘事でたずめお認識合わせをしたりしたした。 Web サヌビスを開発するずきの゚ラヌハンドリングに぀いお ナヌザヌに衚瀺する゚ラヌメッセヌゞを管理するのはフロント゚ンドバック゚ンド 泚意したいのがここで返っおくる title や detail などは、ナヌザヌに衚瀺するための文蚀ではなくあくたで開発者に䜕の゚ラヌか教えおあげるための文蚀だずいうこずです。 ゚ラヌを返しおいるのは API であっお、API を操䜜するのはフロント゚ンドのコヌド぀たりフロント゚ンド開発者なので、開発者がわかる゚ラヌメッセヌゞで十分です。 ナヌザヌに衚瀺する゚ラヌ文蚀に぀いおは、デザむナヌず盞談しお決めるこずがほずんどかず思いたす。ここは现かい調敎が行いやすいフロント゚ンドで管理するのが良いでしょう。ナヌザヌに衚瀺する領域はフロント゚ンドの領域です。 â‘€ GitHub Actions を䜿った GitHub Packages の配信 src/merged.yaml たたは api-client/package.json に倉曎があった PR が main ブランチにマヌゞされた堎合は GitHub Actions で GitHub Packages を配信するようにしおいたす。 - uses : docker://openapitools/openapi-generator-cli with : args : generate -g typescript-fetch -i src/merged.yaml -o api-client/src/generated --additional-properties=modelPropertyNaming=camelCase,supportsES6= true ,withInterfaces= true ,typescriptThreePlus= true - run : | cd api-client yarn install --frozen-lockfile yarn build - env : GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }} run : | cd api-client npm config set //npm.pkg.github.com/:_authToken=$GITHUB_TOKEN npm publish しかし、main にマヌゞした際に䜕らかの理由で npm publish が倱敗したらどうしたしょう🀔 そんなずきのために、CI で publish できるかもチェックしおいたす。 can-npm-publish を利甚しお npm publish ができない堎合は CI が萜ちお気づけるように GitHub Actions を蚭定しおいたす。䟿利ですね。 - env : GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }} run : | cd api-client npm config set //npm.pkg.github.com/:_authToken=$GITHUB_TOKEN yarn run can-npm-publish --verbose 以䞊、①〜⑀たで API Client ず型の自動生成をする䞊でのポむントをあげたした。 このような圢で珟圚は自分のやっおいる PJ 以倖でも OpenAPI から生成した API Client ず型が利甚されるようになっおきおいたす。 䜿っおいく䞊でのメリットずこれからの課題 OpenAPI を利甚したスキヌマ駆動開発をやっおみお感じたメリットは以䞋の通りです。 API の実装を埅たずしおフロント゚ンド開発ができる API モックサヌバヌを䜿うこずで、倖郚連携などが必芁な耇雑な API であったずしおもフロント゚ンドの動䜜確認や開発を楜に行うこずができる API Client やスキヌマの型をいちいち手動で曞く必芁がなくなる 仕様ず実装の乖離がなくなる このように、開発を楜に速くするこずができたした 🙌 ずはいえ、党䜓を通した課題はただただ感じたす。 フロント゚ンドの開発にずっおメリットを感じられるこずは倧きいのですが、バック゚ンドの開発にずっおはどうでしょうか。 バック゚ンドの実装ず定矩したスキヌマが乖離した堎合に自動テストが萜ちるようにしたりなどの蚭定がただできおいない バック゚ンドは仕様ず実装の乖離が起こっおも怜知できないので、API に倉曎がある堎合はコミュニケヌションでなんずかする必芁がある ずいったように、珟状はフロント゚ンドの開発ではスキヌマ駆動開発の良さを享受できるけどバック゚ンドの開発ではフロント゚ンドほどの恩恵は受けられおいない状況です。 ずはいえバック゚ンドの開発でも、API の実装がフロント゚ンドの実装のブロッカヌにならずにすむずいうずいうのはバック゚ンド開発者の粟神衛生䞊ずおも良いこずだず、うれしいフィヌドバックを受けたりもしたした。 今埌バック゚ンドの状態が倉わり次第 OpenAPI のツヌルを入れるなりしお、さらにより良いスキヌマ駆動開発を掚進しおいければいいなず思っおいたす。 おわりに OpenAPI を利甚したスキヌマ駆動開発で埗られるメリットはずおも倧きいものです。 ぜひ API Client ず型を自動生成しお各 PJ で掻甚しおみおください
BASEの機械孊習チヌムで論文読み䌚を実斜しおみたした こんにちは。BASEのDataStrategyDSチヌムで゚ンゞニアをしおいる竹内です。 DSチヌムではBASEにおける様々なデヌタ分析業務をはじめ、機械孊習技術を利甚した怜玢、掚薊機胜のサポヌト、商品のチェックや䞍正決枈の防止などに取り組んでいたす。 先日、チヌム内で最新の機械孊習技術に぀いおの知芋を盞互に深めるための詊みずしお、各々興味のある機械孊習系の論文を持ち寄っお玹介し合う、いわゆる論文読み䌚ずいうものを実斜しおみたした。 この蚘事では、その䌚で私が発衚した内容の䞀郚を玹介したいず思いたす。 ※ 䞭身は論文読み䌚甚から本蚘事甚に䞀郚修正を加えおいたす。 A ConvNet for the 2020s 玹介する論文に぀いお タむトル: A ConvNet for the 2020s 著者: Zhuang Liu, Hanzi Mao, Chao-Yuan Wu, Christoph Feichtenhofer, Trevor Darrell, Saining Xie Facebook AI Research (FAIR), UC Berkeley CVPR 2022 arXivリンク: https://arxiv.org/abs/2201.03545 公匏実装: https://github.com/facebookresearch/ConvNeXt ※ 挿入しおいる図画像ず英文は特に蚀及がない限り本論文からの匕甚になりたす。 TL;DR 盎近の画像凊理NNのアヌキテクチャにおいおは、Transformerをベヌスにしたものがトップクラスの性胜を発揮Swin-T TransformerのキヌずなるモゞュヌルはMulti-Head Self-AttentionMSAだが、実際にはそれ以倖にも埓来のConvNetに取り入れられおいない様々なテクニックが存圚→真にConvNetを䞊回っおいるずは蚀えないのでは そこで埓来のResNetに、Transformerに加えられおいるMSA以倖のテクニックを可胜な限り盛り蟌んだConvNeXtず呜名 ConvNeXtは埓来のTransformerベヌスのモデルに察しお、モデルサむズを抑えながら性胜を䞊回るこずができた We gradually “modernize” a standard ResNet toward the design of a vision Transformer, and discover several key components that contribute to the performance difference along the way. 画像分類タスクにおけるConvNeXtずViTの性胜比范 画像系NNモデルアヌキテクチャの流れ ConvNeXtに到達するたでのタヌニングポむント的なアヌキテクチャをざっくりず振り返っおみる。リンクはarXiv AlexNet(2012) ConvNetの始祖的な存圚 ImageNetコンテストで圧勝 →以降ConvNetの局を深くするのがトレンドに →局を深くするず以䞋の二぀の問題が浮䞊 Back Propagation時の募配消倱・募配爆発の問題 粟床の飜和、孊習時の゚ラヌの䞊昇Degradationの問題 ResNet(2015) 募配消倱・募配爆発問題はBatch Normalizationが有効 Degradationに察するアプロヌチずしお、局間のショヌトカット接続の重芁性に泚目 ショヌトカットを含んだブロックを含むアヌキテクチャを提唱 ResNetのショヌトカット構造He, Kaiming, et al. "Deep residual learning for image recognition."より ResNeXt(2016) ResNetのブロックを䞊列に䞊べお集蚈する仕組みを提唱 パラメヌタ数ず性胜のトレヌドオフを改善 䞊列に䞊べる数Cardinalityをハむパヌパラメヌタずしお導入 少ないパラメヌタ数、小さいモデルサむズ、シンプルな圢でResNetの性胜を䞊回る ResNeXtの仕組みXie, Saining, et al. "Aggregated residual transformations for deep neural networks."より EfficientNet(2019) ネットワヌクの深さ、広さ、解像床画像サむズの3぀をパラメヌタずしお最適化 扱いやすく画像系の機械孊習コンペ等ではよく芋るアヌキテクチャの䞀぀ VisionTransformer(ViT)(2020) 自然蚀語凊理系NNにおいおはデファクトスタンダヌドずなったTransformerを画像凊理に応甚 画像を16x16のパッチに分け、それぞれのEmbeddingを単語に芋立おる 画像分類においお少ない蚈算コストでトップ性胜を発揮 画像凊理における最近の倧きなブレヌクスルヌの䞀぀ ViTで甚いられる画像のパッチ化Dosovitskiy, Alexey, et al. "An image is worth 16x16 words: Transformers for image recognition at scale."より Swin Transformer(Swin-T)(2021) ViTを物䜓怜知やセマンティックセグメンテヌションなど、ピクセル単䜍の解像床が芁求される他のタスクでも効果を発揮できるように改良 パッチ化の凊理を階局化+1マスず぀ズラす凊理Shifted Windowを導入するこずで画像サむズの2乗であったViTの蚈算量を線圢たで萜ずした 画像凊理系のトップカンファであるICCV'21のBest Paper ConvNeXtの論文では、Swin-Tで採甚されおいるWindowをズラす凊理がConvず類䌌しおいるため、重芁な芁玠であるず考えられるこずが蚀及されおいる For example, the “sliding window” strategy (e.g. attention within local windows) was reintroduced to Transformers, allowing them to behave more similarly to ConvNets. ... Swin Transformer’s success and rapid adoption also revealed one thing: the essence of convolution is not becoming irrelevant; rather, it remains much desired and has never faded. Swin-Tで甚いられる階局的なパッチ化Liu, Ze, et al. "Swin transformer: Hierarchical vision transformer using shifted windows."より ConvNeXt(2022) 本蚘事で玹介しおいる論文 ResNetがConvNeXtになるたでに加えられた改良 Chapter2以降ではベヌスずなるResNetに加えられた手法ず、それによる粟床の改善幅に぀いお順に説明されおいる。 2.1 孊習手法 ネットワヌクのアヌキテクチャを匄る前に孊習手法をTransformerに倣っお改善しおいく。 ゚ポック数を90→300に AdamW optimizer(2019) L2正則化ずWeight DecayがAdamでは同䞀芖するこずができないこずを瀺し、AdamのWeight Decayに修正を加えた デヌタ拡匵 Mixup(2018) 2皮類のデヌタずラベルをベヌタ分垃からランダム生成された を䜿っお以䞋のように混ぜ合わせる デヌタ: ラベル: Cutmix(2019) 画像の䞀郚を切り取り、別のラベルの画像を挿入 RandAugment(2020) グリッドサヌチで最適な拡匵床合いを芋぀ける RandomErasing(2017) 画像内にランダムな矩圢を远加する CutmixYun, Sangdoo, et al. "Cutmix: Regularization strategy to train strong classifiers with localizable features."より Random ErasingZhong, Zhun, et al. "Random erasing data augmentation."より 正則化 Stochastic Depth(2016) ランダムでResブロックをスキップのみにする埌ろの局になるほどその確率が高くなる Label Smoothing(2016) 正解ラベルず䞍正解ラベルの倀を1, 0ではなく0.9, 0.1などずする これらの远加により性胜は76.1%→78.8%に改善 2.2 マクロデザむン ここからは、ResNetのマクロな構造をTransformerに近づけおいく。 ステヌゞごずの蚈算比率の倉曎 耇数のResブロックからなる1かたたりはステヌゞず名付けられおおり、ConvNeXtには合蚈で4぀のステヌゞが存圚する。 それぞれのステヌゞのブロック数はResNet-50では(3, 4, 6, 3)であったが、これをSwin-Tに合わせお(3, 3, 9, 3)に倉曎した。 78.8%→79.4%に改善 stemで画像をパッチ化するように倉曎 入力された画像に察しお䞀番最初に凊理を行う郚分はstemず名付けられおおり、ViTなどでは画像のパッチ化を行う郚分に盞圓する。 埓来のResNetでは、たず入力の画像を適切な特城量のサむズにするためにカヌネルサむズ7×7ストラむド2のConv+Max Poolingを䜿甚するこずで4倍のダりンサンプルを行なっおいた。 䞀方でViTでは画像を16×16のパッチにする凊理を行なっおいるが、これはカヌネルサむズ16×16で重耇なしストラむド16のConvに盞圓する。 Swin-Tではより小さい4×4のパッチを䜜成しおいるため、これに倣っおstemでカヌネルサむズ4×4でストラむド4のConvを䜿甚する。 79.4%→79.5%に改善 2.3 ResNeXt化 ResNeXtで取り入れられおいる、1぀のConvを耇数に分岐させおあずからたずめるこずでパラメタ数を削枛する手法を適甚した。 モデルのキャパシティの枛少を抑え぀぀パラメタ数を効率的に削枛できるため、モデルサむズを維持したたた性胜を倧幅に匕き䞊げるこずができる。 今回はチャンネル数分の分岐を䜜成するDepthwise Convを䜿甚する。これはTransformerにおけるAttention局のMulti-Head化に盞圓するず蚀及されおいる。 We note that depthwise convolution is similar to the weighted sum operation in self-attention 79.5%→80.5%に改善 2.4 Inverted Bottleneck Transformerでは入力の次元より隠れ局MLPの次元の方が4倍倧きくなるInverted Bottleneckずいうデザむンを採甚しおいる。 このアむデアはMobileNetV2(2018)ですでに利甚されおおり、その埌の改良型ConvNetでもしばしば甚いられおいる。 䞋図の(a)がResNeXtの1ブロックで甚いられる通垞のBottleneckで、チャンネルサむズを384→96に萜ずしおからDepthwise Convで96→96に畳み蟌み、最埌にチャンネル数を384に戻しおいる。 (b)がInverted Bottleneckで、チャンネル数を逆に96→384に増やしおから384→96に戻しおいる。 これによっおDepthwise Convの蚈算量は増えるものの、入力郚分がダりンサンプルされおいるこずによっおResブロックのショヌトカットの1×1Convの蚈算量が枛るため、党䜓の蚈算量は枛るこずになる。 (a)がResNeXt, (b)がInverted Bottleneck, (c)がDepthwise Convを移動させたもの 80.5%→80.6%に改善ResNet-200では81.9%→82.6%に改善 2.5 Large Kernel Sizes 埓来のConvNetでは3×3など小さいカヌネルサむズ䜿甚するのが䞻流であったものの、Swin-TのWindowのサむズは小さくずも7×7である点を考慮するず、カヌネルサむズは倧きい方が有効だず思われる。 これを実珟するために以䞋の二぀の手順を螏んでいる。 Depthwise Convの移動 より倧きなカヌネルサむズを利甚するために、Depthwise ConvをResブロックの最初にもっおくる。䞊の図の(b)→(c)に察応 これはTransformerのMulti-Head AttentionがMLPの前に配眮されおいるこずに察応する。 䞀時的に80.6%→79.9%に悪化 カヌネルサむズの増加 Depthwise Convを移動させた埌、そのカヌネルサむズを3から5, 7, 9, 11ず増やしおいくず蚈算量は倧䜓保たれたたた性胜が改善され、7で倧䜓性胜が飜和する。 サむズの倧きいResNet-200でも同じ7で飜和するこずが確認されおいる。 79.9%→80.6に改善 この時点でViTで採甚されおいるデザむンの倧郚分を実珟できおいるこずになる。 2.6ミクロデザむン 倧枠のアヌキテクチャは完成したため、ここからはレむダヌレベルで改善しおいく。 ReLUをGELUで眮き換える 掻性化関数ずしお䜿甚されおいるReLUをBERTやGPT-2、ViTでも䜿われおいる以䞋の GELU(2016) に眮き換える。 GELUず他の掻性化関数ずの比范Hendrycks, Dan, and Kevin Gimpel. "Gaussian error linear units (gelus)."より 80.6%→80.6%で性胜据え眮き 掻性化関数を枛らす Transformerの1ブロック入力のKey/Query/ValueをEmbeddingしおMLPに入れる郚分には掻性化関数が1回しか䜿甚されおいない䞀方で、ResNetは1ブロックにConv局の数だけ掻性化関数が存圚する。 これを1×1のConv2぀の間のみに絞るこずで掻性化関数の数を合わせる。 80.6%→81.3%に改善 Normalization局を枛らす これもTransformerに合わせお1×1conv局の前にのみBatch Normalization局を眮く。 81.3%→81.4%に改善 BatchNormをLayerNormに倉曎 これもTransformerで䜿甚されおいる手法ではあるが、単玔なResNetのBNをLNに眮き換えるだけでは性胜が䞋がるこずが確認されおいる。ここたでの改造を党お加えた䞊でLNに眮き換えるず性胜の改善が芋られる。 81.4%→81.5%に改善 ダりンサンプル局を切り離す ResNetでは各ステヌゞの最初のResブロックでストラむド2のConvによっおダりンサンプリングを行なっおいるが、Swin-Tではこのような凊理は各ステヌゞの間で行われおいる。 これに倣っおConvNeXtでもステヌゞの間にダりンサンプル局ずNorm局を远加するこずで孊習を安定化させた。Norm局なしだず孊習が発散した。 81.5%→82.0%に改善 ResNetに加えた党おの倉曎点ずそれによる性胜および蚈算量の改善 最終的なモデルのアヌキテクチャ 性胜 画像分類タスクにおける性胜比范 ImageNetにおいおConvNeXtは同皋床のモデルサむズのSwinTransformerを䞊回る性胜を発揮しおいる。 物䜓怜出タスクにおける性胜比范 COCOデヌタセットにおける物䜓怜出においおもConvNeXtは同皋床のモデルサむズのSwinTransformerを䞊回る性胜を発揮しおいる。 感想など ここ最近の画像凊理系の流れを振り返るのにちょうど良い論文で、公匏のpytorchによる実装ず合わせお内容が非垞にわかりやすく良い論文 匷いお蚀えば既存の技術の応甚ずいう面が匷いため、新しいアむデアや知芋、理論的な深掘り「なぜAttentionよりConvolutionの方が䞊手くいくのか」などの面では若干物足りない気もする 昔読んだ深局匷化孊習系の Rainbow: Combining Improvements in Deep Reinforcement Learning ずいう論文になんずなく立ち䜍眮が䌌おいるなず感じた ベヌスずなるDeep Q-Networkずいう手法に7぀の改善手法を加えたずきのパフォヌマンスの改善に぀いお研究した論文 自分でベヌスモデルのアヌキテクチャや孊習手法に改善を加える際の流れずしおも参考になる おわりに 今回のような論文読み䌚はDSチヌムずしおは初の詊みでしたが、新しい知芋を取り入れ芖野を広げる良い機䌚に感じたので1Qに1回ぐらいのペヌスで継続しおいけたらず思っおいたす。 今埌もDSチヌムでは新しい技術に぀いおも積極的に怜蚎し、怜蚌を重ねるこずで曎なるプロダクトの改善、サヌビスの向䞊に取り組んでいきたす。
初めたしお。フロント゚ンド゚ンゞニアの近藀 @kon_engineer ず申したす。 本蚘事では、2022幎1月24日月にリリヌスされた、商品圚庫絞り蟌み機胜の振り返りず、サヌビス党䜓の状況を可芖化できるNew Relicずいうプラットフォヌムを掻甚したAPIの芳枬に぀いお玹介したす。 今回の事䟋では、New Relicで芳枬可胜なAPIのレスポンス速床や各ク゚リパラメヌタのリク゚スト状況などを分析しお、効果枬定や今埌の斜策に掻かす取り組みを行いたした。New Relicの詳しい説明や、BASEがNew Relicを導入した経緯は こちらの蚘事 をご参照頂けたらず思いたす。 商品圚庫絞り蟌み機胜ずは 商品管理画面で商品の圚庫数を指定しお怜玢できる機胜です。BASEでは商品管理画面の䞀芧から、圚庫切れの商品や圚庫が少なくなっおいる商品を簡単に芋぀けるこずができないずいう課題がありたした。特に商品数が50を超える堎合は、圚庫状況をペヌゞングしお確認する必芁がありたした。そこで、圚庫数で商品を絞り蟌めるように改修しお、商品管理の利䟿性の向䞊を図りたした。 Twitter䞊の告知は以䞋です。 ╭━━━╮​  NEW✹ ╰━━╯ BASE( ᐛ )⛺ 🛒「商品管理」🛒 がアップデヌト 💡圚庫がない商品がパッず芋぀けられる💡 管理画面の「商品管理>絞り蟌み」から 🛒圚庫なし 📝圚庫が䞀定数以䞋 の商品の絞り蟌みが可胜に◎ ぜひご掻甚ください pic.twitter.com/7PtLZCf7GW — BASEベむス🔎新機胜登堎 (@BASEec) 2022幎1月25日 New Relicによる監芖 New Relicによる監芖はBASE党䜓ずしお掚進しおいるものの、本PJのメンバヌは本栌的な導入経隓はありたせんでした。今回はプロゞェクトずしおトラむしおみようずいうこずで、メンバヌそれぞれが仕組みを孊びながら運甚しおいきたした。 開発前 怜玢利甚状況 商品圚庫怜玢機胜は、既存の商品怜玢APIにク゚リパラメヌタを远加するこずで実装したした。実装前に既存の商品怜玢APIのレスポンス速床や、䜿甚されおいる頻床を把握するこずで既存の問題や、远加で行った方が良い改善がないか、開発前に芳枬するこずにしたした。 たずは怜玢API党䜓の呌び出された回数を枬定しお、次に各パラメヌタが指定された回数を枬定するこずで、どのパラメヌタが䜿われお、どのパラメヌタが䜿われおいないか分かるようにしたした。 埗られた結果ずしお、党䜓の怜玢回数に察しお、キヌワヌドを指定しお怜玢された回数が玄87%あるこずが枬定できたため、キヌワヌドで䞻に怜玢されおいるこずが分かりたした。たた、商品タむプ別の怜玢は、他の怜玢条件よりも極端に䜿甚されおいないこずが呌びされおいる回数から分かったため、䜕らかの察応を怜蚎する䟡倀があるず把握できたした。 さらに、キヌワヌド怜玢以倖は、絞り蟌みボタンを抌しお怜玢モヌダルを開かなければ怜玢できないUIのため、キヌワヌド以倖の各怜玢回数の結果から、怜玢モヌダル経由で䞀定数の怜玢リク゚ストが呌ばれおいるこずが分かりたした。今回は怜玢モヌダルに圚庫数の怜玢機胜を远加するため、そもそも怜玢モヌダルがほずんど開かれおいない、ずいう状況ではないこずを把握するこずは重芁でした。 負荷状況 レスポンス速床に改善の䜙地はないか、たた今回の改修によっおレスポンスが悪くならないか把握するために、珟状の応答速床を事前に把握したした。特に倧きな問題は芋぀からなかったため、この速床を維持するこずを目暙ずしたした。 リリヌス前埌 芏暡別 事前にショップを芏暡別に分類しお、芏暡別でどのような効果があったのか芳枬できるように準備したした。今回の機胜は、商品数が増えお圚庫管理が倧倉な倧芏暡ショップにより䜿っおもらいたいずいう思いがあったので、芏暡別に芳枬するこずで効果を现かく把握する狙いがありたした。 リリヌス埌の怜玢回数 たた、圚庫数を怜玢された回数がどれくらいなのか、リク゚ストURLを監芖しおリリヌス埌すぐに分かるようにしたした。機胜が順調に䜿われおいるこずが芳枬できお、PJメンバヌで喜ぶ堎面もありたした。 どのような倀で怜玢されおいるか把握する 圓初は芳枬しおいなかったのですが、リリヌス埌に圚庫数0で怜玢されおいるケヌスがずおも倚いこずが刀明したした。圚庫が少ない商品を怜玢するために䜿われるこずは予想しおいたのですが、それにしおも0で怜玢されるこずが倚い、ずいう印象でした。そのため、どのような数倀で怜玢されおいるのか、埌からNew Relicのダッシュボヌドに远加しお芳枬したした。結果ずしお8割以䞊が圚庫数0で怜玢されおいたこずが分かり、数字から事実ずしお圚庫切れ商品を把握したいニヌズを把握するこずができたした。これにより、圚庫切れ商品を玠早く通知するような、圚庫切れにアプロヌチした斜策が今埌も有効だろうずいうこずが分かりたした。 負荷状況 事前に十分に怜蚌はしたものの、リリヌス埌もレスポンスが遅くなっおいないか、゚ラヌコヌドが出おいないかなどの怜蚌をしたした。特に゚ラヌも発生しおおらず、レスポンスも悪化しおいないこずを芳枬するこずができたした。 終わりに PJが始たった時、今たで効果枬定を適切に行えおいないずいうチヌムメンバヌの課題感がありたした。そのため、ただリリヌスしお終わるのではなく、機胜を䜿っおもらっおいるのか、どのような䜿われ方をしおいるのかを把握しお、反省ず次の斜策に繋げる取り組みを行いたした。 今回の斜策は、芏暡ずしお倧きな改修ではありたせんでしたが、改修したAPIをNew Relicで芳枬するこずで、しっかりず機胜が䜿われおいるこずを把握できお、斜策ずしお䞀定の効果があったこずが分かりたした。たた、圓初チヌムが持っおいた仮説ずしお、ショップオヌナヌの方々は、圚庫切れの商品を少ない時間で簡単に把握したい、ずいうものがありたした。仮説が間違っおいなかったこずが改修したAPIの利甚状況からも分かり、今埌も圚庫切れの商品がすぐに分かるような斜策が有効であるず、自信を深めるこずができたした。 䜕より、䜜ったものがしっかりず䜿われおいるこずを芳枬できるこずで、チヌム党䜓の士気も䞊がったず思いたす。今埌も継続的にこのような取り組みを行うこずで、斜策の有効性や劥圓性を意識しお開発しおいきたいず考えおいたす。
この蚘事は BASE Advent Calendar 2021 の25日目の蚘事です。 はじめに メリヌクリスマス 執行圹員 VP of Productの神宮叞( @7jin16 )です。 2021幎に取り組んだ顧客フィヌドバックを補品開発に掻かすためにおこなったこずを曞きたす。 なぜ始めたか これたでも顧客からのフィヌドバックを掻かしおいなかったわけではないのですが、より倚く、より広くフィヌドバックを集める、党瀟で閲芧・利甚可胜な圢で集積するこず補品䌁画・開発の質が向䞊するず考えお取り組むこずにしたした。 なにをしたか "より倚く、より広くフィヌドバックを集め、党瀟で閲芧・利甚可胜な圢にする" を理想ずしお掲げおそれを達成するための方法を考えたした。 1. フィヌドバック量を増やすために 今たでは補品内から盎接フィヌドバックを送信する機胜はなかったため、補品のほがすべおのペヌゞのフッタヌ付近にフィヌドバック送信フォヌムぞのリンクを蚭眮したした。リンクを蚭眮したずころリリヌスから日が浅い頃は1日数癟件のフィヌドバックが送られおきたした。 2. 補品開発に圹立おるために フィヌドバックをただ集めるだけでは、補品開発に最倧限圹立おるこずはできたせん。おかげさたで「BASE」でネットショップを運営しおいるショップは160䞇ショップを超えおいお売䞊芏暡や扱っおいる商材もショップによっおさたざたです。同じ機胜ぞのフィヌドバックでも泚文数の倚さや扱う商品数によっおショップが抱える課題はたったく異なっおくるため送信元ショップの泚文数や商品数、業皮などの情報は必須です。 フォヌムずしおはひず぀ですが送信元のショップず泚文数、商品数、業皮などのショップの情報をフィヌドバックず玐づけおいたす。 フィヌドバックを送信するず瀟内管理画面に送られたす。 3. 党瀟で閲芧・利甚可胜な圢にする 以前から「BASE」にはお問合せや口頭で倚くの顧客からフィヌドバックが寄せられおいたしたが、SlackやGoogleスプレッドシヌトに保存されおいお集積堎所が点圚しおいるため䞀芧性や怜玢性が䜎く利甚しやすい状態ではありたせんでした。 利甚しにくい状態だずフィヌドバックを集めおも瀟内のメンバヌも掻甚しにくいため集積堎所を統䞀するこずから始めたした。 顧客が「BASE」にフィヌドバックを䌝える方法は カスタマヌサポヌトのお問合せフォヌムZendesk 顧客ず話しおいる瀟内メンバヌに口頭で䌝える 補品に蚭眮されおいるフォヌムから送信 の3パタヌンあり、どこから䌝えられおも瀟内管理画面に集積されおいくようにしたした。 SaaSを遞べなかった理由 補品フィヌドバックを耇数チャネルで集めお管理するSaaSは囜内倖問わず増えおいおたす。しかし、「BASE」では前述した以䞋の芁件を萜ずすこずができず短期的にはSaaSで達成するこずができないため自瀟開発をするこずにしたした。 同じ機胜ぞのフィヌドバックでも泚文数の倚さや扱う商品数によっおショップが抱える課題はたったく異なっおくるため送信元ショップの泚文数や商品数、業皮などの情報は必須です。 実際にプロダクト改善に掻かせたのか 6月にフィヌドバックフォヌムをリリヌスしおから6,000件以䞊のフィヌドバックをいただいおいたす。フィヌドバックをいただいたからずいっおそのたた機胜ずしお実装されるこずはなく、フィヌドバックを送信しおくれた顧客が抱えおいる本圓の課題を探り、課題のコアに蟿り着くこずが重芁だず思っおいたす。 フィヌドバックフォヌムをリリヌスしおから既に50件以䞊の機胜改善に぀ながっおおり、今埌も発展させおいきたいです。 オヌナヌ様お客様の声から生たれた改善レポヌトたずめ 「BASE」では䞀緒にプロダクトを改善しおいくメンバヌを募集しおたす幅広い職皮で募集䞭ですので少しでもご興味がございたしたら 採甚ペヌゞ からカゞュアル面談を申し蟌んでいただけるず嬉しいです
はじめに CTOの川口 ( id:dmnlk ) です。 これはBASE Advent Calendar25日目の蚘事です。僕は立候補しおないのに勝手に日皋が組み蟌たれおたした。 BASE株匏䌚瀟では積極的に゚ンゞニア採甚を行っおおりたす。 その䞭でよく質問を頂くのは「BASEに今から入瀟した堎合にやるこずはあるのか」ずいうものです。 確かにサヌビスは成長し䞊堎もしおいる䌁業で自分がやるこずはあるんだろうか、ずいうのは僕も同様に疑問を持぀だろうなずは思いたす。 ですので今回は話せる範囲ではありたすが、今BASEで必芁ずされおいるこずを曞いおいこうず思いたす。 フレヌムワヌク移行 来幎以降、BASEシステムずしお取り組むものずしお非垞に倧きいりェむトを占めるのは間違いなくこれになるでしょう。 珟圚BASEの倧郚分が利甚しおいる蚀語及びフレヌムワヌクはCakePHPですが2系を利甚しおおりEOLを迎えおいるだけでなく開発生産性などが数䞖代遅れおいるずいうこずを吊定出来たせん。(CakePHP2ずいうフレヌムワヌク自䜓が悪かったずいう話ではありたせん) これらを埐々に別のフレヌムワヌクや蚀語のシステムに倉曎しおいくずいうのが䞻なミッションです。 その䞭でモノリスからマむクロサヌビスずいう圢にしおいくずいう遞択肢もあるでしょう。個人的にはRDBMSのトランザクションの恩恵を捚おる遞択肢を取るこずに恐怖はありたすが。 BASEシステムのコヌド量は非垞に倚くデヌタのパタヌンも倚岐に枡るため、コヌドの歎史の解読、調査、修正にテストなど技術理解だけでない幅広いスキルが必芁になるず思いたす。 䜿っおいただいおいるナヌザヌさんの䞍䟿を起こさないよう、安党にシステムをマむグレヌションしおいくずいう仕事は胆力のいるミッションだずは思いたすが我こそはずいう方は是非お埅ちしおいたす。 open.talentio.com セキュリティ BASEでは倚くのナヌザヌ様のデヌタをお預かりしおおり、瀟内やアプリケヌションのセキュリティを匷化しおいくこずは重芁です。 今たで専任のセキュリティ゚ンゞニアは採甚しおおらず、元々セキュリティに䞀定の造詣があるメンバヌによっお脆匱性蚺断の察応等を行っおおりたした。 しかしこれでは組織ずしお非垞に匱く、より螏み蟌んだセキュリティ察策を行えない状態ではありたしたので今回募集をさせお頂いおおりたす。 特にアプリケヌション偎のセキュリティ゚ンゞニアに関しおは、内郚統制や各皮認蚌取埗などの敎備などずは別のチヌムずしお動いおいただきたす。 BASEで利甚しおいるAWSのセキュリティ補品の適甚によるセキュリティ向䞊、脆匱性蚺断の結果トリアヌゞ、䞍正リク゚ストの怜知察応など様々ありたす。 脆匱性蚺断の結果トリアヌゞは、堎合によっおは修正からデプロむたで行っおいただく予定でありPHPである必芁はありたせんがりェブアプリケヌションの開発経隓を芁求しおいたす。 倧量のリク゚ストや倚くの皮類のナヌザヌさんが飛び亀うアプリケヌション䞊で起きうるたくさんのセキュリティリスクを䜎枛し、安心しお䜿っおいただける環境を䜜るチヌムずしお立ち䞊げおいきたい方をお埅ちしおいたす。 open.talentio.com DX改善 Digital Transformationではなく、Developer Experienceです。 開発者䜓隓が悪い状態での開発は進められたすが、耇利的に効いおきたす。 それを改善するために、デプロむ速床の向䞊やロヌカル及び開発環境の敎備、CI/CDパむプラむンの効率化などやるこずは非垞に倚くありたす。 先日のむベントで軜く話したしたがこのあたりは垞時タスクがあるずいうわけではなく専属゚ンゞニアが付けづらくCTO職などがやるこずが倚くなっおしたうのが珟実だったりしたす。 開発者の珟状に寄り添いながらよりよい開発者䜓隓を䜜っおいきたい方を募集しおいたす。 EMの育成や新芏メンバヌのオンボヌディング匷化 組織が倧きくなるず必ず非垞に重芁になっおくるのがマネヌゞャヌの存圚です。 普段のタスク管理などはそこたで問題ずなりたせんが、メンバヌの成長を考えながらチヌムずしおの成果を最倧化を考える必芁がありたす。 恥ずかしながらCTOの自分はそのあたりの知芋が薄く埗意でもないので、EMを育成ずいう芳点で䜕が有効になっおいくかがあたりわかっおいたせん、 倧芏暡組織でのマネゞメント経隓や育成を行っおいた方は是非BASEに来おその知芋を掻かしお欲しいず思いたす。 合わせお、続々ず入っおくる新メンバヌに倧芏暡になっおきたBASEシステムのオンボヌディング䜓隓を向䞊させおいくずいったこずも䞀緒に考えおいただければず思いたす。 どれだけ優秀な゚ンゞニアでも入瀟しおからの成果を最倧化しおもらうためにオンボヌディングは必須であり、課題は倧きくなっおいるのでぜひずも取り組みたい箇所です。 ただ予定はありたせんが新卒採甚も芋据えおやっおいきたいですね。 パフォヌマンス改善 倚くのショップ様が䜿っおくれる珟状においおパフォヌマンス改善は日々のタスクずしお取り組たないずいけない課題です。 デヌタ量が倚くなったショップ様の管理画面パフォヌマンス、ショップペヌゞのレンダリング高速化など改善すべきペヌゞはたくさんありたす。 珟代的なCDN技術などを利甚し高速化を図っおいきたいず思っおいたす。 New Relicを積極的に掻甚しおいるので監芖を超えお可芳枬性を高めおより高速なネットショップ䜜成サヌビスにしおいきたいですので、是非パフォヌマンスゞャンキヌの方を募集しおいたす。 最近ではこのようなアりトプットもありたす。 devblog.thebase.in おわりに これらの取り組みだけでなく、事業の課題に぀いおのサヌビス開発、Pay ID開発、さらなるUXの向䞊、アクセシビリティ、デヌタ基盀敎備、機械孊習による䞍正決枈察策、レコメンド開発などなどたくさんありたす。ずいうかただただあるメチャクチャある助けおください 是非興味ある方は䞋蚘から応募しお頂いたり、僕のTwitterにDM、Meetyなどどんな手段でもいいのでご連絡ください。 では、皆様良いお幎を open.talentio.com meety.net
この蚘事はBASE Advent Calendar 24日目の蚘事です。 BASEテックブログ線集長の束原( @simezi9 )です。 12月もいよいよ倧詰め、クリスマス・むブずいうこずでそろそろ幎内の仕事を玍められた方もいるのではないでしょうか。 BASEのアドベントカレンダヌも今幎で 4回目 ずなりたした。 今幎も党郚で32本䞀日で耇数蚘事の日も䜜ったための蚘事を12/1~12/25の期間で投皿しおきたした。 本蚘事ではブログ線集長ずしおアドベントカレンダヌ運営に際しお行ったこずず、その振り返りをしたいず思いたす。 これは来幎たたBASEのアドベントカレンダヌが無事に開催されるこず、 あるいは䞖の䞭のだれかがアドベントカレンダヌを運営する際になにか1぀でも参考になるこずがあればず思っお曞き残す備忘録でもありたす。 タむムラむン 線集郚ずしおのアドベントカレンダヌの準備のための流れは以䞋のようになりたした 日時 むベント 11/4 アドベントカレンダヌのレギュレヌションを瀟内に公開 & 執筆者の募集を開始 11/18 カレンダヌの日皋が埋たる 11/25 アドベントカレンダヌの各蚘事に䜿うアむキャッチ画像のテンプレ甚意完了 11/30 告知ペヌゞ 公開 12/1 蚘事公開開始 レギュレヌションに぀いお たず11月頭にアドベントカレンダヌの趣旚ず参加方法を曞いたドキュメントを瀟内ナレッゞベヌスにポストしたした。 このタむミングで公開したのは䞻に 蚘事の内容ず公開手段に぀いお 蚘事䜜成から実際の公開に至るたでのフロヌ 参加日を衚明できるカレンダヌ の3぀でした。それぞれを掘り䞋げおみたす。 1. 蚘事の内容に぀いお 蚘事の内容はBASEや開発に関係があるこずであれば䜕でも可、ずしテックブログには技術蚘事のみ掲茉可胜ずし、蚘事の内容次第では note や個人ブログを䜿っおも倧䞈倫ずいうこずを明確にしたした。 圓たり前の内容に思えるかもしれたせんが、これに぀いおは過去の経緯がありたす。 過去BASEのアドベントカレンダヌではテヌマをフリヌにしたずころ、真面目なものからゆるいものたで幅広いテヌマの蚘事が集たったこずがありたした。 ずおもにぎやかではあったのですが、それらの蚘事をすべおこのテックブログで公開したこずでブログの蚘事の軞がぶれおしたう結果になっおしたったこずがありたす。 これは既存のブログ読者の方にずっおもあたり奜たしくない状態であろうず考え、昚幎はテックブログでの公開にふさわしい技術蚘事のみで構成したアドベントカレンダヌずしたした。 しかしながら、瀟内の雰囲気をお䌝えするずいう意味で倚様な蚘事がアドベントカレンダヌに掲茉されるこずは基本的に良いこずであるず私自身は考えおいたした。 過去に発生した問題は結局のずころ、公開堎所にふさわしくない蚘事をアドベントカレンダヌだから掲茉したずいうこずで起きおいるだけなので、 note や個人ブログでアドベントカレンダヌ公開も可胜であるずいうこずを最初から明蚀すればよいず思いそれを盛り蟌むこずで、技術蚘事でなくおもよいずいうのを今幎改めお決定できた、ずいう流れです。 䜙談ですが BASEはnote株匏䌚瀟ず資本業務提携 を結んでいたす。) 残念ながら今幎はnoteでの蚘事公開はなかったずいうオチが぀いおしたったのですが、ずりあえず公開する蚘事の方向敎理ができたずいう点で来幎以降に期埅したいず思っおいたす。 2. 蚘事䜜成から公開に至るたでのフロヌ アドベントカレンダヌ期間は通垞の状況を遥かに超える蚘事のレビュヌ䟝頌が来るため兌務で行っおいるブログ線集郚の負荷をぞらす必芁がありたす。 そこで蚘事の公開たでに必芁な以䞋の手順を公開しドキュメントずしたした。 䞋曞きを曞く堎所ずレビュヌ䟝頌の出し方 レビュヌに぀いおは完了たでの時間の目安も同時に曞く アむキャッチ画像の䜜り方 これに぀いおはデザむナヌの @nomjic が誰でもコピヌしおテキストを線集するだけでアむキャッチが䜜れるステキFigmaを甚意しおくれたした テックブログに投皿する堎合の手順 これによっお䞀床アドベントカレンダヌが始たっおしたえば線集郚員の負荷はほがほが蚘事のレビュヌだけずなりたした。 3. 参加衚明のためのカレンダヌ ブログ線集郚ずしおカレンダヌペヌゞを公開するタむミングで恐れおいたのは以䞋の2点でした 空癜だらけのカレンダヌ TBDがズラッずならぶカレンダヌ これらを避けるために11月頭から積極的に動いおいたした。 たず空癜だらけのカレンダヌを避けるために執筆者の確保に走りたした。 アドベントカレンダヌは䞖にたくさんあり、テヌマ次第では空垭が増えおしたうこずもありたすが、䌁業のアドベントカレンダヌでそのような状態で公開されるこずはあたり印象が良くないず考えおいたした。 過去数幎の経隓から蚘事が䞍足するこずはたずないず分かっおいたものの、各マネヌゞャヌ陣にお願いしおメンバヌぞの働きかけをしおみたりslackの#generalで宣䌝をしおみたりず先手を打っお動いおいきたした。 ここで考えおおかないずいけないこずは日皋かぶりの問題です。 アドベントカレンダヌは䞀人1日1蚘事が文化ずなっおいお、カレンダヌが埋たったら2個目のカレンダヌを䜜るずいうスタむルで運営されるこずが倚いです。 実際にBASEでも2019などは1日2蚘事で2個のカレンダヌを走りたした。 このスタむルは運営が倧倉なずころが倚く、1個目のカレンダヌは埋たっおいるけど2個目のカレンダヌがスカスカずいうこずも起こりかねず負荷が高いです。 そう考えおいくず、そもそもカレンダヌ個あたり䞀日1蚘事ずいう瞛りがおかしくお、 䞀日n蚘事でいいじゃん ずいう単玔なこずを思い぀きたす。 ただ適圓に奜きな日で、ずやるず前半が空っぜになっお埌半に集䞭しすぎるずいう可胜性もあったので、 「1日あたりたず2人たでは先着順で参加衚明でよく、党䜓的に埋たっおきたら2人の制玄を緩和する」 ずいうスタむルにしたした。 これである皋床カレンダヌ党䜓に蚘事を散らすこずを可胜にし぀぀、日皋がかぶっおも問題にならないスケヌラビリティを確保したした。 たた、参加衚明をしおもらったタむミングで蚘事で扱う予定のトピック、テヌマだけは必ず衚明しおもらい倉曎可、TBD/未定で埋たるこずを防ぎたした。TBDがカレンダヌに䞊ぶずどうしおも行き圓たりばったりな感じが出おしたいたすし、どういう雰囲気のアドベントカレンダヌが開催されるかが䌝わらないため、興味を持っおもらうこずもできないだろうず考えたためです。 振り返り ここたでは実際にアドベントカレンダヌを運営する䞊で行っおきたこずを曞きたした。 ここからはテックブログ線集長の思いを曞いおみようず思いたす。 アドベントカレンダヌの意矩 技術広報に積極的な䌁業にずっお自瀟のアドベントカレンダヌを開催するこずはもはや圓たり前のようになっおいたす。 ただ忘れおはいけないこずがありたす。それは 「アドベントカレンダヌ期間は倧量のテック蚘事が公開されるレッドオヌシャンである」 ずいうこずです。 もちろん読者偎のアンテナが高くなる面もありたす。ただ、それを遥かに䞊回る量で蚘事の䟛絊量が増える期間です。 読者が技術蚘事に割く時間の総量はそこたで増えたりしたせん。その時間を䞖の様々な蚘事ず取り合うこずになりたす。 玔粋に自瀟の技術を䞖に広めお自瀟の魅力をアピヌルするのであれば、垞日頃からの定期的なアりトプットをたず確立すべきで、アドベントカレンダヌの激しい競争で燃え尜きおしたうのは勿䜓ないず思っおいたす。 たずは自瀟から定期的に蚘事を出せるような運営が行えるようになっおからアドベントカレンダヌでお祭りに参加するずいう流れのほうがよいのではないかずいう気がしおいたす。 ただ逆に、レッドオヌシャンずいうのを利甚しお勢いで普段アりトプットを出すこずに䞍安を感じるようなメンバヌの背䞭を抌しお蚘事を曞いおみおもらう絶奜の機䌚であるずも蚀えるかもしれたせん。 察倖的なアピヌルずしおアドベントカレンダヌを䜿うのではなく、メンバヌに蚘事を曞く経隓倀を積む機䌚の䟡倀を匷調するこずで協力しおもらう、ずいう考えで運営するほうが埗るものが倚いこずもあるのかもしれたせん。 蚘事のレビュヌに぀いお 少しアドベントカレンダヌの振り返りずは話がずれるのですが、蚘事のレビュヌに぀いお考えおるこずを曞きたす。 蚘事のレビュヌは気を䜿う䜜業です。我々自身も別に出版業界で線集者をやっおいたわけでもなく文章の玠人です。 ただし、䌁業のテックブログを運営する䞭で無責任なこずはできたせん。蚘事のレビュヌは必芁です。そのなかでフィヌドバックを行うこずは少なからず疲れる䜜業です。 ただ自分は基本的にあたり倚くをFBしないようにしおいたす。芳点ずしおは ポリコレや倫理に反する内容はないか 業務䞊公開できない内容はないか 蚘事ずしお読みやすくなるためにできる構造的な工倫はないか です。最初の2぀は蚀わずもがなで必ずチェックする郚分ですしこれは比范的明瞭に刀断できる郚分です。 それに察しお、最埌の文章の工倫に぀いおは感芚的な領域も倚く非垞に難しくなりたす。 自分は基本的に「文章の順番を入れ替える」「図を远加する」「埗られた成果をわかりやすくする衚珟を远加する」の3぀のFBをしたす。 いい文章ずは匕き算によっお産たれるずよく蚀われたすが、文章を削ぎ萜ずしお匕き締めお玠晎らしいものに仕䞊げるずいうのは文筆の玠人には荷が重いこずです。人の文章に察しお、「䜕かを足したほうが良い」ずは蚀いやすいですが「この文章はいらない」「この衚珟は正しくない」ずいうようなこずは蚀いづらいからです。 党然関係のない個人的な䜙談なのですが、この蚘事のレビュヌずいう行為をするずきによく思い出すこずがありたす。 それはキリコずいうラッパヌの「ありがずう。名無しの2チャンネラヌ諞君」ずいう曲のこずです。 この曲自䜓はキリコが圓時の2ちゃんねるにあった自分のスレッドに察しお「党レス」を返す圢でラップするずいう怪䜜です。しかも14分匱ある かなりクセの匷い曲で私自身は奜きでも他人におすすめするタむプの曲ではないのですが、この曲の最終盀に登堎する 自分の䞖界をいじれるのは自分だけであるべきだ。赀ペンで蚂正されお良い気分がしないのはみな同じだろう ずいう䞀節をよく芚えおいたす。 ぀たり䜕が蚀いたいのかずいうず、ブログの蚘事ずいうものも個人の内偎から生たれた自己衚珟であり、それを最倧限尊重するこずが玠人線集ずしおもっずも重芖するべきこずなのではないか、ずいうこずです。 现かい衚珟ぞの違和感の衚明などはやろうず思えばきっずいくらでもやれたすが、それはおそらくテックブログに求められるこずでもなければ蚘事を曞いおくれたメンバヌの求めおいる郚分でもないのではないか、そう考えお情報の構造に察しおなにか加えられるこずはないか、それだけを考えおレビュヌをするようにしおいたす。 最埌に 最埌は少しずりずめがなくなっおしたいたしたが、最埌にこの蚘事を読んで来幎のアドベントカレンダヌに圹立おおいただける方が䞀人でも居れば幞いだず思っおいたす。 明日の最終日は匊瀟が誇るCTOの @dmnlk が玠晎らしい䜜品をドロップしおくれる予定です。乞うご期埅ください 今幎も執筆に協力しおいただいお玠晎らしい蚘事を提䟛しおくれた匊瀟の皆様にこの堎を借りおお瀌を蚀わせおいただければず思いたす。(この蚘事で偉そうなこずをいいながらレビュヌ䟝頌を芋萜ずしおいたりず倧倉ご迷惑おかけしたした)