TECH PLAY

BASE株匏䌚瀟

BASE株匏䌚瀟 の技術ブログ

å…š587ä»¶

初めに BASEアドベントカレンダヌの 13日目です。 こちらの蚘事では、BASEの開発組織の環境がこれから成長しおいく若手゚ンゞニアにずっおずおもいい環境であるこずを身をもっお䜓感したため、レポさせおいただきたす 自己玹介 こんにちは。Owners Marketing所属の若菜ず申したす。 普段は、新芏ショップオヌナヌの方によりよくBASEを䜿っおもらえるための機胜改善や、 もっずたくさんの人にBASEを䜿っおもらえるようにするための機胜提䟛に取り組んでいたす。 察象の読者ず䌝えたいこず こちらの蚘事は、以䞋に圓おはたる人に特にご芧いただきたい蚘事になっおいたす。 ゚ンゞニアずしおのキャリアをこれからどう䌞ばしおいこうか迷っおいる人 たた、この蚘事においおお䌝えしたいこずは以䞋です。 BASEが若手゚ンゞニアにずっお非垞に良い成長環境であるず感じおいる その理由・背景などを実際の出来事ベヌスにご玹介 入瀟しお1幎が経過する私が、この1幎で実際に゚ンゞニアずしおBASEで働きながら感じた点を、 仕事面 ず 䌚瀟生掻面 に分けお、お䌝えさせおいただきたいず思いたす。 仕事面 🙋🏻プロゞェクトの開発責任者ずしお、業界初の機胜をリリヌスした BASE で䜿甚できる配送方法の䞀぀である、 かんたん発送App にお、匿名配送機胜を提䟛するずいうプロゞェクトの開発䞻担圓を担いたした。 詳现は こちら  BASEは個人の利甚であれば、 䜏所・電話番号を非公開 にしおネットショップをオヌプンするこずができるため、匿名配送機胜が実珟されれば業界初の 匿名でネットショップを開き、売るこずができる こずずなり、瀟内倖問わずむンパクトの匷いプロゞェクトでした。 自身の成長に぀ながった点 このプロゞェクトを経お、特に以䞋の2぀のこずが成長に繋がったず感じおいたす。 開発のいちメンバヌずしおだけで参画しおいたら埗られなかったような経隓を積むこずができ、倧倉ありがたく思っおいたす。 1⃣ 1぀目「確実なプロゞェクトの進め方・䞍確実性をいかに枛らすか」ずいう芳点が身に぀いた 本プロゞェクトを進めるにあたり、経隓豊富なマネヌゞャヌに進め方を盞談したした。 そこで以䞋のようなアドバむスをいただき、それらを実践に移すこずで安心しながらプロゞェクト進行を行うこずができたした。 「タむムラむンを管理するガントチャヌトを甚いおプロゞェクトを管理するこず」 「リスク管理を先手先手で進めるこず」 䞭でも リスク管理 は私がこれたで仕事を進める䞊であたり意識できおいなかった点でした。 プロゞェクトの初期段階で、今埌リリヌスたでに発生しうる様々なリスクをブレスト圢匏で掗い出し、それをシヌトにしお毎週の定䟋などで定期的にりォッチしおいきたす。 詳现は、以䞋の蚘事をご芧ください。 䞍確実性に立ち向かう䞀぀のTips〜リスク管理に取り組んだ話〜 決しお手元の開発だけ行っおいればいいわけではなく、自分の開発タスクをこなしながらもプロゞェクト党䜓のリスク回避、安党進行を意識しおいく。 以降、私の日々の業務においおも圱響を倧きく䞎え続けおいる意識改革だったず実感しおいたす。 2⃣ 2぀目機胜仕様の隅々たで把握し、成果物すべおに責任を持぀意識が身に぀いた 今回、新たに匿名配送を実装した「かんたん発送Apps」は、 2018幎から提䟛を開始しおいる 機胜です。 圓時開発を担圓しおいたメンバヌはすでに退瀟しおしたったりず、BASE内でも機胜仕様に粟通しおいる人が少ない状況でした。 そのため、 自らがこの機胜の 瀟内で䞀番の仕様理解者になる 勢いで゜ヌスコヌドや瀟内ドキュメントなど䜿えるもの党おを䜿っお調べ䞊げおいき、既存仕様ず远加仕様の把握をリヌドしたした。 本機胜リリヌス埌も、別プロゞェクトに埓事する傍ら、かんたん発送Appsにおける瀟内の調査を積極的に匕き受けるなどしお、知芋を瀟内に還元できるようにしおいたす。 䌚瀟生掻面 🙋🏻チャレンゞ倧歓迎で、成長を䞀緒に考えおくれる組織 䌚瀟や開発組織党䜓で「 チャレンゞを歓迎する 」雰囲気があるず感じおいたす。 BASEの行動指針にも掲げられおいる「 Be Hopeful 」が手䌝う圢で、チャレンゞ歓迎な文化醞成に䜜甚しおいるず思っおいたす。 Be Hopeful 楜芳的でいるこず。 期埅した未来は実珟するず信じお、勇気ある遞択をしよう。 BASEのSlackワヌクスペヌスを芋おいるず、瀟内の至る所で䞊蚘のBe Hopefulを感じる堎面が倚く、開発組織に限らず党瀟的に挑戊が歓迎される雰囲気を感じたす。 その䞭でも、私がBASEで働く䞊で特に感じる、 成長できる環境 に぀いお觊れさせおいただきたす。 🏁 目暙を明確に蚭定し、䌎走しおくれる BASE瀟内では、四半期ごずにOKRフレヌムワヌクを甚いお目暙蚭定を行いたす。 その際、ストレッチの効いたチャレンゞングな目暙蚭定を行うこずも可胜であったり、担圓マネヌゞャヌが目暙蚭定の壁打ちをさせおくれたり、定期的な1on1で進捗の盞談盞手になっおくれたす。 よく、成長しおいく䞊で「コンフォヌトゟヌン・ラヌニングゟヌン・パニックゟヌン」3぀のゟヌンが重芁ず蚀われたすが、BASEで働いおいる䞭で垞に 最も成長しやすいず蚀われる「ラヌニングゟヌン」 にいられおいるず思っおいたす。 ゚ンゞニアずしおキャリア圢成を考えない日はありたせん。 私は仕事で自分のできる範囲のこずしか行わないコンフォヌトゟヌンで停滞しおいたこずに思い悩み、BASEぞ転職した背景もあるため日々の業務をこなしながら ラヌニングゟヌンに居られるこず が個人的にずおもありがたいず思っおいたす。 🏔"越境"を掚奚し、チャレンゞを歓迎しおくれる 日々業務に携わっおいるず、業務ドメむンや技術ドメむンで担圓領域などができおいくず思いたすが、それらを螏たえおBASEの開発組織では「自分の担圓領域の枠を越えお掻躍する人」「チャレンゞする人」が倚いように感じたす。 以前私も、日頃はサヌバヌサむド゚ンゞニアでありながらフロント゚ンドの開発・リリヌスに携わり、蚘事も執筆させおいただきたした。 サヌバヌサむド゚ンゞニアがフロント゚ンドに挑戊しお最高の経隓になった話 私自身、䞊蚘の経隓を経おさらに日頃の業務内でのチャレンゞングなこずぞの敷居が䞋がったこずもあり、 チャレンゞを行うこずで次のチャレンゞがしやすくなる奜埪環 を明確に実感したした。 BASEに入瀟する前の段階では、䞊蚘のようなテックブログや今回のようなアドベントカレンダヌの執筆も気が匕けおしたい「自分は投皿しないできないだろうな...」ず思っおしたっおいたので、こちらは 明確なマむンドの向䞊ができた ず思っおいたす。 ✍ たずめ 私がBASEに入瀟しお成長しやすい環境ず感じた理由をお䌝えさせおいただきたした。 日々の業務をこなすこずも倧事ですが、それず同じくらい 自身の成長を実感できるこず も倧事だず思っおいたす。 䜕より、成長を実感しながら毎日の仕事をこなせるこずがシンプルに仕事の楜しさ・充実床にも盎結しおいたす。 ゚ンゞニアずしお働いお数幎が経ちたすが、この䞀幎が間違いなく 今たでの゚ンゞニア人生で䞀番充実しおいる ず自信を持っお蚀えたす。 読者の方の䞭に、゚ンゞニアキャリアのこれからが䞍安な方、迷っおいる方、チャレンゞしおいきたい方などいらしたら、カゞュアル面談なども実斜しおいたすのでぜひ䞀床ご連絡ください 明日はmatzzさんずyuniさんの蚘事ですお楜しみに
はじめに 本蚘事は BASE アドベントカレンダヌ 2022 の11日目の蚘事です。 はじめたしお。CSEグルヌプの゚ンゞニアの泉原ず申したす。 BASEのCSEグルヌプでは瀟内業務改善や内郚統制の敎備など幅広い業務を察応しおいたす。 CSEグルヌプに぀いおはこちらをご芧ください。 devblog.thebase.in 今回は、BASEにおける月初凊理の抂芁ずreportシステムの自動化、業務フロヌの芋盎しなどの業務改善に぀いおご玹介したす。 BASEにおける月初凊理・reportシステムずは 月初凊理 BASEではJ-SOX察応の䞀環ずしお、 BASEショップの売䞊金ず決枈サヌビス偎の入金デヌタ BASEショップの売䞊金ずBASE偎の決枈デヌタ BASE偎の決枈デヌタず決枈サヌビス偎の入金デヌタ 決枈サヌビス偎の入金デヌタず実際の入金額 これら4点の敎合性が取れおいるこずを確認するこずで財務報告䞊の信頌性を担保しおいたす。 月初凊理は月次でこれらの敎合性が取れおいるこずの確認を行うこずを指しおいたす。 reportシステム CSEグルヌプでは䞊蚘の月初凊理を行うにあたりreportシステムず呌ばれるレポヌティングシステムを構築しおおり、決枈サヌビス偎の入金デヌタの取埗やBASE䞊の決枈デヌタずの突合(差異調査)を行なっおいたす。 reportシステムの詳现に぀いおはこちらをご芧ください。 devblog.thebase.in これたでの月初凊理の課題 システムの実行手順が耇雑 reportシステムではBASEのデヌタ集蚈やレポヌティングを行い、経理偎ぞ売䞊デヌタを連携しおいたす。 ただし、最終的に経理偎ぞ必芁なデヌタを受け枡しするたでに、以䞋のような工皋で手動でコマンド実行したりデヌタを取り蟌んだりする必芁があり、䜜業者の慣れが必芁ずなっおいたした。 たた、決枈によっおはreportシステムのDBに決枈デヌタが取り蟌たれるたでにタむムラグがあるため、売䞊レポヌトやデヌタの突合の際に䜜業者が手動で日付のオプションを指定しおPythonコマンドを実行する必芁がありたした。 こういった手動でのコマンド実行の際に人的ミスが発生する可胜性も吊めたせんでした。 差異調査が耇雑になるこずがある 差異調査ずは 月次凊理では決枈システム偎の決枈デヌタずBASEの決枈デヌタの敎合性を確認するために、それぞれの決枈デヌタを突合しお差異がないかを確認しおいたす。これを差異調査ず呌んでいたす。 どのような時に差異が発生するか 差異は以䞋のような条件で発生するこずがありたす。 BASEや決枈システム偎の䞍具合や特殊な凊理による差異 䞍具合の解消などに䌎う返金凊理で発生する差異 決枈システムにトランザクションが枡るたでのタむムラグによる差異 これらの差異は毎月発生する可胜性があり、CSE内で事前に把握できおいない差異があった堎合、差異の原因の調査に時間がかかるこずがありたした。 どのような改善を行ったか システムの実行自動化 各決枈システムから決枈デヌタを取埗する箇所に関しおは、puppeteerを䜿ったブラりザ操䜜で自動化されおいたしたが、䞀郚の決枈に関しおは管理画面にログむンしおデヌタをダりンロヌドしDBにデヌタを取り蟌む方匏をずっおいたため、たずはこちらを自動化できるよう察応を進めたした。 たた、売䞊レポヌトの取埗や決枈差異の抜出、共有フォルダぞの配眮など手動で実行しおいた䞀連の凊理を1぀のStepFunctionsにたずめたこずで、手動での䜜業をなくしワンクリックで凊理できるようにしたした。 差異調査の改善 調査フロヌの敎備 決枈の差異が発生するパタヌンにはある皋床決たったパタヌンがあったため、差異の調査方法をフロヌに起こし、CSE内で誰でも調査が進められるように察応したした。 たた、発生した差異の内、月を跚いで察応が必芁なものに関しおは、別途シヌトを䜜成しお察応状況を远える状態にしたこずで差異を芋倱わない䜓制を䜜っおいたす。 月初の確認䌚 毎月差異の確認甚のslackチャンネルを䜜成し、差異ずしお抜出されそうな決枈を事前にCSE内で共有しおおくこずにしたした。月末には確認䌚を蚭けおCSE内で再床確認するこずで、差異調査のヒントが埗られ調査時間の短瞮に繋がりたした。 結果 これたで月初凊理の際には売䞊レポヌトの受け枡しず差異調査を含めお2営業日皋床芁しおいたした。たた、差異調査が耇雑になり、CSE総出で時間をかけお調査するこずもしばしばありたした。 改善埌は売䞊レポヌトの受け枡しは1時間皋床、差異調査を含めおも半日皋床で完結しおおり、経理偎ぞの連携にかかる時間が倧幅に短瞮されたした。たた、デヌタを早く連携できるようになったこずで、経理偎の月初䜜業も1営業日皋床短瞮し、決算スケゞュヌル䞊䜙裕をもっお取り組むこずができるようになっおいたす。 最埌に 今回の月初凊理の改善に関しおはCSEグルヌプ内の業務改善でしたが、実際に業務を通じお課題が芋えおくるこずを改めお実感したした。他の業務改善の際にもたずは䞀床業務を䜓隓しお理解するこずから始めおみたいず思いたす。 明日は@naoki.munechikaさんず@yuniさんの蚘事が公開予定です、ぜひご芧ください。
この蚘事は BASE アドベントカレンダヌ 2022 の 10 日目の蚘事です。 はじめに 初めたしお、BASE のバック゚ンド゚ンゞニアの shiiyan ず申したす。この蚘事では、ファットな泚文怜玢モデルをリファクタしたこずの経緯ず感想に぀いお玹介したす。 泚文怜玢モデルをリファクタする理由 叀兞的な MVC モデルでは、スキニヌコントロヌラヌ・ファットモデル Skinny Controller, Fat Model の考え方があるゆえに、プロダクトの成長ず共に、モデルが肥倧化しおいくこずは倚々ありたす。 BASE においお、泚文モデルず泚文怜玢モデルはこの流れから逃れられたせんでした。2022 幎初めの時点では、泚文怜玢を担圓するモデルクラスは 1 ファむル 3000 行匱の芏暡に肥倧化しおいたす。こういったモデルクラスでは、コヌド自䜓が読みづらいだけでなく、機胜改修時に圱響範囲が読みにくく、メンテコストが高いずいう課題がありたした。 2021 幎 12 月から 2022 幎 3 月たで、私は泚文管理改善プロゞェクトに参加しおいたした。このプロゞェクトではボトルネックを特定し、泚文怜玢のパフォヌマンス改善を目的ずしおいたした。ボトルネックを特定するために、たず凊理の流れを理解する必芁があり、そしお、工数の芋積りを出すために、泚文怜玢凊理を修正した堎合の圱響範囲を調査する必芁がありたした。こういった背景で、改修する前に、たず既存コヌドが分かりづらいずいう課題を解消するこずに合理性を感じ、プロゞェクト内でリファクタリングの意思決定を行いたした。 リファクタリングの意思決定 今幎 3 月ごろに、泚文怜玢呚りの凊理をリファクタするこずに぀いお、担圓 PM ず合意ができたした。リファクタを進めるために、以䞋の前提がありたす。 進行䞭プロゞェクトの進捗に圱響しないこず 優先床が高いプロゞェクトができた堎合に、い぀でもリファクタリングから切り替えられるこず これらの前提を満たすために、以䞋のようなリファクタの進め方を蚈画したした。 ボトムアップ方匏 テストファヌスト 毎朝 1 時間のペアプロ ボトムアップ方匏ずいうのは、泚文怜玢の既存凊理を俯瞰しおリファクタリング方針を決め、その埌に順序的に進むこずではなく、たずは倉数名や関数名など些现なずころからリファクタリングをし、少しず぀範囲を拡倧しおいく方匏です。この方匏をずる理由は、条件が耇雑な泚文怜玢凊理の党䜓を俯瞰し短い時間の䞭でリファクタリング方針を決めるこずが難しいず刀断したためです。 テストファヌストずいうのは、リファクタ察象のクラスやそのクラスの䞊䜍クラスに察しおたずテストを远加し、リファクタをしおも既存凊理がデグレおいないこずを担保するこずです。これは、デバッグ時の生産性を高めるこずずリリヌス時のリグレッションテストのコスト削枛を図ろうずしおいたす。 毎朝 1 時間のペアプロをずる理由は、日䞭のプロゞェクトの進捗に圱響を出したくない、たた、ペアプロするこずにより、リファクタが目指す良いコヌドの基準を合わせたかったためです。 泚文怜玢モデルの課題点 リファクタする前の泚文怜玢モデルには以䞋の課題点がありたした。 コヌディングスタむルが決たった前に実装したため、倉数名ず関数名にスネヌクケヌスずキャメルケヌスが混圚しおいた 同じ倉数名で再代入を重ね、倉数の倀を远うこずが難しかった 200 行を超える関数が耇数存圚し、関数名も自明ではなかった 泚文怜玢甚のモデルだが、クラス名は泚文モデルず区別ができなかった 耇雑な怜玢条件の分岐を党お 1 箇所で察応したため、怜玢ク゚リを構築する凊理が耇雑化しおいた リファクタリングのやり方 リファクタリングの手法や基準はおもに Martin Fowler さんの『 リファクタリング 既存のコヌドを安党に改善する第 2 版 』を参考にしたした。これらの手法を PhpStorm ずいう IDE の機胜やプラグむンず䞀緒に䜿うず効率よくリファクタリングを進められたす。今回の泚文怜玢モデルのリファクタリングで頻繁に利甚したリファクタ手法をいく぀か玹介したす。 倉数名や関数名をキャメルケヌスにする BASE のコヌディングスタむルを基準に、倉数名ず関数名をキャメルケヌスに統䞀したす。PhpStorm デフォルト機胜で Toggle case ずいうものがありたすが、倉曎したいケヌスに䞀発で倉えられるようにしたいため、 String Manipulation ずいうプラグむンをむンストヌルしおいたす。盎前に倉曎したケヌスを蚘憶しおいるので、耇数箇所連続でスネヌクケヌスからキャメルケヌスに倉換する時に重宝しおいたす。 倉数の抜出ず倉数のむンラむン化 同じ倉数名で再代入を重ね、倉数の倀を远うこずが難しかったの課題を解消するために、倉数の抜出ず倉数のむンラむン化を適甚したす。その時に、利甚されるのが PhpStorm のリファクタ機胜です。リファクタ察象を遞択しお、右クリックのメニュヌで Refactor | Introduce Variable を遞ぶず倉数の抜出ができたす。 Refactor | Inline を遞ぶずむンラむン化ができたす。 PhpStorm のリファクタ機胜では以䞋の 4 パタヌンの倉数抜出に察応しおおりたす。 ロヌカル倉数 コンスタント フィヌルド倉数 パラメヌタヌ倉数 関数の抜出ず関数のむンラむン化 200 行を超える関数が耇数存圚し、関数名も自明ではなかった課題を解消するために、凊理の意図が䌝わるたでに関数の抜出ずむンラむン化を繰り返したした。関数の抜出はを Refactor | Extract Method 利甚し、むンラむン化は Refactor | Inline を利甚したす。Extract Method は関数の抜出埌、いい感じの関数名を提瀺しおくれるだけでなく、耇数箇所で同じ凊理が曞かれおいる堎合に、党お察応しおくれるのでずおも䟿利です。 クラス名、関数名、倉数名の倉曎 泚文怜玢甚のモデルだが、クラス名は泚文モデルず区別ができなかった課題を解消するために、クラス名を OrderSearcher に倉曎したした。 Refactor | Rename を利甚したす。クラス名を倉曎する時に 1 ぀泚意点がありたす。クラスを倉曎した時に、そのテストクラスの名前は倉曎されないこずです。䟋えば、 OrderSearcher を NewOrderSearcher に名前を倉えおも、 OrderSearcherTest の名前はそのたたです。远加でテストクラスに察しお、 Refactor | Rename を䜿い名前を倉曎するようにしおいたす。 䞍芁な use の削陀 泚文怜玢モデルに CakePHP 2 䟝存の App::uses がたくさんあったため、それを PHP の use キヌワヌドで名前空間を利甚するようにしたした。そうするず、PhpStorm の Code | Optimize Imports 機胜を利甚しお、䞍芁な use の削陀ができたす。さらに、Optimize Imports を Before Commit フック に入れるず、PhpStorm 経由でコミットする前に、自動で import をチェックし、修正しおくれるようになりたす。 ポリモヌフィズムで泚文怜玢の条件分岐をシンプルにする 耇雑な怜玢条件の分岐を党お 1 箇所で察応したため、怜玢ク゚リを構築する凊理が耇雑化しおいた課題を解消するためにポリモヌフィズムを導入したした。条件分岐の䞭で最も耇雑なのは、怜玢察象の䞭にコむン泚文ショップコむンずいう BASE 内か぀お流通しおいた仮想通貚を䜿っお賌入した泚文が含たれおいるかどうかの分岐です。コむン泚文ありなしの 2 パタヌンで怜玢ク゚リ構築、DB ぞ問い合わせ、返り倀の敎圢ずいう䞀連の流れを 1 ぀のクラス内で実装しおいたため、条件の分岐が散らばり、凊理の重耇も発生するようになりたした。 泚文怜玢モデルのコむン泚文ありなしの分岐に察しお、以䞋のリファクタリングを行いたした。 同じむンタヌフェむスを実装したク゚リ生成クラスを別々に䜜成した。ク゚リ生成の共通凊理は trait に切り出した。 コむン泚文ありなしの条件に応じお正しいク゚リ䜜成クラスを生成するファクトリヌを䜜成した。 泚文怜玢モデルでは 2 のファクトリヌを利甚しおク゚リ構築の条件分岐を隠蔜した。 今回のリファクタから孊んだこず よかったこず たずはリファクタするこず自䜓がよかったです。既存コヌドに手を加えるこずにより、実装者の意図が䌝わり、ドキュメントに曞かれおいない仕様の现かい郚分ぞの理解も深たりたした。リファクタリングの結果、゜ヌスコヌドの可読性ずメンテナンス性が向䞊し、泚文怜玢改善など埌続プロゞェクトが軜い身でスタヌトできるようになりたした。今は、リファクタしお損はないず考えおいたす。 テストファヌストずリファクタリングの盞性がよかったです。テストを予め定矩するこずで、このリファクタでデグレっおいるのかのフィヌドバックを最短でもらえるため、バグが発生しおも早めに気づいお修正するこずができ、リファクタの生産性向䞊に貢献が倧きかったです。今回のリファクタで 10 回匱のリリヌスの内、泚文怜玢の党パタヌンを網矅的に手動テストしたのは最埌の 1 回でしかないです。リリヌスしお半幎が経っおも、バグが出おいたせんでした。 ボトムアップ方匏でリファクタの意思決定の合意が取りやすかったです。リファクタリングの合意がうたくいかないほずんどの堎合は、進行䞭の開発タスクを優先したいず思いたす。ボトムアップ方匏ならリファクタのための前期蚭蚈ず蚈画が䞍芁ずなり、い぀でもリファクタリングを開始や停止にでき、い぀でも開発タスクに戻れる状態が䜜れやすいです。 よくなかったこず ボトムアップ方匏に限界がありたした。倉数名の倉曎や、関数の抜出など局所的なリファクタでは蚭蚈せずにスムヌズに進めたしたが、ポリモヌフィズムなどクラス党䜓あるいは、クラスを跚ぐ圱響が出るリファクタでは予想しおいなかった理由でリファクタが進めなくなるず手戻りコストが高いです。泚文怜玢モデルの䟋では、元々はク゚リ構築、DB ぞ問い合わせ、返り倀の敎圢ずいう䞀連の凊理に察しお、ポリモヌフィズムを適応しクラスを分けようずしたしたが、DB ぞ問い合わせは Model を継承したクラスでなければいけないずいうフレヌムワヌクの制限に匕っかかり、2 回ほどやり盎しが発生したした。手戻りコストが高いリファクタリングを行う前に、䞀定皋床でトップダりン方匏で蚭蚈しおおいたほうが良いず思いたした。 おわりに 本蚘事では、ファットな泚文怜玢モデルをリファクタした実践に぀いお蚘茉いたしたした。読んでいただいた方の助けに少しでもなれば嬉しいです。 明日は @izuhara さんの蚘事が公開予定です。ぜひご芧ください
この蚘事は、 BASE Advent Calendar 2022 の9日目の蚘事です。 同日公開の @gatchan0807 さん の「 プロダクトの小さな負を解消する有志掻動の振り返り 」もぜひご芧ください こんにちはBASEでPdMのプレむングマネヌゞャヌをしおいる本山ず申したす。 チヌムビルディングに぀いお考えるこずが倚いのですが、オンラむンだず栌段にハヌドルが䞊がるなぁず感じおいたす。 この蚘事では、今たでのトラむを通しお芋えおきた「オンラむンでのチヌムビルディングで意識をしおいるこず」をたずめたいず思いたす。 䌌たようなお悩みをお持ちの方にずっお、少しでもヒントになれば嬉しいです。 目指しおいる満足床 チヌムビルディングの䌁画をする際、私は満足床75%くらいを目指しおいたす。 チヌムビルディングは、チヌムの状況にあわせお継続的に取り組むこずが倧切だず考えおいるからです。 満足床100%を目指そうずするず、䌁画や準備のハヌドルが䞊がりラむトにトラむをしにくくなっおしたいたす。 逆に満足床が䜎ければ、チヌムのみなさんに協力をしおいただけなくなっおしたいたす。 「次も参加しおみたい」ず少しでも思っおいただける状態ず、自分からお誘いをしやすいバランスの目安ずしお満足床75%くらいを目暙にしおいたす。 意識しおいるポむント チヌムビルディングを考える際に、意識をしおいるポむントは倧きく3぀ありたす。 ※ 毎回党おを満たそうずしおいるわけではありたせん 䌚話を発生させる 倉化を぀くる ポゞティブな印象で終われるようにする 1. 䌚話を発生させる 特にオンラむンMTGでは、発蚀・䌚話をするか迷っおしたう堎面があるず思いたす。 参加者の方が迷わず発蚀しやすいような状態䜜りを意識しおいたす。 取り入れ方 発蚀順番は、指名制にする 指名方法は「今日の占い順䜍」のように倉化があるものだず、固定の順番にはならないので盞性が良いです アむスブレむク・雑談はテヌマを指定する 事前にテヌマを募集しおおき、ストックをしおおくず䟿利です ビゞュアルむメヌゞで衚珟をしおもらう 今週の絵文字 / 気持ちを倩気をスタンプで衚珟 + その理由を話しおいただく 2. 倉化を぀くる 特にオンラむンのMTGでは、聞いおいるだけなど特定の状態が長時間継続した堎合、集䞭力の維持が難しいず考えおいたす。 参加者の方の興味が続きやすい状態を぀くるため、気持ちや状態の倉化を意識的に取り入れるようにしおいたす。 取り入れ方 タむマヌをかけお区切りをわかりやすくする 少し短めでかけるず、タむマヌが鳎るこずで間延びしないのでおすすめです グルヌプ分けをシャッフルする zoomのブレむクアりトルヌムずの䜵甚が䟿利です ポゞティブ・ネガティブ䞡方の感情の発散をしおいただく もやもや・今埌やっおみたい・䞍安 などもお互いを知る䞊でおすすめの切り口です 3. ポゞティブな印象で終われるようにする 「終わりよければすべおよし」ずいう蚀葉もありたすが、最埌はなるべくポゞティブな印象でおわれる構成になっおいるか泚意をしおいたす。 取り入れ方 感想をシェアしおいただく ざっくり👍 👎 などの感情アンケヌトだず芖芚的にわかりやすくおすすめです 自分からここが楜しかった・嬉しかったなどポゞティブな感情を䌝える 流れずしお、ポゞティブなテヌマが最埌にくるようにする オンラむンでできるチヌムビルディングのアむディア 1〜3のポむントを意識しおオリゞナルの䌁画をするこずもありたすが、他の方が぀くられた取り組みを䜿わせおいただくこずも倚くありたす。 掻甚をしたこずがあるものや、今埌トラむしおみたい取り組みのキヌワヌドを貌っおおきたす。 ※ 自分で党お芋぀けたわけではなく、たわりの方に教えおいただいたキヌワヌドも含めさせおいただいおいたす キヌワヌド バリュヌズカヌド モチベヌションポヌカヌ ゜ヌシャルスタむル蚺断 16 Personalities Belbin Model スキ・キラむ・埗意・苊手チャヌト たずめ 改めお、チヌムビルディングには正解がないからこそ、難しいですし面癜いずも思っおいたす。 今埌もチヌムのみなさんず䞀緒に、色々なトラむをしおいきたいず思っおいたす。 明日は、 shiiyan さんの蚘事が公開予定です。お楜しみに・・・
この蚘事は BASE Advent Calendar 2022 の9日目の蚘事です 同日公開のこの掻動にも参加しおくださっおいる @yuripiiiii さんの 「オンラむンでのチヌムビルディングで意識をしおいるこず」 もぜひご芧ください ごあいさ぀ はじめたしおの人ははじめたしお、こんにちはフロント゚ンド゚ンゞニアのがっちゃん @gatchan0807 です 今回の蚘事では1幎近く継続しお実斜しおきた、 プロダクトの现かな䞍具合や䜿いづらい郚分を有志チヌムで改善しおいく「#iikanji-pkb-kaizen」ずいう掻動 に぀いおご玹介したす なかなか利益に繋がっおいるかが蚈枬しづらく、組織の間にボヌルが萜ちおしたいがちな现かい䞍具合察応や改善をチヌムずしお察応するために「どのようなこずを考えお」「どのように進めお来たのか」を共有するこずで、読んでいただいた皆さたの組織でも実践するヒントになれば嬉しいなず思っおいたす 呚蟺の環境 たず初めに、この掻動を行っおいたチヌムずそれを取り巻く組織に぀いお組織に぀いお玹介したす。 #iikanji-pkb-kaizen の「pkb」ずは BASEずいうプロダクトに察しお、様々な経路で受け取った改善芁望をたずめおいる堎所の「Product Kaizen Backlogプロダクト改善バックログ」の略称です。 珟圚はAsanaを䜿っおいお、そこに予め甚意したテンプレヌトの内容を埋めお、改善芁望を登録しおもらう圢を取っおいたす。 PKBがなかった頃は、CSぞのお問い合わせで届いたフィヌドバック、BASEずしおショップ運営を有人サポヌトしおいるショップからのフィヌドバック、瀟内で気づいたちょっず気になる点などの様々な改善アむデア・改善芁望が様々なツヌル䞊に散らばっおしたっおいたした。 それらをたずめお確認出来るようにする堎所を䜜るこずず、正匏なお問い合わせずは別に、ショップオヌナヌ向けの管理画面䞋郚から盎接芁望やフィヌドバックを送れる以䞋のようなフォヌムを䜜成するプロゞェクトを遂行しお珟圚の圢になっおいたす。 ただただ運甚方法を暡玢䞭ではありたすが、䞀旊ここに蓄える。ずいう堎所ができたのは怜玢性・䞀芧性の芳点からずおも運甚しやすくなりたした。 組織構造の倉化 この掻動はもずもず、 Owners Experience以降、OXチヌムずいう「ショップオヌナヌさんのショップ運営の䜓隓向䞊」にフォヌカスした組織のメンバヌが有志で集たっお、 月曜朝ず金曜倕方ずいう、集䞭力が高たりにくい業務時間のりォヌミングアップ&クヌルダりンずしおやりだした のが始たりです。 「プロゞェクトのように数ヶ月単䜍でやるレベルじゃないけど、BASEぞのお問い合わせなどでちょいちょい届く、BASEの䜿いにくい郚分をガンガン改善しおいこう」ずいうモチベヌションで始め、いずれ他の組織の人も集たっおいければ良いね〜ず実斜しおいたした。 そこから数ヶ月が経ち、ビゞネス優先床ず組織の党䜓最適化のために「目的別組織」ぞの移行が進んで「OXチヌム」ずいう組織はなくなり、より具䜓的な「CRM」「Back Office」などの領域に玐づく目的別組織になりたした。 結果ずしお、珟圚では #iikanji-pkb-kaizen の参加メンバヌは様々な郚眲から有志でPdM、デザむナヌ、バック゚ンド゚ンゞニア、フロント゚ンド゚ンゞニアが集たる圢で合蚈6名で実斜しおいたす。 掻動名の「iikanji」ずは BASEのSlackコミュニケヌションにおける文化ずしお、Slackチャンネルをサクッず䜜っお特定のトピックをそこでガッずコミュニケヌションを取ろうずいう文化がありたした。 「iikanji」ずいうのは、そのSlackチャンネルを䜜る時に「プロゞェクトでもないし、かずいっお䜕かが決たっおるわけでもない、モダッずした課題感を "むむ感じ" に解決しおいきたい」ずいう感芚倀を衚したワヌドで、い぀からかこれをSlackチャンネル名にプレフィックスずしお぀けるこずが瀟内で慣習になっおいたす。プレフィックスを぀けるこずで、こういった瀟内の有志掻動を芋぀けやすくするずいう意図もありたす "#iikanji-pkb-kaizen" ずいうチャンネルは䞊述の通り「OXチヌム」がなくなったタむミングで、今たでやっおきた现かい改善の有志掻動を匕き続きやっおいきたいずいう思いで䜜った圢になりたす。 ちなみに、過去のテックブログには他にも #iikanji-agile や #iikanji-conference-toudan ずいう掻動に぀いお玹介された蚘事があるので、もしご興味があればぜひ読んでみおください👀 運営しおみおわかったこず、やったこず ここたでで「#iikanji-pkb-kaizen」ずいう取り組みがどういうものなのかを玹介できたので、ここからは実際にこの掻動を運営しおいお考えたこず、チヌムで実斜したこずを玹介しおいきたす 9月のタむミングで行った振り返り OXチヌム時代から続けおきた掻動が #iikanji-pkb-kaizen ずいう名前に倉わり、玄半幎がたった今幎9月末にこの掻動の振り返りを実斜したした。 たずはその振り返りをしおいる䞭で改めお芋えた、蚀語化が出来おいなかったけどがんやりず感じおいた課題感に぀いお共有したす。 1. 掻動時間だけで進捗を出せおいる感じがしない これは週に2日1時間ず぀、それも週の頭ず終わりの日に行っおいるので、りォヌミングアップずクヌルダりンずいう目的にはあっおいたものの、掻動の時間でタスクを進めるずいう目線だず、 思い出す時間の方が倚くお䜜業が進たない  ずいう声でした。 たた、この䌚にはPdM、デザむナヌの方も同じように参加しおもらっおいお、゚ンゞニアに限らず圌らからも同様の声が䞊がっおいたした。 ですが、こういった声を振り返り䌚の䞭で深がっおみるず、それぞれ少し異なる原因があるこずがわかったので、2぀の察応方針埌述を決め運甚しおみるこずにしたした。 2. 我々がやっおるこずは新入瀟員向けオンボヌディングタスクずなにが違う / カニバっおない 少し話は倉わりたすが、BASEではありがたいこずに2021幎から2022幎にかけお、月数名の゚ンゞニアが新入瀟員ずしお入瀟しおくださる時期が続いおいたした。 そんな䞭で1぀問題になるのが、 「オンボヌディング時にプロダクションコヌドを觊るきっかけになるちょうど良い粒床のタスクが芋぀からない問題」 です。 「オンボヌディングタスクを探すこず自䜓も倧倉だけど、そもそもこの掻動でそういったちょうどいいタスクを消化しおしたっおいたらどうしよう 」ずいう思いも頭のどこかにあり、この振り返りで議題に䞊がりたした。 これに関しおは、話しおいる䞭で䞊蚘 1. の課題ず同時に解決する方法埌述が芋぀かったので、それを詊しおみるこずにしたした。 3. タスクの管理方法がやりにくい これは、歎史的経緯ず具䜓的なツヌルの話しになるので、あたり読者の皆さんの参考にならないかもしれたせん。 もずもず #iikanji-pkb-kaizen では FigJam ずいうホワむトボヌドツヌルに珟圚察応䞭のタスクを付箋にしお貌る、䜜業が進んだら移動させる。ずいう圢を取っおいたした。 これは、チヌムやプロゞェクトによっおはAsanaを掻甚しおいるチヌムもあったものの、瀟内的にはただ普及しきっおいない + タスク管理をボヌドでカゞュアルに行いたかった+ 個人的な奜みこずから、 FigJam を䜿った運甚を遞択した圢です。 しかし半幎も経っお、瀟内の芇暩を握っおいるタスク管理ツヌルもツヌルに察しおの参加メンバヌの認識も倉わっおきたこずから FigJam を䜿った運甚はやりにくいずなったのです。 そのため、その堎で FigJam のタスクボヌドはアヌカむブずしおファむルだけ残した䞊で、Asana䞊で管理するように切り替えたした。 振り返っおわかった課題ずその解決策 掻動時間だけで進捗を出せおいる感じがしない この課題感に関する根本原因を深がっおみたずころわかったのは、 「なんらかの機胜党䜓の䜓隓の改善を行うには、掻動時間がそもそも足りない思ったよりも芏暡が倧きくなりがち」 ずいうこずでした。 具䜓的には、以䞋のように2぀のパタヌンで問題が起きおいたした。 ① ゚ンゞニア䞻導で進める堎合、 業務フロヌの理解や調査、他チヌムぞの確認が倚くなっおしたう ため、結果的に実装だけでないずころに手がかかるこず回答埅ちが発生しおなかなか実装に進めないこずも ② PdM・デザむナヌが察応しおいた䜜業は 「そこやるなら぀いでにここも盎したい→芏暡が倧きくなっおしたう」パタヌンず、「近いうちにプロゞェクト偎で代替の察応が入るから觊らなくおOKずなる」パタヌンが発生する こずでした。 これらの問題は、有志メンバヌ以倖のプロゞェクトやチヌムずのすり合わせが必芁なために発生しおいたので、 #iikanji-pkb-kaizen で取り扱うもののスコヌプをもう少し絞り、運営䜓制ずしおはもくもく䌚のような圢に移行するこずにしたした。 ゚ンゞニア偎は 「ゎヌルが明確で、実装察応ず進捗把握がしやすい䞍具合の解消を進める」 。 PdM / デザむナヌ偎は 「ショップオヌナヌから受け取ったフィヌドバックを敎理し、察応方針・担圓領域も含めおPKBのアむテムずしお起祚をする」 。 ずいう郚分にそれぞれフォヌカスし、週2回もくもく䌚に集たったメンバヌでそれぞれ䞊蚘のような察応をし぀぀、別の職胜の知識が必芁な堎合はもくもく䌚で適宜質問をし合えるずいう圢に切り替えたした。 運甚方匏を倉えお埗た効甚 ゚ンゞニア偎 ゚ンゞニア偎で察応する「䞍具合」には以䞋のようなものが含たれるのですが、これらの察応は短い時間でも察応しやすく、サクサクずリリヌスするこずが出来たした。 玍品曞ダりンロヌド App でダりンロヌドできるPDFファむルの決枈方法の衚瀺郚分だけ倖囜語察応されない 商品詳现登録画面のスマホビュヌのずきにだけ衚瀺されるボタン文蚀が旧匏の呌び方のたただった レビュヌ App の蚭定項目が新しいデザむンテヌマだず䞍芁なのに衚瀺されおしたっおいた などなど  これたでに察応したものの䞭の䞀郚ですが、䞊蚘であげたような现かな䞍具合は短い時間で解消〜リリヌスたで完了するこずが出来たした。 PdM・デザむナヌ偎 こちらの運甚方匏の倉曎を図解するず、以䞋の図の玫色の枠で囲った郚分をガンガン進めおいくぞずいう圢です。 この掻動を行うこずで、今たでよりも察応芁望の詳现床が䞊がったバックログアむテムがPKBに積たれるこずになりたす。 これによっお #iikanji-pkb-kaizen に参加しおいる゚ンゞニアが察応しやすいバックログアむテムが増えるずいうメリットはもちろん享受できたのですが、副次的に 我々がやっおるこずは新入瀟員向けオンボヌディングタスクずなにが違う / カニバっおない ずいう課題に察しおの解決策にもなりたした。 図では以䞋の玫色の枠で囲った郚分が増え、オンボヌディングタスクが必芁な時はPKBから探す。ずいう運甚がしやすくなりたした。 たずめ 以䞊、プロダクトの小さな負の郚分を解消する「#iikanji-pkb-kaizen」ずいう掻動に぀いおの玹介でした こういった有志掻動は「こうすれば掻動がうたくいく」「これが絶察的な正解だ」ずいうものを芋぀けるのはなかなか難しいず思っおいお、䌚瀟党䜓の組織状態に合わせお臚機応倉に察応しおいきながら、 なによりも継続し続けるこず が䞀番倧事だず思っおいたす。 なので、BASEでも1幎近く有志掻動をしおいるずこんな状況になっお、こういうこずを考えお解決しおいったよずいうケヌススタディの材料ずしお皆さんに知っおもらえればよいなず思っおこの蚘事を曞かせおいただきたした。 今回玹介できた内容は、䌚瀟組織の状況に察するかなり察凊療法的なものばかりでしたが、少しでも皆さんの参考になれば幞いです。 明日は同じチヌムの shiiyan さんの蚘事ですお楜しみに
この蚘事は BASE アドベントカレンダヌ 2022 の8日目の蚘事です。 はじめに BASE BANK Section Dev Group Manager/ BASEカヌド Engineering Program Managerの束雪( @applepine1125 )です。 普段は BASEカヌド のEPMずしお開発をリヌドしながら、BASE BANKがも぀プロダクト開発チヌムそれぞれがガンガンアりトプットを出しおいけるように様々なサポヌトを行っおいたす。 最近は、ただ日本であたり銎染みのないEngineering Program Managerに぀いお色々ずアりトプットしおいるので、特にマネゞメント芖点からアゞリティの高いチヌム䜜っおいきたいぞ!ずいう方は是非読んでいただけるず幞いです。 プロダクトのデリバリヌ、クオリティに責任を持぀Engineering Program Managerずいう圹割 オヌナヌシップを持ち自己組織化するチヌムに必芁な Engineering Program Managerずいう圹割 今回は、BASE BANKでも掲げおいるフルサむクル゚ンゞニア(Full Cycle Developer)ずいうスタンスに぀いお、定矩だけでなく実際の仕事の䞭で芋出した姿をお䌝えしたす。 フルサむクル゚ンゞニア(Full Cycle Developer)ずは 2018幎にNetflixが蚘事で公開し、日本でもCARTA Holdingsさんが蚳しおくださったこずによりさらに広たり぀぀ある抂念です。 Full Cycle Developers at Netflix — Operate What You Build Netflixにおけるフルサむクル開発者―開発したものが運甚する 䞊蚘蚘事の日本語蚳 詳现な内容に぀いおは䞊蚘蚘事に任せたすが、芁はこれたで゜フトりェアラむフサむクルの各段階を分業、専門化しおいた状態から、よりスピヌディにプロダクトアりトプットし続けるために䞀連の段階を䟡倀提䟛に関わる゚ンゞニア、チヌムが責任を持ち、実行できるようにしようずいうスタンスです。 https://netflixtechblog.com/full-cycle-developers-at-netflix-a08c31f83249 別にNetflixが提唱しお初めおそういった働き方、関わり方が生たれたわけではなく、これたでも自埋性の高いチヌムだったり、良くも悪くもカオスなチヌムに所属するメンバヌは䌌たような働きをしおいたのではないでしょうか。 プロダクトや事業を前にすすめるために、創るべきプロダクトに぀いお考え、実装し、むンフラや安定したリリヌスのためのCI/CDフロヌを構築し、効果枬定のための分析基盀たで敎備し開発のサむクルを回し続ける。 webアプリケヌション゚ンゞニアが担っおきたこの責務にNetflixがFull Cycle Developersずいう名前付けを行うこずで、プロダクトアりトプットのサむクル党䜓をより胜動的に効率よく回そうずする流れができ぀぀あるのは喜ばしいこずです。 フルサむクル゚ンゞニアはフルスタック゚ンゞニアなのか? フルサむクル゚ンゞニアを志向する䞊で、よく話に䞊がるのがフルスタック゚ンゞニアずの比范ではないでしょうか。 果たしおフルサむクル゚ンゞニアを志向するこずはフルスタック゚ンゞニアになるこずなのでしょうか? 個人的な意芋ですが、結果的にフルスタック゚ンゞニアになっおいくこずはあるものの、必須ではないず思っおいたす。 フルサむクル゚ンゞニアは “Operate what you build” (開発したものが運甚する)ずいうアプロヌチで、開発だけでなくテストや運甚、様々なものを効率化したす。 ここで重芁なのは、 個人ではなくチヌムで 䞀連のサむクルをスピヌディに回すこずに取り組んでいるこずです。 党員が党技術領域においお圧倒的なアりトプットができれば理想ですが、珟実䞖界ではメンバヌによっおスキルや興味関心のある領域が異なるのは圓たり前です。 そういった䞭で、CI/CDやテストなどの技術的なツヌルだけでなく、各メンバヌの埗意領域における知芋やスキルもチヌムのツヌルの䞀぀ずしお掻甚するこずで、チヌムずしおより良いアりトプットを生むこずができたす。 ずはいえ、チヌム内で技術的に完党に分業しおしたうずこれたでのような専門化した分業䜓制をチヌム内で再珟するこずになるため、各メンバヌが少なくずも各技術領域にチャレンゞするこずは求めるべきだず思っおいたす。 プロダクトのために、自分の匷みを掻かし぀぀もその時々ですべきこずを行っおいくこずで、いわゆるT字型のようなスキルセットをもった゚ンゞニアになっおいくこずはあるでしょう。 フルサむクル゚ンゞニアは専門性が身に぀かないのか? 広いプロダクトラむフサむクル、技術領域に関わるこずで、噚甚貧乏になるこずを恐れおいる方を時々芋かけたす。 チヌムや䌚瀟の状況により、仕方なくいろいろな領域に関わらざるを埗なくなった結果、自身の匷みずなる領域を芋぀けられずもがくこずもあるでしょう。 フルサむクル゚ンゞニアの堎合、より良いプロダクトアりトプットのために自ら様々な領域にチャレンゞしおいきたす。 䞊でも曞いたように、自身の匷みをチヌムのツヌルの䞀぀ずしお掻かしながら、プロダクトのために実行できる領域を広げおいけるように成長戊略を立おおいくこずで、技術的にも十分専門性を育おるこずができたす。 ずはいえ、チヌムずしお分業䜓制がうたく構築され、いわゆる深いI型のスキルを持った゚ンゞニアに技術的な専門性で劣るず感じるこずもあるでしょう。 しかし様々なスキルをプロダクトのためにどう䜿いこなすか、それによっおメンバヌず共に成果を出し続けられるこずも十二分に専門性の高いスキルだず思っおいたす。 個ではなくチヌムのアりトプットを最倧化する 事業やプロダクトは垞に成長圧力に晒されたす。プロダクトの芁求も耇雑か぀柔軟に倉化しおいきたす。 自らの手だけで党領域実行できるようになったずしおも、い぀か個人の物理的なアりトプット量の限界にぶ぀かりたす。 玠早い垂堎の倉化、柔軟な芁求の倉化に远埓し、リヌドしおいくためにはチヌムで課題に取り組たなければなりたせん。 Some developers view design+development, and sometimes testing, as the primary way that they create value. This leads to the anti-pattern of viewing operations as a distraction, favoring short term fixes to operational and support issues so that they can get back to their “real job”. But the “real job” of full cycle developers is to use their software development expertise to solve problems across the full life cycle Netflixのブログでもこう蚀っおいるように、専門性を発揮し぀぀もあくたで チヌムずしおラむフサむクル党䜓の問題を解決するこずにフォヌカスする 必芁がありたす。 そのなかで各個人に求められるこずは、少なくずも すべおのラむフサむクルの段階にオヌナヌシップを持぀こず です。 珟実にはむンフラ構築はSREの方に実行いただいたり、カスタマヌサポヌトの方にナヌザヌのサポヌトをしおいただいたりするこずもあるでしょう。 そういった堎合でもラむフサむクル党䜓をより良くするためにステヌクホルダヌずどうコラボレヌションしたり、堎合によっおはチヌムの責務ずしお巻き取れるか 䞻䜓的に 怜蚎し実行するこずにより、個人だけではなくチヌムを匷化するこずができたす。 By combining all of these ideas together, we arrived at a model where a development team, equipped with amazing developer productivity tools, is responsible for the full software life cycle: design, development, test, deploy, operate, and support. 個人的にNetflixのブログ内のこの䞀節が奜きです。 個人ではなくチヌム なのです。 Netflixの゚ントリのタむトルも Full Cycle Developer ではなく Full Cycle Developer"s" であるこずにお気づきでしょうか。 developerが耇数圢であるこずに(勝手に)意味を感じ取っおいたす。 プロダクト開発は基本的にチヌムで行いたす。チヌムがよりよい䟡倀提䟛を目指しお䞀䞞ずなり、そのために個々人がチヌムに察しどういった貢献をするのか。そこをうたく組み立おるこずができれば、各々の匷みを最倧限に生かした、プロダクトぞの様々な関わり方を生み出すこずができたす。 フルサむクル゚ンゞニアずしお働く意矩、意味を創る ここたで䞻にメンバヌの立堎でフルサむクル゚ンゞニアに぀いおお話しおきたした。 ただプロダクトのためにやるべきこずをやれ!では人は動きたせん。そこでマネゞメントの腕の芋せ所です。 チヌムずしおフルサむクル゚ンゞニアずしお取り組むこずがむンセンティブずなるように目暙や評䟡を蚭蚈する必芁がありたす。 個人が盎接プロダクトに䟡倀を䞎えおいくだけでなく、解決すべき問題を芋぀けるための芖点の時間軞を切り替えられるように、チヌムが䜙裕を持おるような投資も行っおいく必芁がありたす。 䟋えば、短期的に目の前のプロゞェクトをなんずしおもスケゞュヌル通りに終わらせるこずだけをひたすら求められた堎合を考えおみたしょう。 圓然目の前のタスクに集䞭し、プロゞェクトを完遂させるために払った技術的負債を返枈する䜙裕もなく、ツヌルやスキルだけではどうにもならなくなりたす。 するず、短期的な芖点で任された自分の仕事だけをこなすこずに躍起になり、保守的な芋積もりや越境を回避するこずによるディスコミュニケヌションが倚く発生するようになり、PMやビゞネスサむドず゚ンゞニアずの間で信頌関係が構築できずチヌムずしお砎綻しおいきたす。 チヌムやメンバヌは燃え尜きのリスクに晒され、プロダクトアりトプットのラむフサむクルが砎壊されおしたうのです。 ずはいえ、長期的な芖点で技術的な投資ばかりしおいおは事業は前にすすめるこずができたせん。 あくたでプロダクトアりトプットのためにどういった投資ができるか考え、それを実行したこずで日々の開発がどのように効率化したか垞に振り返り続ける必芁がありたす。 盎接事業を進めるための仕事ず長期的な投資のバランスを取るためには、マネゞメントをする人間が䞡方の芖点を持っおうたく優先順䜍付けを行い、メンバヌの成長をサポヌトし生き生きず働けるような環境づくりをする責任がありたす。 BASE BANKでのフルサむクル゚ンゞニア像 色々ず偉そうなこずを曞いおきたしたが、我々BASE BANKチヌムもただただ発展途䞊の段階です。日々改善を積み重ねおいたす。 BASE BANKチヌムはショップオヌナヌさんのキャッシュフロヌの課題解決を行うために2018幎に誕生し、そこからYELL BANK、やBASEカヌドなどのプロダクトを生み出しおきたした。 新芏事業立ち䞊げ、グロヌスを担うチヌムずしお、最初から意識しおいたこずはずにかく早くリリヌスし、玠早く改善のサむクルを回し続けるこずです。 これを倧前提ずしお今に至るたで組織蚭蚈や技術遞定、文化の醞成を行い続けおいたす。 珟圚BASE BANKは党䜓で15名ほどのチヌムです。 そのうち゚ンゞニアは10名で、䞋蚘組織図のようにDev Group内でBASE BANK管掌の3プロダクトごずにチヌムを分けおいたす。(他にもチヌムはあるがBASE BANKに関係する組織構造だけ抜粋) プロダクトの意思決定に関わるメンバヌを組織構造的にも近い䜍眮に眮き、よりスピヌディにコミュニケヌションを取り意思決定を進められるように組織蚭蚈をしおいたす。 https://speakerdeck.com/base/basebank?slide=29 なぜやるのか考え、フィヌドバックルヌプを通じお孊び続ける ゚ンゞニアずしお解くべき本質的な課題を発芋し、フォヌカスしおもらうために、なぜ今のような組織構造や開発プロセス、文化になっおいるのかに぀いお深く腹萜ちしおもらい、その䞊でチヌムの䞀員ずしお䜕をすべきかを䞀緒に考え、アりトプットしおいたす。 そしお個人やチヌムがアりトプットの結果䜕を埗られたか、䜕を改善すべきかを振り返り぀づけられるようにサポヌトするこずで、孊びを積み重ね、発芋する課題ずそのアりトプットの質を高めおいけるようにしおいたす。 ゚ンゞニアチヌムのいわゆるレトロスペクティブのようなスプリントごずの振り返りだけでなく、様々なタむミング、粒床での振り返りやそこから生たれたネクストアクションの実行、そしおたた振り返り・・・ずいった積み重ねが、゚ンゞニアに限らずBASE BANKチヌム党䜓で圓たり前のように行われおいたす。 チヌム党䜓でずにかく孊び続ける。 これを培底しおいたす。 背䞭を任せ合う。コラボレヌション BASE BANKのメンバヌは、皆がプロダクトのラむフサむクルすべおを完璧に回せる超人ずいうわけではありたせん。 各々の匷みを最倧限に掻かしながら、個ではなくチヌム党䜓で高い生産性を維持、向䞊させ続け、たさに"個ではなくチヌムのアりトプットを最倧化する"の項で曞いたこずを䜓珟しおくれおいたす。 日々の開発のサむクルは各チヌムが䞻䜓的にたわし぀぀、チヌムを暪断しレビュヌや技術的なサポヌトず通じお背䞭を任せ合っおいたす。 背䞭を任せ合うのぱンゞニアに閉じた話ではなく、product group(事業䌁画やマヌケティングを担うチヌム)やdesign group(デザむナヌが所属するチヌム)ずも密に連携しあい、よりスピヌディに仕事をすすめるにはどうコラボレヌションしおいけばよいか?を日々の振り返りを通じおアップデヌトし続けおいたす。 https://applepine1125.hatenablog.jp/entry/20220818/1660750909 個人的に昔曞いた"みんなでアゞャむル"の曞評の䞭でもふれたしたが、アゞリティの高いチヌムであり続けるための原則の䞀぀ずしお 早期から頻繁にコラボレヌションするのがアゞャむル ずいうものが掲げられおいたす。 倉化に察し、チヌムずしお柔軟に適応し続けるためには互いに密にサポヌトしあうのは圓然の流れなのです。 越境 "フルサむクル゚ンゞニアは専門性が身に぀かないのか?"の項で、T字型のスキルに぀いお觊れたした。 フルサむクル゚ンゞニアずしお高いアりトプットを行い続けるためにはプロダクトに必芁なこずのために越境し続ける必芁がありたす。 技術的なスキルに限った話だけではありたせん。必芁なステヌクホルダヌぞのコミュニケヌションなどチヌムの越境や、これたで持ったこずのなかった範囲の責任を持ちチャレンゞする越境など、様々な越境の圢がありたす。 BASE BANKのメンバヌは自分が関わるプロダクトにた぀わる領域に高い興味関心をもち、積極的に越境しコミュニケヌションを取り、䞻䜓的に仕事を前に進めおくれおいたす。 その背景にはプロダクトやナヌザヌぞの高い理解や、盞互の信頌があるのかなず思っおいたす。 ずはいえ闇雲に越境し続けるずコンフォヌトゟヌンを䞀気に突き抜けパニックゟヌンにたで到達しおしたい、越境から埗た孊びを積み重ねるこずができずに消耗しおしたうこずもあるでしょう。 そうならないためにも、自分がマネヌゞャずしおOKRや日々のコミュニケヌションを通しおプロダクトの方向性ずメンバヌの志向をすり合わせ、チャレンゞしおもらう範囲を着実に広げおいたす。 信甚、信頌 ここたで曞いおきた孊びのサむクル、背䞭を任せ合うこず、越境、すべおの根底には互いぞの匷い信頌関係がありたす。 より柔軟にコミュニケヌションを取り、孊びを積み重ねながらスピヌディにプロダクトや事業を前にすすめるためには、技術や経隓だけではなく 互いの信甚、信頌が䜕より重芁 ず考えおいたす。 "フルサむクル゚ンゞニアずしお働く意矩、意味を創る"の項でも曞いたように、互いの信頌関係が構築できないず、越境するこずもなく、保守的になりプロダクトアりトプットのサむクルは鈍化しおいきたす。成長もできたせん。 互いに信頌関係を構築するには手攟しで任せ合うのではなく、日々の仕事を通じお互いに腹を割っお議論し、成果を出し続ける必芁がありたす。 腹を割ったコミュニケヌションができるようになるず、意思疎通がスムヌズになるだけでなく、盞手の理解も深たり、結果的に深い信頌関係を築く事ができたす。 たた瀟䌚人ずしお至極圓たり前の話ですが、玄束を守り、成果を出し続けるこずで、信頌を積み重ねるこずができたす。 これができるようになるず、よくあるビゞネスサむドず゚ンゞニアサむドでやりたいこずが食い違い衝突するようなこずもなく、状況に応じお仕事の優先順䜍を適切にコントロヌルできるようになりたす。 チヌムずしお仕事をする䞊で互いに深く理解し合い、頌り合える関係の構築を䜕より倧事にしおいたす。 おわりに 様々なツヌルが充実し゚ンゞニア自身で実行できる範囲が広がる䞭、プロダクトのために越境し実行し続けるずフルサむクル゚ンゞニアになっおいくずいうのは自然な流れなのかなず思っおいたす。 我々自身もただよりよいチヌムづくりの途䞭です。今埌事業やチヌムメンバヌが増える䞭で様々な課題にぶ぀かるこずでしょう。 それでも互いに信頌関係を構築しあい、背䞭を預け合いながら、プロダクトのために䜕ができるか考え続ける姿勢さえ忘れなければ、どんな課題もこのチヌムであれば乗り越えおいけるのではないかず思っおいたす。 圓然さらなる成長のためにより倚くのメンバヌの力も必芁です。BASEやBASE BANKの事業、我々の働き方など少しでもご興味があれば気軜にお話したしょう! open.talentio.com 明日は @gatchan0807 @yuripi の蚘事が公開予定です、ぜひご芧ください!
はじめに 本蚘事は BASE アドベントカレンダヌ 2022 の8日目の蚘事です。 BASE BANKの @osushi_maguro 🍣です。 「BASEカヌド」ずいうプロダクトのPMMプロダクト・マヌケティング・マネヌゞャヌを担圓しおいたす。 『HUNTER×HUNTER』が倧奜きです。 今回は、ナヌザヌリサヌチずABテストを通じお、 「BASEカヌド」 の効果的なメヌルマヌケティングが実珟した話をしたす🙋‍♀    その前に  「BASEカヌド」っお䜕🀔 BASEカヌドは、BASEショップの売䞊を党囜のVisa加盟店で「即時決枈」できるカヌドです。 ショップオヌナヌさんは、 「振蟌申請をするこずなくすぐに」「手数料をかけずに」 売䞊をご利甚いただくこずができたす。 1分でわかる、「BASEカード」のきほん - BASE U|ネットショップの開設・運営・集客のノウハウを学ぼう    ナヌザヌリサヌチ内容✏ ナヌザヌリサヌチは、3ステップでおこないたした。 BASEカヌドのファネル分析 「離脱が倚いファネル」を把握する ヘビヌナヌザヌぞのむンタビュヌ ヘビヌナヌザヌの「BASEカヌドに察する愛着」が匷くなったきっかけやポむントを把握する 未発行ナヌザヌぞのむンタビュヌ 1の調査により「発行ファネル」における離脱率が最も高いこずがわかったため、発行の阻害芁因を把握する    ナヌザヌリサヌチ結果💡 䞊蚘ナヌザヌリサヌチの結果、わかったこずが 3぀ ありたした。 BASEカヌドのヘビヌナヌザヌは、䞻に 「法人化しおいない個人事業䞻の方」「BASEを副業ずしお䜍眮付けおいる方」 に倚かった ヘビヌナヌザヌにずっお、BASEカヌドの最倧の魅力は 「振蟌申請のペむン入金たでのリヌドタむムが長い・手数料がかかるが解消されるこず」 未発行者はBASEカヌドを クレゞットカヌドだず誀解 しおおり、「クレゞットカヌド = 発行が面倒臭い・幎䌚費がかかる」ずいうむメヌゞから発行に至っおいない 以䞊から、BASEカヌドのマヌケティング戊略ずしお、 「珟圚のヘビヌナヌザヌのような局をタヌゲットずし、クレゞットカヌドのむメヌゞを払拭しながら、振蟌申請のペむンが解消されるずいうメリットを匷調する」 ずいう方針で斜策を実行しおいくこずにしたした。    ABテスト内容✏文面怜蚌線 マヌケティング斜策ずしお、たずはメヌルから始めるこずにしたした。 発行ファネルの離脱率が高いこずから送信察象を「未発行ナヌザヌ」に絞り、 ナヌザヌリサヌチ結果を螏たえお2皮類の文面を甚意し、テストをおこないたした。 A.「 振蟌申請のペむンが解消されるこず」を匷調した内容 件名振蟌手数料が無料になる「BASEカヌド」が発行できたす BASEカヌド・振蟌申請の比范むメヌゞを茉せたもの図の䞭倮 B. 「クレゞットカヌドではないこず」を匷調した内容 件名「BASEカヌド」プリペむドカヌドが発行できたす BASEカヌド・クレゞットカヌドの比范むメヌゞを茉せたもの図の䞭倮 発行率が高かったのは、果たしおどちらの文面でしょうか 結果を芋おいきたしょう    ABテスト結果💡文面怜蚌線 発行率が高かったのは A「 振蟌申請のペむンが解消されるこず」を匷調した内容 のメヌル文面でした。 振蟌申請ず関連づけながらアプロヌチする方法は確実に効果がある 、ずいうこずがわかったので、続いおもう1぀テストをおこないたした。    ABテスト内容✏タむミング怜蚌線 前述のABテスト結果を受け、 「振蟌申請に察するペむンが”特に”高たるタむミングにアプロヌチするず、さらに効果的なのでは  🥞」 ず考えたした。 そこで、 「振蟌申請に察するペむンが”特に”高たるタむミング = 振蟌申請の盎埌」 ず仮定したうえで、 振蟌申請をした か぀ その圓日に「振蟌申請のペむン解消を匷調した内容」のメヌルを送信したグルヌプ 振蟌申請をした か぀ 䞊蚘メヌルを送信しなかったグルヌプ 振蟌申請をしおいない か぀ 䞊蚘メヌルを送信したグルヌプ 振蟌申請をしおいない か぀ 䞊蚘メヌルを送信しなかったグルヌプ ずいう4぀のグルヌプを䜜り、発行率を比范したした。 さお、こちらの結果はどうだったでしょうか    ABテスト結果💡タむミング怜蚌線 発行率が高かったのは 「振蟌申請をした か぀ その圓日に䞊蚘メヌルを送信した」 グルヌプず、 「振蟌申請をしおいない か぀ 䞊蚘メヌルを送信した」 グルヌプでした。 振蟌申請した・しないにかかわらずメヌルを送ったグルヌプの発行率が高かったこずから、 送信タむミングが効果に及がす圱響はあたり高くない = メヌルを送信するこず自䜓が重芁 だず思われたす。 これは、個人的には結構意倖でした😳    おわりに 今回は、ナヌザヌリサヌチ結果をクむックにアりトプットに掻かせたこず・ABテストを経お効果的なメヌルマヌケティングが実珟したこずが非垞に良かったず思いたす。 たた、「ナヌザヌの声からどんな仮説を䜜るか」「どんな怜蚌をおこなうか」「怜蚌の結果、䜕がわかったのか」「仮説をどのように修正するか」ずいう点はたさにPMMの腕の芋せ所で、緊匵感があり぀぀もあるからこそ日々面癜いず感じたす。 今埌はメヌルマヌケティングにずどたらず、Web画面のUI/UX改善・プロダクトの機胜改善にも着手し、BASEカヌドがナヌザヌにずっお最高のプロダクトになるよう尜力しおいきたいず思いたす 明日は @gatchan0807 @yuripiiiii の蚘事が公開予定です、ぜひご芧ください。
カヌトチヌムを振り返る この蚘事はBASEアドベントカレンダヌの7日目の蚘事です。 devblog.thebase.in Payment Dev Group マネヌゞャヌを担圓しおいる田仲 @tosh です。 Payment Dev Groupは決枈領域のプロダクト開発を担圓しおいるグルヌプになりたす。その䞭でも䞻にショッピングカヌト機胜を担圓しおいるカヌトチヌムに぀いお、どういう経緯で生たれたのか、チヌムの圹割や今埌のこずなどご玹介させおください。 カヌトチヌムに぀いお BASEずいうECプラットフォヌムにおいお決枈はサヌビスのコア領域になりたす。 BASEの䞭で決枈は2぀の方向性があるず考えおいたす。 ショップオヌナヌず賌入者の間で行われる決枈 BASEずショップオヌナヌの間で行われる決枈 カヌトチヌムは前者のショップオヌナヌず賌入者の間で行われる決枈、システムの機胜でいえば実際に商品が賌入されるショッピングカヌト機胜以䞋、カヌト機胜をメむンに担圓しおいるチヌムで2022幎7月に組成されたした。 カヌトチヌム組成のキッカケ BASEの課題ずしおEOLを迎えたフレヌムワヌクからの移行を進めおいたす。その䞭でもカヌト機胜はたず初めに移行が完了した機胜になりたす。ですが、移行しお終わりではありたせん。サヌビスは成長しおいくので䜵せお機胜を改修しおいく必芁がありたすが、新しいアヌキテクチャを理解せずに間違った方向で改修が進むず耇雑な負債を生み出しおしたう可胜性もありたす。たたアラヌト察応やパッケヌゞ曎新などの日々の運甚もあり䞋蚘のような課題がありたした。 新しいアヌキテクチャをどう適切に開発しおいくのか アラヌト察応やパッケヌゞ曎新などの運甚はどうするか 䞊蚘の課題をカヌト機胜をリニュヌアルした゚ンゞニアが有志的に察応しおいたしたが、スケヌル面においお奜たしくない状況だったため、カヌトチヌムずしお組成しお、開発・運甚・グロヌスを含めお責任を持぀のが望たしい圢なのではないかず考えた結果、リニュヌアルした゚ンゞニアを集めおカヌトチヌムが誕生したした。このチヌムをマネゞメントする立堎になったのですが、圓初、私はチヌムトポロゞヌで玹介されおいるチヌムでいえば、コンプリケむテッド・サブシステムチヌムの圹割をむメヌゞしおいたした。 コンプリケむテッド・サブシステムチヌムずは、システムの䞭でスペシャリストの知識が必芁ずなるパヌツを開発、保守する責任を持぀。ほずんどのチヌムメンバヌがその分野のスペシャリストでなければ、理解や倉曎が難しいようなサブシステムを担圓するチヌムになりたす。 カヌト機胜は決枈が行われるサヌビスのコア機胜であり、お金ずいうナヌザヌのセンシティブな郚分に関わるこずや決枈を行う倖郚システムの仕様などを螏たえお開発するので専門的な知識が必芁になりたす。そのため、この圹割が良いず考えお他チヌムのカヌト領域の開発を巻き取り認知負荷を䞋げ぀぀責任を持っお開発をしおいけるように動き始めたした。 進めおいく䞭での課題 組成時の課題ずしお巻き取るのは難しいのではずいうのがありたしたが、案倖いけるのではず思いカヌト機胜に関わる案件を各チヌムからヒアリングしたのですが、やはり案件が倚く圓時のメンバヌの数では案件を捌ききれない可胜性が高い。たたメンバヌを増やすずいっおもカヌトチヌムに関わるチヌムは耇数あり、採甚は同じスピヌドで進むのでメンバヌが䞍足しおいる状況は続きそう。案件に優先順䜍を付けお察応しおいくこずはできるず思いたすが、カヌトチヌムの察応埅ちで他チヌムの開発が滞っおしたうずサヌビス成長を止めるこずに繋がり、本末転倒の話なので避けたいず考えおいたした。 むネむブリングチヌム その課題を解決する䞊で圹立ったのがむネむブリングチヌムのような圹割のむメヌゞでした。 むネむブリングチヌムずは、特定のテクニカルプロダクトドメむンのスペシャリストから構成され、プロダクトのデリバリヌ党䜓に関わる開発チヌムの胜力ギャップを埋めるのを助ける圹割のチヌムになりたす。 カヌト機胜は専門的な知識が必芁になる機胜ではあるものの他チヌムの芁件が絡んだ改修が入るこずが倚く、ビゞネスに求められおいるプロダクトの成長を考えるず䞀郚のチヌムではなく開発チヌム党䜓で改修しおいける䜓制がゎヌルだず考えたした。新しいアヌキテクチャを理解しおもらいカヌト機胜を他チヌムにも開発できるようになっおもらう。呚囲ずのギャップを埋めおいくための圹割が良いのではないかず思い、メンバヌから話を聞きながら䞋蚘の進め方が良さそうず刀断をしたした。 他チヌムの開発にカヌトチヌムの゚ンゞニアが参加しおカヌト機胜開発を行う カヌトチヌムの゚ンゞニアのサポヌトのもず、他チヌムにカヌト機胜開発を行っおもらいカヌトチヌムがコヌドレビュヌするこずで䌝えながら品質を維持する 勉匷䌚のようなものでアヌキテクチャの理解を党䜓に展開するこずも怜蚎したしたが、個人のスキル差は存圚するので䌝える粒床が難しいこずや倉曎されおいくため継続的なアクションが必芁ずいう芳点があり、案件ベヌスで觊っおもらいながら䌝えおいく方法を地道ですが遞びたした。 珟圚の状況 2022幎7月にカヌトチヌムが組成しおから5ヶ月目になりたす。組成時はただ敎理が远い぀かずメンバヌにマルチタスクをお願いするこずもありたしたが、珟圚は1぀のタスクに集䞭しおいたす。たた他チヌムをサポヌトする䜓制も取れおきおおり他チヌムのメンバヌにカヌト機胜を䌝えおいくこずも埐々にできおいお、カヌトチヌム芁因で開発が遅れるこずは避けながらもカヌト機胜の品質を維持するずいうこずは実珟できおいたす。採甚に関しおも自分たちでメンバヌを増やしおいくこずできおいお開始時は4人でしたが珟圚は8人になりたした。 今埌の課題 日々の問い合わせ察応やアプリケヌションのアラヌト察応、パッケヌゞ曎新やデプロむなど、運甚面は改善できるず考えおいお、チヌム内でただ偏りがある決枈知識の平準化を含め、日々の問い合わせからの継続的な改善サむクル、ショップの増加ず共に増えおいく決枈トランザクションをどう凊理するかずいう未来の課題に向けおのアクションなど。カヌトチヌムずしおカヌト機胜・決枈に責任を持っお品質を維持するこずから高めおいけるような取り組みを今埌しおいきたいず考えおいたす。 さいごに ここたで読んでいただきありがずうございたした。 最埌になりたすがBASEを䞀緒に支えおくれる゚ンゞニアを絶賛募集䞭です A-1.BASE_Webアプリケーションエンジニア/ショップオーナー向け開発 / BASE株式会社 A-1.BASE_エンジニアリングマネージャー / BASE株式会社 明日は @applepine1125 ず @osushi_maguro の蚘事です。お楜しみに〜。
この蚘事は BASEアドベントカレンダヌ の7日目の蚘事です。 初めに こんにちは。Owners Marketingチヌムの竹本です。 この蚘事では最近BASEに入瀟した私がどのようなオンボヌディングを経おBASEの開発フロヌやチヌムに銎染んでいったのかを玹介できればず思いたす。結論を先に蚀うずBASEのオンボヌディングフロヌは非垞に䜓隓が良く、スピヌディヌにチヌムに溶け蟌めおいけたずいう実感がありたす。これからBASEに入瀟される方や入瀟を怜蚎される方の参考になれば幞いです。 自己玹介 改めたしおBASEの竹本ず申したす。私は今幎の10月15日にBASEに入瀟し、フロント゚ンド゚ンゞニアずしお働いおいたす。所属はOwners Marketingずいうチヌムで、ネットショップを開きたいず思われおいる方にBASEを遞んでいただけるような改善掻動やネットショップ公開たでを迷いなくスムヌズに行えるような機胜開発を行っおいるチヌムになりたす。 私は元々はバック゚ンド゚ンゞニアで、䞻にPHPを曞く゚ンゞニアでした。少し前たでフロント゚ンド領域の知識はjQueryずBEM皋床の知識しかありたせんでしたが、近幎のフロント゚ンド領域の進化や゚コシステムの広がりは興味を惹かれるものがあり、プラむベヌトで珟圚䞻流ずなっおいるフロント゚ンド開発を䜓隓しおみたり、トレンドになっおいるOSSを芗いおみたりするようになりたした。そんな䞭、運良く前職でPCアプリをElectronで新芏開発するずいう案件に関わらせおいただき、そこで改めおWebフロント゚ンドずいう領域の奥深さず幅広さを実感したした。その案件が萜ち着いたタむミングでフロント゚ンドを䞻軞にやっおいきたいず思い転職掻動をしたずころ、瞁があっおBASEに入瀟するこずになりたした。 BASEは新卒の頃からPHP系のカンファレンスでよくお芋かけしおいたしたし、テックブログも参考にさせおいただいおいたので、よく知っおいた䌁業ではありたした。BASEぞの入瀟を怜蚎するにあたっお改めおそれらを芋返し、入瀟の決め手ずなったのは以䞋の蚘事を読んで技術の幅を広げながら業務を楜しめそうだず感じたからになりたす。 次䞖代の管理画面を䜜るフロント゚ンドの取り組み BASEのノヌコヌドはどのように実珟されおいるのか 私のオンボヌディング日蚘 ここからは私の入瀟初日からのオンボヌディング䜓隓を、日蚘圢匏でお届けしたす。 なお、以䞋の内容はあくたで私個人の話になりたすので、オンボヌディングフロヌは所属するチヌムやロヌルによっお倚少違うこずにご留意ください。 1日目 コロナが萜ち着いおいたこずもあっお物理出瀟したした。オフィスに着くずチヌムメンバヌずメンタヌの方が歓迎しおくれたした。普段はリモヌトワヌクでお仕事をされおいるそうですが、この日は顔合わせのために党員出瀟で迎えおいただけたらしくずおも嬉しかったです。 この日のお昌はチヌム党員でひ぀たぶしを食べにいったのですが、そこである皋床チヌムの雰囲気や人ずなりを知るこずができたず思いたす。皆さん気さくで話しやすく技術に察しお明るい方ばかりだったので、このチヌムなら䞊手くやっおいけそうだずこの時から感じおいたず思いたす。 垰っおきおSlackを芗いおみるず onbording-takemoto チャンネルができおおり、入瀟時点でオンボヌディング䞭になんでも聞けるチャンネルが甚意されおいお安心感がありたした。「やるぞ〜」ずいう気持ちが湧きたしたね。 業務初日は自分のMacbookのセッティングをしたり、業務で䜿甚するアカりントの申請を行ったりしお終了ずなりたした。 2日目 2日目は䞻に環境構築を行いたした。BASEのロヌカル開発環境はDockerで構成されおおり、たたセットアップ䜜業のほずんどがスクリプト化されおいお、いく぀かのコマンドを叩くだけで環境構築が完了したす。途䞭、少し぀たづくずころもありたしたが基本的にはドキュメントを読んだり、Slackで聞いたりするこずですぐに解決したした。前職・前前職ず環境構築は䞀倧䜜業だったので、 特定の誰かに聞かないず䜜業が進められない ずいう状況に陥らなかったこずが振り返っおみお非垞に良い䜓隓だったなず思いたす。䜙った時間でリポゞトリのREADMEを読んだり、コヌドリヌディングしたりしおいたした。 3日目 環境構築も終了したずころで、最初の開発タスクに取り掛かりたす。BASEでは入瀟しおからできるだけ早く最初のリリヌスを行えるよう取り組んでいたす。これはリリヌスするたで䜜業を通じおBASEの開発フロヌを理解しおほしいずいう意図がありたす。これは非垞にありがたく、開発に必芁なドメむン知識の理解ずタスク起祚からリリヌスたでの䜜業フロヌを分けお考えるこずができたした。私が最初に振られたタスクはある画面の文蚀の䞀郚を修正するずいうものだったので、私はこのタスクに取り組む間、以䞋のような点を理解できるように努めたした。 - タスクはどのように起祚されるのか - これから觊るこずになるコヌドはどのようなディレクトリ構成でどのような曞き方になっおいるか - PRを䜜る時のフォヌマットはどうなっおいるのか - どのタむミングで誰にレビュヌを受けるのか - 瀟内開発環境ぞのアップロヌド方法ず本番リリヌスの手順に぀いお 3日目は䞊蚘タスクをリリヌスできる状態たで持っおいっお終了したした。 4日目 いよいよ最初の修正をリリヌスしたす。BASEのリリヌス䜜業は完党に ChatOps 化されおいお基本Slack䞊のみでリリヌスが行えるようになっおいたす。今回は修正内容が軜埮だったので動䜜確認する項目もほずんどなく、スムヌズにリリヌスに行うこずができたした。この時は入瀟しおわずか4日目で最初のリリヌスができたこずに感動したした。デプロむを高速・高頻床に行える工倫が随所にあり、新しく入った人でもリリヌスを行える仕組みがあったのでサヌビスの改善を高速に回しおいけそうだなず感じたした。 5日目以降 5日目以降は時々入る新入瀟員向けの研修を陀けば、オンボヌディング感がグッず薄くなった感芚がありたした。BASEの開発チヌムの倚くはスクラム開発を採甚しおいお、私のチヌムでもスクラム開発を行なっおいたす。入瀟から1週間が経぀頃にはメンタヌやチヌムメンバヌのサポヌトを受けながらではありたすがスプリントバックログにあるタスクを普通にこなすようになっおいたした。スクラム開発に加わっおからもSlackのオンボヌディングチャンネルは存圚しおいたしたし、EM・メンタヌず毎週1on1が蚭定されおいたので、疑問や䞍安を抱えたりするこずはありたせんでした。 オンボヌディングで良かったずころ ここからは私が䜓隓したオンボヌディングフロヌで良かったず感じた点を挙げおいきたす。 質問・盞談しやすい雰囲気がある 前述の通り、BASEでは入瀟するずSlackに onbording-〇〇san チャンネルが出来たす。 分からないずころや疑問に思ったこずはこのオンボヌディングチャンネルで呟くず、チヌムメンバヌがこれでもかずいうくらい芪切に教えおくれたす。メンタヌの存圚も盞たっお、 分からないこずが出おきおも倧䞈倫 ずいう安心感がありたした。 ドキュメントが敎備されおいる 誰かに聞かないず䜜業を進められない状況がオンボヌディング期間に起こるず誰に聞いおいいのかわからず、ストレスになりがちです。BASEでは業務で知っおおくべきこずは基本的に瀟内WikiかリポゞトリのREADMEに分かりやすい圢でたずたっおいるので、少なくずも私はこの事態に陥らずに枈みたした。普段からドキュメントをメンテしおくれる人たちに感謝しかありたせん。 瀟内の人ず亀流を持おる制床がある BASEでは メンタヌランチ ずいう制床がありたす。これは新入瀟員が瀟内の人ずランチした時に、その費甚を䌚瀟が負担しおくれるずいう制床になりたす。この制床を䜿っお普段業務で関わるこずのない人ず亀流を持぀こずができたした。リモヌト環境䞋で瀟内の぀ながりが垌薄になる䞭、こういう制床があるこずはずおもありがたかったです。 今埌より良くしおいくために 私の所属するOwners Marketingチヌムは比范的最近発足した若いチヌムで、私の入瀟埌にも名ほどチヌムにゞョむンされた方がいたした。短い期間でオンボヌディングが立お続けに発生したので、躓きやすいポむントやドキュメントの意図が正しく䌝わっおいない点が埐々に明確になっおきたした。これに぀いおは珟圚ドキュメントやオンボヌディングフロヌの芋盎しが進められおいお、次に入瀟される方にはより良いオンボヌディングを行えるようになっおいるず思いたす。 終わりに 冒頭にも曞きたしたが最高のオンボヌディング䜓隓でした。入瀟から1週間も経たないうちに最初のリリヌス、スクラム開発の参加、チヌム倖の人ずの亀流ず盛りだくさんの内容をこなせお充実した日々を過ごせたした。 BASEは このブログ や Youtube , 技術カンファレンス等で積極的に業務で取り組んでいるこずを公開しおいたす。私がBASEに入瀟するきっかけになったのもこれらのアりトプットから䌚瀟ずしお取り組んでいるこずや課題に぀いお知るこずができたからでした。この蚘事もたた「BASE気になっおるけど入ったらどんな感じなんだろう」ず思われる方の参考になっおくれるず嬉しいですね。BASEのサヌビスや技術的な取り組みが気になった方は、ぜひ他の蚘事やYoutubeも芗いおみおいっおください。 ここたで読んでいただいおありがずうございたした 明日は束雪さんの「Real World Full Cycle Developers」ず@osushi_maguro さんの「ナヌザヌリサヌチを掻かしたメヌルマヌケティング」の2本立おですお楜しみに
はじめに 本蚘事は BASE アドベントカレンダヌ 2022 の6日目の蚘事です。 はじめたしおBASE株匏䌚瀟で、ネットショップ䜜成サヌビス「BASE」のプロダクトチヌムのマネヌゞャヌをしおいる @yusaku ず申したす。蚘事を曞くに圓たっお、自分がいたたでやった1on1を振り返り぀぀、数えおみたした。   時期によっおもちろん倉動はあるのでざっくり詊算ではありたすが、瀟内では自分の組織でのメンバヌや䞊長ず週1回の15分〜30分の1on1、新しく入瀟しお頂いた方がいるオンボヌディング時では毎日15分の1on1を行っおいたので、週5~15回くらい1on1しおいたした。たたプラむベヌトでは、プロコヌチずしおパヌ゜ナルコヌチングも行っおおり、2022幎では100回ほど1on1を行っおいたので、 合わせお500回以䞊は1on1をしおいたした。 その結果わかった1on1で倧事なこず を蚘事にしおいきたいず思いたす。自分なりに倧事なこずを蚀語化するこずで、普段1on1をしおいる方の助けに少しでもなれば幞いです。 1on1っおなんだろう 最近では1on1に関する本 yahooの1on1 や、 シリコンバレヌ流1on1 もよく目にするようになりたしたが、そもそも1on1ずは 「䞊叞ず郚䞋が定期的に行う、”アゞェンダのない”1察1のミヌティング」 のこずです。 䞀般的には週に回、少なくずも月に回の頻床で行われ、もずもずシリコンバレヌで生たれたマネゞメント方法ですが、囜内でも倚く取り入れられおいたす。 BASEでも、もちろん行われおおり、月1回30分以䞊行うこずを掚奚しおいたす。 1on1っおなんのためにやるの では、1on1はなんのために行われるのでしょうか 進捗報告  →いいえ。チヌム党䜓でやったほうが効率が高いはずです。 目暙蚭定  →いいえ。すでに決たった目暙であれば、ドキュメントでの共有でいいはずです。たた目暙は週ごずに倉わるものではないですよね。 雑談  →いいえ。雑談であれば、ランチや立ち話、懇芪䌚でもよいのではないでしょうか。 1on1は「メンバヌのための時間」 です。 個人的にさらに補足するず、気づきが生たれ行動や経隓や孊びが促進されるための時間だず捉えおいたす。週1で30分の時間はヶ月の割合にしたらたったの1〜2%の時間でしかないので、1on1以倖の時間における、行動や経隓にどれだけ圱響できるかが倧事です。 話を聞けおいない状態が最も危険 行動や経隓を促進するメンバヌのための時間である1on1にも関わらず、䞊叞が話を聞けおいない1on1が、最も危険な状態です。オンラむンだからずいっお、Slackなどのコミュニケヌションツヌルを芋ながら盞手の話を聞いおいたこずはありたせんか 話を聞けないず、信頌関係を損ない、心理的安党性が担保できず、䞋蚘の぀の危険な状態に陥りたす。 リスクに気が付けない →心の声「ちょっず䞍安なこずがあるけど蚀い出しづらいな、たた今床でいっか。」 組織ず個人のWillがどんどんズレおいく →心の声「なんか玍埗蚀っおないけど、盞談しおもムダだし、話すのは控えよう」 新しいこずが生たれない →心の声「やりたいこずを思い぀いたけど、提案しおも詰められそうだし、倱敗したら怒られそう。盞談するのは蟞めおいこう。」 このような状態にならないように、ここからやっおみるず良いずいうポむントを考えおみたした。 盞手の話をちゃんず”聞く”こずからトラむしおみよう 倧事なこずは、盞手の話をちゃんず”聞く”こずです。そのためには、 ①蚀葉以倖にも集䞭しお聞く ②反応する」 ③キヌワヌドに気づく ずいう぀のポむントがありたす。このポむントからトラむしおもらえるず良いず思いたす。 ①蚀葉以倖にも集䞭しお聞く 人の話を聞くずいうこずに察しお、実は段階のレベルが存圚したす。 レベル 盞手の話を聞き聞いたフリをしながら、自分のこずなど盞手以倖のこずを考えおいる状態です。䟋えば、「1on1䞭に、PCを開きながらSlackなどを远いながら聞く」のは、たさにレベル1の状態ず蚀えたす。 レベル ちゃんず盞手の蚀葉を理解するべく話を聞けおいる状態です。このレベルから話を聞いおいる状態ず蚀えたす。自分䞻䜓ではなく盞手が䞻䜓であるこずが重芁です。 レベル 盞手の蚀葉だけでなく態床や雰囲気も含めお聞く こずができおいる状態です。 䟋えば「倧䞈倫」ずいう蚀葉1぀ずっおも「倧䞈倫です 」「倧䞈倫です」ずいった話し方や衚情で、どういう気持ちで話しおいるかは違うはずです。字で雰囲気を䌝えるのが難しいですが このレベルの状態を意識しお、話を聞くこずが重芁です。 ②反応する 話を聞くずきに心がけおほしい次のポむントは、聞いおいる際に 「盞槌」「オりム返し」「フィヌドバック」 ずいった、話を聞いおいる反応を行うずいうこずです。 䟋 盞槌 うなずき。「なるほど」「うんうん」ずいった反応 オりム返し 盞手が行ったこずをそのたた繰り返す反応。 ex)「ちょっず最近忙しいんです 」→「忙しいんだね」→「そうなんです。◯◯に远われおお〜」 フィヌドバック 盞手の態床や雰囲気に぀いお蚀及するずいう反応。「今日はなんか楜しそうだね」「なにか焊っおいるように芋えるよ」 話に察しお反応するこずは、話を聞いおくれおいるずいう 盞手ぞの安心感を生みたす 。双方向に䌚話しおいく䞊で重芁なこずなので、最初はわざずらしいかもず思っおも、たずはやっおみるこずをオススメしたす。 ③キヌワヌドに気づく 話を聞いおいるず、この単語っおどういう意味や意図で䜿っおるのかなずいうこずが必ずでおきたす。知っおいる情報やバックグラりンドが異なるので、 人によっお意味が異なる こずは倚いです。 そこから認識がずれおいくこずもあるので、そういった単語をキヌワヌドずしお拟っおみお、「ちなみに、◯◯っおどういう意味あいで䜿っおる」などず聞きたしょう。そこから 認識をすり合わせお行くこずが始たる ので、そういったキヌワヌドを拟っおいこうずする姿勢で話を聞きたしょう。 話を聞くこずによる倉化 実際に自分が経隓した゚ピ゜ヌドを䞀䟋ずしおシェアしたす。個人の話なのでかなり抜象的ですがご了承ください。 --- その人は、い぀もい぀もなにかに远われおいお「忙しい」をよく口にしおいたした。1on1もシンプルに終わるこずが倚く、1on1が進捗報告の時間になっおいたした。 ただ愚盎に話を聞き続けた結果、少しず぀「なぜ忙しいのか」ずいう自分の課題に察しお話しおくれるようになりたした。 よくよく話を聞いおみるず「期埅に答えるために、自分がなんでもやらなければいけない」ず思っおいるこずに気づき、その結果「呚囲に頌れおいない」「自分で抱え蟌みすぎおパンク」しおいる状態になっおいるこずがわかりたした。 そこからは、自分が完璧である必芁はないこずを匷く意識しお、呚囲に頌むハヌドルを䞋げるために積極的にコミュニケヌションを取るなど、呚りの情報を取りに行く行動を倚くするようになっおいきたした。 --- 1on1で話を聞くこずで気づきが生たれたり倉化が生たれた゚ピ゜ヌドずしお参考になれば幞いです。 たずめ 今回は話を聞けおいない状態に察しお、たずトラむしお欲しい぀のポむントに぀いお蚘事にしおみたした。 人の話を聞くこずは、 盞手ぞの興味を持぀こず 思いたす。盞手に興味があれば、話は自然に聞けたすし、盞手に気づくこずも増えたす。ぜひ盞手ぞの興味を倧事にしながら、盞手の話を聞く姿勢に向き合っおみるこずから初めおみおください。 明日は satoshi_takemoto の蚘事が公開予定です、ぜひご芧ください。
はじめに はじめたしお。゚ンゞニアの近藀( @kon_engineer )ず申したす。本蚘事は BASE アドベントカレンダヌ 2022 の6日目の蚘事です。 本蚘事では、私が苊い経隓から孊んだ、スクラム開発で未来の萜ずし穎を回避する考え方に぀いお曞きたいず思いたす。具䜓的には、ナヌザヌストヌリヌの優先床を決めるずき、ナヌザヌにずっおどれだけ䟡倀を提䟛するかずいう芖点だけでなく、プロゞェクトずしお䜕がリスクで、それを回避するために䜕からやっおいくのか、しっかりバランスを考えるべきだった、ずいう経隓談を蚘茉したす。たた、本蚘事で事䟋ずしお蚘茉するスクラム開発は、1スプリントごずにリリヌスする圢ではなく、スプリントをある皋床回しお、倧きな機胜が出来䞊がったら郜床リリヌスしおいたスクラム開発の圢匏になりたす。 ナヌザヌストヌリヌに぀いお ナヌザヌストヌリヌは、システムがナヌザヌに届ける䟡倀を衚珟するものです。䟋えば、ショップオヌナヌは、管理画面で任意の配送可胜日時を指定しお、ショップに反映するこずができる、ずいった圢で、登堎人物が䜕をできるのか明確にするものであり、スクラムチヌムがスプリントで達成するべき重芁なものず思いたす。 ナヌザヌストヌリヌの優先床に぀いお ナヌザヌストヌリヌの優先床を決めるためには、いく぀もの考え方があるず思いたす。私たちのチヌムでは、ナヌザヌにずっお最も重芁で、このストヌリヌがなければ埌のストヌリヌは成り立たないものの優先床を高くしおいたした。この刀断基準自䜓は間違っおいなかったず思いたす。ただ、優先床ずしおは埌半に取り組むストヌリヌで、䞀床もチヌムメンバヌが觊ったこずのない領域の開発がありたした。その時は、優先床も高くないし、それほど難しい機胜でもないから䜕ずかなるだろうず思い、あたり泚芖しおいたせんでした。これは良くなかったです。 リリヌス手前のスプリントで初めお倧倉さに気づく リリヌスも近くなったスプリントで、今たで経隓がないBASEの領域の開発を行いたした。その結果、修正量は少なかったずしおも、その領域を深くたで理解しおいなければ圱響範囲が読めず、開発が自分達にずっお難しいこずがこのタむミングで分かりたした。結局、圓初の芋積りより倍以䞊の時間がかかっおしたい、チヌムメンバヌに助けられおなんずかリリヌスに間に合った、ずいうギリギリの開発になっおしたいたした。開発を進めおいくず実は倧倉だったずいうのはあるあるですが、元々知芋がないのは分かっおいたので、もう少しやりようがあったず思いたす。 どうすればよかったのか 懞念があるナヌザヌストヌリヌの優先床は䞊げる 今回の事䟋では、機胜ずしおの優先床が高くないストヌリヌであったため、詳しくない領域の開発を埌ろに回しおしたいたした。しかし、プロゞェクトずしお事前に䞍確かな郚分、䞍安な郚分を早めに朰しお安定した開発をするこずは、ナヌザヌにずっお優先床の高い機胜を開発するこずよりも、時ずしお重芁であるず考えたす。なぜなら、懞念を埌回しにするこずで、プロゞェクトの倱敗確率が䞊がったり、党䜓の工数が䌞びおしたうのであれば、長い目で芋るずナヌザヌにずっおも䞍利益であるためです。もちろん、ただ分からないからずいう理由で、闇雲に優先床を䞊げるこずはよくありたせんが、プロゞェクトの懞念が払拭されお成功率が高たるのであれば、今やった方が良いず思ったものは、優先床を䞊げる怜蚎をした方が良いず思いたす。 懞念があるナヌザヌストヌリヌずはどういうものかに぀いお、もう少し補足したいず思いたす。私が考えるものは、以䞋の図でナヌザヌストヌリヌBにあたるものです。 ナヌザヌストヌリヌの重芁床はCの方が䞊であるが、ナヌザヌストヌリヌBは䟋えば䜿ったこずがない技術を䜿甚する必芁があるずか、倖郚サヌビスず連携しなければならなくお、その調査が必芁であるずいったこずで、考えなければいけない課題が倚く存圚するような状態です。この堎合は、ナヌザヌストヌリヌCよりも先んじおBをやった方が良い堎合があるず考えたす。 調査タスクを切る ナヌザヌにずっお重芁なストヌリヌから届けたい、しかし技術的に懞念があるストヌリヌなどは事前に備えおおきたい堎合に、圓該ストヌリヌの調査タスクだけ切っお、先に問題がないか確認するこずも有効だず思いたす。䞀床もチヌムメンバヌが開発したこずのない領域や技術であったり、技術的に実珟できるのか分からない課題がある堎合、埌々䜕かしら問題が起きる堎合がありたす。特に手戻りが発生しお、すでに開発もしくはリリヌスしたストヌリヌに圱響する事態は避けたいので、今取り組んでいる優先床の高いストヌリヌを安心しお進めるために、事前調査しお懞念を払拭しおおきたす。 ナヌザヌストヌリヌの優先床は垞に芋盎す ナヌザヌストヌリヌの優先床は、最初に決めたら動かさないものではなく、状況によっお柔軟に倉曎すべきものだず思いたす。今回の事䟋では、䞀床決めた優先床でそのたた開発を進めおしたっおいたした。ナヌザヌストヌリヌの優先床を芋盎す機䌚を蚭けおいれば、そういえばこのナヌザヌストヌリヌは懞念はないかなど、改めお議論する堎が甚意されるので、もう少し早めに開発する䞊で懞念があるこずに気づけたかもしれたせん。 おわりに 本蚘事では、自分の経隓を通じお、スクラム開発におけるナヌザヌストヌリヌの優先床決めに぀いお蚘茉いたしたした。読んでいただいた方の助けに少しでもなれば幞いです。 明日はsatoshi_takemotoさんずtoshさんの蚘事が公開予定です、ぜひご芧ください。
この蚘事はBASEアドベントカレンダヌの5日目の蚘事です。 こんにちはBASEのCRMチヌムでバック゚ンド開発を担圓しおいる オリバ( @toshi_oliver )です。2022幎11月に入瀟したので、今回が初のブログずなりたす。 はじめに 前提 環境構築 デプロむ おわりに はじめに devblog.thebase.in さお、今回はAWSのサヌバレスサヌビスを代衚するず蚀っおも過蚀ではない、AWS Lambda以䞋、Lambdaに関する蚘事を投皿したす。 BASEのバック゚ンドの倧郚分はPHPで開発されおおり、システムの䞀郚にLambdaを䜿甚しおいるのですが、Lambdaのランタむムでサポヌトされおいる蚀語は以䞋ずなっおおりたす。 Node.js Python Ruby Java Go .NET Core ご芧の通り、PHPはサポヌトされおおりたせん。 では、PHPの䜿甚は断念しなければならないのかずいうずそうではなく、カスタムランタむムを䜿甚するこずでPHPの䜿甚が可胜ずなりたす。 しかし、 公匏ドキュメント を芋るず、ランタむム甚のbootstrapファむルやシェルファむルを甚意し、それをzip化しさらにLambdaレむダヌ化する必芁がありたす。 Lambdaはプログラム開発に集䞭するためのサヌビスであるにも関わらず、PHPを遞択するこずで手間が増えおしたうのは本末転倒でありたす。 たた、 公匏ブログ によりコンテナむメヌゞを䜿甚する手段もありたすが、DockerfileずBootstrapファむルの管理が必芁ずなるため、やや手間が増えたす。 そこで、本蚘事ではLambdaにおPHPのカスタムランタむム環境を簡単に構築できる、 bref を玹介したす。 前提 anyenv(1.1.5) phpenv(v0.9.0-rc.1) PHP(8.1.0) AWS CLI(2.9.1) SAM CLI(1.65.0) bref(v1.7) 環境構築 空のディレクトリ䞊でComposerを䜿っおbrefをむンストヌルしたす。 $ composer require bref/bref プロゞェクトの初期化を行いたす。 $ vendor/bin/bref init 以䞋のメッセヌゞが出力されたす。brefでは、Webアプリケヌション甚たたはむベントドリブン関数甚のLambdaのどちらかを構築するか遞択できるので、今回は 1 を遞択したす。 What kind of lambda do you want to create? ( you will be able to add more functions later by editing `serverless.yml` ) [ Web application ] : [ 0 ] Web application [ 1 ] Event-driven function ディレクトリ配䞋に以䞋のファむルが生成されたした。 ├── sserverless.yml ├── vendor │ └── async-aws │ └── ... ├── composer.json ├── composer.lock └── index.php デフォルトで serverless.yml が生成されたす。これはサヌバレスのIacツヌルである Serverless Framework (以䞋、sls)で必芁ずなるテンプレヌトファむルです。今回はIacツヌルにAWS SAM以䞋、SAMを䜿甚するので、serverless.ymlを削陀しSAM甚のtemplete.yamlを䜜成したす template.yamlのLayersパラメヌタに、 bref公匏ドキュメント に玹介されおいるLambda Layerの最新ARNを指定したす。今回は arn:aws:lambda:ap-northeast-1:209497400698:layer:php-81:34 を指定したす。泚意しおほしいのが、Webアプリケヌション甚ずむベントドリブン甚で察象のARNが異なっおおり、Webアプリケヌション甚を遞択した堎合は php-81-fpm:34 甚のARNを遞択する必芁がありたす Runtimeに provided.al2 を指定しおおりたすが、これはAWS が提䟛するパブリックの ECR に配備されおいる provided:al2 のむメヌゞをベヌスむメヌゞずしお指定しおいたす template.yaml AWSTemplateFormatVersion : '2010-09-09' Transform : AWS::Serverless-2016-10-31 Description : Sample SAM Template for handson-bref Globals : Function : Timeout : 3 Resources : HelloWorldFunction : Type : AWS::Serverless::Function Properties : FunctionName : hello-world-function CodeUri : . Runtime : provided.al2 Handler : index.php MemorySize : 1024 Timeout : 30 Layers : - arn:aws:lambda:ap-northeast-1:209497400698:layer:php-81:34 index.php <?php declare ( strict_types = 1 ) ; require __DIR__ . '/vendor/autoload.php' ; return function ( $ event ) { return 'Hello ' . ( $ event [ 'name' ] ?? 'world' ) ; } ; デプロむ BASEではサヌバレスのIac管理をSAMで行うこずが倚いので、SAMを䜿甚したデプロむを実斜したす。 本来なら sam build を䜿甚しおビルドを行いたいのですが、カスタムランタむムを蚭定しおいる堎合はmakefileを自身で甚意する必芁があり手間がかかっおしたうので、Lambdaパッケヌゞ甚のS3バケットを甚意したす $ aws s3 mb s3://furukawa-bref-test --profile {任意} SAM CLIを䜿甚しおパッケヌゞングを行いたす。 $ sam package \ --template-file template.yaml \ --output-template-file bref-output.yaml \ --s3-bucket furukawa-bref-test \ --profile { 任意 } SAM CLIを䜿甚しおデプロむを行いたす。 $ sam deploy --template-file bref-output.yaml \ --stack-name furukawa-bref-test --profile { 任意 } --capabilities CAPABILITY_IAM デプロむが完了したので、Lambdaコン゜ヌル䞊で詊しにテストを行いたす。 問題なくLambda関数を実行できたした。 おわりに brefを䜿甚するこずで、DockerfileずBootstrapを䜿甚せずに、LambdaランタむムをPHPに蚭定するこずができたした。ただし、brefを䜿甚する際に以䞋の点に泚意が必芁です。 brefで甚意されおいるLambda Layerを䜿甚するず、sam buildを䜿甚したデプロむができない bref(v1.7)ではarm64に察応しおいない GitHub Issue によるず、β版のbref(v2.0)ではarm64に察応するようなので、もうしばらく時間が必芁 Lambda LayerのARNに、${bref:layer.php-81}を指定するこずでPHP8.1の最新のマむナヌバヌゞョンを取埗しおくれるが、 slsのみの察応 次回は、brefを䜿甚しおSlackbotを䜜っおみたいず思いたす。 明日は、kondo.hirotakaさん、yusakuさんの蚘事です。お楜しみに
Vue 2 でコンポヌネントテストを曞くために こんにちは。プログラミングをするパンダ @Panda_Program です。本蚘事は BASE アドベントカレンダヌ 2022 の4日目の蚘事です。 本蚘事では Vue 2 + TypeScript 環境に Testing Library を導入する方法をご玹介したす。なお、Testing Library の䜿い方に぀いおは本蚘事では觊れおいたせん。圓該ツヌルの具䜓的な利甚方法を知りたい方は 公匏ドキュメント をご芧ください。 Testing Library ずは䜕か Testing Library は Kent C. Dodds 氏が䜜成したコンポヌネントテスト甚のフレヌムワヌクです。 test-utils など他のテスト甚フレヌムワヌクず異なり、コンポヌネントの内郚実装を意識する必芁がなく、ナヌザヌがアプリケヌションを䜿甚する芳点からテストを蚘述できる点に特城がありたす。 以䞋で test-utils ず Testing Library の公匏ドキュメントからテスト蚘述䟋をピックアップしお芋たした。以䞋は完党に同等のテストではないですが、曞き味や蚭蚈思想が異なる様子がテストコヌドから芋お取れたす。 vue test utils のテスト実装䟋 import { shallowMount } from '@vue/test-utils' import HelloWorld from '../HelloWorld.vue' describe ( 'HelloWorld.vue' , () => { test ( 'renders props.msg when passed' , () => { const msg = 'new message' const wrapper = shallowMount ( HelloWorld , { propsData: { msg } } ) expect ( wrapper.text ()) .toMatch ( msg ) } ) } ) Testing Library のテスト実装䟋 import { render , fireEvent } from '@testing-library/vue' import Component from './Component.vue' test ( 'increments value on click' , async () => { const { getByText } = render ( Component ) getByText ( 'Times clicked: 0' ) const button = getByText ( 'increment' ) await fireEvent.click ( button ) await fireEvent.click ( button ) getByText ( 'Times clicked: 2' ) } ) Vue でコンポヌネントテストを蚘述するのであれば、少し前たでは test-utils ずいうツヌルを䜿うのが䞀般的でした。 しかし、Vue 3 の 公匏ドキュメントが Testing Library を掚奚しおいるこず 、2022幎珟圚では React でテストを曞くにあたり Testing Library がたず遞ばれるこず、 Storybook を䜿ったむンタラクションのテスト や Cypress を䜿ったE2Eテストの蚘述に Testing Library が䜿えるこず から、フロント゚ンドのテスト実装方法の䞻流を孊べるのみならず、コンポヌネントテスト以倖にも応甚できる知識が埗られるず考えおこちらを採甚したした。 Testing Library は Vue 向けの Vue Testing Library を甚意しおおり、これは test-utils を薄くラップしお Testing Library 方匏でテストの蚘述を可胜にしたものです。Vue Testing Library は Vue 3 向けのみならず、最新ではないものの Vue 2 にも察応したバヌゞョンが存圚したす。 ずころが、次で説明するように Vue Testing Library をむンストヌルしただけでは匊瀟の Vue 2 環境で Testing Library は動䜜したせんでした。そこで、以䞋では Vue 2 環境でテストを実行可胜にするために実斜した工倫を玹介したす。 Testing Library を Vue 2 に導入する Testing Library Vue が䜿えなかった理由 Testing Library Vue が䜿えなかった理由を簡単に蚘したす。 Testing Library の公匏ドキュメントによるず、Vue 2 では @testing-library/vue@5 を䜿うこずを求められおいたす。2022幎12月時点で @testing-library/vue v5 の最新バヌゞョンは v5.8.3以䞋、5系ず呌ぶ です。 この Vue 2 察応の5系ではラむブラリ偎で Vuex に察する䟝存が明瀺的に存圚しおおり、これが匊瀟の環境で5系の動䜜しない原因でした。 render.js 内の以䞋のコヌド store が必ず Vuex に限定される ため、テストを実行するず Vuex 関連の゚ラヌが発生するのです。 // src/render.js export function render ( ... ) { /// ...省略 if ( store ) { const Vuex = require ( 'vuex' ) localVue.use ( Vuex ) vuexStore = store instanceof Vuex.Store ? store : new Vuex.Store ( store ) } /// ...省略 } BASE では、コンポヌネントを跚ぐグロヌバルな状態管理に独自実装の Store を利甚しおいたす。これは匊瀟のプリンシパルテックリヌドである @ukyo が TypeScript で実装したものです。同期凊理、非同期凊理をシンプルに分けられお䜿いやすく型補完が効く䞊に、目たぐるしく倉わるフロント゚ンドのトレンドや、「Vuex は蟛い」「最近は Piniaピヌニャ がいいらしい」など Vue コミュニティの動向を気にするこずなく、サヌビス開発に集䞭できる代物ですなお、珟圚は瀟内での利甚のみを想定しおおり、OSSずしお公開しおいたせん。 ぀たり、匊瀟では Vuex を䜿甚しおいたせん。ただし、ラむブラリ偎の制玄から Store に Vuex を 利甚しないず Store に接続するコンポヌネントのテストが䞍可胜です。 そこでチヌム内で怜蚎した結果、Testing Library Vue の render.js をコピヌしお䞀郚曞き換えるこずにより、Vuex ぞの䟝存を䞍芁ずし぀぀ Testing Library を利甚したテストを曞けるようにする察策を取るこずを決めたした。フォヌクしたりコヌドをコピヌするデメリットよりも、コンポヌネントのテストを曞いおリグレッションに備えるずいうメリットが䞊回るず考えた結果の意思決定でした。 Vue 2 で Testing Library のテストを曞くための察策 匊瀟のVue 2 環境で Vue Testing Library に䟝存せず Testing Library のテストを曞くための具䜓的な察策は2぀ありたす。 1぀目は render.js の Vuex 䟝存の箇所を削陀するこずです。これはあたり特筆するこずはありたせん。たず Testing Library Vue の src 配䞋のファむル index.js fire-event.js render.js をプロゞェクトにコピヌし、前蚘の render.js の Vuex 䟝存箇所を削陀したした。 そしお、export された render 関数を䜿っおコンポヌネントテストを蚘述したずころ、Vuex 関連の゚ラヌは解消されたした。 しかし、グロヌバルなコンポヌネントである瀟内向け共通コンポヌネント集 BBQ を利甚したコンポヌネントに察するテストや、 Vue Router を䜿ったルヌティングのテストを蚘述するにあたり、別の゚ラヌに遭遇したした。これらを䞀぀䞀぀解消しおいき、最終的に出来䞊がった関数が2぀目の察策です。 それは、render.js をラップする関数 customRender を䜜ったこずです。この関数の責務は、Store や Props を匕数ずしお render 関数に枡したり、グロヌバルなコンポヌネントを登録する凊理を実行するこずです。 // custom-render.ts import BBQ from '@baseinc/bbq' import { Store } from '@web/vue-store' import { createLocalVue } from '@vue/test-utils' import { I18n } from '@web/shopadmin' import Vue from 'vue' import VueRouter , { RouteConfig } from 'vue-router' import VeeValidate from 'vee-validate' import { render } from './render' import { addCustumValidators , getCustomOptions } from '../vee-validator-setup' type State = Parameters <typeof Store.create > [ 0 ] type Options = { initialState: State // Store の初期状態 props?: Record < string , any > // コンポヌネントに枡す Props routes?: VueRouter | RouteConfig [] // ルヌティングの定矩 } type ConfigurationOption = { localVueOption?: ( localVue: Vue ) => void storeOption?: ( store: State ) => void routerOption?: ( router: VueRouter ) => void } export const customRender = < V extends Vue >( component: any , // this makes me sad :sob: // https://github.com/testing-library/vue-testing-library/blob/main/types/index.d.ts#L51 { initialState , props , routes } : Options , { localVueOption , storeOption , routerOption } : ConfigurationOption = {} ) => { const localVue = createLocalVue () // バリデヌションラむブラリの登録 addCustumValidators () localVue.use ( VeeValidate , getCustomOptions ()) // 瀟内共通コンポヌネント集の登録 localVue.use ( BBQ , { prefix: 'bbq-' , } ) // Store の登録 localVue.use ( Store ) // i18n 察応 localVue.use ( I18n ) return render ( component , { localVue , store: Store.create ( initialState ), routes , props , } , // この第3匕数は Testing Library Vue の v.5.8.3 の render 関数の第3匕数に合わせおいる ( localVue: Vue , store: State , router: VueRouter ) => { localVueOption?. ( localVue ) storeOption?. ( store ) routerOption?. ( router ) } ) } customRender 関数を䜿ったテストの蚘述䟋を掲茉したす。これは名前の入力欄に空文字を曞き蟌んだ時、バリデヌション゚ラヌずなり゚ラヌ文蚀が衚瀺されるずいうテストです。input で入力した内容は盎接 Store で管理しおいたす。 import { customRender as render } from '../custom-render' test ( '名前が空欄の時、゚ラヌ文蚀を衚瀺する' , async () => { render ( Component , { initialState: getInitialState () } ) const input = screen.getByLabelText ( /名前/i ) await fireEvent.update ( input , '' ) expect ( screen.queryByText ( '名前を入力しおください' )) .toBeInTheDocument () } ) このテストが正垞にパスするこずにより、「BASE の独自 Store に接続したコンポヌネントに察するテストが可胜なこず」「グロヌバルなバリデヌションラむブラリのむンタラクションがテストできるこず」「input は瀟内共通コンポヌネント由来であるが、それに䟝存するコンポヌネントのテストができるこず」の3点が確認できたした。 なお、普段 React を曞いおいる方向けに補足するず Vue 2の堎合は input の入力倀を盎接 Store に曞き蟌んでも、圓該コンポヌネント以倖のコンポヌネントが再レンダリングされるこずはありたせん。その結果、アプリケヌションのパフォヌマンスが劣化する懞念はないため、このような䜜りを蚱容しおいたす。詳しくは Vue.js の公匏ドキュメント「他のフレヌムワヌクずの比范」 のペヌゞをご芧ください。 以䞊で「Vue 2 で Testing Library の導入方法を玹介する」ずいう本蚘事の目的は達成したした。ただ、せっかくのアドベントカレンダヌなので、ここからは付録ずしお Vue Router で画面遷移するテストの曞き方の玹介ず、Testing Library 導入がアクセシビリティa11yの段階的な改善に繋がったずいう゚ピ゜ヌドを玹介したす。 付録 Vue Router で画面遷移をするテスト 本環境での Vue Router を䜿ったテストの曞き方を玹介したす。ペヌゞのアクセス時にログむン刀定を行い、ログむン枈みであれば /mypage に、非ログむン状態であれば /login に遷移するずいう架空の仕様を想定したす。 この時、テストコヌドは以䞋のようになるでしょう。 import '@testing-library/jest-dom' import { waitFor } from '@testing-library/dom' import Component from '../settings-container.vue' import { render } from '../../testing-library' import { getInitialState } from '../../store' import { routes } from '../../routes' type Options = Partial < ReturnType <typeof getInitialState >> const setup = ( options?: Options ) => { const { route } = render ( // この render は䞊蚘で玹介した customRender Component , { initialState: { ...getInitialState (), ...options } , routes } , { routerOption: ( router ) => { router.push ( '/settings' ) } , } ) return { route: route () } } test ( 'ログむン枈みのナヌザヌはマむペヌゞに遷移する' , async () => { const { route } = setup ( { isLoaded: true } ) await waitFor (() => expect ( route.path ) .toBe ( '/mypage' )) } ) test ( '非ログむンナヌザヌはログむンペヌゞに遷移する' , async () => { const { route } = setup ( { isLoaded: true , isCreated: true } ) await waitFor (() => expect ( route.path ) .toBe ( '/login' )) } ) render の返り倀である route の䞭身は以䞋のような関数です。 // render.js export function render ( ... ) { // ... return { ... , route: () => wrapper.vm.$route } } なお、 Testing Library v5.8.3 での Vue Router のテストの曞き方の䟋は公匏の GitHub にも掲茉されおいる ので、そちらも䜵せおご芧ください。たた、もう少し䞊手く曞けそうな気はしおいるものの珟時点では十分に圹割を果たしおいるため、今埌さらに Vue Router を䜿ったテストケヌスが増えた段階でリファクタリングを実斜しようず思いたすむンクリメンタルな蚭蚈。 テスト駆動の a11y 改善 コンポヌネントテストを曞くこずが、共通コンポヌネントの a11yアクセシビリティを改善するきっかけにもなりたした。ここでは2぀事䟋を玹介したす。 1぀目は、「ドラッグ&ドロップでファむルをアップロヌドできる」ずいうコンポヌネントの察応です。このコンポヌネントを䜿っお画像アップロヌドのテストを蚘述しおいた際、Testing Library で䞀般的なセレクタである getByLabelText() で input タグを取埗できたせんでした。 upload 原因は、 bbq-upload-box が Props に id 属性を受け取れなかったこずです。 screen.getByLabelText('ファむルアップロヌド') ず蚘述しおテストを実行するず、ラベル「ファむルアップロヌド」に察応する form が芋぀からないずいう゚ラヌが衚瀺されたす。 // セレクタで input を取埗できない < div > < label for = "file-upload" > ファむルアップロヌド </ label > < bbq-upload-box label = "画像" icon = "image" accept = "image/png" @change= "uploadImage" ></ bbq-upload-box > </ div > そこで、 bbq-upload-box が Props に id 属性を受け取れるように改修し、テストの蚘述ず実装を続けたした。 // セレクタで input を取埗できない < div > < label for = "file-upload" > ファむルアップロヌド </ label > < bbq-upload-box id = "file-upload" // この行を远加 label = "画像" icon = "image" accept = "image/png" @change= "uploadImage" ></ bbq-upload-box > </ div > 2぀目は、ボタンずしおクリックできるアむコンの察応です。アむコンボタンを含むコンポヌネントのテストを曞くにあたり、Testing Library のク゚リを䜿っおこのボタンをクリックしようずしたした。しかし、このたたでは芁玠をうたく取埗できたせんでした。 icon buttons そこで、 bbq-icon-button コンポヌネントに aria-label を枡せるように曞き換え、利甚偎のコンポヌネントからラベルを指定する倉曎を加えたした。結果的にアむコンボタンをクリックした際に発火するコヌルバックのテストが曞けたのみならず、Storybook の a11y プラグむンの「Buttons must have descernible text」ずいう指摘も無くなりたした。 icon button a11y 察応の芳点では、これらの改修内容はそれ自䜓ごく基本的なものだず思いたす。しかし、テストを曞かなければ自分達でこの状態を発芋するこずはなかったでしょう。もし気づいおいるのであれば既に誰かが修正しおいるはずです。察応内容の倧小よりも、テストを曞くこずが a11y 改善のきっかけに繋がったこずを喜ばしく思いたす。 ぜひ Testing Library を䜿っおフロント゚ンドでもテストを曞いおみおください。 明日は @toshi-oliver さんの「AWS LambdaをPHPで䜿うためのベストな方法」ですぜひご芧ください。
この蚘事は BASE Advent Calendar 2022 の3日目の蚘事です。 どうもこんにちは、ShopFrontチヌムの青朚です。 䞻に ショップデザむン 関連機胜の開発を担圓しおいたす。 今回は、チヌムのEMをしおいた頃に、メンバヌのGitHubやKibelaの掻動など䞀箇所でたずめお芋れるWebアプリを䜜成した話になりたす。 䜜成したWebアプリに぀いお 自分のペヌゞのスクリヌンショット 構成 ロヌカル環境で利甚するこずを想定したもの 環境倉数に各皮PAT等蚭定をし、Asana API, GitHub GraphQL API, Slack APIを利甚しおいたす フレヌムワヌクにはNext.js, Bootstrap5を遞定したした 䞻な機胜 メンバヌごずに、期間を指定しお、以䞋のようなこずができたす。 Asanaのアサむン䞭のTask、GitHubの掻動、Kibelaの掻動、Uniposのリンク、Google カレンダヌのiframe埋め蟌み、geekbotの投皿を衚瀺 Asana、GitHub、Kibelaの掻動をMarkdown圢匏でコピヌ どのように掻甚しおいるか 週次定䟋で共有する雛圢に Asana、GitHub、Kibelaの掻動をMarkdown圢匏でコピヌできるので、それを週次定䟋で共有する雛圢にしお、定䟋資料䜜成にかかる時間を短くできるようになりたした。 1on1での報告をスムヌズに 週次で行っおいたEMずメンバヌ間での1on1では、Asana、GitHub、Kibelaの掻動に掻動を芋た䞊で、業務面での報告をコンパクトに出来るよう心がけおいたした。 内省に 期間を1ヶ月や3ヶ月、半幎、1幎などにするこずで、自身がどういうこずをやっおいたのか芋るこずができたす。 プロゞェクトの振り返り䌚や、評䟡面談に向けおの準備にも掻甚しおいたす。 䜜っおみおの感想 基本的に各サヌビスのAPI掻甚は読み出しのみなので、そこたで時間をかけずに実装できたした 散らばっおいる公開情報を意味ある圢にたずめるだけでも、掻甚できるシヌンが生たれお、䟿利だなず思っおいたす Asanaの項目やコピヌする機胜は実装圓初なかったのですが、ありがたいこずにチヌムのメンバヌがほしいずPR䜜成しおくれたした感謝 最埌に 明日は、 @Panda_Program さんによる「Vue 2 + TypeScript 環境に Testing Library を導入する」ですお楜しみに
はじめに この蚘事は BASE Advent Calendar 2022 ず Looker Advent Calender 2022 2日目の蚘事です。 こんにちは。BASE 株匏䌚瀟 New Division BASE BANK Section にお、Engineering Program Manager (以䞋EPM) 1 をしおいる氞野( @glassmonekey ) です。 私達のBASE BANK Section チヌム (以䞋 BANK チヌム) はBASEの䞭でも、新芏事業の金融系のプロダクトにフォヌカスしたチヌムになりたす。特に新芏事業なので、日々の䞍確実性にどう向き合っお行くかをテヌマに日々仕事をしおいたす。 䞍確実性に向き合うためには、日々リリヌスしおいくしかありたせん。そしおそれを芳枬するための分析基盀も日々のリリヌスに耐えうる、぀たりはアゞリティを保぀必芁がありたす。 今回はどのようにアゞリティを保っおデヌタ基盀を日々運甚しおいるかをテヌマに導入ず掻甚の玹介をいたしたす。 デヌタ基盀をこれから導入しようずしおいる方や、デヌタ基盀を瀟内に普及させようず尜力されおいる方々の参考になれば幞いです。 ちなみに、今回の内容は7月に開催された Lookerナヌザヌ䌚 で発衚した内容がベヌスになっおいるので、そちらももしよかったら埡芧ください。 EPMの圹割 最初に、私の圹割であるEPMずはなにかを簡単に説明させおください。 私は珟圚、 YELL BANK ずいうプロダクトのEPMをしおいたす。 EPMの圹割ずしおはざっくりですが、以䞋のようなこずを日々やっおいたす。 * 開発のリヌドや開発プロセスの改善 * 蚭定したリリヌススケゞュヌルぞの責任 * プロダクトのクオリティの担保 * プロゞェクト、プロダクトの技術的な阻害芁因の排陀 * ステヌクホルダヌずの適切なコミュニケヌション * 意思決定や゚スカレヌションの実斜 特に私ずしおは、早期リリヌスずリリヌス頻床には重きを眮いおいおいたす。 最初の䌁画では3ヶ月かかる想定のものでも、スコヌプの調敎をするず1ヶ月になりそうか? もしかしたら、工倫すればもっず早くリリヌスできないかを考えおいく感じです。 なぜなら、我々の぀くっおいるプロダクトは䞍確実性だらけなので、わからないこずばかりです。 それらの䞍確実性ず向き合っおいくには少しでも早くリリヌスしお孊習を重ねおいくしかありたせん。 では、リリヌスした結果を孊んでいくにはどうしたらいいでしょうか? 特にチヌムメンバヌは党員が゚ンゞニアずいうわけではありたせん。それぞれの立堎で芋る景色が違うため、KPIのような䞀定の定量的な指暙を北極星にしお目線をそろえおいく必芁がありたす。 そこで、目線をそろえるために定量的な指暙を管理しおいくためにデヌタ基盀が登堎したす。 デヌタ基盀ずEPM 䞀般的にデヌタ基盀ずいうず、Data Ware House(DWH)やらデヌタレむクずいった蚀葉がでおくるのではないでしょうか。 我々ずしおも、デヌタ基盀のDWHには BigQuery を䜿い、BIツヌルには Looker を䜿っおいたす。 もずもず Redash を䜿っおいたしたが、ク゚リ管理の課題などから最近はLookerぞの移行が進んできたした。 Lookerぞの掚進はデヌタプラットフォヌムチヌムが党瀟的にリヌドし、我々BANK チヌム ずしおはそれに則った圢です。 しかし、この状況だず日々のリリヌス倉曎の床に、デヌタプラットフォヌムチヌムぞ郜床䟝頌しおデヌタの倉曎を共有しないずいけないので若干非効率です。 そこである皋床アゞリティを保ち぀぀、人的リ゜ヌスも有限なので䞋のような䜓制での運甚を始めたした。 党瀟的なデヌタ基盀はデヌタプラットフォヌムチヌムが責任を持぀。 BANKチヌムの现かな分析指暙は、日々のリリヌスに責任を持぀EPMが責任を持぀ ETLからELT ではデヌタプラットフォヌムチヌムずEPMがどのように分業を進めおいったを説明したす。 䞀般的なデヌタ基盀においお重芁なプロセスに以䞋の3぀のプロセスが挙げられたす。 * Extract(抜出... デヌタを゜ヌスから抜出する。 * Transform(倉換) ... デヌタを必芁に応じお加工する。 * Load(栌玍)... デヌタ基盀に栌玍する。 䞀昔前では、Extract、Transform、Loadの順に行われたのでETLずいう略称で呌ばれおいたした。聞き銎染みのある方も倚いのではないでしょうか。 この䞭で、䞀番倉曎可胜性が高い箇所はTransformになりたす。分析したい点やプロダクトのリリヌスによるデヌタ倉曎による圱響を受けやすいためです。 埓来のETLプロセスでは、LoadがTtranformに䟝存しおいる圢だったので、Transformの倉曎の圱響をLoadが受けやすいずいう構造でした。DWHを䜜るような芏暡のデヌタだずペタバむト玚のデヌタを扱うこずも珍しくなく、頻繁にLoad凊理を倉曎するこずは珟実的ではないでしょう。そのためTransformを倉曎するこずが難しいずいう状況を生んでしたい、アゞリティを䞋げる芁因だったのではないでしょうか。 䞀方で、最近ではETLの代わりにELTずいう流れが䞻流になっおきたした。぀たりは以䞋ように倉曎可胜性の高い、Transformの凊理を最埌に持っおくるわけです。 実際我々のチヌムでも、アプリケヌションを倉曎した我々自身でデヌタ分析基盀の最終的な内容を倉曎するずいう䜓制を取りたした。そのおかげで、リリヌスした内容の速報を翌日にはダッシュボヌドで䜜ったりずいった柔軟な運甚䜓制を敷くこずができたした。 ぀たり、Transformを我々EPMが責任を持ち、ExtractずTransformは党瀟的な郚分はデヌタプラットフォヌムチヌムが、我々のチヌムが管理しおいるデヌタ゜ヌスはEPMが敎備するずいった分業䜓制ずなりたした。 特に、Lookerだず、 掟生テヌブル によっお気軜にELTが実珟されおいる点で重宝しおいたす。 ク゚リを曞いおTransformを曞く圹割ず、日々のKPIを管理しおダッシュボヌドを䜜る圹割を分けられた点は、他のBIツヌルには難しかった点かなず感じおいたす。 ずはいえRedashなどの他のBIツヌルでもク゚リが曞けるなら、同じような運甚はできるず思われたす。 プロダクトラむフサむクルに組み蟌む 珟圚、我々のチヌムが管理しおいるDatabaseやlog情報をそれぞれ日毎たたは日時でBigQueryに同期する圢を取っおいたす。 基本的にはembulkで䞀郚Python のスクリプトをECSのタスクスケゞュヌリングで実珟しおいたす。 基本的に同期するデヌタは、ほが生デヌタをそのたたBigQueryに入れるようにしおいたす。 分析しやすいデヌタの敎圢ずいった凊理はBIツヌルずいった分析者の近いずころで実珟する方匏をずっおいたす。前述したELTです。 この方匏を採甚した理由ずしおは、デヌタのロヌド郚分はデヌタ量の関係から頻繁な倉曎は難しいず考えた点が倧きいです。分析芳点ずいう倉化のしやすい内容をロヌド郚分に組み蟌むず分析基盀ずしおのアゞリティが䞋がっおしたうこずを懞念したためです。 最近は、PMMずいった日々の斜策に責任を持぀メンバヌも増えおきたので、ダッシュボヌド䜜りはPMMに任せ぀぀ダッシュボヌドに必芁な情報はEPMが責任を持぀ずいった分業䜓制で基盀呚りの掻動をしおいたす。 もずもず、BANKチヌムの゚ンゞニア組織はフルサむクル゚ンゞニアを掲げお党おのプロダクトラむフサむクルに関わるこずを倧事にしおいたす。その䞭に分析基盀ぞのフィヌドバックも組み蟌んだ圢を取るようになったずいえたす。 フルサむクル゚ンゞニアに関しおは同僚の束雪( @applepine1125 )が、 このあずblogを曞いおくれるはずなのでこうご期埅!! 曞いおくれたした。 devblog.thebase.in あず、Lookerを掻甚しお良かった点に日付の情報を以䞋のようにTimeframeずしお定矩しおおくずシヌムレスに週次、月次、Quoaterずいった圢に拡匵できる点は䟿利だなず感じおいたす。 dimension_group: event_date { type: time time_frame: [ time, date, week, month, quarter, year ] } 具䜓的には、日々の振り返り甚のデヌタをそのたた拡匵しお、圹員䌚議の資料にも掻甚できる点です。このこずにより、メンバヌから経営局たで芖点が合わせられるので、芖座に関わらず同じ北極星を远いながら仕事ができおいるず感じたす。 最埌に 今埌の展望ずしお、デヌタ基盀を䜜った䜓制ができたので、プロダクトぞのフィヌドバックの仕組みづくりずそれを掚進しおいくメンバヌの採甚を進めおいきたいず考えおいたす。 珟圚はembulkで雑にデヌタを転送しおいたすが、今埌プロダクトにフィヌドバックするこずを考えるずGlueやSage Makerの掻甚も考えおいけたらなず思っおいたす。 そこで䞀緒にプロダクト䜜っおいく仲間を絶賛募集䞭です。 もしちょっずでも興味あるずか、知芋あるよずいう方ぜひ私たでDMか、以䞋のフォヌムから応募お埅ちしおいたす!! 冷やかしでもいいよ!! open.talentio.com 明日はダヌツが埗意な @ao_kiken さんによる、「チヌムメンバヌの掻動を知る工倫」です。楜しみですね!! 参考文献 プロダクトのデリバリヌ、クオリティに責任を持぀Engineering Program Managerずいう圹割 ↩
この蚘事は 2022 BASEアドベントカレンダヌ 1日目の蚘事です。 こんにちは開発担圓圹員のえふしんです。絶賛、来季の組織構造の蚭蚈䞭なので、䜕を考えながら組織図を怜蚎しおいるかずいうこずを曞いおみたいず思いたす 組織怜蚎の基本ずしおは、サヌビスの拡倧、組織の拡倧に察しお仕事のやりやすさ、スピヌド感を劂䜕に実珟しながら事業を䌞ばしおいくかずいうテヌマで組織を考えおいきたす。 組織構造は各瀟各様のものがあるず思いたすが、倚くの䌚瀟さんではビゞネスのトップラむンを䌞ばすチヌムを䞻䜓に、今ある課題をこなしおいくチヌム構成であるこずが倚いこずでしょう。 たた、ビゞネスの守りを支えるチヌムもありたす。守りの裏返しは攻めず蚀いたすか、䜕かを守り抜くこずで、売䞊や利益の䞋支えを行う課題解決に぀いおは経営課題ずしお䞊がるため、それ専甚のチヌムが䜜られたりしたす。 我々で蚀うず、決枈機胜の保守がそれに該圓したす。決枈機胜はただサヌバを動かしおいるだけで枈むものではありたせん。BASEの䞊で販売される商品をチェックするなどの加盟店管理責任を果たすこずや、悪意のある決枈からショップを守る䞍正決枈管理などが該圓したす。 䞀方で、新機胜開発を専念しおいるWebサヌビスの䌚瀟で、い぀も悩みのタネになるのが、過去に䜜り蟌んでしたった䞍具合修正を誰がどうやっお時間を割いお盎しおいくかずいうこずではないでしょうか。぀たりすでに動いおいるサヌビスのクオリティや安定性の維持の䜜業で、誰がどのようなプラむオリティず責任で担っおいくのかずいう課題です。 事象がクリティカルではない䞍具合修正に傟倒しすぎるず新芏機胜開発が遅れおいる可胜性が高くなり、新芏機胜開発を優先しおいるず、いわゆる技術的負債が解消されないであるずか、プロダクトクオリティが䜎いたたになるずいうリスクがありたす。 こういう郚分はなんらかしらの問題が起きない限りビゞネスむシュヌには䞊がりにくく、マネゞメントは開発チヌムに委ねられおいるのが実情だず思いたす。そしお珟堎では倧なり小なり問題が起きおいるため、このこずに察するゞャッゞメントはCTOが担っおいるのではないでしょうか。 以前、個人のブログでも以䞋のような蚘事を曞いたこずがありたす。 note.com ここで曞いおあるこずをざっくり曞きたすず、足元の゜フトり゚ア資産の維持技術的負債の解消も含む、セキュリティの維持などを行う保守䜜業等の必芁性ぱンゞニアしかゞャッゞメントできない。䞀方で゚ンゞニアの䜜業快適性の維持など、盎接的に売䞊には貢献しないけど、攟眮も良くないずいう間接的なバリュヌぞの貢献でもあったりするので、䜙蚈にその刀断責任を担うためにもCTO職が必芁であろうずいうこずが曞いおあるわけです。 そしお、䞍具合修正等の実䜜業ですが、昚今はCRECustomer Reliability Engineeringなどず蚀うチヌムを䜜っお、顧客満足床を実珟するための組織を䜜るずころもありたす。このチヌムはすごく意矩、意味のある取り組みではありたすが、蚀うお実態は瀟内の誰かが䜜りこんだ䞍具合修正を担う、若干のずばっちり感が吊めないチヌムであるずいう郚分で、感情的な難しさを醞し出したりもしたす。 そもそも、たず適切な䞍具合修正は難しい䜜業です。スキルが問われたす。サヌビスのドメむン知識も必芁なので、ずりあえず人を雇っおきお、盎しおください〜で枈む人はベテラン゚ンゞニアである確率が高いでしょう。 歎史的経緯を調べるためにステヌクホルダヌを理解する人間関係も必芁です。 そういうこずができる人だったら新芏開発もできる可胜性が高いので、ビゞネスプラむオリティを優先する組織では、遅かれ早かれそういう人は新芏開発に回るはずです。 そうではなく、もしベテランの゚ンゞニアの人が教育者的な芖点を持ち、守りの芁を担っおもらえたら最高です。 でもWebサヌビス䌁業は歎史が浅いので、補造業などにいるリタむア間近のベテランの工員の人などはあたり存圚したせん。みんなもっず若いので、新芏開発などを通じお自分のスキルを高めおいきたいず思うのが人情ずいうものでしょう。 なので、CREは、その䌚瀟の歎史的経緯に支えられた属人の掻躍に委ねられおいる組織なんじゃないかなず思ったりしたす。組織構造ずしおは極めお維持が難しいチヌムではないかず考えたりするのですが、どうでしょうかね。理想論ではなくリアリティのあるCREチヌムの䜜り方を是非お聞きしおみたいです。 受蚗感ずいう蚀葉に぀いお 話は倉わりたすが、Webサヌビス䌁業では「受蚗っぜい」ず蚀う蚀葉が䜿われお忌み嫌われるこずがありたす。倚くは、よくない組織構造を起因ずしお「䞊から案件が降っおくる」「スケゞュヌルや仕様などで゚ンゞニアサむドの決定暩や拒吊暩がない」などの「やらされ仕事」ずいう蚀葉に察しお䜿われがちな衚珟です。いわゆる倚重請負の䞋䜍レむダヌの人の話がたくさん出回っおいた時期があったので、こういう蚀葉が䜿われがちです。 僕は以前、受蚗開発も担うWeb制䜜䌚瀟にいたので、䞀次請けであれば、もっず議論もできるし、そもそも芋積もりでお断りもできるし、お客さんやSIerの「䞊に蚀っちゃったから今曎断れない」にぶ぀かるこずはあっおも、そのこずを共有し、最倧限助けおあげようずいう割ず前向きなメンタリティで仕事ができおいたので、受蚗開発も楜しかったです。 ずはいえ埌に、Webサヌビス䌁業に転職をするわけですが、次に䜕をしたかったかずいうず、自分がかけた時間を、すべおそのサヌビスの成長に結び぀けたいずいうこずでした。 どうしおも圓時僕が関わっおいた受蚗開発だず、契玄条件ずしおも玍品するたでがビゞネスで、そのシステムはお客様の資産ですし、それがどう運甚されおいるかたで、圓時は関われなかったので、どう成功した、どう倱敗したのかたでは関われたせんでした。たた新機胜提案なども、お客様にお金をいただかないず責任を持おないずいうオヌバヌヘッドが、圓時の僕のスキルでは無駄だず思っおいたし、䜕よりお客様が刀断できるこずしかできたせん。 ギヌク的なノリで「ずりあえずやっおみる」 自分たちの責任でチャレンゞしおみるなどもできないわけです。 もちろん、これは圓時の僕のスキルず環境がそうだっただけで、最近はDXの名の䞋で、アゞャむルプロセスを䜿いながら運甚を䌎奏するサヌビス開発の受蚗ビゞネスなども立ち䞊がっおきお、レベニュヌシェアの仕組みが連動できれば面癜いですし、DAO的な圢で出資し合うビゞネスもありでしょう。昔より面癜くなっおきたので、個人的にはそういう仕事にも興味がありたす。 ...それはずもかくずしお、Webサヌビスの゚ンゞニアは、そのサヌビスの生殺䞎奪を握っおいるので、新芏開発だけでなく、そのサヌビスの安定性維持、䞍具合修正、セキュリティ、サヌビス運甚なども党郚自分たちの責任の元でこなすべきだず思っおいたす。それこそが䞻䜓的にWebサヌビスに携わる゚ンゞニアの矜持だずも思っおいたす。 でも、どうしおも仕事ずしお芋るず、開発蚈画にあるプロゞェクトを優先的にやらなきゃっお思う人もいたすし、たしかにそれは重芁なのですが、かず蚀っお、それだけに心を囚われおしたうのも、僕はむしろ「受蚗っぜいず蚀われやすい䟡倀芳かな」っお思うずころもありたす。 もっずワガママに自分たちが守っおいるサヌビス党䜓を守るんだずいう意識の元で、新芏プロゞェクトもこなし぀぀、サヌビスを維持する゚ンゞニアリングスキルを高めおいく方が絶察楜しいず僕は思っおいたすし、それができた人が、圓瀟でもCTOであったりプリンシパルテックリヌドなどの重責に぀いおいるこずは、䞀応曞いおおきたす芁するにその䞻䜓性、スピヌド感ず技術力を兌ね備えた人材がわかりやすく゚ンゞニアずしお出䞖するノりハりずいうこずです 攻めず守りを䞡立させる 我々のSlackには、#cs_qずいうお客様からの問い合わせの䞭で技術的な調査や回答を行うチャンネルがありたす。 以前は組織も小さかったので、基本的に問い合わせに気が぀いた人が回答するずいう牧歌的なコミュニケヌションチャンネルでしたが、い぀しか問い合わせも増え、人も増えた流れで、CTOやプリンシパルテックリヌドが、ただその肩曞が぀く以前から問い合わせ察応に他の人達よりも爆速で察応し続けおしたい、か぀圌らが持っおいる開発プロゞェクトもスケゞュヌルに間に合うようにするために残業時間が爆増したため、その負荷分散のために、圓番制で担圓するように倉わりたした。 今は、マネヌゞャ刀断で#cs_q察応の圓番リストから倖さない限りは、原則ずしおプロゞェクトに参加しおいる゚ンゞニアも含めお、党員䜓制で察応をしおいたす。 以前のアドベントカレンダヌでもこういう蚘事を曞いおいたす。 devblog.thebase.in 我々は珟圚、こういう䜓制で察応をしおいたすが、䞀方で、どうしおも珟堎目線では#cs_q察応はプロゞェクトが遅れる芁因ずしお語られたりするため、ビゞネス最適化ずいう偎面では、こういった守りの察応のための別チヌムを組成しおみおはずいう話が出おくるわけです。 なので、組織構造をトップラむンを䌞ばす方向だけに最適化するずそういう話になっおしたうわけです。ビゞネスゞャッゞメントを優先しすぎおサヌビスの安定性、継続性、゜ヌスコヌドの劣化に䌎う開発生産性が損なわれおいくようなこずにはならないように、か぀、Webサヌビスの゚ンゞニアずしお、自分たちで䜜ったものは自分たちで盎す、ずいう圓たり前のこずをやり続けられる組織構造を維持しないずいけないずは思っおいたす。これはテックベンチャヌずしおのこだわりポむントではないかず思っおいたす。 もちろん管理者目線では䞡立できる組織構造でそれぞれが最速で動くような組織の方がきれいなので、将来はそうなったらいいなずは思いたすが、゚ンゞニア目線では「それでWebサヌビスに携わっおるず蚀えるのかなぁ、仕事楜しいのかなぁ」ずいう気持ちを持ちながら、぀の䟡倀芳を考えおいるずいう感じですかね。 責務のドメむン分割が䜜業効率にだけ最適化されただけの状態が正解だずは思わないずいう話でしお、答えの出ない話ではあるのですが、うっかりするず自分自身も効率性だけを考えお組織蚭蚈をしがちだったりするので、気を぀けなきゃなず考えながら組織図案を曞いおる今日このごろです。 アドベントカレンダヌ 日目はBASE BANKチヌムの氞野( @glassmonekey )さんによるデヌタ分析基盀の管理運甚に぀いおの話です。お楜しみに 2022幎のアドベントカレンダヌのスケゞュヌル
こんにちはBASE product blog線集郚です。い぀も匊ブログの蚘事をご芧いただきありがずうございたす あっずいうたに2022幎も幎の瀬。幎の瀬ずいえばそうアドベントカレンダヌ! 今幎も恒䟋のBASEメンバヌによるアドベントカレンダヌを開催したす 過去の様子 2021幎のアドベントカレンダヌ 2020幎のアドベントカレンダヌ 2019幎のアドベントカレンダヌ 2018幎のアドベントカレンダヌ 今幎も1日1蚘事に限定せずたくさんのバラ゚ティ豊かな蚘事を公開する予定です。 公開され次第以䞋のカレンダヌも随時曎新しおいきたすので、ぜひお楜しみに 蚘事のカレンダヌ 日付 曜日 執筆者 テヌマ・タむトル 12/1 朚 @fshin2000 Webサヌビスの開発チヌムが担うべき攻めず守りずいう぀の圹割 12/2 金 @glassmonekey アゞリティを保っおデヌタ基盀を䜜る取り組み 12/3 土 @ao_kiken チヌムメンバヌの掻動を知る工倫 12/4 日 @Panda_Program Vue 2 + TypeScript 環境に Testing Library を導入する 12/5 月 @toshi_oliver AWS LambdaをPHPで䜿うためのベストな方法 12/6 火 @kon_engineer @yusaku スクラム開発で数スプリント先の未来の萜ずし穎を回避する ⁠ 幎間500回1on1した結果わかった倧事なこず 12/7 æ°Ž @satoshi_takemoto @tosh 入瀟しお1ヶ月経ったのでBASEのオンボヌディング䜓隓を玹介したす カヌトチヌムを振り返る 12/8 朚 @takashi_matsuyuki @yuki_tsukita Real World Full Cycle Developers ナヌザヌリサヌチずABテストで効果的なマヌケティングが実珟した話 12/9 金 @gatchan0807 @yuripi ⁠ プロダクトの小さな負を解消する有志掻動の振り返り オンラむンでのチヌムビルディングで意識をしおいるこず 12/10 土 @gan.seki ファットな泚文怜玢モデルをリファクタした話 12/11 日 @izuhara reportシステムの業務改善で経理業務が曎に短瞮した話 12/12 月 @naoki.munechika BASEに転職したUI/UXデザむナヌが入瀟埌1ヶ月で感じおいるこず 12/13 火 @shibu_t @wakana UXラむティングのレビュヌ工数をtextlintで90%削枛した件 若手゚ンゞニアの自分にずっおBASEが最高の成長環境だった話 12/14 æ°Ž @matzz @yuni リモヌトワヌクで膚らみ続けた俺の自宅環境のすべおを詰め蟌む 知っお欲しい資金調達サヌビス「YELL BANK」の掚しポむント 12/15 朚 @funasaka チヌムの胜力を数倀化しお今埌の成長方針を立おおみた 12/16 金 @yanagawa リモヌトワヌクを乗りこなすために自己開瀺の仕組みを䜜っおいる話 12/17 土 @zan BASEに入瀟しお感じたSpeak Openlyの良いずころ3遞 12/18 日 @chihirokym @cureseven @ngsw アドベントカレンダヌでBASEデザむナヌず2022幎を振り返る Large-Scale ScrumLeSS䜓隓蚘 SRE関連Issue、7幎分を振り返る - BASEプロダクトチヌムブログ 12/19 月 @Shunsuke @ShoTakeuchi 型安党なPythonで堅牢なアプリケヌション開発 BERTを利甚した商品カテゎリの掚論基盀を䜜りたした 12/20 火 @yuzuy @ayako-hotehama BASEカヌドにおけるキャッシュバックの蚭蚈 BASEに入瀟しお3ヶ月間で、ありがたいなず感じおいる3぀のこず 12/21 æ°Ž @ogata2104 @tadamatu 䞊堎3幎目、改めおIT統制に぀いお考える BASE党䜓のむンフラ知識底䞊げのため AWS JumpStart に参加しおもらいたした 12/22 朚 @02 @tsubo BASE技術むベント登壇振り返り2022 新芏事業のプロダクトマネヌゞャヌが入瀟ヶ月で取り組んだこず 12/23 金 @FUJIIMichiro @Linda テキスト䜓隓のデザむンの先に芋えたUXラむティングメ゜ッドの未来 経営戊略宀ず僕たちが信じる未来 12/24 土 @rerenote Pay IDの開発組織をマネヌゞャヌがパッション倚めで玹介するよ 12/25 日 CTO gg BASEのCTOが゚ンゞニアリングマネヌゞャヌに求めおいるこず 幎間の瀟䌚人経隓を経お、倧切だず思った぀のこず
はじめに はじめたしお、CSE (Corporate Solution Engineering 1 の䞊野です。 今回は BASE Partners ずいう事業で䜿甚しおいた Google フォヌムを S3 + API gateway + Lambda (+ Aurora) を䜿甚した Serverless 構成のフォヌムに移行するずいうプロゞェクトに぀いおお話したす。 倉曎前の構成図ず構築した構成図ずしおは以䞋のようになりたす。 倉曎前 倉曎埌 BASE Partners に぀いお BASE では新芏のショップオヌナヌ様を玹介・支揎いただくオフィシャルパヌトナヌを募集するパヌトナヌプログラムを運営しおいたす。 それらの申請には初期的には Move fast に行うため、Google フォヌムず Google スプレッドシヌトが䜿甚されおいたしたが、ありがたいこずにパヌトナヌ様やご玹介いただいたショップ様は順調に増加し、それに比䟋しお、誀申請ずそれによるやり取りが増加するなど、業務負荷が高たっおいたした。 既存の仕組みが Google フォヌム → Google スプレッドシヌト → DB ぞバッチ取り蟌み ずいう流れのため、申請者がリアルタむムに申請した内容が正しいかどうかがわからないずいうのが誀申請の䞻な原因だったため、フォヌムから盎接 DB を参照できるよう、フォヌムを移行するこずに決定したした。 技術遞定 移行するにあたっお、たずはどの技術を䜿甚するかずいうずころから怜蚎をはじめたした。今回はサヌバヌを管理・運甚する人的リ゜ヌスがない、などの理由から少しでも運甚が軜枛できるよう S3 の静的サむトホスティングず API gateway、Lambda を甚いた Serverless の構成ずするように決定したした。蚀語に぀いおは、BASE では PHP がよく甚いられおいたすが、Lambda では PHP は公匏ではサポヌトされおいないため、CSE で Lambda を䜿甚する際によく甚いる Python を遞択したした。 たた、Serverless アプリケヌションの管理は、CSE で䜿甚実瞟のあった Servewrless Application Model SAMを䜿甚するこずにしたした。 SAMによる実装 ネットワヌクの蚭定 Lambda から既存の DB にアクセスする必芁があるため、VPC、Subnet、Security Group の蚭定が必芁になりたす。 今回の実装では Terraform でネットワヌク等を管理しおいる別リポゞトリがあるため、実装ずしおはありたせんが、䞋蚘のような構成ずなるようにそれぞれ蚭定したした。 VPC、Subnet、Security Group の蚭定埌、SAM の template.yaml の VpcConfig 蚭定で Lambda に Subnet ず Security Group の蚭定を付䞎したす。 Resources : SomeFunction : Type : AWS::Serverless::Function Properties : CodeUri : functions/ Handler : some_function.lambda_handler Runtime : python3.9 Architectures : - x86_64 VpcConfig : SecurityGroupIds : - <SecurityGroupId> # 構築したセキュリティグルヌプIDを蚭定 SubnetIds : - <SubnetId> # 構築したサブネットIDを蚭定 CORS の蚭定 S3の静的サむトホスティングのドメむンず、API gateway のドメむンが異なるため、Cross-Origin Resource Sharing (CORS) の蚭定が必芁になりたす。 API gateway ず Lambda の䞡方に蚭定が必芁になるため、以䞋のような圢で実装をしたす。 template.yaml の実装 䞋蚘のサンプルでは1぀の関数しかありたせんが、実際には耇数の関数が存圚するため、Globals 内で api に Cors プロパティを蚭定したす。 今回実装した API は POST メ゜ッドがメむンになりたすが、CORS の蚭定をする堎合は OPTIONS メ゜ッドで preflight リク゚ストを送信するため、OPTIONS メ゜ッドの蚭定も必芁になりたす。 Globals : Api : Cors : AllowOrigin : "'<origin>'" AllowCredentials : false AllowMethods : "'POST,OPTIONS'" AllowHeaders : "'<headers>'" Resources : SomeFunction : Type : AWS::Serverless::Function Properties : CodeUri : functions/ Handler : some_function.lambda_handler Runtime : python3.9 Architectures : - x86_64 VpcConfig : SecurityGroupIds : - <SecurityGroupId> SubnetIds : - <SecurityGroupId> Events : SomeApi : Type : Api Properties : Path : /path Method : post Lambda の実装 API gateway の Lambda プロキシ統合の堎合、バック゚ンドの Lambda 関数でも Access-Control-Allow-Origin および Access-Control-Allow-Headers を返す必芁があるため、以䞋のように返り倀の headers に蚘茉したす。 2 def lambda_handler (event, context): ... return { "statusCode" : 200 , "headers" : { 'Access-Control-Allow-Headers' : 'Content-Type' , 'Access-Control-Allow-Origin' : '<ORIGIN>' , 'Access-Control-Allow-Methods' : 'OPTIONS,POST' }, "body" : json.dumps({ ... }), } デプロむの自動化 続いおデプロむを自動化する仕組みに぀いおです。 今回は倧きなアプリケヌションでは無いので GitHub Actions で SAM の deploy コマンドを実行する簡易的なものを䜿甚したした。 たた、デプロむに䜿甚する認蚌は、初期的には GitHub Secrets を䜿甚しようず思っおいたしたが、OpenID Connect であればクレデンシャル情報の挏掩などのリスクがなく、適切に䜿甚すればよりセキュアであるずいうこずを知り、OpenID Connect を䜿甚するこずにしたした。 OpenID Connect の IAM Role 蚭定 ID プロバむダの远加 たずは以䞋の蚭定で GitHub を ID プロバむダずしお AWS に远加したす。 Provider URL : https://token.actions.githubusercontent.com Audience : sts.amazonaws.com IAM Role の䜜成 次に認蚌埌に䜿甚する IAM Role を䜜成したす。 たず Policy で先皋蚭定した GitHub の ID プロバむダを Principal に蚭定し、Action で sts:AssumeRoleWithWebIdentity を指定したす。 { " Version ": " 2012-10-17 ", " Statement ": [ { " Effect " : " Allow ", " Principal " : { " Federated ": [ " arn:aws:iam::<account_id>:oidc-provider/token.actions.githubusercontent.com " ] } , " Action " : " sts:AssumeRoleWithWebIdentity ", " Condition " : { " StringLike ": { " token.actions.githubusercontent.com:sub ": [ " repo:<repository>:* " ] } } } ] } 今回は SAM のデプロむをするため、以䞋のポリシヌをアタッチしたす。 - IAMFullAccess - AmazonS3FullAccess - AmazonAPIGatewayAdministrator - AWSCloudFormationFullAccess - AWSLambda_FullAcces GitHub Actions の実装 先に蚭定した IAM Role を䜿甚しお、自動デプロむを実行する GitHub Actions を実装したす。 name : 'deploy' on : push : paths : - 'template.yaml' - '.github/workflows/deploy.yml' - 'functions/**' branches : - 'branch' env : AWS_ROLE_ARN : 'arn:aws:iam::<aws_account_id>:role/<OIDC_ROLE_NAME>' permissions : id-token : write contents : read jobs : deploy : runs-on : ubuntu-latest steps : - uses : actions/checkout@v2 - uses : actions/setup-python@v2 - uses : aws-actions/setup-sam@v1 - uses : aws-actions/configure-aws-credentials@v1 with : role-to-assume : ${{ env.AWS_ROLE_ARN }} - run : sam build --use-container - run : sam deploy --config-env <env> --no-confirm-changeset たずめ 本蚘事では、業務改善を目的ずした API gateway ず Lambda による Serverless なフォヌムの構築に぀いおお話したした。 業務改善の芳点ずしおは、移行しお間もないためどのくらいの改善ができたかずいう定量的な指暙はないものの、最初に蚘茉しおいた誀申請での問い合わせは削枛するこずができたした。 たた、API gateway、Lambda での CORS の蚭定の蚘事や、OIDC に぀いおの蚘事など、各論の蚘事は倚々あるものの、党䜓の実装をたずめたものが少ないず思ったので、参考になれば幞いです。 感想 AWS に觊れるのは BASE に入瀟しおからだったのですが、経隓が少ない䞭でも挑戊させおもらえおずおもいい経隓ができたした。 以前公開された若菜の蚘事 にも 手を挙げるこずでやりたいこずに積極的にチャレンゞさせおもらえる ずいう瀟颚がある ずありたすが、たしかにそういった瀟颚があるずいうのを䜓感するこずができたした。 たた、コヌポレヌト゚ンゞニアずいうずベンダヌコントロヌルがメむンずいうむメヌゞや、レガシヌなシステムの保守がメむンだずいうむメヌゞがある方もいらっしゃるかず思いたすが、BASE では実装や技術遞定など様々なフェヌズやAWS、Serverless などモダンな技術も経隓ができる、ずいうこずを知っおいただければ幞いです。 最埌に BASE では積極的にチャレンゞがしたい゚ンゞニアを募集しおいたす。カゞュアル面談も実斜しおいたすので、興味を持っおいただけた方はぜひお気軜にご応募ください。 https://open.talentio.com/r/1/c/binc/homes/4380 CSE に぀いおは こちらの蚘事 を参照ください ↩ AWS 公匏ドキュメント ↩
基盀チヌムに所属しおいる @okinaka です。 個人的には CakePHP ずは長い付き合いで、もう14幎以䞊になりたす。 BASE の事業においおも10幎間ずっず支えおくれおいる倧倉ありがたい Web フレヌムワヌクです。 以前から BASE の倚くのコヌドはただ叀い CakePHP 2 (v2.10.24) 䞊で動䜜しおいるこずが課題になっおいたす。 CakePHP 自身は順調に開発が継続されおいたすが、2系から3系ぞのバヌゞョンアップはなかなか困難で二の足を螏んでいたした。 そうこうしおいるうちに叀いバヌゞョンの2系は既に公匏でのサポヌトは切れおいるうえに PHP 8.0 未サポヌトの状態です。 さすがにそのたた継続しお利甚するのは無理があるので、数幎前から、より柔軟にシステムを構築するためのアヌキテクチャ再蚭蚈をすすめおいたす。 その成果は䞊がっおきおいるのですが、単玔なフレヌムワヌクのバヌゞョンアップにずどたらず、根本的なアヌキテクチャを再蚭蚈しおいるずころなので、党おが刷新されるたでには、ただただ既存の仕組みを利甚するこずが続きそうです。(アヌキテクチャの再蚭蚈に関しおは、プラットフォヌムチヌムが別の機䌚で玹介するこずになるず思いたす。 さぁ、倧倉。PHP 7.4 の EOL (2022-11-28) も迎えお、もう埌のない状態、このたた先に進むには PHP 8.0 以䞊に䞊げる必芁に迫られおきたした。 PHP 8.0 でも意倖ず動くよ ありがたいこずに、CakePHP 2 を公匏のリポゞトリからフォヌクしお PHP 8.0 察応されおいる方がいるこずを CakePHP の Slack チャンネルで知りたした。 https://github.com/kamilwylegala/cakephp2-php8 お詊しでやっおみたら、すんなり動くではありたせんかいけるず思ったのですが、䞀぀だけ問題がありたした。 それは自動テストは、未察応なのでした。 ずいうこずで、PHP 8.0 で動䜜するために必芁な PHPUnit 9 察応を独自にやっおみたらできたずいう報告です。 PHPUnit 9 に察応しおみる 前眮きが長くなっおしたいたしたが、本題に入りたす。 PHPUnit 9 は PHP 7.3 以䞊に察応しおいたすので、いきなり PHP 8.0 たで䞊げる必芁はありたせん。 今回は公匏の CakePHP 2.10.24 (& PHP 7.4) のたたで PHPUnit 9 に察応しおみたす。 倧きな芁点は2点ありたす。 CakeTestCase や ControllerTest を継承しない (あるいは差し替える) cake test を䜿わずに盎接 PHPUnit を実行する 他にも现かなポむントはたくさんあるのですが、さらに長くなりそうなので以䞊で留めおおきたす。 CakeTestCase や ControllerTest を継承しない (あるいは差し替える) ずおも残念なこずですが、PHPUnit のバヌゞョンアップ(phpunit>=8.0)に䌎い埌方互換性のない倉曎があったため、CakeTestCase や ControllerTest を継承しおテストを曞くこずはできなくなりたした。 TestCase の setUp() や tearDown() などのメ゜ッドの戻り倀に型宣蚀が远加されたためです。 こればかりは、フレヌクワヌク偎を修正するしかないので、応急措眮ずしお CakeTestCase をコピヌしたクラスを甚意したした。 名前空間がなく、独自のクラスロヌダヌを利甚しおいるメリットを掻かし、 app/TestSuite/CakeTestCase.php を配眮するこずで、 App::uses('CakeTestCase', 'TestSuite'); ず曞かいおいるず、オリゞナルではなくコピヌの方が読み蟌たれたす。 察応䟋は こちら 。 盎接 PHPUnit を実行する CakePHP 2 では、 cake test ずいうコマンドが甚意されおいお、内郚では PHPUnit を動かしおいたす。 叀いPHPUnit 向けのロゞックが曞かれおいるため、これを䜿うこずを避けお PHPUnit を盎接実行したす。 匊瀟では、バヌゞョンアップ以前から PhpStorm などの IDE の支揎を受けるために PHPUnit を盎接利甚したいずいう理由で察応しおたした。 そのための察応方法は GitHub の issue に匊瀟の tenkoma さんが玹介しおいたすので参考になりたす。 https://github.com/cakephp/cakephp/issues/12700#issuecomment-444150548 テストコマンド起動時のおたじない少々ずフィクスチャ呚りのロゞックの远加が必芁でした。 なお、CakePHP 2 には web 䞊からテストを実行する機胜があるのですが、その機胜は切り捚おるこずになりたす。(IDE や CI でテストする分には䞍芁なのでなくおも困らないず思いたす。) 察応䟋は こちら 。 サンプル 今回のブログのために、CakePHP 2 で PHPUnit 9 を動かすサンプルを䜜成しおみたした。 CakeTestCase のためのテストケヌス (CakeTestCaseTest) を甚意したした。GitHub Actions の workflow を䜿っお自動テストにも察応しおいたす。 https://github.com/okinaka/cakephp2-phpunit9-sample おわりに 本来、フレヌクワヌクは垞に最新バヌゞョンを䜿うこずが奜たしいこずなのですが、自動テストがあれば、叀いバヌゞョンを䜿っおいおも安心できるず思いたす。 (あくたで移行完了たでの䞭継ぎずしおですが) この蚘事で、CakePHP のバヌゞョンアップができずに叀いバヌゞョンを延呜しようかどうか迷っおいる方に参考になれば幞いです。
はじめに 2022/11/19土に開催される フロント゚ンドカンファレンス沖瞄2022 にBASEに所属する4名の゚ンゞニアが登壇したす。 BASE ではこれたでいく぀ものフロント゚ンド に関連するテックブログ蚘事やむベントぞの参加を行っおたいりたした。 そしお今回は、フロント゚ンドがテヌマずしおあり぀぀も、職皮問わずWebに携わる方が楜しめるむベントずいうこずで協賛いたしたした。 フロント゚ンドカンファレンス沖瞄2022に぀いお フロント゚ンドカンファレンス沖瞄2022ずは、デザむナヌも゚ンゞニアも、職皮問わずWebに携わる方が楜しめるむベントです。 BASEは、ゎヌルドスポンサヌずしお本カンファレンスに協賛しおいたす。 スポンサヌ玹介 BASE 様 BASEはどなたでも簡単にネットショップを䜜れるサヌビスです。「Payment to the People, Power to the People.」をミッションに、180䞇ショップを超えるショップ様に安定したサヌビスを提䟛しおおりたす。 #front_okinawa https://t.co/SQcoK6eTQK — フロント゚ンドカンファレンス沖瞄 (@fec_okinawa) 2022幎11月10日 セッション内容 mk0812@mk0812__ mk0812 です。今回5分のLTに登壇したす。タむトルは「 Figma TokensずStyle Dictionaryから始めるデザむナヌず゚ンゞニアが連携しやすい取り組みの話 」です。デザむナヌず゚ンゞニアの連携呚りで5分では党おは語れないですがFigma Tokensなどを甚いお効率化などできるような話をしおいきたいです是非ご芧ください fortee.jp 千葉リリィ @chiba_rry  千葉リリィ ですすこし前に「 Reject Conference - Vue Fes Japan Online 2022 」ずいうむベントでも登壇したしたが、そこで少し觊れた OpenAPI の API Client 自動生成に぀いおお話ししたす。 ずはいえ今回は5分の LT なので、党郚は語りきれず゚ラヌハンドリングにフォヌカスした発衚ずなりたす。 ちなみに資料進捗は0です先日 @mk0812 が早速レビュヌ䟝頌出しおお速くおえらいなぁず思いたした。これからがんばりたす。 fortee.jp プログラミングをするパンダ@Panda_Program  プログラミングをするパンダ@Panda_Program  です。今回は「フロント゚ンド゚ンゞニアず個人開発の楜しみ」ずいうタむトルで、個人開発に぀いお発衚したす。 今資料を䜜成しおいるのですが、30分ずいう枠を貰っおいるものの玠案の段階では倚分30分に収たらないです笑 内容盛りだくさんなのでぜひご芧ください fortee.jp aokiken (@ao_kiken) aokiken です。二幎前のアドベントカレンダヌで曞いた「 Web開発を補助する目的でPuppeteerを䜿う 」の2022幎版を5分のLTをしたす タむトルは「Web開発を補助する目的でPlaywrightを䜿っおいる話」になりたす ブラりザ操䜜自動化、E2Eテストに興味がある方ぜひご芧ください devblog.thebase.in 最埌に フロント゚ンドカンファレンス沖瞄2022は、公匏ペヌゞにお参加申蟌可胜です。 今回我々はオンラむンでの参加になりたすが、SNSなどでわいわい盛り䞊がりたしょう。 frontend-conf.okinawa.jp