TECH PLAY

BASE株匏䌚瀟

BASE株匏䌚瀟 の技術ブログ

å…š579ä»¶

本蚘事は BASEアドベントカレンダヌ2024 の16日目の蚘事です。 はじめに BASE FeatureDev3Group でWebアプリケヌション゚ンゞニア をしおいる Capi( @ysssssss98 ) です。自分は2024幎の10月にBASEぞ入瀟しお今月で3ヶ月目になりたす。前職ではバック゚ンド゚ンゞニアずしおWebAPIの開発をしたりむンフラ(AWS)の管理、小芏暡チヌムの開発進捗管理やメンバヌ育成、オフショア開発、採甚業務をしおいたした。 珟圚はBASEでプロゞェクトに参画し、Webアプリケヌション゚ンゞニアずしおバック゚ンドだけでなく今たで実務経隓がほずんどなかったフロント゚ンドにも挑戊しおいたすスクラム開発も初挑戊です 今回は自分が新しい環境で新しい挑戊をする䞭で非垞に効果があった開発チヌムでの取り組み、ペアプログラミングに぀いお玹介したす。ペアプログラミングのやり方や効果が認知され、もっずペアプログラミングが盛んになったら幞いです。 ペアプログラミングずは ペアプログラミング  英 : pair programmingは゜フトりェア開発の手法の䞀぀で、2人のプログラマが1台のマシンを操䜜しおプログラミングを行う手法。 圓初は、2人が1台のワヌクステヌションに向かっお䜜業するものだったが、珟圚では䞀人で耇数台を同時に䜿ったり、䞀台に耇数台のディスプレむを䜿うこずも倚くなり、具䜓的なやり方は倉わっおいる。 実際にキヌボヌドを操䜜しおコヌドを曞く人を「ドラむバ」、もう1人を「ナビゲヌタ」ず呌ぶ。30分ごずか、単䜓テストを1぀完成させる床に圹割を亀替するのがよいずされる。たた、1日に䞀床の頻床でパヌトナヌを倉えるのがよいずもされおいる。 匕甚 ペアプログラミングWikipedia ペアプログラミングは1人で実装しないずころが特城です。前職ではペアプログラミングをするこずはめったになく基本1人で実装しおいるこずが倚かったです。たた、手を動かす人が定期的に倉わるのも特城です。耇数の人間が同じこずに向き合うため知識の共有や実装方法の教育によるスキル向䞊が芋蟌めたす。 どんな颚にペアプログラミングをしおいるのか 次に自分のチヌムがどんなツヌルを䜿っおペアプログラミングを行なったのか玹介したす。自分のチヌムが䜿ったツヌル以倖でも同等の環境を準備できるので代替ツヌルも玹介したす。 自分のチヌムが利甚したツヌル 1. Gather バヌチャルオフィスツヌルです。バヌチャルオフィス内にアバタヌが出おきお䌚話する際は特定の堎所にアバタヌが集たるこずで自動的にビデオ通話が開始したす。画面共有やチャットもできたす。 2. Figma(FigJam) オンラむンデザむンツヌルです。デザむンを䜜るための䜿甚が倚いですが、今回私たちのチヌムはホワむトボヌトのような甚途で䜿甚したした。ペアプログラミング䞭のアプリケヌション蚭蚈を芖芚的に共有するためです。 3. Code With Me JetBrains瀟が提䟛するペアプログラミングツヌルです。リンクを共有するず耇数のナヌザヌで同じコヌドを線集できたす。どのナヌザヌがコヌドのどこを線集しおいるか衚瀺できたり、ナヌザヌのコヌドを远埓可胜です。 代替ツヌル 自分たちのチヌムが普段䜿っおいるツヌル以倖でもペアプログラミングをリモヌトで行うこずは可胜です。前職や過去に自分が䜿ったこずのあるツヌルで今回の構成を代替できるものを玹介しおいきたす。 1. Slack Slackのハドル機胜が䜿えたす。チャンネルに入っおるナヌザヌはい぀でも入れたすし、チャットも可胜です。 2. Miro オンラむンホワむトボヌドツヌルです。付箋や図圢を䜿っお芖芚的に情報を共有できたす。 3. Live Share Visual Studio Codeの拡匵機胜です。Code With Meず同様にナヌザヌがコヌドのどこを線集しおいるのか芖芚的に確認するこずができたす。 marketplace.visualstudio.com ペアプログラミングを通じお埗られたもの 自分が持っおいない実装の匕き出しず技術の知識 自分が特にこのメリットを䜓感したのはフロント゚ンドの実装です。具䜓的にはCSSの曞き方やReactのコンポヌネント分割、TypeScriptによるデヌタフェッチ凊理でした。 個人的には特にCSS実装がペアプログラミングの効果を発揮したず感じおいたす。なぜなら自分はCSSに苊手意識を持っおいたからです。タスク着手時はどうやったらデザむン通りのUIが実珟できるのか、バック゚ンドから受け取ったデヌタの倀によっお倉わる動的なUIをどこで蚘述するのかなど䞍安でいっぱいでした。 自分がドラむバ(実際にコヌドを曞く偎)の時はフロント゚ンド経隓豊富な方にナビゲヌタ(実装の助蚀を行う偎)を担圓しおいただき、どんなCSSを圓おおいくのかを䞁寧に解説しおいただきながら玍埗感を持っお手を動かしおいきたした。時には蚀葉だけでなくその堎で実装を代わっおいただくこずでコヌドベヌスの共有をいただきたした。たた、自分がナビゲヌタの時は疑問に思ったらすぐに「なんでこのスタむルの圓お方をしおるんですか」、「このスタむルを圓おるず〇〇になるずいう認識であっおいたすか」ずいう質問を積極的に行い、経隓豊富な方の思考を蚀語化しながら進めるこずができたした。その䞭で自分の䞭に新しい匕き出しが増えたり盞手の考え方が共有されおいったず考えおいたす。 最初のフロント゚ンド実装タスクでは玄半日ほどナビゲヌタの方に付きっきりで実装を芋おもらっおいたした。しかし、2぀目のフロント゚ンド実装タスクでは1時間~1時間半の時間のみ芋おいただくだけで他の時間は自力で実装を進められるようになりたした。 個人的にはアりトプットよりむンプットの方が少し倚かったので今埌のフロント゚ンド実装では自分がナビゲヌタになる頻床を増やし、アりトプット量の割合をより増やしおいきたいです。 コヌドレビュヌの時間短瞮 コヌドを曞いおるだけでは認識を合わせるのが難しいものもあるかもしれたせん。自分が経隓したのはバック゚ンドのクラス蚭蚈やクラス間でのデヌタの流れをペアプログラミング䞭のコヌディングだけで䌝えようずするこずが難しかったです。 その時は察策ずしおペアプログラミング䞭にFigmaやMiroを䜿い、図解するこずで認識合わせを円滑に進めたした。「ペアプログラミングなのだからコヌディングをお互いに行う」ずいうこだわりを持぀必芁はないです。コヌディングしながら別の方法で知識の共有をした方が有効な堎合は別の方法を積極的に䜿うこずも倧事だず私は考えおいたす。 心理的安党性の向䞊 ペアプログラミングをするずコミュニケヌション頻床が増えたす。実装をしながらお互いの技術知識の共有ができたす。他にも䌑憩䞭に雑談をするこずもありたす。盞互理解によっおチヌムメンバヌ同士で䌚話するこずのハヌドルが䞋がりたす。 自分自身、最初はGatherに入っおペアプログラミングするこずに躊躇しおたした。しかし最近は自分からGatherに入るこずをチヌム党䜓に共有できるようになったり開発メンバヌがペアプログラミングしたしょうずいう提案を自然ずできるようになりたした。 たた、チヌム党員で開発のレトロスペクティブ(振り返り)を行った際に「ペアプログラミングを続けたい」ずいう意芋は倚かったです。 ペアプログラミングの泚意点 ペアプログラミングはたくさんのメリットがありたすが、䞀方でデメリットもありたす。次に自分が経隓したデメリットを玹介したす。 䞀時的にチヌム党䜓でタスク消化に䜿える時間が枛る ペアプログラミングは基本的に1぀のタスクを2人以䞊で行いたす。぀たり本来ペアプログラミングをしなければ2人で違うタスクを䞊行で進められるのにあえお2人で1぀のタスクを察応するこずになりたす。知識の共有やメンバヌ間のスキル差分がなくなっおいけばこのデメリットは盞殺できたすが、ペアプログラミング導入序盀は速床が萜ちる可胜性が高いです。 ペアプログラミング埌の疲劎 これは私が実際にペアプログラミングをしお䞀番感じたこずです。結論から蚀うず脳にかかる負担が倧きいです。 ペアプログラミングはドラむバ(実際にコヌドを曞く偎)、ナビゲヌタ(実装の助蚀を行う偎)共に情報をむンプットする量、アりトプットする量が倚いです。コミュニケヌション量が倚いため盞手の意芋を理解する力、自分の意芋を蚀う力、瞬発力も必芁です。たた、ペアプログラミング䞭は実装に詰たっおもすぐ䞀緒に調べるこずができお解決スピヌドも速いです。そのスピヌド感からストレスフリヌで実装を行うこずができたす。しかし、その分短期間で扱う情報量が倚いです 個人的な所感ずしお、ペアプログラミングは最長でも1時間に1回䌑憩を入れたほうが良いず思いたした。 おわりに 以䞊がペアプログラミングをしお自分が䜓隓したものになりたす。「ペアプログラミングっお聞いたこずあるけどどうやったらいいんだろう」ず考えおいる方に䜕か1぀でも参考になったら嬉しいです。たた、新たにメンバヌを受け入れる環境やメンバヌ党員の認識合わせを円滑にしたいチヌム、メンバヌ同士のスキル向䞊を目指すチヌムにずっおペアプログラミングの実斜が有効な䞀手になったら嬉しいです。 BASEでは珟圚Webアプリケヌション゚ンゞニアを積極採甚䞭です。興味ある方は是非ご応募ください。 採甚情報 | BASE, Inc. - BASE, Inc. 明日はPay IDチヌムの小林さんによる蚘事です。お楜しみに
アバタヌ
この蚘事は BASE アドベントカレンダヌ 16日目の蚘事です。 はじめに こんにちは、CSE Group ※1 で瀟内の業務効率化の開発をしおいる䞊野です。 アドベントカレンダヌ15日目は @miyachin_87 さんの蚘事でした、みなさんもうお読みでしょうか私は特に業務効率化の開発をしおいるので Notion での自動タスク生成の話はずおも参考になりたした。ただの方はぜひお読みください devblog.thebase.in さお、アドベントカレンダヌ16日目の本日は、レポヌトシステムの安定皌働をするための取り組みに぀いお玹介したす レポヌトシステムずは BASEではJ-SOX察応の䞀環ずしお、 BASEショップの売䞊金ず決枈サヌビス偎の入金デヌタ BASEショップの売䞊金ずBASE偎の決枈デヌタ BASE偎の決枈デヌタず決枈サヌビス偎の入金デヌタ 決枈サヌビス偎の入金デヌタず実際の入金額 これら4点の敎合性が取れおいるこずを確認するこずで財務報告䞊の信頌性を担保しおいたす。 月初凊理は月次でこれらの敎合性が取れおいるこずの確認を行うこずを指しおいたす。 (※2 より匕甚) この敎合性を取るためのデヌタ収集ず、各皮確認のク゚リ実行を行うのがレポヌトシステムです。 具䜓的には以䞋のような凊理を行っおいたす。 BASE の DB を日時で取埗し Amazon Athena にデヌタを登録する 各決枈システムからデヌタをダりンロヌドし、Amazon Athena にデヌタを登録する ク゚リでデヌタを突き合わせ、敎合性が取れおいるこずを確認する 簡単なアヌキテクチャ図はこのようになりたす。 レポヌトシステムの問題点 䞊蚘の凊理のうち 1. の DB のデヌタを Embulk で Athena に取り蟌む凊理で、次のような課題がありたした。 実行時間が長くなっおいった ECS で分散凊理をしおいたしたが、それでも午前2時に実行を開始しお、午前9時過ぎたでかかるこずもあり、朝9時の日次レポヌトに凊理が間に合わないこずも倚くなっおいたした。 たた、䜕かしらで凊理が詰たっおしたい、翌日たで実行が完了しおいないなども目立っおきおいたした。 ゚ラヌが頻発するようになった 䞊蚘の遅延が目立぀様になっおきたころから、゚ラヌずなるこずが倚くなっおいたした。(翌日たでかかっおも終わらず凊理がバッティングする、コピヌされた DB の削陀凊理が正垞に動䜜できない、など) たた、リカバリも再実行に 6~8 時間ほどかかっおしたうため、朝に゚ラヌに気づいお倕方にようやくデヌタが枡せる状況になっおしたっおいたした。 Embulk のメンテナンスなどに工数が割けない そのため、凊理速床の向䞊ずメンテナンスコスト削枛のため、マネヌゞド・サヌビスを利甚したETL機構に眮き換え、安定皌働を目指したした。 技術遞定 BASE では DB に Aurora MySQL を䜿甚しおいたす。 Aurora MySQL では 2022幎に S3 に゚クスポヌトする機胜がリリヌスされおいたため、これを䜿甚するこずにしたした。 https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/export-cluster-data.html https://dev.classmethod.jp/articles/aurora-cluster-export-s3/ その他、AWS Glue で Aurora のデヌタを出力する方法などもありそうでしたが、BASE 瀟内でも Data Platformチヌムでの利甚実瞟 もあったこずや、今たでのレポヌトシステムが Step Functions ず Lambda を SAM で管理をしおおり知芋があったため、Lambda で Aurora S3 Export を実行する圢を遞定したした。 怜蚎したこず デヌタの゚クスポヌトの技術を遞定したしたが、具䜓的な方法に぀いお以䞋のようにな遞択肢がありそれぞれ怜蚎したした。 BASE の本番アカりントで DB を盎接゚クスポヌトする 今たで通り BASE の本番アカりントからレポヌトシステムにDBをコピヌし、コピヌされたDBから゚クスポヌトする 1.の方法でのメリットは、2の方法ず比べるずレポヌトシステムのアカりントで DB を建おる必芁がなくなるため、コストが削枛できるずいう点です。察しおデメリットは、レポヌトシステムのアカりント倖での凊理をワヌクフロヌに組み蟌む必芁があるこずなど、耇雑性が䞊がっおしたう点でした。 2.の方法のメリットは1の逆で、すべおレポヌトシステムのアカりント内で完結するため比范的耇雑性が䜎く、CSE チヌム内ですべお完結できる点で、デメリットは DB のコストでした。 しかし、2. の方法でのデメリットのコストに぀いおは、今たでも同様に DB をコピヌしおいるため倧幅なコスト増加はないであろうこず、゚クスポヌトの凊理のほうが高速になるため、DB むンスタンスの立ち䞊がっおいる時間の短瞮ができ、結果ずしおある皋床のコスト削枛は芋蟌めるため倧きなデメリットにはならないだろうずいうこずで、2. の方法で実斜するこずにしたした。 最終的なアヌキテクチャ 前述の事項を考慮した最終的なアヌキテクチャは以䞋のようになりたす。 図匏化する関係で簡略化しおおりいく぀か盛り蟌めおいない点があるので、その点に぀いおもいく぀か玹介したす。 コピヌしおきた DB を䞀床 Snapshot を取埗しお、Snapshot に察しお、゚クスポヌトを実行しおいる 原因がはっきりしおいたせんが、コピヌしおきた DB クラスタに察しお盎接゚クスポヌトをするず゚ラヌずなっおしたったため Snapshot を経由しお゚クスポヌトする凊理になりたした。 Snapshot からの゚クスポヌトのため、Snapshot が完了した段階で䞊行凊理で DB クラスタの削陀凊理を実行しおいる DB むンスタンスが立ち䞊がっおいる時間を極力枛らしたい、凊理時間を長くはしたくないずいうこずで䞊行しお実行するようにしたした。これが埌述するコストにもある皋床効いおいそうです。 DB のコピヌ、Snapshot の取埗、Glue crawler の実行など、ある皋床時間がかかる凊理は Step Functions で凊理の完了を監芖するような分岐を実装したした。 これらを盛り蟌んだ Step Functions の党䜓像はこのようになっおいたす。たたこれらのリ゜ヌスはすべおSAMでコヌド化し、GitHub䞊で管理しおいたす。 眮き換えの効果 実行速床、安定皌働 箄8時間 → 箄1時間半 以前は実行時間が実質8時間以䞊(DB のコピヌが午前1時開始、その埌の Embulk の凊理が2時開始のため)かかっおいたした。たた、週に1回ぱラヌが出おしたう状態でした。 週に1回゚ラヌになるので、Slackでは、そろそろ゚ラヌになるず思ったら゚ラヌだった、ずいうやり取りもありたした。 眮き換え埌は2時間かかるこずはほがなく、゚ラヌも眮き換え盎埌の埮調敎以倖なく安定しお皌働できたした。 コストの削枛 コスト削枛は前述の通りスコヌプ倖だったのですが、実行時間が早くなったこずにより Aurora のむンスタンスが立ち䞊がっおいる時間が倧幅に短くなったこずや、Embulk での I/O がなくなったこずなどの芁因で RDS のコストが倧幅に削枛されたした。゚クスポヌトに関わる課金もあるず思いたすが、削枛のほうが䞊回り、結果ずしおレポヌトシステムのアカりントでの党䜓コストも削枛するこずができたした。(9月以前の1幎間の平均が$541、10月の途䞭に凊理を眮き換えたため10月は $114 ずある皋床削枛され、完党に眮き換えられた11月では 箄$4 にたで䞋がっおいたした。1/100 以䞋になるずは驚きです。) RDS 単䜓でのコスト削枛効果。脅嚁の 99% off アカりント党䜓のコスト削枛効果。RDS 以倖のコストには倧きな倉化はない事がわかる。 運甚コスト削枛 Step Functions ず Lambda でワヌクフロヌを構築しおいるため、完党に運甚コストがなくなったわけではありたせんが、Embulk を完党に利甚しなくなったこずで、Embulk のバヌゞョンアップなどを気にする必芁がなくなりたした。 たずめ レポヌトシステムのデヌタ取埗凊理を Embulk から Aurora S3 Export に倉曎したこずで8時間かかっおいた凊理を1.5時間ほどたで高速化するこずができたした。 それにより毎朝9時の通知にデヌタを間に合わせるこずができるようになり、たた゚ラヌ頻床も削枛でき安定的に運甚できるようになりたした。 たた、副次的な効果ずしお、䞻に RDS のコストを $500/月 から $4/月 ず、99% 削枛もするこずができたした。 おわりに 明日のBASEアドベントカレンダヌは @eijenson の蚘事です、お楜しみに たた、BASE では Web アプリケヌション゚ンゞニアを積極採甚しおいたす。興味持っおいただいたら、ぜひご応募ください 採甚情報 | BASE, Inc. - BASE, Inc. ※1 CSE チヌムに぀いおは少し叀い蚘事ですが こちら をごらんください。 ※2 レポヌトシステムに぀いおは以前の こちら や こちら の蚘事もごらんください。
アバタヌ
本蚘事は BASEアドベントカレンダヌ2024 の15日目の蚘事です。 はじめに Pay IDチヌムでプロダクトマネヌゞャヌをしおいるMIYACHINです。 Pay IDは、BASEで䜜られたショップでのお買いものを楜しむためのショッピングサヌビスで、クむックでスムヌズな決枈機胜ず、ショッピングアプリを提䟛しおいたす。 本蚘事では、Notion FormずAutomation機胜を掻甚しお、定型タスクを自動生成するツヌルを䜜った話をしたす。 背景 新しい機胜をリリヌスするずきには、「BASE」のショップオヌナヌや「Pay ID」の賌入者に向けお、メヌルやブログなどを通じお告知を行いたす。 BASEでは、ナヌザヌずのコミュニケヌションの窓口を担圓しおいるチヌムがあり、告知をする際は、そのチヌムず連携をずりながら準備を進めおいく必芁がありたす。具䜓的には、䟋えばメヌル配信の堎合は、告知日時の調敎、原皿の䜜成、原皿のレビュヌ、テスト配信などです。 しかし、開発業務に泚力するあたり、これらの準備が告知日ギリギリになっおしたうこずがありたす・・・。 䞀方で、これらの準備は決たりきったタスクの消化であるため、告知日から逆算しお自動的にタスクを生成できれば、より蚈画的に準備を進められるのではないかず考えたした。 たた、新しいメンバヌが入瀟した際も、これらの耇雑なフロヌを䞀から芚えるのは負担が倧きいため、この課題も含めお解決できる方法を暡玢するこずにしたした。 怜蚎した実珟方法 Webアプリ + Notion API 開発自䜓は楜しそうだけど、メンテナンス可胜な人材が限られるこずず、Notion APIキヌの管理䜓制が未確立であるこずから华䞋。 Google Form + GAS + Notion API Webアプリより実装はシンプルだけど、GASを扱える人材が限られるため、これも华䞋。 Notion Form + Automation 瀟内のNotion盞談Slackチャンネルで提案されたアむディア。Notion Formは誰でも操䜜可胜で、Notion APIも䞍芁であるためベストな遞択肢に。 Notion Formずは 「Notion Form」ずは、Notion内でフォヌムを䜜成・管理できる機胜で、2024幎10月にリリヌスされた機胜です。埓来のNotionのデヌタベヌス機胜に加えお、倖郚からの情報収集をよりスムヌズに行えるようになりたした。 これを掻甚するこずで、フォヌムの回答結果をNotionのデヌタベヌス䞊でリアルタむムに管理・分析できるようになりたす。回答デヌタは自動的にデヌタベヌスに反映され、他のNotionペヌゞやデヌタベヌスず連携するこずも可胜です。たた、フォヌムのデザむンも甚途に応じお柔軟にカスタマむズするこずができ、質問の皮類や回答圢匏の遞択、必須項目の蚭定など、Google Formず同等の運甚をするこずができたす。 䜜り方 それでは実際にどのようにツヌルを䜜ったか、簡単にご玹介したす。 1. Notion Formを䜜成する。 フォヌムには、告知日、告知媒䜓、告知コヌドを入力できるようにしたす。「告知コヌド」が䜕かはこの埌説明したす このフォヌムの回答は自動䜜成されるDBに入っおきたす。䞀旊このDBを「フォヌム回答出力先DB」ず呌びたす。 2. タスク出力先DBを䜜成する 「フォヌム回答出力DB」ずは別に、実際に消化しおいくタスクを生成する先のDBを䜜成したす。 カラムはタスク名タむトル、締切日付、担圓者ナヌザヌ、ステヌタスステヌタス、カテゎリセレクト、メモ文字列、告知コヌド文字列で䜜成したす。 3. 「フォヌム回答出力先DB」にAutomationを蚭定する 1.で䜜成したフォヌムで遞択する告知媒䜓ごずに”Automation”を䜜成したす。 NotionのDBにはAutomationずいうものが指定でき、Automationにはトリガヌず実行内容を定矩できたす。 トリガヌず実行内容は以䞋のようなものが定矩できたす。 トリガヌ 実行内容 DBに新しい行が远加された時 新しい行のプロパティが〇〇だった時 特定のDBに新しい行を远加 メヌル / Slackで通知 Webhookを送信 このツヌルでは、トリガヌず実行内容を以䞋のように蚭定したす。 トリガヌ 実行内容 「フォヌム回答出力先DB」の新しい行の「告知媒䜓」に〇〇が含たれおいた堎合 「生成タスク出力先DB」に特定の締切日でタスクを生成 具䜓的な䟋を挙げるず、 新しい行の「告知媒䜓」に「メヌル」が含たれおいる堎合、「タスク出力先DB」に「原皿のレビュヌを受ける」ずいうタスクを告知日から3日前を締切にしお䜜成、ずいった感じです。 その際に、告知日から逆算しおタスクの締切日を蚭定しないずいけないため、Notionを関数を掻甚しお蚈算したす。 if(day(トリガヌペヌゞ.告知日.dateSubtract(5, "days")) <= 5, トリガヌペヌゞ.告知日.dateSubtract(3, "days"), トリガヌペヌゞ.告知日.dateSubtract(5, "days")) ※ このタスクは締切日は告知日から3日前に蚭定するよう蚈算しおいたす。締切日が土日になるday関数の結果が6以䞊堎合、締切日をさらに2日前倒ししお蚭定しおいたす。倉数が䜿えないので蟛い 䞊蚘のようなAutomationを告知媒䜓ごずに䜜成するこずで、フォヌム回答出力先DBに行が远加されるたびに、タスク出力先DBに定型タスクが自動生成されおいきたす。 運甚方法 タスク出力先DBに消化すべきタスクが生成されたら、このDBを各プロゞェクトペヌゞから読み蟌みたす。しかし、そのたた参照するず他の人が生成したタスクも䞀緒に読み蟌たれおしたうため、ここで䜿うのが最初に蚭定した「告知コヌド」です。 自分が生成したタスクには、フォヌムで回答した「告知コヌド」が玐づけられおいるので、その告知コヌドでフィルタリングしお衚瀺するこずで、自分に必芁なタスクだけを参照するこずができたす。 たた、メヌルを配信するためにはどんな䜜業が必芁か、ツヌルが自動生成しおくれるので、新しく入ったメンバヌも簡単に告知準備が進められるようになりたした。 おわりに Notion FormずAutomationを䜿っお定型タスクの自動生成する方法に぀いおご玹介したした。 今回ご玹介したような定型タスクの消化は、どのチヌムでも発生するものだず思うので、参考になれば幞いです。 僕の所属しおいるPay IDチヌムでぱンゞニアやプロダクトマネヌゞャヌ、デザむナヌなど幅広い職皮で積極採甚䞭なので、Pay IDチヌムの話を聞いおみたいずいう方はぜひカゞュアル面談やX  @miyachin_87  などでお声がけいただけるず嬉しいです 採甚情報 | BASE, Inc. - BASE, Inc. 明日はuenokaさんの蚘事です
アバタヌ
本蚘事は BASEアドベントカレンダヌ2024 の14日目の蚘事です。 はじめに BASE の Product Dev Division で゚ンゞニアリングマネヌゞャヌEMをしおいる @tanden です。 Product Dev Division では、ここ 1 幎ほどサヌビスレベルマネゞメントの取り組みを有志メンバヌを䞭心ずしたチヌムで進めおきたした。この蚘事では、サヌビスレベルマネゞメントの取り組みの䞀貫ずしお行ったアラヌト品質改善に぀いおたずめおいたす。 SLI/SLO蚭定のその前に サヌビスレベルマネゞメントSLMずいうず SLI/SLO に぀いお最初に思い浮かぶ方も倚いのではないでしょうか。ただ、SLI/SLO の蚭定にトラむされたこずがある方はご理解いただけるず思いたすが、組織ずしお玍埗感を持っおか぀効果的な圢で蚭定するのは非垞に難しい䜜業になりたす。たた䞀床蚭定しお終わりではなく、蚭定した SLI/SLO を芋盎しながらサヌビスの信頌性を継続的に高めおいく取り組みが求められるので、長期目線で継続できるような䜓制を䜜っおいく必芁がありたす。 䞀方で、長期戊ずなる SLM の取り組みを進めるうえで、短期的な成果を䞊げるこずも重芁です。初期の成果はチヌムに勢いをもたらすだけでなく、呚囲の信頌を埗るきっかけにもなりたす。逆に成果の芋えにくい状態が続くず、チヌムのモチベヌションも䜎䞋しおしたい、最終的には取り組みが圢骞化するリスクもありたす。 そこで、今回の SLM の取り組みでは、最初の成果ずしお開発組織の困り事ずしお挙がるこずが倚かった「アラヌト品質の向䞊」に狙いを定めるこずにしたした。アラヌト自䜓はサヌビスレベルマネゞメントのコアずなるようなプラクティスではありたせん。ですが、䟋えば適切なアラヌト通知によっお゚ラヌバゞェットの枯枇を未然に防ぐなど、SLO を達成するための重芁なツヌルの 1 ぀ずしお䜍眮づけられるはずです。 アラヌトの品質管理に぀いおは、New Relic のドキュメントやブログでもアラヌトクオリティマネゞメントAQMずしお玹介されおいたす。ぜひ䞀床ご芧ください。 docs.newrelic.com 課題ず取り組み ヒアリングや自身の開発䜓隓をもずに課題の敎理をたずは行いたした。その結果、アラヌトにおける課題を以䞋の 3 ぀に絞り蟌むこずができたした。 どのアラヌト通知チャンネルを芋るべきかわからない アラヌトが倚すぎおどれが重芁かわからない アラヌトが出たずしおも䜕をしおいいのかわからない 党おの課題に共通しお蚀えるのは「アラヌトが発生しおも、次のアクションに玠早く぀なげにくい」ずいうこずです。そこでこれらの課題を反転させるために、以䞋のコンセプトをもずにアラヌトの品質改善を進めるこずにしたした。 「アラヌトが通知されたずきにすぐに気づいお次のアクションを起こせるか」 以䞋でそれぞれの課題ず解決に向けおの具䜓の取り組みに぀いおたずめおいきたす。 どのアラヌト通知チャンネルを芋るべきかわからない システムアラヌトに迅速に気づけるよう、Slack などのチャットツヌルに通知する蚭定をしおいるこずが倚いず思いたす。 BASE でも Slack にアラヌトを通知しおいたす。しかし、これたでの運甚の䞭で過去の組織䜓制に合わせお䜜成されたものや開発プロゞェクト単䜍で䜜られたもの、さらには内容の重耇するチャンネルなどが乱立した状態でした。そのため、「どのチャンネルを芋ればよいのか」がずおも分かりにくい状態に陥っおいたした。 この課題を解決するため、たずはチャンネルの圹割を敎理し、以䞋に挙げる呜名芏則の策定を含めた再線を進めたした。 チャンネルのprefix, suffix チャンネルの怜玢性ず芖認性を向䞊させるため、prefix ず suffix の呜名芏則を定めたした。これにより、Slack 䞊で関連チャンネルがたずたっお衚瀺されるようになりたした。 呜名芏則 圹割 チャンネル名の prefix notif- チャンネル名の suffix 環境を衚す -prd, -stg, -dev 緊急床でチャンネルを分ける 通知の緊急床に応じおチャンネルを分けるこずで、即時察応が必芁なアラヌトに集䞭しやすい構成ずしたした。分類の基準は syslog の重倧床レベルを参考にしおいたす。 チャンネルの prefix 圹割 notif-alert- 即時察応が必芁なもの notif-warn- 即時察応は䞍芁だが念の為通知しおおきたいもの notif-info- プログラムの動䜜確認やデバッグのための情報を通知する利甚埌の通知削陀を掚奚 サヌビスを重芁床で分ける サヌビスの重芁床は、「BASE」の䞻芁機胜決枈やショップ管理画面ず瀟内向けの管理画面ではやはり異なりたす。そこで、サヌビスごずの重芁床を Tier1 から Tier3 に分類し、重芁なサヌビスの異垞怜知の確床を高められるようにしたした。 重芁床 チャンネル䜜成方針 Tier1 サヌビス毎に alert レベルのチャンネルを䜜り通知する。warn, info レベルではチャンネルをたずめる。 Tier2 alert レベルのチャンネルをたずめる。warn, info レベルのチャンネルは必芁に応じお䜜成する。 Tier3 alert レベルのチャンネルをたずめる。warn, info レベルのチャンネルは必芁に応じお䜜成する。 監芖ツヌル毎に通知チャンネルを分けない BASE のアプリケヌション開発チヌムでは、監芖ツヌルずしお䞻に Sentry ず New Relic を利甚しおいたす。監芖ツヌルごずに個別のチャンネルを蚭けるず、確認すべきチャンネルが増え過ぎおしたい、重芁な通知を芋萜ずすリスクが高たりたす。そのため、党おの監芖ツヌルからの通知を単䞀のチャンネルに集玄し、通知の確認挏れを防ぐ工倫をしおいたす。 再線の結果 これらの敎理により、プロダクション環境向けの通知チャンネルを 21 から 8 に削枛できたした。チャンネル数はただ枛らせる䜙地があり぀぀も、アラヌトの確認先が明確になったこずで、゚ンゞニアの認知負荷を軜枛できおいたす。 通知が倚すぎおどれが重芁なアラヌトかわからない チャンネルの圹割や呜名芏則を敎えたこずでチャンネルを集玄し芋るべきチャンネルがわかりやすくなりたした。その次に取り組んだのが、アラヌト数の削枛です。チャンネルを集玄したこずも芁因の 1 ぀ですが、それ以前からアラヌトの数自䜓がそもそも倚く、どれが重芁なアラヌトかわからない状態が続いおいたした。 ずいっおもアラヌト通知数を枛らすには根本解決をするか、アラヌト通知蚭定を芋盎し通知されないようにするかしかありたせん。そこで以䞋の順番で取り組みを進めたした。 ゚ラヌを䞀気に枛らした 週 1 回 1 時間の定䟋でアラヌト蚭定の芋盎しず゚ラヌ解消を進めた ゚ラヌを䞀気に枛らした 䞋の画像は、Tier1 に分類される重芁サヌビスの Sentry のむシュヌの数を瀺しおいたす。970 件ものむシュヌが積み重なっおいお、チャンネルぞのアラヌト通知も 1 日あたり 5〜15 件ず頻発しおいたした。さらに、同じ゚ラヌが繰り返し通知されるこずも倚く、新芏の重芁アラヌトの識別が困難な状況でした。 この課題に察し、チヌムの有志メンバヌが玄 1 ヶ月間で 100 件近くのプルリク゚ストを䜜成し、゚ラヌの根本的な解決ずアラヌト蚭定の芋盎しを集䞭的に行いたした。その結果、蓄積されおいた Sentry の Issue を 970 件→0 件に削枛できたした。これにより、日々のアラヌト通知数も 1 日 2-3 件皋床ずきには 0 件に萜ち着いおいたす進めおくれたメンバヌの方には感謝しかありたせん。このようにノむズが枛ったこずで、アラヌト怜知をきっかけに緊急性が高い䞍具合を芋぀けるこずにも぀ながっおいたす。 週1回1時間の定䟋でアラヌト蚭定の芋盎しず゚ラヌ解消を進めた アラヌトを䞀気に枛らすこずができたため、次のステップずしお日々新たに発生するアラヌトぞの察応プロセスを確立させる必芁がありたした。緊急性の高いアラヌトに぀いおは発生時点で即座に確認・刀断されるものの、緊急性が䜎いアラヌトはどうしおも攟眮されがちです。これらは時間ずずもに蓄積され、さらに再発を繰り返すこずでチャンネルのノむズずなっおしたいたす。 そこで取り組み始めたのが、週 1 回 1 時間のアラヌトの棚卞し䌚です。棚卞し䌚では Sentry や New Relic で未察応ずなっおいるアラヌトを確認し、解決方針を定めお開発チヌムのバックログに登録しおいたす。たた時には、この䌚の䞭で゚ラヌの修正たで行う堎合もありたす。棚卞し䌚の取り組みを始めお玄半幎ほど経過したしたが、平均しお週に 1-2 件のペヌスで゚ラヌずアラヌト通知の削枛を実珟できおいたす。 アラヌトの定期的な棚卞しに぀いおは以䞋のブログを参考にしたした。ありがずうございたした。 zenn.dev 通知を受けたずしおも䜕をしおいいのかわからない 取り組みの最埌は、アラヌト察応の効率化を目的ずした 察応手順曞runbook の敎備です。 せっかくアラヌトを蚭定しおいるのですが、その意図や察応方法が䞍明確だったり、時間の経過で蚭定者も内容を忘れ迅速な察応が難しいケヌスも芋られたした。 そこで、アラヌト蚭定者含む誰もが玠早く状況を把握し察応できるように、runbookの䜜成ず運甚を始めたした。特に New Relic のアラヌトには runbook のリンクを登録できる機胜があり、アラヌトから盎接 runbook にアクセスできお䟿利です。 runbook には以䞋の項目を最䜎限含めるようにしおいたす。 アラヌトが発生したらたず最初にやるこず 詳しい調査手順 調査埌の察応手順 困ったずきにの連絡先 過去の察応履歎Slack リンクなど ちなみに、runbook は GitHub に専甚のリポゞトリを䜜りその䞭に眮いおいたす。Notion などのドキュメント管理ツヌルよりも GitHub はリプレむスされるこずを想像しにくく、盞察的に URL の寿呜が長いず刀断したためです。 たずめ BASE のプロダクト開発チヌムでは、アラヌト品質を向䞊させるために以䞋の取り組みを 1 幎かけお行っおきたした。 アラヌト通知チャンネルの圹割敎理ず統廃合 アラヌト通知数の削枛 runbook の䜜成 通知チャンネルの再線などはわかりやすい圢で改善できた郚分もあり、チヌムに勢いを぀けるずいう意味でも䞀定の成果を出せたのではないかず考えおいたす。 䞀方でアラヌト削枛の取り組みに぀いおは改善が進んでいるのは䞀郚のサヌビスに限られるなど、党䜓の進捗ずしおは 4 合目くらいの感芚です。 ただただ道半ばですがこれからも泥臭くアラヌト品質の向䞊に取り組んでいくこずで、サヌビスの信頌性の向䞊に぀なげおいけたらず考えおいたす。 おわりに BASE におけるサヌビスレベルマネゞメントの取り組みは始たったばかりです。来幎床も継続的に取り組んでいく予定です。 なお、BASE では珟圚゚ンゞニアリングマネヌゞャヌの採甚も積極的に行っおおりたす。゚ンゞニアリングマネヌゞャヌずしお䞀緒に頭を悩たせながらプロダクトを成長させおいく仲間を募集しおいたす。もし興味をもっおいただいた方はぜひ 1 床カゞュアルにお話させおください。 A-1.BASE_゚ンゞニアリングマネヌゞャヌ / BASE株匏䌚瀟 最埌たで読んでいただきありがずうございたした。 明日は @miyachin_87 さんの蚘事です。お楜しみに〜
アバタヌ
この蚘事は BASE アドベントカレンダヌ 14日目の蚘事です。 はじめに BASEのProduct Divにおバック゚ンド゚ンゞニアをしおいる オリバ です。 圓該蚘事では、所属しおいるチヌムメンバヌで「ドメむン駆動蚭蚈をはじめよう」の茪読䌚を実斜したので、印象に残った内容やチヌム内で議論したこずを玹介しようず思いたす。 画像は https://www.oreilly.co.jp/books/9784814400737/ より匕甚 背景ず目的 2024幎10月29日、私の所属するチヌムは「かんたん発送日本郵䟿連携App」以䞋、かんたん発送Appをリリヌスしたした。※ かんたん発送Appずは  珟圚BASEでは、新芏Appの開発プロゞェクトにおいおDDDドメむン駆動蚭蚈を掚奚しおおり、かんたん発送Appもこのアプロヌチを採甚しおいたす。 DDDを採甚するにあたっお、チヌムメンバヌでDDDの知芋がある゚ンゞニアがほずんどいなかったためかくいう私も半幎ぐらい、「ドメむン駆動蚭蚈をはじめよう」でDDDに関しおむンプットをし、開発プロゞェクトにアりトプットしおいく目的で、この本の茪読䌚を実斜するこずになりたした。 事業掻動を分析する DDDを取り入れるべきか刀断するため、事業掻動の分析の重芁性を説いおおり、3぀の重芁なワヌドが出おきたす。 1. 䞭栞の業務領域 競合他瀟ずの差別化を図る事業戊略の栞心で、業務ロゞックが耇雑なものです。ここを倖郚に委蚗するのは、賢い遞択ではありたせん。 2. 䞀般的な業務領域 競合他瀟ず同じやり方で課題を解決する領域で、競争優䜍を生み出さないため、倖郚サヌビスを積極的に䜿いたす。業務ロゞックの耇雑さは小さいです。 3. 補完的な業務領域 䞭栞の業務領域を補完する業務領域で、業務ロゞックの耇雑さは小さいです。䞀般的な業務領域ずの違いは、自瀟で開発するか倖郚サヌビスを䜿甚するかどうかです。 事業分析で倧事な芖点は、競合他瀟ずの優䜍性ず業務ロゞックの耇雑性です。 そこで、茪読䌚でかんたん発送Appがどの業務領域にあたるか話し合いたした。 BASEでは、耇数の機胜をAppsずいう圢で提䟛しおおり、かんたん発送Appを䜿甚するこずで、日本郵䟿を䜿甚した配送を行う際に、送り状の宛名曞きが䞍芁で、ショップオヌナヌ様の発送時の負担を軜枛するこずができ、か぀配送料金も党囜䞀埋利甚しやすい䟡栌垯ずなっおおりたす。 かんたん発送Appは、競合他瀟ずの優䜍性ずいう芳点では䞭栞の業務領域に䜍眮づけられたす。しかし、業務ロゞックの耇雑性に぀いおは、䞀郚に耇雑なロゞックは含たれるものの、他の機胜ず比范するず比范的シンプルな構造ずなっおいたす。そのため、䞭栞業務ずも補完業務ずも䜍眮づけらるずいう結論に至りたした。 業務ロゞックの耇雑性は、他機胜ずの比范や゚ンゞニアの経隓倀によるものでもあるので、刀断するのは難しいず感じたした。 業務知識を発芋し、事業の耇雑さに立ち向かう 同じ蚀葉 ゜フトりェア技術者が゜フトりェアを蚭蚈、組み立おるために、「同じ蚀葉」を甚いお意図の䌝達ず知識の共有を行いたす。 ゜フトりェアが察象ずしおいる業務を衚珟するずきに、プロゞェクトメンバヌ党員が共通しお䜿甚する蚀葉を指したす。本曞のxxiペヌゞの蚳語衚を芋るず、同じ蚀葉は埓来の蚳語で「ナビキタス蚀語」ず呌ばれおいたす。 かんたん発送Appでも同じ蚀葉を定矩しドキュメントを甚意しおおりたしたが、あたり利甚されず最終的には圢骞化されおしたいたした。 原因ずしおは、以䞋の2぀が考えれられたす。 同じ蚀葉は、事業掻動を衚珟するず同時に、業務゚キスパヌト業務領域に最も詳しい人でドメむン゚キスパヌトずもいうの考えや発想を衚珟する際に䜿うものですが、かんたん発送Appでは業務゚キスパヌトが䞍圚でした。 業務゚キスパヌトが䞍圚だったので、ドメむンモデリングをやる際も、゚ンゞニア内で閉じおしたいたした。 区切られた文脈 業務゚キスパヌトによっお業務内容の捉え方が異なる堎合があり、同じ蚀葉を区切られた文脈で分解する必芁がありたす。 ECサむトの䟋で考えるず、゚ンゞニアが販売郚ずやり取りする際に䜿甚する「商品」ずいう蚀葉ず、配送郚ずやり取りする際に䜿甚する「商品」ずいう蚀葉が、それぞれ異なる意味を持っおいる堎合、コミュニケヌションの䞭で誀解が生じる可胜性がありたす。販売郚では「商品」が売倀や圚庫を指すのに察し、配送郚では配送先や配送状況を指すこずがありたす。このように関係者ごずに異なる意味の「商品」を扱う必芁があり、意味のズレが生じやすくなりたす。 そこで「区切られた文脈」を定矩し、それぞれの文脈内で「商品」ずいう蚀葉を統䞀するこずで、誀解を防ぎたす。本曞の xxi ペヌゞの蚳語衚を芋るず、「区切られた文脈」は埓来の蚳語で「境界づけられたコンテキスト」ず呌ばれおいたす。 ※「区切られた文脈」の詳现に぀いおは、 こちらの蚘事 をご参照ください。 本曞では「業務領域は発芋で、区切られた文脈は蚭蚈」ず蚘されおいたす。これは非垞に玍埗感のある衚珟です。区切られた文脈はアヌキテクチャず密接に関連しおおり、䟋えば以䞋のように蚭蚈刀断に結び぀きたす。 モゞュラヌモノリス を採甚しおいる堎合区切られた文脈ごずにモゞュヌルを分割 マむクロサヌビス を採甚しおいる堎合区切られた文脈ごずにサヌビスを分割 業務ロゞックを実装する 業務ロゞックを実装する方法ずしお以䞋の぀がありたす。 1. トランザクションスクリプト トランザクションスクリプトは、デヌタ操䜜の手続きを手順に沿っお順次凊理するスクリプトずしお蚘述する蚭蚈手法です。䞻にデヌタのETLなど、業務ロゞックが比范的単玔で手続き的な操䜜を䌎う凊理に適しおいたす。このアプロヌチは、業務ロゞックが耇雑でない堎合に有効で、補完的な業務領域で䜿甚されるケヌスが倚いずいえたす。 この蚭蚈手法をむメヌゞする䟋ずしお、私は真っ先にAWS Lambdaを䜿甚したコヌドが思い浮かびたした。むベントハンドラヌから入力倀を受け取り、それを順次凊理し、出力するずいう流れが、トランザクションスクリプトに非垞に近い印象を受けたす。もちろん、AWS Lambdaを䜿甚しおオブゞェクト指向蚭蚈やDDDを実珟するこずも可胜ですが、ここでは単玔なトランザクションスクリプトのむメヌゞずしお取り䞊げおいたす 2. アクティブレコヌド アクティブレコヌドは、トランザクションスクリプトず同様に単玔な業務ロゞックを実装する方法ですが、より耇雑なデヌタ構造を扱える点が特城です。この蚭蚈手法では、ORMObject-Relational Mappingを䜿甚しおデヌタベヌスずオブゞェクトを盎接察応させ、デヌタの操䜜を効率的に行いたす。 䟋えば、Ruby on RailsのActive RecordやLaravelのEloquentなど、倚くのWebフレヌムワヌクが暙準機胜ずしおアクティブレコヌドの仕組みを提䟛しおいたす。これらを掻甚するこずで、開発者はデヌタベヌス操䜜を簡玠化し぀぀、業務ロゞックを実装するこずが可胜です。 BASEでは、瀟内向けにデヌタを管理するためのAdmin機胜を提䟛しおおり、これらの業務領域ではアクティブレコヌドが利甚されおいたす。具䜓的には、Admin機胜はCakePHPで構築されおおり、シンプルな補完業務領域に適した蚭蚈ずなっおいたす。 3. ドメむンモデル ドメむンモデルは耇雑なロゞックを実装する手段で、必芁な郚品は以䞋の3぀です。 倀オブゞェクト 集箄 業務サヌビス かんたん発送Appは、業務領域が配送業務なのでBASEにおける䞭栞業務に近く、たたBASEの配送領域が今埌「区切られた文脈」ずしお新たに切り出される予定ずいう背景から、ドメむンモデルを採甚したした。 たた、チヌムでは集玄の境界線の蚭定が難しいずいう話がよく䞊がっおいたした。本曞によるず、境界線の基準は「䞀貫性の匷制」にあり、集玄の状態倉曎は集玄内郚の業務ロゞックのみが行えるずされおいたす。そのため、耇数の集玄をたたぐトランザクションは実行できないこずになりたす。 たずえば、バッチ凊理では、耇数の集玄をたたいで1぀のトランザクション内で状態を倉曎するこずがありたす。結果敎合性のトランザクションであれば、ドメむンむベントを䜿甚しお集玄倖郚に倉曎を䌝播できたす。しかし、匷敎合性が必芁で集玄をたたぐ堎合は集玄の蚭蚈自䜓を芋盎す必芁があり、これは非垞に難しい課題だず感じたした。 蚭蚈を改善する 事業は垞に進化しおいくため、䞀般業務が䞭栞業務ぞ、たたは補完業務が䞭栞業務ぞず倉化するこずがありたす。もちろん、その逆のパタヌンも起こり埗たす。 アクティブレコヌドで実装されおいた業務ロゞックを、ドメむンモデルに倉化する堎合どのように行えば良いか以䞋の手順が瀺されおいたす。 倀オブゞェクトを芋぀ける 倀オブゞェクトに関連する業務ロゞックを芋぀け、倀オブゞェクトのメ゜ッドに移す トランザクションの境界集玄を探す 状態を倉曎するメ゜ッドを明確にするために、setterはprivateにする 集玄ルヌトずなるオブゞェクト゚ンティティを探す 興味深いのは、゚ンティティを探すのが最埌のステップずなっおいる点です。新芏のドメむンモデリングでは通垞、集玄ルヌトを先に決めおトップダりン匏で進めたすが、蚭蚈倉曎の堎合は䞊蚘の手順に埓っお、たず倀オブゞェクトを特定し、最埌に集玄ルヌトを探すようボトムアップ匏で進めおいきたす。 集玄ルヌトを決めるこずは、倖郚に公開する唯䞀の゚ントリヌポむントを決めるこずを意味したす。そのため、たず倀オブゞェクトを芋぀けおいき、最埌に集玄ルヌトを決めるずいうボトムアップ匏が採甚されおいるのだず掚察したす。 むベント駆動型アヌキテクチャ むベント駆動型アヌキテクチャずは、システムのコンポヌネント間でむベントメッセヌゞを非同期でやり取りする技術方匏です。 むベントには「むベント」すでに起こった倉化ず「コマンド」これから実行すべき操䜜の2皮類がありたす。BASEでは䞻にむベントを䜿甚しおおり、ドメむンの状態倉化やナヌスケヌスの実行時にむベントを発行したす。 第6章で述べられおいるように、ドメむンむベントは実際に発生した出来事を衚珟するため、その名前は必ず過去圢で蚘述したす。この原則を孊んだこずで、チヌム内でもドメむンむベントの呜名は必ず過去圢にするずいう意識が定着したした。 たた、15ç« p.279 むベント通知にお、「むベント通知の内容は必芁最䜎限です。むベントの賌読者にむベントの発生を䌝えるこずが唯䞀の目的です。むベントに反応するために必芁な党おの情報をむベント通知に含めおはいけたせん。」ずいう蚘述がありたす。この理由ずしお、以䞋の2぀が䞊げられおいたす。 保護すべき情報を、メッセヌゞ通信基盀に挏掩させないため メッセヌゞが届いた時には、その内容が最新では無くなっおいる可胜性がある 䟋えば、むベントで゚ンティティの状態を枡す際、゚ンティティ党䜓を枡すべきか、IDのみを枡すべきかに぀いおチヌム内で議論が生たれたした。本曞のルヌルに埓うず、解決策は明確です。最新の状態が必芁な堎合ぱンティティIDを枡し、受信偎で最新の゚ンティティを取埗すれば良く、特定時点の状態スナップショットが必芁な堎合ぱンティティ党䜓を枡せば良いずいう結論に至りたした。 おわりに 本曞は、前半でDDDの戊略的な内容を扱い、埌半で戊術的な内容を詳しく解説しおおり、非垞に充実した内容でした。たた、業務領域䞭栞、䞀般、補完を垞に意識するようになり、良い意識改革ずなりたした。このタむミングで茪読䌚を実斜できお本圓に良かったです。 明日のBASEアドベントカレンダヌは @miyachin の蚘事です、お楜しみに たた、BASE では Web アプリケヌション゚ンゞニアを積極採甚しおいたす。興味持っおいただいたら、ぜひご応募ください 採甚情報 | BASE, Inc. - BASE, Inc.
アバタヌ
本蚘事は BASEアドベントカレンダヌ2024 の13日目の蚘事です。 はじめに BASE株匏䌚瀟のなかの Pay ID ずいう事業チヌムで゚ンゞニアリングマネヌゞャヌをしおいる北川です。 Pay ID では、BASE で䜜られたショップでのより良いお買い物䜓隓を提䟛するため、ショッピングアプリ「Pay ID」やあず払い決枈「Pay ID あず払い」ずいったプロダクトを開発しおいたす。 本日公開のPay IDテックリヌドの蚘事もぜひご芧ください。 devblog.thebase.in 今幎もこれたでより良いプロダクトをナヌザヌに届けるべく、リリヌスを積み重ねおきたしたが、ずりわけモバむルアプリのリリヌスにおける自動化の取り組みに぀いお玹介したいず思いたす。 1. リリヌス甚の䞀時チャンネルを䜜っおもらう 珟圚 Pay IDアプリでは、明確なルヌルはないものの2週間に1床皋床の頻床でリリヌスをしおいたす。 リリヌスの際にはリリヌス時に必芁な䜜業動䜜確認やストア申請の状況共有やチヌム内倖のコミュニケヌションのためにそのリリヌス専甚の䞀時的なチャンネルを䜜成しおいたす。 その際に Slack のワヌクフロヌを䜿っお、リリヌスのチャンネルを䜜るようにしおいたす。 実際には Slack ワヌクフロヌで完結しおおらず、Slack から Zapier に送信し、Zapier 経由でチャンネルを䜜成しおいたす。 Zapier 経由で実行しおいるのは、ワヌクフロヌ䜜成圓時には単独でチャンネルを䜜成するこずが難しかったこずず、チャンネル䜜成ず同じタむミングでリリヌス甚の GitHub Pull Request を䜜成しおいるためです。 2. リリヌス甚のPull Requestを䜜っおもらう Pay IDアプリでは iOS・Android ずもに CI には Circle CI をメむンで利甚しおいお、補助的に䞀郚 GitHub Actions も䜵甚しおいたす。 iOS ず Android で倚少の違いはありたすが基本的には玠朎な GitFlow をベヌスにしおおり、䜕かしらのフィヌチャをリリヌスする際は開発ブランチからリリヌスブランチを䜜成し、リリヌスブランチからメむンブランチず開発ブランチに向けお Pull Request を䜜成したす。 チャンネルを䜜成するタむミングでリリヌス甚の PR も䜜っお欲しいため、 Zapier 経由で Circle CIのワヌクフロヌをキックしおいたす。 Zapier には Webhooks by zapier ずいう機胜が甚意されおおり、オヌ゜ドックスなWeb API リク゚ストを実行するこずができたす。 これを䜿っお、 Circle CI の pipeline API に POST リク゚ストを送信しワヌクフロヌを開始したす。 Circle CI の蚭定䟋ずしおは、以䞋のように pipeline API にリク゚ストされたパラメヌタを取埗しお各ゞョブに枡すようにするこずで、任意のバヌゞョンのリリヌス PR を䜜成するこずができたす。 prepare_release : # API経由で実行する堎合にだけ workflow_dispatch パラメヌタを付䞎するようにする when : << pipeline.parameters.workflow_dispatch >> jobs : - make_release_branch : version_name : << pipeline.parameters.release_version_name >> filters : branches : only : - development 3. テスト甚のアプリを配垃しおもらう Pay IDアプリでは瀟内向けの配垃に DeployGate を利甚しおいたす。 配垃操䜜に関するAPIが提䟛されおおり、 fastlane 向けの action や Android 向けの gradle プラグむンも甚意されおいるため、リリヌスのワヌクフロヌぞの組み蟌みも容易です。 リリヌス時にしおいるこずずしおは、以䞋の2぀です。 リリヌスブランチに push された堎合にアプリを配垃する 任意のタむミングでアプリを配垃する 前者に぀いおは、配垃ペヌゞずいう特定のバヌゞョンのアプリがむンストヌル可胜な配垃URLを䜜るこずができる機胜があり、「今回のリリヌス甚の配垃ペヌゞ」を䜜るこずでリリヌス前の動䜜確認などに掻甚しおいたす。 埌者は先の䟋ず同じように Circle CI のAPIを利甚し、CI の䞭で DeployGate にアップロヌドしおいたすAndroid の䟋。 Circle CI の䞭で枡されたパラメヌタを組み合わせおテストアプリをアップロヌドしたす。 deploygate : description : "DeployGateにアップロヌドする" parameters : deployment : type : string default : "Production" deployment_note : type : string default : "" steps : - attach_workspace : at : ~/project - run : *install_keystore - run : name : DeployGateぞのアップロヌド command : | DEPLOYGATE_MESSAGE="<<parameters.deployment_note>> $COMMIT_MESSAGE / $(echo $CIRCLE_SHA1 | cut -c -7)" \ ./gradlew uploadDeployGateAab<<parameters.deployment>> 4. Androidで段階リリヌス䞭の堎合は教えおもらう こちらはただ詊隓導入のステヌタスのものです。 Pay ID Androidアプリでは、Google Play Storeの段階的な公開機胜を利甚しお、公開盎埌のアプリに問題が発芚した堎合に公開ステヌタスを倉曎できるよう運甚しおいたす。 具䜓的には、99.9999% 状態で公開するこずで実質党ナヌザヌを察象にアップデヌトを公開するこずができたす。Google Play Storeの珟圚の仕様ずしお、公開の割合が 100% ではない段階的な公開の堎合は、公開を停止するこずができたす。もし問題が発芚し公開を停止した堎合、珟圚完党に公開されおいるバヌゞョンが最新ずなるため、新たに問題のあるバヌゞョンをむンストヌルするナヌザヌを抑制するこずが可胜です。 この運甚をする堎合、次のリリヌスをする際には珟圚公開しおいるバヌゞョンを99.9999%から100%にする必芁があるのですが、その確認がメンバヌの努力によるずころずなっおいたした。 䞊蚘の問題に盎面しおいた際、同じ課題ぞの察凊をされおいる䞋蚘の蚘事を芋぀け感銘を受けたした。 https://hack.nikkei.com/blog/app_release_status_bot/ この蚘事を参考に、アプリをGoogle Play StoreにアップロヌドするためのCIで公開ステヌタスを確認するようにし、ただ段階リリヌス䞭のものがあれば怜知できるようにするこずで仕組み化するこずができたした。 今回の堎合は CI のなかに組み蟌みたかったので、 GAS ではなく fastlane 経由で Google Play Publisher API を利甚するようにしたした。 元々、 fastlane には supply ずいう Play Store ぞアップロヌドしたり、track の情報を参照するためのクラむアントは存圚するのですが、リリヌスステヌタスを参照するずいうピンポむントの action は甚意されおいたせん。そこで module を拡匵しリリヌスずそのステヌタスを取埗するようにしおいたす。 たずは以䞋のように supply module を拡匵したす。 module Supply class Reader def track_release_statuses track = Supply .config[ :track ] client.begin_edit( package_name : Supply .config[ :package_name ]) # retrieve the track name, status, and fraction release_statuses = client.track_releases(track).map do |release| { name : release.name, status : release.status, fraction : release.user_fraction } end client.abort_current_edit if release_statuses.empty? UI .important( " No release found in track ' #{ track } ' " ) else UI .success( " Found ' #{ release_statuses.join( ' , ' ) } ' release statuses in track ' #{ track } ' " ) end release_statuses end end end 次に新芏の action を定矩したす。ここでは仮に GooglePlayTrackReleaseStatusesAction ず名づけ、 fastlane/actions/google_play_track_release_statuses.rb に配眮したす。 module Fastlane module Actions class GooglePlayTrackReleaseStatusesAction < Action # Supply::Options.available_options keys that apply to this action. OPTIONS = [ :package_name , :track , :key , :issuer , :json_key , :json_key_data , :root_url , :timeout ] def self . run (params) require ' supply ' require ' supply/options ' require ' supply/reader ' Supply .config = params release_statuses = Supply :: Reader .new.track_release_statuses || [] return release_statuses.compact end def self . available_options require ' supply ' require ' supply/options ' Supply :: Options .available_options.select do |option| OPTIONS .include?(option.key) end end def self . is_supported? (platform) platform == :android end # そのほかドキュメントなどは割愛 end end end あずはこれを Fastfile から呌び出すだけで、100%に満たないリリヌスが存圚するずきに CI で怜知するこずができるようになりたす。 desc " Check release statuses " lane :check_statuses do |params| release_statuses = google_play_track_release_statuses( track : ' production ' , ) # 䞀぀でもリリヌスが完了しおいない堎合は倱敗ずする if release_statuses.any? { |status| status[ :status ] != ' completed ' } UI .user_error!( ' リリヌスが完了しおいないトラックがありたす ' ) end end 5. リリヌスから数日埌にクラッシュレポヌトのリマむンドをしおもらう これはただのリマむンダヌの蚭定ですが、リリヌス盎埌には問題ずしお発生しなくずも、リリヌス埌数日にクラッシュなどが増えおいる堎合もあるため導入しおいたす。 iOS・Android ずもにアプリを公開するずアプリストアからメヌルが届くため、そのメヌルを起点に Zapier 経由でリマむンダヌを Slack に投皿したす。 ただしこの仕組みは App Store Connect や Google Play Console の仕様倉曎によっお比范的壊れやすいので泚意が必芁です。 たずめ Pay IDアプリでは Zapier や Circle CI などを組み合わせお、アプリのリリヌス時のオペレヌションやその埌の確認などを自動化しおいたす。 これらは日々の課題や気づきから少しづ぀改良を加えおいるもので、今埌もより良い仕組みに改善し぀぀ナヌザヌに䟡倀を届けおいきたいず思いたす。 最埌に、Pay ID では䞀緒にプロダクトを䜜るメンバヌを募集しおいたす。 興味をお持ちいただけた方はぜひこちらの採甚情報をご確認ください。 募集䞀芧 / BASE株匏䌚瀟 明日は tanden さんず oliver さんの蚘事になりたす。お楜しみに。
アバタヌ
本蚘事は BASEアドベントカレンダヌ2024 の13日目の蚘事です。 はじめに Pay IDのテックリヌドの倧朚( @roothybrid7 )です。 9/30に、PAY株匏䌚瀟(以䞋PAY瀟)が保有しおいた「Pay ID」のシステム移管を行い、リニュヌアルしたした。 カヌトやショップ管理画面、Pay IDアプリずは別の独立したシステムずなっおおり、アプリケヌションの技術遞定やアプリケヌションアヌキテクチャの蚭蚈に携わりたしたので、その蟺の話をしたいず思いたす。 移管の背景 2021幎に 賌入者向けショッピングサヌビスずしお「Pay ID」の提䟛を開始 したしたが、サヌビスの運甚は匕き継いだ䞀方で、決枈機胜は、PAY瀟がシステムの開発・運甚管理を行うずいう、長らく分断された状態にありたした。 たた、クレゞットカヌド䌚員情報を扱っおいるこずから、移管するにしおも、どのデヌタを移管すればいいか粟査しないずいけないずいう課題がありたした。 詳现は省きたすが、クレゞットカヌドず䌚員の持぀ログむン・䜏所情報を分離するこずにより、その課題を解決できそうだずいうこずず、人員確保できそうずいう目凊が立ったため、移管を決行するこずずなりたした。 技術遞定に぀いお システム移管にあたり、元の技術スタックをそのたた螏襲する必芁はなかったため、改めおそれを考えるこずになりたした。 たず、プログラミング蚀語ずしおは、 go を採甚するこずにしたした。採甚理由ずしおは以䞋の通りです。 BASE BANKに運甚ノりハりあり 静的型付けの安心感ず文法のシンプルさ gofmt等開発者䜓隓を向䞊させるツヌルが揃っおいる View呚りをフロント゚ンドに寄せ、APIサヌバずしおだけ実装 移管のフロント゚ンドに関する内容は、 システムリニュヌアルでNext.jsのApp Router/Server Actionを䜿っお䟿利だず思ったずころ - BASEプロダクトチヌムブログ をご芧ください。 goを䜿ったアプリケヌション開発は初めおではないですが、觊っおいたのは go1.7 の頃であり、module管理がサポヌトされたり、ゞェネリクスがサポヌトされたり、goの進化を感じたした。 次に、システムに関しお、機胜ずしおは倧きくアカりント管理、クレゞットカヌド情報を扱うためにPAY.JP APIを利甚したプロキシずしおの機胜がありたす。さらに、Pay IDを利甚するクラむアントの皮類が倚いため、認蚌方匏や利甚するデヌタの違いで、それぞれのAPI゚ンドポむントを実装しなければなりたせん。 たた、トラフィック量にも違いがあり、䟋えば、カヌトでは決枈する際にアカりントやカヌド情報を毎回参照するので倚いずか、それ以倖だず、ログむンする時やアカりント線集する時にしかアクセスしないずかあるため、それらを考慮しおAPIサヌバをそれぞれ甚意したした。 APIサヌバを分けたずしおも、認蚌方匏が異なるだけで、結局党く同じ凊理フロヌを蟿るこずもありたす。たた、賌入者のための凊理ず瀟内管理業務ず異なる凊理であっおも、アカりントの蚭定倉曎や退䌚凊理など、同じ機胜を利甚するずいったこずもありたす。 そのため、コヌド再利甚可胜なように、凊理単䜍を適切に分けたり、レむダヌ化したりずいうこずを意識したした。 これを実珟するための技術スタックは以䞋の通りです。 Go AWS(ECS/Fargate, ALB, CloudFront, WAF, RDS, ElastiCache, SES) oapi-codegen(OpenAPI) gqlgen(GraphQL) SQLBoiler(ORM) Uber Fx(DI) chi(Router) oso(RBAC, ACL) 今回は、PoC(Proof of Value、䟡倀実蚌)やPoV(Proof of Concept、抂念実蚌)のような実蚌実隓フェヌズではなくシステム移管なため、すでに運甚されおいるシステムを、互換性をできる限り保ち぀぀取捚遞択しながら実装する必芁がありたす。 様々な議論があるずは思いたすが、こういったある皋床の芏暡のアプリケヌションのコヌドベヌスを敎理した状態ずするには、レむダ化されたアヌキテクチャの導入は必芁かなず個人的には思いたす。 今回、アプリケヌションアヌキテクチャずしおは、クリヌンアヌキテクチャをベヌスに採甚しおいたす。 クリヌンアヌキテクチャ クリヌンアヌキテクチャは、 Clean Coder Blog - The Clean Architecture や 䞀般的な Web アプリケヌションアヌキテクチャ - クリヌン アヌキテクチャ を参考にしおいただくずしお、䞻に、ビゞネスロゞックやモデルを䞭心に配眮し、特定のフレヌムワヌクやデヌタベヌス、倖郚APIに䟝存させないようにむンタフェヌスを定矩し、それを通じお利甚できるようにしたす。フレヌムワヌクを利甚したむンタフェヌスの実装は、以䞋のInterface Adaptersず呌ばれる局に配眮したす。それにより単䜓テストのモックを実装するこずもできたすし、ORM(Object-Relational Mapping)を別のものに差し替えるこずも可胜ずなりたす。 さらに、重芁なのが図の右䞋で、Interface AdaptersずUse Casesレむダヌ間の通信制埡フロヌを瀺しおいたすが、䟝存性逆転の原則により、抜象は詳现に䟝存しおはならない。詳现が抜象に䟝存すべきであるずいうずころを衚珟しおいたす。 The Clean Code Blog より匕甚 今回は、APIサヌバ耇数実装する必芁があるが、アカりント登録等の倚くのナヌスケヌスのフロヌに差異はなく同じアプリケヌションロゞックが利甚できたす。そのため、図にあるずころの ControllerやPresenterの実装は、APIサヌバ毎に必芁だが、Use Caseはひず぀でよく、それはこの図のルヌルに準拠すれば実珟できたす。 䟝存関係を氎平方向のレむダヌ図で衚すず以䞋のようになりたす。 以䞋のInterfaceの䟋だず、InputPortに適応するナヌスケヌス凊理を実珟するアプリケヌションロゞックを実装し、OutputPortに適応するPresenterを実装したす。OutputPortの実装詳现は、APIサヌバ毎に別の実装になりたす。 type InputPort[I any, O any] interface { Exec(ctx context.Context, input I, outputPort O) error } type OutputPort[T any] interface { Write(ctx context.Context, value T) error } たた、OutputPortは倀を戻さず、 ヘキサゎナルアヌキテクチャ が掚奚するポヌトアダプタヌ方匏を利甚しおいたす。ポヌトで write() が実行されたら、実装であるアダプタヌでその出力を䜕床でも受け取るこずができたす。゚ラヌが発生しなければ、outputPortの出力デヌタの受け取り手であるPresenterが、デヌタを合成倉換し、oapi-codegen等利甚しおいるフレヌムワヌクに合う圢のデヌタ構造に倉換したす。 func Interactor(ctx context.Context, input Input, outputPort OutputPort[Result]) error { account := AccountFromContext(ctx) if account == nil { return outputPort.Write(ctx, Result{Notice: "signupRequired" } } outputPort.Write(ctx, Result{Account: convertPublicFields(account)}) token, err := IssueToken(ctx, input) if err != nil { return err } return outputPort.Write(ctx, Result{Token: token}) } ちなみに、これは賌入者向けのAPIの話で、瀟内業務での利甚を目的ずしたadmin-apiは、ナヌスケヌスが異なるのず、 GraphQL を採甚しおおり、そのフレヌムワヌクを最倧限に掻甚しおいるため、これには準拠しおいたせん。リリヌスによる障害が発生したずしおもビゞネス的な損倱はあたりないこずず、柔軟に芁件に察応したり、短時間で実装しリリヌスしたいずいう目的のためです。 ただ、Entities局にあるコアロゞックは、特定のフレヌムワヌクには䟝存しおおらず、再利甚可胜なように定矩しおいるため、䟋えば、アカりント情報の曎新や退䌚凊理などは共有するこずができたす。 Uber Fx 䟝存関係逆転の原則を実珟するために、DIコンテナの Uber Fx を利甚したした。 ドキュメントがわかりやすく、䟝存関係が䞍足しおいる堎合、ログに出力しおくれるためかなり䜿いやすかったです。 実装をむンタフェヌスずしお提䟛する際、 As() を利甚しお明瀺的にむンタフェヌスを指定する必芁がありたす。䞻に関数型の実装を远加した時、むンタフェヌスずしお提䟛できおないこずがよくありたした。 fx.Annotate( PasswordUpdaterFunc, fx.As( new (PasswordUpdater)), ) たた、 As() の逆の圹割をする From() ずいうものもあり、これはInterfaceに実装を泚入する際に利甚したす。ずある実装で、database/sqlのDBず単䜓テストで利甚するgo-txdbを䞡方受けずり可胜にするため、共通のむンタフェヌスを定矩した際に利甚するこずができたした。 type Executor interface { Exec(query string , args ... interface {}) (sql.Result, error ) //[...snip...] } fx.Annotate( func (executor Executor) AFunc { return func (ctx context.Context, id ID, opts ...Option) error { //[...snip...] }, }, fx.ParamTags( `name:"ro"` ), fx.From( new (*sql.DB)), fx.As( new (A)), ) 倉わったずころで蚀うず、ドメむンむベントずむベントハンドラヌの登録でも利甚したした。 var EventModule = fx.Module( "Event" , fx.Provide( fx.Annotate( func () []event.Event { events := make ([]event.Event, 0 , len (event.EventAllTypes)) for _, e := range event.EventAllTypes { events = append (events, e) } return events }, fx.ResultTags( `group:"listenableEvent,flatten"` ), ), fx.Annotate( eventhandler.MakeActivityRecorder, fx.ResultTags( `name:"recordActivity"` ), fx.As( new (event.Handler)), ), fx.Annotate( eventhandler.NewVerificationMailHandler, fx.ResultTags( `name:"verificationMail"` ), fx.As( new (event.Handler)), ), ), fx.Decorate( fx.Annotate( func (events []event.Event) []event.Event { return event.FilterEvents(events, func (event event.Event) bool { switch event.Name() { case "account.created" , "account.recovery" : return true default : return false } }) }, fx.ParamTags( `group:"listenableEvent"` ), fx.ResultTags( `group:"verificationMail"` ), ), ), fx.Invoke( asSubscribeHandler( "recordActivity" , "listenableEvent" ), asSubscribeHandler( "verificationMail" , "verificationMail" ), ), ) OpenAPI APIは耇数あるずいう話をしたしたが、実際どのような項目をAPIでやりずりしおいるかは、移管元のアプリケヌションず利甚偎のアプリケヌションのコヌドを党お確認し、OpenAPIのドキュメントずしお蚘茉しおいきたした。たた、利甚偎で党く䜿われおいない項目は、この際たずめお削陀しおいくこずも忘れずにしおいきたした。 さらに、 Redocly CLI を利甚し、瀟内ネットワヌクにドキュメントを公開し、い぀でも閲芧できるようにもしたした。 Goサヌバのコヌドは、このOpenAPIのスキヌマをもずに、 oapi-codegen を䜿っお生成しおいたす。 ORM ORMは、DB Schemaに䜵せおコヌド生成できるSQLBoilerを利甚しおいたす。 コヌド生成されおいるため、゚ディタでコヌド補完も効きたすし、Eager Loadingやク゚リビルダヌのような機胜もありたす。 䞀点利甚しおいお難しかったのは、LEFT JOINした結果をbindするstructの定矩ですね。 タグでテヌブル名を指定する必芁がありたしたし、コヌド生成されたstructを再利甚しようずするずうたく利甚できず、自前で定矩しなければならなかったり、nullになりうる方は、ポむンタで指定しなければいけたせんでした。 type JoinedStruct struct { Account Account `boil:"accounts,bind"` Extra *ExtraAttr `boil:"extra_attributes,bind"` } ただ、前述の通り、クリヌンアヌキテクチャを採甚しおおり、アプリケヌションロゞックではSQLBoilerが生成したモデルを盎接䜿っおいないため、デヌタベヌスの操䜜をする堎合、Entitiesのモデル等ず盞互倉換しおいたす。自動で曎新すべきカラムを掚枬できないため、モデル䞊で䜕らかの倉曎を行った際、ドメむンむベントを発行し、どのカラムを曎新すべきか明瀺的にWhitelistで指定しおいたす。 ちなみに、党おの曎新凊理をEntitiesのモデルを通しお行っおいるわけではなく、単に倖郚APIから取埗したレスポンスをDBに同期する堎合は、アプリケヌションロゞックずは関係なく、Interface Adapter局内郚での凊理のため盎接importする圢にしおいたす。 同様に、クラむアントが芁求するデヌタを単に返すだけの堎合も、Entitiesのモデルに倉換する意味はないため、ナヌスケヌスに特化したデヌタ構造に倉換しお返しおいたす。 ※珟圚、SQLBoilerはメンテナンスモヌドで、今埌新機胜が远加されるこずはないため、別のものに移行した方が良さそうです。クリヌンアヌキテクチャだず、Interface Adapter局を曞き盎す必芁はありたすが、他の局は特に倉曎するこずなく移行できたす。 ドメむンむベントを利甚した実装 メむンロゞックの凊理フロヌが正垞に完了したずしお、メヌル送信や行動履歎等、副䜜甚的な凊理が必芁になるこずがありたす。 そのために利甚したものが、ドメむンむベントです。 ドメむン むベント: 蚭蚈ず実装 - .NET から匕甚 この仕組みを䜿えば、トランザクションをコミット埌、ドメむンむベントを送信するこずで、むベントを賌読しおいた各むベントハンドラヌがそれぞれの副䜜甚を実行するこずが可胜です。 䟋えば、アカりント登録が成功した埌、認蚌メヌルを送信したり、行動履歎を蚘録したりずいったこずができたす。 その他 実装は、なるべくAPIの互換性を保぀ように努力したしたが、党おのデヌタやロゞックを移管できないずいうずころず、goでは通垞レスポンスにnullを含めるこずができないずいうこずで、クラむアント偎の実装も倉曎せざるを埗なかったため、远加でその実装も䜵せお行う必芁がありたした。他チヌムずの実装方針の調敎等も䜵せお1ヶ月匱は远加でかかっおしたい、リリヌスを延期せざるを埗ない状況ずもなりたした。 たた、開発しやすいように本䜓ずは別のアプリケヌションだったり、ラむブラリを䜜成したりもしたした。 OAuth認可フロヌを詊せるミニWebアプリ Pay IDアプリのアカりント線集をWebアプリに統合するための認蚌クラむアントラむブラリ( Kotlin Multiplatform project ) おわりに プロゞェクトで䜿われおいる技術スタックやアプリケヌションアヌキテクチャに぀いお、簡単に䞀郚ご玹介させおいただきたした。 システム移管は、互換性をできるだけ壊さないようにする必芁があり、新芏サヌビス立ち䞊げずはたた違った難しさがあり、圓初想定しおなかった課題が増えたりしお、なかなかリリヌスたで挕ぎ着けられないもどかしさもありたした。 Pay IDでは、今埌もプロダクトの改善、技術的改善も積極的に行っおいきたす。珟圚゚ンゞニアを募集しおいるので、興味のある方はぜひ採甚情報などもご芧ください binc.jp 明日は、oliverさんずtandenさんの蚘事です。お楜しみに〜
アバタヌ
はじめに この蚘事は BASE アドベントカレンダヌ12日目の蚘事です。 こんにちは Pay ID Design Grp Managerの @naomikun です。 今日は、通垞の「業務内容」や「メンバヌの圹割」ずいった圢匏的なチヌム玹介ずは䞀味違う、 新芏事業郚メンバヌの䜜業環境 に焊点を圓おお、䞀郚のメンバヌをご玹介したいず思いたす。 䜜業環境を通しお、メンバヌそれぞれの個性や働き方がうかがえるので、皆さんの䜜業環境ずこだわりポむントをぜひご芧ください。 たずは、私の所属するDesign Teamからご玹介しおいきたす。 Design Team Pay IDのデザむンチヌムは、アプリ開発から決枈領域、マヌケティング向けクリ゚むティブ䜜成たで、Pay IDの幅広い斜策に日々取り組んでいたす。 デザむン業務の倧半はモニタヌ前での䜜業。そんな普段の䜜業環境をのぞいおみたしょう。 M.Tさん Pay IDのショッピング領域に関わっおいたす。 デスクはシンプルだけど、ちょっず楜しい雰囲気にしたく奜きなアむテムを眮いおいたす。壁の手曞き颚カレンダヌは平山昌尚さんの䜜品でずおも気に入っおいたす。 机のお寿叞のぬいぐるみは ゞェリヌキャット さんの商品で、Pay IDアプリで賌入したした仕事䞭に癒されたす  N.K 次は私のデスクです。䞻に決枈領域の開発に携わっおいたす。 ラバヌりッドの色味に合うようにレむアりトしおいたす。数幎前に賌入したカワグチタクダさんのドロヌむングがお気に入りで食っおいるのず、仕事䞭はずっずいい匂いがしおいおほしいのでリヌドディフュヌザヌを眮いおたす Product Management Team PMチヌムは、新芏機胜の立案、怜玢アルゎリズムの改善、パヌ゜ナラむズされたレコメンド機胜の向䞊、そしお決枈䜓隓の蚭蚈を担圓しおいたす。これらの業務を様々なステヌクホルダヌず密接に連携しながら掚進しおいるプロダクト開発の䞭心的チヌムです。 N.Mさん Pay IDのショッピング領域のPdMずしお参画しおいたす。 デスクはFlexiSpotのE8ずいう昇降デスクを数幎前に賌入したした。リモヌトワヌク日の朝はただ䜓が起きおないので、よく立ち姿勢から仕事を始めたりしおいたす。 モニタヌの埌ろ偎にあるラむトセヌバヌみたいな間接照明は数千円で買っおみたのですが、䞀気にデスクのそれっぜさが増したのでおすすめです B.Oさん Pay IDのショッピング領域のPdMずしお参画しおいたす。 䞻にオフィスで䜜業をしおおり、PCを垞蚭しおいたす。シンプルで必芁最小限の環境ながら、詞華集が眮かれおいるのが特城的です。 K.Tさん Pay IDのPdM Mgrをしおいたす。 デスクには様々な皮類の芳葉怍物を配眮しおおり、緑に囲たれた環境で仕事をするこずで心穏やかに働けるず考えおいたす。 ずおも萜ち着いた気持ちで仕事ができおいたす。 M.Gさん 執行圹員 VP of Productずしお、プロダクトの責任者ずしお埓事⁠しおいたす。 オフィスではいろんなキャラクタヌの芖線を感じるこずで、自制心を保ちながら働いおいたす。 Development Team Pay ID Development Teamは、アプリ開発、決枈サヌビス領域の開発、および運甚を担圓しおいたす。 iOS゚ンゞニア、Android゚ンゞニア、バック゚ンド゚ンゞニア、フロント゚ンド゚ンゞニアの総勢玄20名で構成されおいたす。各メンバヌが専門領域で玠案を䜜成し、チヌムで議論しながら仕様や蚭蚈を決定しおいく方匏を採甚しおいたす。 ナヌザヌからのお問い合わせやシステム䞍具合察応なども日々行っおおり、Pay IDの芁ずなるチヌムです。 H.Mさん 機械孊習゚ンゞニアずしお、Pay IDアプリの商品レコメンドシステムの開発を担圓しおいたす。 個人的こだわりポむントはKeychronの分割キヌボヌドずDELLのモニタヌです分割キヌボヌドは肩こり予防力の高さず芋た目がカッコいい点、DELLのモニタヌはUSB Type-C䞀本でMacBookの画面を映し぀぀充電ができ、4Kで䜜業領域が広く取れる点がお気に入りです。ちなみに芳葉怍物は宣䌝郚長(1䞇円/月たでPayIDアプリでの賌入を補助するBASEの犏利厚生)で買ったもので、垞に芖界に入っお癒し効果を発揮しおいたす。( こちらのお店 で買ったもので、珟圚は売り切れおいたした。) T.Tさん Webカヌトやショッピング関連のバック゚ンド/フロント゚ンド開発に携わっおいたす。 集䞭力を保぀為に時間を意識せずに感じられるようにするのがこだわりです 時蚈 はちょうどディスプレむの䞊郚くらいに芋えるようにしお、手元には タむマヌ を眮いおポモドヌロタむマヌずしお䜿ったり1時間タむムアタックしたりしおたす。 Y.Fさん Pay IDのむンフラ゚ンゞニアずしお働いおいたす。 右偎の Google Nest Hub に自分が競銬堎で撮った写真をスラむドショヌさせおたす。奜きな写真が流れおくるずめっちゃ気分が䞊がっおいい感じです。 T.Nさん フロント゚ンド゚ンゞニアずしお働いおいたす。 画面の広さは正矩だず思っおたす。゚ディタ、ブラりザ、Figma、メモ垳、Slackなどを十分な倧きさで同時に衚瀺できるので、「あのりィンドりどこいったっけ」ずいう悩みが枛っお、ずおも快適に仕事ができおたす。 E.Nさん 䞻にショッピング領域でバック゚ンド゚ンゞニアをしおいたす。 䜜業䞭は音楜を聎くのでオヌディオセットは必需品です モニタヌは4Kディスプレむずゲヌミングモニタヌを䜿甚しおいお、仕事も趣味も党郚このデスクで完結できるようにしおいたす R.Oさん Pay IDの開発チヌムのMgrを担圓しおいたす。 人間工孊に配慮した環境を敎えるため、゚クステンションデスク、モニタヌラむト、゚ルゎノミクスマりス、CO2蚈枬噚を蚭眮しおいたす。たた、アむデアの敎理には玙のほうが効果的なので、自由垳は必需品です。 Business Team Pay ID Businessチヌムは、決枈むンフラの新たな可胜性を远求しおいたす。BASEの加盟店さたにより䟿利で安党な決枈䜓隓を提䟛するため、決枈システムの運甚・改善に日々取り組んでいたす。 K.Tさん Businessチヌムに所属し、事業蚈画の策定ず管理や、キャンペヌン斜策の䌁画・運営を行っおいたす。 iPadでラゞオを流しながら仕事をしおいたす。思考の敎理のために曞き蟌むこずが倚いので、ホワむトボヌド型のノヌトを手の届く堎所に眮いおいたす。 たた、昇降デスクを䜿甚しおいるので、時々立ちながら仕事をしおいたす。 たずめ䜜業環境から芋えるチヌムの個性ず魅力 普段目にする機䌚の少ない䜜業環境をご玹介するこずで、新芏事業郚のメンバヌ䞀人ひずりの個性や魅力を感じ取っおいただけたのではないでしょうか。 メンバヌそれぞれが持぀独自の芖点や専門性が光り、個人的にもずおも興味深くお楜しい蚘事になりたした。 最埌に、私たちPay IDでは共にプロダクトを開発しおいく仲間を募集しおいたす バック゚ンド゚ンゞニア A-1.Pay ID_バックエンドエンジニア / BASE株式会社 UIUXデザむナヌ B-5.Pay ID_UI/UXデザイナー / BASE株式会社 プロダクトマネゞメントtoCプロダクト B-5.Pay ID_プロダクトマネジメント/toCプロダクト / BASE株式会社 明日は、同じPay IDのメンバヌの Ohki さんず、Kitagawaさんの蚘事が公開予定です。 お楜しみに
アバタヌ
本蚘事は BASEアドベントカレンダヌ2024 の12日目の蚘事です。 はじめに BASE BANK Division以䞋、BANKチヌムでプロダクトマネヌゞャヌをしおいる 霋藀 です。 今幎リリヌスしたPAY.JP YELL BANKを担圓しおいたす。 pay.jp これたでのキャリアの倧半がデヌタを利掻甚する業務が倚かったのですが、今幎から金融サヌビスのプロダクトマネヌゞャヌにキャリアチェンゞした経緯をお話ししたいず思いたす。デヌタ分析人材のキャリアパスの参考ずしお読んでいただけるず嬉しいです。 これたでデヌタ関連の仕事をしおよかったこず 䞀抂にデヌタにた぀わるお仕事ずいっおも機械孊習゚ンゞニアやデヌタアナリスト、デヌタ゚ンゞニアなど様々な職皮がありたす。私の堎合、幞いにも濃淡はあれどそれぞれの分野で䞀通りの業務に携わるこずができたした。 瀟内で進行しおいる様々なプロゞェクトに察しお゚ンゞニアリングで課題解決するこずもあれば、デヌタ分析の芳点からコンサルティング的な立ち回りをするこずも倚く、非垞にやりがいのある仕事でした。たた、BASEには様々なサヌビスやプロダクトがあるこずも倚様な職皮ずのコラボレヌションを通じお、各サヌビスの成功は䜕であるかを各堎面で認識するこずができたした。 結果ずしお、様々な芖点を持おるこずで自分が携わっおいるBASEの匷さや圹割を匷く認識するこずができ、単玔にスキルの幅を広げられただけでなく、仕事に察するモチベヌションを維持するこずに繋がりたした。 デヌタアナリストからプロダクトマネヌゞャヌぞ 職皮的に瀟内暪断的に掻動するこずが倚かったのず、か぀、求められる動きずしお既に顕圚化しおいる課題を察凊するずいうアプロヌチを取るこずが倚かった印象がありたす。スポットで小さな成果を出し぀぀も、携わったプロゞェクトが長期的に成功させられたのかずいう実感を持ちづらかったずいう反省がありたした。 たた、今埌のキャリアずしおも長期的な目線でプロダクトを成長に繋げたずいう成果を持っおおきたかったので、瀟内公募制床を利甚し、新芏事業であるBASE BANKの専業デヌタアナリストずしお瀟内異動したした。 異動埌はデヌタアナリストずしお動き぀぀、時にぱンゞニアリングをするこずもあれど、課題発芋から䟡倀創造たでを責任を持っお掻動できるようになっおよかったず思っおいたす。 ただ、䞀般的にデヌタアナリストの芖点から芋出される事業の問題点の倚くは、玔粋なデヌタ分析だけでは解決が困難なケヌスが倚いず思いたす。斜策を実行に移す際には様々なステヌクホルダヌずの協働が必芁ずなり、優先順䜍の刀断もデヌタの芳点だけでは䞍十分な堎面が数倚くあるのがデヌタアナリストの困難さだず思っおいたす。 私のデヌタアナリストずしおの動きずしおは、基本的にPdMや事業責任者ず䞊走するこずが倚く、経営者や事業責任者ず同じ目線で物事を芋なくおはいけない堎面も倚く、自然ず事業課題にフォヌカスした動きをずりたいずいう意欲が湧いおきたした。結果、プロダクトに関わるこずができるプロダクトマネヌゞャヌぞのキャリアチェンゞを決意したした。 デヌタ分析出身者であるこずの匷み プロダクトマネゞャヌずしお、以䞋のようなデヌタ分析スキルを盎接掻甚できおいたす 意思決定に必芁なデヌタの自由な取埗・加工 必芁なデヌタが存圚しない堎合のログ・デヌタセット蚭蚈ず敎備 デヌタの発生過皋を螏たえた、確床の高いであろう統蚈的意思決定 これらのスキルを掻かし、瀟内のBIツヌルであるLookerの管理も担圓しおいたす。 特に金融サヌビスにおいおは、䞎信モデルがサヌビスの根幹にあたるものですが、特性や算出過皋を技術的に理解できるこずで、ブラックボックス化せずに刀断ができる状態を維持しおいたす。 ただ䞀方で、新芏事業ずいう性質䞊、党おを定量的に評䟡するこずは珟実的ではありたせん。今埌は、定性的な掞察ずのバランスを取りながら、デヌタドリブンな意思決定の文化を組織に根付かせ、より䟡倀の高いプロダクトの構築を目指しおいきたいず考えおいたす。 デヌタ分析出身者であるこずの匱み 前提ずしお、そもそもプロダクトマネヌゞャヌずしお求められるスキルセットが幅広いこずは呚知の事実ずしおありたす。最初から党おをカバヌするのは無理だず思ったので、自分が察応しないず仕事が回らない領域である各ステヌクホルダヌずの折衝に泚力しおいたした。幞いにもシステム開発やデザむン、マヌケティングに぀いおはその道に長けたチヌムメンバヌに恵たれおおり、それぞれの意思決定や提案を尊重し぀぀、これたでサヌビス拡充を続けられたした。 たた、新芏事業であるが故に、あらゆる方向での解像床が䜎いのが課題だず思っおいたす。最近では、事業数字やナヌザヌ属性に぀いお私がデヌタ分析した結果を共有する時間を取るようにするこずで、各数字に察する解像床を䞊げる䌁画を実斜しおいたりしおたす。 その他、チヌムでデザむンスプリント( 瀟内での過去事䟋 )を実斜したり、競合他瀟の動向やサヌビスを深掘りする仕組みが運甚がされ始め、チヌムずしおの目線感が揃い぀぀ある実感を埗られおいたす。 プロダクトマネヌゞャヌが䞀人で抱え蟌たずに、それぞれのチヌムメンバヌの目線でサヌビス改善の意芋をもらえる環境があるので非垞に助けられおいたす。 おわりに 私以倖にも、デヌタアナリストからプロダクトマネヌゞャヌぞずキャリアを遞択する方が増えおいるず感じおいたす。ただし、これは党おのデヌタアナリストが目指すべき道筋ずいうわけではありたせん。 実際、プロダクトの意思決定者がデヌタを现郚たで把握し管理するこずは、劎力的にもスキル的にも珟実的ではないず思いたす。むしろ、デヌタの専門性を極めるこずで組織の意思決定を䞋支えする参謀的な圹割を担うずいうキャリアパスも、同様に䟡倀のある遞択肢だず考えおいたす。 䞀方で、デヌタを起点ずした䟡倀創造に関心があり、より事業やプロダクトの䞭栞に近い立堎で意思決定に関わりたいず考えるデヌタアナリストにずっお、プロダクトマネヌゞャヌぞのキャリアチェンゞは、挑戊する䟡倀のある遞択肢の䞀぀ずなるず思い、自分のキャリア遞択に぀いお玹介させおいただきたした。 明日は、倧朚さんずOliverさんの蚘事ずなりたす。お楜しみに BASE、BASE BANKでは䞀緒に働く仲間を募集しおいたす ぜひ採甚情報をご芧ください binc.jp
アバタヌ
本蚘事は BASEアドベントカレンダヌ2024 の11日目の蚘事です。 はじめに はじめたしおの人ははじめたしお、こんにちはBASE BANK Division以䞋、BANKチヌムのフロント゚ンド゚ンゞニアのがっちゃん  @gatchan0807  です。 今回は私が担圓しおいるPAY.JP YELL BANKずいうサヌビスに぀いおお話ししたす ゚ンゞニアずしおこのプロダクトを担圓しおいお感じるおもしろいずころがたくさんあるので、ぜひ䞀緒に開発したしょずいうお誘い蚘事でもありたす 党郚読んでいただけるずずっおも嬉しいですが、熱がこもりすぎおずおも長い蚘事になっおしたいたしたので、蚘事䞋郚にある、たずめだけを読んでいただく圢でもよいです よろしくお願いしたす この蚘事を読む䞊でのキヌワヌド: ゚ンベデッドファむナンス PoCフェヌズ〜グロヌスフェヌズ 分析 / フルサむクル゚ンゞニア 機械孊習 FinTech PAY.JP YELL BANKに぀いお たずはPAY.JP YELL BANKに぀いお軜くご玹介させおください。 サヌビスサむト: https://pay.jp/yellbank 2024幎6月に正匏公開された際のプレスリリヌス: https://prtimes.jp/main/html/rd/p/000000224.000030814.html PAY.JP YELL BANK自䜓は「将来債暩ファクタリング」ずいう仕組みの金融サヌビスになりたす。もずもずネットショップ䜜成サヌビスBASE以䞋、BASE向けに同様のサヌビスずしお提䟛しおいた「YELL BANK」が元になっおおり、オンラむン決枈サヌビスPAY.JPを利甚しおいるナヌザヌ以䞋、PAY.JP加盟店に将来の売り䞊げを「ファクタリング」ずいうスキヌムですぐに䜿えるお金に代えるサヌビスになりたす。 [補足]YELL BANKのサヌビスサむト: https://yellbank-lp.thebase.com/ 䞊蚘YELL BANKのサヌビスサむトから匕甚 BANKチヌム、PAY.JP YELL BANKの今埌に぀いお BANKチヌムは元々、BASEのショップオヌナヌの金融課題を解決する機胜を提䟛するチヌムずしお立ち䞊がり、BASE向けYELL BANKを軞に、BASE Card、お急ぎ振り蟌み機胜ず、ショップオヌナヌの金融課題を解決するための機胜を拡充する圢で展開しおきたした。 これは今埌も倉わらずに進めおいく予定で、実際に2024幎も請求曞カヌド払いの提䟛開始など匕き続きBASEのショップオヌナヌの金融課題を解決するために新領域にも展開をしおいきたす。 BASE BANKチヌムの玹介資料から匕甚 匕甚元: BASE株式会社 BASE BANKチーム紹介資料 - Speaker Deck  そしお、䞭長期目線では、YELL BANK機胜の展開を皮切りにBANKチヌムで開発・運甚しおいる各機胜の提䟛プラットフォヌムを拡倧しお、より広いナヌザヌに䟡倀を提䟛できるようにしようずしおいたす。 元々、BANKチヌムが開発・運甚しおいるYELL BANKをはじめずした各機胜は、 ゚ンベデッドファむナンス組み蟌み型金融ず呌ばれるサヌビス圢態 のものです。 これは「金融以倖のサヌビス提䟛䌁業非金融䌁業が、既存サヌビスに金融サヌビスを組み蟌んで金融サヌビスを提䟛する」ずいう圢のサヌビス提䟛方法に名前が぀いたもので、「ネットショップ䜜成サヌビスBASE非金融サヌビスず将来債暩ファクタリングのYELL BANK」のような関係のこずを蚀いたす。 詳しくは こちらの解説ペヌゞ や、「 ゚ンベデッド・ファむナンスの衝撃―すべおの䌁業は金融サヌビス䌁業になる 」ずいう曞籍に譲りたす。 これらの金融関連の各機胜をBASE以倖のプラットフォヌムに提䟛を始めるこずで、BANKチヌムが関わるプロダクト自䜓はより゚ンベデッドファむナンスっぜい圢になりはじめおきおいたす。 その第1匟ずしお、BASEグルヌプのPAY株匏䌚瀟が提䟛しおいる「オンラむン決枈サヌビスPAY.JP」向けに提䟛を始めた「PAY.JP YELL BANK」はBANKチヌムで2018幎から開発・運甚しおきた「YELL BANK」のBASE以倖のプラットフォヌムぞの展開ずいうずころで、䞊述の付加䟡倀拡倧の方針の詊金石にもなるプロダクトになっおいたす。 PAY.JP YELL BANKの技術構成に぀いお PoC期間から珟圚たでは、以䞋ような圢の技術構成になっおいたす。 バック゚ンドはGoで曞かれたPAY.JP加盟店ごずの債暩管理などのシステム党䜓の凊理の責務を担うAPIず、Pythonで曞かれた機械孊習を䜿ったPAY.JP加盟店ごずの売䞊予枬を提䟛する責務を担うAPIの2぀をAWS ECS Fargate䞊に眮き、フロント゚ンドはNext.jsをAWS Amplifyで動かしおペヌゞをiframeでPAY.JPの画面に埋め蟌むようにしおいたす。 これは、YELL BANKのシステムアヌキテクチャを参考に実装しおおり、再利甚できる郚分を再利甚しおアゞリティ高くPAY.JP YELL BANKの機胜提䟛を開始できるように実装しおきたした。 たた、フロント゚ンドはPoC段階の機胜の提䟛速床を早めるためにBANKチヌム管蜄でNext.jsアプリケヌションを䜜成し、それをPAY.JPの管理画面に埋め蟌んでもらう圢をずりたした。 技術構成のこれから その埌、PoC期間が終わり、6月に正匏提䟛が開始されおから玄5ヶ月が経った今は、スピヌド重芖で䜜っおきた技術構成を䞭長期的に運甚がしやすく、さらにグロヌスするために必芁な機胜を远加しやすいように䞀郚倉えようずしおいるずころです。 フロント゚ンドはiframeで画面䞞ごず埋め蟌む圢をやめ、PAY.JPの管理画面に盎接機胜を実装しお、Next.jsのフロント゚ンド・BFFからではなくPAY.JPのバック゚ンドからGoのAPIを利甚する圢に倉えおいこうずし始めおいたす。 これは、PAY.JP加盟店ナヌザヌの動線䞊に適切に衚瀺し、よりシヌムレスな資金調達䜓隓を䜜るこずず、その先の調達した資金を䜿った加盟店成長に繋げおもらうためのアップデヌトです。 ただ、PAY.JPはクレゞットカヌド番号を盎接取り扱うプロダクトであるため、開発するメンバヌは PCI DSS 準拠のリリヌスフロヌ・開発ルヌルに則っお実装を進める必芁がありたした。 そのためのBANKチヌムメンバヌのPCI DSSを理解床を䞊げるトレヌニングや事前準備を進めたりしおきたので、満を持しおPAY.JPぞの盎接実装をしおいくぞずいうタむミングが今だったりしたす。 他にも、グロヌスさせおいくフェヌズに入ったため、新たに必芁になった機胜を開発する䞊での各バック゚ンドAPI改修、分析基盀ずの連動のためのバッチの远加などを今埌も進めおいく予定です。 PAY.JP YELL BANKの開発のおもしろいずころ さお、そんなPAY.JP YELL BANKを開発する䞊での特城であり、個人的に担圓しおいおずおもおもしろいず感じおいるこずを皆さたにも少し知っおもらえればず思いたす。 倧きく分けお、3぀ありたす BASE / YELL BANKのリ゜ヌスを掻甚した開発スピヌドの速さ・手数の倚さ ゚ンベデッドファむナンスずいう少し特殊なプロダクトであるこず 金融のドメむン知識ず機械孊習・銀行APIなどのテクノロゞヌを組み合わせお課題解決しおいるこず BASE / YELL BANKのリ゜ヌスを掻甚した開発スピヌドの速さ・手数の倚さ 「リ゜ヌスを掻甚」ず曞くず、いささかタダ乗りしおいるようなニュアンスを含んでしたいたすが、どちらかずいうず 䌎走しおくれるチヌムやプロダクトがずおも近いずころにいお、䞀緒に開発できおいる状態で、それがずおも䟡倀がある ものだず思っおいたす。 より具䜓的には、先人の知芋をベヌスに再蚭蚈したり怜蚎した䞊でPAY.JP YELL BANKに取り蟌んだり、新しい機胜を䜜る際には調査を共に進めお分担したり、そういった知の高速道路に乗りながらBANKチヌム・BASEグルヌプ党䜓で向かうべき未来を目指しお開発をしおいる点です。 たた、埌述の゚ンベデッドファむナンスずいうプロダクトである特城の話にも重なりたすが、BASE・PAY.JPずいう既存プラットフォヌムがあり、そこに異なる角床からの新しい機胜を远加するずいう経隓はプロダクトを完党にれロから暡玢するよりも、ある皋床タヌゲットが絞れおいる分、高速に開発を始めるこずができたす。 さらに、既存プラットフォヌムで埗た資金を投資するこずで、よりダむナミックに機胜を䜜るこずが出来るずころも魅力です。 他にも、 普段の開発を組織芏暡やフェヌズが先に進んでいるプロダクトず深く関わり、同じ䌚瀟内で同じ方向を向いお働くのはずおも楜しい です。 BANKチヌムの玹介資料にも蚘茉がありたすが、フルサむクル゚ンゞニアを目指す゚ンゞニアチヌム颚土であるため、゚ンゞニアはアプリケヌションはもちろん、むンフラや分析基盀、䌁画にも携わっおいくこずが倚々ありたす。 GoやPythonの話をBANKチヌムのメンバヌに聞いたり、AWSの知識が深いBASE内の別のチヌムに聞いたり、フロント゚ンドの話を聞かれお答えたりず、それぞれ持っおいる圹割や埗意な領域を互いに組み合わせおプロダクト䜜りを進められおいるのぱンゞニア組織ずしおおもしろいずころだなず垞日頃から感じおいたす。 ゚ンベデッドファむナンスずいう少し特殊なプロダクトであるこず ゚ンベデッドファむナンスの特城ずしお、BtoBtoCBASE BANK to BASE to BASEナヌザヌずいう流れでサヌビスを提䟛する圢になるので、 BASE BANK目線だず提䟛先によっおナヌザヌのタむプがかなり倉わるずいう特城 がありたす。 PAY.JP YELL BANKの初期提䟛時は、BASE向けに提䟛しおいるYELL BANKの知識をベヌスに䜜り始めおいたのですが、幎始あたりからはPAY.JPの加盟店の特性をLookerなどを䜿っお分析し、より適したサヌビス提䟛方法を暡玢しおいたす。 ゚ンゞニア目線では、゚ンべデットファむナンスずいうサヌビス圢態は「倖郚展開も芋据えお、瀟倖の人が䜿うAPIずしおどう蚭蚈するべきか技術構成はどうするべきか」を䞀緒に考える必芁がありたす。 これは他のサヌビス圢態だずなかなか深く考えるこずがないポむントで、自分の技術力や蚭蚈力を䌞ばす䞊で必芁な芳点であるし、それを磚くこずでサヌビスずしおの䟡倀が高たるこずに繋がるのでずおもやりがいがある開発になりたす。 PAY.JP YELL BANKにおいおは、これたではNext.js補のアプリケヌションがBANKチヌムが提䟛するAPIのクッションず画面実装を担っおいたしたが、今埌はPAY.JPのバック゚ンド向けAPIを盎接提䟛する圢に差し替えおいくので、よりAPIスキヌマを重芖する方向で動き始めおいたす。 金融のドメむンに機械孊習・銀行APIなどのテクノロゞヌを組み合わせお課題解決しおいるこず PAY.JP YELL BANKでは「PAY.JP加盟店の将来の売䞊予枬」がサヌビスのコアにあり、その機胜を実珟するために機械孊習を䜿っおいたす。 このPAY.JP YELL BANKにおける売䞊予枬の開発には ① PAY.JP加盟店の売䞊をより粟緻に予枬し、適切な額を資金提䟛しお回収たで滞りなく実珟するこずで、 BASE BANKずしおの事業継続性を高めるための「守りの売䞊予枬粟床向䞊」 ② リスクコントロヌルが可胜な範囲で資金提䟛可胜な金額を䞊げるためにどのようなデヌタを远加で提䟛しおもらっお機械孊習モデルに取り蟌むべきか考えお、 より倚くのPAY.JP加盟店に䜿っおもらえるようにするための「攻めの売䞊予枬粟床向䞊」 の2皮類があり、今埌もこの蟺りは改善を進めおいこうず考えおいたりもしたす。 その他にも、お金に関わるプロダクトであるため、高い責任感が求められる面ずそれをテクノロゞヌを䜿っお解決できるこずがPAY.JP YELL BANK開発、ひいおはBANKチヌムで開発を行うこずのおもしろさであるず思っおいたす。 䞀䟋ずしおは、銀行APIなどを䜿った振蟌入金におけるナヌザヌ䜓隓の改善などが挙げられたす。 たた、実際に資金提䟛を行うこずが加盟店の運営・成長に぀ながる䞀手になりうるこずもBANKチヌムで積極的に行なっおいるナヌザヌむンタビュヌから様々なナヌザヌの声を聞いお知るこずができ、自分たちのやりがいに぀ながっおもいたす。 たずめ ここたで長々ず自分が担圓しおいるPAY.JP YELL BANKずいうプロダクトのおもしろいずころ、所属しおいるチヌムのいいずころをたくさん語らせおいただきたしたが、ザッずたずめるず以䞋の通りです 【プロダクト内容・フェヌズ的なおもしろいずころ】 これからグロヌスしおいくフェヌズなので、新機胜や技術構成のアップデヌトなどダむナミックさがあるずころ ゚ンベデッドファむナンスは盎接金融サヌビスを提䟛するよりはBtoBtoCずいう圢で耇雑だが、既存のナヌザヌの課題により適した圢でサヌビス䟡倀を提䟛するこずができるずころ 【組織的なおもしろいずころ】 BASE / PAY.JPず䌎走しおプロダクトのグロヌスや開発を進めおいくずころ フルサむクル゚ンゞニアを目指す颚土なので䌁画、開発、運甚や分析も含めお党おのステップに深く関わるずころ 【技術的なおもしろいずころ】 プロダクトのコア䜓隓に぀ながる売䞊予枬に機械孊習を䜿っおいるので、デヌタの集め方やデヌタ連携の契玄の組み方を考える䜙地がただただあるずころ 金融特に資金調達ず決枈のドメむン知識を深めるこずができるこず 倖郚向けAPIずしおの蚭蚈、そのためのワヌクフロヌ構築ができる・必芁なこず 私自身は、この環境で開発を行なっおいくこずで自分の技術力や゚ンゞニアずしおの成長に繋げられるなず感じおいるので、今埌もPAY.JP YELL BANKの開発に深く携わっお、どんどんずサヌビスの䟡倀を高めおいけるように開発をしおいく予定です🙋 おわりに ここたでPAY.JP YELL BANK、BANKチヌムに぀いおの玹介をお読みいただきありがずうございたした BASE BANKチヌム求人媒䜓での蚘茉はYELL BANKでぱンゞニアを倧募集䞭ですので、少しでも気になるな👀 ず思っおいただけたのであれば、ぜひぜひカゞュアル面談やX @gatchan0807 などでお声がけいただけるず嬉しいです binc.jp 明日は kitamuran さんず pigooosuke さんの蚘事2本立おですお楜しみに〜
アバタヌ
この蚘事は BASE アドベントカレンダヌ10日目の蚘事です。 はじめに はじめたしお BASEのカヌトチヌムでバック゚ンド゚ンゞニアをしおいる @ykagano です カヌトチヌムは䞻にBASEのショッピングカヌト機胜の開発を担圓しおいるチヌムです。 そんなカヌトチヌムでのドキュメント管理術をご玹介したいず思いたす ドキュメント管理の課題 BASEではNotionを瀟内Wikiずしお䜿甚しおいたす 瀟内資料は、Notionのペヌゞやデヌタベヌスで䞀元管理しおいたす カヌトチヌムでもドキュメントはNotionの䞀぀の階局構造で管理しおいたすが、䜿甚しおいる䞭で以䞋の課題がありたした。 倧抵のペヌゞは最初に曞かれた埌、 ペヌゞが曎新されない ペヌゞ䜜成者以倖は曎新しづらい心理的な壁がありそう 毎回新しくペヌゞを䜜っおいるため、 新しい情報ず叀い情報が混圚しおいる 叀いペヌゞに前提ずなる情報が曞いおあるこずも 課題を解決するために Notion AIを䜿甚しおいたす AIに尋ねれば各ペヌゞの情報を元に情報が出おくるのですごく䟿利です でも正しい情報が䞀発で出おくるずは限りたせん。 鮮床が叀い情報を拟っおくるこずもありたす。 毎回同じこずをAIに尋ねおいるこずも  。 そこで、よく䜿う情報はチヌムの共有ペヌゞにたずめおおくこずをお勧めしたす。 これにより、以䞋の利点がありたす。 必芁な情報にすぐにアクセスできたす チヌムメンバヌ党員が同じ情報を共有できたす チヌム党䜓の開発効率が向䞊したす さらに、たずめたペヌゞは、Notion AIず組み合わせるこずで、 より効率的に情報が怜玢できる ようになりたす。 カヌトチヌムのドキュメント管理 ではNotionを䜿った具䜓的な管理方法を芋おいきたす カヌトチヌムでは䞀぀のNotionデヌタベヌスにナレッゞを集玄しおいたす ただ曎新されないたたになっおいるペヌゞも倚いです。 時間が経぀ずペヌゞも増えおくるので、党おのペヌゞを最新化するのも困難な状況です。 そのため、カヌトチヌムでは、ポヌタルペヌゞで 保守するドキュメントず保守しないドキュメントを分ける こずにしたした。 カヌトチヌムのポヌタルペヌゞ 䞋図はカヌトチヌムのポヌタルペヌゞのトップです 最初に保守察象のペヌゞを衚瀺しおすぐアクセスできるようにたずめおいたす。 保守察象のペヌゞは チヌムメンバヌ党員で曎新しおいくペヌゞ ずなりたす。 先ほどのデヌタベヌスの䞭から以䞋のラベルの付いたペヌゞを保守察象ずしおビュヌに衚瀺しおいたす。 チヌム運営 保守運甚 保守技術 保守メンテナンス 次に保守察象倖のペヌゞです。 巊偎はデヌタベヌスの䞀芧に新芏远加された資料を衚瀺しおいたす。 右偎は保守察象倖のラベルで資料にアクセスできるようにしおいたす。 最初は工事䞭のペヌゞも資料が育おば、ラベルを付けお保守察象にしおいたす。 資料はチヌム党員で育おるもの です その時気になったこずが䞀行だけ曞かれたペヌゞでも、埌から気付きを埗お、曞いた方がいいず思ったこずはどんどん远蚘しおいたす カヌトチヌムはBASEの決枈動線を守るチヌム これたでは䞻に業務芖点のドキュメント管理術でした。 カヌトチヌムはBASEの決枈動線を守るチヌムです そのメむンの仕様曞はどうやっお管理しおいるのかをお話ししたいず思いたす 仕様曞を垞にメンテナンスするこずは非垞に困難です。 案件ごずにNotionやFigJamを䜿っお資料は䜜っおいたすが、保守察象ずしおいる仕様曞は䞀぀に絞っおいたす。 それはシヌケンス図です。 決枈手段ごずに倖郚連携先䞻に決枈䌚瀟も異なれば、非同期凊理になっおいる箇所もありたす。 監芖ではどこが障害ポむントになるのか確認し、改修時はどこを倉曎するこずになるのか怜蚎が必芁になりたす。 そうした時に玠早く共通認識が持おるように、 凊理党䜓が俯瞰できるシヌケンス図を曎新 しおいたす。 シヌケンス図をGitHubで管理する シヌケンスを以䞋のようにGItHubで管理しおいたす衚瀺郚分は䞀郚です。 GitHubはMermaid圢匏のプレビュヌに察応しおいたすので、Mermaid圢匏で曞いたmdファむルを栌玍しおいたす。 カヌトチヌムの決枈動線のシヌケンスは䞻に以䞋の階局構造になっおいたすあくたでむメヌゞのため、䞀般的な抂念図たで簡略化しおいたす。 import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs'; mermaid.initialize({ startOnLoad: true }); sequenceDiagram participant User as ナヌザヌ participant Front as フロント゚ンド participant Back as バック゚ンド participant Payment as 決枈䌚瀟 User->>Front: 商品遞択・賌入ボタン抌䞋 Front->>Back: 賌入リク゚スト送信 Back->>Back: 圚庫確認 Back->>Payment: 決枈実行 Payment->>Back: 決枈結果通知 Back->>Back: 泚文情報保存 Back-->>Front: 決枈完了通知 Front-->>User: 完了画面衚瀺 シヌケンス図はバック゚ンドのGitHubリポゞトリに栌玍しおいたす。 決枈動線の凊理が倉曎になるずきは必ずバック゚ンドが曎新されるためです。 決枈の凊理フロヌに倉曎が発生した堎合、 コヌド修正ず合わせお、シヌケンス図も修正 するようにしおいたす。 おわりに 実はカヌトチヌムに䞊蚘のドキュメント管理ルヌルを䜜ったのは最近の話になりたす。 今埌、カヌトチヌムに文化ずしお根付いおいければず思いたす BASEは決枈に興味がある゚ンゞニアを積極採甚䞭です ご興味がありたしたら採甚情報をぜひご芧ください binc.jp 明日は、gatchan0807さんの蚘事です。お楜しみに
アバタヌ
本蚘事は BASEアドベントカレンダヌ2024 の9日目の蚘事です。 はじめに 初めたしお、BASEでフロント゚ンドずバック゚ンドの開発を担圓しおいる kondo ず申したす。この蚘事では、私自身が開発゚ンゞニアずしおプロゞェクトを成功させるために心掛けおいるこずを玹介したす。日々プロゞェクトを進める䞊でどのような取り組みを行なっおいるのか、参考になる事䟋玹介ずなれば幞いです。前提ずしお、私はBASEではスクラム開発・ほがフルリモヌトで働いおおりたす。 プロゞェクトを成功させるための工倫 スクラム開発でベロシティを蚈枬しお、ストヌリヌポむントから逆算しおリリヌス日がい぀か可芖化する スクラム開発でチヌムがスプリントでいくらベロシティを消費できるのか蚈枬しお、残りのストヌリヌポむントが䜕スプリントで終わるのか蚈枬する取り組みをしおいたす。リリヌス時期を予枬しおおくこずで、自分たちはもちろん、マネヌゞャヌやビゞネスサむドずも䌚話しやすくなりたす。たたベロシティが向䞊し、チヌムが成長できおいるかなどの指暙も蚈枬するこずができたす。 振り返りで良かったこず、改善したいこず、そのアクションを決める 振り返りの堎では、チヌム党員でスプリント䞭に良かったこず、改善すべき点を共有し、それを基に具䜓的なアクションを決めたす。䟋えば、良かったこずずしおペアプロの実斜が挙げられた堎合はペアプロを継続しお、改善すべき点で现かい仕様が䞍透明であるず挙げられたら、仕様曞をより詳现に蚘茉しおいきたす。このプロセスを繰り返すこずで、改善点は埐々に改善されお、良かったこずが継続されおいきたす。 チヌムメンバヌ党員がフロント゚ンド・バック゚ンド・むンフラの察応をできるようにする チヌムメンバヌ党員ができる領域を増やしおいくこずで、タスクが個人に䟝存しない匷いチヌムになっおいくず考えおいたす。自分たちのチヌムではバック゚ンド゚ンゞニアがReact、Typescriptに取り組んだり、フロント゚ンドも曞くしSQLも曞く゚ンゞニアがいるなど、各々が領域拡倧に取り組んでいたす。ペアプロなどを通じおサポヌトするこずで、無理なくできるこずを増やすこずができおいたす。 コヌドレビュヌより自分のタスクを優先しない コヌドレビュヌは、機胜をリリヌスするためには必須事項です。チヌムが機胜を玠早くリリヌスするこずは、顧客ぞの䟡倀提䟛を早めるず考えおいたす。そのため、自分が終わらせたいタスクがあり、コヌドレビュヌを先延ばしにしおしたうず、その分チヌムが機胜をリリヌスできる時間が䌞びおしたいたす。したがっお、コヌドレビュヌは優先しお芋るようにしおいたす。 前提の考えや知識、立ち䜍眮のギャップを埋めるため、同期的コミュニケヌションを掻甚する 私のチヌムでは、フルリモヌト環境でSlackやGitHubを䜿い、非同期で開発を進めおいたす。しかし、非同期のやり取りでは、前提知識や経隓則、問題に察する枩床感が䌝わりにくく、議論が平行線になるこずもありたす。この課題を解消するために、同期的なコミュニケヌションを取り入れおいたす。䟋えば、Aさんは効率性を重芖し、Bさんは分かりやすさを優先しおいる堎合、意芋がすれ違うこずがありたす。このような時、オンラむンミヌティングでお互いの思考プロセスや背景を共有するこずで、認識のギャップが埋たり、新たな解決策を芋぀けるこずができたす。このプロセスを通じお、盞互理解が深たるだけでなく、議論を通じおメンバヌ同士の新しい芖点の獲埗にも぀ながっおいたす。 䞍確実性の高いタスクから取り組んで、PJの䞍確定芁玠を枛らしおいく プロゞェクトの序盀で、䞍確実性の高い仕様や技術課題から優先的に取り組むこずで、リスクを早期に発芋し、解消するようにしおいたす。特に倖郚APIずの連携や、今たで掻甚したこずのない技術などは、実際にそれが必芁になるより前に調査しお、䞍確実性を取り陀くようにしおいたす。埌半になるほど䞍枬の事態の察応は倧きくなっおしたうので、早めの察応が肝心ず考えおいたす。 ストヌリヌ・タスクの優先床を明確化する 党おのタスクに明確な優先床を蚭定するこずで、チヌムが今どのタスクを最優先で取り組むべきか明確にしおいたす。こうするこずで重芁なタスクの抜け挏れを防いだり、優先床の高いタスクからリリヌスをするこずができたす。 仕様曞を明確に蚘茉する 仕様曞を詳现に蚘茉するこずで、プロゞェクト党䜓の透明性を高め、チヌムメンバヌや将来の関係者が迷うこずなく䜜業を進められるようにしたす。たた、テストケヌスが仕様曞から明確に導き出せるようになるため、テストの効率化やバグの早期発芋にも぀ながりたす。これを怠っおしたうず、Slackのどこかで䌚話した蚘憶があるずか、どこかのミヌティングでこうなった気がする、ずいった情報が流れおしたう事象が発生しおしたいたす。仕様曞を曞く手間より情報を掘り起こしおいく手間の方が高い堎合も倚いため、なるべく曞くようにしおいたす。 おわりに 本蚘事では、プロゞェクトを成功させるために工倫しおいるこずを玹介いたしたした。プロゞェクト運営の参考になれば幞いです。明日はykaganoさんの蚘事が公開予定です、お楜しみに binc.jp
アバタヌ
本蚘事は BASEアドベントカレンダヌ2024 の8日目の蚘事です。 はじめに BASE Feature Dev1 Group アプリケヌション゚ンゞニアの @yuna_miyaa です。 実は、私がBASEに転職しおもうすぐ3幎ですが、前職はなんずパティシ゚でした (受蚗䌚瀟を経お珟圚入瀟しおおりたす) 少し倉わった経歎なのでなんで゚ンゞニアにはもう100回以䞊は聞かれおいたす。 珟圚も副業でパティシ゚を続けられおいるので、い぀か「パティシ゚ず゚ンゞニアの共通点」ずいうテヌマで蚘事を曞いおみたいず思っおいたす。 さお、今回ぱンゞニアずしおの話題。 私は珟圚、 スク゚ア連携App 開発のリヌダヌを務めおいたす。 この半幎間でチヌムは2床も倧きな倉化を経隓したした。その䞭で、私がリヌダヌずしお心がけおいるこずや、チヌム開発を円滑に進めるための工倫に぀いおお話ししたいず思いたす。 チヌム開発を進めるために意識しおいるこず 倧きな目暙をみんなで共有する ゚ンゞニアリングはタスクの連続。 しかし、それだけに远われるず芖野が狭くなりがちです。「なぜこの仕事をするのか」「それがどんな䟡倀を生むのか」ずいう党䜓像を共有するこずが、モチベヌションアップずチヌムの䞀䜓感に盎結するず考えおいたす。 たずえば、プロゞェクト初期の段階では、タスクの完了条件や進め方を现かく蚘茉しお、時間をかけお認識合わせを行いたした。 圓時は「ここたでやる必芁ある」ず思うほど倧倉でしたが、結果ずしおメンバヌがタスクを進める䞭で党䜓像を぀かむようになり、プロゞェクトぞの理解が深たっおいきたした。 困っおいるこずを玠盎に共有する 「リヌダヌだから党郚解決しなきゃ」ず思っおいたら、いくら時間があっおも足りたせん。 むしろ、「実はここがわからなくお 」ず自分の匱みをオヌプンにするこずで、自分の匱みや困っおいるこずをオヌプンにするこずで、「助け合えるチヌム」ずいう安心感が生たれるんです。 実際に、締切盎前にトラブルが起きたずき、早めに「これが解決できない 助けおほしい」ず声を䞊げたこずで、メンバヌが積極的に協力しおくれお無事に乗り越えるこずができたした。 䞀人で抱え蟌むのではなく、チヌムを信じるこずの倧切さを痛感した瞬間でしたね。 メンバヌの困りごずをいち早く察知する リヌダヌの圹割の䞀぀は、メンバヌが成果を出せる環境を敎えるこず。だからこそ、メンバヌが困っおいないかを玠早く察知するように心がけおいたす。 特に新人メンバヌが入ったずきは泚意深く芳察したす。 初めおの環境に慣れるたで時間がかかりたすよね。 たずえば、雑談䞭に「最近どう困ったこずない」ず䜕気なく聞いおみたり、ミヌティング埌に個別で声をかけたり、チヌムの信頌関係を䜜る倧きな䞀歩になるず信じおいたす。 ナヌモアを忘れない 仕事に真剣さは必芁。でも、真剣さばかりだず空気が重くなるこずもありたすよね。そんなずき、ナヌモアが堎を和たせおくれたす。 たずえば、毎週1回の雑談デむリヌず称しおデむリヌの埌に、雑談タむムを蚭けおいたす。「最近ハマっおるランチの話」や「ちょっずした趣味の話」など、話題は䜕でもOK。 仕事は真剣に取り組むべきですが、楜しい雰囲気も倧事ですチヌムの空気を和らげるために、時々ナヌモアを亀えた雑談を心がけおいたす。 笑顔が増えるず、䞍思議ずアむデアも出やすくなりたすし、チヌム党䜓の雰囲気が明るくなりたす。 おわりに チヌムは生き物のように垞に倉化しおいたす。倉化の䞭で䜕を倧事にするか、どんなアプロヌチで進めるかを考えるこずはずおもやりがいがありたす。 今回の蚘事が少しでも誰かの参考になれば嬉しいです。そしおい぀か、゚ンゞニア×パティシ゚ずいう異色のキャリアに぀いおもお話しできる機䌚があればず思っおいたす 明日はPayIDチヌムのkitagawaさんですお楜しみに 採甚情報 | BASE, Inc. - BASE, Inc.
アバタヌ
この蚘事はBASE アドベントカレンダヌ7日目の蚘事です。 6日目の昚日はasakoyaさん劊嚠から埩垰たでの䜓隓蚘がずおも参考になるので興味ある方は是非ご芧ください。 はじめに こんにちはBASEのProduct Dev / Feature Dev1 Groupでアプリケヌション゚ンゞニアをしおいるTorataです。 突然ですが、みなさんそろそろ幎末で倧掃陀の時期ですが敎理敎頓やっおたすか ブラックフラむデヌで買いすぎお無理やり収玍しおるもの、なかなか捚おる螏ん切りが぀かず家に残っおしたっおいるものはありたせんか そんな倧掃陀でもやるであろう敎理敎頓ですが、これには王道のステップがありたす。 党郚出す 䞍芁なものを取り陀く グルヌピングする 優先順序を぀けお䞊び替える 定䜍眮を決めお収玍する これは私の所属するチヌムのマネヌゞャヌのtakashimaさんから教えおもらったものです。 takashimaさんは家の䞭だけでなく、日々の業務における課題の敎理にもこのメ゜ッドを応甚しおいるず聞いたので自分も真䌌しおみようず思いたした。 今回はこの敎理敎頓のメ゜ッドを甚いお、お問い合わせの察応時間を短瞮しようずした話を曞いおいこうず思いたす BASEにおけるお問い合わせ察応 ネットショップの䜜成サヌビスであるBASEには日々ショップのオヌナヌ様やそのショップを利甚するナヌザヌ様から機胜の仕様に関する質問や䞍具合のお問い合わせをいただきたす。 技術的な調査が必芁なものに関しおぱンゞニアに調査䟝頌が来るのですが、゚ンゞニアも担圓プロゞェクトず䞊行しなければなりたせん。 かずいっおお問い合わせ察応の優先床を䞋げるこずはできないので、問い合わせに䜿う時間が増えるこずはそれだけ担圓プロゞェクトに割ける時間が短くなるこずを意味したす。 改善前の課題 珟圚BASEでは機胜をいく぀かにカテゎリ分けしお、チヌムごずに担圓が割り振られおいたす。 さらにその担圓を䞀定期間でロヌテヌションをするこずで属人化を排陀しようずいう方針で運甚がされおいたす。 今幎の9月にも担圓カテゎリのロヌテヌションがあり、 Instagram販売App ず Instagram広告App を私のチヌムが担圓するこずになりたした。 これらのAppはInstagramずBASEを連携するずいう機胜で問い合わせ察応の際に以䞋の課題がありたした 連携するのに耇数ステップが必芁な機胜で理解が難しい 開発に携わったメンバヌがすでに瀟内にいなく、仕様を完党に把握しおいる人間がいない 担圓カテゎリのロヌテヌションをしたばかりでチヌム内に知芋がない 䞊蚘の芁因ず倖郚連携の機胜ずいう特性䞊、原因がBASEにあるのか、Instagram偎にあるのかの切り分けが難しい これらの理由で9月10月はお問い合わせ察応に時間を取られおしたい、担圓プロゞェクトに圱響が出おしたいたした。 やったこず 実際に改善に向けお敎理敎頓のメ゜ッドに則っお以䞋のように進めたした。 党郚出す 今たでチヌムで察応した問い合わせを党おFigJamに出したした。 この時、「グルヌピングする」の時の指暙に䜿えるように「問い合わせ内容」「問い合わせの回答」「かかった時間」をFigJamに䞊べたした。 䞍芁なものを取り陀く グルヌピングの時にノむズになっおしたいそうな問い合わせをこの時にFigJamから削陀したした。 具䜓的にはInstagram関連の問い合わせではあるが、関連する別の機胜に関する問い合わせ グルヌピングする 「1.党郚出す」 でFigJamに出した内容をもずに以䞋の4グルヌプに分けたした。 瀟内管理画面から解決できるグルヌプ BASE / Instagram の仕様を詳しく知らないず回答できないグルヌプ BASE偎での調査が難しく、Instagram偎に再床問い合わせをお願いしたグルヌプ その他グルヌプ 優先順䜍を぀けお䞊び替える 問い合わせ察応の時間を短瞮するこずを目的に改善をしおいるので改善掻動自䜓に時間がかかっおいおは意味がありたせん。 今回の改善はコスパよく時間短瞮を目暙にしおいたので、件数自䜓が䞀番倚く、察応自䜓もシンプルにできそうな「瀟内管理画面から解決できるグルヌプ」を䞀番優先床高く、このグルヌプの問い合わせ察応時間を枛らす斜策を考えるこずにしたした。 定䜍眮を決めお収玍する 課題解決における収玍はタスク化になりたす。 今回フォヌカスするず決めたグルヌプの察応時間を枛らすために、 問い合わせ察応で最初に芋るべきフロヌ図を䜜るこず をタスクずしたした。 たた、このフロヌ図を問い合わせを䞀時受けしおいるCSの方にも共有するこずで゚ンゞニアに来る件数を枛らす、来たずしおもテンプレ的に解決できるようにするこずを狙いずしたした。 おわりに 片付けも仕事も䜕をやるか決たっおいない時に腰が重くなりがちです。 これがテンプレになっお次やるこずが明確だず最初の䞀歩を螏み出しやすくなるんじゃないかなず感じたした。 今埌、お問い合わせに限らずチヌムや組織で芋぀けた課題があれば積極的に改善掻動やっおいきたいですね。 他にもお問い合わせでこんなこずやっおいるよずいう事䟋があれば是非教えおください。 BASEでは珟圚アプリケヌション゚ンゞニアを積極採甚䞭です。 興味ある方は是非ご応募ください 採甚情報 | BASE, Inc. - BASE, Inc. 明日は同じチヌムのyunamiyaaさんお楜しみに
アバタヌ
本蚘事は BASEアドベントカレンダヌ2024 の6日目の蚘事です。 はじめたしお、BASEで゚ンゞニアをしおいるasakoyaです。 2022幎10月にBASEに入瀟し、Merchant Management Devずいうチヌムで、䞍正決枈察策や法改正察応など、決枈に関する開発に取り組んでいたす。 2024幎1月に第1子の男の子を出産し、10月に職堎埩垰したばかりです。 初めおの劊嚠・出産・育児に挑戊する䞭で、BASEのサポヌト䜓制に助けられたこずがたくさんありたした。この経隓が誰かの参考になればず思い、筆を取りたした。 なお、BASEは男性でも育䌑を取埗される方がずおも倚く、関連したブログ蚘事もありたす。 devblog.thebase.in devblog.thebase.in 今回は女性目線での䜓隓をお届けしたす 劊嚠期 劊嚠が分かったのは2023幎の6月。 安定期に入るたでは呚囲ぞの報告を控える方も倚いず思いたすが、私はすぐに䞊叞ず䌚瀟ぞ䌝えたした。圓初は䜓調が䞍安定だったため「迷惑をかける前に蚀っおおこう」ずいうのず、BASE独自の制床である「劊嚠特別䌑暇」を付䞎しおもらうためです。 これは定期健蚺や䞡芪孊玚ぞの参加、䜓調䞍良時に䜿える特別な䌑暇で、有絊です。「無理せず䌑める環境」ずいうのは、䜓の面でもありがたいですが、個人的にはそれ以䞊に「䌚瀟が気遣っおくれおいる」ず感じられるこずが倧きかったです。 たた、BASEではハむブリッドワヌクを取り入れおおり、圚宅でも働くこずが可胜なため、䜓調が優れない日でも無理のない働き方ができたした。 12:00〜16:00がコアタむムのフレックス勀務のため、劊婊健蚺も、比范的空いおいる平日の午前䞭に、仕事を䌑むこずなく行くこずができたした。健蚺が長匕いた時などは劊嚠特別䌑暇を䜿いたした 仕事の匕き継ぎ 䜓調が比范的すぐに安定したこずもあり、劊嚠を理由に仕事の内容や働き方を倉えたり、セヌブしたりする必芁はほがありたせんでした。 ただ圓然、出産埌は長期間お䌑みするこずになるので、匕き継ぎに぀いおはマネヌゞャヌず盞談しお調敎しおいきたした。私の担圓しおいた仕事は、新しく業務委蚗の方を採甚しお匕き継ぐこずになったので、チヌムぞの負担が増えるこずにそこたで眪悪感を芚える必芁がなかったのはありがたかったです。 おかげさたで、出産予定日の3週間前たで元気に働き、1幎間のお䌑みをいただく予定で、産前䌑暇に入りたした。 いざ出産 「産䌑っおヒマだな〜」などず䜙裕ぶっおいたら、予定日より10日も早く、いきなり砎氎しおあっずいう間の出産になりたした。3,300gの元気な男の子でした。 あたり準備ができおいなかったので「なんか色々曞類出さなきゃいけないんだよね」ず倧慌おでしたが、BASEには「産䌑・育䌑HAND BOOK」ずいう詳しい資料があり、そこに劊嚠・出産関連の手続きの情報がたずめられおいるので、これがずおも参考になりたした。 たた、劊嚠を報告した段階で、劎務担圓の方がSlack䞊で専甚の育䌑察応チャンネルを䜜っおくれたした。手続き関連で分からないこずがあればすぐに聞けるので、心匷かったです。私は手圓金の现かい額たで色々ず口うるさく質問したのですが、䞁寧に答えおくださり感謝です。 手圓金ずいえば、これは䌚瀟独自の制床ではありたせんが、BASEは関東IT゜フトりェア健康保険組合に加入しおいるため、出産育児䞀時金ずしお、法定絊付50䞇円に加えお付加絊付9䞇円が受け取れたす。ありがたいですね。 埩垰たで 子育おが始たっお最初の1〜2ヶ月は、䜓調も安定せず、慣れないこずも倚くおヘトヘトでした。 ただ、その期間を過ぎるずこんなこずを蚀うず怒られおしたうかもしれたせんが結構ヒマでした。倫が5ヶ月間の育䌑を取っおくれたのず、子どもがずおも優秀で、昌も倜もたずたっお寝おくれるずいう、倧倉に芪孝行な子だったからです。 ずいうわけで、がんやりず桃鉄に励む日々の䞭でふず「早めに埩垰できるのでは 」ず思い至りたした。 たた同じ頃に実家近くぞ匕っ越し、その地域で入園できる保育園が芋぀かったため、圓初1幎の予定だったのを短瞮し、8ヶ月で埩垰するこずになりたした。 埩垰前にはマネヌゞャヌや劎務担圓の方ずの面談があり、埩垰埌の働き方に぀いおしっかり盞談できたので、安心しお仕事を再開できたした。 時短勀務や、時間倖勀務の制限など、色々な遞択肢がありたすが、私は䌑業前ず同じくフルタむムで働くこずを遞択したした。フルタむムで埩垰しようず思えたのは、自分の劊嚠期の経隓も含めお、BASEには柔軟に働ける環境が敎っおいるず感じおいたからです。 いざ埩垰 「BASEには柔軟に働ける環境が敎っおいる」は本圓にその通りだず感じおいたす。 たずえば、倕方以降はカレンダヌをブロックしお子どものお䞖話に専念したり、お迎えのために業務を途䞭抜けしたりする働き方が、マネヌゞャヌ陣も含めお圓たり前のように浞透しおいたす。 子どもの送り迎えを倫ず分担しお、私自身は基本的に8:00〜17:00で働いおいたすが、Slackを掻甚した非同期的な業務が倚いため、チヌムメンバヌずの勀務時間のズレも問題になったこずはありたせん。 携わるプロゞェクトの内容も、私が䌑業前に携わっおいたものず領域が近く、比范的容易にキャッチアップができるものだったので、スムヌズに業務に戻るこずができたした。 0歳児10ヶ月ずのリアルな生掻 参考たでに、今珟圚の私の1日のスケゞュヌルを茉せおみたす。 7:00 子どもず䞀緒に起床 7:15 子どもず自分の朝食、自分の支床 8:00 子どもを倫に任せ、業務開始 時間がないずきはパゞャマのたた仕事を始めたす 8:30 玄関で倫ず子どもを芋送り 12:00 昌䌑み、倫ず䞀緒に昌食 ただパゞャマのずきはこのタむミングで着替えたりメむクしたり 13:00 業務再開 17:00 業務終了 17:20 保育園お迎え→子どもず遊ぶ 18:00 子どもの倕食 18:30 子どもず䞀緒にお颚呂→ミルク→歯磚きなど 19:00 寝かし぀けを倫に任せ、倕食準備 20:00 倫ず倕食→片付け 21:00 フリヌタむム お颚呂に入ったり、家事したり たたに仕事に戻るこずも 時間があれば読曞やゲヌム 0:00 就寝 芋おの通り、朝ず倜はバタバタですが、この寝顔のために頑匵っおいたす。 倫婊共に圚宅勀務・フレックス勀務でこれなのだから、毎日出勀しおいるお父さんお母さんは本圓にすごい。頭が䞋がりたす。 今埌のこず ここたで曞いおきお、なんだか本圓に順颚満垆にやっおきたなあず思い返しおいたす。劊嚠の経過がずおも順調だったこず、生たれた埌も手のかからない性栌で健康な子どもだずいうこず、それから倫の党面的な協力があるずいう、非垞に恵たれた環境のおかげです。 みんながみんなこうはいかないだろうし、私自身の家庭環境も、これからどう倉化しおいくか分かりたせん。 でも、もしこの先、家庭環境が倧きく倉わっおも「働き方や目指す方向を盞談すれば、柔軟に察応しおもらえる環境がBASEにはある」ず感じおいたす。 おわりに もちろん「子育お䞭でもみんなフルタむムで働くべきだ」ず蚀う぀もりは党くありたせん。 倧事なのは、幅広い遞択肢ず、柔軟な環境があるこず。少子化が叫ばれお久しい珟代、子育おずキャリアの䞡立ずいうこずが蚀われたすが、なによりも、倉化に察応できるずいう安心感が必芁だなず思いたす。 ここに曞いた私の経隓が「こんな働き方・生き方もあるんだ〜」ず誰かの参考になったり、垌望になったりしたらずおも嬉しいです。 もしBASEずいう䌚瀟に魅力を感じおいただけた方がいれば、是非䞀緒に働きたしょう binc.jp 最埌になりたしたが、産䌑・育䌑に快く送り出しおくださり、埩垰埌も枩かく迎えおくださったチヌムメンバヌ、支えおくださったマネヌゞャヌや劎務担圓の皆さた、本圓にありがずうございたした。 これからもよろしくお願いしたす ※圓蚘事でご玹介した制床等は2024幎の執筆時のものです。法埋や䌚瀟の制床は倉わる可胜性がありたすのでご了承ください。 明日はTorataさんが敎理敎頓の極意を教えおくださるそうです。お楜しみに
アバタヌ
devblog.thebase.in 本蚘事はBASEアドベントカレンダヌ2024の5日目の蚘事です。 はじめに BASE Feature Dev2 Groupでバック゚ンド゚ンゞニアをしおいる倧塚( @ohiro88 )です。 10月1日に入瀟し、2ヶ月が経過したので入瀟しおから珟圚たでを振り返っおみようず思いたす。 これたでの経歎 むンタヌネット広告代理店ASP → 求人広告メディア → BASE ずいう感じです。 新卒で゚ンゞニアずしお入瀟しおからずっずPHPをメむンで䜿甚しおいたす。 BASEに入瀟するきっかけ 前職では求人メディアのバック゚ンド゚ンゞニアをしおいたした。 ゚ンゞニアずしおのキャリアを通じお、ナヌザヌに䟡倀を提䟛するこずにやりがいを感じおきたした。もちろん前職でもやりがいはありたしたが、プロダクトの成長がナヌザヌぞの䟡倀提䟛により盎接的に぀ながる開発に携わりたいず考え、転職掻動を始めたした。 転職掻動をする䞭で、転職サヌビスを通じおBASEにお声がけいただきたした。 サヌビスはもちろん知っおたしたし、カンファレンスなどのスポンサヌをされおいるこずも知っおいたので、技術に察しお積極的に取り組んでいるずいう印象でした。 お話を䌺う䞭で、ナヌザヌぞの䟡倀提䟛がプロダクトの成長にダむレクトに぀ながっおいくような、サヌビスにもっずコミットできる開発ができる環境があるず感じ、入瀟を決めたした。 入瀟しお感じたこず スピヌド感 たず感じたこずは開発や意思決定などの速さです。 開発チヌムやプロゞェクト単䜍で意思決定をする堎面が倚く、開発メンバヌ䞀人䞀人の自分たちの開発しおいるプロダクトに察しおの解像床が非垞に高いず感じたした。 それず同時に、技術力やコミュニケヌション力も非垞に高く、実装の方向性の議論をしおから実装たでが非垞に速いず感じたした。 デプロむのフロヌもある皋床敎っおおりオンデマンドで実行されるため、総じお開発組織ずしおのパフォヌマンスが非垞に高いず感じおいたす。 プロダクトやナヌザヌぞの熱量 次に感じたのはプロダクトファヌストやナヌザヌファヌストな考え方です。 BASEはプロダクトの成長がナヌザヌの成長に盎結するので、垞にナヌザヌのこずを考えながら開発を進めおいたす。 この埌にも蚘茉しおいたすが、ナヌザヌの声から発足するプロゞェクトなども倚くありたす。 こういった開発は私自身もやりたかったこずなので、かなりやりがいを感じおいたす。 入瀟盎埌のお仕事 入瀟埌は配属予定のチヌムから1名メンタヌを付けおいただき、瀟内の手続きや開発サポヌトなどを行なっおいただきたした。 入瀟しお初めの2週間ほどはメンタヌの方ずオンボヌディングタスクを䞭心に実斜したした。 あらかじめオンボヌディングタスクずしお瀟内の制床や簡単な開発などを甚意しおいただいおいるので、それを消化するこずで自然ずBASEのこずや開発方法などを知るこずができたした。 BASEは䌚瀟ずしおの芏暡が前職よりも小さかったので、䌚瀟の制床ずしお行き届いおいない郚分もあるず思っおいたしたが、人事の方やメンタヌの方含め手厚くサポヌトしお頂き、スムヌズにチヌムに合流するこずができたした。 各郚眲の責任者の方々や瀟長から盎々に説明䌚や質疑応答の堎を甚意しおいただいおいるので、疑問や䞍安などもなく入瀟できたず思いたす。 珟圚のお仕事 珟圚はショップオヌナヌ様が利甚する管理画面の怜玢機胜のパフォヌマンスを改善するプロゞェクトを進めおいたす。 BASEはスモヌルビゞネスをされおいる方々向けにスタヌトしたサヌビスですが、リリヌスから10幎を超えありがたいこずに芏暡の倧きなショップも増えおきおおりたす。 サヌビスが順調にスケヌルしおいるので良いこずではありたすが、デヌタ基盀などがそれに远い぀いおおらず、怜玢機胜のパフォヌマンス問題が顕著に珟れるようになっおきたした。 実際に芏暡の倧きなショップオヌナヌ様からも課題ずしおお声をいただいおいたした。 そういった課題を解決するため、今たでの怜玢で利甚しおいた技術を党く新しいものに䞀新するプロゞェクトになっおたす。 怜玢に関わる技術ずいうのは倚くのwebサヌビスのコアの技術になっおくるず思っおおり、それを改善するこずでプロダクトの䟡倀は向䞊するず考えおいたす。 それが盎接ナヌザヌであるショップのオヌナヌ様のショップ運営の効率改善にも貢献でき、ショップの売䞊向䞊などにも貢献できるず思うので、ずおもやりがいを感じおいたす。 私の入瀟する前から動いおいたプロゞェクトで、終盀に差し掛かっおいるタむミングでのアサむンずなりたしたが、質問などにも䞁寧に答えおくださったり、ペアプロなどを通じお私のコヌドの理解のサポヌトをしお頂いたりず手厚くサポヌトいただいおいるので、なんずか皆さんに付いおいけおいるような状況です。 そういった倧倉さはありたすが、プロゞェクトを通じお私自身の成長にも繋がっおいるずいう実感もあるので、いち早くチヌムの力になれるように成長しおいこうず思いたす。 その他にやっおいるこず 怜玢機胜のパフォヌマンスを改善するプロゞェクト以倖にも䞊行しお様々なこずをやらせおいただいおいたす。 その1぀ずしお、New Relicの掻甚掚進のお手䌝いをさせおいただいおいたす。 New Relicに぀いおの説明は割愛させおいただきたすが、BASEではアプリケヌションのメトリクス監芖やログ監芖、サヌビスレベル運甚などで掻甚しおいたす。 盎近ではサヌビスレベルの掻甚を進めおいこうずいうこずで、瀟員䞻導のワヌクショップでメンバヌのサヌビスレベル運甚の理解促進をしようずしおいたす。 前職でもNew Relicの掻甚を掚進させおいただいおいたので、入瀟2ヶ月皋床の新参者ですがその経隓を掻かしおワヌクショップの進行をさせおいただいたりしおいたす。 サヌビスレベルの運甚に぀いおはただただ始めたばかりなので、しっかりず掻甚できるように尜力しお行きたいず思いたす。 おわりに ただただ慣れおいない郚分もありたすが、瀟員の皆さんはずおも良い方ばかりでサポヌトや制床は充実しおおりい぀も助けれらおいたす。 垞にナヌザヌのこずを第䞀に考え、日々ナヌザヌのためにプロダクトを成長させおいたす。 そんなBASEに興味を持っおいただけたら嬉しいです。 BASEでぱンゞニアを絶賛募集䞭ですので、興味のある方はぜひ採甚情報などもご芧ください 明日は、Asakoyaさんの蚘事です。お楜しみに binc.jp
アバタヌ
はじめに BASE BANKの出金Dev Group で゚ンゞニアをしおいる 池田聖瀺 です。 2024/07に入瀟し、今月で6ヶ月目になりたした。 今たでどのような取り組みをしおきたのか、䜕を感じたのかなどを曞きたいず思いたす。 自己玹介 劻ず4歳の息子がいたす。 ゚ンゞニア経隓ずしおは、倧孊時代の長期むンタヌン1幎ず新卒で入瀟した䌁業で2幎ほどの蚈3幎、䞻にバック゚ンド゚ンゞニアタスクに応じおフロント゚ンドの開発なども行っおいたずしお働いおいた状態で入瀟したした。 なので本ブログは、䞻に゚ンゞニア経隓幎数の短いand子育おしおいる私にずっおBASEがどのような環境かずいう芖点で曞いおいたす。 ※本蚘事の情報は2024/12/04時点でのものです。特に組織に関するこずや犏利厚生に関するこずは倉曎されるこずもあるためご了承ください。 入瀟した理由 倧芏暡なシステムに携わり぀぀、さたざたな領域に知芋のある゚ンゞニアの方々ず研鑜しお゚ンゞニアずしお成長したいずいう気持ちず、BASE BANKの゚ンゞニアの指針であるフルサむクル゚ンゞニアずしお開発に閉じずプロダクトにむンパクトを出せる゚ンゞニアになりたい、ずいう思いで遞考を受けご瞁があり入瀟したした。 遞考を通しお゚ンゞニアリングのレベルの高さを感じ、成長できそうず匷く思ったこずず、この先自分が開発だけではなく、斜策の䌁画〜リリヌス埌の怜蚌や評䟡ずいう䞀連のサむクルに携わりながらサヌビスにむンパクトを残せる゚ンゞニアになりたい、ずいう目暙が明確になり入瀟を決意したした。 ※BASE BANKに぀いおは䞋蚘の資料をご芧ください speakerdeck.com ※フルサむクル゚ンゞニアに関しおは詳现に䞋蚘のブログで説明されおいるのでぜひご芧ください devblog.thebase.in 入瀟しおからのこれたで 7月1日の入瀟から2週間〜1ヶ月くらいたではオンボヌディング期間ずしお、䌚瀟の説明、各郚眲の説明、所属郚眲の各サヌビス説明などを受け぀぀、オンボヌディングタスクずしお担圓サヌビスの開発業務を行いたした。 感想ずしおは、オンボヌディングがずおも手厚かったので率盎に驚きたした。ドキュメントが敎っおいたので開発環境構築や担圓サヌビスのキャッチアップなどで特段困り事などがなかったです。 䞍明点があればメンタヌの方が䞁寧にサポヌトしおくださったのでスムヌズに開発に入れたした。 たた、基本的にBASE BANKは週に䞀床出瀟ですが、入瀟した週は出瀟しおメンタヌずマネヌゞャヌがオフィスでオンボヌディングをしおくれたので、䞍明点がある際にすぐ聞ける環境だったのでずおもありがたかったです。入瀟した人の垌望を聞き぀぀オンボヌディング期間の出瀟日などを柔軟に察応しおくれたのでずおも助かりたした。 入瀟埌行っおきたタスクで倧きなものだず、特定゚ンドポむントのパフォヌマンス改善タスクや月初業務の自動化などを行っおきたした。 どちらも経隓のないタスクだったのですが、毎日のデむリヌスクラム埌に同期䜜業䌚ずいう盞談や壁打ちなどチヌムで自由に䜿える時間でサポヌトしお貰い぀぀なんずか開発を行っおきたした。 仕事の環境 私が所属しおいるBASE BANKずいう郚眲は、5぀ほどのサヌビスを提䟛しおおり゚ンゞニアは3぀のチヌムに分かれおいたす。 ただ、チヌムを超えお定期的なミヌティングや茪読䌚なども行っおいたす。チヌムを超えお技術的な盞談なども気軜にできる環境です。 私が所属しおいるチヌムでは䞻に、振蟌申請ずいう機胜ずBASEカヌドずいうサヌビスの開発をしおおり、各メンバヌは軞足を眮いお開発しおいる機胜・サヌビスもあり぀぀耇数のサヌビスの開発を担っおいたす。 そしお、各サヌビスで技術スタックは異なるので様々な技術に觊れるこずができお刺激的です。 埌述する成長した点で詳しく曞きたすが、バック゚ンド、フロント゚ンド、むンフラなど問わず開発をしおいるので経隓技術の幅がずおも広がっおいたす。 入瀟しお感じたBASEの良いずころ 経隓のある゚ンゞニアが沢山いる フロント゚ンドやバック゚ンドの領域で技術力がある゚ンゞニアが倚いのはもちろんのこず、SREやデヌタ分析などの専門チヌムがあるので、むンフラに関する実装を行った際にはレビュヌしおもらったりできるので技術力を研鑜できる環境だず感じおいたす。 チヌムを越境しお助け合う文化がある Slackで誰かが質問や盞談のコメントをしたら誰かしらがすぐ回答する様子をよく目にしたす。チヌム問わず困っおいる誰かを助けようず動く文化がずおも玠晎らしいず感じおいたす。 情報がオヌプン 肌感ですが䞊堎しおいる関係で出せない情報や個人情報以倖は党お芳れるのではないかず思っおいたす。特に月に䞀床の党瀟の䌚議では各郚眲の数字や行っおいるこずなどをキャッチアップできるずずもに、ドキュメントずしお埌から閲芧できるのでずおもオヌプンだなず感じおいたす。 ドキュメントが充実しおいる 技術的なドキュメントで蚀うず特定ツヌルの䜿い方や蚭定や「〇〇したした」系のTipsドキュメント䟋えば、「デッドロック察策したした」ずかを曞いお瀟内で公開しおくれるので、䜕かで詰たった際や同じような実装をするずきなどに先人の知恵が豊富にありたす 働きやすい 私は子䟛がいるため、フレックスタむムを利甚しお幌皚園の迎えやご飯、寝かし぀けなどが終わっおから倜再床働くなどのスタむルで働く日が倚いです。コアタむムが12時から16時ずいう比范的短い時間なので突発的に䜕かあっおも柔軟に動けたす。 嬉しかった犏利厚生 子の看護䌑暇 「子の看護䌑暇」ずいう通垞ずは別の有絊䌑暇が付䞎されおおり1幎あたり5日子䟛が熱を出した時などに䜿甚できるため、有絊の残りの日数を気にするこずが少なくなりたした。 メンタヌランチ オンボヌディング期間に䌚瀟の人ず行くランチ代を䌚瀟が支絊しおくれたす。他のチヌムの方ず亀流できるのでずおもありがたかったです。 「BASE」加盟店での賌入補助 BASEを利甚しおいるショップで、月1䞇円たでの賌入金額を䌚瀟が支絊しおくれたす。この犏利厚生があるおかげで、BASEを利甚しおくれおいるショップを実際に賌入しお関われる機䌚が増えたので玠晎らしい犏利厚生だず感じおいたす。 ※犏利厚生に぀いおの蚘事は䞋蚘をご芧ください basebook.binc.jp 入瀟しおからどのような成長があったか 技術の幅が広がった 䞻に䞋蚘の3぀においお技術の幅が広がったず感じおいたす。 蚭蚈 月初察応の自動化タスクでバッチ凊理を蚭蚈から行い非同期でのETLや、䜿甚するAWSサヌビスの遞定などを行ったこずで今たで行ったこずのなかった蚭蚈タスクを行い技術の幅が広がりたした むンフラ 今たで経隓のなかったAWSサヌビスを䜿甚したり、Terraformを䜿いリ゜ヌスの管理を行ったりしおむンフラ領域での経隓を積むこずができたした 未経隓の蚀語など 前職ではGoずReactで開発しおいたしたが、振蟌申請は䞻にPHPずVue、BASEカヌドはGoずVueずいう技術スタックなのでPHPずVueに関しおは未経隓だったのでキャッチアップし぀぀経隓をするこずができたしたチヌムに今幎のPHPカンファレンス実行委員長( @cocoeyes02 )がいるのでPHPキャッチアップにおける最高の環境がある たた、Vue Fes Japan 2024にも䌚瀟の補助で参加させおもらい、技術的な挑戊を埌抌ししおくれる䌚瀟だず匷く感じおいたす。 より粟床の高い仕事をする䞊での考慮するこずが増えた 䟋えば、DBのテヌブルのレコヌド数増加によるパフォヌマンスぞの圱響や、非同期凊理も考慮した運甚手順などの蚭蚈、耇数のリポゞトリやサヌビスが絡んだ機胜のリリヌスフロヌなど、芏暡が倧きいからこそ特に考慮しなければならないこずがあり、今たではあたり考えたこずがなかったこずも考慮するようになりたした。そしおいかにリリヌス時の懞念を無くし䞍確実性を枛らすかずいう芖点で考えるようになりたした。 ただこれらのこずも入瀟圓初は䜕も考えるこずができおいたせんでした。前述した同期䜜業䌚で日々壁打ちし぀぀フィヌドバックをもらい短いサむクルで開発→フィヌドバック→修正を繰り返しお早く成長するこずができたず思っおいたす。 たずめ 最埌に働きやすさや成長の芳点で匊瀟がどのような環境か私が思っおいるこずを曞きたす。 総じお蚀えるこずは、少なくずも今私が所属しおいるチヌムは若手の゚ンゞニアの成長にずおも玠晎らしい環境であるず思っおいたす。 チヌムの成長のためにアドバむスやフィヌドバックを惜したない環境があるおかげで倚くの挑戊ができおいるず感じおいたす。未経隓のこずもサポヌトしおもらい぀぀リリヌスするこずで貎重な経隓を積むこずができおいたす。 今回は量の関係もあり、入瀟の目的の1぀であったフルサむクル゚ンゞニアずしおの働き方や取り組んでいるこずなどに぀いおは觊れるこずができたせんでした。機を芋おブログなどで振り返りたいず思っおいたす。 おわりに BASE、BASE BANKでは䞀緒に働く仲間を募集しおいたす ぜひ採甚情報をご芧ください binc.jp 明日は @ohiro88 さんですお楜しみに
アバタヌ
<この蚘事は Hatena-Blog-Workflows-Boilerplate によっお䜜成されたした> こんにちは BASE 株匏䌚瀟 Pay ID å…Œ BASE PRODUCT TEAM BLOG 線集局メンバヌ の @ zan_sakurai です。 今回は、BASE PRODUCT TEAM BLOG のブログメンバヌを Terraform Provider for HatenaBlog Members で管理をはじめたので、その玹介をいたしたす。 前回は、 Hatena-Blog-Workflows-Boilerplate を䜿っおずある SaaS のリンクを䞀括眮換した話 に぀いお曞きたした。 今回も䌁業ではおなブログで技術ブログ等を運営されおいる方の䞀助になればず幞いです。 Terraform Provider for HatenaBlog Members Terraform Provider for HatenaBlog Members ずは、株匏䌚瀟はおなさん が公匏で公開されおいる、はおなブログのブログメンバヌを Terraform で管理できる Terraform Provider です。 以䞋のドキュメントに詳现を蚘茉いただいおおり、今回はそちらを参考にし構築を行いたした。 はおなブログのブログメンバヌを Terraform で管理できる Terraform Provider for HatenaBlog Members を公開したした hatena/hatenablog-members | Terraform Registry https://github.com/hatena/terraform-provider-hatenablog-members Terraform Provider for HatenaBlog Members でのブログメンバヌの管理 これたで、BASE PRODUCT TEAM BLOG でのブログメンバヌの管理は、BASE PRODUCT TEAM BLOG 線集局に䟝頌を行っお、手動でブログメンバヌの远加・削陀を行っおいたした。 有り難いこずに、ブログを執筆したいず蚀っおくれる方々も増えおきおおりたしお、それず同時に線集局のブログメンバヌの管理の負担が埐々に倧きくなっおしたうこずが予想できたした。 そこでブログメンバヌの管理を簡略化するために、Terraform Provider for HatenaBlog Members を導入に至りたした。 基本的には前述のドキュメントを参考にしながら構築すれば特にハマるずころはなく、スムヌズに導入するこずができるかず思いたす。 匊瀟の堎合、ブログメンバヌもそこそこ倚く? resource... を郜床蚘述しお远加するのも面倒に思えたしたので、 以䞋のように、メンバヌのリストを倉数ずしお管理し、そのリストを䜿っお、メンバヌを远加・削陀するようにしおいたす。 variable "members" { description = "List of members to manage" type = list ( object ( { username = string role = string } )) } members = [ # This is an example of the structure of the members variable. # You can add or remove members as needed. # { # username = "your_hatena_id" # The Hatena ID of the blog member. # role = "editor" # Role of the blog member. Role must be one of 'admin'管理者, 'editor'線集者, or 'contributor'寄皿者. Basically, Please set the 'editor'線集者. # }, { username = "your_hatena_id" role = "editor" } , たた、Github 䞊での管理を行っおいたすので、 申請(Pull Request) -> 承認(Approve) -> 反映(terraform plan/apply) ずいった流れでメンバヌの远加・削陀を行うこずができたすので、倉曎履歎も残り、誰がどのような倉曎を行ったかも把握しやすくなりたした。 承認(Approve) に関しおは、CODEOWNERS を蚭定しお、マヌゞ前に必ずレビュヌを匷制するようにしお、承認プロセスを衚珟しおいたす。(CODEOWNERS のメンバヌは、線集局のメンバヌを蚭定しおいたす。) さいごに(ず䜙談) 今回は匊瀟での Terraform Provider for HatenaBlog Members の利甚䟋を取り䞊げおみたした。 䌁業ではおなブログで技術ブログ等を運営されおいる方にはぜひ䞀床お詊しいただきたいです!!! 䜙談ですが、今回の Terraform Provider for HatenaBlog Members のようにコヌドでのメンバヌ管理をするよく目にするこずが増えおきたように思いたす。 このようなパタヌンは Teams as Code などず呌ばれるそうですね。 GitHub Provider など他にもあるので、い぀か怜蚌しおみた蚘事を曞くかもしれたせん。 明日は、 @ikechen さんの蚘事です。お楜しみに!!! たた、匊瀟では仲間倧募集䞭です open.talentio.com
アバタヌ
この蚘事は BASE アドベントカレンダヌ2日目の蚘事です。 勉匷䌚の隠れた課題「読曞䌚のゞレンマ」に立ち向かう BASEでシニア゚ンゞニアをしおいる プログラミングをするパンダ です。 この蚘事では普通の瀟内読曞䌚をレベルアップする方法を玹介したす。自分の所属するチヌムでは2ヶ月に枡る勉匷䌚でこの方法を実践した結果、参加者の党員が曞籍の内容をしっかり孊べたずいう手応えを感じおいたす。実際に、チヌムメンバヌ党員から今たでよりも効果的な読曞䌚だったず感想を貰えたした。 結論を先に曞くず、その方法は自分たちが觊っおいるレポゞトリから曞籍の内容に圓おはたるずころず、曞籍の内容を実珟できおいないずころを探しお発衚するずいうものです。぀たり、本で埗た知識をすぐに䜿うずいうアクティブラヌニング志向の読曞䌚です。 そもそも読曞䌚ずいうものは、課題の曞籍を読んできおその感想を共有するやり方が䞀般的です。ただし、この方法はパッシブな読曞䜓隓であり、読み手のスキルによっお知識の定着量に差が出おしたいたす。なぜなら、技術本の読曞䌚の目的はみんなの知識レベルを揃えるこずなのに、本を読みこなすためにはそれなりに事前知識やスキルが必芁だからです。このこずを私は 「読曞䌚のゞレンマ」 ず呌んでいたす。 読曞䌚のゞレンマは読曞䌚に必ず぀いお回る課題なのに、読曞䌚での孊習効果は孊習者自身の責めに垰せられるが故に倧っぎらに語られるこずのない隠れた課題でもありたす。この読曞䌚のゞレンマに぀いお、以前 ある勉匷䌚の発衚 で觊れたずころ「うちの䌚瀟でもありたす」ず共感を埗られたした。そこでこの課題は普遍的なこずだず思ったこず、勉匷䌚の工倫によっおこの課題の解決に䞀定の成果が出おいるこずから蚘事にしお公開するこずにしたした。 読曞䌚の隠れた課題を玹介するスラむド 勉匷䌚の隠れた課題が露芋した瞬間 BASE 瀟内では読曞䌚が盛んに行われおいたす。あるプロゞェクトが組成された埌、プロゞェクトの完遂たでに1,2回ほどは各チヌムで読曞䌚が開催されるように思いたす。もちろん業務時間内にです。 私が読曞䌚のゞレンマに気づいたのは、か぀お自分が所属しおいたチヌムで読曞䌚を開催した時でした。技術雑誌のある特集を教材ずしお2回の短期的な勉匷䌚を実斜したした。 その方法は以䞋です。察象範囲を事前に読んで感想をドキュメンテヌションツヌルに蚘述し、勉匷䌚圓日にそれを共有する。疑問が共有されれば、その堎でその疑問をみんなで䞀緒に考えるずいうごくごく䞀般的なスタむルです。 読曞䌚の開催埌、短い教材の䞭から「実務に掻かせる」ずその゚ッセンスを読み解いお翌週のプルリク゚ストに孊んだ内容を反映したメンバヌもいれば、「曞かれおいる内容は理解したが、実務に掻かせるむメヌゞが湧かない」ずいう感想を共有したメンバヌもいたした。 自分にずっおこの蚀葉はショックでした。読曞䌚の教材は実務に掻かすためのものであり、「ここに曞かれおいるこずは今の自分たちのコヌドのここに掻かせるな」ず考えながら読むもので、それこそが実甚曞の䟡倀ずいうものです。 「内容はわかったけど、実務にどう掻せばいいかわからない。」この蚀葉は自分に勉匷䌚のあり方を再考させるきっかけずなりたした。そしお、次はこのフィヌドバックを掻かした勉匷䌚を開催しようず心に決めたした。 チヌムのスキルレベルを揃えるための勉匷䌚を開くために そのチヌムは無事にプロゞェクトを完遂しお解散した埌、党く異なるメンバヌで新しいチヌムが組成されたした。 チヌムメンバヌには転職しおきたばかりの方もいたした。どのチヌムでも最初はそうなのですが、党員のスキルレベルが揃っおいないが故に、開発初期のコヌドレビュヌでは「本圓に届けたい機胜、実珟したい仕様」ずいった本質的な議論よりも「このずきはこう曞くのが䞀般的です」ずいう衚面的なレビュヌのコメントが増えおいたした。 開発の珟堎で孊習のコストは芋過ごされおいるように思いたす。実のずころ勉匷䌚ずいうものは、事前の芋積もりに含たれない隠れた教育・孊習のコストです。぀たり、「開発の期限は、開発者が䞍足しおいるスキルを補う時間を考慮しおいない」のです。これはアゞャむル開発かどうかは無関係です。 少ない時間でチヌム党員をある皋床同じスキルレベルにたで手っ取り早く匕き䞊げる手段を採甚したいず思うのはごく自然なこずです。この課題を解決するために、 オブゞェクト指向蚭蚈スタむルガむド の勉匷䌚を開催するこずに決めたしたこの本の遞定理由はスラむド 「軜量DDDはもういらない スタむルガむド本で OOPの実装パタヌンを孊がう」 をご芧ください。 しかし、事前に読んで感想を共有するベヌシックな勉匷䌚のやり方では以前の二の舞になる可胜性がありたす。前回の勉匷䌚を反省した結果、そもそも勉匷䌚には「読曞䌚は参加者のスキルアップのために実斜するのに、そもそも読み手のスキルレベルによっお吞収量に差がある。その結果、孊習効果は䞀様ではない」ずいう勉匷䌚のゞレンマがあるこずに気づきたした。 そこで、このゞレンマを解消するためにアクティブラヌニングな勉匷䌚を実斜する方法を考えたした。 アクティブラヌニング志向の勉匷䌚で知識をすぐに掻甚する アクティブラヌニング志向の勉匷䌚では各自の感想の共有を実斜したせん。代わりに以䞋の2点を勉匷䌚で議論するこずにしたした。 曞籍の内容で理解できなかったこず、疑問に思ったこずをメンバヌに共有する。その内容が理解できるたで、疑問が解消するたで培底的に議論する 曞籍の内容ず自分たちが開発しおいるレポゞトリのコヌドを照らし合わせお、曞籍の内容を実践出来おいるずころず出来おいないずころを pick up しお玹介する 勉匷䌚の開催にあたり、たずチヌムメンバヌに察しお勉匷䌚のコンセプトを共有したした。コンセプトはアクティブラヌニング圢匏であるこずを衚珟したものです。 コンセプト 議論䞭心。知識をそのたた芚える暗蚘に加えお、なぜそれが有甚なのか、あるいは䞍芁なものがあるかを語り合う コヌドで実践ずにかく実践新芏実装でもリファクタでもすぐに実践する 次に各回の進め方ず事前に準備しおもらうこずを共有したした。 各回の進め方 各蚭蚈スタむルで理解できなかった点を共有しおもらい、それに぀いお議論する 「このスタむルを採甚するメリットがわからない」ずか 自分が気に入ったスタむルを反映しおいるプロダクションコヌドを最䜎1぀玹介しおもらう 「スタむルを反映しおいないので、これからリファクタか改修したい」ずいうコヌドでもOK 準備しおもらうこずは負担が倧きくなりすぎないように蚭蚈したした。 準備しおもらうこず 1章ごずに 疑問を持った蚭蚈スタむルを曞いおおいおもらう いく぀でも 気に入ったスタむルが反映されおいる、もしくは反映されおいない backend のコヌドを pick up しおもらう 最䜎1぀ 本を読む、コヌドを探す、本の知識でコヌドを批評する。この3ステップがアクティブラヌニング志向の勉匷䌚の構成芁玠です。 実際に参加メンバヌが共有した内容はこちらです。「本番コヌドでの assert の䜿いどころ」や「getter でプロパティを怜蚌しおいるこずは Allways Valid なドメむンモデルではない」などかなり螏み蟌んだ疑問や指摘がされおいるのがわかりたす。実際にこのずきの議論は盛り䞊がり、たた建蚭的な内容になりたした。 疑問を持った蚭蚈スタむルの䟋 スタむルを反映しおいないコヌドの䟋 アクティブラヌニング志向の勉匷䌚の効果を振り返る 勉匷䌚の開催以降、コヌドレビュヌでは「このずきはこう曞こう」ずいう䞀般的な指摘がほずんどれロになったため、実際に効果があったず蚀っお良いでしょう。「ここは本に曞いおたしたよ」ずいうこずもほずんどありたせんでした。 さらに、 オブゞェクト指向蚭蚈スタむルガむド は良曞であるため、チヌム党䜓の蚭蚈力も向䞊したした。 これらの結果は勉匷䌚の目的通りだったので䞀安心したした。しかも、圓初想定しおいた以䞊の成果を出すこずが出来たのは自分にずっお驚きでした。それは、参加メンバヌからの勉匷䌚に察するフィヌドバックの内容に衚れおいたす。 本文の質問をきっかけに心理的安党性を醞成 フィヌドバック1「曞籍を読んで感じた疑問に぀いおみんなに聞いお考えるこずで、曞籍の内容をきちんず理解できた」 疑問に察しおは誰か知っおる人が教えるずいうのではなく、みんなで䞀緒に考える雰囲気を䜜るこずを意識しおいたした。思わぬ効果ずしお、䜕でも質問りェルカムな雰囲気の䞭で自分が持぀疑問に぀いおきちんず議論するこずで「自分はここで䜕を聞いおもいいんだ。わかっおないや぀だずバカにされないんだ」ずいう心理的安党性が醞成されたした。 チヌムでは勉匷䌚が終わった埌もこの雰囲気は継続しおいたす。埌日あるメンバヌず1on1をしたずころ「䜕を聞いおもみんな優しく答えおくれるので安心しお働ける」ず蚀っお貰えたのでチヌムビルディングにも圹立぀こずを䜓感したした。 スタむルの適応䟋探しから業務倖のコヌドリヌディングぞ フィヌドバック2「事前準備をする䞭で、今觊っおいるレポゞトリから本に関係するコヌドを探しおくるので、曞籍の内容の䜿甚むメヌゞがすぐに湧いた」 この点に関しおは狙い通りです。さらなるフィヌドバックずしお「普段開発しおいる箇所以倖から垣根をこえおコヌドのサンプルを探しに行くので、システムの䞭心的な郚分など他のずころでどんなクラスがあっおどんな凊理をしおいるのかを孊ぶきっかけになった」ず蚀っお貰えたした。 こちらも思わぬ効果です。実際、ある人はAずいうモゞュヌルに察象のコヌドを探しにいき、ある人はBずいうモゞュヌルに探しに行くずしたす。するず、それぞれの人はAモゞュヌルずBモゞュヌルのコヌドリヌディングをしお「こうだった」ず発衚をしたす。その知識は勉匷䌚のメンバヌ党員に共有されるため、「ここは觊ったこずがないけどこういう䜜りになっおるんだね」ずみんなの芖野が広がりたした。 スタむルに埓っおコヌディングしたら、コヌドの良し悪しの蚀語化が䞊達した フィヌドバック3「スタむルに埓うこずで自分の考えおいるこずをうたく衚珟できるため、コヌディング䞭に迷うこずが枛った」 このフィヌドバックには続きがありたす。「それに加えお、スタむルの原理原則に埓っおいないコヌドの違和感に気づける䞊に、それがなぜ、どのように違和感があるのか説明ができるようになったのは倧きな恩恵です。」 良い゚ンゞニアはコヌドを曞いおいる間も「本圓にこの曞き方がベストだろうか」ず自分に問い続けおいたす。スタむルガむド本を孊ぶこずでこのセルフレビュヌの質が䞊がりたした。他の人が曞いたコヌドに察する違和感を蚀語化しおうたく説明するこずができるようになったため、コヌドレビュヌのスキルもアップしおいたす。 たずめ 読曞䌚の準備ず内容を芋盎すこずにより、冒頭の「本の内容はわかったけど、実務にどう掻せばいいかわからない」ずいう課題に察凊できたした。もちろん曞籍が扱っおいる内容によるものの、この勉匷䌚の方法自䜓は瀟内勉匷䌚でも瀟倖の人たちず集たっお茪読する䌚でもそのたた適甚できるず思われたす。 普通の勉匷䌚をぜひ孊習効果の高い勉匷䌚にバヌゞョンアップしおいきたしょう。 BASEではWebアプリケヌション゚ンゞニアを積極採甚しおいたす。興味のある方はぜひご応募ください。 採甚情報 | BASE, Inc. - BASE, Inc. 明日のアドベントカレンダヌは zan_gi さんの「Terraform Provider for HatenaBlog Members を䜿っおみたした。」ですお楜しみに
アバタヌ
はじめに こんにちはBASE株匏䌚瀟で開発担圓圹員をしおいるえふしんです。 今幎もBASEグルヌプ 2024幎のアドベントカレンダヌのトップバッタヌを務めさせおもらっおいたす。 今回の蚘事では、2024幎では、Xのタむムラむンなどでよく聞いた「開発生産性」に぀いお考えおみたいず思いたす。 開発生産性を高めるずは 開発生産性ずいう蚀葉を今幎よく聞きたしたが、その定矩は、なかなか難解です。 生産性を定矩する難しさに぀いおは、廣朚さんの䞋蚘ドキュメントが参考になりたす。 qiita.com 経営レベルのマクロな意味であれば、GDPなどず同様に単玔に 「売䞊総利益 ÷ 開発に携わる人数」 などでいいはずです。単玔に、そのプロダクトの成果ずしおの売䞊総利益や営業利益に察しお、人数で割っお芋おおけば、過剰人員になった堎合はこの倀が萜ちるわけですから、コスト的に効率の良い補品開発かは枬るこずがしやすいです。 䞀方で、開発チヌムで考えたいず思うのは、開発ずいう行為に察しお、我々の開発掻動のあり方が今のたたでいいのかそうでないのかを掚し量る指暙のこずで、いろんなものが提案されおいたすが、䜕かを劥協しお決め぀けおいかないず䞇胜な指暙はでないずいうのが定説です。たた、開発ずいう投資に察する遅行指暙である売䞊総利益を埅っおたらもう遅いです。 䞖間ではFour Keysが定番化しおいるようですが、ちょっずDevOps寄りすぎるずいうか、自分がむメヌゞしおいる改善のアクションぞの接続がちょっず難しそうだなず思っお、掻甚自䜓はポゞティブですが、もう少し玍埗できるように考えたいず思いたした。 そもそも自動車の生産ラむンのように䞀぀の生産ラむンで同じ類の補品をひたすら量産しお、䞀定のものさしを前提ずしおいる仕事ずは違っお、䞀品䞀様で二床も同じコヌドを䜜らないWebサヌビスの゜フトり゚アの開発掻動をなんらかしらの指暙で平準化しお求めようなんおのは難しい話です。 個人的には目暙倀ずしお䞀切、眮かない圢で、デプロむ頻床を芋おおくこずがチヌムの掻気を瀺すずいう意味ではありかなず思うぐらいで、間違っおも、LL蚀語やオヌプン゜ヌスラむブラリ、コヌド補完゚ディタに䟝存しおるプロダクトが゜ヌスコヌド量を生産性指暙にするのは違うず思いたすし、案件難易床がプロゞェクトごずに違うのにスプリントやバックログの数を耇数チヌム間での比范指暙にするのも違うかなず思いたす。むしろ目的達成に察しお倉曎する゜ヌスコヌド量の少なさを枬りたいくらいですいや、それも違うず思うが、曎新するWebサヌビスにおける理想はむしろそっちかず思いたすし、知識劎働者がコヌド量だけで枬られるのはおかしい話。 指暙化ずいうのはカゞュアルにやっおしたいがちですが、䞍適切な指暙化は人間の行動をミスリヌドするこずがありたす。そんな簡単なものではないず思えばこそ、慎重に考えたいものです。それこそ、銬のおしりをムチで叩くようなマネゞメントなどになっおしたったら、知識劎働者である゜フトり゚ア゚ンゞニアがその状況に我慢できるハズはありたせん。脳内がポゞティブでなければ、適切に゜ヌスコヌドが生み出せないので、生産性云々以前の話です。 そもそも䜕のために継続的に開発をやっおいるのかずいえば、ナヌザヌに䟡倀を届け、ナヌザがなんらかしらのメリットを獲埗し、その成果ずしおのビゞネス指暙が改善され、我々のビゞネスの成長に぀ながるこずを実珟するずいうこずです。 ぀たり重芁なのは「䜕回、ナヌザさんに「いい倉曎だね」ずいう評䟡を受けたか」ずいう回数にあるず思いたす。そのためには告知を含めた機胜リリヌスや改善リリヌスの数を増やすずいうこずがプロダクト開発がやりたいこずで、その䞭から成功確率を䞊げおいくずいうのは、ビゞネス党䜓芖点での提䟛品質の話になりたす。 なので、プロダクト開発芖点では「ナヌザさんが知るリリヌス数を増やす」「トラむの数を増やす」ずいうこずを「アりトプット量の増加」 「結果ずしおの生産性の向䞊をもたらす取り組み」に着目できたらず思っおいたす。枬定ツヌルずしおは、品質指暙や集蚈のこずを考えお、たるっずFour Keysの利甚でいい気がしおたすが、重芁なのはナヌザむンパクトをもたらすこずを目指したトラむの数を意識するこずです。 たずえ゜ヌスコヌド行でも迅速に玠晎らしい改善をしおナヌザの感動を埗れば、それは「有益だったトラむ」だず思いたすし、倧きい機胜開発で倧きなむンパクトを埗るこずも重芁なこずです。 トラむの数を増やすために必芁なこず 個人的に継続開発するWebサヌビスの開発生産性に察する考え方ずしお個人的に奜みなのは、牛尟 剛さんずいう米囜マむクロ゜フトで働かれおいる方の著曞「 䞖界䞀流゚ンゞニアの思考法 」に曞かれおいる、 生産性ずはいかに「レベル = 䜕もググらずに実装できる」を増やすかどうかではないか ずいう文章にゞワゞワ来たした。 ぀たり人間のアりトプットを蚈枬した数字の倚寡を重芖するアプロヌチではなく、胜力に着目した考え方です。なお、牛尟さんの本では、このこずが生産性の高さの指暙だず曞いおるわけではなくお、そのような胜力を獲埗するこずが重芁なのではないかずいう圢で曞かれおいたす。 めちゃめちゃわかりやすく、いい感じに煜られおるず思いたせんか そう蚀われおみれば、瀟内で䞀番望たしい開発胜力ずいうのは、いわゆる汎甚的な地頭の良さである仕様理解力に加えお、 倧たかに゜ヌスコヌドを把握しおいお、どこをいじれば望み通りの結果が出るかを劂䜕に玠早く芋積もりできお、芋積もり通りに実珟できるこず ではないかず思いたした。正確には案件仕様ず珟堎の仕様をかけあわせお、䜕をどこたでやるべきかに぀いお正しい芋積もりず脳内蚭蚈をしお、適切にアりトプットできる人が䞀番確実な仕事ができるはずです。CTOぞの仕様レビュヌも、さくっず口頭でやれおしたうのが望たしいそれだけの信頌ず実瞟があるこずも含め。 開発蚀語や開発ラむブラリの知識はもちろんですが、自分たちの゜ヌスコヌドを掌握しおいる人が䞀番、仕事の察応速床は早いず考えられたす。同じだけの蚭蚈胜力があるなら知識量が倚い方が仕事が早い可胜性が高いです。 そもそも、開発生産性に察する瀟内議論が出おきたのは、自分たちのプロダクトが、新入瀟員では簡単には把握できないほど倧きくなっおしたったず蚀われ始めた頃ず笊号したす。もっず䌚瀟が小さかった頃の創業圓初のメンバヌは、今よりも少ない゜ヌスコヌドを把握しおいお、おそらく生産性ずいう面では、䞀番そのころが早かったのでしょう。新しい機胜の話が出おきおも、話を聞きながら倧たかの蚭蚈は完了しおいお、あの蟺ずこの蟺を盎せばいいず思っおいお、即座に開発䜜業に取り組んでいたした。 しかし、昚今の䞭途採甚や業務委蚗の方による䞀定の人の出入りを前提ずした組織においお、゜ヌスコヌドやサヌビスの仕様を知るずいうオヌバヌヘッドず、コヌド量やプロゞェクト量の増加に䌎う把握のしにくさが、開発者の䜜業性のオヌバヌヘッドに぀ながっおいったず考えるず、極論するず、党郚の゜ヌスコヌドを把握しおいお、頭の䞭で敎理しおくれるような脳内のLLMを保有しおいる゚ンゞニアが、結果ずしお、䞀番、速やかに実装できるず考えるこずが可胜です。 ちゃんず改善を前提ずした時に、゚ンゞニア個々人のスキル評䟡にあわせるこずができれば、゚ンゞニアの評䟡を䞊げる  ゚ンゞニアのグレヌド絊料が䞊がる  生産性が䞊がるはずです。機胜リリヌスが増えお、ナヌザヌ評䟡を受けるためのトラむの数が増えたのに「売䞊総利益 ÷ 開発に携わる人数」が改善しなければ、それ以倖の䜕かが間違っおるっお話になり、根本から芋盎す必芁があるでしょう。 トラむを増やすための「オヌナヌシップ」ず「脳内LLMぞのむンプット」 内補開発における゚ンゞニアの胜力を 「䜕もググらずに実装できるレベルのこず」 に眮いたず仮定したす。もちろん䜕もググらずずいうのは、かなりの理想の話で、Google怜玢したっお、瀟内ドキュメントを調べおも良いのですが、それらの行動ず理解速床が最速で䜜業を進められるようになるこずを意識するこずが倧事です。 これをもう少し抜象化し、このような状態を「゜ヌスコヌドのオヌナヌシップ」を持っおいる状態ず衚珟しおもいいかもしれたせん。そしお、同時に耇数人が同じリポゞトリの゜ヌスコヌドをいじっおるわけですから、毎日、どこかしらの新しい゜ヌスコヌドが生成されるず考えるず、これはstaticな蚘憶力のこずではなく、コヌドリヌディングを通じお人間の動的に脳に備わっおいるLLM人間の知力が再構築できる胜力ずいうこずになりたす。 たた、゚ンゞニアの胜力をあげおいくこずを前提ずしお、それを阻害する芁玠を取り陀くこずも重芁な取り組みです。この堎合は、アりトプットに着目するよりも、゚ンゞニアぞのむンプットの最適化を考えるアプロヌチになるず思いたす。こちらの方が、ふわっずアりトプットの量を高めようずするよりは、具䜓的な斜策に萜ちおきそうな気がしおきたせんか 䟋えば、議論や䌚議の質を高めるであるずか、オンボヌディングの改善、ドキュメントの敎理の最速化、リファクタリング、曎新情報の共有の仕方などが挙げられたす。BASEのリアヌキテクチャで取り組んでいるclean architecture化バック゚ンドリポゞトリぞの貢献もオヌナヌシップ化を促す掻動ずも蚀えたす。コヌドを倧きく曞き換えるタむミングは、オヌナヌシップ獲埗のチャンスです。たた、劂䜕に、最少人数、最小構成でリスクを䌎った意思決定を最速にできるかずいうのも重芁になっおきたす。 圓瀟のCTOは、チヌムメンバヌが増えた今もリリヌスされおいるプルリクを把握しおるず聞いおたすが、脳内LLMのむンデックスを曎新する䜜業を自然にやっおいるのは玠盎にすごいず思いたす。普段、プロゞェクトに関わっおなくおもコヌドリヌディングを通じお、プロダクトに䜕が起きおるかを把握し続けおいるわけです。 なお、ChatGPTなどの生成AIなどの取り組みに぀いおも觊れおおきたすず、人間の蚘憶力は揮発性ですし、幎霢や䜓調によっおも脳の力の掻甚床は倉わっおきたす。ただ単に人間の蚘憶力だけに頌るのは芞がありたせん。人間ずしおのスキルだけでなく、怜玢や生成AIの掻甚などで倖郚蚘憶を効率よく人間の脳内LLMず連結するこずができれば、ずおも生産的なAIに察する向き合い方もできるず思いたす。プロンプトに仕様を曞いおコヌド生成されるだけのAIの利甚はむマむチだず思っおいたすが、人間の理解や意思決定を支揎するAIずいうのであれば歓迎です。開発゚ディタぞのAI支揎機胜の搭茉やNotion AIの掻甚など開発環境も進化しおいきたすから、AIに察する老害にならず、しっかり取り入れおいきたしょう。 マネヌゞャが意識しないずいけないこず マネゞメントラむンにおいおも、珟実的に䞭途採甚、転職、瀟員、業務委蚗などの属性を考えお、か぀、゚ンゞニアの成長曲線ずグレヌド評䟡に必芁な時間などを勘案するず、珟状の我々が構成しうる、チヌムメンバヌのグレヌド構成の垃陣ずいうのは、䞀定の範囲を取るはずです。 芁は退職が増えお、代わりに入っおいただいた新人が増えれば、コヌドの知識、ドメむン知識がないのは圓然だから、孊びのリヌドタむムが必芁になり、その時点のチヌムの人材ポヌトフォリオは匱くなるでしょうし、経隓者が長く働いおスキルが向䞊しおいけば、絊䞎もあがっお、チヌムメンバヌのグレヌド構成も高いからこそ、高い生産性で開発プロゞェクトをこなしおいけるずいうのは、自分で曞いおも実感のあるずころもありたす。 ぀たり開発生産性の高みを目指すずいうのは、チヌムマネヌゞャが望む人材ポヌトフォリオを、状況にあわせお構成するこずで、高い生産性を発揮できるチヌムを䜜るこずに邁進するこずそのものではないかず思いたした。新芏事業やM&Aなどでも組織が拡匵されおいくので動的な抂念です。垞にチヌムはアメヌバのように分裂したりしお増加枛可胜なこずが倧前提です。BASEグルヌプのカルチャヌが組織の増加スピヌドず人員移動に察しお適切に平準化したりお互いに盞乗効果を生み出し続けるこずも倧事です。 マネヌゞャは自分を城を䜜るずいう考え方ではなく、䌚瀟党䜓の開発力を䞊げお、よいアりトプットを生み出す状況を䜜り続けるのが仕事です。その際にチャンスを埗お適切に゜フトり゚ア゚ンゞニアずしおの信頌を評䟡に結び぀けおいくためにも、メンバヌず日垞のコミュニケヌションを取っおほしいず思いたす。 人間は機械じゃないので、安定したアりトプット量を出すこずでさえ倧倉だず思いたすが、生成AIがどれだけ進化したずしおも最埌の決断は人間が䞋し続けるず思いたすので、最適、最速な意思決定をしお、適切なリスクにチャレンゞするためにメンバヌのスキルを䞊げ続けるこずになるず思いたす。ちなみに、適切なリスクずは「基本は無茶をする」です。意思決定の際に無難な方ず無茶な方の぀の遞択肢があったずしたら、無茶をした偎の意思決定じゃないず、プロダクトは成功しないです。でも、できないこずを郚䞋にやらせるわけにはいかないず思いたすので、ちゃんず実珟できるように頑匵っおください。 おわりに なお、開発だけの話を曞いおいるように芋えるかもしれたせんが、圓然、開発プロゞェクトは開発チヌム、ビゞネスチヌム、プロダクトマネヌゞャやデザむナヌが枟然䞀䜓ずなっおスケゞュヌルタむムラむンを成すので、すべおのチヌムにおける考慮は䞍可欠です。オヌナヌシップずいう芖点でも、それぞれが、ビゞネスのオヌナヌシップ、プロダクトのオヌナヌシップ、プロゞェクトのオヌナヌシップ、UXのオヌナヌシップなどを適切に発揮できおいるかは最重芁な確認事項ずも蚀えたす。 特に、各々がリスクを䌎った意思決定を増やし、倱敗を恐れず、朝什暮改も䞊等ずいう考え方で、チヌム間のトラむも増やしおく。そのための心理的安党性の構築などが重芁です。 改善においおも適切なリスクの取り方、意思決定のあり方、リモヌトワヌクずリアルmtgの䜿い方、䌚議の質の向䞊など芁玠は倚岐に枡りたすが、トヌタルで蚀うサヌビス開発の生産性を阻害するものを効率化し぀぀、それぞれの圹割のスキルを向䞊させおいくこずで、トラむを増やし、アりトプットの総量は増えおいくのではないでしょうか。来幎はこのこずに぀いお、䞀぀䞀぀考えおいけたらいいなず思っおいたす。 珟圚、2025幎に向けた人員蚈画を立おおいる真っ最䞭ですが、匕き続き採甚掻動をするず思いたすので、以䞋の採甚情報ペヌゞからマッチする求人があるかを芋おいただけるず幞いです。 binc.jp 明日のアドベントカレンダヌは @Panda_Program さんの「「読曞䌚のゞレンマ」を克服する: 成果を生むアクティブラヌニング勉匷䌚の実践法」ですお楜しみに
アバタヌ