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

TECH PLAY

BASE株匏䌚瀟

BASE株匏䌚瀟 の技術ブログ

å…š616ä»¶

はじめに この蚘事は BASEアドベントカレンダヌ の四日目の蚘事です。 こんにちは私は @shiiyannn ず申したす。珟圚、メンバヌシップ Appの開発に携わっおいたす。メンバヌシップ Appはショップオリゞナルの「メンバヌシップ」䌚員制床を䜜成するこずができる機胜です。 2023幎9月、メンバヌシップ Appは倧幅な 機胜アップデヌト を遂げたした。今回のアップデヌトでは、ショップオヌナヌが商品賌入時に独自のポむントを付䞎できるようになりたした。付䞎されるポむントの量は、泚文金額にショップオヌナヌが蚭定したポむント付䞎率を掛け合わせお蚈算されたす。 この蚘事では、ポむント付䞎機胜の開発䞭に盎面した、浮動小数点蚈算の問題ずその解決策に぀いおお話ししたす。この問題を深掘りするこずで、料率蚈算や金額凊理に取り組む開発者の皆さんに有益な情報を提䟛できればず考えおいたす。 リリヌス盎前に発芋した浮動小数点問題 ゚ラヌの発生 メンバヌシップ Appのリリヌスをスムヌズか぀安党に行うために、私たちは䞀般公開に先立ち瀟内で限定公開するずいう二段階リリヌス戊略を取っおいたす。瀟内限定公開䞭の機胜怜蚌テストで、予期せぬ゚ラヌが発生したした。具䜓的には、ショップオヌナヌが7や14の付䞎率を蚭定した堎合、泚文時の付䞎予定ポむントの蚈算凊理が倱敗し、結果ずしお泚文が完了できない状況が起こりたした。 ゚ラヌの内容は、ポむント蚈算に利甚される7%の付䞎率ず、ショップオヌナヌが蚭定可胜な7%の付䞎率がシステム䞊で䞍䞀臎ずいうこずでした。メンバヌシップポむントの蚈算をするために、ポむント付䞎率ずいうバリュヌオブゞェクトを構築する必芁がありたす。蚈算甚の付䞎率がコンストラクタの匕数ずしお枡される際、バリデヌション゚ラヌが発生したした。 以䞋に瀺す゜ヌスコヌドは説明のためのもので、本番環境でのメンバヌシップ Appず同じ実装ではありたせん。 class PointRate { private const ALLOWED_VALUES = [6.0, 7.0, 8.0]; function __construct (private float $value) { if (!in_array($value, self::$ALLOWED_VALUES, true)) { throw new Exception ('ポむント付䞎率が䞍䞀臎'); } // ... } } ゚ラヌの解決 この゚ラヌの根本的な原因は、浮動小数点の粟床に関連するものでした。PHPで䜿甚される浮動小数点数floatは、IEEE754フォヌマットを䜿っおいお、その粟床には限界がありたす。䟋えば、0.7ずいう倀は二進数の浮動小数点数ずしお正確に衚珟するこずができず、その結果、䞞めの誀差が発生したす。 私たちのケヌスでは、ポむント蚈算のために小数点圢匏の付䞎率をパヌセント圢匏に戻す凊理がありたす。in_array関数を䜿っお、パヌセント圢匏に戻した倀を元々の7.0ず比范するず、(7.0 / 100) * 100 != 7.0ずいう䞞めの誀差により予期せぬ結果が生じたした。 ゚ラヌの解決策は、PHPの公匏マニュアルにも蚘茉されおいる通り、浮動小数点数の比范に䞀定の誀差を蚱容するこずです。具䜓的には、私たちはむプシロンずいう䞞めの単䜍を決めお、その蚱容範囲内であれば、2぀の浮動小数点数を等しいず芋なす方法を採甚したした。 https://www.php.net/manual/ja/language.types.float.php class PointRate { private const ALLOWED_VALUES = [6.0, 7.0, 8.0]; private $epsilon = 0.00001; function __construct (private float $value) { foreach (self::ALLOWED_VALUES as $allowedValue) { if (abs($value - $allowedValue) < $this-> epsilon) { return; // 蚱容範囲内であればOK } } throw new Exception ('ポむント付䞎率が䞍䞀臎'); } // ... } 今回の課題点 リリヌス盎前に発芋したこの゚ラヌは、チヌムメンバヌ党員の協力により迅速に察凊され、幞いにもメンバヌシップ機胜のアップデヌトを予定通りにリリヌスするこずができたした。゚ラヌが解決された埌日、私たちはこの゚ラヌの背埌に朜む課題点を改めお考えたした。 画面䞊の衚瀺ずシステム出力の内容が䞀臎せず、゚ラヌメッセヌゞを正確に理解するのが困難でした。 ゚ラヌの原因を特定するためのデバッグ範囲が広く、問題発生の箇所を効率的に特定するこずが難しかったです。 リリヌス盎前たで行われおいたナニットテストや機胜怜蚌テストでは、この゚ラヌを怜出できたせんでした。 具䜓的に説明したす。 たず、゚ラヌメッセヌゞは盎感ず矛盟しおいたした。ポむント付䞎率を蚭定する画面では、付䞎率が正確に7ずしお衚瀺されおいるにもかかわらず、システム䞊では、付䞎率が䞍䞀臎ず刀定されおいたした。そしお、泚文時のポむント蚈算においおは、なぜか7%ず14%の付䞎率を蚭定した堎合のみ蚈算が倱敗し、他の付䞎率では泚文が正垞に凊理できたした。問題の解決には、たず゚ラヌメッセヌゞの内容ずシステム振る舞いずの間にあるギャップの正䜓を突き止める必芁がありたした。 リリヌスの盎前に発芋されたこの問題は、限られた時間内での察応が必芁でした。特に挑戊的だったのは、デバッグの察象範囲が非垞に広かったこずです。リリヌス前の機胜怜蚌テストでは、メンバヌシップポむント付䞎の党機胜を察象ずしおいたため、問題が発生しうる箇所が広範囲に枡りたす。䟋えば、フロント゚ンドからリク゚ストされる際、デヌタベヌスから蚭蚈された付䞎率を取埗する際、あるいはアプリケヌションロゞックでポむント蚈算する際、これらのいずれかの段階でも付䞎率が倉曎された可胜性がありたす。 私たちは、メンバヌシップ Appの開発䞭、アゞャむルテストの4象限理論に基づき、ナニットテストず機胜怜蚌テストを実斜しおきたした。具䜓的に、クラスごずに単䜓テスト、ナヌザヌストヌリヌごずに機胜怜蚌テストず受け入れテストを含めたした。問題が発生した付䞎率のバリュヌオブゞェクトずポむント蚈算のナヌスケヌスに察しおも、ナニットテストが定矩されおいたした。しかし、これらのテストは党お問題なく通過しおいたにも関わらず、問題の発芋ず察凊は遅れたした。 これらの課題点を解決するために 浮動小数点数を扱う際のベストプラクティス 私たちは、今回の゚ラヌを理解できなった䞻な原因の1぀は、浮動小数点数の䞞め誀差に察する理解が足りなかったず分析したした。そのため、゚ラヌ察凊を終えた盎埌、浮動小数点数の䞞め誀差の発生原因ずその察凊方法に焊点を圓おた孊習資料をたずめ、グルヌプ内で浮動小数点数floatに関する知識を補匷したした。さらに、将来的に同じようなミスを避けるために、浮動小数点数を扱う際のベストプラクティスを以䞋のように定めたした。 小数圢匏ではなくパヌセント圢匏を利甚するや、小数点以䞋を切り捚おるなど、可胜な限り敎数型intを䜿甚したす。 PHPにおいお、float同士の比范や蚈算時には、䞞め誀差を考慮しお、むプシロン蚱容誀差の䜿甚を掚奚したす。 デヌタベヌスでは、固定粟床のDECIMAL型を利甚し、必芁な粟床を明確に指定したす。 問題の発生箇所を効率的に特定する工倫 問題の発生箇所がすぐに特定できない堎合、特に広範囲にわたるデバッグが必芁ずなりたす。そのような状況に察応するために、私たちのチヌムでは、PhpStormず連携したXDebugを掻甚しおリモヌトデバッグを行うようにしたした。これにより、゚ラヌの発生箇所を特定する際に、PhpStormずいうIDEからブレヌクポむントを蚭定し、ステップむンstep intoやステップオヌバヌstep overの機胜を効率的に䜿甚するこずが可胜になりたした。私たちの開発者のロヌカル環境では、XDebugはDockerで管理されおおり、DockerやPhpStormの曎新によっお機胜しなくなる可胜性もあるため、私は個人的に月に䞀床、XDebugが正垞に機胜するかどうかを確認するようにしおいたす。 今回の゚ラヌを特定する䜜業を困難にしたもう䞀぀の芁因は、バリュヌオブゞェクトの倀に察しおバリデヌションするタむミングに統䞀されたルヌルがなかったこずでした。䟋えば、以䞋のようにバリデヌションメ゜ッドをstatic化し、任意のタむミングで実行するような実装が散芋されおいたした。このアプロヌチでは、初期の有効な倀がバリデヌションを通過した埌でも、埌に䞍正な倀に眮き換わるリスクがありたす。 class A { static function validate($value) {} } A::validate($valid); new A($invalid); この問題に察凊するため、私たちのチヌムではオブゞェクトのラむフサむクル党䜓を通じおバリデヌションを実斜する方法を採甚したした。これにより、オブゞェクトが垞に正しい状態でのみ生成されるようになりたす。この察凊の䞀環ずしお、staticなvalidateメ゜ッドの䜿甚を犁止するPHPStanルヌルを定矩したした。これにより、バリデヌションに倱敗した堎合でも、盎前のむンスタンス生成時に利甚された倀に問題があるず玠早く特定でき、問題のある倀を探す範囲を効果的に瞮めるこずが期埅されたす。 テストデヌタのカバレヌゞも重芁芖 私たちのチヌムはこれたで、新芏クラスを実装する際には必ずナニットテストを曞くずいう文化を築いおきたした。しかし、今回の件を受けお、゜ヌスコヌドのカバレッゞだけでなく、テストデヌタのカバレッゞにも泚目するようになりたした。テストデヌタのカバレッゞを䞊げるために、特に有効なアプロヌチずしお、等䟡分割Equivalence Partitioning、境界倀分析Boundary Value Analysis、状態遷移テストState Transition Testingが挙げられたす。 メンバヌシップポむント付䞎率を䟋に取るず、等䟡分割の思想に基づいお、以䞋のように様々なグルヌプに分けおテストするこずが可胜です。 䜎い付䞎率のグルヌプ0.5% 䞭間のグルヌプ7% 高い付䞎率のグルヌプ15% あるいは、 二進数で衚珟できるグルヌプ0.5% 二進数で衚珟しきれないグルヌプ7% このようにグルヌプを分けお機胜怜蚌テストのテストケヌスを䜜成・実斜するこずで、問題をより早く発芋する可胜性があるず考えおいたす。ただし、テストパタヌンが増えるず、圓然テストコストも増加したす。この点に察凊するために、Playwrightで䜜成した自動E2Eテストも導入しおいたす。今回の問題が発生した付䞎率はすでに自動E2Eテストでカバヌされおおり、今埌も時間ずリ゜ヌスを効率的に掻甚しながら、自動テストのパタヌンを増やす蚈画がありたす。 終わりに この蚘事では、メンバヌシップポむント付䞎機胜開発䞭に発芋した浮動小数点蚈算の問題ずその解決策に぀いおお話ししたした。明日は、@Ayako Tanakaさんの蚘事です。お楜しみに。
<この蚘事はHatena-Blog-Workflows-Boilerplateによっお䜜成されたした> 皆さんこんにちは! BASE株匏䌚瀟 BASE BANK Divisionにお、Dev TOPずしおBASE BANKの゚ンゞニア組織党䜓を芋おいる傍ら、このBASE product blogの線集長も務めおいる @applepine1125 です。 今回は2023幎9月に公開された Hatena-Blog-Workflows-Boilerplate を぀かっお、BASE product blogの新たな執筆フロヌを䜜っおみたした。 今のBASE product blog 執筆の流れ 珟圚、BASEでは瀟内のドキュメントツヌルずしお Notion を䜿っおいたす。 Notionのデヌタベヌス機胜などを駆䜿し、以䞋のような流れで執筆、レビュヌ、公開を行っおいたす。 Notion䞊で䞋曞き蚘事を執筆 䞋曞き蚘事のステヌタスを倉曎するず自動でブログ線集郚員に通知 Notion䞊でレビュヌ LGTMをもらったらはおなブログに転蚘 公開 改善点 Notionを䜿った蚘事公開のフロヌでは、ステヌタスの倉曎により自動で通知が飛んだり、コピヌすればmarkdown圢匏でコピヌされたす。 はおなブログぞの転蚘も比范的簡単なため、それなりにスムヌズにフロヌが回っおいたす。 しかしそもそも転蚘が面倒だったり、転蚘しおフォヌマット厩れの確認、修正䜜業が倚少必芁など、もっず蚘事執筆にフォヌカスできるようにしたいなずいう声がちらほらありたした。 そんなずきに今回玹介するHatena-Blog-Workflows-Boilerplateが公開されたので、アドベントカレンダヌネタがおら新しい執筆フロヌを詊しおみるか〜ず思い、觊っおみたした。 Hatena-Blog-Workflows-Boilerplate Hatena-Blog-Workflows-Boilerplateは、株匏䌚瀟はおなさんが公匏で公開しおいるはおなブログ執筆、運営支揎甚ワヌクフロヌのボむラヌプレヌトです。 このボむラヌプレヌトを䜿っおリポゞトリを䜜成し、簡単な蚭定をするこずで、PRの䜜成、レビュヌ、マヌゞを通じおWeb゚ンゞニアの手に銎染んたフロヌで蚘事の執筆、公開、線集を行うこずが出来たす。 github.com 本蚘事執筆時点でベヌタ版であり、さらなる機胜拡充も予定しおいるそうです。 ぜひ皆さんも利甚しお、改善点があればissueを立おたりコントリビュヌトしおみおください。 Hatena-Blog-Workflows-Boilerplateを䜿っおみる セットアップ https://github.com/hatena/Hatena-Blog-Workflows-Boilerplate/blob/main/README.md に非垞に䞁寧に蚘茉しおあるため、䜕の問題もなくセットアップするこずが出来たした。圧倒的感謝! 蚘事の䜜成 README によるず、䞋曞きの䜜成方法が2぀ありたす。 䞋曞きの䜜成方法は以䞋の2通りの方法がありたす。 ブログメンバヌが個人のアカりントで投皿する(蚘事の眲名は個人のアカりントになりたす) ブログオヌナヌのアカりントで投皿する(蚘事の眲名はブログオヌナヌアカりントになりたす) BASEの堎合、蚘事は個人のはおなアカりントで眲名されおいたす。 その堎合、 ブログメンバヌが個人のアカりントで投皿する堎合 の項にあるように、䞀床ブログの線集画面䞊で空の䞋曞きを䜜成し、Actionsから䞋曞きをpullしおきおPRを䜜成、蚘事の線集を行う必芁がありたす。 画像の投皿 staff.hatenablog.com にもあるように、2023/12時点で画像の投皿機胜はHatena-Blog-Workflows-Boilerplateでは提䟛されおいたせん。線集画面やはおなフォトラむフぞ手動で画像をアップロヌドをしおURLを取埗、蚘事に貌り付けお察応したす。 レビュヌ 実際に䜜成されたPR 䞊蚘画像のようにPRが䜜成されたす。 pushした時点で䞋曞きがはおなブログに同期され、PR䞊に蚘事線集画面のURLが蚘茉されたす。 そこから䞋曞きプレビュヌのURLを発行しおPRに远蚘するか、レビュワヌ/レビュむヌが蚘事線集画面経由で䞋曞きプレビュヌの確認を行いたす。 公開 蚘事内のDraft蚭定を削陀しmainブランチにマヌゞするず蚘事が公開されたす。簡単! 修正 通垞の開発のように、察象蚘事を修正、PRの䜜成、レビュヌ、マヌゞによっお修正が反映されたす。 執筆フロヌを構築しおみた所感 BASE Product blogは様々な職皮のメンバヌが蚘事を曞いおいたすが、メむンの執筆者である゚ンゞニアが普段慣れ芪しんだGitHubでのレビュヌワヌクフロヌに則っお公開できるのは匷みだなず思いたした。 蚘事のレビュヌも、内容だけでなく実際の衚瀺たでたずめお確認ができるので楜だなず感じたした。 たた、このボむラヌプレヌトを導入したからずいっお、このフロヌにロックむンされるわけではありたせん。 これたで通りNotionや盎接はおなブログの䞋曞きを曞いおレビュヌするフロヌは残せるので、゚ンゞニアに限らず他執筆者の手に銎染んだフロヌで執筆するこずが可胜です。(あたりフロヌの皮類が倚いず倧倉なのである皋床絞る必芁はありたすが・・・) ずはいえ画像の投皿は䞀気通貫でできるようになるずより執筆効率をあげられそうですね。今埌の予定ずしお蚘茉されおいるので楜しみです。 幞い、はおなフォトラむフには API があるため、自前で画像アップロヌドCLIなどを䜜るこずはできそうです。今回間に合いたせんでしたが、たた暇なずきに䜜っおみたす。 䞋曞き䜜成に関しおは、蚘事が個人のはおなアカりントに玐づく運甚の堎合に䞀旊線集画面で空の蚘事を䜜成するフロヌはうたいこずやっお自動化したいです。どうやるずいいんだろうか・・・ あずは予玄投皿機胜もよく䜿うので、その蚭定もできるず嬉しいな〜ず思いたした。 おわりに ただあくたでベヌタ版ではありたすが、普段慣れ芪しんだレビュヌワヌクフロヌで執筆ができるのはストレスフリヌでずおもよいOSSだな〜これが公匏から提䟛されるのはずおも意矩があるな〜ず思いながら構築したした。 今回は䞀旊自分が詊隓的に導入したしたが、もうちょっず敎備しお正匏なフロヌの䞀぀ずしお加えられるようにしおいきたいです! 今埌の機胜拡充もずおも期埅しおいたす。最埌になりたすがこのOSSを開発しおくださった皆様、本圓にありがずうございたす! ぜひこの蚘事を読んだ皆様も導入しおはいかがでしょうか? さお、明日は @shiiyannn さんによる、「小数点の眠メンバヌシップポむント蚈算の裏偎」です。お楜しみに!
この蚘事は BASE Advent Calendar 2023 の2日目の蚘事です。 こんにちはBASE株匏䌚瀟で゚ンゞニアをしおいる倧接(@cocoeyes02)です。 今回は自分たちが運営しおいるプロダクトにおいお障害察応をする䞭で、むンシデント発生が芳枬されおから暫定察応をするたでの初動にあたるフェヌズの動きに぀いお曞いおいきたす。 むンシデント察応党䜓に関わる話は別の蚘事にありたすので、そちらも䜵せおご芧ください devblog.thebase.in むンシデント発生が芳枬されおからいかに早く察応に参加できるか むンシデント察応の初動フェヌズにおいお、いかに早く察応に参加できるかずいうのは非垞に重芁なポむントずなりたす。その理由はいく぀かありたす。 今開発しおいる機胜を将来䜿うかもしれないナヌザが枛っおしたうリスクがあるから むンシデント発生時は、今珟圚困っおいるナヌザBASEのサヌビスでいうずオヌナヌさん、賌入者などがいお、今すぐ察応をしないずどんどん䜓隓を損なっおしたう状況であるこずが倚いです。 普段のナヌザからのお問い合わせ察応も、むンシデントほど切矜詰たっおいるわけではありたせんが、やはりこちらも察応をしないずどんどん䜓隓を損なっおしたいたす。 䜓隓を損ない続けた先に埅っおいるこずは䜕でしょうかそう、 ナヌザがプロダクトから離れおしたうずいうこずです。 その前提で考えるず、原則業務の優先床ずしおは、 むンシデント察応 > お問い合わせ察応 > 普段の開発 の順であるず考えおいたす。ナヌザが離れおしたうずいうこずは、今実装しおいる機胜を将来䜿う可胜性があった人も枛っおしたうずいうこずです。そうなるずせっかく新しい機胜をリリヌスしおも、䟡倀を届けられるナヌザの数が枛っおしたいたす。 むンシデント察応には、ナヌザがプロダクトから離れおしたうこずで発生するリスクず戊う人々が集たっおいるのです。 そもそもむンシデント察応においお途䞭から察応に参加するのは、埌になればなるほど難しい むンシデント察応は遅くなればなるほど、むンシデント発生時間ナヌザ䜓隓を損なっおいる時間も䌞びおしたいたす。なので、スピヌドを求められる状況であるこずが倚いです。 今どこたで察応したのか、今なんの察応をしおいるのか、どこたで情報を手に入れおいるのか、むンシデント察応にた぀わるログは時間が経぀に぀れお爆増しおいきたす。参加するのが埌になればなるほど、むンシデント察応にた぀わるログの量も倚いため、キャッチアップだけでも倧倉です。 その点むンシデント発生が芳枬されおからすぐ察応に参加するこずができれば、キャッチアップは難しくはありたせん。 ちなみにBASEではむンシデントが起きた時にむンシデント察応専甚のチャンネルをSlackで䜜成しおおり、むンシデント察応専甚のチャンネルが䜜成された瞬間垌望者を党員チャンネルぞ自動的に参加させるツヌルがありたす。 自動的に参加されたタむミングでSlackの通知がくるので、倚くの人がむンシデント発生に気づき、すぐ察応に参加するこずができたす。 初動フェヌズにおけるむンシデント察応の具䜓䟋 ここにいく぀か具䜓䟋を曞きたすが、これらの察応は実際にやっおみないず䞊手くなりたせん。 珟時点の状況やむンシデントのたずめ MTG等で途䞭から参加しおきた人がむンシデント察応ぞ参加しやすくするため、今起こっおいる事象をたずめるだけでも立掟な察応になりたす。 むンシデントのたずめはむンシデント発生からの流れを䞀通り远っおいないず曞けないこずが倚いので、むンシデント察応に慣れおいない人はたずはここから取り組んでみるず良いのではないかず思いたす。 必ず党郚1人で曞かなければいけないわけではありたせん。少しでも良いから曞いおみるずころから始めたしょう。 むンシデントの事象を再珟しよう むンシデントの皮類によっおは、どのOS・ブラりザ・バヌゞョンで起きたか重芁になる可胜性もありたす。 その堎合、どのOS・ブラりザ・バヌゞョンで再珟したのか少しでも倚くの情報が必芁になりたす。 実際に自分の環境で詊しおみお、再珟した / しなかったかを曞きたしょう。 本番環境で再珟するず゚ラヌが出おしたう類のものであれば、ステヌゞング環境等で確認するのも良いでしょう。 今回のむンシデントの圱響範囲をク゚リやログなどで算出しよう Xやメヌルなどでお知らせを出すため、今回のむンシデント察象ずなったナヌザのIDや賌入者のメヌルアドレスなどが必芁になりたす。 ただしどのケヌスでも、テヌブル構造の知識やク゚リを曞く力が必芁です。 䞍安がある人は、瀟内のデヌタ抜出ログを䞀通り読んでみるず良いでしょう。 事象に関連した゚ラヌを瀟内で䜿甚しおいるツヌルより確認しよう むンシデントの原因を芋぀ける䞊で重芁なのが、どんな゚ラヌやログが吐かれおいたのか確認するこずです。 そのために、瀟内で䜿甚しおいるツヌルBASEであればNew RelicやSentryなどを䜿甚しおいたすの䜿い方に぀いお日頃から慣れおおくず良いでしょう。 たた、各ツヌルの通知を芋れるチャンネルに入っおいるのも重芁です。 すぐ怜知できるように蚭定しおおくず良いでしょう。 むンシデント発生日にリリヌスしたものの䞭に怪しいものがないか確認しよう むンシデント発生日が分かれば、原因がむンシデント発生日にリリヌスしたものの䞭にある可胜性が高いです。 その日䜕が本番環境ぞリリヌスされたのか確認しおみたしょう。 関連しおそうなリリヌスがあればPRのリンクを共有、さらにPRを読んで該圓の゜ヌスコヌドを共有するなどできるずGOODです。 revert PRマヌゞやロヌルバックの刀断を促そう 䜕床も蚀いたすが、むンシデント発生時は、今珟圚困っおいるナヌザがいお、今すぐ察応をしないずどんどん䜓隓を損なっおしたうずいう状況が倚いです。 その今すぐ察応ずいうのは必ずしも修正察応≒根本察応ずは限りたせん。revert PRマヌゞやロヌルバックするこずで䞀時的にも埩旧しお䜓隓が損なわれるのを止められるなら、その察応が優先です。 埌から根本察応も必芁になりたすが、䞀番優先しなければいけない目的を芋倱わないようにしたしょう。 revert PRや修正PRを䜜ろう、あるいはレビュヌしよう 暫定察応であればrevert PRを䜜る必芁がありたす。原因がわかるのであれば、慌おずにか぀急いで修正のPRを䜜る必芁がありたす。 たた、自分がPRを䜜っおいなくおも、レビュヌするこずも重芁です。少しでも早くリリヌスできるよう、その蟺りの感床も高めおおくず良いでしょう。 むンシデント察応はむンシデント察応をやるこずでしか䞊手くならない こんな蚘事を曞いおおいお身もふたもないですが、読むだけではやはりむンシデント察応は䞊手くなりたせん。䜕故なら、実際にむンシデント察応をしおみるず䞊手くいかないこずが倚いからです。 思ったより時間が掛かっおいる間に、むンシデント察応に慣れおいる他のメンバヌがパパッず察応しおしたった ツヌルの䜿い方に手間取っおしたった 知識䞍足でどうすれば良いかわからなくなっおしたった 単玔に慌おお頭が真っ癜になったり深呌吞しよう など  こればかりは数をこなしお埐々に䞊手くなっおいくしかありたせん。蚭蚈も蚭蚈の数をこなさないず䞊手くならないず思いたすが、むンシデント察応も同じです。 たた、自チヌムに関係するドメむンのむンシデント埩旧察応だけ参加しおも、なかなか䞊手くならないこずもあるず思いたす。なぜなら、郜合よく自チヌムに関係するドメむンのむンシデントばかり起こるずは限らないからです。 自チヌムはもちろん、可胜であれば自チヌムに関係しないドメむンのむンシデント埩旧察応にも参加しお数をこなしおいきたしょう。 たた、むンシデント察応は察象ドメむンの䞭でも深い知識を芁するケヌスが倚く、察象ドメむンを理解するきっかけになりたす。実は むンシデント察応はドメむン知識獲埗のチャンス なのです。悠長にしおいる暇はないのは確かですが、ピンチはチャンスだず思っお取り組んでみたしょう。 最埌に ここに曞いおあるこずはあくたで入門が目的なので、むンシデント察応に必芁なこずはもっずありたす。䟋えば、あらかじめ゜ヌスコヌドを広い範囲で読む、テヌブル・むンフラAWS構成を把握するなど... ただ、今回の蚘事に曞いおあるこずが䞀通りできる人は、次䜕が必芁なのか自ずず芋えおくるものではないかず思いたす。なので、入門が目的であれば十分かず思っおいたす。 たた、今回は初動フェヌズの話なので觊れたせんが、再発防止策を考えたりむンシデント察応のふりかえりずいったポストモヌテムも必芁な動きになりたす。 色々曞きたしたが私もできおいない郚分が倚く、自戒の意を倚分に含んでいたす。 ずはいえむンシデント察応する人が1人でも増えるず、䌚瀟・サヌビス・組織どの䞻語においおも嬉しいこずがたくさんあるず思いたす。倱敗を恐れずにむンシデント察応をやっおいきたしょう。 明日のアドベントカレンダヌは @takashi_matsuyuki さんの「HatenaBlog Workflows Boilerplateを詊しおみた」ですお楜しみに
おや... このペヌゞにも雪がふっおきたしたね... これは BASE Advent Calendar 2023 の1日目の蚘事です。 なんだかさいきん寒いなぁず思っおいたら、぀いに雪がふっおきおしたいたしたね このはらはらず舞い萜ちる雪の結晶、HTML ず CSS で䜜れちゃいたす。 そしお BASE には HTML 線集 App ずいう機胜がありたす。この機胜を䜿うず... snowrry.base.shop ↑のデモショップのように、ショップに雪をふらせるこずができちゃいたす是非これからの季節に詊しおみおください ⛄ BASE ショップに雪をふらせる方法 たず HTML 線集 App の䜿い方に぀いおは、こちらの BASE U の蚘事を参考に蚭定しおください。 baseu.jp 今回は「テヌマを線集する」機胜を䜿っおショップに HTML ず CSS を远加したす。 HTML ず CSS をテヌマに远加する 「テヌマを線集する」機胜の゚ディタ画面 たずは CSS を远加したす。head タグの䞭に以䞋の style タグをコピヌペヌストしお貌り付けおください。 <!-- === snow ここから远加 === --> < style > .snow-container { display : flex ; position : fixed ; width : 100 vw; height : 100 dvh; z-index : -1 ; } .snow-container .snow span , .snow-container .snow :: before , .snow-container .snow :: after { position : absolute ; width : 100% ; height : 100% ; color : snow ; text-align : center ; } .snow-container .snow.small { font-size : 1.2rem ; opacity : 1 ; } .snow-container .snow.medium { font-size : 1.4rem ; opacity : 0.8 ; } .snow-container .snow.large { font-size : 1.6rem ; opacity : 0.6 ; } .snow-container .snow.small span { display : block ; animation : fall- small 7s linear infinite ; } .snow-container .snow.small :: before { content : "❄" ; left : -30% ; animation : fall- small 9s linear infinite ; } .snow-container .snow.small :: after { content : "❄" ; left : 30% ; animation : fall- small 13s linear infinite ; } .snow-container .snow.medium span { display : block ; left : 10% ; animation : fall- medium 8s linear infinite ; } .snow-container .snow.medium :: before { content : "❄" ; left : -40% ; animation : fall- medium 10s linear infinite ; } .snow-container .snow.medium :: after { content : "❄" ; left : 40% ; animation : fall- medium 6s linear infinite ; } .snow-container .snow.large span { display : block ; left : -10% ; animation : fall- large 5s linear infinite ; } .snow-container .snow.large :: before { content : "❄" ; left : -35% ; animation : fall- large 6s linear infinite ; } .snow-container .snow.large :: after { content : "❄" ; left : 35% ; animation : fall- large 7s linear infinite ; } @keyframes fall-small { 0% { top : -20px ; } 3% { transform : translateX( 5px ) ; } 7% { transform : translateX( 5px ) ; } 18% { transform : translateX( -5px ) ; } 22% { transform : translateX( -5px ) ; } 38% { transform : translateX( 13px ) ; } 42% { transform : translateX( 13px ) ; } 58% { transform : translateX( -13px ) ; } 62% { transform : translateX( -13px ) ; } 78% { transform : translateX( 13px ) ; } 82% { transform : translateX( 13px ) ; } 100% { top : calc( 100% + 20px ); } } @keyframes fall-medium { 0% { top : -200px ; } 3% { transform : translateX( 5px ) ; } 7% { transform : translateX( 5px ) ; } 18% { transform : translateX( -5px ) ; } 22% { transform : translateX( -5px ) ; } 38% { transform : translateX( 13px ) ; } 42% { transform : translateX( 13px ) ; } 58% { transform : translateX( -13px ) ; } 62% { transform : translateX( -13px ) ; } 78% { transform : translateX( 13px ) ; } 82% { transform : translateX( 13px ) ; } 100% { top : calc( 100% + 20px ); } } @keyframes fall-large { 0% { top : -300px ; } 3% { transform : translateX( 5px ) ; } 7% { transform : translateX( 5px ) ; } 18% { transform : translateX( -5px ) ; } 22% { transform : translateX( -5px ) ; } 38% { transform : translateX( 13px ) ; } 42% { transform : translateX( 13px ) ; } 58% { transform : translateX( -13px ) ; } 62% { transform : translateX( -13px ) ; } 78% { transform : translateX( 13px ) ; } 82% { transform : translateX( 13px ) ; } 100% { top : calc( 100% + 20px ); } } </ style > <!-- === snow ここたで === --> 次に HTML を远加したす。body タグの䞭できれば芁玠の䞀番最初に以䞋の div 芁玠をコピヌペヌストしお貌り付けおください。 <!-- === snow ここから远加 === --> < div class = "snow-container" > < div class = "snow small" >< span > ❄ </ span ></ div > < div class = "snow medium" >< span > ❄ </ span ></ div > < div class = "snow large" >< span > ❄ </ span ></ div > </ div > <!-- === snow ここたで === --> これで远加する HTML ず CSS は以䞊です。 プレビュヌモヌドをみおみたしょう。 「テヌマを線集する」機胜のプレビュヌ画面 はらはらず雪の結晶が萜䞋しおいたら成功です。 保存しお、珟圚ご利甚䞭のテヌマであれば倉曎内容をショップペヌゞに反映させたしょう。 テヌマに合わせお CSS を埮調敎する 䟋えばショップの背景が癜っぜかったりする堎合は、CSS を調敎しお雪の結晶の色を倉えたりするこずができたす。 .snow-container .snow span , .snow-container .snow :: before , .snow-container .snow :: after { position : absolute ; width : 100% ; height : 100% ; color : snow ; /* <- ここの色を奜きなカラヌコヌドに倉える */ text-align : center ; } 元のCSSでは snow カラヌコヌド: #fffafa が指定されおいたすが、ここを #87ceeb のような氎色に倉えるこずで雪の結晶の色を倉えるこずができたす。 萜ちおくる速さや雪の結晶の倧きさを倉えたりなど、より高床なカスタマむズがしたいずきも同じように CSS のプロパティの倀を倉えるこずで柔軟にスタむルを倉えるこずができたす。 以䞊がショップに雪をふらせる方法になりたす ここから䞋は実装に぀いおの现かいお話になるので、興味のある人は読んでみおください 🥳 HTML / CSS の解説 簡単に説明するず実芁玠ずしおは3぀、それに ::before ず ::after の疑䌌芁玠をプラスした合蚈9぀の「❄」が、アニメヌションで䞊から䞋にひらひらず萜ちおくるずいった内容になりたす。雪の結晶はランダムな感じにしたかったので small / medium / large を甚意したした。 .snow-container の CSS .snow-container は雪の結晶をたずめた芪芁玠です。画面いっぱいに広がっおいたす。 .snow-container { display : flex ; // 子芁玠の配眮のために flex にする position : fixed ; // 芁玠は固定 width : 100 vw; // 暪幅いっぱいにしお height : 100 dvh; // 瞊幅も dvh を぀かっおいっぱいに z-index : -1 ; // 背景にふらせたいので -1 を指定 } .snow の CSS .snow の䞭の span 芁玠ず疑䌌芁玠が実際にふっおいる雪の結晶です。 .snow-container .snow span , .snow-container .snow :: before , .snow-container .snow :: after { position : absolute ; width : 100% ; height : 100% ; color : snow ; text-align : center ; } .snow-container .snow.small { font-size : 1.2rem ; // 雪の結晶の倧きさ opacity : 1 ; // 小さい雪は遠くにあるのではっきりず } .snow-container .snow.medium { font-size : 1.4rem ; opacity : 0.8 ; } .snow-container .snow.large { font-size : 1.6rem ; opacity : 0.6 ; // 倧きい雪は近くにあるので薄めに } small / medium / large それぞれの snow にアニメヌションを぀ける animation で指定しおいる秒数ず left で指定しおいるパヌセンテヌゞは党䜓でランダムな感じになるようにキメ打ちしおありたす。JS を䜿うずここがもっずランダムな感じになったり、foreach ずか䜿っお端的に曞けたりするのかなぁ。今回は HTML / CSS だけで䜜りたかったのでけっこう愚盎な感じで曞いおいきたした。 .snow-container .snow.small span { display : block ; // span は inline なので block に animation : fall- small 7s linear infinite ; // animation をランダムな速さで぀ける } .snow-container .snow.small :: before { content : "❄" ; // 疑䌌芁玠の雪の結晶 left : -30% ; // ランダムな堎所に蚭眮 animation : fall- small 9s linear infinite ; } 萜䞋アニメヌションの䞭身 こちらも small / medium / large で0%のずきの内容を倉えおいたす。これで萜䞋タむミングが倉わっおきたす。 ひらひら舞い萜ちるアニメヌションがカクカクしおしたわないような工倫を少ししおいたす。 @keyframes fall-small { 0% { top : -20px ; // 少し䞊らぞんから萜ちおくるように。ここも small / medium / large で開始䜍眮を倉えおランダムにしおいる } 3% { transform : translateX( 5px ) ; // 5% ず 10 の倍数の % から± 2% のあたりで同じ䜍眮になるようにゆらゆらず } 7% { transform : translateX( 5px ) ; // ↑の 3% ず同じ䜍眮 } 18% { transform : translateX( -5px ) ; // 20% の± 2% で、↑の 5px ず逆の -5px } 22% { transform : translateX( -5px ) ; // ↑の 18% ず同じ䜍眮 } 38% { transform : translateX( 13px ) ; // 最初より倧きめな揺れ幅に } 42% { transform : translateX( 13px ) ; // ↑の 38% ず同じ䜍眮 } 58% { transform : translateX( -13px ) ; } 62% { transform : translateX( -13px ) ; } 78% { transform : translateX( 13px ) ; } 82% { transform : translateX( 13px ) ; } 100% { top : calc( 100% + 20px ); // 少し䞋らぞんたで萜ちきるように } } ず、このような感じで CSS を曞いおいきたした。CSS 曞くの楜しいね ☺ BASE でショップを䜜るずこのように HTML / CSS が線集できるので、コヌディング次第でカスタム性の高いサむトを䜜るこずができたす。 以䞊、最埌たで読んでいただきありがずうございたした今幎の冬はぜひむンタヌネットに雪をふらせおみおください ❄ 明日は 倧接さん の蚘事です。お楜しみに〜🎄 ❄ ❄ ❄ article.entry { background-color: #00000000; } .snow-container { display: flex; position: fixed; top: 0px; width: 100vw; height: 100dvh; z-index: -1; } .snow-container .snow span, .snow-container .snow::before, .snow-container .snow::after { position: absolute; width: 100%; height: 100%; color: #87ceeb; text-align: center; } .snow-container .snow.small { font-size: 1.2rem; opacity: 1; } .snow-container .snow.medium { font-size: 1.4rem; opacity: 0.8; } .snow-container .snow.large { font-size: 1.6rem; opacity: 0.6; } .snow-container .snow.small span { display: block; animation: fall-small 7s linear infinite; } .snow-container .snow.small::before { content: "❄"; left: -30%; animation: fall-small 9s linear infinite; } .snow-container .snow.small::after { content: "❄"; left: 30%; animation: fall-small 13s linear infinite; } .snow-container .snow.medium span { display: block; left: 10%; animation: fall-medium 8s linear infinite; } .snow-container .snow.medium::before { content: "❄"; left: -40%; animation: fall-medium 10s linear infinite; } .snow-container .snow.medium::after { content: "❄"; left: 40%; animation: fall-medium 6s linear infinite; } .snow-container .snow.large span { display: block; left: -10%; animation: fall-large 5s linear infinite; } .snow-container .snow.large::before { content: "❄"; left: -35%; animation: fall-large 6s linear infinite; } .snow-container .snow.large::after { content: "❄"; left: 35%; animation: fall-large 7s linear infinite; } @keyframes fall-small { 0% { top: -20px; } 3% { transform: translateX(5px); } 7% { transform: translateX(5px); } 18% { transform: translateX(-5px); } 22% { transform: translateX(-5px); } 38% { transform: translateX(13px); } 42% { transform: translateX(13px); } 58% { transform: translateX(-13px); } 62% { transform: translateX(-13px); } 78% { transform: translateX(13px); } 82% { transform: translateX(13px); } 100% { top: calc(100% + 20px); } } @keyframes fall-medium { 0% { top: -200px; } 3% { transform: translateX(5px); } 7% { transform: translateX(5px); } 18% { transform: translateX(-5px); } 22% { transform: translateX(-5px); } 38% { transform: translateX(13px); } 42% { transform: translateX(13px); } 58% { transform: translateX(-13px); } 62% { transform: translateX(-13px); } 78% { transform: translateX(13px); } 82% { transform: translateX(13px); } 100% { top: calc(100% + 20px); } } @keyframes fall-large { 0% { top: -300px; } 3% { transform: translateX(5px); } 7% { transform: translateX(5px); } 18% { transform: translateX(-5px); } 22% { transform: translateX(-5px); } 38% { transform: translateX(13px); } 42% { transform: translateX(13px); } 58% { transform: translateX(-13px); } 62% { transform: translateX(-13px); } 78% { transform: translateX(13px); } 82% { transform: translateX(13px); } 100% { top: calc(100% + 20px); } }
こんにちは。BASE株匏䌚瀟䞊玚執行圹員SVP of Developmentの藀川です。2023幎のアドベントカレンダヌも実斜したいず思っおおり、この蚘事が日目になりたす。 自分自身がBASE瀟に正匏ゞョむンしたのは2014幎8月、取締圹CTOずしお入瀟したした。僕は代目のCTOですが、その埌、代目にCTOを枡し、今では䞊玚執行圹員SVP of Developmentずいうちょっず珍しい肩曞で仕事をしおいたす。組織ずしおはCTOの䞊長でもあり、自己玹介では技術担圓圹員ず衚珟するこずもありたす。 自分がBASE瀟に入瀟した段階ではシリヌズBを迎えおいたした。象城ずしおは藀田ファンドから出資をいただいおから、䞊堎を意識した組織に倉えおいくずいう空気感だったず思いたす。 BASE瀟には正匏ゞョむンする前から技術顧問ずしお関わっおいお、週䞀だけ䌚瀟にあらわれるおじさんだったのですが、そのタむミングでは39歳でした。40代はBASE瀟に捧げたわけですが、先日50歳を迎え、自分自身の節目も含めお、2023幎のタむミングで振り返っおみたいず思いたす。 入瀟盎埌の初期スタヌトアップ感 入瀟盎埌の開発チヌムはデザむナヌもPdMの圹割もセットで10人ちょっずぐらいのチヌムでした。専門職の集たりずいうよりはそれぞれがデザむン、フロント゚ンド、バック゚ンド、PdMなどを0.5ず぀の圹割を持っおいるようなタむミングだったずも蚀えたす。 この芏暡の入瀟圓初のCTOの圹割ずいうのは、経営チヌムにゞョむンしたものの実態は開発マネヌゞャみたいな圹割であったり、他瀟であれば、ほがテックリヌドずいう組織が倚いのではないでしょうか。 自分自身の入瀟時には、すでに開発が回っおいるチヌムになっおいたので、自分はコヌドは曞かずに開発チヌムの皆さんを支えたすず蚀ったこずを芚えおいたす。今で蚀う゚ンゞニアリングマネヌゞャずしお動きたすずいう宣蚀ですね。 珟実には、BASEのネむティブアプリのコヌドを芋おいたり、圓時かCTOがデプロむ䜜業をやっおいたのでリリヌスマネゞメントを手動でやっおいたり、redmineで䞍具合や芁望管理など珟堎の仕事は続けおいたした。アップル瀟のお仕事で゚ンゞニアずしおクパティヌノにお䌺いしたこずもありたす。 圓時は枋谷の道玄坂の途䞭にある新倪宗ビルずいう飲食店やマッサヌゞ屋さんも入っおいるビルにオフィスがあっお、䌚瀟の目の前には飲み屋や男性向けのマッサヌゞ店、道玄坂の客匕きトラックの音が聞こえおくる猥雑な環境で、我々の働き方はすでにスタヌトアップ䌁業でしたから牧歌的ずたでは蚀わないですが、どこかのんびりしおいた環境䞋で自由に仕事をしおいた時期だったず蚀えたす。 のんびりず曞くず語匊がありたすね。 BASEの初期フェヌズだず、䟋えば競合他瀟ずのリリヌス競争ずいうものがありたした。他瀟様が機胜をリリヌスしたら、我々もすぐさた远い぀いお、次の日にリリヌスを出すような時期もありたした。ある皮のプレスリリヌス競争ずでも蚀いたすか、ミヌト戊略ずも䞖の䞭では蚀うそうなのですが、MBAで孊ぶような動きを鶎岡が自然にやっおいたのが印象的でした。 こういうのをのんびりずいうのもおかしいのですが、仕事的な緊匵感ずいうよりは、生き残るためにはそれをやらねばずいうグルヌブ感の䞭で動いおいお、明日をも知れぬスタヌトアップの初期タむミングずしお、サラリヌマン的なお仕事のあり方ずはちょっず違うような働き方をしおいた時期だったずも蚀えたす。 ただ、あたりに過床なミヌト戊略の远求は、珟堎の疲匊をもたらすので、あるずころから自分たちのプロダクトをしっかり䜜っおいこうずシフトしたのも芚えおいたす。 埌から考えるず、ただこの頃は、代衚の鶎岡が思うBASEずいうサヌビスのビゞョンがわかっおいなかったタむミングでした。䟋えば、実はfintech䌁業であったこず。BASEずいう無料のECのストアフロントに蟌められた想いずいうのは、その埌、理解しおいくこずになりたす。 いろんな課題の意思決定の議論の䞭で、本圓に鶎岡が目指しおいるもの、倧事にしおいるものなど、圌自身の䟡倀芳ずいうのが少しず぀芋えおきたタむミングでもありたした。 初期スタヌトアップから䌚瀟ずしおの成長 その埌、ほどなくしおGスク゚アずいう道玄坂亀番前のビルに移転したす。アメヌバビルず蚀うず知っおいる人もいるかもしれたせんが、以前はサむバヌ゚ヌゞェント瀟が䞀棟借りされおいた瞁起の良いビルでした。 オフィスが匷化され、圓時、メルカリさんが株䞻になっおいただいたこずもあり、技術面はもちろん採甚面でもアドバむスをいただくこずになりたす。圓時のメルカリさんず蚀えば、採甚をブむブむやっおいお、他瀟のCTO経隓者クラスをバンバン入瀟させおいくずいうスヌパヌ゚リヌトスタヌトアップだったわけですが、採甚の手法に぀いお聞くず、本圓に地道に声をかけお入瀟しおいただくずいうこずを聞いお、どこか開県したず蚀うか、甘えがなくなったこずで、我々の採甚ペヌスも加速されるこずになりたした。 BASE瀟はBASEずしおのビゞョン 「Payment to the People , Power to the People」に共感しおいたける方々を探すべくひたすら自瀟でむベントをやったり、技術カンファレンスのスポンサヌでBASEやPAYずいう名前を知っおいただいお、その人が転職する際、転職゚ヌゞェントから玹介されるリストからの遞択肢に入れおいただくこずを目指しお技術ブランディングを行っおいったり、スカりト掻動や゚ヌゞェントずのリレヌション匷化などをやっおいたように思えたす。 圓時の面接蚘録を芋返すず、2016幎では220人以䞊の面接蚘録があり、これが倚いのか少ないのかわかりたせんが、䞁床、個人ずしおも倧孊院の博士論文の䜳境のタむミングず被り、ものすごくハヌドだったのを芚えおいたす。カゞュアル面談はこちらが䞻䜓に喋るので、喉が蟛かったですね。ちなみに、ざっくり25人ぐらいの方に入瀟いただきたした。䞀人で内定刀断をしおいる時期でもあったので、今より内定基準が緩かったずは思いたすが、面接に察する内定承諟率が、10%ぐらいでしょうか。 個人的に思うずころずしおは、この採甚コミットはコヌドを曞くずか技術に携わるずいう行為ずは非垞に盞性の悪い行為だず思っおいたす。感芚的な衚珟で䌝わらないかもしれたせんが、採甚掻動が自分自身の思考をBASE瀟のアピヌルずいう面に広げお考える掻動であれば、技術に向き合う掻動はサヌバの動きに深く深く沈たせる行為だず思っおいたす。 具䜓的には、コヌドを曞いおいる時に面接の時間が来るず、心のスむッチングコストが高くお、面接のパフォヌマンスが出ないずいう時期がありたした。結果ずしお、どっち぀かずになるずころから、技術に深く向き合うのをやめたずいう経緯がありたす。 それこそ、2016幎、2017幎の入瀟組は埌のマネヌゞャのリヌダヌやCTO、プリンシパルテックリヌドなど今のBASEを支えおいる最䞊䜍のメンバヌになっおくれた時期で、開発を圌らに任せるずいうか、片手間では圌らのスピヌドに到底぀いおいけなくなったのがこの時期です。チヌムが30人いたら、1人日の30倍ぐらいのスピヌド感で䜕かが倉わっおいくわけですから远い぀けなくなりたすよね。 それらの埌にBASEずいうサヌビスの技術トップずしおCTOの圹割を再定矩し、珟状の川口に肩曞を譲るわけですが、技術に手を付けられなくなったためにCTOずいう肩曞を移譲するずいう流れになるのは、暩限委譲を前提ずしおチヌムそのものを倧きくするこずにコミットするからずいうのが䞀番の理由です。 その段階で僕の圹割は、䞀般的な蚀葉で蚀うず「VPoE的なマネゞメント圹を含め、サヌビス以倖の技術経営的は仕事はなんでもやる」ずいう圢になりたした。 時期は前埌したすが、それ以倖にもスタヌトアップCTOずしおやらなきゃならないこずが増えおいくステップは共通しおあるのではないかず思いたす。 初期ではCTOでやれおいたAWSやリリヌスの管理がたたならなくなっおSRE専門職を採甚する。SREにむンフラを委ねるこずで自分自身から手離れしおいく サヌビスに関わるポむントが枛っおいく 人が増えお無線LANが繋がらなくなる。ネットワヌクの敎備をちゃんずしないずいけないずころで情シスチヌムが生たれ始めお、むンフラやPCの管理が手離れしおいく 情シスタスクの増加 䞊堎に向けおIT内郚統制の敎備が始たり、サヌビス技術以倖ぞの集䞭力が取られる 䞊堎準備に䌎うコヌポレヌトガバナンスの敎備 サヌビスずしおはクレゞットカヌド番号を保有しおいないのに、ECプラットフォヌムずいう理由で、クレゞットカヌドを取り扱うセキュリティ基準であるPCIDSS察応を求められる 関係業界ずの連携 などなどが起きおいき、サヌビス技術以倖の仕事が増えおいくこずになり、技術の意思決定に぀いおは暩限移譲しおいく流れになりたす。もしかしたらここら蟺で向いおなくお離脱する初期CTOの人もいるかもしれないですね。 䞊堎から今 その埌、2019幎に無事䞊堎を迎え、䞊堎埌のさらなる成長のためにチヌムの醞成、採甚の匷化、暩限移譲などを進めおいき、コロナ犍を超えお今に至るわけですが、2023幎は、䌚瀟のフェヌズが倉わり、個人的にはコヌポレヌトガバナンスを実珟するオペレヌションの必芁性を匷く意識するようになったタむミングであったず思っおいたす。 あ、もっずちゃんずやらないずたずいんだずいうこずを知らしめられた䞀幎でした。 雑な衚珟をするず発生確率が0.0035ぐらいのものが、スタッフ100人の䌚瀟だったら1を超えないけど、300人だったら1を超えお実際に問題が発生するっおこずが芋えたした。あらゆるこずを予芋しながら、しっかりリスク管理をしないず躓くこずが増え始めるこずがよくわかりたした。 たた他瀟様の事䟋を芋おみおも、同時期に䞊堎したずある䌚瀟さんでCTO圹だった方が、より技術にコミットできる開発郚長みたいな圢に倉化したず蚀う事䟋があり、やはり圹員陣の圹割がよりコヌポレヌトガバナンスが求められる方向に倉わり、それによる最適配眮だったずいう話を聞いお、自分の盎感ず感芚があっおるず共感したした。 組織ずしおも、それたでたくさんの仕事をやりすぎおいた自分自身の兌務䜓制も敎理しおいく流れの䞭で、より分化された組織ずしお技術マネゞメントをしおいくずいう構造に倉化しおいくず思っおいたす。 特にBASE本䜓の開発チヌムだけでなく、新芏事業寄りであるPayID開発チヌムやBASE BANK開発チヌムのサむズが順調に倧きくなっおいき、それたでのBASE開発チヌムを䞭心ずしおいた䞖界芳から間違いなく、それぞれがしっかり組織ずしお成立させおいくフェヌズに入るず思いたすので、そこに携わる゚ンゞニアマネヌゞャの方々ずの間での党瀟的な統䞀感を䜜っおいく必芁性を感じおいたす。 それでありながらアグレッシブさをうたく䞡立させる圢で、BASE瀟の成長を䜜っおいくんだなずいう感芚が匷くありたしお、チヌムマネゞメント、セキュリティ、リスクマネゞメントなどをしっかりしながら、圓瀟の行動指針の䞀぀であるmove fastを実珟するずいうバランス感ある組織にしおいく必芁があるな、ず思うわけです。 自分語りにしかなっおおらず、あたり汎甚的な事䟋ずしおは曞けなかった文章ですが、䞀人でも䜕か共感などをもっおいただけたら幞いです。 BASEアドベントカレンダヌ 日目もお楜しみに devblog.thebase.in
こんにちはBASE product blog線集郚です。みなさたそろそろ幎の瀬ですが、いかがお過ごしでしょうか。 今幎も恒䟋のBASEメンバヌによるアドベントカレンダヌを開催したす 毎幎公開しおいるアドベントカレンダヌも今幎で6回目を迎えたす。 過去の様子 2022幎のアドベントカレンダヌ 2021幎のアドベントカレンダヌ 2020幎のアドベントカレンダヌ 2019幎のアドベントカレンダヌ 2018幎のアドベントカレンダヌ 今幎も毎日蚘事を公開する予定です。1日に2蚘事リリヌスされる日もありたす 䞋蚘の蚘事カレンダヌも随時曎新しおいきたすので、ぜひお楜しみに 蚘事カレンダヌ 日付 テヌマ、タむトル 12/1 創業期CTOが残っおいる䌚瀟が䞊堎するずどうなるのか 12/1 HTML / CSS でショップに雪をふらせたしょう ⛄ 12/2 むンシデント察応入門 〜初動フェヌズ線〜 12/3 Hatena-Blog-Workflows-Boilerplate぀かっお BASEのブログ曞いおみた 12/4 小数点の眠メンバヌシップポむント蚈算の裏偎 12/5 Notion導入に぀いお前線 12/5 開発チヌムで取り組んだ働き方の実隓10遞前線〜 出瀟ずか雑談ずか 12/6 Notion導入に぀いお埌線 12/6 開発チヌムで取り組んだ働き方の実隓10遞埌線〜 スクラムむベントずか GitHub ずか 12/7 珟代メカニカルキヌボヌド甚語の基瀎知識 12/7 “ゆるく、途䞭からでも” 孊べる、倜な倜な.goずいうむベントをやっおいたす 12/8 LocalStack/MinIO を導入しお開発者䜓隓が捗った話 12/9 フルサむクル゚ンゞニアリングの第䞀歩を進める - BASE BANKでの新たな挑戊 12/10 われはセキュリティの子 12/11 180件のPRを遡っお、良いレビュヌコメントをLintのルヌルに組み蟌んだ 12/11 Figma to STUDIO(β)䜓隓蚘 〜STUDIOでLPを䜜るっお、実は簡単 〜 12/12 職堎を明るくする 12/13 AI機胜開発ずむンボむス制床察応を同時にやったら、意倖ず䌌おいた 12/14 SMS OTP で䜿われるメッセヌゞの圢匏の歎史 12/15 LLMを利甚したテキストアノテヌションのツヌル化 12/16 ドメむン知識を玠早くキャッチアップする時に心がけおいる事 12/17 Pay IDアプリのWebViewにReact + Viteを導入した 12/18 Android WebViewで少し厄介だった実装の玹介 12/18 Mintで管理しおいるSwiftラむブラリを定期的に曎新する 12/19 瀟内でのデヌタ掻甚を掚進する取り組みの玹介 12/20 瀟内公募制床を䜿っおみたした〜Youは䜕しにBASE BANKぞ〜 12/21 カスタマヌサポヌトず連携しおコスパよく問い合わせ件数を枛らした話 12/22 がくらがPMMをやる理由 12/22 組織のUXラむティング力ボトムアップぞの挑戊 12/23 元むンタヌンがむンタヌン採甚やっおる話 12/24 単䜓テストの考え方/䜿い方 瀟内読曞䌚をしたした 12/25 CTOに必芁なものずは
はじめに BASE でプロダクト開発をしおいる @rry です。 さいきん BASE では 予玄販売 App にお「長期の予玄商品」を蚭定できるようになりたした baseu.jp 🗓予玄販売期間が1幎先たで延長可胜 🧵補䜜や入荷に時間がかかる商品も取り扱いやすく 🎄季節の限定商品を事前に販売開始も◎ 今たでの予玄販売 App では最長で8週間たでしか予玄蚭定するこずができず、オヌナヌさんからのフィヌドバックでも「8週間先も蚭定できるようにしおほしい」ずいう芁望が倚かったため、このたび 予玄販売長期化 PJ ずしお機胜改修を行いたした。 この PJ の裏偎を開発目線からご玹介しおいこうず思いたす。 PJ 抂芁 PJ キックオフから10/19リリヌスたでの期間玄8ヶ月 PJ メンバヌ開発゚ンゞニア 2-6人、QA ゚ンゞニア 1人、PM 1人、デザむナヌ 1人 アゞャむル・スクラムで開発 1スプリント1週間 デむリヌスクラム毎日15分 スプリントレビュヌ・レトロスペクティブ・スプリントプランニング・バックログリファむンメントたずめお毎週火曜日 自分はこの PJ では PjM ず䞻にフロント゚ンドの開発ずいう圹割で PJ をリヌドしおいきたした。 どんなこずをやったのか 長期の予玄泚文は内郚的には、決枈時に䞀床取埗した オヌ゜リ䞎信 をキャンセルし、時が来たら再床オヌ゜リを取り盎す、ずいう方法で長期化を実珟しおいたす。 たた、長期の予玄泚文が発送開始予定日を迎えるたでは泚文を発送させないようにしなくおはいけたせん。そのため以䞋のような開発が必芁でした。 バッチの䜜成 泚文時のオヌ゜リをキャンセルするバッチ オヌ゜リを再取埗するバッチ このずきにオヌ゜リが取れずキャンセルしなければならない泚文はキャンセル凊理もする オヌ゜リ取埗に成功しお時が来たら泚文の配送ステヌタスを「察応開始前」から「未察応」に倉える 泚文管理画面から長期の予玄泚文が確認できるようにする・配送ステヌタス「察応開始前」のずきは発送できないようにする オヌ゜リを取り盎す必芁があるため、長期の予玄商品では Pay ID ログむンが必須。そのためカヌトを改修する 泚文の配送ステヌタスに今回新しく「察応開始前」が远加されたため、配送ステヌタスが圱響しおいる箇所すべおを改修する BASE API や他の Apps に圱響がありたした 予玄販売 App 画面ず商品登録画面から長期の予玄商品が蚭定できるようにする 商品詳现画面で長期の予玄商品は発送時期が䞊旬・䞭旬・䞋旬衚蚘に倉わり、泚意文蚀が増える なんかいっぱいありたすね ザックリ時系列の流れ 2-4月: DB・アヌキテクチャ蚭蚈、圱響範囲調査、抂算芋積もり 蚭蚈に぀いおはいろいろありたしたが4月あたりから開発着手できるずころから開発着手しおいきたした 5-9月: 開発 カヌト -> バッチ -> 予玄販売 App -> 泚文管理 -> 商品管理 -> その他... みたいな流れで進めおいきたした 10月: リリヌス前 QA -> リリヌス このように開発が進んでいきたした。 PJ を通しお倧倉だったこず 半幎以䞊の PJ をやっおみお、いく぀か反省点や倧倉だったこずがありたした。 むンシデントはトヌタル5ä»¶ ナヌザヌに圱響がないような小さいむンシデントからナヌザヌに圱響があるむンシデントたで、この8ヶ月間でトヌタル5件起こりたした。 ナヌザヌに圱響があるむンシデントが起こった箇所ずしおは「商品管理画面」「ショップの商品詳现画面」で起こり、同じような䞍具合を起こさないように察策呚知しおこれからも気を぀けお開発しおいきたいず思いたす。 PJ 初期の段階でポむント芋積もりに時間をかけすぎおしたった感がある スクラムをしおいく䞊で、開発がい぀頃に終わるのか予枬を立おるために、開発前に抂算のポむント芋積もりをしおいたした。 が、党䜓の仕様が決たりきる前に党䜓のポむント芋積もりをしおしたったり、開発しおいくずポむントの重みが初期の重みから倉わっおしたったりしおしたいたした。こうなっおしたうず初期に぀けたポむント芋積もりはあたり意味のないポむントになっおしたい、芋積もりにそこたで時間をかけるよりも開発に時間をかけたい、ずなっおしたいたす。 この反省を生かしお、次から党䜓のポむント芋積もりを行うタむミングは、 どこたで開発するかの芁件や仕様ず蚭蚈が定たっおから 数回スプリントを回しおみおポむントに察する肌感が開発゚ンゞニアの䞭で揃っおきたずきに するのが良いのではないかず思いたした。 次回の PJ では、開発初期は「ここたでにこれを開発しおいたい」ずいうざっくりずしたマむルストヌンを眮くくらいに留めお、党䜓の抂算芋積もりは仕様ず蚭蚈が固たっおからにしたいです。 色々あった結果既存コヌドが倚く残っおいるリポゞトリでの開発で DDD を採甚しないこずにした こちらに぀いおは長くなるのですが、誀解されおしたうのを恐れずにあえおザックリめに曞きたいず思いたす。 BASE では珟圚、既存コヌドが倚く残っおいお昔からあるリポゞトリから、DDD + クリヌンアヌキテクチャで䜜られた新しいリポゞトリにリアヌキテクチャをしおいっおいる最䞭です。カヌトのバック゚ンドなどは新しいリポゞトリにコヌドがありたす。いずれはバック゚ンドのコヌドはこの新しいリポゞトリにコヌドを移しおいく予定です。 ですが今回は既存の泚文たわりのコヌドが新しいリポゞトリにないため、昔からあるリポゞトリ䞊でメむンの開発をするこずにしたした。 では、昔からあるリポゞトリで今回の開発をする堎合は、どういう蚭蚈にするのが適切でしょうか 昔からあるリポゞトリでも䞀郚コヌドはドメむンモデリングがされおいお DDD のアヌキテクチャが採甚されおいたり、はたたた軜量 DDD のような蚭蚈で構成されおいる状態ではありたすが、ただただ倧郚分のコヌドは MVC + S のアヌキテクチャです。 圓初予玄 PJ では、 新しく曞くコヌドの蚭蚈は DDD でいこう、いやでも昔からあるリポゞトリでは DI や DB トランザクションたわりの基盀機胜が十分ではないしな... それなら軜量 DDD にするか...いやでもドメむンモデリングがしきれないのに DDD のアヌキテクチャパタヌンを少しだけ囓ったような蚭蚈ははたしお「軜量 DDD」ず呌べるのか... 吊、呌べないな... そしお瀟内でチヌム内倖含めお議論する日々... ず、このようなこずが起こりたした。 そこで話し合った結果、以䞋の内容でチヌム内倖含めお党䜓での合意がずれたした。 境界づけられたコンテキストで明確に分けられるこずが分かっおいるドメむンであるこず ドメむンモデリングをしおおり、尚䞔぀そのドメむンモデリングを保守・運甚しおいくこず DDD による蚭蚈が生きおくる皋床にはある皋床耇雑性のあるドメむンであるこず この3぀が満たされる堎合のみ、昔からあるリポゞトリでも DDD で開発するこずができたす、満たせない堎合は DDD で開発するのはやめたしょう。 そしお予玄 PJ の堎合は泚文に関係するドメむンず密接に関わっおいお、「境界づけられたコンテキストで明確に分けられるこずが分かっおいるドメむン」ではなかったため、昔からあるリポゞトリでのメむンの開発にお DDD は採甚しないこずにしたした。 ではどんな蚭蚈にしたのか 基本は MVC + S のアヌキテクチャに則っおいたす。ただし、開発するボリュヌムを考えるに Service が肥倧化するのが目に芋えおいたす。 そこで、以䞋のような蚭蚈を行いたした。 Entity ... Model 局が実質2局に分かれおいる フレヌムワヌクの Model の責務はデヌタアクセスDB ク゚リビルダヌ 連想配列ではなく、ORM 的なオブゞェクトずビゞネスロゞックは Lib/Entity ぞValueObject のようなもの Shared Service ... Service 局を2局に分ける Service ... Controllerもしくは shellから1凊理あたりに call できる Service は原則1぀、いわゆる MVC + S の S Shared Service ... Controllerもしくは shellなどから盎接 call しおはいけない、Service 局もしくは Facade 局から call する Facade ... いわゆる Facade パタヌン。倖から Entity や Shared Service を呌ぶずきは Facade を䜿う ここたで倧倉だったこずを長々ず曞きたしたが、PJ を通しお良かったこずもありたした。 PJ を通しお良かったこず 圓初の蚭蚈から倧幅な仕様倉曎や、圱響範囲の考慮挏れなどがなく PJ を終わらせるこずができた 前回自分が担圓した PJ では、開発終盀で圱響範囲の考慮挏れがみ぀かり阿錻叫喚、みたいなこずがありたしたが、今回はその反省を生かしおあらかじめ圱響範囲調査をしっかりずやったので今のずころ考慮挏れバグみたいなものはみ぀かっおいないです。 バック゚ンドのテストカバレッゞ結果が良かった これはバック゚ンド゚ンゞニアの方がメむンでテストを手厚く曞いおいったこずによる功瞟ですが、今回新芏远加したバック゚ンドコヌドのテストカバレッゞ結果が他コヌドず比范しおずおも良かったです。 リリヌスしおから倧きな䞍具合なく枈んでいるこずに圱響しおいるず考えたす。 フィヌチャヌトグルを䜿っおビッグバンリリヌスにせず小出しにリリヌスできた 半幎以䞊かかる芏暡の PJ だったので、初期からフィヌチャヌトグルの仕組みを䜿っおスプリント䞭に開発したものをメむンのブランチにマヌゞしおいきながら開発できたのは開発䜓隓が良かったです。そしおリリヌス圓日はフィヌチャヌトグルを党ショップ公開にするだけでリリヌスするこずができたした。 QA ゚ンゞニアに PJ 開始時から入っおもらえた 今回の PJ では、PJ 圓初から QA ゚ンゞニアの方に Join しおもらうこずができ、スプリント䞭に機胜ができあがり次第随時機胜単䜍での QA をしおもらうこずができたした。 たた手厚い QA 項目があったおかげで、リリヌス前の耇雑なバッチの QA なども手分けしお行うこずができたした。 おかげで安心しお開発を前に進めるこずができ、クリティカルな䞍具合がなく枈んでいるこずに圱響しおいたす。 以䞊、これらをやるこずによっお開発゚ンゞニアずしおは PJ を前向きな気持ちで進めるこずができたした。 おわりに 長くなりたしたが、以䞊が予玄販売長期化 PJ の開発の裏偎になりたす。 今回は開発にフォヌカスしたしたが、PdM やデザむナヌの方など優秀な人たちの力を借りおようやくリリヌスできた PJ だず思っおいたす。 これからも BASE のプロダクトをより良いものにしおいくような開発を心がけおやっおいきたいです 🚀
ogp CTOの川口 ( id:dmnlk ) です。 2024幎2月10日に行われるYAPC::Hiroshima 2024にBASE株匏䌚瀟ずしおPlatinumスポンサヌをさせおいただくこずにしたした。 ぀いでず蚀っおはなんですがスポンサヌLTもしたす。話す内容はただ未定です。 YAPCはPerlを軞ずしたカンファレンスですが、Perlに限らず倚様な技術に぀いお語られるカンファレンスです。 タむムテヌブルを芋おも倚分Perlネタの方が少ないんじゃないかっおいう気がするくらいには倚様です。 fortee.jp キヌノヌトに杜甫々さんが登壇されるこずが決定したタむミングで、個人的に行こうかなず思っおいたした。 blog.yapcjapan.org 2000幎頃からむンタヌネットに觊れ、「ずほほのWWW入門」にお䞖話になっおいた自分にずっおはヒヌロヌに近い存圚です。 ちなみに「ずほほのKubernetes入門」など最近の技術に぀いおも未だに曎新されおいたす。凄い。 その埌、郜内某所吉祥寺であったずある䌚においお、実行委員長のkobakenさんにお䌚いしおその熱い想いに感銘し䌚瀟ずしおスポンサヌをしおみるこずにしたした。 去幎のYAPC Kyotoには行けずだったので久々のオフラむンYAPCが今から楜しみです。 お䌚い出来る方、飲みに行ける方、そしお登壇者ず運営チヌムの皆様、圓日よろしくお願いしたす。
ogp CTOの川口 ( id:dmnlk ) です。 2024幎2月10日に行われるYAPC::Hiroshima 2024にBASE株匏䌚瀟ずしおPlatinumスポンサヌをさせおいただくこずにしたした。 ぀いでず蚀っおはなんですがスポンサヌLTもしたす。話す内容はただ未定です。 YAPCはPerlを軞ずしたカンファレンスですが、Perlに限らず倚様な技術に぀いお語られるカンファレンスです。 タむムテヌブルを芋おも倚分Perlネタの方が少ないんじゃないかっおいう気がするくらいには倚様です。 fortee.jp キヌノヌトに杜甫々さんが登壇されるこずが決定したタむミングで、個人的に行こうかなず思っおいたした。 blog.yapcjapan.org 2000幎頃からむンタヌネットに觊れ、「ずほほのWWW入門」にお䞖話になっおいた自分にずっおはヒヌロヌに近い存圚です。 ちなみに「ずほほのKubernetes入門」など最近の技術に぀いおも未だに曎新されおいたす。凄い。 その埌、郜内某所吉祥寺であったずある䌚においお、実行委員長のkobakenさんにお䌚いしおその熱い想いに感銘し䌚瀟ずしおスポンサヌをしおみるこずにしたした。 去幎のYAPC Kyotoには行けずだったので久々のオフラむンYAPCが今から楜しみです。 お䌚い出来る方、飲みに行ける方、そしお登壇者ず運営チヌムの皆様、圓日よろしくお願いしたす。
゚ントランスで集合写真を撮るBASE株匏䌚瀟メンバヌの様子 こんにちは。 最近めっきり寒くなっおきお垃団が恋しい季節になっおきたしたね。 皆さんはいかがお過ごしでしょうか。 さお、この床BASE株匏䌚瀟は2023/10/28(土)に開催された Vue Fes Japan 2023 にシルバヌスポンサヌずしお協賛させおいただきたした。 今回は参加レポヌトずしお䌚堎の様子やセッションの感想に぀いおお届けしたす。 Vue Fes Japan 2023ずは Vue Fes Japan は 2018 幎に誕生した日本最倧玚の Vue.js カンファレンスです。 今幎は4幎ぶりずなるオフラむン開催ずなり、圓日のセッションは立ち芋が出るほど盛り䞊がっおいたした。 今幎はゲストスピヌカヌずしおVue.js/Viteの䜜者であるEvan You氏やVue゚コシステムのコアメンバヌの方が来日し、キヌノヌトやセッションを行っおいたした。 Vue.jsのこれからや゚コシステムに関する発衚が倚かった印象で、倧倉興味深く聎かせおいただきたした。 オフラむン䌚堎の様子 BASEのブヌスではVue.jsに関するアンケヌトを実斜し、答えおいただいた方にBASEのショップで販売されおいるコヌヒヌをプレれントさせおいただきたした。 BASEのブヌス アンケヌトの最終結果は以䞋のようになりたした。 Vue/Nuxtのバヌゞョンは2系を䜿っおいる方がただただいらっしゃる印象で、テンプレヌトに぀いおはほがSFC䞀択のように感じたした。 アンケヌト最終結果 メドピアトラックでのkeynoteの様子 セッションの感想 圓日に聎くこずができたセッションを䞀郚ご玹介したす。 ※圓日のメモをもずに䜜成したので、内容に間違いが含たれおいる可胜性がありたす。ご了承ください。 Keynote: Vue & Vite Updates (by Evan You) Vue.js䜜者のEvan You氏によるVue.js/Viteのアップデヌトに぀いおのセッションでした。 Vue3の成功ずしお、党おをTypeScriptで蚘述できたこず、Composition API、DXに投資できたこず(ドキュメントの刷新, Vite, Volar等)が挙げられおいお、逆に倱敗したこずずしお、2→3で砎壊的倉曎が倚すぎお゚コシステムやコミュニティが远い぀くのに時間がかかったこずが挙げられおいたした。デザむン䞊の倱敗を反省した倧きな講挔ずいえば、Node.js開発者のラむアンダヌルが倱敗を語ったそしおdenoを䜜ったDesign Mistakes in Nodeを思い出した人も倚いず思いたす。 https://www.youtube.com/watch?v=M3BM9TB-8yA 今埌は砎壊的倉曎を䞀床に倚く含めないようにし、たたdeprecated→optin→removeずいう流れをずっおいくこずず、Vue本䜓のCIにvue-routerやpiniaの確認が含たれるようになるなど、゚コシステムを倧切にしおいくずおっしゃられおいたした。 Vue.jsをプロダクトで䜿甚する䌁業ずしお、これはずおもありがたいですね。 瀟内UIコンポヌネントラむブラリが゚ンゞニアチヌムにもたらした本圓の䟡倀 (by 山本 䞀将) 瀟内のプロダクト向けのUIコンポヌネントラむブラリを䜜成しUIの均䞀性を高めただけでなく、デザむンに察する意識改革やレビュヌの運甚フロヌなど倚岐に枡っお良い圱響を起こすこずができた。ずいう発衚でした。 新しい機胜を䜜成するずき、䞀般的にはバック゚ンドのコヌドず䜵せおフロントの画面やUI党おを䞀぀のPull Requestずしおコヌドレビュヌが開始されるかず思いたすが、本栌的に機胜レビュヌが始たる前に、このラむブラリのみでのコヌドレビュヌを挟むこずでUIの必芁性、ペヌゞ構成の方針、デザむンレビュヌに議論をフォヌカスするこずができ、より深いレビュヌを行うこずができるずおっしゃられおいたした。 たた、この手法はデザむナヌずの協業などで力を発揮する運甚方法でもありたす。 別のセッションでVue.jsを導入するキッカケに「デザむナヌず協業するために遞択した。」ずいう話題を挙げおいた方もいらっしゃったので、Vue Fesにふさわしい内容だったのではないでしょうか。 Vue Language Serverから生たれたVolar.jsず、それが秘める可胜性 (by mizdra) Volar.jsずいうVue.jsから生たれたラむブラリがVueの枠を超えお発展しおいっおいるこずに぀いおの発衚でした。 Volarずいえば、VSCodeでVue.jsを曞いたこずがある人ならかなりの方がご存知だず思いたすが、Vue.jsのLanguage Serverずしおシンタックスハむラむトやコヌド補完を提䟛しおくれるVSCode拡匵です。 Vue.jsは䞀぀のファむル内にHTML, CSS, JSを曞ける仕様ずなっおいるので、Vue.js甚のLanguage Serverの開発は倧倉であり、 たた、AstroやSvelteのような同䞀ファむル内で耇数蚀語が曞けるラむブラリも同じ悩みを抱えおいたそうです。 そこでVolarのコア機胜がVolar.jsずしお切り出され、少ない蚘述で高品質・高機胜なLanguage Serverを䜜れるようになったそうです。 Volarは知っおいたしたが、Volar.jsはこのセッションで初めお知りたした。 Vue.jsの枠を超えお発展しおいるラむブラリの存圚を知るこずができお倧倉勉匷になりたした。 パネルディスカッション Vue.js 日本ナヌザヌグルヌプ代衚のkazupon氏を始めずする豪華なメンバヌでVue.jsに぀いおのパネルディスカッションでした。 Vue.jsを採甚したきっかけ、Vue.jsのいいずころ、むマむチなずころ、今埌のVue.jsに期埅するこずなど興味深い話を聎くこずができたした。 䞀番印象的だったのは「今埌のVue.jsに期埅したいこず」ずいう話題で、「ViteやVolarのようにVue.jsの枠を超えお゚コシステムが発展しおいっおほしいし、この蟺りをもっずもっずアピヌルしおいっおほしい」ずいう発蚀があり、ここでもVue.jsの゚コシステムの匷さが語られおいお、Vueコミュニティの良さを改めお感じるこずができたした。 Vue.js クリニック Vue.js に関する質問が事前募集され、Evan Yuなどコミッタヌ陣に質問できるセッションでした。 䞀番人気は「reactive vs refはどちらを䜿うべきか」ずいう質問で、 Evan Yuが「ref統䞀がおすすめ」ずお墚付き をくれたこずがありがたかったです。 元々ドキュメント䞊ではreactiveがrefより先にありたしたが、最近refを䞊にしたのも、refを䜿おうずいうメッセヌゞずのこず。 reactiveはデストラクチャでリアクティビティが倱われる、など間違いを犯しやすいこずが理由の䞀぀ですが、 reactiveが今埌なくなるこずはないずのこず。 䟋えば、䞀回アサむンしたらその埌倉数を眮き換えない、2぀のobjectで共通のstateを必ず担保したい、必ずそのobjectがあるずいう状態を担保したい堎合などでは有甚ずのこずex, 認蚌のステヌタス管理今ログむン䞭かどうかなど 謝蟞 協賛を通じおVue.jsコミュニティのコミュニティの盛り䞊がりに貢献できたこずを倧倉嬉しく思っおいたす。 カンファレンス圓日、BASEのブヌスにもたくさんの方がお越しいただけたした。本圓にありがずうございたす。 このような堎を通じおBASEのこず少しでも知っおいただける方が増えるず嬉しいです。 たた、カンファレンスを䌁画・開催しおくださったVue.js 日本ナヌザヌグルヌプの方、䞊びにスタッフの方にこの堎を借りお埡瀌申し䞊げたす。
Vue Fes Japan 2023 公匏サむトのロゎ 2023/10/28土に開催される Vue Fes Japan 2023 に BASE がシルバヌスポンサヌずしお圓カンファレンスに協賛したす。 vuefes.jp こんにちは。 @gatchan0807 です。今回は BASE のスポンサリングに぀いおのお知らせ蚘事です。どうぞ最埌たで読んでいただけるず嬉しいです。 BASE が Vue.js のカンファレンスに協賛するのは、昚幎床オンラむンで実斜された Vue Fes Japan Online 2022 に続いお今回で2床目ずなりたす。 Vue Fes Japan Online 2022 に BASE から゚ンゞニアが登壇及び協賛、スタッフ参加したした 圓プロダクトチヌムブログでの Vue.js に関する蚘事の寄皿などに加え、匕き続きVue.js コミュニティぞの貢献するこずができ、倧倉嬉しく思いたす。 圓日のスポンサヌブヌスに぀いお 今回 BASE は 1階コミュニティルヌム内にスポンサヌブヌスを蚭眮する予定です。 リフレッシュメントスペヌスやタトゥヌスペヌスにご甚の際に合わせお BASE のサヌビスロゎのティピを目印にぜひお立ち寄りください スポンサヌブヌスでは 「Vue.js、あなたはどう䜿っおるアンケヌト」 ずいう䌁画を実斜予定で、 Vue.js に぀いおの簡単なアンケヌトにご回答いただくず BASE オリゞナルデザむンのコヌヒヌバッグをお配りしたす。 こちらのコヌヒヌバッグはネットショップ䜜成サヌビス「BASE」をご利甚いただいおいる、 COZY COFFEE さんのコヌヒヌバッグで、倧倉銙り高い深煎りコヌヒヌになっおいたすのでコヌヒヌ奜きの私ずしおは、ぜひ皆さたにも味わっおいただきたいです cozycoffee.thebase.in たた、スポンサヌブヌスには昚幎床の Vue Fes Japan Online 2022 で「 BASEのフロント゚ンド組織の人数が2.5倍になっお起きた倉化 」ずいうスポンサヌセッションで発衚した私、 @gatchan0807 もおりたすので、前回発衚時点から1幎間でどんな倉化があったのかなど、お話できるず嬉しいです 他にも Vue Fes のスポンサヌブヌス党䜓で行われる䌁画もあるずかないずか なので、ぜひ気軜にブヌスにお立ち寄りいただけたすず幞いです それでは、圓日皆様にお䌚いできるこずを楜しみにしおおりたす
BASEのスポンサヌブヌスの様子 こんにちはすっかり秋らしくなり、涌しくなっおきたしたね。皆さんいかがお過ごしでしょうか。 さお、この床は、2023/10/08(日)に開催された PHP Conference Japan 2023 にゎヌルドスポンサヌずしお協賛し、BASEの゚ンゞニアが登壇したした。 今回は、登壇者からコメントず、䌚堎やスポンサヌブヌスの様子に぀いおお届けしたす PHP Conference Japan 2023ずは PHP Conference Japan 2023は、2023/10/08(日)に開催された囜内最倧玚のPHPカンファレンスです。 BASE はこれたでにも開催されおいる PHP カンファレンスぞの登壇䞊びにスポンサヌをコミュニティ貢献掻動ずしお行っお参りたした。今回はゎヌルドスポンサヌずしお圓カンファレンスに協賛しおいたす。 画面巊偎にBASEのコヌポレヌトロゎ 登壇者のコメント glassmonkey ( @glassmonekey ) むベントお疲れ様でした。氞野です。 PHPずいうテヌマを題材にみなさんず亀流できお最高に楜しい1日でした。 同時に芋たいセッションが耇数あったりで䜓が耇数あったら!!ず思う1日でした。 登壇内容自䜓は業務では珟状䜿っおないものの、今埌䜿う可胜性が高いWasmに぀いおお話をさせおいただきたした。 いかがでしたでしょうか? 私自身、Wasmはブラりザ䞊の技術ずいう固定芳念があったのですが、 孊習しおいくうちにバック゚ンド゚ンゞニアずしおキャッチアップしおおいたほうが良い技術であるずいう孊びがありたした。 今回のトヌクで、その䞀端を皆さんに少しでもお䌝え出来たのなら嬉しく思いたす。 ぜひ、良きWasmラむフを!! speakerdeck.com スポンサヌブヌスの様子 ここからはスポンサヌブヌスの様子をお届けしたす 今幎は「BASEからのPHPerぞの挑戊状」ずいうクむズ䌁画を開催したした。 「BASEからのPHPerぞの挑戊状」を解いおいる参加者の様子 スポンサヌブヌスに来お頂いた方に、ネットショップ䜜成サヌビス「BASE」をご利甚いただいおいる COZY COFFEE さんのコヌヒヌパックを配垃したした。 cozycoffee.thebase.in コヌヒヌパックずBASEロゎにもあるtipi 「BASEからのPHPerぞの挑戊状」の解説 ここからは「BASEからのPHPerぞの挑戊状」にお出題したクむズの正解ず、正解率、解説をしたす。 問題1 (正解率: 71.4%) PHP8.0.xのセキュリティサポヌトの終了日はい぀でしょうか? 次の遞択肢から1぀遞んでください。 2022幎11月28日 2023幎11月26日 2024幎11月25日 2025幎12月8日 正解ず解説はこちら 2. 2023幎11月26日 解説 メゞャヌバヌゞョン、マむナヌバヌゞョンのセキュリティサポヌト終了日は以䞋のペヌゞで知るこずができたす。 PHP: Supported Versions (サポヌト䞭のもの) PHP: Unsupported Branches (サポヌト終了したもの) こちらによれば各日付は以䞋のPHPバヌゞョンのセキュリティサポヌト終了日になりたす。 2022幎11月28日はPHP7.4 2023幎11月26日はPHP8.0.x 2024幎11月25日はPHP8.1.x 2025幎12月8日はPHP8.2.x 問題2 (出題ミスがありたした。詳しくは「正解ず解説はこちら」に蚘茉) (参考正解率: 54.3%) empty の挙動で正しいのはどれでしょか? 正しい説明だず思うのを1぀遞んでください。 倉数が存圚し、か぀空文字列たたはれロたたはfalseの堎合にtrueを返したす。 倉数が存圚し、か぀空でない文字列たたはれロたたはfalseの堎合にtrueを返したす。 倉数が存圚するかどうかを確認し、倉数が存圚しない堎合にtrueを返したす。 倉数が存圚しない堎合にtrueを返し、それ以倖の堎合にfalseを返したす。 正解ず解説はこちら 出題偎で事前に想定しおいた正解は 2. 倉数が存圚し、か぀空でない文字列たたはれロたたはfalseの堎合にtrueを返したす。 でした。 しかしクむズに挑戊いただいた䜕名かの方から異議がありたしたので問題文ず答えを芋盎したずころ、正解が異なっおいそうだずいう話になりたした。 申し蚳ありたせんでした。 正しい説明1぀を遞択する問題でしたが、正解は 遞択肢1. ず 遞択肢3. になりたす。 解説 empty() で、 true を返すパタヌンは以䞋のPHPマニュアルに解説がありたす。 PHP 型の比范衚 empty($x); が true を返すのは以䞋のパタヌンです。 パタヌン1. $x = ""; (空文字列) パタヌン2. $x = null; (null) パタヌン3. var $x; (PHP5.0未満でも䜿甚可胜な、クラスのプロパティを宣蚀する方法。) パタヌン4. $x が未定矩 パタヌン5. $x = []; (空の配列) パタヌン6. $x = false; bool型のfalse パタヌン7. $x = 0; 数倀の0 パタヌン8. $x = "0"; 文字列の0 こちらを螏たえお、それぞれの遞択肢が empty の正しい挙動かどうかみおいきたす。 遞択肢1, 2, 3は、 empty()がtrueを返す堎合 の説明、遞択肢4は empty()がtrueを返す堎合ずfalseを返す堎合 に぀いお説明しおいたすが、 遞択肢1. 倉数が存圚し、か぀空文字列たたはれロたたはfalseの堎合にtrueを返したす。 パタヌン1〜8 を網矅しおはいたせんが、パタヌン1, 7, 6 の堎合に true を返す、ずのこずなので、 遞択肢1は正解 。 遞択肢2. 倉数が存圚し、か぀空でない文字列たたはれロたたはfalseの堎合にtrueを返したす。 パタヌン7, 6に぀いおは正しい説明になっおいたすが、 パタヌン8に関連した説明「空でない文字列で true を返す」のは "0" の堎合のみであり、 それ以倖の文字列では false を返すので、 遞択肢2は䞍正解 。 遞択肢3. 倉数が存圚するかどうかを確認し、倉数が存圚しない堎合にtrueを返したす。 https://www.php.net/manual/ja/function.empty.php には以䞋の蚘述がありたす。 ぀たり、 empty()  は本質的に  !isset($var) || $var == false  ず同じこずを簡朔に蚘述しおいるだけです。 こちらの蚘述に合臎しおいるため empty() は、倉数の存圚を確認しおいたすし、 遞択肢3は正解 ず蚀えたす。(パタヌン4の説明をしおいる) 遞択肢4. 倉数が存圚しない堎合にtrueを返し、それ以倖の堎合にfalseを返したす。 こちらもパタヌン4に合臎しおいたすが、他に true を返すパタヌン1〜3, 5~8に぀いお間違った説明になっおいるので 遞択肢4は䞍正解 。 PHP: empty - Manual PHP: PHP 型の比范衚 - Manual 問題3 (正解率: 8.6%) PHP8.3からできるようになった Random\Randomizer クラスの挙動で正しいのはどれでしょうか? 正しい説明だず思うのを2぀遞んでください。 echo $randomizer->getBytes(10); echo $randomizer->getInt(0, 100) echo $randomizer->getBytesFromString('abcdefghijklmnopqrstuvwxyz0123456789', 16); echo $randomizer->nextFloat(); echo implode(',', $randomizer->shuffleArray(['䜐藀', '鈎朚', '高橋'])); 正解ず解説はこちら 3. echo $randomizer->getBytesFromString('abcdefghijklmnopqrstuvwxyz0123456789', 16); 4. echo $randomizer->nextFloat(); 遞択肢1,2,5はPHP 8.2からできるので䞍正解です。 遞択肢3,4はPHP 8.3からできるようになったので正解です。 PHP: Random\Randomizer - Manual PHP: Random\Randomizer::getBytesFromString - Manual PHP: Random\Randomizer::nextFloat - Manual 問題4 (正解率: 14.3%) PHP8.2で曞かれたサンプルコヌドがありたす。むンスタンスメ゜ッド、「 Sample::func() 」の仮匕数の型に指定しおもPHP゚ラヌが発生しないものを3぀遞んでください。 (※PHPバヌゞョンは8.2で、PHPコヌドで定矩されおいるクラスは Sample 以倖にないものずしたす) int|string null namespace void self static never 正解ず解説はこちら 1. int|string 2. null 5. self 解説 正解の遞択肢1, 2, 5 は仮匕数の型に指定できたす。遞択肢3. は型ずしお指定できたせん。 遞択肢4, 6, 7は、戻り倀型には指定できたすが、仮匕数の型には指定できたせん。 PHP: 型 - Manual PHP: 型宣蚀 - Manual PHP: クラス内での関係を瀺す盞察型 - Manual 問題5 (正解率: 25.0%) あなたはBASEに入瀟しお、プロダクトコヌドを読んでいたす。 以䞋のコヌドがあったずき、最終的な商品の金額はいくらになるでしょうか次の遞択肢から遞んでください。 なおPHPバヌゞョンは8.2で、今回の問題で衚瀺されおいるクラス以倖は無いものずしたす。 ï¿¥1,045 ï¿¥1,815 ï¿¥2,035 ï¿¥2,145 ï¿¥2,585 https://gist.github.com/cocoeyes02/a51d1855d31d7b85f6b2ec9973b12c36 コヌドの行数が長いため、gistに衚瀺しおいたす 正解ず解説はこちら 4. ï¿¥2,145 以䞋のリンクより、2145が出力されおいるこずが確認できたす。 php-play.dev 解説 この問題は、商品、オプション、送料、クヌポンを䜿っお皎蟌の合蚈金額を算出する問題です。 蚈算の順番は 皎抜の合蚈金額を算出する 皎蟌の合蚈金額を算出する ずいうようになっおいたす。 皎抜の合蚈金額を算出 たずProductクラスのtotalメ゜ッドを芋るず、皎抜の合蚈金額が商品の金額 、オプション料金の合蚈金額 、送料、割匕額で構成されおいるこずがわかりたす。 <?php public function total () : Price { $ optionTotalPrice = $ this -> optionGroup -> total () ; $ discount = $ this -> coupon -> getDiscount () ; $ totalPrice = new Amount ( 0 ) ; $ totalPrice = $ totalPrice -> add ( $ this -> productPrice -> value ) // 商品の金額 -> add ( $ optionTotalPrice ) // オプション料金の合蚈金額 -> add ( $ this -> fee -> value ) // 送料 -> sub ( $ discount ) ; // 割匕額 if ( $ totalPrice -> isNegative ()) { throw new Error ( 'total price is negative' ) ; } return ( new Price ( $ totalPrice )) -> calculateTaxIncluded ( ItemTax :: getTaxPercentageByItemType ( $ this -> itemType )) ; } 䞀぀ず぀算出しおみたしょう。 たず商品の金額は、Productクラスのconstructで代入された $productPrice をそのたた䜿っおいるだけなので1,000になりたす。 <?php public function __construct ( public ProductName $ name , public Price $ productPrice , // 商品の金額 ... ) { } <?php $ price = Price :: fromInt ( 1000 ) ; オプション料金の合蚈金額は、OptionGroupクラスのtotalメ゜ッドより、constructで代入されたOptionの金額を合蚈しおいたす。 今回はオプションを2぀远加しおおり、100 + 50 = 150になりたす。 <?php public function total () : Amount { $ total = new Amount ( 0 ) ; foreach ( $ this -> options as $ option ) { $ total = $ total -> add ( $ option -> price -> value ) ; // 各Optionの金額の合蚈倀を算出 } return $ total ; } <?php $ optionGroup = new OptionGroup ( [ new Option ( 'ラッピング' , new Price ( new Amount ( 50 ))) , new Option ( '名前入れ' , new Price ( new Amount ( 100 ))) , ] , ) ; 送料は、FeeクラスのcreateFromSubtotalメ゜ッドより、商品の金額ずオプションの合蚈金額の合蚈倀から、クヌポンの割匕額を差し匕いた小蚈を䜿っお算出しおいたす。 今回の小蚈は、1,000 + 150 - 200 = 950 です。 それから、FeeTypeクラスのcreateFromIntメ゜ッドにある察応衚に算出した小蚈をあおはめお、送料を算出しおいたす。 今回は小蚈が1,000を䞋回るので、送料は1,000です。 <?php public static function createFromSubtotal ( Price $ price , OptionGroup $ optionGroup , Coupon $ coupon , ) : self { $ subtotal = new Amount ( 0 ) ; // 小蚈 $ subtotal -> add ( $ price -> value ) // 商品の金額 -> add ( $ optionGroup -> total ()) // オプションの合蚈金額 -> sub ( $ coupon -> getDiscount ()) ; // クヌポンの割匕額 $ fee = FeeType :: createFromInt ( $ subtotal -> toInt ()) ; return new self ( new Amount ( $ fee -> value )) ; } <?php enum FeeType : int { case Free = 0 ; case FiveHundred = 500 ; case OneThousand = 1000 ; public static function createFromInt ( int $ value ) : self { return match ( true ) { $ value >= 1500 => self :: Free, // 金額が1500円以䞊だったら送料無料 $ value >= 1000 => self :: FiveHundred, // 金額が1500円未満、1000円以䞊だったら送料500円 $ value >= 0 => self :: OneThousand, // 金額が1000円未満だったら送料1000円 } ; } } 割匕額は、クヌポンの割匕額より算出しおいたす。 ただし、ItemTypeがデゞタルコンテンツである堎合は割匕が効きたせん。 今回は、ItemTypeが予玄商品であるため割匕が効きたす。 よっお割匕額は200です。 <?php public function getDiscount () : Amount { if ( !$ this -> isAvailable ()) { return new Amount ( 0 ) ; // クヌポンが䜿えない堎合は割匕額は0円 } return new Amount ( $ this -> discountAmount -> toInt ()) ; } public function isAvailable () : bool { return match ( $ this -> itemType ) { ItemType :: Lottery, ItemType :: PreOrder => true , ItemType :: DigitalContent => false , } ; } <?php $ coupon = new Coupon ( $ itemType , new Amount ( 200 )) ; これで皎抜の合蚈金額を求める䞊で必芁な金額が党お算出できたした。 改めお曞くず 商品の金額1,000 オプション料金の合蚈金額150 送料1000 割匕額200 です。 よっお蚈算するず、1000 + 150 + 1000 - 200 = 1,950になり、皎抜の合蚈金額は¥1,950です。 皎蟌の合蚈金額を算出 皎抜の合蚈金額を算出したら、皎蟌の金額を算出したす。 皎蟌の金額は、商品タむプによっお皎率が決たっおいたす。今回は予玄商品を扱っおいるので、皎率は10%になりたす。 <?php return ( new Price ( $ totalPrice )) -> calculateTaxIncluded ( ItemTax :: getTaxPercentageByItemType ( $ this -> itemType )) ; <?php public function calculateTaxIncluded ( TaxType $ taxType ) : self { $ amount = $ this -> value -> multiply ( $ taxType -> getPercentage ()) ; return new self ( $ amount ) ; } <?php class ItemTax { public static function getTaxPercentageByItemType ( ItemType $ itemType ) : TaxType { return match ( $ itemType ) { ItemType :: DigitalContent, ItemType :: PreOrder => TaxType :: Ten, // 予玄商品の皎率は10% default => TaxType :: Eight, } ; } } 皎抜の合蚈金額は1,950なので、蚈算するず 1,950 × 1.1 = 2,145 皎蟌の合蚈金額は¥2,145になりたす。 今回はtotalメ゜ッドの倀をそのたた出力しおいるため、totalメ゜ッドの返り倀である皎蟌の合蚈金額が答えになりたす。 よっお答えは、遞択肢4の¥2,145です。 <?php echo $product->total()->value->toInt(); 謝蟞 協賛・瀟員のスピヌカヌ参加を通しお PHP コミュニティの盛り䞊がりに貢献でき、匊瀟ずしおも倧倉有意矩な時間ずなりたした。 スタッフの方々には業務でお忙しいにも関わらず、倚くの時間をカンファレンス準備ぞ泚いでいただいたかず思いたす。この堎を借りお埡瀌申し䞊げたす。 それでは、来幎もお䌚いしたしょう
PHPカンファレンス2023公匏サむトのロゎ 2023/10/08日の日皋で開催される PHP Conference Japan 2023 で BASE に所属する゚ンゞニアが登壇する他、ゎヌルドスポンサヌずしお圓カンファレンスに協賛したす。 BASE はこれたでも PHP カンファレンスぞの登壇䞊びに協賛をしおいたす。 PHPカンファレンス2022に5名のメンバヌが登壇・ゎヌルドスポンサヌずしお協賛したした PHPカンファレンス2021に5名のメンバヌが登壇・プラチナスポンサヌずしお協賛したした PHP Conference Japan 2020に4名のメンバヌが登壇プラチナスポンサヌずしお協賛したした PHP Conference Japan 2019に3名のメンバヌが登壇・プラチナスポンサヌずしお協賛したした 「PHP Conference 2018」にゎヌルドスポンサヌずしお参加したした - BASE Bookベむスブック PHPカンファレンス2015 - #phpcon2015 今幎で通算7回目のスポンサヌずなり、PHP コミュニティぞの貢献を続けるこずができ倧倉嬉しく思いたす。 たた、スポンサヌブヌスでは、「BASEからのPHPerぞの挑戊状」ずいうクむズの催しを行いたす。ぜひお越しください セッションの内容に぀いお PHP で始める WebAssembly 入門 13:10〜 Track6 レギュラヌセッション25分 所属BASE, Inc. / NEW Division / BASE BANK fortee.jp こんにちは @glassmonkey こず氞野です。 みなさんはWebAssembly(Wasm) はご存知でしょうか?觊っおいたすか? 私自身、業務でWasmを䜿っおいるわけではありたせんが、 ここ数幎でブラりザ䞊の技術を飛び越えお、様々なナヌスケヌスが実珟できる技術になっおきたした。 たさか ブラりザ䞊でPHPが動かせる なんお倢にも思いたせんでした。 php-play.dev ブラりザ以倖の甚途も広たっおきたこずもあり、PHPerもずい、バック゚ンド゚ンゞニアずしおも抑えおおくべき技術になっおきたように感じたす。 ぜひ皆さんずWasmが仲良くできるように取り持぀こずができたらず思いたす!! そしお、珟地で皆さんにお䌚いできるこずを楜しみにしおいたす!! 最埌に PHP Conference Japan 2023 の圓日のチケットは䞋蚘よりお申し蟌みいただけたす。 phpcon.connpass.com それでは圓日皆様にお䌚いできるこずを楜しみにしおおりたす
Cloud Operator Days Tokyo のロゎ こんにちは。BASE で゚ンゞニアをしおいる 02 です。 このたび、 Cloud Operator Days Tokyo 2023 に登壇し、「茝けクラりドオペレヌタヌアワヌド2023」においお審査員特別賞倉革線を受賞したした。 今回は、登壇に぀いおのコメントず、クロヌゞングむベントでの様子に぀いおお届けしたす Cloud Operator Days Tokyo 2023 ずは Cloud Operator Days Tokyo 2023 公匏サむトより Cloud Operator Days Tokyo 2023 ずは、クラりドの運甚者をテヌマずした技術むベントです。 cloudopsdays.com 2023/08/21(月)も配信開始した玄60ものオンデマンドセッションず、2023/09/14(朚)に開催されたオフラむンクロヌゞングむベントで構成されおおり、運甚にた぀わる技術やノりハり、事䟋や悩みを共有しおいくむベントになりたす。 登壇に぀いおのコメント 今回は業務でやったしくじりず、AWS Lambdaを䜿ったアヌキテクティングによる運甚改善の話をしたした。 アヌキテクティングずいうのは党䜓解に圓たるアヌキテクティングず、局所解にあたるアヌキテクティングの2皮類があるず思いたす。今回の改善はいわゆる局所解に圓たるものです。局所解にあたるアヌキテクティングは、䞀芋䜕故こんなアヌキテクチャに・・・ず思えおも、背景を知るずそうせざるを埗なかった様々な理由が芋えおきたす。 これは持論ですが、同じアヌキテクチャや技術の遞定結果でも、より質良く、より倚く理由を蚀える方がより良い意思決定であるず考えおいたす。今埌もビゞネスを守るため、局所解ずなるアヌキテクティングであっおもより良い意思決定ができるよう粟進しおいきたいです。 オフラむンクロヌゞングむベントの様子 ここからはオフラむンクロヌゞングむベントの様子をお届けしたす 午前はディスカッション圢匏で進行しおいく Unplugged セッションからスタヌトしたした。 各セッションごずにオブザヌバビリティ、GPUクラスタヌ、AIOps、ハむブリッドクラりドなどのテヌマが決たっおおり、セッションリヌドず参加者の双方向コミュニケヌションによっお、テヌマに぀いお理解を深めおいきたした。 䌚堎はこのような感じで、皆さん積極的に議論しおおりたす pic.twitter.com/bA9g80VMc5 — Cloud Operator Days (@cloudopsdays) September 14, 2023 「モニタリングは既知の未知を扱いたすが、オブザヌバビリティは未知の未知を扱うのです。」 この4象限のうちの、未知の未知を無くそうね、ずいう話右䞋から右䞊ぞ、右䞋から巊䞋ぞ #CODT2023 https://t.co/s2nrUcOojt — 02 (@cocoeyes02) September 14, 2023 午埌になるずオヌプニングが始たり、Keynoteセッションが始たりたした。 クロヌゞングセッションが始たりたした 開始の挚拶は実行委員長の長谷川からです。 pic.twitter.com/6js6S9c3s5 — Cloud Operator Days (@cloudopsdays) September 14, 2023 モニタリングツヌルを遞定する時はアプリケヌション開発者ずむンフラ゚ンゞニアの䞡者で遞定するのが重芁。 #CODT2023 pic.twitter.com/xfGCJGFjAt — Cloud Operator Days (@cloudopsdays) September 14, 2023 䌑憩時間では、スポンサヌの皆様が出しおいるブヌスにお、亀流を深めたりグッズが貰える催しが開催されおいたりしたした。 #CODT2023 New Relicさんのブヌスでもろた pic.twitter.com/QTbquZOmCl — 02 (@cocoeyes02) September 14, 2023 䌑憩が終わるず、次は「茝けクラりドオペレヌタヌアワヌド2023」の衚地匏が行われ、そこで審査員特別賞 倉革線を受賞したした。 BASE株匏䌚瀟 倧接様 審査員特別賞 倉革線のご受賞おめでずうございたす #CODT2023 pic.twitter.com/fRAW7jk80l — Cloud Operator Days (@cloudopsdays) September 14, 2023 正盎に蚀うず、受賞できるずは思っおいなかったので、ずおも驚きたした。 受賞時のコメントでも述べたしたが、今回の経隓から孊んだこずは、クラりドの知識がビゞネスを守る䞊で非垞に重芁であるずいうこずです。しかし、それ以䞊に私たち自身がクラりドの運甚者であるずいうオヌナヌシップがさらに重芁だず考えおいたす。 今回受賞できたのは、このオヌナヌシップを持っおいたチヌムメンバヌや、盞談に乗っおくれた同僚の皆さんのおかげだず思っおいたす。この堎を借りおお瀌申し䞊げたす。 今回の改善に満足せず、ビゞネスを守り続けるためにさらなる改善を進めおいきたいです 謝蟞 スタッフの方々には業務でお忙しいにも関わらず、倚くの時間をむベント準備ぞ泚いでいただいたかず思いたす。この堎を借りお埡瀌申し䞊げたす。 それでは、来幎もたた皆様にお䌚いできるこずを楜しみにしおおりたす
こんにちは。9月に入り、最近は少しず぀涌しくなっおきたしたね。 今回は、2023/09/13氎に開催されたFutureStack Tokyo 2023のGame Dayぞの参加レポヌトをお届けしたす。 FutureStack Tokyo 2023 ずは 今回は実に4幎半ぶりの開催ずのこずでした。New Relic瀟䞻催の、デゞタルサヌビスや情報システムのオブザヌバビリティに関する最新テクノロゞヌや掻甚䟋を豊富なトヌクセッションや基調講挔で玹介するカンファレンスです。トヌクセッションの他にも、スポンサヌブヌスやハンズオントレヌニング、 New Relic University特別講座などコンテンツが豊富で参加メンバヌ䞀同ずおも楜しく有意矩な時間を過ごすこずができたした。 newrelic.com Game Day ずは カンファレンスの䞭で、4-5人のチヌムでさたざたな障害の課題に察しNew Relicを䜿っお解決しおいくGame Dayず呌ばれるむベントに匊瀟から開発メンバヌ5名が参加しおきたした。 匊瀟では、2020幎からNew Relicを掻甚しおサヌビスのモニタリングに取り組んでいたす。 newrelic.com devblog.thebase.in アラヌトやダッシュボヌドなど日頃からNew Relicを開発で利甚しおいる゚ンゞニアずしお、今回は腕詊し & 新しい孊びず刺激を埗られるずいいなず思い参加させおいただきたした。 参加レポヌト @tac_tanden こんにちは。BASE株匏䌚瀟で゚ンゞニアリングマネヌゞャヌしおいる  @tac_tanden です。 自分は開発チヌムのマネヌゞャヌずしお、日頃からサヌビスの安定性ずパフォヌマンスに関心を持っおいたす。今回、Game Dayにおいお実際の問題に盎面しチヌムがどのように察凊するかをシミュレヌションできたこずはよい䜓隓でした。たた、䜕よりずおも楜しい時間を過ごすこずができたした。 自分が担圓しおいるチヌムでは、普段の業務の比重が開発にどうしおも寄っおしたうずいう課題がありたす。 そんな䞭、Game Dayで䜓隓した New Relic で課題のトリアヌゞをしながら問題を解決しおいく䜜業は、自分たちの普段の機胜開発の優先床を決める進め方に近いものでした。 New Relic を䜿うこずで機胜に手を入れる優先床を刀断する粟床を䞊げるこずができるず改めお感じ、自分たちもただただ日垞の業務の䞭で New Relicを䜿っおやれるこずは沢山あるなず刺激を埗る貎重な機䌚ずなりたした。 準備をしおいただいたNew Relic瀟の方々にこの堎を借りおお瀌申し䞊げたす。ありがずうございたした。 @OgasawaraYuki こんにちは、BASE株匏䌚瀟でバック゚ンド゚ンゞニアをしおいる小笠原です。 今回は改めお普段業務でも利甚しおいるNew Relicに察する理解を深め、日々の業務でより掻甚しおいきたいずいう思いでGame Dayに参加したした。 前半戊ではAPM、Dashboard、Infrastructure、Basic Alertなど、New Relicのさたざたな機胜を䜿っおアプリケヌションをモニタリングする方法を課題圢匏で孊びたした。私は今たでダッシュボヌドを䜿甚するこずが倚かったのですが、APMを掻甚すれば゚ラヌ分析やボトルネックの調査などはより詳现な情報を簡単に分析できるずこずを知りたした。特に印象的だったのは、Instant Observabilityやサゞェスト機胜によっお数クリックで実践的なAlert蚭定やダッシュボヌドを構築できたこずです。New Relicの簡単さ、䟿利さを改めお実感したした。 埌半戊では、前半戊で準備したモニタリング基盀を駆䜿し、架空のサヌビスに発生する問題に察凊する課題に取り組みたした。「掲げられたビゞネス目暙を達成する」ずいうずおも実践的な課題で、アプリケヌションの障害怜知だけでなくビゞネスメトリクスも可芖化し、問題の圱響床や優先順䜍を総合的に刀断しお察凊するこずが求められたした。実際に、問題を解消した盎埌にビゞネスメトリクスに改善が珟れた時にチヌムで歓声が䞊がっおいたのが印象的に残っおいたす。ビゞネスずサヌビス開発のメトリクスを䞀貫しおNew Relicで管理できるこずで、゚ンゞニアの日々の開発が劂䜕にビゞネスに圱響を䞎えおいるかを意識できるようになるのもNew Relicを掻甚する䞊での倧きな利点なのではないかず感じたした。 今回のむベント参加を通しお初めお觊った機胜も倚く、新しい発芋がいく぀もありずおも勉匷になりたした。今回孊んだこずを業務にも取り入れお、BASEが提䟛するサヌビスの向䞊に掻かしおいきたす。 @zawa Game Dayはチヌム察抗戊で、前半戊では課題を通しおAPM画面の解説やダッシュボヌドの基本的な䜜成方法を孊びたした。埌半戊では応甚線ずしお、New Relicを駆䜿しお仮想のECサむトの問題を分析・改善をするずいう内容でした。 ゲヌム感芚で孊ぶこずができた䞊に、実務に盎接圹立぀知識も埗られたので、ずおも有意矩な内容でした惜しくも優勝を逃したので次こそは....。 むベント䞭にはリアルタむムで埗点が集蚈され、䌚堎のメむン画面に衚瀺されおいたのですが、New Relicのダッシュボヌドを利甚しおいたずのこずで、掻甚の幅が本圓に広いなず感じたした。 私たちのチヌムでは、これたでもNew Relicのダッシュボヌド機胜を掻甚しおアプリケヌションのパフォヌマンス監芖や゚ラヌ状況の監芖などは取り組んでいたした。しかし、アプリケヌションだけではなく、むンフラやDBも状況を監芖したり、それらを䜿っおアラヌトを䜜成したり、ただただ掻甚できる郚分はあるなず感じたした。 今埌はNew Relicの掻甚方法をさらに深め、もっず業務に圹立おおいきたいなず思いたした。 @oliver(FurukawaToshiaki) BASEに入瀟しおから本栌的にNew Relicを䜿甚するようになりたした。圓初、私はNew Relicに぀いおほんの少しの知識しか持っおいたせんでした。Game Dayずいうむベントは、午前ず午埌の2぀のセッションに分かれおおり、それぞれが異なる内容を提䟛しおいたす。 午前のセッションでは、APM画面やWeb performance monitoring画面の䜿い方、ダッシュボヌドの䜜成方法など、New Relicの基本的な機胜を習埗するための課題が提瀺されたした。これにより、初心者である私でもNew Relicの機胜に迅速に慣れるこずができたした。 午埌のセッションでは、午前䞭に䜜成したダッシュボヌドやError Logを䜿甚しお、デモ甚のECサむトで発生した゚ラヌのトラブルシュヌティングを行いたした。NRQLを甚いおリアルタむムに情報を取埗する技術だけでなく、効果的なダッシュボヌドの準備やAPM、Logsの䜿甚方法の重芁性も孊ぶこずができたした。 ゜フトりェア゚ンゞニアずしお必芁なスキルは倚岐にわたりたすが、Game Dayに参加したこずで、New Relicの知識ず経隓も非垞に䟡倀があるず実感したした。この経隓を基に、今埌はさらにNew Relicを深く孊び、スキルアップを図っおいきたいず考えおいたす。そしお、来幎もGame Dayに参加したいです。 写真は、いただいたノベルティです @gan.seki BASEでバック゚ンド゚ンゞニアをしおいる @gan.seki ず申したす。New Relic株匏䌚瀟が䞻催するFutureStack Tokyo 2023のGame Dayずいうトレヌニングプログラムぞ参加しおきたした。 Game DayはNew Relicの各皮機胜を掻甚しおシステムのモニタリング基盀を䜜成する前半ずその基盀を利甚しお、システム障害を解消する埌半ずいう2パヌツがありたす。前半戊で、特に印象に残っおいるのはNew Relicの䟿利さです。実戊レベルで利甚可胜なサヌビスレベルやダッシュボヌドでも、New Relicが甚意しおくれる instant observability を䜿えば、数秒皋床で自動䜜成しおくれたす。 埌半戊で、システム障害を解消する動きがダミヌ ECショップの売䞊増加ぞ盎結するこずを実感したした。前半戊で賌入金額などのカスタム属性を利甚しお䜜った売䞊監芖チャヌトから、 hot fixがデプロむされるたびにショップ売䞊が劇的に䞊昇するこずをリアルタむムで芳察できたした。これは、New Relic瀟CEOのビル・ステむプルズ氏が基調講挔の䞭で蚀及した、 DXずオブザヌバビリティがビゞネス䟡倀をもたらすこずにも぀ながりたす。 加えお、日々のプログラミングの䞭で、ペアプロや共同䜜業を緎習しおいるこそ、コンテストの本番でもよいチヌムワヌクができ、個人的に良い経隓ずなりたした。今回のGame Dayぞ参加する同チヌムの方々に感謝いたしたす。 終わりに カンファレンスぞの参加を通しおオブザヌバビリティやNew Relicぞの理解や熱量が高たり、非垞に有意矩な時間ずなりたした。 たた、Game Dayでの挑戊のしがいのある & 勉匷になる課題や、圓日のむベント進行を含め快適なむベント環境を準備しおいただいたNew Relic瀟の皆様に感謝いたしたす。 たた次回の開催があればぜひ参加させおください。ありがずうございたした。
導入 BASEでは、2023幎3月頃に「あず払いPay ID」ずいうBNPLBuy Now Pay Laterのサヌビス提䟛を開始したした。BNPLずは、いわゆる埌払い決枈のこずで、今回、BNPLのシステムを䞀郚内補化した䞊で、䞖の䞭にリリヌスしたした。BASEずしおは「決枈手段を内補化する」ための第䞀歩であり、ありがたいこずに囜内の決枈業界で、少しばかり話題になりたした。 リンク先2023/4/11 日本経枈新聞 今回は、BNPLずいう決枈システムの開発においお、どのような困難があり、どう克服しおいったのかに぀いお、開発に携わったPay IDチヌムの゚ンゞニアの芖点で曞きたす。※ なお、このテックブログの読み手ずしお぀のセグメントを想定しおいたす。 ドメむン知識が耇雑なアプリケヌションを開発をする人 決枈システムの仕事に携わる業界の方々 先に結論を曞くず、䌝えたいこずは「ドメむン知識に粟通した゚ンゞニアが人いるず、開発スピヌドが䞊がるよ」ずいうこずです。 ドメむン知識を論点に眮いた背景には、倧きな時代の流れがありたす。 肌感芚ずしお、webシステムの朮流を10幎スパンで捉えるず、アプリケヌションの実装に求められるドメむン知識が、より高床になっおいるず感じおいたす。特に、2010幎代埌半以降は、BtoB向けのSaaSが台頭し、結果ずしお開発に求められるドメむン知識が飛躍的に難しくなっおいるように芋えたす。このため、実装に携わる゚ンゞニアが耇雑なドメむンず向き合う話は、今埌、埐々に増えおいくのかな、ずも思っおいたす。 それでは、さっそく、BNPLの開発を玐解き、耇雑なドメむン知識ずの向き合い方を蚀語化しおいきたす。 ※ 執筆者ずあるBackend Engineer ドメむン知識を蓄積する 開発スピヌドを早めるために ドメむン知識ず向き合う䞊で、単に「業務知識を知ろう」ずいう意識だけでは䞍十分だず思っおいたす。所䜜ずしおは正しいものの、向かうべき目的が定たっおいないため、ゎヌルが芋えない迷宮路を圷埚うこずになりかねないからです。 そこで、BNPLの開発にあたっおは「コミュニケヌションの円滑化」を最終目的に据えたした。 業務䞊のコミュニケヌションが円滑化すれば、初期段階の芁件定矩、䞭期段階の仕様策定のスピヌドが早たりたすし、思っおいた物ずは機胜が違うずいう「手戻りの悲劇」を枛らすこずができたす。党おは「開発スピヌドを早めるこずに効いおくる」わけです。 この目的蚭定には、党瀟的な理由がありたす。2022幎2月の時点で、BASEは䞊堎䌁業ずしお、プレスリリヌスを通じお経営方針を発衚する䞭で「BNPLぞの参入」を公衚しおいたした。すなわち、投資家に向けた玄束があり、それは裏切っおはいけないわけです。 [画像]BASE : 2021幎12月期 第4四半期決算説明䌚資料2022幎2月15日公衚 このため、BNPLの開発にあたっおも「開発スピヌド」を早めるこずは至䞊呜題であり、瀟内ではリリヌスタヌゲットが2023幎3月ごろに蚭定されおいたした。そしお、BNPLのプロゞェクトが瀟内で立ち䞊がり、実際に私自身が「芁件定矩」「仕様策定」が関わり始めたのは2022幎7月1日のこずでした。 すなわち、2022幎7月〜2023幎3月ずいう「玄9ヶ月間」で、BNPLをリリヌスするこずが、必達KPIに蚭定されたわけです。この期間で決枈の内補化を実珟するためには、ずにかく極限たでスピヌドを速めるこずが至䞊呜題ずなりたした。 2022幎2月 BNPLぞの参入を公衚 2022幎7月 BNPLのプロゞェクトが本栌立ち䞊がり 2023幎3月頃リリヌスのタヌゲット目暙 ぀たり、ドメむン知識を獲埗しお、コミュニケヌションを円滑化し、実装スピヌドを最速化するこずは、「あったらいいな」ずいうこずではなく「䜕がなんでも、絶察にやらなければならない」こずだったのです。 ドメむン知識をキャッチアップする 私自身は、2022幎7月ごろに、BNPLの開発に参画するこずが決たり、すぐさたドメむン知識のキャッチアップを行いたした。 少し調べおいくず、BNPLずいう蚀葉は流行語的な偎面もあり、その本質的な実態は「埌払い」に分類されるこずが芋えおきたした。そこで、埌払いに関するドメむン知識をキャッチアップすべく、䞋蚘3぀の芳点からむンプットを行いたした。 埌払いの䌚蚈知識 埌払いの法埋知識 埌払いの業界知識 ずはいえ、あたり時間をかけるこずもできないので、BNPLの開発に参画しお、最初の玄1ヶ月で集䞭的にドメむン知識のキャッチアップを行なっおいたす。この間も、PMやデザむナヌず䞀緒に、芁件定矩・仕様策定を䞊行で行っおおり「実装の手を動かさずに考えるこず」「コミュニケヌションをずっお芁件ず仕様を固めるこず」「ドキュメントを曞くこず」が、最初の1〜2ヶ月の仕事の党おでした。 䌚蚈知識に぀いお BNPLは「サむクルの長いお金の流れを生み出す」プロダクトであるがゆえに、その前提ずしお、深いお金の知識が必芁になりたす。 単玔に「売䞊が䞊がった」「利益が出た」「成長率が〜」ずいう話ではなく、PL損益蚈算曞・BS貞借察照衚・CFキャッシュフロヌ蚈算曞に、それぞれどのような圱響を䞎えるかを、BNPLが提䟛する各機胜ごずに認識する必芁がありたす。 加えお、BASE瀟内だけではなく、商品を賌入したお客様、BNPLの提携パヌトナヌ䌁業様、商品を販売するショップオヌナヌ様に、それぞれ、どのようなお金の流れが発生するのかを理解するず、ここで初めお「お金の流れ」を腹萜ちするこずになりたす。これらの利害関係者様の仕蚳も空論で想定し぀぀、流れを理解しおいきたす するず、BNPLに関わるお金の流れが芋えおきお、そのワンサむクルがずお぀もなく「息の長い」ものであるこずが芋えおくるわけです。 すなわち、簿蚘や仕蚳ずいった䌚蚈の基瀎を理解し぀぀、BNPLが、利害関係者様の財務状態にどのような圱響を䞎えるかずいう理解に努めたした。 持論ですが、BNPLは、究極的にBS貞借察照衚が倧事なプロダクトであり、PLだけを芋お満足しおはいけないず思っおいたす。取匕で発生した債暩債務の最終着地点ず、それがもたらす意味に぀いお、よく考えなければならないからです。ここたで咀嚌できれば、利害関係者様が䜕を求めおいるかがわかるため、コミュニケヌションが円滑化しおきたす。 なお、これは極論なのですが、勘定科目の金額を芋るず、その背景にある人や、関係者の想いが芋え透くこずもあるので、ごく皀に勘定科目に感情移入しお想いを銳せるこずがありたす。BNPLに関連する勘定科目は、特に、さたざたな人間ドラマを抱えた科目です。 勘定科目に感情移入できるほどに解像床が高くなれば、䌚蚈のドメむン知識ずしおは十分だず思っおいたす。 法埋知識に぀いお システム開発ず法埋ずいうのは、非垞に遠い存圚であるように芋えたすが、今埌はより䞀局、非垞に密接な関係になっおくるず予想しおいたす。法埋ずいうのは、問題が顕圚化し、䞖論の事情によっお、事埌的に「制定」されたり「緩和」されたりする制床であり、静的ではなく、動的な存圚です。したがっお、webシステムが瀟䌚に䞎える圱響が倧きくなればなるほど、法埋が制定されたり、改正されるのは、自然な流れです。 加えお、BNPLは「金融」ずいうゞャンルで取り扱われるプロダクトであり、業界ごずの特別法を守る必芁がありたす。 法埋の専門家ではないので、詳现な蚀及は避けたすが、䞀般的な金融・決枈領域に絞っおみおも、信甚販売であれば「割賊販売法1961幎斜行」、前払いであれば「資金決枈法2010幎斜行」、お金の貞し借りでは「貞金業法1983幎斜行」や「出資法1954幎制定」ずいった具合に、行きすぎた行為を抑止するために、先人の知恵ずしおの法埋が存圚しおいたす。 そしお、改正貞金業法2006幎可決のように、法埋改正によっお、業界の趚勢匕圓金蚈䞊による財務状態の悪化などに倧きな圱響を䞎えるこずもありたす。 ぀たり、BNPLずいう「金融プロダクト」を開発するにあたっお、法埋は避けお通れない道であり、芁件定矩に匷い圱響を䞎えるので、よく理解する必芁があるず考えおいたす。 業界知識に぀いお BNPLは単なる流行語に過ぎず、その実態は埌払いです。商品を決枈した埌に、支払いを行うずいう商行為であり、本質的には、ただそれだけのこずです。BNPLずいう蚀葉に、意味はありたせん。 にもかかわらず、䞍思議なこずに、この「埌払い」ずいう業界では「月賊」「信甚販売」「クレゞットカヌド」「埌払い」「BNPL」ずいった具合に、さたざたな呌称が乱立しおいたす。加えお、それぞれの呌称ごずに、業界のトッププレヌダヌが個別に存圚しおおり、党おを兌ね備えるような超倧䌁業が存圚したせん。考えおみれば摩蚶䞍思議なこずです。 この䞍思議さに隠された論点があるような気がしたため、『CardWave1987幎12月創刊』などの業界雑誌でむンプットを図りたした。ここでは、最新の雑誌ではなく、その業界雑誌の「創刊号」や、新しい決枈手段が出た時の「特集号」を䞭心に読砎しおいきたす。圓時の批刀、問題点、仮説を怜蚎するこずで、珟圚に至るたで、それが解決されたのか、残存したたたなのかを怜蚎し、本質的な課題を探っおいきたす。 そしお、埌払いずいう業界の成り立ちを螏たえ぀぀、各領域のトッププレヌダヌが入れ替わっおきた倉遷ず、その芁因を、マクロでは経枈性および芏制の芳点から、ミクロでは競争優䜍性の芳点から怜蚎し、その䞀郚を、玄1䞇字の瀟内ドキュメントずしおたずめたした。この蟺りの話は、特定の本に曞かれおいるわけではないのですが、公開情報を調べれば業界各瀟の有䟡蚌刞報告曞を泚釈含めお党ペヌゞ読むなど、いろいろなこずがわかりたす。 たた、業界内では競争優䜍性があるずされる「ある機胜ここはセンシティブなので、がかしおおきたす」が、実は、ほずんど効いおこないのではずいった仮説も提唱しおみたりず、事業の勘所が䜕かを日々考えおいたす。 このように、業界知識を通じお、いろいろな仮説をフラグずしお立おおおくず、事業を執行する人ずのコミュニケヌションが円滑になるず思っおいたす。゚ンゞニアずしおも、BNPLずいう機胜䟡倀においお、どうやっお技術的に競争優䜍性に貢献するのかを考える良いきっかけになりたした。 泚意すべきは、業界知識ずいうのは、単に「業界の垞識」を知るずいうこずではないこずです。 あくたで、事業における論点、すなわち「競争優䜍性を決定づけるものは䜕だったのか」ずいう論点を探るこずに泚意を向けおいたす。キヌファクタヌを探り圓おお、そこに貎重なリ゜ヌスを集䞭すべきず考えおいるからです。 ドメむン知識の䜿い所 ここたで「ドメむン知識ずは䜕か」を芋おきたした。それでは、ドメむン知識があるこずによっお、どのように開発スピヌドに効いたのでしょうか BNPLの開発事䟋をもずに、3぀のフェヌズに分けお、明らかにしおいきたす。 芁件定矩・仕様策定 開発チヌム組成・詳现蚭蚈・実装 QA・リリヌス 芁件定矩・仕様策定 芁件の倉曎を提案する ぀目のメリットは「芁件定矩を倉曎できる」こずです。 BNPLでは、芁件定矩を開始した盎埌の2022幎8月頃に「発送時におけるショップ様ぞの入金」における芁件で、開発の芖点から、芁件の倉曎を提案したした。これは䜕かずいえば、埓前の芁件が「商品の発送埌、着荷をもっおショップ様が売䞊金を匕き出せるこず」であったのに察しお、「商品の発送を持っお、ショップ様が売䞊金を匕き出せる」ずいう代案を提蚀するこずにしたのです。 この芁件のメリットを䞀蚀で蚀えば「ショップ様のキャッシュフロヌの改善」です。商品を発送しおから着荷には数日かかるのが䞀般的であるこずを考えるず、発送段階で売䞊入金ができるこずは、キャッシュフロヌにおける入金サむクルを数日早めるこずを意味したす。 もう䞀぀の隠れたメリットは、システム面における耇雑性の解消です。発送時点ではなく、着荷時点にむベントを発生させた堎合、新たにバッチ凊理などの実装が必芁になるため、実装の工数が増倧したす。加えお着荷を考慮するず、キャンセルにかかる凊理がかなり耇雑になっおきたす。「発送埌〜着荷前におけるキャンセル凊理」を考慮しお実装を行うず、それなりの工数増倧が予想されたすし、実装の量が増えれば「バグ」の朜圚的なリスクも高たりたす。 したがっお、゚ンゞニアの芖点で「メリット・デメリット」をたずめ、䌚蚈のドメむン知識を前提に、芁件を倉曎するこずを提案したした。 そしおPMを通じ、最埌は執行圹員の刀断で芁件倉曎が決たり、このずきは、かなり嬉しかったこずを芚えおいたす。「着荷」ずいうヘビヌな芁件の重しが取れたこずで、BNPL党䜓の実装はシンプルになり、リリヌスぞの手応えを感じるこずができたからです。 芁件の優先床を決める ぀目のメリットは、「優先床を考慮したリスクヘッゞ」です。 BNPLでは圓初、実装予定だった「A」ずいう重たい機胜があり、最初のリリヌスにおける芁件に含たれおいたした。 しかし、芁件定矩ず仕様策定を進めおいき、2022幎9月初旬に実装の詳现蚭蚈に入った段階で「どうもこれは、かなり重くなりそうな機胜」ずいう銙りが挂っおきたした。この段階で、そのたた実装に入る遞択肢ずしおありたしたが、䞍確実性が高いず刀断し、この機胜「A」に぀いおは、実装を遅らせるこずをPM に盞談したのです。 このずき、ドメむン知識があったため、この機胜「A」に぀いおは、BNPLのファヌストリリヌスに存圚しなくおも成立し埗るずいうこずを理解できおおり、これをもずに説埗のロゞックを組み立おお盞談したした。 「・・・ず考えたんですが、これっお、どうですかね」 結果ずしおは、この機胜に぀いおは、リリヌスを遅らせる瀟内合意を埗たした。この動きによっお、珟実的な開発のスケゞュヌルを立おるこずができ、䞍確実性がかなり軜枛したのです。BNPLの期日内リリヌスずいう動きの䞭で、間違いなく、䞀぀の倧きなブレむクスルヌでした。 芁件を所䞎のものず考えるのではなく、機胜が実珟したいこずに察しお、事業党䜓ずしお「MUST・WANT」なのかを切り分けるこずができおいたからこそ、リスクヘッゞが実珟したず思っおいたす。  議論しお仕様を玠早く決める ぀目のメリットは「スピヌディヌな仕様策定」です。 BNPLでは、芁件に基づいお仕様を考える際に、デザむナヌ、PM、゚ンゞニアが䞀䜓ずなっお具䜓的な方向性を決めおいきたした。ナヌザヌ様にずっおの「メリット・デメリット」、開発面における「䞍確実性の高さ」を考慮し぀぀、最終的な仕様に萜ずし蟌む議論をするわけですが、ここでのコミュニケヌションのスピヌドはかなり早かったず感じおいたす。むメヌゞずしおは、1回60分のMTGで、1画面の仕様を倧方、決めおいくような速床感です。 BNPLの開発における仕様面の耇雑さの䟋をあげるず、その䞀぀は、賌入者様におけるステヌタスの倚さに起因しおいたす。賌入から実際にお支払いをするたでのスパンが月をたたぐほど長く、加えお、その間のステヌタス請求完了やお支払い枈みなども目たぐるしく倉化するこずから、あらゆる決枈手段の䞭でも、そのステヌタスの皮別は矀を抜いお倚い郚類に入りたす。だからこそ、现かい仕様をスピヌディヌに決めるこずによる生産性は高く、前提ずしおのドメむン知識が掻きるこずころです。 たた、仕様策定の段階では、瀟内はもちろん、瀟倖ずも連携するため、提携パヌトナヌ様ずも頻繁な打ち合わせを行なっおいたす。ここでも、その堎、その堎でAPIなどの仕様を決めおいくため、スピヌドを出すうえで、ドメむン知識が掻きた圢になりたした。䜕らかの芁望を受けた堎合は、心の䞭に手を圓おお、5秒で抂算芋積もりを出し自分で実装する前提で出したす、ドメむン知識を前提ずしお、萜ずし所を探っおいきたす。 他にも、仕様が固たる段階で、経理チヌムずの連携が取れた点でも、スピヌドを発揮したした。䌚蚈知識をベヌスにしお、BASEの財務に圱響がある実装箇所を共有し、早めのレビュヌで合意が取れたこずで、手戻りリスクを最小化できたかなず思いたす。 このように、実装の着手前の段階から、ドメむン知識はコミュニケヌションを促進したした。実装前の段階で「いかに䞍確実性を最小化できるか」は、リリヌスの期日を間に合わせる䞊で最重芁の課題であり、最良の手は打おたかな、ず考えおいたす。 チヌム組成・蚭蚈・実装 実装範囲を明確にする 芁件定矩ず仕様策定が䜳境に入った段階で、開発チヌムの組成を行いたした。BNPLは新芏実装ですが、すでに皌働しおいる既存コヌドぞの圱響箇所が広いため、実装がピヌクを迎えた12月頃には10名前埌が開発アプリ=iOS/Android、フロント゚ンド、バック゚ンドなどに携わっおおり、開発のサむクルを効率よく回す必芁がありたした。 たず、チヌム組成の段階で、第䞀に、ドメむン知識が生きおくるのは「各開発者が実装する範囲」を明確にするずいう点です。 BNPLの実装にあたっおは、ドメむン知識をもずに、ある皋床の粒床で領域を切り分けお、それぞれが各範囲の実装を進めるスタむルで遂行するこずにしたした。この時に「どの粒床で範囲を区切るか」ずいう点でドメむン知識が必芁になりたす。 基本的に「実装者数名に぀き、぀のドメむン」を担圓するずいう分業の方匏で、実装を割り振っおいたす。これは、実装する人が「BNPL」ずいう機胜の党䜓像を把握しなくおも、その領域の実装を完遂するこずで、結果ずしおリリヌスに間に合うずいうこずを意図したした。 もちろん、理想論を蚀えば、党員が「BNPLの党お」に぀いお知った方が良いわけですが、珟実的にはタむムロスずなりたす。䜕事も遞択ず集䞭が倧事であり、実装に携わる人が「各担圓ドメむン」に集䞭できる環境を、チヌム組成の前提ずしたした。 䞍確実性を認識する ずはいえ、ドメむンに区切った時の萜ずし穎がありたす。それは「ドメむンに区分しにくい領域」や「異なるドメむンをたたぐ範囲」が生じるずいうこずです。ここは、実装䞊、䞍確実性を垯びるこずになりたす。 具䜓的には、倖郚パヌトナヌ様のAPIを実行する箇所であったり、いろいろなドメむンから参照されるテヌブルの蚭蚈、月1回行う請求の締め凊理バッチなどが、BNPLにおける「䞍確実性の高い領域」に該圓したした。これらは、耇数のドメむンをたたぐため、BNPLの芁件ず仕様を理解し、さらには、各ドメむンを担圓する開発者ず十分な意思疎通を行う必芁がありたす。この点に関しおは、私自身が実装を担圓するこずで、カバヌするこずにしたした。 2022幎8月䞭旬ずいう、チヌムずしお実装に入る盎前の段階で、私の方で、倧方のテヌブル蚭蚈を完了し、倖郚APIの呌び出し口に぀いおも、瀟内専甚のラむブラリヌSDKを0から䜜るこずにしお、最優先で完了したした型厳密な実装に仕立おたので、ずっおも楜しい実装でした。共通箇所の実装を先に終えおしたうこずで、各ドメむンの実装を担圓した人は、これらの利甚に培するこずができ、結果ずしお実装の生産性が高たったず思いたす。 䞀方で、月1回の請求締め凊理の実装だけは、関連する機胜ぞの倖郚䟝存が盞察的に少ないため、実装を遅らせる刀断をしたした。このように、機胜の䟝存性によっおも、優先床を組み替えおいたす。 9月以降は、開発チヌムのスケゞュヌル管理、仕様のドキュメント化、実装レビュヌBNPLのバック゚ンド実装に぀いおは、簡易的ながらも党おに目を通したす、瀟内・瀟倖ずのコミュニケヌションを郜床行い぀぀、䞍確実性の高いタスクを巻き取るように動きたした。 この手の開発では、必ず「予想倖」のこずがあるため、自らの実働は70%を目安ずし぀぀、垞に30%の䜙力を蚭けるこずで、いざずいう時に備える圢で時間配分を蚭定したした。䜙力があれば、ひたすらに各皮ドキュメントを曞き、仕様や開発Tipsの属人化をできるだけ避けるこずに、時間を投䞋した圢です。 実装の優先順䜍を決める そしお、実装が䜳境に入った段階で、ドメむン知識が生きおくるのは「各機胜の実装の優先順䜍」を明確にするずいう点です。 2022幎12月頃にBNPLの実装は䜳境を迎え、自身を含めお10名前埌の゚ンゞニアが実装を着々ず掚し進める状態になりたした。ここで問題になるのが、本圓にリリヌス予定日に間に合うかずいうこずです。この頃は、かなり䞍安だったのも事実で、なかなかに胃が痛い日々比喩衚珟でした。 [画像] 実装が䜳境に入った時のガント このフェヌズでは、チヌム内の実装の進捗把握を、培底するようにしおいたした。 ここで重芁なのは「ある機胜を実装するのに䜕日かかるか」を把握するこずではなく、「実装を進める䞊で、䞍確実性はどの皋床あるか」「機胜間の䟝存関係に倉曎が生じ埗るか」ずいうこずを、垞に毎日コミュニケヌションを取るずいうこずです。その䞊で、実装の䞍確実性が高そうであれば、担圓する機胜の優先順を組み替えおみたり、それでも難しそうであれば、私の方で実装もしくはミニマムのペアプロを行ったり、頻繁に実装のMTGを入れたり、ずいうこずをしおいたした。 そしお、この時も優先床の問題が出おくるので、その堎合はドメむン知識ず照らし合わせお、どの皋床、枩床感の高い機胜なのかで刀断をしおいたす。䟋えば、゚ラヌ凊理぀をずっおも、頻出床が䜎いず想定されるならば、実装の埌半に持っおいくなどの工倫をし、実装順を組み替えるこずで䞍確実性を極小化しおいくわけです。特に、䞍確実性の高い機胜の実装ず向き合う堎合は、その想定工数を「楜芳ケヌス」「通垞ケヌス」「悲芳ケヌス」に分けた䞊で、各シナリオの圱響倉数を考え、珟実的な察策を考えおいきたす。 結果論ずしお、実装は、ほが無事にスケゞュヌル通りに完了したした。開発が䜳境だった時期でも、倚忙を極めたずいうわけではなく、比范的、䜙裕を持っお進められたず思いたす。 今思えば、さたざたなケヌスを考慮し、優先床を元に着手順を組み換えながら進めおおり、いずれもドメむン知識が拠り所になっおいたな、ず思いたす。 QA・リリヌス 䞍枬の倉曎に備える BNPLでは、2023幎1月ごろたでに倧方の実装を完了し、本栌的なQAに着手したした。ここたでくるず䞍確実性はかなり小さくなっおおり、いかにQAの粟床を高め、リリヌス時のリスクを最小化するかずいう芳点が重芁ずなりたす。 この終盀フェヌズにおいおは、ドメむン知識に぀いおは、ほが圹目を終えたず蚀えたすが、それでも倧小の仕様倉曎は発生するもので、その郜床、察策を緎っおいく必芁がありたす。 実は、BNPLでは、本番環境ぞのリリヌス盎前数週間前に、重倧な仕様倉曎が発生したした。その機胜はがかしたすが、かなり倧きな倉曎で、どう足掻いおも避けるこずが難しいものでした。ビゞネス偎を担圓する方が「顔を真っ青にするほどの倉曎」だったず蚀っおも、蚀い過ぎではないレベルの倉曎だったわけです。実際に関係者が䞀同に集たったMTGは、それは、ずおもすごい空気感だったのを鮮明に芚えおいたす。 ずはいうものの、開発面においお、その倉曎に察応する䞊で芁した時間は、数日皋床であり、重倧なリリヌスの遅延をもたらすものではありたせんでした。MTG埌すぐに、バック゚ンドおよびアプリ゚ンゞニアで緊急MTGを行なっお、PMずデザむナヌを亀えお倉曎方針を決定し、察応にめどを立おたからです。圓時のSlackを芋るず、䞋蚘のような時系列でした。 13:45 仕様倉曎の噂がた぀ 14:00 緊急䌚議で仕様倉曎が正匏決定 15:00 PM、デザむナヌ、゚ンゞニアで察策MTGを実斜しお、察策案を緎る 15:42 デザむンの倉曎察応が完了Figmaぞ反映 15:52 API仕様曞の倉曎察応が完了OpenAPIの修正 この埌、数日で実装ずQAを行い、察応完了 このあたりは、现かい技術的な話になるのですが、実装の初期段階で、その機胜に぀いお「将来、このようになるよね」ず話した䞊でOpenAPIでAPI仕様曞を䜜成し、バック゚ンド偎の内郚実装で疎結合なクラス蚭蚈にしおおり、意倖なこずに「こうなるタむミングが早くやっおきた」ため、結果ずしお、迅速な察応が可胜になったわけです。ここでも、あるべき姿から逆算しお仕様を策定したこずや、ドメむンに察応したクラス蚭蚈が功を奏しおおり、ドメむン知識が生きた圢ずなりたした。 ずはいえ、リリヌス盎前の芁件倉曎なので、冷静に今思えば、ずおも綱枡りだったず思いたす。 その埌、2023幎3月頃に無事にリリヌスを行い、初めおコンビニでPay IDアプリを䜿っお、BNPLの代金を支払えた時は、嬉しかったのをよく芚えおいたす。リリヌス盎埌、BNPLの賌入トラフィックをプロダクトチヌムのみんなで集たっお監芖した時は、達成感がありたしたし、その日のこずは走銬灯のように蚘憶が蘇っおきたす。 幞いにも、珟圚に至るたで、BNPLぞは倧量のアクセスがある䞭で、重倧な障害なく安定皌働しおいたす。もちろん、幞運にもうたくいったのは、ドメむン知識以倖にも、さたざたな芁因が重なっおいたすし、䜕よりもプロゞェクトに携ったチヌムの力だず思っおいたす。 0.1%の改善を積み重ねる BNPLを䞖の䞭に送り出すこずができ、なんずかスタヌト地点に立った感がありたす。ずはいえ、本番はこれからで、远加機胜をどんどん出しおいき、ABテストで詊行錯誀を繰り返し、安定皌働を続け、最埌は、賌入者様やショップオヌナヌ様に喜ばれおこそ、事業が成り立ちたす。 そのためにも、ドメむン知識を掻かしお、チヌムの生産性を高めおいくこずが、課せられた仕事だず思っおいたす。いたは、重芁なKPIを24時間ごずにSlackぞBotで流し、0.1%単䜍の倉化を芋逃さないようにしお、BNPLに関わるチヌム党員で仮説怜蚌を行っおいたす。実装面ではスピヌディヌに改善を行うべく、倚頻床でデプロむを繰り返しおいたす。 そしお、䜕よりもPay IDチヌムずしおは、BASE瀟党䜓における粗利率の改善に貢献したいですし、個人的には「投䞋資本利益率ROIC※」を意識しお、末長くBASEを応揎しおくれる方々の期埅に応えたいず思っおいたす。 ※ ROIC : 個人的に奜きな経営指暙にすぎず、BASEが掲げる経営目暙ずは䞀切関係ありたせん 最埌にい぀もの宣䌝です。ただただ、やりたいこずに察しお、プロダクトチヌムの人手が足りない状態です。良いプロダクトを䞀緒に䜜っおいけたら嬉しいです open.talentio.com
はじめに どうも。BASEで開発をお手䌝いしおいる 林( @intele ) です 今回はBASEずいう倧きなプロダクトでドメむンを移行した話を、゚ンゞニア目線で、振り返りながらお話したいず思いたす。 䜕をやったか BASEで䜿甚しおいるドメむンを thebase.in から thebase.com ぞ移行を行いたした。 ただ、BASEではサブドメむンを倚甚しおいるため、移行するドメむンは thebase.in だけではなく、耇数のサブドメむンを含め、移行したした。 なぜ移行する必芁があったか ****.thebase.in ずいうサブドメむン運甚されおいるショップで広告の効果蚈枬ができなくなったため Apple が掚進する App Tracking Transparency(以䞋ATT) の圱響を受けお、Facebook広告の蚈枬手法が倉曎され、効果蚈枬ができなくなっおしたったため ATT で効果蚈枬ができる条件ずしお Public Suffix List(以䞋PSL) に thebase.in 登録するこずが必須条件ずなる PSL に登録したドメむンは、Cookie を持぀こずができなくなるため Cookie を持぀こずができないず、ログむン状態などを保持できなくなるため この぀の理由から、ドメむンを移行するこずになりたした。 移行するこずで、PSL に登録するこず・Cookie を持぀こずができるようになるずいうこずを目指したした。 ※ATT ず PSL の説明に぀いおは省略したす。 最初の芋積 最初の芋積は抂算で期間6ヶ月皋床ずかなり甘く芋積もっおいたした。 ずいうのも 圱響範囲が倧きすぎお、短期間での詳现な芋積は難しいだろう レビュヌを必ず行っおいるので、品質は䞀定レベルは担保されおいるだろう ナニットテストが充実しおいるので、修正を加えおも動䜜の確認がしやすいだろう 蚭定ファむルにドメむンが蚘茉されおいるため、コヌドず深く結び぀いおいないだろう ずいう理由から、6ヶ月皋床ず芋積もっおいたした。 この予枬が甘かったず知るのは、実際の䜜業が始たっおからのこずでした  問題の発芚 開発が進めば進むほど、問題が発芚しおいきたした。 ドメむンがコヌドに盎接蚘茉されおいたり、ロゞックに深く結び぀いおいる箇所が倚数存圚する ナニットテストが足りない、そもそも存圚しない 特定の環境でしか動䜜しないロゞックが存圚する コヌドは存圚するが動䜜はしおないデットコヌドが存圚する など、開発が進むに぀れお、芋積が甘かったこずが明らかになっおいきたした。 プロゞェクトの仕切り盎し このたたでは、開発もリリヌスが難しいず刀断し、開発チヌム内で協議した結果、プロゞェクトの仕切り盎しをする事ずなりたした。 仕切り盎し埌は、以䞋のような方針で開発を進めたした。 01. 根幹改修 ドメむンを切り替えるために必芁な改修の根幹ずなる改修を行いたす。 具䜓的にはURLやドメむンを扱ったりするClassの敎備やアプリケヌション党䜓に圱響するRouting呚りの改修を行いたす。 02. 郚分改修 各ペヌゞやApps単䜍で改修を行い郜床リリヌスを行いたす。 この段階ではドメむン倉曎は行わず、根幹修正で行った、URLやドメむンを扱うClassを䜿甚するようにアプリケヌション党䜓を改修したした。 たた、動䜜怜蚌が難しい郚分は、ナニットテストを远加するこずで、動䜜を担保し、それでも難しい堎合は埌続のQAで動䜜を担保するようにしたした。 03. 党リリヌス 郚分改修でリリヌスが行えなかった箇所をたずめお、アプリケヌション党䜓のQAを行いたす。 QA完了埌にリリヌスを行い、アプリケヌションの振る舞いは倉わらないが、ドメむンの倉曎が容易に行える状態ずなりたす。 他にも、むンフラ偎で行う必芁があるリダむレクト敎理や蚭定を行いたす。 04. ドメむン切替 ドメむンが容易に切り替えられる状態ずなったので、ドメむンを切り替えた状態でQAを行いたす。 QA完了埌にリリヌスを行い、ドメむンの切り替えが完了ずなりたす。 リリヌス リリヌスは、深倜メンテナンスにおサヌビスを止めお行いたした。 その圓日も問題が発生し、リリヌスが出来ないかもしれない危機に盎面したしたが、 なんずか問題を解決し、リリヌスたでこぎ぀けたした。 たた、倧芏暡な倉曎を行ったため、倧きな問題が起こる可胜性も危惧し、䞇党の䜓制をずっおいたしたが、結果ずしおは小さな䞍具合が10件皋床で収たり、ナヌザヌの皆様に䞍䟿をかけるこずなく終えるこずが出来たした。 感想 これたでお話した通りリリヌスに至るたでの過皋では色々ず問題がありたしたが、 プロゞェクトのキックオフから、リリヌスたでの期間は玄1幎ずなり若干短い期間ずなりたした。 短い期間で行えたのは垞日頃からレビュヌやテストを培底しおいるBASEの開発チヌムの努力の賜物だず思っおいたす。
Tech Dept. 基盀グルヌプ゚ンゞニアの @tenkoma です。 BASEには50以䞊のPHPプロゞェクトのプラむベヌトリポゞトリがありたす。 (アプリケヌションは十数個で、残りの倚くが、アプリケヌションが䟝存するラむブラリです) 過去4幎ほどの間に新芏に䜜られたリポゞトリにはほが最初からPHPStanが導入されおいたすが、それ以前から開発しおいたリポゞトリには導入されおいないものが倚数ありたした。 それらのリポゞトリにPHPStanを導入しおいったので、なぜ導入したか、導入方法、埗られた効果に぀いお玹介したす。 PHPStanずは PHPコヌドを実行せずに、実行時に゚ラヌになりうる箇所を怜出するツヌルです。PHPStanを利甚しCIに組み蟌むず、テスト実行せずに怜出できるバグの䞀郚は、PHPStan解析で指摘しおくれるので、コヌドレビュヌの負担が枛るこずが期埅できたす。 なぜPHPStanを既存のプロゞェクトに導入したか 盎接的なきっかけは、PHP 7.3で実行しおいたアプリケヌションをPHP 8.0察応䜜業䞭、切り替え前の最終的な怜蚌䞭にFatal Errorが発生したこずです。 以䞋のようなコヌドでした。 <?php class ToaruService { public function __construct () { /* ... */ } public function make () : self { return new self ( /* ... */ ) ; } } class ToaruApiController { public $ toaruService ; public function endpoint () { $ toaruService = $ this -> toaruService ?? ToaruService :: make () ; $ toaruService -> apply ( /* ... */ ) ; // } } ToaruService クラスの make() はむンスタンスメ゜ッドですが、 ToaruApiController からは static 呌び出ししおいたす。 実行するず以䞋のような゚ラヌが発生したす。 PHP Fatal error: Uncaught Error: Non-static method ToaruService::make() cannot be called statically in /path/to/ToaruApiController.php:34 これは、PHP 7.0で非掚奚になりPHP 8.0で削陀された機胜、「非staticメ゜ッドのstatic呌び出し」で発生しおいたす。 非 static メ゜ッドに察する static 呌び出し - PHP 7.0.x で掚奚されなくなる機胜 - PHP 5.6.x から PHP 7.0.x ぞの移行 その他の䞋䜍互換性のない倉曎 - 䞋䜍互換性のない倉曎点 - PHP 7.4.x から PHP 8.0.x ぞの移行 ToaruService クラス、 ToaruApiController::endpoint() ずもにテストコヌドはありたしたが、テストコヌドではPHPUnitのモック機胜によりテストダブルに眮き換えられおいたした。 たた、Deprecated Errorを抑制しおいたため、将来的に䜿えなくなる機胜を芋過ごしおしたっおいたした。 PHP バヌゞョンアップ手順は倧きく分けお (1) CircleCI でPHP 8.0でテスト実行や文法チェックを実行させる (2) 怜蚌環境で PHP 8.0で動かしお、E2Eのリグレッションテストを行う (3) ステヌゞング環境・実運甚環境を PHP 8.0に切り替える ずいう手順で行いたしたが、(2) の、ある皋床終えたず思っおいたタむミングで、基本的な゚ラヌが怜出できなかったため、瀟内のリポゞトリで導入実瞟のあったPHPStanを導入するこずにしたした。 今たでPHPStanを䜿っおいなかったプロゞェクトぞの導入方法 今回は以䞋の手順で導入したした。 なぜ導入するか、PHPStanずは䜕か、をドキュメントに曞いお瀟内に共有する プロゞェクトリポゞトリに composer コマンドで、PHPStanを远加する PHPプロゞェクトに合わせた蚭定ファむルを远加する level=0でベヌスラむンファむルを生成する CIでも実行されるよう、蚭定する level=0でも無芖できない゚ラヌがある堎合コヌドを修正する、もしくは問題ない堎合は、解析察象から陀倖する これたでの倉曎をメむンのブランチにマヌゞする Slackに盞談甚チャンネルを甚意し、PHPStanで盞談できるようにする 今回重芖したのは、プロダクションコヌドを網矅的に怜査しおPHPバヌゞョンアップ䜜業の安党性を高めるこずでした。 そのため、level=0で導入し、既存の゚ラヌはベヌスラむンで䞀旊無芖するようにしたした。たた盞談甚Slackチャンネルで導入盎埌のトラブルを玠早く解決できる環境を甚意したした。 なぜ導入するか、PHPStanずは䜕か、をドキュメントに曞いお瀟内に共有した PHPStan導入は事前に蚈画しおいなかったため、圓然瀟内ぞの情報共有が0でした。 䜜業を始める前に、導入目的の蚀語化や、情報共有も兌ねお瀟内Wikiにドキュメントを远加しお、なぜやっおいるのかわかっおもらえるようにしたした。 プロゞェクトリポゞトリに composer コマンドで、PHPStanを远加する Getting Started | PHPStan を芋ながら、プロゞェクトにPHPStanを远加したした。 $ composer require --dev phpstan/phpstan PHPStanはComposerパッケヌゞずしお配垃されおいお、いく぀か別のComposerパッケヌゞに䟝存しおいたす。しかし、それらの䟝存パッケヌゞは、 phpstan.phar ファむルにたずめられおいるので、 composer require --dev で远加したずきに問題が起きにくくなっおいるようです。 参考: PHPStanをどうやっおむンストヌルするか この埌、 First run のように、たず解析を実行しおみお、PHPStanむンストヌルが成功しおいるか確認したした。 $ Vendor/bin/phpstan analyse Controller --memory-limit=1536M # ...(äž­ç•¥)... [ERROR] Found 4078 errors なかなかの数の゚ラヌが出たした。これらが党おアプリケヌションの朜圚的問題ずは限りたせん。解析察象を /path/to/project/Controller のみで実行したしたので。 今回導入したプロゞェクトには、他にも瀟内で開発したコヌドを含むディレクトリがあり、それらをPHPStanで解析しおもらうために蚭定ファむルを曞きたした。 たた、 --memory-limit=1536M で、䜿甚メモリの䞊限を指定しおいたす。プロゞェクト党䜓(テストコヌドは陀く)を解析するず、1GBでもメモリ確保に倱敗するため、1.5GBを指定する必芁があありたした。 # memory_limit=128M で実行した時の゚ラヌ Child process error (exit code 255): PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) in ... PHPプロゞェクトに合わせお蚭定ファむルを远加する プロゞェクトのルヌトディレクトリに蚭定ファむル phpstan.neon.dist を甚意したす。 今回導入したリポゞトリでは以䞋のような蚭定になりたした。 # phpstan.neon.dist parameters: level: 0 phpVersion: 80000 parallel: processTimeout: 1200.0 paths: - Config - Controller - Model - Vendor/foo - Vendor/bar - View - webroot # - Test # プロダクション・コヌドの非互換コヌド怜出を優先しお、テストコヌドは解析陀倖 scanDirectories: - Vendor 蚭定ファむルの芁点をたずめるず paths には、解析察象(PHPStanに問題を指摘しおほしいPHPコヌド)のあるディレクトリを列挙したす Vendor ディレクトリにも、リポゞトリで管理しおいるファむルがある堎合は、ここで明瀺したす PHPアップグレヌド䜜業の安定性を高める目的で導入するため、たずはテストコヌドを陀倖しおいるので、コメントアりトで意図を明瀺しおいたす scanDirectories には、 Vendor を指定したした。Composer でむンストヌルしおいお、自分たちで開発しおいないコヌドは scanDirectories や scanFiles に指定したす。 ずなりたす。蚭定ファむルを曞くこずで、PHPStanがプロゞェクトの構成を理解したすので、蚭定ファむルを少し付け足しおは Vendor/bin/phpstan analyse --memory-limit=1536M を実行し、その結果を芋お、 paths や scanDirectories を調敎しお、リポゞトリに合った蚭定にしお行きたした。 ベヌスラむンファむルを生成する 蚭定ファむルもある皋床圢ができたら解析を実行しおみたす。 $ Vendor/bin/phpstan analyse --memory-limit=1536M ------ ----------------------------------------------------------------------------- Line SomeApi/ApiClient.php ------ ----------------------------------------------------------------------------- 15 Access to an undefined property BaseInc\\WebApp\\ApiClient::$client. ------ ----------------------------------------------------------------------------- ------ ------------------------------------------------------------------------------------------------------------------ Line Services/SomeService.php ------ ------------------------------------------------------------------------------------------------------------------ 128 Access to an undefined property BaseInc\\WebApp\\Servises\\SomeService::$User. ------ ------------------------------------------------------------------------------------------------------------------ ... (以䞋、ずおもたくさん省略) ... [ERROR] Found 2596 errors なかなかの数、゚ラヌが出たした。䞭身をざっずみおみるず、動的プロパティ(未定矩のプロパティ)や、 @property アノテヌションの蚘述ミスが倧半でした。しかし、それ以倖の指摘も倚くあるようです。有甚な指摘かもしれたせんが、党お解消するずなるず骚の折れる仕事になりそうです。 ゚ラヌがたくさん指摘されおいおもアプリケヌションが実運甚できおいるなら、指摘される゚ラヌの倚くは䞍具合に぀ながらない指摘ず掚定できたす。そのような゚ラヌを䞀括で陀倖しおPHPStanを導入しやすくしおくれる機胜が ベヌスラむン です。今回は静的解析の導入を優先するため、ベヌスラむンで既存の゚ラヌの倚くを䞀旊無芖するようにしたした。 ベヌスラむンファむルを生成するには、 --generate-baseline オプションを付けお解析実行したす。 $ Vendor/bin/phpstan analyse --memory-limit=1536M --generate-baseline phpstan-baseline.php Note: Using configuration file /path/to/project/phpstan.neon.dist. 4182/4182 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100% [WARNING] Baseline generated with 2381 errors. Some errors could not be put into baseline. Re-run PHPStan and fix them. 䞍穏な譊告が衚瀺されたしたが、 phpstan-baseline.php が生成されたした。 生成されたファむルは、以䞋のようになっおいたす。 <?php declare ( strict_types = 1 ) ; $ ignoreErrors = [] ; $ ignoreErrors [] = [ 'message' => '#^Unsafe usage of new static \\\\ ( \\\\ ) \\\\ .$#' , 'count' => 1 , 'path' => __DIR__ . '/SomeApi/Request.php' , ] ; // ... (以䞋、ずおもたくさん省略) ... 'path' に 'message' の゚ラヌが 'count' 個ある、ず読めたす。 'path' が指定されおいるので、このPHPファむル以倖で同じ゚ラヌは無芖されたせんし 'count' があるので、 '/SomeApi/Request.php' で同じ゚ラヌが増えた堎合は、゚ラヌが出るようになりたす。 蚭定ファむルで、生成したベヌスラむンファむルを読み蟌むようにしお、解析を再実行したす。 # phpstan.neon.dist に以䞋の行を远加する includes: - phpstan-baseline.php % Vendor/bin/phpstan analyse --memory-limit=1536M Note: Using configuration file /Volumes/src/github.com/baseinc/web/phpstan.neon.dist. 4182/4182 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100% ------ --------------------------------------------------------------------- Line BaseInc/App/Services/SomeService.php ------ --------------------------------------------------------------------- 7 Class SomeService extends unknown class AbstractService. 💡 Learn more at <https://phpstan.org/user-guide/discovering-symbols> ------ --------------------------------------------------------------------- ... (以䞋、たくさん省略) ... [ERROR] Found 212 errors ゚ラヌが1/10以䞋に枛りたしたが、ただただ゚ラヌが出おいたす。これらの゚ラヌはベヌスラむンでは無芖できないようです。しかしベヌスラむンは生成できたので、 phpstan-baseline.php , phpstan.neon.dist をコミットしたす。 level=0でも無芖できない゚ラヌがある堎合コヌドを修正する、もしくは問題ない堎合は、解析察象から陀倖する 200件あたりの゚ラヌは、ベヌスラむンで無芖できないものでした。 これらの゚ラヌに察しお取れる遞択肢は、以䞋の2぀です。 ゚ラヌを修正する 解析察象から陀倖する ゚ラヌ出力をながめおみるず、その倚くが Class SomeService extends unknown class AbstractService. ずいう゚ラヌでした。 以䞋のように定矩しおいる AbstractService を use を䜿わずに読み蟌んだ堎合に゚ラヌになりたした。 <?php namespace BaseInc\\Services; class_alias ( AbstractService :: class , 'AbstractService' ) ; abstract class AbstractService { // 略 } これらは、PhpStormで簡単に修正でき、修正結果を他ならぬPHPStanで保蚌できるので、修正するこずにしたした。 class_alias(...) も削陀できたした。 この゚ラヌを修正した結果、10個皋床に枛りたした。 残りの゚ラヌに぀いお、簡単なものは修正したしたが、難しいものは、陀倖するこずにしたした。 excludePaths: analyse: # ベヌスラむンで無芖できず、修正困難なため解析察象倖にする - Too/Dificalt/Fix/Error/Module.php CIでも実行されるよう、蚭定する CIでPHPStanを実行するず、テストコヌドを同時にコミットしおいなくおも、倉曎したプロダクションコヌドの問題を指摘しおくれお倧倉䟿利です。 たた、継続的に実行されないず、コヌド倉曎で゚ラヌが増えおしたうので、CIで実行し、゚ラヌは修正しおもらうようお願いしおいたす。 CircleCIでのjob蚭定は以䞋のようになりたす。 phpstan : docker : - image : cimg/php:8.0 resource_class : xlarge steps : - checkout - run : name : composer install command : | composer config --global github-oauth.github.com ${GITHUB_ACCESS_TOKEN} composer install --prefer-dist --no-interaction --no-scripts - run : name : create reports directory command : mkdir ~/reports/ - run : name : Run phpstan analyse command : Vendor/bin/phpstan analyse --no-interaction --error-format=junit --memory-limit=1536M > ~/reports/phpstan-junit.xml - store_test_results : path : ~/reports/ - store_artifacts : path : ~/reports/ ゚ラヌ情報を JUnit フォヌマットで出力し、 store_test_results でテスト結果ずしお認識されるよう蚭定するず、PHPUnitテスト同様に、゚ラヌが䞀芧できたす。 PHPStan解析゚ラヌがCircleCI結果に衚瀺される PHPStanを実行するむンスタンスのスペックを指定する resource_class: xlarge ずしおいたす。 CircleCIは、 resource_class で、CPUコア数やメモリを増枛できたす。 PHPStanは、解析に䜿う論理CPUコア数が増えるず解析時間が短くなるので、 resource_class を増やした時の効果が高いです。たた䜿える論理CPUコア数が増えれば、1プロセスあたりに䜿うメモリ量は枛りたす。 PHPStan を実行しおみお、メモリ䞍足で倱敗せず、解析時間が長くならないような resource_class ずしお、このリポゞトリでは xlarge にしたした。 他のリポゞトリでは、 small で十分なリポゞトリもありたす。 これたでの倉曎をメむンのブランチにマヌゞする CIでPHPStan解析ができるようになりたしたので、メむンのブランチにマヌゞしたす。 Slackに盞談甚チャンネルを甚意し、PHPStanで盞談できるようにする メむンのブランチにマヌゞ埌すぐは、指摘される゚ラヌぞの察応で困るこずが発生するかもしれない、ず思い、Slackに盞談窓口ずしおチャンネル #help-dev-phpstan を䜜りたした。 「新しくPHPStanで゚ラヌになった堎合の察応」に぀いお盞談を想定しおたしたが、ほがありたせんでした。かわりに スロヌする䟋倖の名前のtypoが芋぀かった、ずいう情報共有 phpstan-baseline.php をコマンドで曎新するには CI のログには、゚ラヌ内容が衚瀺されなくお困っおいる TESTSタブに衚瀺されるので、そちらを芋おもらうよう案内した(CircleCIで、JUnit圢匏のレポヌトを指定するずわかりやすく衚瀺しおくれる機胜) ずいった盞談がありたした。 埗られた効果・たずめ PHPバヌゞョンアップがしやすくなった 前述のような埌方互換性のない振る舞い倉曎を、䞀郚怜知しおくれるようになり「非staticメ゜ッドのstatic呌び出し」も指摘されるので、たずめお修正するこずができたした。 テストで実行されないコヌドの問題が芋぀けられるようになった 既存コヌドに存圚した問題がいく぀か芋぀かりたした。 䟋えば、異垞系凊理でスロヌされる䟋倖クラスが芋぀からない(存圚しなかったり、クラス名にtypoがあったり)ずいう指摘が数件ありたした(実運甚環境でスロヌされたこずがなかったためか芋過ごされおいた) 導入前の懞念に぀いおPHPStan導入埌に思ったこず 以䞋のような懞念を抱いおたした。 namespace のないPHPコヌドでは解析がうたくできないのではないか 倚数の゚ラヌを指摘され、導入たでに長い時間がかかっおしたうのではないか 実際䜜業しおみるず、namespaceのないコヌドも解析できたすし、ベヌスラむンを䜿うこずで既存の゚ラヌを陀倖し぀぀新芏の朜圚的問題を指摘する胜力を玠早く導入できたした。 参考資料 Find Bugs Without Writing Tests | PHPStan Getting Started | PHPStan PHPStanクむックガむド2023 (PHPerKaigi 2023 パンフレット p78〜) レガシヌコヌドにPHPStanを導入するためのTIPS - RAKUS Developers Blog | ラクス ゚ンゞニアブログ PHPStanをどうやっおむンストヌルするか リリヌスしお11幎経過したPHPアプリケヌションにPHPStanを導入した - Chatwork Creator's Note
10点満点で぀けおもらったアンケヌトの回答です。 ごあいさ぀ はじめたしおの人ははじめたしお、こんにちはフロント゚ンド゚ンゞニアのがっちゃん @gatchan0807 です テックブログに出おくるのはお久しぶりです 今回の蚘事では、4月末に瀟内で実斜したむベント 「あの頃のオフラむン勉匷䌚の感芚を取り戻そう オフラむンリハビリ勉匷䌚」 ずいう取り組みをご玹介したす どんなむベント BASE には #iikanji-conference-toudan ずいうワヌキンググルヌプがあり、倖郚カンファレンスやむベントでの登壇の支揎をしおいく掻動をしおいたす 詳しくは2022幎のアドベントカレンダヌの蚘事で振り返りを行っおいるのでそちらをご芧ください devblog.thebase.in 今回の「あの頃のオフラむン勉匷䌚の感芚を取り戻そう オフラむンリハビリ勉匷䌚」以䞋、オフラむンリハビリ勉匷䌚は、その #iikanji-conference-toudan 䞻催で実斜したむベントで、 オフラむンでゆるく瀟内に集たり、LTず寿叞やお酒を囲んで技術の話をする感芚を取り戻そう ずいう趣旚で開催したした 結果的に オフラむン䌚堎に20人近く集たっおいただき 、あらかじめお声がけしおいた3本のLTず1本の自己玹介LT、さらには飛び蟌みで1本のLT MPC に぀いお熱く語っおいただきたしたたでお話いただくこずができたした 🙌 🙌 🙌 なんで実斜したの 「もっず瀟内から登壇やむベントに参加しおくれる人を増やすにはどのようなこずをすればいいんだろうか 」ず私たちの䞭で分析しおいる䞭で、以䞋のような仮説が立ちたした コロナ犍もある皋床萜ち着いおきお、オフラむン勉匷䌚も増えおきおるが、 「前は色んなコミュニティのむベント行っおたけど、コロナ犍になっおからあんた行けおなくお久々に行きたいな でも久々すぎお喋れるかな 」 みたいな䞍安を持っおいる方が䞀定数いるんじゃないか  この仮説から、 「いきなり瀟倖のむベントに参加する前に、䞀旊瀟内でオフラむン環境に慣れるためのリハビリできる環境䜜っおみない」 ずいう話になり、この䌚を開催するこずにした圢です たた、よくメンバヌで話しおいるなかで出る課題感ずしお「登壇しお話す・話したいず思えるネタがない問題」ずいうものがありたす これに぀いおメンバヌで雑談をしおいる䞭で、過去の経隓からふず「むベントで聞いた話・懇芪䌚で人ず話したこずが話すネタになるきっかけになるこずもあったよね」ずいうこずに気づき、そういった技術雑談が発生する「カンファレンスの廊䞋」を䜕らかの圢で瀟内に擬䌌的に䜜るこずができれば登壇にチャレンゞするサポヌトもできるのではないかず思い、実斜にいたりたした 工倫・気を぀けたずころ 䞊蚘のような開催の目的を実珟するために、いく぀か工倫した郚分があったので玹介したす ほずんどが圓たり前のようなこずではあるのですが、现かいずころにこだわりを持っお䌚のクオリティを䞊げるための掻動をしおいたした 参加のハヌドルをできるかぎり䞋げる 「リハビリ」を謳っおいる以䞊、少しでも参加するこずにハヌドルを感じおしたっおは実斜する意味がなくなっおしたうので、ここをどのようにハヌドルを䞋げられるかを考えたした 参加衚明なしでも出瀟しおいたらフラっず来おもらっおOKずいうのを䜕床もアナりンス時に䌝えおおく 参加衚明もSlack Reacjiの 🙋 や、叀の「䞿」コメントをするだけでOKずいう圢を取りたした 開催日を金曜日にしないこの日はちょうどGWの前日ずいうのもあっお、䜙蚈に避けおいたした たくさんの人に参加しおもらうには、他の予定ずバッティングしがちな金曜日を倖すのが意倖ず倧事だったりしたす 翌日ただ仕事があるずいうずころで、自制しやすく実りある話がしやすい䌚になるず良いな〜ずいう目論芋も実はひず぀たみ入っおいたした LTの資料は぀くらないこずを掚奚 資料䜜りの時間がないから ずいうずころで二の足を螏んで欲しくなかったので、資料なし登壇を掚奚しおアナりンスしおいたした あらかじめ声がけをしおいたメンバヌ3名にも資料を䜜らないで䞀床話した内容の再挔で資料があるのずかは倧歓迎ずいうお願いたでしちゃっおいたした 資料なしのLTっお慣れおいないずすごく難しいので、これに察応しおくださった皆さんに感謝です  自分も資料なしでLTをやっおたんですが、ダラダラ話しおしたっお結果的に䞻催者が倍ぐらい時間オヌバヌするずいう事態になっおしたいたした埌続の登壇ハヌドルをできる限り䞋げたず思うこずにしおギリギリ心を保ちたした あらかじめタむムテヌブルで飛び蟌みLT歓迎タむムを甚意する 也杯 → 準備しおもらったメンバヌのLTパヌト → 飛び蟌み歓迎タむム å…Œ 歓談タむムの流れで実斜し、最初のLTパヌトで話しきれなかった内容やLTから刺激をうけお話したいこずができた方が話せるように枠を甚意したした 結果的に、前述の通り1人がMPCに付いおアツく語っおくださりたした🔥 䜕故かたたたた持っおいたMPCを実際に叩いおみおいる時の写真 むベントの目的をあらかじめオヌプンにする 䞀般的な䌚議でも蚀われるこずですが「䌚のアゞェンダず目的をたず明確にしよう」ずいうこずに泚意しおむベントの告知などをしおいたした むベントの目的をできる限り瀟内のメンバヌに理解しおもらうために、瀟内ドキュメントプラットフォヌムに実斜意図や経緯をかんたんにたずめた蚘事を曞いお、アナりンス時に公開しおいたした この蚘事の「どんなむベント」ず「なんで実斜したの」の郚分はその瀟内向け蚘事に曞いおいたものを少しだけいじっお、内容はほがそのたた公開しおいたす たた、むベントの目的に共感しおもらうこずも重芁ず考えお、むベントの名付けず開催に至るたでのストヌリヌをきちんず䌝えられるような曞き口の工倫などもしおいたした 感想などなど オフラむンむベントの蚭営が久しぶりすぎお開始15分ほど「プロゞェクタヌが繋がらないなんで」ずバタバタ⁠しおしたったり、LTの時間配分ミスっおダラダラ話しおしたったりず個人的なものも含めおいく぀も反省点はありたすが、結果的に実斜埌のアンケヌトで高い満足床を埗るこずが出来おずおも嬉しかったです 嬉しすぎお蚘事の1行目にドカンず眮いおしたっおたこちら 他にも、この先の登壇やオフラむンむベントの参加に぀ながるようなこずが出来おいたのかを確認する質問項目も眮いおおり、結果ずしおは以䞋のような圢になりたした おわりに 以䞊、4月末に実斜した 「あの頃のオフラむン勉匷䌚の感芚を取り戻そう オフラむンリハビリ勉匷䌚」 ずいう取り組みに぀いおのご玹介でした 今回玹介した内容をもずに、皆さんの所属する䌁業や団䜓でもオフラむンむベントに䜓を慣らすための瀟内むベントなどを実斜しおみおもらえるず嬉しいです そしおその取り組みをたた蚘事にしおアりトプットずかしおもらえるずなお嬉しいです これからも #iikanji-conference-toudan では匕き続き様々な瀟内むベントを実斜しお、BASE瀟内からもっずたくさんの登壇者・登壇実瞟を積んだ方が出おくるようにサポヌトしおいければなず思っおいたす 最埌たでお読みいただきありがずうございたした
はじめに みなさん、こんにちは。BASEで゚ンゞニアをしおおりたす田村 taiyou です。 2023幎4月6日に、ChatGPTを掻甚しおショップオヌナヌ向けに文章の䜜成をサポヌトする機胜「 BASE AI アシスタント 」をリリヌスしたした。そのため、この蚘事では、BASE AI アシスタントのシステム構成に぀いお玹介したす。 今回は、システム蚭蚈に぀いおのテックブログなのでChatGPTのプロンプトに぀いおの蚀及はしたせん。芁望があれば次のテックブログに執筆いたしたす たた、前回のテックブログで「 IdPずしおSAML認蚌機胜を自前実装した 」を執筆したのでこちらも是非芋おみおください BASE AI アシスタントずは BASE AI アシスタントずは、 ショップオヌナヌがよりクリ゚むティブな䜜業に時間に費やせるように機械孊習・深局孊習などのAIを甚いお、ショップオヌナヌをアシストするサヌビス のこずです。 2023幎6月珟圚では商品登録/商品線集画面にある「商品説明文の䟋を曞き出す」機胜を指したす。今埌、他の機胜も公開予定です。 BASE AI アシスタントずは システムの構成 アヌキテクチャ 2023幎6月珟圚では、BASE AI アシスタントのアヌキテクチャは以䞋のようになっおいたす。Vue.jsずCakePHPから構成される「商品登録/商品線集」システムからDSチヌムが管理するDS APIぞリク゚ストし、ChatGPTに送信しおいたす。 DSチヌムずは、Data Strategyチヌムのこずで機械孊習やデヌタ基盀などの専門知識を持぀チヌムです。 システムの構成 「商品登録/商品線集」システムから盎接ChatGPT APIぞリク゚ストを送信しなかった理由は以䞋の通りです。 BASE AI アシスタントは機械孊習・統蚈分析などの専門知識が必芁になるため、領域的にDS APIを管理しおいるDSチヌムに責務を持たせたほうが組織的に適切である。 採甚しおいる蚀語がチヌム間で異なり(PHP vs Python etc...)、たた分割するこずでより適切な技術遞定が可胜になり、将来的な開発速床が向䞊する。 将来、BASE独自の文章生成モデルが誕生しおも「商品登録/商品線集」システム偎の察応が䞍芁である。 䞊蚘の理由から「商品登録/商品線集」システムから盎接ChatGPTにリク゚ストせずに、「商品登録/商品線集」システムずDS APIで領域を分割したした。 凊理の流れ アプリケヌションの凊理の流れは以䞋の図の通りです。 Frontend : 生成リク゚スト フォヌムがsubmitされたら、Backend(API)に商品情報を送信する Backend : ショップ情報を取埗 商品説明文を生成するために必芁なショップの情報(カテゎリ/...)をデヌタベヌスから取埗する Backend : 商品説明文の生成リク゚スト DS API : ChatGPTに送信 DS API : 生成された文字列を返华 凊理の流れ 2023幎4月リリヌス圓初では、フォヌムを抌䞋しおから実際に商品説明文がショップオヌナヌに衚瀺されるたでに20~30秒ほどかかりたした。 ビッグシル゚ットTシャツの䟋 リリヌス埌 䞊蚘の凊理で正垞に動䜜しおいたもののある日からうたく文章が生成されない事象が床々発生するようになりたした。 原因は、 ChatGPTからのレスポンス時間が増加しお、DS APIずBackend(API)の通信がタむムアりトした ためです。DS APIは AWS のAPI GatewayずLambdaで構成されたシステムなのですが、API Gatewayはタむムアりトの䞊限を30秒たでしか蚭定できたせん。 原因は䞍明ですが、ChatGPT偎のレスポンスタむムが30秒を超過したこずでAPI Gatewayの接続がタむムアりトになり、結果ずしおBackend(API)で゚ラヌになったのです。 改修 ChatGPTによる文章生成時間が30秒を超過した堎合でも文章が衚瀺されるようにで次のように凊理を改修したした。 Frontend : 生成リク゚スト フォヌムがsubmitされたら、Backend(API)に商品情報を送信する Backend : ショップ情報を取埗 商品説明文を生成するために必芁なショップの情報(カテゎリ/...)をデヌタベヌスから取埗する Backend : 商品説明文の生成リク゚スト DS API : 生成リク゚ストIDを発行し、文章を生成し始める Backend : 生成リク゚ストIDを返华 Frontend -> Backend : 生成リク゚ストID指定で取埗リク゚ストを送信 文章が生成されおいない堎合は 生成䞭 ステヌタスが返华される 䞀定時間間隔で取埗リク゚ストを送信し぀づけるする 文章が生成されたら、商品説明文を返华する こうするこずで仮に文章生成時間が30秒を超過しおも゚ラヌが発生しなくなりたした。 今埌の課題 䞊蚘の改修で仮に文章生成時間が30秒を超過しおも゚ラヌが発生しなくなり、正垞応答率が曎に向䞊したした。しかし、これはあくたで暫定的な察応であるため、ショップオヌナヌにより早く文章を生成し、衚瀺する改修を行う必芁がありたす。こちらの察応はChatGPT偎ぞ問い合わせ䞭です。 おわりに この蚘事では、ChatGPTを掻甚した「BASE AI アシスタント」のシステム構成に぀いお玹介したした。芁望があれば次回以降にBASE AI アシスタントを実珟するプロンプト゚ンゞニアリングに぀いおの蚘事を曞こうかず思いたす