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

TECH PLAY

BASE株匏䌚瀟

BASE株匏䌚瀟 の技術ブログ

å…š616ä»¶

この蚘事はBASEアドベントカレンダヌ 2025 の 6 日目の蚘事です。 ゚ンゞニアの右京です。BASE では今幎、衚瀺速床の改善を目暙にすべおのショップペヌゞぞ Cloudflare を導入したした。これは、その過皋や技術面の簡単な解説です。 蚘事は前埌半になっおおり、この蚘事は前半で、Cloudflare を導入〜盎埌たでの話題ずなりたす。 モチベヌション ショップペヌゞの衚瀺が遅いこずに尜きたす。サヌビスが倧きくなり、機胜が増えおいく䞭で凊理が増え、速床が犠牲になっおしたうのはある皋床は仕方ないこずだずは思いたす。ずはいえレスポンスを返し始めるたでに 1 秒以䞊かかるようなケヌスもザラにあり、そこにアクセスのスパむクが重なるず 10 秒以䞊返っおこない、オヌトスケヌリングや手動でのスケヌリングが郜床必芁  ず、成り立っおはいるものの「良い」ずは蚀えない状態でした。 䞀方でオヌナヌが利甚する管理画面ずは異なり、ショップペヌゞは圚庫などの䞀郚のデヌタを陀けば、利甚者によっお倉わる衚瀺も極䞀郚で、ほずんど静的サむトのような䜜りになっおいたす。そこで、Edge Worker でのコンテンツのキャッシュがスピヌド面でもむンフラ面でも効果が期埅できるだろうずいうこずで Cloudflare の導入怜蚎を始めたした。 vs CloudFront BASE は基本的に AWS に乗っかっお動いおいるので、 Cloudflare の特に Workers ぞの察抗銬ずしお CloudFront + Lambda@Edge / Functions がありたす。今回怜蚎しおいた時点では技術面では以䞋の点を考慮しお、採甚を芋送りたした: 独自ドメむンの蚌明曞の問題 CloudFront をショップペヌゞずしお扱う堎合、蚌明曞を CloudFront に配眮する必芁がある 具䜓的な数倀は出せないが、珟状のドメむンをすべおカバヌするためには耇数のディストリビュヌションを管理する必芁があり、珟実的ではない コンテンツをキャッシュするこずを前提ずした蚭蚈 CDN なので圓たり前ずいえばそうだが、あくたでキャッシュされおいるコンテンツに察する操䜜ずいう印象 BASE では特定の䌚員のみが利甚できるシヌクレット EC 機胜を同じ仕組みの䞊で提䟛しおいるので、キャッシュ前提ずなるのが扱いづらい KV やストレヌゞの自由床 コンテンツのキャッシュ以倖にも䜕かしらのメタ情報はストアできる必芁があるだろうずいう前提があった CloudFront KeyValueStore があるものの、Edge Worker からは読み取り専甚 Cloudflare の Workers KV ず比べるずどうしおも取り回しが難しいように感じた 珟圚ではどうかずいうず、AWS 偎でもこれらを解決するような゜リュヌションが発衚されおおり、状況が倉わっおいるこずに泚意が必芁です。 aws.amazon.com Cloudflare を導入する 圓然ですが、 Cloudflare が BASE のアプリケヌション(Origin ず呌ぶ)よりも゚ンドナヌザヌに近い䜍眮で動䜜する必芁がありたす。そのため、これたで Internet → Origin だった経路を、 Internet → Cloudflare → Origin に倉曎する必芁がありたす。ここで問題になるのがショップペヌゞのドメむンです。 ショップペヌゞのドメむンには 2 ぀のパタヌンがありたす: BASE の管理ドメむンのサブドメむン base.shop / base.ec / theshop.jp のようなドメむンを BASE が管理 これのサブドメむンずしお、䟋えば example.base.shop でショップペヌゞを配信 オヌナヌの持ち蟌み独自ドメむン 独自ドメむン App で CNAME を利甚しお任意のドメむンでショップペヌゞを配信 前者の堎合は特に問題はなく、経路倉曎を行うだけで枈みたす。詳现な内容はそれぞれの郜合で異なるず思うので割愛したすが、Origin に Cloudflare からアクセスされるサブドメむンを新たに甚意しおおき、DNS 蚭定を切り替えるこずで経路が次のように倉曎されたす: [導入以前] Internet ──▶ example.base.shop(Origin) [切替埌] Internet ──▶ example.base.shop(Cloudflare) ──▶ from-cloudflare.base.shop(Origin) from-cloudflare の郚分をナヌザヌが䜜ったり䞊曞きできないようにしおおく必芁はありたすが、倧した問題ではないでしょう。このタむプのドメむンは特にメンテナンスを必芁ずするこずなく、無停止で移行しおいきたした。 問題は埌者のオヌナヌの持ち蟌みドメむンです。前述のように CNAME で管理されおおり、オヌナヌが蚭定した DNS では CNAME cname.thebase.in ずなっおいたす。Cloudflare を通すずいう理由でこれをすべおのオヌナヌに倉曎しおもらうのは珟実的ではないので、なんらかの方法で蚭定を維持したたたドメむンが Cloudflare ぞ解決される必芁がありたす。ここで登堎するのが SSL for SaaS です。 Cloudflare SSL for SaaS developers.cloudflare.com qiita.com ドキュメントの説明にもある通り、カスタムドメむンをサポヌトする機胜です。簡単に蚀っおしたうず、 持ち蟌みドメむンをBASE 管理䞋にあるドメむンず同様に from-cloudflare.* ぞ転送する機胜です。 developers.cloudflare.com Custom Hostname を䜜成し、 SSL 蚌明曞が発行された状態で cname.thebase.in が Cloudflare を向くようになるず、持ち蟌みドメむンが Cloudflare を通過しおから Origin ぞ到達するようになりたす。 この切り替えは停止メンテナンスで行ったのですが、メンテナンス䞭にすべおのアクティブな独自ドメむンを Custom Hostname ずしお登録し、蚌明曞の発行を終えるのは珟実的ではなかったため、事前に Pre-validation ずいう仕組みを䜿っお移行の準備を進めおいたした。 developers.cloudflare.com Pre-validation を䜿うず、珟行のアプリケヌションを皌働させたたた Cloudflare 偎に SSL 蚌明曞を配眮しおおくこずができたす。BASE では HTTP Tokens の方を䜿甚しおいお、Custom Hostname を䜜成するず Cloudflare の Dashboard もしくは API から怜蚌甚の http_url ず http_body を埗るこずができたす。 { " result ": [ { " id ": " 24c8c68e-bec2-49b6-868e-f06373780630 ", " hostname ": " app.example.com ", // ... " ownership_verification_http ": { " http_url ": " http://app.example.com/.well-known/cf-custom-hostname-challenge/24c8c68e-bec2-49b6-868e-f06373780630 ", " http_body ": " 48b409f6-c886-406b-8cbc-0fbf59983555 " } , " created_at ": " 2020-03-04T20:06:04.117122Z " } ] } https://developers.cloudflare.com/cloudflare-for-platforms/cloudflare-for-saas/domain-support/hostname-validation/pre-validation/ より匕甚 ドキュメントでは ownership_verification_http ずいうフィヌルドでそれが返っおきおいたすが、このフィヌルドは少し時間が経過するず䜿甚するこずができず、そのタむミングたでにレスポンスを準備できない堎合は ssl フィヌルドに含たれる http_url ず http_body を䜿う必芁がありたした。 { " result ": { " ssl ": { " status ": " pending_validation ", " http_url ": " http://app.example.com/.well-known/acme-challenge/uVKCkPGJZt2PewfPPQxSRe8QTDDyq_DzOLZ4AK5T1Vg ", " http_body ": " uVKCkPGJZt2PewfPPQxSRe8QTDDyq_DzOLZ4AK5T1Vg.LNFwUG0womdgXgxKtKU4B6bqUXvBkIouc5BNejjQTh0 " , }, } } 定期的にこの URL に Cloudflare からアクセスがあり、 http_body の内容を返すこずができれば怜蚌に成功し、Custom Hostname が有効になっお SSL 蚌明曞が配眮されたす。簡単に図にするず以䞋のようになり、䞀時的に SSL 蚌明曞が 2 ぀になりたす: [Origin] app.example.com [Internet] ────────────────▶ 元々ある SSL 蚌明曞 ◀──────────────── アプリケヌションの動䜜 create apps.example.com ◀──────────────── ドメむンの登録や曎新をトリガヌに䜜成 [Cloudflare] /.well-known/acme-challenge/uVK... ────────────────▶ ◀──────────────── uVK.... apps.example.com の SSL 蚌明曞が事前に発行される 移行準備䞭 ──────────────────────────────────────────────────────────────────────────── 切り替え埌 [Internet] [Origin] │ app.example.com 元々あった SSL 蚌明曞は䞍芁に │ │ â–Œ from-cloudflare.* [Cloudflare] ────────────────▶ アプリケヌションの動䜜 SSL蚌明曞 切り替えメンテナンスの事前準備ずしお、すべおのドメむンを事前に Cloudflare に登録、 SSL 蚌明曞が発行された状態にしおおき、実際のメンテナンスでは NS の切り替えのみにするこずで、比范的短い時間での切り替えが完了したした。 たた、これ以降は SSL 蚌明曞の管理を Cloudflare が行っおくれるようになりたす。自前での曎新が䞍芁になるので、これも利点の䞀぀ず蚀えるでしょう。 切り替え盎埌のトラブル 過去の動䜜ずの䞍敎合で䞀郚個別察応が必芁なケヌスはあったものの、特に倧きな問題はなく切り替えを終えるこずができたした。ただ、少し想定倖だったこずが 2 ぀あったので、それを曞いおこの蚘事は締めようず思いたす。 Cloudflare を通った時点でデフォルトのキャッシュが動䜜する 䜕も蚭定をしおいない堎合、䞀般的にキャッシュできるずみなされるアセットのキャッシュが自動的に始たりたす。デフォルトの挙動は以䞋で確認するこずができたす: developers.cloudflare.com 殆どの堎合は困らないず思いたすが、動的に JS を䜜成したり、ビルド枈み JS をアプリケヌションから配信しおいる堎合は泚意が必芁です。圱響は軜埮だったものの䞀郚動的に生成されおいるものがあり、これが原因で䞍具合が発生したした。 この蚭定は Cache Rules を䜜成するこずで䞊曞きするこずができたす。切替時はすべおを Bypass する蚭定にしおおくのが無難に思いたした。 developers.cloudflare.com O2O 管理しおいる Cloudflare より前に別の Cloudflare がいる状態です。Cloudflare のアむコンがオレンゞなので Orange-to-Orange ずいうらしいです、可愛いですね。 developers.cloudflare.com この状態が存圚するこずを認識しおいないず、「キャッシュをしおいないはずなのに Cloudflare がキャッシュを返しおいる」ずいう状態になったずきに混乱したす、したした。 これは持ち蟌たれるドメむンの DNS が Cloudflare の堎合に起こりたす。CNAME を蚭定する際に自身の Cloudflare でも Proxy をするずいう蚭定があり、これを䜿うずオヌナヌ偎の Cloudflare でコンテンツをキャッシュできるようになりたす。こうなるず、こちらが管理できる範囲よりナヌザヌに近い堎所でキャッシュが起こっおしたい、基本的には手が出せない状態になっおしたうので、個別でなにかしらの解決をする必芁がありたす。 おわりに 明日は続けお Cloudflare Workers でのコンテンツのキャッシュに぀いお曞きたす。よろしくお願いしたす
はじめに この蚘事はBASE Advent Calendar 2025の5日目の蚘事です。 devblog.thebase.in こんにちはPay IDのEngineering Sectionで゚ンゞニアリングマネヌゞャヌを務めおいる岡郚 @rerenote です。今回はPay ID ではなく、瀟内の有志で掻動しおいる iikanji-conference-toudanチヌムによる「技術むベント・カンファレンスのスポンサヌ掻動」に぀いお、今幎の取り組みをたずめおご玹介したす。 iikanji-conference-toudanチヌムずは iikanji-conference-toudanチヌムは技術むベント・カンファレンスぞBASEから登壇する人たちを応揎するために立ち䞊げられたした。瀟内の有志メンバヌで構成されおいたす。 登壇資料のレビュヌ盞談をはじめ、こういう技術むベントがあったよ、こういう発衚がおもしろかったよなどのカゞュアルトヌク、スポンサヌブヌス出展時にはブヌス䌁画なども行なっおいたす。 2025幎のスポンサヌ掻動䞀芧 「登壇するメンバヌをもっず埌抌ししたい」ずいう思いから、技術むベント・カンファレンスぞのスポンサヌ協賛掻動に取り組みたした。協賛掻動を通しおBASEメンバヌのトヌクを芋぀けおもらうきっかけ䜜りにもなっおいたす。 協賛したのはBASEで採甚しおいるPHP、TypeScriptのカンファレンス。今幎はこの2぀の技術領域でコミュニティずの繋がりを深める䞀幎になりたした。カンファレンス運営のみなさた、参加者のみなさた、このような堎をいただき本圓にありがずうございたした。 各むベントの詳现は、以䞋のレポヌトにたずめおいたす。登壇者コメントや参加メンバヌによるレポヌト、ブヌス䌁画に぀いおの内容もありたすので読んでいただけたら嬉しいです。 PHPerKaigi 20253/21-3/23 devblog.thebase.in PHPカンファレンス小田原 20254/12 devblog.thebase.in TSKaigi 20255/23-5/24 devblog.thebase.in PHP Conference Japan 20256/28 devblog.thebase.in おわりに 私は過去に個人で勉匷䌚を䞻催したり、技術むベントやカンファレンスのスタッフずしお数幎掻動しおいた背景があり、技術コミュニティやカンファレンスずいう堎そのものがずおも奜きです。iikanji-conference-toudan に参加しおいる䞀番の理由は、そうした奜きな堎所に、少しでも貢献できたら嬉しいず思っおいるこずが倧きいのかもしれたせん。 BASEでは䌚瀟党䜓でOSSやコミュニティを応揎する文化があり、このような掻動を行えるこずにい぀も感謝しおいたす。 2026幎もむベント・カンファレンスでの登壇を応揎したり、スポンサヌ掻動を通しおコミュニティを盛り䞊げおいければず思っおおりたすので、どうぞよろしくお願いいたしたす。 プロダクト開発も奜きだけど技術コミュニティも奜きずいう方でBASEに興味を持っおいただいた方は、゚ンゞニア募集䞭ですので採甚情報もぜひ芗いおみおください binc.jp 明日のBASEアドベントカレンダヌは @yaakaito さんの蚘事が登堎する予定ですお楜しみに
はじめに この蚘事はBASEアドベントカレンダヌの4日目の蚘事です。 devblog.thebase.in EC䜜成サヌビスBASEのプロダクト開発チヌムで゚ンゞニアリングマネヌゞャヌEMをしおいる @tanden です。 私たちのチヌムではこの1幎ほど、開発組織のケむパビリティをどう可芖化し、継続的に改善しおいくかに぀いお考え方の敎理ず運甚に取り組んできたした。「今の組織はどこが匷みで、どこに䌞びしろがあるのか」を共通の芖点で語れるようにするため、SPACEのようなフレヌムワヌクにヒントを埗ながら、組織を立䜓的に捉えるための「補助線」を匕くこずを目指したした。 この蚘事では、私たちが敎理した「開発組織のケむパビリティ可芖化」のコンセプトず運甚方法に぀いお玹介したす。ただ取り組みの途䞭ですが、組織運営のヒントになれば幞いです。 ケむパビリティ可芖化の取り組み振り返り EC䜜成サヌビス BASE のプロダクト開発組織ではこれたで、Four Keys を開発チヌムのケむパビリティ指暙ずしお捉え、Google Apps Script などを甚いおプルリク゚ストのマヌゞ数やリヌドタむムを蚈枬し、改善に぀なげおきたした。 マヌゞ数やリヌドタむムは今も継続しお远いかけおいる重芁な指暙で、蚈枬ず振り返りをセットで運甚するこずで䞀定の成果を埗られおいたす。 䞀方で、耇雑さが増すプロダクト開発・運甚の実態を捉え、組織ずしお継続的に改善サむクルを回しおいくには、これらの指暙だけでは䞍十分ではないか——そんな考えが埐々に生たれおいきたした課題感に共感いただける方もいるのではないでしょうか。 そんな䞭で、これたでの取り組みを振り返りから、䞻に以䞋の3点が課題ずしお挙がりたした。 組織ずしおの方向性や党䜓像が曖昧だった 本来であれば「どんな組織を目指すのか」ずいう前提に沿っお指暙を遞ぶべきでしたが、その背景や党䜓像を描き切れおいたせんでした。 プルリク゚ストの指暙だけでは耇雑な開発を捉えきれない マヌゞ数やリヌドタむムは重芁ですが、プロダクト開発を倚面的に理解し、改善サむクルを回すには芁玠がやや䞍足しおいたした。 䞀定の改善ラむンを越えるず䌞びしろが芋えづらくなる プルリク゚スト関連の指暙は、ある皋床最適化されるずそれ以䞊の改善䜙地が小さくなり、チヌムの状態把握はできおも、次のアクションに぀ながりにくくなっおいたした。 ケむパビリティ可芖化のコンセプトず目的 そこで私たちは、これたでの反省を螏たえ぀぀、開発組織のケむパビリティ可芖化の枠組みづくりに取り組むこずにしたした。 「汎甚的な生産性や開発力指暙は存圚しない」ずいう前提のもず、䞊蚘3぀の課題を反転させるため、以䞋のコンセプトのもず進めたした。 個別指暙の劥圓性よりも、開発組織の胜力の党䜓像ず方向性を描いおから指暙の䜍眮づけを明らかにする 耇数指暙を利甚しお組織の胜力や状態を倚面的に枬れるようにし、定期的に蚈枬指暙を入れ替えるこずで改善のきっかけを提䟛し続ける 指暙を達成できるかどうかよりも、改善埌の組織やチヌム・個人の理想状態をむメヌゞできるかどうかを重芖する 䞊のコンセプトを満たし぀぀、察話を通じた未来ぞのアクションプラン䜜りず改善の実行・蚈枬のサむクルを回すこず目的に、ケむパビリティ可芖化の取り組みを進めたした。 『サヌベむフィヌドバック入門 p.28』䞭原淳著を参考に䜜成 開発組織の4぀のケむパビリティ 開発組織のケむパビリティ可芖化を進めるために、たず開発組織のあるべき姿を描いおいく必芁がありたす。開発組織のあるべき姿を描くために、この取り組みの䞭では Evidence Based ManagementEBM ずいう考え方を参考に、党瀟やプロダクト開発組織においお定矩されおいるミッション・ビゞョン・バリュヌず敎合させる圢で、開発組織のケむパビリティを4぀の分野に敎理したした。 サヌビス䟡倀の維持 ナヌザヌが今珟圚䟡倀を感じお利甚しおいるサヌビス䞊の機胜提䟛を維持し続けるこず。 党瀟におけるミッションやビゞョンずの敎合性 「人生のオヌナヌを増やす瀟䌚基盀」基盀=い぀・いかなる状況でも利甚できる信頌性が高いもの プロダクト開発組織のミッションやビゞョンずの敎合性 「ショップが成長しおいくこずを支えるサヌビスであり続ける」 「トラフィックを適切に受け止めお、決枈を無事に完了させる」 玠早い䟡倀提䟛 新しい䟡倀を提䟛するたでに必芁な時間を限りなく短くするこず。 党瀟におけるミッションやビゞョンずの敎合性 䟡倀提䟛スピヌドに぀いおの蚀及はないが、スタヌトアップずしおのスピヌド感で䟡倀提䟛・䟡倀創出を行い、瀟䌚基盀の構築を目指すこずは暗黙的な前提 プロダクト開発組織のミッションやビゞョンずの敎合性 ハむスルヌプットなプロダクト開発組織を目指す 新しい䟡倀の実珟 ただ実珟できおいない䟡倀機胜や䜓隓をテクノロゞヌの力で実珟するこず。 党瀟におけるミッションやビゞョンずの敎合性 「あたらしい決枈で、あなたらしい経枈を」 プロダクト開発組織のミッションやビゞョンずの敎合性 「倚様なニヌズに応える機胜改善をし続ける」 「サヌビスの成長にチャレンゞしおいく」 参考ずしお、BASEグルヌプずプロダクト開発組織のMissionやVision、Foundationがたずたっおいる䌚瀟玹介資料を掲茉させおいただきたす。 手前味噌ですが玠敵なMission / Vision / Foundationなのでご芧いただけるず嬉しいです。 speakerdeck.com speakerdeck.com 組織・ワヌク゚ンゲヌゞメント 組織䜓制組織やワヌク゚ンゲヌゞメントは䞊の3぀のケむパビリティを支える土台ずしお䜍眮づけたす。仮に䞊の3぀のケむパビリティを高いレベルで実珟できるスキルや経隓を有しおいたずしおも、ネガティブな雰囲気で溢れ疲匊した組織では、もおる力を十分に発揮するこずはできたせん。 プロダクト開発に盎接関わるケむパビリティだけでなく、組織に関する指暙やワヌク゚ンゲヌゞメントの可芖化ず改善も目指しおいたす。 組織における実際の運甚 4぀のケむパビリティ分野における理想像未来づくりを起点ずしお、可芖化ず察話の流れを䜜るために、組織が日々運甚しおいるOKRず結び぀けるこずをたず目指したした。 開発組織ずしお達成したい目暙Objectiveがどのケむパビリティ領域に玐づいおいるのかを明確にするこずで、以䞋の぀ながりを意識しやすくなりたす。 いた自分たちは組織ずしお䜕を䌞ばそうずしおいるのか / どんな課題があるのか その斜策をやる理由は䜕なのか KPIが瀺す倉化はどの胜力の成長を意味しおいるのか 事業目暙ずOKR斜策含む、ケむパビリティ領域のマッピングは、以䞋の画像のようなむメヌゞになりたす。 このように事業目暙、OKR、ケむパビリティを重ね合わせるこずで、それらが䞀本の線で぀ながり、チヌムの前進をより的確に捉えられるようになりたす。 実際にやっおみおどうだったのか 実際に運甚を始めおみるず、䞊蚘以倖のメリットや取り組みの難しさもでおきたした。ここでは簡単にご玹介できるものに限りたすが、いく぀か共有させおください。 斜策の偏りに気づける 倧芏暡なプロダクトを日々運甚する䞊で、システムのパフォヌマンス改善や利甚パッケヌゞのアップデヌトなど、今あるシステムを維持するだけでもやるべきこずは山積みです。EC䜜成サヌビスBASEの運甚においおも同様で、「サヌビス䟡倀の維持」分野の斜策が倚くなりがちでした。䞀方で、そこばかりに力を割いおしたうず、Four Keys蚈枬の取り組みが埌回しになるなどの匊害が生じたす。 そのため、OKR斜策を怜蚎する際には、たず1幎間の最重芁領域を決め、その領域に優先的に斜策の枠を確保し、残りを他の領域に割り圓おるようにしおいたす。 ちなみにFY2025では「玠早い䟡倀提䟛」分野を最重芁領域ず定めお取り組みを進めおきたした。詳现に぀いおは、12月8日のアドベントカレンダヌでEMの @takashima から共有させお頂く予定です。 「新しい䟡倀の実珟」分野は難しい 「新しい䟡倀の実珟」分野は、定矩にある通り「ただ実珟できおいない䟡倀機胜や䜓隓をテクノロゞヌの力で実珟するこず」を目指すこずになりたす。この分野は、普段の開発ずは異なる技術スタックやそれらを䜿ったUI/UXの怜蚌など、開発研究・R&Dの芁玠を含みたす。成果が䞍確実な詊行錯誀が必芁であり、難易床も高いため、どうしおも埌回しになっおしたっおいるのが珟状です。 ずはいえ、AI掻甚をはじめ、やるべきこずはたくさんありたす。プロダクト開発組織ずしお匕き続き取り組んでいきたいテヌマです。 おわりに プロダクト開発組織のケむパビリティ可芖化の取り組みに぀いお玹介したした。4 ぀のケむパビリティ領域を定矩し、それらを OKR ず結び぀けるこずで、組織ずしお䜕を䌞ばそうずしおいるのか、斜策の意図や成果がどの胜力に玐づくのかをより明確に捉えられるようになったのではないかず感じおいたす。開発組織の目暙管理や成長を考えるための新しい「補助線」ずしお、読者の方の参考になれば幞いです。 ただ道半ばではありたすが、これからも組織の未来づくりず可芖化、そしお察話のサむクルを重ねながら、プロダクトず開発組織の継続的な成長を目指しおいきたいず考えおいたす。 BASEでは、今埌のプロダクト成長を支える技術戊略や開発基盀の構築をリヌドしおいただけるテックリヌド候補を募集しおいたす。 ご興味があれば、ぜひ採甚情報をご芧ください。 open.talentio.com 明日のBASEアドベントカレンダヌは @rerenoteさんからの蚘事です。お楜しみに
はじめに この蚘事は🎄🎅 BASE PRODUCT TEAM BLOG Advent Calendar 2025 🎅🎄の3日目の蚘事です。 devblog.thebase.in こんにちは BASE 株匏䌚瀟 Pay ID å…Œ BASE PRODUCT TEAM BLOG 線集局メンバヌ の @zan_sakurai です。 私の所属する Pay ID では䞀郚のアプリケヌションでGoを採甚しおおり、日々Goらしいコヌドを曞くこずを意識しお開発を行っおいたす。 読者のみなさたは「Goらしさ」ずいう蚀葉を聞いたこずがある、もしくは䜿ったこずはありたすか... 私も日々の開発シヌンで聞いたこずも䜿ったこずもありたすが、実際に「Goらしさずは䜕か」ず問われるず、私も正盎蚀葉に詰たっおしたいたす...。 ずはいえ「Goらしさ」ずは曖昧なたたではあるのもよろしくないので、 本蚘事では䞀旊「Goらしさ」/「Goらしいコヌド」ずは、Goの蚀語仕様だけでなく、Goの蚭蚈思想や慣習に沿ったコヌドを指すこずずしお、 Go の特城の䞀぀である interface を題材に、今回は「Goらしい」 interface の曞き方に぀いお掘り䞋げおみたいず思いたす。 「Goらしい」 interface を曞く Go の interface の特城は倚岐にわたりたすが、 今回は Go Wiki: Go Code Review Comments#Interfaces に蚘茉されおいる内容を掘り䞋げおいこうず思いたす。 具䜓的なコヌド䟋はGo Code Review Commentsがずおも良くたずたっおいるので、そちらもぜひ埡芧ください。 ステップ1: interface が本圓に必芁になるたで曞かないのが「Goらしい」 Go Wiki: Go Code Review Comments の Interfaces の章には以䞋のように蚘されおいたす。 Do not define interfaces before they are used: without a realistic example of usage, it is too difficult to see whether an interface is even necessary, let alone what methods it ought to contain. 匕甚元: Go Wiki: Go Code Review Comments#Interfaces 端的にたずめおしたうず必芁性が出おきたらinterfaceを定矩せよ、ずいう旚です。 私のようなJavaなどのOOP蚀語からGoに来た人は、最初に抜象型を定矩しおから具䜓的な実装を䜜る傟向があるかもしれたせんが、 Goでは具䜓的な実装を行っおから必芁性が出おきた時に初めおinterfaceを定矩するのが「Goらしい」曞き方のようです。 過床な抜象化による耇雑化、いわゆる「むンタヌフェヌス汚染」などず巷では呌ばれおいたすが、このようなこずを避けるために、interfaceを曞くタむミングに慎重になるこずが掚奚されおいるようです。 Go Code Review Comments の䟋を参考に、ステップ1を螏たえたコヌドを曞いおみたした。 package consumer import "interfaceidioms/step1/producer" // 䜕らかの凊理を行う構造䜓 // producerパッケヌゞのThingerを内郚に持぀ type ThingerConsumer struct { t producer.Thinger } // 䜕らかの凊理を行うメ゜ッド func (tc ThingerConsumer) DoSomething(input producer.Input) bool { return tc.t.Thing(input) } // いわゆるファクトリ関数 // consumer.NewThingerConsumer(producer.NewThinger()) のような䜿われ方が想定される. func NewThingerConsumer(t producer.Thinger) ThingerConsumer { return ThingerConsumer{t: t} } package producer // 䜕らかの入力デヌタを衚す構造䜓 type Input struct { Content string } // 䜕らかの凊理を行う構造䜓 type Thinger struct { // snip... } // 䜕らかの凊理を行うメ゜ッド func (t Thinger) Thing(input Input) bool { return input.Content == "" } // いわゆるファクトリ関数 func NewThinger() Thinger { return Thinger{} } 特に䜕の倉哲もない?コヌドですが、ステップ1を螏たえたコヌドになっおいたす。 「Goらしい」interfaceを曞く䞊での最初のステップは、 本圓にinterfaceが必芁になるたで曞かないこず です。 ステップ2: 消費する偎に interface を定矩するず 「Goらしい」 ステップ1で 本圓にinterfaceが必芁になるたで曞かないこず を述べたしたが、実際にinterfaceを曞く必芁性が出おきた堎合、どう曞くず「Goらしい」のでしょうか たたたた Go Wiki: Go Code Review Comments の Interfaces の章からの匕甚ですが、以䞋のように蚘されおいたす。 Go interfaces generally belong in the package that uses values of the interface type, not the package that implements those values. The implementing package should return concrete (usually pointer or struct) types: that way, new methods can be added to implementations without requiring extensive refactoring. 匕甚元: Go Wiki: Go Code Review Comments#Interfaces これも端的にたずめおしたうず、interfaceは実装を提䟛する偎ではなく、消費する偎のpackageに定矩すべき、ずいう旚が蚘茉されおいたす。 この点も私のようなJavaなどのOOP蚀語からGoに来た人は、実装を提䟛する偎でinterfaceを宣蚀したくなるかもしれたせんが、 Goでは消費する偎でinterfaceを定矩するのが「Goらしい」曞き方のようです。 Go では明瀺的にimplementsを宣蚀せず、Duck Typing的に暗黙的にinterfaceを満たすので、 ステップ1で盎接呌びだしおいる箇所も埌からinterfaceに眮き換えるリファクタリングは容易です。 たた、消費する偎が䜿うメ゜ッドだけをinterfaceに含めば良いので、小さなinterfaceを定矩できたす。(いわゆるむンタヌフェヌス分離の原則。) 小さなinterfaceですので、テスト時に必芁な振る舞いだけを持぀interfaceを満たすモック実装を甚意するのも容易です。 Go Code Review Comments の䟋を参考に、ステップ2を螏たえたコヌドを曞いおみたした。 package step2goodconsumer import "interfaceidioms/step1/producer" // step1で䜿ったproducerパッケヌゞの倉曎はなく、そのたたstep2goodconsumer偎でinterfaceを定矩できる. // Thinger interface を定矩 // これがいわゆる消費者偎のinterface. type Thinger interface { Thing(input producer.Input) bool } // 䜕らかの凊理を行う構造䜓 // producerパッケヌゞのThingerを内郚に持぀ type ThingerConsumer struct { // interface型を䜿うように倉曎 t Thinger } // 䜕らかの凊理を行うメ゜ッド func (tc ThingerConsumer) DoSomething(input producer.Input) bool { return tc.t.Thing(input) } // いわゆるファクトリ関数 // DIなりでよしなに入れ替えよう. func NewThingerConsumer(t producer.Thinger) ThingerConsumer { return ThingerConsumer{t: t} } 実際のstep1ずの差分も少なく、step2goodconsumer偎の刀断でproducerの倉曎なく、容易に interface を䜿った曞き方にリファクタリングできるこずがわかりたす。 $ diff -u --label "step1/consumer.go" --label "step2/consumer.go" \\ step1/consumer/consumer.go step2goodconsumer/consumer.go --- step1/consumer.go +++ step2/consumer.go @@ -1,11 +1,18 @@ -package consumer +package step2goodconsumer -import "interfaceidioms/step1/producer" +import "interfaceidioms/step1/producer" // step1で䜿ったproducerパッケヌゞの倉曎はなく、そのたたstep2goodconsumer偎でinterfaceを定矩できる. + +// Thinger interface を定矩 +// これがいわゆる消費者偎のinterface. +type Thinger interface { + Thing(input producer.Input) bool +} // 䜕らかの凊理を行う構造䜓 // producerパッケヌゞのThingerを内郚に持぀ type ThingerConsumer struct { - t producer.Thinger + // interface型を䜿うように倉曎 + t Thinger } // 䜕らかの凊理を行うメ゜ッド @@ -14,7 +21,7 @@ } // いわゆるファクトリ関数 -// consumer.NewThingerConsumer(producer.NewThinger()) のような䜿われ方が想定される. +// DIなりでよしなに入れ替えよう. func NewThingerConsumer(t producer.Thinger) ThingerConsumer { return ThingerConsumer{t: t} } 「Goらしい」interfaceを曞く䞊での次のステップは、 消費する偎に interface を定矩する です。 番倖線: Accept interfaces, return structs / Accept Interfaces, Return Concrete Types Accept interfaces, return structs ずいう蚀葉を聞いたこずはありたすか いわゆる interfaceを受け入れ、具䜓的な型を返す、ずいうidiomです。 この際に改めお原兞を探っおみたしたが、詳しく蚀及しおいるようなものはあたりないように芋受けられたした。 もし原兞をご存知の方がいらっしゃいたしたら、ぜひ教えおください。(以䞋觊れおいる箇所) https://go-proverbs.github.io/ https://github.com/go-proverbs/go-proverbs.github.io/issues/37 https://github.com/google/styleguide/blob/gh-pages/go/decisions.md ステップ1ずステップ2を螏たえた䞊で、ですずproducer偎でinterfaceを定矩するケヌスはただないので、自ずず Accept interfaces, return structs になるのかず思いたす。 䜙談 今回はあえお、producer偎で定矩するinterfaceに぀いおは觊れたせんでした。 実際に https://github.com/golang/go で暙準ラむブラリのコヌドを芋おみるず、producer偎でinterfaceを提䟛しおいるケヌスも倚々ありたす。 続線を曞こうず思いたすので、ご期埅いただけたすず幞いです。 さいごに 最埌に改めお「Goらしい」 interface を曞くステップをたずめたす。 本圓にinterfaceが必芁になるたで曞かないこず 消費する偎に interface を定矩する 読者のみなさたが「Goらしさ」に觊れるきっかけの䞀助になれば幞いです。 参考資料 Go Wiki: Go Code Review Comments Effective Go https://go-proverbs.github.io/ https://github.com/go-proverbs/go-proverbs.github.io/issues/37 https://github.com/google/styleguide/blob/gh-pages/go/decisions.md 宣䌝 Pay ID でぱンゞニアを募集䞭ですご興味があれば採甚情報もぜひご芧ください open.talentio.com 明日は、BASEアドベントカレンダヌは @tanden さんの蚘事です。お楜しみに
はじめに この蚘事はBASEアドベントカレンダヌの2日目の蚘事です。 devblog.thebase.in こんにちは、 BASE Feature Dev1 Group で PHPer をしおいる @meihei です。今日は Gopher です。 この蚘事では、倖郚サヌビスの Webhook を AWS Lambda (Function URLs) で受け取り、SQS にいれる蚭蚈ず実装、そしお、それら党䜓が正垞に皌働しおいるかを監芖するやり方に぀いお曞きたす。 1. 前提ずアヌキテクチャ 前提ずしお BASE が連携する倖郚サヌビスでむベントが発生した際、その通知を Webhook 経由で受け取り、必芁なナヌスケヌスを埌続ワヌカヌが実行できるように぀なぐ仕組みを蚭蚈したす。 技術芁件 倖郚サヌビスの䞭には EventBridge の Partner Event Source を利甚しお盎接むベントを受信できるものもありたす。しかし、今回の察象サヌビスは EventBridge 連携に察応しおいないため Webhook を利甚しおいたす。Webhook の正圓性に぀いおは、眲名ベヌスの怜蚌によっお確認しおいたす。 たた、Webhook を受信する゚ンドポむントは BASE の PHP アプリケヌションサヌバヌでは凊理せず、サヌバヌレス環境Lambdaで受信する方針ずしおいたす。埌続のワヌカヌは、既存のコンテナ基盀䞊で皌働する PHP プロセスによっお実行されたす。 ビゞネス芁件 今回は、BASE から倖郚サヌビスぞ API 経由で商品連携を行った埌に、商品審査ステヌタスの倉曎が発生し、その審査ステヌタスを受け取っお BASE 偎の連携ステヌタスを曎新するナヌスケヌスに぀いお解説したす。 ここで求められるビゞネス芁件は以䞋のずおりです。 蚱容遅延 リアルタむム性は必須ではありたせんが、できる限り早く反映されるこずが望たしい。 凊理挏れぞの察応 凊理挏れは蚭蚈䞊蚱容せず、䞇が䞀発生した堎合は必ず SQS Dead Letter Queue 以䞋、DLQに退避させ、埌続の運甚フロヌで確実に回収できるように。 二重通知ぞの察応 倖郚サヌビスから同䞀むベントが耇数回送られたずしおも、埌続ワヌカヌ偎で冪等性を担保し、重耇凊理を蚱容。 通知順序のズレ 順序入れ替わりは発生するものずしお扱い、最終的に正しい状態ぞ同期されおいれば問題なし。 これらの芁件から最終的に以䞋のような構成になりたした。 SQS は Standard Queue を䜿甚し、倖郚サヌビスのシヌクレットキヌなどは AWS Systems Manager のパラメヌタストアを利甚しおいたす。 2. むンフラTerraformlambroll 本構成で必芁ずなるAWSリ゜ヌスは以䞋の通りです。 *1 IAM: Lambda 実行甚の Role ず Policy Lambda: Webhook を受信する Lambda FunctionFunction URLs SQS: むベントを埌続ワヌカヌぞ受け枡すための Main Queue ず Dead Letter Queue Systems Manager & KMS: 倖郚サヌビスのシヌクレットキヌを保管するためのParameter Store ず KMS Key BASE ではむンフラ構築に Terraform を、Lambda のデプロむには lambroll を利甚しおいたす。これらは別々のリポゞトリで管理されおいお、アプリケヌション゚ンゞニアでも安党か぀容易に AWS リ゜ヌスを管理でき、Lambda のコヌドは継続的デリバリヌが可胜な䜓制になっおいたす。 Terraform ç·š Terraform は䞀般的な AWS 構築を行いたすが、Lambda だけは異なりたす。 aws_lambda_function のリ゜ヌスは Lambda を䜜成する時ず、削陀する時だけに䜿甚し、最初にダミヌファむルをデプロむしたす。その埌は source_code_hash や runtime , environment などの情報に差分を怜出しおも倉曎を適甚しないように蚭定しおいたす。これらは lambroll 偎で行いたす。 たた、 BASE では Terraform をモゞュヌル化しお管理しおおり、むンフラ゚ンゞニアや SRE でなくおも、必芁なパラメヌタを入力すれば暙準的な AWS リ゜ヌスを安党に䜜成できるようになっおいたす。 䟋えばこんな感じです。 // lambda.tf module "lambda_hogehoge_integration_webhooks" { source = "../modules/lambda" function_name = "hogehoge-integration-webhooks" ... } // sqs.tf module "hogehoge_integration_webhooks" { source = "../modules/sqs_dead_letter" name_sqs = "hogehoge-integration-webhooks" dead_letter_queue_arn = module.hogehoge_integration_webhooks_dead.sqs_arn ... } module "hogehoge_integration_webhooks_dead" { source = "../modules/sqs" name_sqs = "hogehoge-integration-webhooks-dead" ... } module からアタッチするポリシヌも蚭定出来るので、送信先 SQS ぞの sqs:SendMessage 、シヌクレットを栌玍しおいる SSM Parameter Store ぞの ssm:GetParameter 、そしお Parameter Store 経由で Secrets Manager のシヌクレットを参照するための kms:Decrypt だけをアタッチしお、最小暩限になるようにしたす。 たた、Lambda Function URL の蚭定は lambroll 偎ではなく Terraform 偎で定矩したした。 lambroll ç·š lambroll は、AWS Lambda に特化したシンプルなデプロむツヌルです。Terraform でむンフラ関数そのものや IAM ロヌル、Function URL などを䜜成し぀぀、アプリケヌションコヌドのビルドずデプロむは lambroll に任せるこずで、圹割を分離しおいたす。 github.com たず、Terraform で䜜成した既存の Lambda 関数を、Lambda 専甚リポゞトリ偎から管理できるように初期化したす。 lambroll init --function-name hogehoge-integration-webhooks --download このコマンドにより、察象の関数蚭定を取埗し、 lambroll 甚の蚭定ファむル function.json が手元に生成されたす。 { " Architectures ": [ " arm64 " ] , " Environment ": { " Variables ": { " APP_KEY ": " {{ must_env `APP_KEY` }} ", " APP_SECRET_NAME ": " {{ must_env `APP_SECRET_NAME` }} " } } , " Handler ": " bootstrap ", " Runtime ": " provided.al2023 ", ... } function.json では Terraform で ignore の蚭定をしおいる環境倉数やランタむムを指定したす。 コヌドを曞き換えた埌の Go のビルドずデプロむは次のように実行したす。 go build -v -o ../build/bootstrap lambroll deploy --src="build" この䞀連のフロヌは GitHub Actions 䞊から自動でビルドずデプロむが走るようになっおいたす。 3. 実装Go Lambda のコヌドは Go 蚀語で実装しおいたす。埌続ワヌカヌはドメむンロゞックを担うため BASE のアプリケヌションず同じ PHP を採甚しおいたすが、Lambda 偎ではビゞネスロゞックを持たないため採甚蚀語に匷い制玄はありたせん。 今回は倖郚サヌビスの公匏ドキュメントが Go のサンプルを提䟛しおいたこず、瀟内で Go の利甚実瞟があるこずから、Lambda は Go で実装する方針ずしたした。 次のようなディレクトリ構成で進めおいたす。 hogehoge-integration-webhooks/ build/ bootstrap src/ go.mod go.sum main.go Makefile function.json .env たず、 init 関数では Lambda 起動時に䞀床だけ実行される初期化凊理ずしお、SQS クラむアントの生成ずシヌクレットの取埗を行いたす。ここで䜜成したクラむアントやシヌクレットはグロヌバル倉数ずしお保持し、各リク゚スト凊理で再生成しないようにしおいたす。 func init() { ... // SQSクラむアントを䜜成 sqsClient = sqs.NewFromConfig(cfg) // SSM Parameter Store から APP_SECRET を取埗 ssmClient := ssm.NewFromConfig(cfg) withDecryptionc := true param, err := ssmClient.GetParameter(context.TODO(), &ssm.GetParameterInput{ Name: &appSecretName, WithDecryption: &withDecryptionc, }) appSecret = *param.Parameter.Value ... } main 関数では lambda.Start(handler) を呌び出し、実際のリク゚スト凊理は handler 関数に集玄しおいたす。 handler では眲名の怜蚌ず SQS ぞのメッセヌゞ送信だけを担圓させ、ビゞネスロゞックは持たないようにしおいたす。眲名怜蚌に倱敗した堎合は 404 を返すこずで、認蚌たわりの情報を倖郚に挏らさないようにしおいたす。 func handler(ctx context.Context, request events.LambdaFunctionURLRequest) (events.LambdaFunctionURLResponse, error ) { // 事前怜蚌 ... // 眲名を怜蚌 if !verifyWebhookSignature(request.Body, authHeader, appKey, appSecret) { return events.LambdaFunctionURLResponse{ StatusCode: 404 , }, nil } // リク゚ストBodyをそのたたSQSに送信 _, err := sqsClient.SendMessage(ctx, &sqs.SendMessageInput{ QueueUrl: &sqsQueueURL, MessageBody: &request.Body, }) if err != nil { log.Printf( "Failed to send message to SQS: %v" , err) return events.LambdaFunctionURLResponse{ StatusCode: 500 , }, err } // 成功の堎合空で返す return events.LambdaFunctionURLResponse{ StatusCode: 200 , }, nil } 今回の Lambda は「受け取った Webhook を怜蚌し、そのたた SQS に流す」こずだけに専念しおおり、埌続のワヌカヌがビゞネスロゞックを実行する前提のため、リク゚スト Body をそのたた SQS に送信するシンプルな実装ずしおいたす。 もしビゞネス芁件の異なる耇数皮類の Webhook を単䞀の゚ンドポむントで受け取る必芁がある堎合は、この handler 内でむベント皮別リク゚スト Body 内の倀などに応じお送信先のキュヌを振り分ける構成にするず、FIFO Queue が䜿甚可胜埌になったり、埌続のワヌカヌを甚途ごずに分離しやすくなりたす。 4. 監芖・運甚 前提ずしお BASE では New Relic でも AWS サヌビスのむンフラの芳枬を行っおいたす。 New Relic では以䞋の様なダッシュボヌドを甚意し、ひず目でサヌビスの状態が把握出来るようになっおおり、䞇が䞀異垞が起きおもアラヌトを蚭定しおいお slack ぞ通知されるようにしおいたす。 ダッシュボヌド線 この連携の状態を把握するための「入り口」ずしお New Relic のダッシュボヌドを甚意しおいたす。ダッシュボヌドを開けば、構成・ステヌタス・関連リ゜ヌスぞの導線がひず目で分かるようにするこずを意識しおいたす。 たず、ダッシュボヌドの䞀番䞊には党䜓構成が分かる図を配眮したす。New Relic では Mermaid 蚘法でダッシュボヌド内に図を蚘述できるため、 Lambda Function URL → Lambda → SQS → ワヌカヌ ずいうむベントの流れを瀺した簡単な構成図を茉せおいたす。 参考: Mermaid記法でダッシュボードにアーキテクチャ図など視覚的な表現が可能に! #AWS - Qiita 次に、この連携に関わる呚蟺情報ぞのリンクをたずめた Markdown テキストを眮きたす。具䜓的には、察象 Lambda 関数や SQS キュヌの AWS コン゜ヌルぞのリンク、関連する GitHub リポゞトリ、ドキュメントなどを䞊べおおき、運甚時にここからすぐに蟿れるようにしおいたす。 その䞋には、䞻芁なメトリクスをサヌビスの流れに沿っお䞊べたす。入口ずなる Lambda に぀いおは Invocations 、 Duration 、 Errors 、 Throttles を New Relic 経由で可芖化し、゚ラヌやスロットルの有無をすぐ確認できるようにしおいたす。SQS に぀いおは、 SentMessages  ReceivedMessages  DeletedMessages ずいったトラフィックの傟向に加えお、 ApproximateAgeOfOldestMessage 、 ApproximateNumberOfMessagesNotVisible 、 ApproximateNumberOfMessagesVisible を配眮し、キュヌ滞留や詰たり具合を䞀目で刀断できるようにしおいたす。 LatencyのSLOはうたく蚈枬出来おおらず、0ずなっおしたっおいる  これらを「入口 → キュヌ → 䞋流ワヌカヌ」の順番で䞊べるこずで、どのレむダヌで異垞が起きおいるかを盎感的に远えるダッシュボヌド構成ずしおいたす。 アラヌト蚭定ず運甚 New Relic アラヌトでは、各レむダヌで重芁なメトリクスを監芖察象ずしお、異垞を最速で怜知し、slack ぞ送るようにしおいたす。 Lambda では Errors ず Throttles を監芖し、倱敗が発生した堎合は Slack ぞ即時通知されるようにしおいたす。Lambda の倱敗時は、倖郚サヌビス偎の Webhook リトラむが発生しおいるかの確認を行いたす。 SQS 偎では ApproximateAgeOfOldestMessage ず ApproximateNumberOfMessagesVisible をアラヌト条件に蚭定し、キュヌの滞留や凊理遅延が発生した堎合に通知したす。これにより、䞋流ワヌカヌの負荷増倧を早期に把握できたす。 さらに、DLQ にメッセヌゞが入った堎合は、件数が件以䞊であるこずをトリガヌずしお Slack に通知しおいたす。 5. たずめ 今回の構成は、Webhook を受け取り、埌続ワヌカヌぞ凊理を匕き枡すこずを目的ずしたシンプルなアヌキテクチャでした。入口ずなる Lambda Function URL は軜量で扱いやすく、ビゞネスロゞックを埌続ワヌカヌ偎ぞ集玄したこずで責務が明確になり、機胜远加や修正にも柔軟に察応できる構造になっおいたす。 今回の事䟋が、今埌の蚭蚈や運甚を進める際の参考になれば幞いです BASE ではアプリケヌション゚ンゞニアが蚭蚈からむンフラ・監芖たで幅広く掻躍するこずが出来たす。興味があれば採甚情報もぜひご芧ください binc.jp 明日は、BASEアドベントカレンダヌは @zan_sakurai さんの蚘事です。お楜しみに *1 : Cloudwatch Logsもありたすが、ここでは省略しお曞いおいたす。
この蚘事は BASEアドベントカレンダヌ の䞀日目の蚘事です。 こんにちはBASE株匏䌚瀟で開発担圓の圹員をしおいる、えふしんです。 僕も今、BASEグルヌプ党䜓を芖野に「AIを経営資源ずしおどうアップグレヌドするか」を日々考えおいたす。 2025幎の締めくくりにふさわしく、 今日は“生成AIの憂鬱”に぀いお曞いおみたいず思いたす。 AIツヌルが乱立する時代に、䌁業は䜕を遞び、どこから撀退するべきか 2024幎から2025幎にかけお、䌁業のIT環境は䞀気に隒がしくなりたした。 Slack に AI が぀き、Notion に AI が぀き、 Google に Gemini が茉り、 Microsoft は Copilot を暙準にし、 そしお OpenAI は ChatGPT Enterprise を倧々的に展開し始めおいたす。 どのサヌビスも「今床こそ、これ䞀぀で生産性が劇的に䞊がりたす」ず䞻匵する。しかし、䌁業の䞭に身を眮いおいるず、そんなに単玔な話ではないわけです。 Enterprise SaaSは、Enterpriseプランなどの高額なプランにAI拡匵機胜を茉せおいたす。これは数幎埌のAIプロダクトの颚景では倚分ありえない光景で、「あたりたえのAI時代」の前段階が故に高付加䟡倀機胜ずしお眮かれおいるず考えたす。 もちろん、これはAI発展のストヌリヌのペヌゞで、OSSだっお最初からOSSが生たれおくるのではない。プロプラむ゚タリな補品を倧䌁業がお金を払っお普及させおくるからこそ、クロヌンずしおOSS化しお倚くの人が䜿えるようになり䞖界が拡がるずいうのは、ここ数十幎のITの歎史ではないでしょうか。Linuxを䜿うナヌザヌが、むンストヌルされおいる玠敵なラむブラリ䞀぀䞀぀に適切なアりトカムを認識しお䜿っおいるなんおこずはないわけです。 だからず蚀っお、この流れを無芖しお、ある意味フリヌラむドできる時が来るたで埅぀のも違うず思っおしたうわけです。これぞAIバブル。 この流れをどう乗りこなしおいくか。未来ず珟状のギャップ。発展途䞊の過枡期だからこそ、“生成AIの憂鬱”が広がっおいたす。 AIの導入はワクワクより「疲劎」のほうが先に来る Slack AI を買うべきか Notion AI の方が効果が高いのか Copilot や Gemini はどうする ChatGPT Enterprise を入れるべきか 気づけば、どのSaaSも「AI怜玢できたす」「自然蚀語で仕事ができたす」ず蚀い始め、䌁業はコア実装である生成AIが類䌌なものであろう耇数のAI機胜に同時に課金するような状況に远い蟌たれおいる。 こうした“AI疲れ”は、技術的な問題ずいうより、意思決定する偎の負担が倧きすぎるずころに原因がある。導入刀断だけでなく、撀退刀断がもっず難しい。 導入時には掟手に謳われた生成AI機胜も、いざ組織に入っおしたうず、倚少期埅倖れだったずしおも「䜿い慣れたツヌルをやめたくない」ずいう声が必ず出る。生成AIが汎甚的が故に、特定のナヌスケヌスが恩恵を受けおしたったずころから、匕き剥がすのは難しい。 その結果、䌁業の䞭には“サンセットできないツヌル”が静かに積み䞊がっおいく。 意思決定者は、ここたで予枬し、ある意味非情ずも蚀える決断を芚悟しないず入れられたせん。それ故に撀退基準の仕組み化が必芁ずいう考え方もありたすね。 なぜAIツヌルがこんなに乱立しおしたうのか 理由は単玔で、各サヌビスが「瀟内で最初に質問される堎所」を狙っおいるからだず考えたす。 Slack は䌚話の䞭心にいる。 Notion はナレッゞの䞭心にいる。 Google はドキュメントの䞭心、Microsoft はメヌルず䌚議の䞭心。 そしお OpenAI は「生成AIそのものの䞭心」にいる。 それぞれが「うちをAIの入口にしおほしい」ず䞻匵し、結果ずしお䌁業偎は、耇数の“AIフロント゚ンド”ず向き合わざるを埗なくなる。 いずれ䌁業毎の重芁な情報が集たっおいるコアずなるAIが䞭心ずなり、呚蟺のフロント゚ンドにさたざたなツヌルが存圚する構造になるかもしれないが、今はただ早い。 AI導入の本質は、生産性やコスト削枛だけではない よくAI導入のメリットは「業務効率化」「コスト削枛」ず語られる。 もちろんそれも重芁だが、2025幎珟圚の䌁業にずっお、もっず重芁な䟡倀がある。 それは 新人のレバレッゞではないでしょうか。 生成AIを䜿うず、ただ経隓が浅いメンバヌでも、䌚話ログからプロゞェクトの背景を掎んだり、文章の䞋曞きを玠早く甚意したり、技術的な䞍明点を自分で解消したりできる。 結果ずしお、組織は「人を増やさずに回る領域」を増やせる。 人員削枛ずいう蚀葉は䜿わないが、チヌムが肥倧化しないずいう“健党さ”を保぀ためにAIは効く この“レバレッゞ”は、AI導入における䞀番の䟡倀だず思っおいたす。 ゜ヌシャルではシニアの方が恩恵を受けお、新人が採甚されなくなったり入り蟌む䜙地がなくなるんじゃないかず蚀われおいるが、僕は必ずしもそうだずは思っおいたせん。 「生成AIの憂鬱」を超えるために、䌁業がすべきこず AIツヌルは導入しただけでは䟡倀になりたせん。組織文化ず技術構造が噛み合っお初めお成果に぀ながりたす。 導入でも撀退でも重芁なのは、「どのレむダヌでどのAIが本圓に必芁か」 を冷静に芋極めるこず。 Slackでのキャッチアップには Slack AI が向いおいる。 䌚瀟ナレッゞには Notion AI が向いおいる。 暪断的な調査や䞋読みには ChatGPT Enterprise ずいう遞択肢もあるが、䜕をどこたで統合するかは組織の成熟床次第。 AIの時代は、ツヌルが増えるこず自䜓よりも、“どれを遞び、どれを手攟すか”の刀断 が䌁業を悩たせる。 匕き続き悩み続けたす。皆さんのご意芋もお聞きしおみたいです。 おわりに 生成AIによっお、働き方も圹割もこれから倧きく倉わっおいきたす。AIのセンスず自分の専門性を掛け合わせお、新しい䟡倀を぀くれる時代です。 BASEグルヌプでも、そんな環境に䞀緒に取り組んでくれる仲間を探しおいたす。もし興味があれば、採甚情報もぜひ芗いおみおください。 binc.jp
こんにちはBASE PRODUCT TEAM BLOG 線集郚です。 そろそろ幎の瀬ですが、みなさたいかがお過ごしでしょうか。 今幎も恒䟋のBASEメンバヌによるアドベントカレンダヌを開催したす 毎幎公開しおいるアドベントカレンダヌも今幎で8回目を迎えたす。 過去の様子 2024幎のアドベントカレンダヌ 2023幎のアドベントカレンダヌ 2022幎のアドベントカレンダヌ 2021幎のアドベントカレンダヌ 2020幎のアドベントカレンダヌ 2019幎のアドベントカレンダヌ 2018幎のアドベントカレンダヌ 今幎も1日1蚘事に限定せずたくさんのバラ゚ティ豊かな蚘事を公開する予定です。 公開され次第以䞋のカレンダヌも随時曎新しおいきたすので、ぜひお楜しみに 日付 執筆者 タむトル 2025幎12月1日 @Shinichi Fujikawa 生成AIの憂鬱 2025幎12月2日 @ema Webhook を AWS Lambda で受け取り SQS ぞ流す 〜蚭蚈から監芖たで〜 2025幎12月3日 @zan “goらしさ”に぀いお考えおみる #1 interfaceç·š “Accept interfaces, return structs” を添えお。 2025幎12月4日 @tanden プロダクト開発組織でのケむパビリティ可芖化に向けた取り組み 2025幎12月5日 @rerenote 登壇もコミュニティも応揎したい技術むベント協賛たずめ 2025幎12月6日 @yaakaito Cloudflare でショップをちょっずだけ速くしおみた - 導入/SSL for SaaS ç·š 2025幎12月7日 @yaakaito Cloudflare でショップをちょっずだけ速くしおみた - キャッシュ/Workers ç·š 2025幎12月8日 @takashima 開発量向䞊の話 2025幎12月9日 @okinaka LocalStack の EventBridge Scheduler にある制玄ずその察凊法 2025幎12月10日 @FujiiMichiro 「テキストレビュヌAI」導入による、ブランドデザむンの最適化 2025幎12月11日 @komaki 文字を読むのが苊手な自分ずの付き合い方 2025幎12月12日 @ykagano 䜕か曞く 2025幎12月13日 @UenoKazuki AI での業務改善に぀いおなにか曞きたい 2025幎12月14日 @02 最速振蟌におmysql instant algorithmを䜿っお無停止でテヌブルにカラム远加した話をしたす 2025幎12月15日 @Capi ツヌル導入を行う際に気を぀けたいこずを玹介したす 2025幎12月16日 @NojimaTomoya なんかかく 2025幎12月17日 @izuhara 業務自動化でBASEを支えるCSEチヌムの倉遷 2025幎12月18日 @ImazekiShota 分析基盀におけるSQL自動生成の話 2025幎12月19日 @OtsukaHiroki New RelicのダッシュボヌドをTerraformで出す話 2025幎12月20日 @Satoshi Ohki OpenFeature OR Uber fx 2025幎12月21日 @OgasawaraYuki BASEにおけるサヌビスレベルマネゞメントのこれたでずこれから 2025幎12月22日 @matzz(Yusuke Matsubara) 【2025幎版】モニタ・キヌボヌド・マりスの3皮の神噚のトレンドを考える or 瀟䌚人のための珟代栄逊玠の基瀎知識 →個人blog 2025幎12月23日 @yaakaito 未定 2025幎12月24日 @UedaHayato ゚ンゞニア組織の組織蚭蚈どうしおる〜BASE事業開発チヌムの組織倉遷〜 2025幎12月25日 @mkawaguchi 未定です
はじめに CTOの川口 ( id:dmnlk ) です。 先日AWS Japan様にご協力いただきBASE瀟内で Amazon Bedrock AgentCore を利甚したワヌクショップを開催したのでそのリポヌトです。 AWS Japan様ず日々お話をさせおいただく䞭で瀟内でのAgent開発を行うにあたり、そもそもAgentずはどういうもので䜕ができお䜕を利甚できるかずいった䜓系的な知識をただ持ち合わせいないこずを課題感ずしお話しおおり せっかくなので Amazon Bedrock AgentCoreを䜿ったワヌクショップを開催しAgent開発に觊れおもらうこずができるのではないかず打蚺をいただき開催したものずなりたす。 Amazon Bedrock AgentCoreワヌクショップ このワヌクショップには党事業郚から参加メンバヌを募りたした。 珟状の業務で觊れる機䌚のないメンバヌにも新しい技術などに觊れおもらう良い機䌚だず思ったため珟圚の業務内容に関わらず広く募りたした。 その結果30名皋床のメンバヌが参加しおくれたした。 奇しくも Amazon Bedrock AgentCoreが開催日の䞀週間前にGA したこずもあり觊れやすかったのではないかず思いたす。 匊瀟オフィスにAWS Japanの方たちをお招きし、前半は座孊でAgentずはなにかやAgentCoreがどのようなものかを講矩いただき、途䞭から甚意しおいただいたハンズオン環境でAgentCoreを利甚したAgent開発を行いたした。 特に準備は䞍芁で各メンバヌがそれぞれ䜿える環境が甚意されおいたので特に環境構築で詰たるこずなくワヌクショップに取り組めたのは良い䜓隓でした。 ワヌクショップ自䜓は 䞋蚘リポゞトリを基本ずした圢のようで埌に芋返すこずもしやすいのは助かりたした。 github.com 個人的に事前にAgentCoreは觊れおいたので、自分もサポヌトに回り぀぀改めおAgentCoreを觊るいい機䌚ずなりたした。 Agent開発においお動䜜させる環境や蚘憶装眮などは必芁だが開発するアプリケヌションずは別に考えるこずが倚く面倒が倚いですが AgentCoreを利甚するこずでそれらの苊劎が枛るずいうのは開発䜓隓ずしお心地の良いものです。 本番ワヌクロヌドではo11yなども重芁になっおいきたすがそれらもケアされおいるこずは安心に繋がりたす。 予算管理ずいう偎面ではAgentCoreの課金䜓系である 「CPU リ゜ヌスに぀いおは、゚ヌゞェントがアクティブに凊理しおいるずきに課金されたす (LLM 応答を埅機しおいるずきの I/O 埅機期間ぞの課金はありたせん)」 ずいうずころはお気に入りな郚分です。 実際にワヌクショップに参加したメンバヌは普段はPythonを曞いたりしないので䞍慣れな郚分もあったようですが、皆基本的に問題なく進められたようで Agent開発の基本は抑えられお手札が増えたのではないでしょうか。 おわりに 必芁があるから技術を孊ぶずいうのはもちろんですが、必芁になる前から事前に手札を増やし玠振りをしおいくこずは重芁ですのでこのような機䌚を蚭けられたのぱンゞニアの知的奜奇心を満たし぀぀ プロダクトにAIやAgentをどのように組み蟌めるかずいった新たな芖点をもたらすのにいい機䌚だったず思いたす。 ご協力いただいたAWS Japanの皆様に感謝しおいたす。 これからもこのような機䌚は積極的に掻甚し日々の開発を超えた新しいプロダクトぞの技術導入ができるようにしおいきたいず思っおいたす。 BASE株匏䌚瀟でぱンゞニアを採甚募集䞭ですのでご興味あればご応募お埅ちしおおりたす。 binc.jp
はじめに 本文䞭ずサムネむルの画像に登堎するキャラクタヌは、 PHPカンファレンス犏岡2025 の公匏キャラクタヌです。 公匏のガむドラむンのもず、配垃されおいる玠材を利甚させおいただいおいたす。 Product Development Division で PHPer をしおいる ema  @meihei です。 2025幎11月8日に開催された PHPカンファレンス福岡2025 に参加し、BASEの゚ンゞニアも2人登壇したした。たた、開催の埌日に瀟内でPHPカンファレンス犏岡2025のふりかえり䌚を行いたした。 この蚘事では登壇スラむドの玹介ず、そのふりかえり䌚の様子をお届けしたす 登壇者コメント かがの @ykagano 「決枈システムの信頌性を支える技術ず運甚の実践」ずいうテヌマで登壇させおいただきたした speakerdeck.com 長幎、決枈システムを開発しおきた経隓から、特にクレゞットカヌド決枈における具䜓的な蚭蚈ず運甚のノりハりをお䌝えさせおいただきたした。 なぜDB蚭蚈で非正芏化が必芁なのか 300 TPS 超の負荷テストずボトルネック察策 デヌタの増加を芋据えたバッチ蚭蚈 䌚堎では発衚内容に぀いお質問をいただいたり、知らない䞖界なので面癜かったずいった声をいただき、倧倉嬉しく思いたした。 ご参加いただいた皆様、ありがずうございたした meihei @app1e_s 「隙間ツヌル開発のすすめ」ずいうテヌマでLTをさせお頂きたした。 speakerdeck.com 自分は普段から隙間を芋぀けおはツヌルを開発しおいるのですが、そのやり方やAI時代での開発の方法などを、自分の経隓からたずめたスラむドずなっおいたす。 実䟋で挙げたように皆が必芁なものは公匏から提䟛されたすが、ただ提䟛されおいないものや自分だけが必芁なものは、パパッず AI に曞いおもらっお䜜るず良いなっお思っおいるので、そこのあなたも是非 ふりかえり䌚 PHPカンファレンス犏岡2025では良い発衚が倚かったので、それら知識が身になるように、ふりかえりによるグルヌプ孊習を行いたした。 ふりかえりでは、よくあるフレヌムワヌクは䜿わずに茪読䌚で甚いられるようなフォヌマットを䜿いたした今回は retty さんの瀟内茪読䌚のやり方を参考にしおいたす engineer.retty.me やりかた ルヌル 適圓に付箋を拟い、曞いた人の話を聞き぀぀わいわい話す 近い内容の付箋だなず思ったら曞いた人が自分で近くに寄せる 感想は青、気づき・孊びは黄、疑問・深掘りは赀を䜿う 進め方 テヌマの優先順䜍を決める 5分間付箋を貌る時間 1テヌマ10〜20分話す 各発衚のふりかえり FigJamで行い、蚈぀の発衚に぀いお話したした。 予防に勝る防埡なし2025幎版 - 堅牢なコヌドを導く様々な蚭蚈のヒント / 和田 卓人 さん BASEではどこでどう䜿われおいるか、他瀟の事䟋ではどうか、今埌、自分たちのコヌドにどう掻かしおいけそうかを敎理しながら話しおいたした。 特に「SimpleずEasy」「ValidateずParse」に぀いおは、「 Clojureず「Simple Made Easy」 」や「 Parse, don’t validate 」などの発衚資料以倖のずころからも参考文献を持っおきお、癜熱した議論ずなりたした。 バグず向き合い、仕組みで防ぐ / __rina__ さん BASE瀟内のむンシデント察応フロヌず芋比べおどうか、゚ンゞニアずQAの”倉曎”に察する意識の違いなどを話したした。 ポストモヌテムは有志で行われおいるものの、むンシデント察応チヌムで行っおいるわけでもなくフロヌにも組み蟌たれおいないので、今埌フロヌに組み蟌むように改善できないかなどの提案もありたした。 AI 時代だからこそ抑えたい「䟡倀のある」PHP ナニットテストを曞く技術 / 河瀚 翔吟 さん ナニットテストの重芁性を理解できたし、Before ず After があっお発衚がわかりやすかったので「このパタヌンはどうなんだ」などの具䜓的なずころたで議論を行いたした。 たた、BASE内でのテストルヌルの確認や、コヌディングルヌルの確認も行いたした。 AI 時代だからこそ孊ぶべき PHP の基瀎 / めもり〜 さん 知識の幅を広げるためにどんなこずができるかを振り返り぀぀、今仕事でどんなこずをやっおいるずいう話をしたした。 テストやCIなどガヌドレヌルに関する話は、「予防に勝る防埡なし2025幎版 - 堅牢なコヌドを導く様々な蚭蚈のヒント」や「AI 時代だからこそ抑えたい「䟡倀のある」PHP ナニットテストを曞く技術」でも同様の䞻匵されおいるずころがあり、発衚を䞊べおふりかえり䌚を行ったからこそ、知識の結び぀きが芋えおきお孊びがありたした。 おわりに 今回で最埌ずなるPHPカンファレンス犏岡でしたが、感慚深くもずおも楜しいカンファレンスでした。10幎間、本圓にお疲れさたでした 開催の準備をしおいただいたスタッフの方々、登壇しおくださった皆様、カンファレンスに協賛しおくれたスポンサヌの皆様、そしお、PHPカンファレンス犏岡を盛り䞊げおくれたPHPerの皆様、ありがずうございたした BASE ではカンファレンス登壇者が䜕名も圚籍しおいたす。興味があれば採甚情報もぜひご芧ください binc.jp
はじめに こんにちはBASE BANK Dept にいるフルサむクル゚ンゞニアの02です。 今回はFull Cycle Developers Night #2 ゚ンゞニアはどこたでビゞネスを知るべきずいうBASE株匏䌚瀟(以䞋、BASE)、株匏䌚瀟CARTA HOLDINGS(以䞋、CARTA)、MOSH株匏䌚瀟(以䞋、MOSH)で共催したむベントに぀いお、圓日の様子をお届けしたす 開催したむベントに぀いお base.connpass.com Full Cycle Developer(以䞋、フルサむクル゚ンゞニア)ずは、Netflixが2018幎に提唱した゚ンゞニアのあり方の䞀぀です。フルサむクル゚ンゞニアは、コヌドを曞くだけでなく、蚭蚈から運甚たで゜フトりェアプロダクトのラむフサむクル党䜓に責任を持ちたす。 Full Cycle Developers at Netflix — Operate What You Build devblog.thebase.in そんなフルサむクル゚ンゞニアを䞻軞ずしたむベントが、Full Cycle Developers Nightです。今回は「゚ンゞニアはどこたでビゞネスを知るべき」をテヌマに、事業ずの向き合い方に぀いおパネルディスカッションしたした パネルディスカッションの様子 パネルディスカッションの前に、各パネラヌから自瀟のビゞネスモデルや組織圢態に぀いお、スラむドを甚いお5分皋床で解説しおもらいたした。 今回のテヌマ「゚ンゞニアはどこたでビゞネスを知るべき」では、ディスカッション䞭に各瀟のビゞネスモデルや組織圢態の話が出おくるこずが想定されたした。そのため、事前に理解しおもらった䞊でパネルディスカッションを始める流れにしたした。 各パネリストずモデレヌタヌの様子 パネルディスカッションでは、以䞋のようなテヌマで話したした 「ビゞネスサむド」具䜓的に誰を想像しおいたすか どんな圹割分担でどこたで意芋をだしおいる どういった倱敗から「ビゞネスを知らねば」ず思ったか フルサむクル゚ンゞニアずしお、䌁画を゚ンゞニア発信で進めるこずはあるかその堎合、䜕を根拠に提案しおいるか コヌドを曞く開発業務だけに集䞭したい゚ンゞニアに、どうマむンド倉革を促せばよいか フルサむクル゚ンゞニアの立堎で、PdMにしおもらっお嬉しかったこず・やりやすくなったこずは䜕か 途䞭からは参加者からもXでテヌマを募集し、盛り䞊がりを芋せたした圓日の盛り䞊がりは、Xのハッシュタグからもご芧いただけたす #full_cycle_nightのタむムラむン パネルディスカッション䞭の様子 おわりに Full Cycle Developers Night #3 も開催したいず思っおいたすフルサむクル゚ンゞニアや事業ずの向き合い方に興味がある方は、ぜひFull Cycle Developers Night #3 でお䌚いしたしょう BASE BANK Deptでは、事業を゚ンゞニアリングするフルサむクル゚ンゞニアを募集しおたす。 ご興味がある方は、ぜひ䞋蚘のURLから採甚ペヌゞをご芧ください binc.jp
自己玹介 BASEで゚ンゞニアむンタヌンをしおいる吉川唯音です。趣味は音楜で、䜜曲や線曲をしおいたす。この床10月9日をもっお、むンタヌンを無事に終えるこずになりたした。玄2ヶ月のBASEでのむンタヌンを通しお、感じたこずや孊んだこずに぀いお語っおいこうず思いたす むンタヌン入瀟の経緯 自分は普段から倚様なクリ゚むタヌずの接点があり、呚囲ではBASEを利甚しおいる方も倚く、そのため以前からBASEずいう存圚を知っおいたした。そうした背景もあり、サポヌタヌズの1on1むベントに参加した際により匷く興味を持ち、面談を経お応募に至りたした。そしお遞考が進み、8月からむンタヌンずしお入瀟したした。初めおBASEを蚪れた際には、倧きなガラス匵りの゚レベヌタヌずオフィスの開攟感のある雰囲気に驚いたこずを今でも芚えおいたす。 BASEで実際にやったこず ショップ管理画面党䜓のデザむンリニュヌアル開発 私はBASEで「ショップ管理画面党䜓のデザむンリニュヌアル開発」にゞョむンし、フロント゚ンドの実装を担圓したした。普段はReactを扱うこずが倚いのですが、BASEではVueを甚いお開発を進めたした。特に印象に残っおいるのは「デザむンシステム」の考え方です。倧芏暡なプロダクトであるからこそ、将来的な拡匵性を意識し、䞀箇所の修正が党䜓に反映される仕組みや、新しい機胜を远加しやすい蚭蚈が敎えられおいたした。単なる芋た目の調敎ではなく、フロント゚ンドにおける本質的で重芁な仕組みを䜓隓できたず感じたした。 ▲新管理画面 ▲旧管理画面 iOS 26 察策 2ヶ月目はiOS 26 察策にもゞョむンしたした。iOS26のリリヌス前に、シミュレヌタヌで怜蚌や修正を進めたした。プロダクトの芏暡が倧きい分、前提知識や党䜓構造の理解が求められ、圱響範囲を考慮しながらコヌドを曞くこずの難しさを匷く実感したした。BASE独自に構築された仕組みや、フロント゚ンドの䞭枢にあたる郚分に觊れるこずは難しかったですが、実装しおいおずおも面癜いず感じたした。 "プロダクト"ずリリヌス䜓隓 たた、この経隓を通じおAI゚ヌゞェントに察する考え方も倉わりたした。AIは人間の意図や文脈を完党には理解できないからこそ、プロダクトの構造や本質を螏たえ、圱響範囲を芋据えた蚭蚈・実装を行うこずが゚ンゞニアにずっお䞍可欠だず孊びたした。 むンタヌン最終週には、自分が担圓した実装箇所が無事にリリヌスされるのを芋届けるこずができ、ずおも嬉しく感じたした。実際にプロダクトずしお動いおいる様子を芋たずきは、感動したした。長く続いおいたプロゞェクトに参加し、限られた期間の䞭でリリヌスの堎面にも立ち䌚えたこずは、本圓に幞運であったず感じおいたす。 むンタヌンを通じお感じたこず 特に孊びになったこず BASEでのむンタヌンを通じお特に孊びずなったのは、「 プロダクトに向き合う姿勢 」ず「 実務ずしおのスクラム開発 」です。 入瀟しおたず驚いたのは、プロダクトに察する考え方でした。「コヌドを蚘述する」こずにずどたらず、「なぜその機胜を䜜るのか」「ナヌザヌはどのように利甚するのか」ずいった背景たでを深く考える文化がありたす。゚ンゞニアだけでなく、デザむナヌやPdMの方々ず䞀緒に議論し、提案を亀わしながらプロダクトを圢にする。そこには「難しいこずをシンプルにする」ずいう思想が匷く根付いおおり、これはプロダクト党䜓や日々の業務に反映されおいるず感じたした。この経隓を通しお、゚ンゞニアにはコヌドを曞くこずだけでなく、ドメむンを理解し、本質的に䟡倀のあるものを芋極める芖点が䞍可欠だず実感したした。 さらに、BASEのむンタヌンで特に貎重だったのは、実際に゚ンゞニアの方々ず同じチヌムでスクラム開発に参加できたこずです。レトロスペクティブやスプリントレビュヌ、デむリヌスクラムずいったスクラムむベントに、開発メンバヌの䞀員ずしお加わりたした。プロダクトのゎヌルに適切に向かえおいるか、チヌムの状況はどうかずいった点に぀いお、日々掻発に議論しながら開発を進める経隓はずおも刺激的でした。このように実務ずしおのスクラム開発を䜓隓できたこずは、他のむンタヌンでは埗られない、倧きな孊びずなりたした。 こうした孊びを自分なりにアりトプットし、自分が所属するコミュニティでの開発や自己開発にも取り入れるなど、より前向きにチャレンゞできるようになりたした。コミュニティ内郚のむンタヌンでは、フロントのデザむンシステムによる共通化やレトロスペクティブのファシリテヌション、開発するプロダクトに察しお積極的に向き合っおいたす BASEのすごいず思ったずころ BASEに入瀟しお最初に感じたこずは、受け入れ䜓制がしっかり敎っおいるこずでした。入瀟前の面談では「今たで新卒を採甚したこずがなく、教育制床や受け入れ䜓制が十分ではない」ず䌝えられおいたしたが、実際には予想以䞊に䞁寧に受け入れおいただき、ずおも驚きたした。むンタヌン期間䞭はメンタヌずしお぀いおいただいた先茩゚ンゞニアに、開発業務から日々のサポヌトたで手厚くフォロヌしおいただき、瀟䌚人経隓の少ない私にずっお非垞に心匷く感じたした。 たた、BASEの魅力を匷く感じたのは「プロダクトに察する䞀貫した思想」ず、充実した開発環境の䞡立です。ナヌザヌ芖点を倧切にしながら「難しいこずをシンプルにする」文化が根付いおいる䞀方で、Android実機をWebブラりザからリモヌト操䜜・管理できるツヌルがBASE内で甚意されるなど、開発環境にはギヌクさもありたした。こうした環境の䞭で、AIでは生み出せない䟡倀やプロダクトぞの愛着を肌で感じるこずができたした。 むンタヌンを考えおいる孊生に向けお BASEでのむンタヌンは、チヌムの䞀員ずしお受け入れられ、実際の開発業務に携わるこずができたす。そしお他の䌁業では経隓できない貎重な孊びがありたす。たた、メンタヌランチでは費甚補助があり、矎味しいご飯を楜しみながら、むンタヌン期間䞭に参加したPJ倖の方ず亀流するこずができたした。特にオムラむスが矎味しかったです。 さらに、BASEには1on1や党瀟集䌚、郚掻動ずいった制床が敎っおおり、倚くの瀟員の方々ず関わる機䌚がありたした。むンタヌンずしお参加する䞭で、さたざたな芖点や刺激を埗られる、ずおも恵たれた環境だったず感じおいたす。 1on1では先茩゚ンゞニアの方ず技術的なお話をさせおいただいただけでなく、人事・PdM・CSずいった他職皮の方々ずも察話する機䌚をいただきたした。将来のキャリアや就掻に぀いおの盞談から、BASEでの開発䜓制や技術に関する具䜓的なお話たで、幅広く孊ぶこずができたした。 BASEで働くメンバヌはずおも芪切で、倚方面に優れおいるず感じたした。だからこそ、゚ンゞニアリングの実務だけでなく、カルチャヌ面でも倚くの孊びが埗られるむンタヌンだず匷く感じたした。ぜひBASEのむンタヌンを通じお、その䞡方を䜓隓しおいただきたいです
はじめに BASEで゜フトりェア゚ンゞニアをしおいる Futoshi Endo @fendo181 ずいいたす。 以前、同じチヌムの Kumar さんが以䞋のタむトルで蚘事を執筆されたした。 「BASEでの開発䜓隓を向䞊させるための取り組み」 devblog.thebase.in この蚘事では、生成AIの掻甚によっお、メンバヌ党員がフロント゚ンドずバック゚ンドの䞡方を担圓できるようになった、ずいう挑戊に぀いお觊れられおいたした。 今回のプロゞェクトでは、メンバヌ党員がフロント゚ンドずバック゚ンドの䞡方を担圓できるようにするずいうこずにチャレンゞをしたした。メンバヌは以前から専門領域を広げたいずいう意欲を持っおいたしたが、孊習コストやペアプログラミングにかかる時間的負担を考慮し、プロゞェクトの進行を優先せざるを埗たせんでした。 しかし今回、AIツヌルの掻甚によっおこれが実珟可胜ずなりたした。 自分はたさにこのプロゞェクトの゚ンゞニアメンバヌの1人であり、AIツヌルの力を借りるこずで、バック゚ンドの領域から、フロント゚ンド開発に挑戊するこずができたした。 この蚘事では、どのように生成AIを掻甚しお孊習・開発を進めたのか、具䜓的な䜓隓をベヌスに玹介したす。 AIを“頌れる゚キスパヌト”ずしお掻甚し、スキルを拡匵する 今回のプロゞェクトでは、䞻に React + TypeScript を甚いた機胜開発が䞭心でした。 プロゞェクト初期は「フロント゚ンドもやっおみたい」ずいう気持ちはあり぀぀も、ReactやTypeScriptの文法に䞍慣れな自分にずっおは、 「䜕が分からないのかすら分からない」状態 で、䞍安の方が倧きかったのを芚えおいたす。 たず取り組んだのは、 Reactの公匏ドキュメントのチュヌトリアル をベヌスにした写経です。 基本的な構文やラむフサむクル、Hookの䜿い方などを手を動かしながら芚えおいきたした。 しかし、それだけでは実務のコヌドはなかなか読めるようにはなりたせん。 PRレビュヌにおいおも、倉曎内容の意図が掎めずに苊劎しおいたのが実情です。 そこで掻甚したのが、 ChatGPT や GitHub Copilot Chat ずいったAIツヌル です。 わからないコヌドの説明や、PR内容の芁玄、APIや型の補足など、質問を投げるこずでその堎で壁打ちができる環境が構築できたした。 その埌は、技術曞やサンプルコヌドを写経しながら実装力を匷化し、壁にぶ぀かるたびにAIに質問を重ねるこずで、 孊習のトラむアンド゚ラヌを高速に回すこずができたした。 特に印象に残っおいるのは、1ヶ月前は理解できなかったコヌドが、自分でAI Agentを掻甚し、出力されたコヌドの意図をすべお理解し、業務でも掻甚できるコヌドぞず倉わっおいった実感です。 たずえば、最初はAIが生成したコヌドの正誀すら刀断できたせんでしたが、繰り返しのやり取りず経隓の積み重ねによっお、 「どの郚分が怪しいかなぜそうなるか」を自然ず説明できるようになっおいた のです。 圓初は「フロント゚ンドに関連する機胜改善で20本ほどPRを出せたら十分」ず考えおいたしたが、プロゞェクト終盀には 60本以䞊のPRを提出 しおおり、予想以䞊の成果に぀ながりたした。 もちろん、新芏ペヌゞ远加や、APIぞリク゚ストを行う為のClient远加のような機胜開発から、现かなUI調敎や文蚀倉曎なども含たれおいたすが、ReactずTypeScriptの知識がほがれロの状態から始めた自分にずっお、この実瞟は倧きな自信になりたした。 この経隓から匷く感じたのは、 生成AIは単なる効率化のツヌルではなく、孊習の初動コストを䞋げ、スキル拡匵を加速する存圚である ずいうこずです。 今埌、「生成AIでコヌドを曞く」だけでなく、生成されたコヌドが正しいかを刀断する胜力レビュヌ力・蚭蚈力がたすたす重芁になるず考えおいたす。 その意味で、AIずの理想的な関係性は以䞋のように敎理できるのではないかず思っおいたす。 埗意な領域 → 生成AIを掻甚し、生産性を最倧化する 䞍埗意な領域 → 生成AIを“頌れる゚キスパヌト”ずしお掻甚し、孊習のスピヌドを䞊げる AIず䞊手く付き合うコツは埗意な領域では積極的に生成AIを掻甚し、生産性を䞊げ、䞍埗意な領域では頌れる゚キスパヌトずしお掻甚し、孊習をするのが良い近道なのではないかず思っおいたす! たずめ 今回玹介したようにAIを掻甚するこずでこれたで専門倖だったフロント゚ンド領域に挑戊するこずができたした。䞀方で、AIを䜿う䞭で䞀貫しお意識しおいたのが、 Howやり方に偏りすぎないこずの重芁性 です。 Claude CodeやCodex CLIなど、AI Agentによるコヌドの自動生成は非垞に䟿利ですし、私自身も Zennで蚘事 を曞くほど積極的に掻甚しおいたす。 しかし、゜フトりェア゚ンゞニアずしお本圓に重芁なのは、 「なぜその実装を遞ぶのか」「蚭蚈意図は䜕か」ずいうWhyの郚分 です。 ナヌザヌ䜓隓、アヌキテクチャ、保守性、チヌム内の運甚方針など、Whyを考慮するこずで、より本質的な開発ができるず確信しおいたす。 AIは間違いなく、これからの゚ンゞニアにずっお欠かせないパヌトナヌになりたす。 だからこそ、自身の成長ぞ぀ながる䜿い方ず、䞊手く付き合っおいくのがこれからのAI時代の゚ンゞニアに求められるスキルセットだず思っおいたす! 最埌に宣䌝で、BASEにおけるAI掻甚や開発スタむルにご興味を持っおいただけた方がいれば、ぜひ採甚ペヌゞもご芧ください binc.jp 今埌も、プロゞェクトで埗た知芋を継続的に発信しおいきたす。 最埌たでお読みいただき、ありがずうございたした! おわり!
はじめに こんにちは、BASE株匏䌚瀟 䞊玚執行圹員 SVP of Development の藀川です。 今幎、生成AIの掻甚は経営課題の䞀぀ずしお倧きな泚目を集めおいたす。 開発担圓圹員ずいう立堎ずしおも、この倉化を肌で感じる必芁があるず考え、䜕幎ぶりかに゜ヌスコヌドず向き合い、実際にプルリク゚ストを出しおみるこずにしたした。 ゜ヌスコヌドから離れおいた10幎間 最埌にBASEの゜ヌスコヌドを曞いおいたのは、2016幎頃たで。 䞊堎に向けお、採甚掻動や組織拡倧がマネゞメント課題ずしお本栌化し、マネヌゞャ育成や゚ンゞニア採甚、IT内郚統制、情報システム敎備ずいった圹割が増えおいく䞭で、自然ず珟堎のコヌドから離れおいきたした。 その埌、システムは倧きく進化しおいきたした。 開発環境のDocker化、本番環境のコンテナ化、テスト導入、React/Vue.js採甚、モゞュラモノリス化、CakePHP䟝存床の䜎䞋、PHP5から7〜8ぞの移行 。 自分が䜜った開発チヌムの人たちの手で、気付けば、今のコヌドやサヌバ構成はすっかり「浊島倪郎」状態になっおいたした。 CursorでBASEのコヌドをキャッチアップ 最初の壁は、この10幎分の倉化をどう取り戻すか。 以前からのBASEのシステム構造は頭に入っおいたので、その知識をベヌスにAIを䜿いながらキャッチアップしおいきたした。 䜿ったのはAI゚ヌゞェントアプリの「Cursor」です。 Dockerfileやドキュメントを䞀぀ひず぀読むには時間がかかりたすが、これらの情報や゜ヌスコヌドを䞋地ずしおCursorに質問するず、必芁な情報を敎理しおくれたす。 合間の時間を掻甚しながら進め、ほが誰にも質問せずに1週間で開発環境を再珟できたした。 どうしおもわからない郚分だけ、CTOにヒントをもらう皋床で枈みたした。 特に驚いたのは、゜ヌスコヌドだけを元に「BASE Apps」ずいう抂念をCursorが理解しおくれたこずです。 BASE Appsずは、抜遞販売機胜やTikTok Shop連携などの機胜を、埌からショップにむンストヌルできる仕組みです。 䜿い始めのBASEはシンプルなたた、必芁に応じお高い機胜を远加できるようにするこずで、お店の成長に合わせた柔軟な情報アヌキテクチャを実珟しおいたす。 この構造をAIが説明しおくれたずき、正盎ちょっず感動したした。 実際にPRを出しおみた 環境構築が終わり、手元のDocker環境でBASEの開発環境が動くようになったので、新入瀟員やむンタヌンの人に割り圓おられるオンボヌディング甚のチケットプヌルから、ちょっずした䞍具合修正のチケットを割り圓おおもらいたした。 チケットに曞いおある芁件をプロンプトずしおCursorに枡すず、修正案を生成しおくれたす。チケットに曞いおある芁件が適切か぀具䜓的であればあるほど、修正案の生成は粟床が高くなりたす。 それを元にコヌドを曞き換えおプルリク゚ストを出すこずに成功したした。 コヌド自䜓は圓瀟の゚ンゞニアの仕事堎ですから適圓なコヌドは出せたせん。できるだけ䞁寧に内容のチェックをしたした。ここたではほがほが短時間での䜜業なのですが気の䜿い所です。 ゚ンゞニアからは䞁寧なレビュヌが返っおきたしたが、振り返るず「必芁以䞊に倧きな修正だったかもしれない」ず感じおいたす。 理由は、フロント゚ンドずバック゚ンドが別リポゞトリで管理されおおり、Cursorがそれぞれの䞭で最適解を導いた結果、党䜓ずしおは少し倧げさな修正になっおいたためです。 今のCursorの管理単䜍はリポゞトリ単䜍になるため、リポゞトリ間の関係性に぀いおは人間が俯瞰しお補う必芁があり、そこは甘かったなず痛感したした。たた、その解像床でコヌドレビュヌをしおくれた圓瀟゚ンゞニアはマゞですごいなず改めお思いたした。 レビュヌを通じお感じたこず レビュヌの指摘自䜓は正しく、Webサヌビスの倉曎においお最小限の修正が望たれるずいう考え方には玍埗です。 今回のケヌスではCursorが生成したコヌドは「動䜜的には正しい」ものでしたが、それが「チヌムずしお最適なコヌド」であるずは限りたせん。 AIが導いた“技術的に正しい解”ず、プロダクトずしお“望たしい解”は必ずしも䞀臎しない 。 このギャップは今回の倧きな孊びでした。 䞀方で、AIが生成したコヌドを人間が粟緻にレビュヌするのは工数がかかりたす。 過剰にレビュヌするのは非効率にも぀ながり、今埌は「どこたで人力で芋極めるか」の基準づくりが重芁になるず感じたした。 なお、今回のレビュヌは、䞊玚執行圹員からのプルリク゚ストずいうこずもあり、普段より䞁寧に察応しおくれた可胜性がありたすもしかするず譊戒もあったかもしれたせん 笑。普段のメンバヌ同士であれば、もう少し軜いレビュヌで枈んだかもしれたせん。 なので、逆にこれほどの時間を぀かっおもらっお申し蚳ないなず思ったのが正盎な感想で、アりトプットをCTOや開発チヌムに委ねおいお、自分自身で責任を持ちきれない今の圹割においおは、気軜にプルリクは出せないなずも思いたした。 生産性ず責任のバランス AI掻甚で避けお通れないのが、「どこたで人間が最終責任を持぀べきか」ずいう課題です。 AIが出したコヌドが正しく動いおいるなら、そのたた通すべきか それずも品質を優先しおさらに粟緻化するべきか この答えは䞀぀ではなく、チヌムやプロゞェクトによっお倉わりたす。 だからこそ、開発チヌム党䜓でレビュヌ方針を共有し、最適なバランスを探るこずが倧切です。 そしおもう䞀぀、AI掻甚は Biz・PdM・゚ンゞニアずいった圹割間の業務の「のりしろ」を増やす可胜性 を秘めおいたす。 MCPなどを掻甚しお゜ヌスコヌドに盎接アクセスし、コヌドを元デヌタずしお新芏開発のプロトタむプを䜜ったり、䌁画怜蚎や初期芋積もりを高粟床に進めたりする未来は、もう遠くありたせん。 圹割を超えお協業するための「のりしろ」を増やすこずが、AI時代の開発組織に求められる芖点 だず感じおいたす。 この「のりしろ」があるこずで、Biz・PdM・゚ンゞニアが同じデヌタを共有し、より速く高粟床な意思決定ができる未来が芋えおきたす。 将来的にはAIの凊理性胜が向䞊し、耇数プロゞェクトや耇数Webサヌビスを暪断しおカバヌできるようになるでしょう。 その時に備え、珟時点での最適解を垞に曎新し続けるチヌムでありたいず考えおいたす。 おわりに〜生成AIの可胜性 今回、久しぶりにコヌドぞ戻りPRを出す䞭で感じた䞀番の収穫は、珟堎を離れおいたベテラン゚ンゞニアでも、AIを掻甚すれば短期間でキャッチアップできるず実感できたこずです。 採甚やマネゞメントに泚力しおいた゚ンゞニアリングマネヌゞャにずっおも、生成AIは「珟堎感を取り戻すための匷力な手段」になり埗たす。 小さな修正でも構いたせん。AIを足がかりにコヌドぞ再び觊れるこずで、意思決定の粟床やチヌム理解は倧きく倉わりたす。 ただ正盎、今回は「PRを出すずレビュヌしおもらうのが申し蚳なく、遠慮しおしたう」気持ちもありたした。 だからこそ、AIに任せきりにするのではなく、自分なりの意芋を持぀ためにも、たずはコヌドに觊れおみるこずが倧切だず思いたす。 これはマネヌゞャだけの話ではありたせん。 珟堎のメンバヌも「今のやり方がベスト」ず思い蟌たず、AIを取り入れるこずで新しい速床感や発想を手に入れられたす。 AI掻甚ぞの枩床差は、やがお成果や成長速床の差に盎結したす。 AIは、珟堎ずマネヌゞャの距離を瞮め、チヌム党䜓を底䞊げするツヌルです。 重芁なのは「䜿うかどうか」ではなく、 「どう䜿い、どう組織に取り蟌むか」 です。 半幎埌、䞀幎埌にチヌムずしおどこたでスピヌドず粟床を高められるかは、いたどれだけ実践ず孊びを積み重ねられるかにかかっおいたす。 AIをチヌムの戊力に倉えるために、今のうちから詊行錯誀を重ね、未来の開発組織の圚り方を自分たちで圢䜜っおいくこずが倧切です。
CTOの川口 ( id:dmnlk ) です。 ブログタむトル通りむベントをやりたす。2025/08/06(æ°Ž)19:00 〜 21:00です。 base.connpass.com BASEでは、サヌビス運営13幎目を迎えた今だからこそ盎面しおいる技術的課題や、その乗り越え方に぀いお、珟堎の゚ンゞニアが率盎に語るむベントを開催したす。 日々の開発に加えお、10幎以䞊継続するサヌビスならではの知芋や悩み、リアルな゚ピ゜ヌドをお䌝えする予定です。 参考たでに、以䞋の蚘事で取り䞊げたようなトピックにも觊れる予定です devblog.thebase.in パネルディスカッションではあたり倖郚に出おこないプリンシパルテックリヌドず話したす。 瀟内蚘事ではこういうのずか devblog.thebase.in 個人ではこういう蚘事ずか曞いおたす。 yaakai.to 瀟内で䞀番Claude codeずかを觊っおいるはずなんでそのあたりに぀いおも色々話を聞こうず思っおいたす。 今回のむベントは採甚掻動の䞀環ですが、「今すぐ転職したい」ずいう方だけでなく、 「ちょっず話を聞いおみたい」くらいの枩床感の方も倧歓迎です。 懇芪䌚では技術的な雑談もできるので、ぜひ気軜にご参加ください。 なお、「connpassで登録するず転職掻動がバレそうで䞍安 」ずいう方は、XなどでDMいただければ個別に察応したす。
CTOの川口 ( id:dmnlk ) です。 ブログタむトル通りむベントをやりたす。2025/08/06(æ°Ž)19:00 〜 21:00です。 base.connpass.com BASEでは、サヌビス運営13幎目を迎えた今だからこそ盎面しおいる技術的課題や、その乗り越え方に぀いお、珟堎の゚ンゞニアが率盎に語るむベントを開催したす。 日々の開発に加えお、10幎以䞊継続するサヌビスならではの知芋や悩み、リアルな゚ピ゜ヌドをお䌝えする予定です。 参考たでに、以䞋の蚘事で取り䞊げたようなトピックにも觊れる予定です devblog.thebase.in パネルディスカッションではあたり倖郚に出おこないプリンシパルテックリヌドず話したす。 瀟内蚘事ではこういうのずか devblog.thebase.in 個人ではこういう蚘事ずか曞いおたす。 yaakai.to 瀟内で䞀番Claude codeずかを觊っおいるはずなんでそのあたりに぀いおも色々話を聞こうず思っおいたす。 今回のむベントは採甚掻動の䞀環ですが、「今すぐ転職したい」ずいう方だけでなく、 「ちょっず話を聞いおみたい」くらいの枩床感の方も倧歓迎です。 懇芪䌚では技術的な雑談もできるので、ぜひ気軜にご参加ください。 なお、「connpassで登録するず転職掻動がバレそうで䞍安 」ずいう方は、XなどでDMいただければ個別に察応したす。
はじめに こんにちはData Platformチヌムでデヌタ゚ンゞニアずしお働いおいる @shota.imazeki です。 匊チヌムでは、埓来の分析基盀を段階的に刷新する取り組みを進めおおり、その第䞀歩ずしお、ECS䞊で動かしおいたAirflowをAWS䞊のマネヌゞドサヌビスである Amazon Managed Workflows for Apache Airflow以䞋、MWAAに移行したした。 もずもずはむンフラ管理の手間を枛らすこずが目的でしたが、結果ずしおバッチ凊理時間が倧幅に短瞮されるずいう意倖な効果も埗られたした。 この蚘事では、ECS䞊のAirflowからMWAAぞの移行に至った背景や、工倫したポむント、埗られた改善効果などを玹介しおいきたす。 移行に至った背景 これたでBASEではECS䞊でApache Airflow v1を運甚しおいたしたが、運甚負荷が高く、むンフラ呚りの管理には別チヌムの支揎をお願いするこずもありたした。たたECS甚に皌働しおいるRDSのストレヌゞ容量が逌迫し぀぀あったこずも倧きな課題の䞀぀でした。 たた、Airflow v1ではサポヌトされおいないオペレヌタヌや機胜があり、ワヌクフロヌの蚭蚈・実装に制限が課されおいたした。埓来の分析基盀を刷新しおいくにあたり、これらの制玄は倧きな障壁になるず刀断し、基盀の䞭栞を担うオヌケストレヌションツヌルであるAirflowから着手するこずにしたした。 その結果、Airflowのメゞャヌバヌゞョンアップデヌトにあわせお、むンフラ管理の負荷を軜枛できるマネヌゞドサヌビスであるMWAAぞの移行を決断したした。 環境構築ず移行準備 最初にMWAAの公匏ドキュメントを参考にしながら環境構築を行いたした。事前に必芁なものずしおは、バヌゞョニングが有効化されたS3バケットのみで、それ以倖のVPCやセキュリティグルヌプ、IAMロヌルに぀いおはMWAAのマネゞメントコン゜ヌル䞊で䜜成したした。 参考: https://docs.aws.amazon.com/ja_jp/mwaa/latest/userguide/get-started.html この環境構築の段階で工倫したこずや躓いた点があったため、次にそれらに぀いお觊れおいきたす。 1. SSH鍵やAPIトヌクンなどの機密情報をSecrets Managerで管理する ECSで運甚しおいた際は、Airflow䞊の環境倉数やAirflow Variable, ConnectionにSSH鍵やAPIトヌクンなどを蚭定しお管理しおたした。ただし、どこにどの情報を眮くかの基準が曖昧になっおおり、管理が煩雑化しおいたため、移行に合わせお管理方法を芋盎したした。 MWAAでは S3にファむルずしお配眮しお参照する方法 もありたすが、以䞋の芳点からSecrets Managerに統䞀したした。 セキュリティ管理の芳点 情報曎新時の䜜業負荷軜枛ず安党性向䞊 MWAAぞの移行に䌎い、機密性の高い情報は党おSecrets Managerに保存し、Airflowから盎接参照する蚭蚈 に切り替えたした。 MWAAのAirflow蚭定オプション MWAA環境構築時に、Airflow蚭定オプションで[カスタム蚭定を远加]を遞択し、以䞋のキヌず倀のペアを远加したす。 secrets . backend : airflow . providers . amazon . aws . secrets .secrets_manager. SecretsManagerBackend secrets .backend_kwargs: { " connections_prefix " : " airflow/connections ", " variables_prefix " : " airflow/variables " } MWAAからSecrets Managerぞのアクセス蚭定 MWAAからSecrets Managerに安党にアクセスできるよう、IAMロヌルずポリシヌを蚭定したした。セキュリティを考慮しお、 airflow/* ずいう名前の Secretsのみアクセスできるようにスコヌプを絞っおいたす。 参考: https://docs.aws.amazon.com/ja_jp/mwaa/latest/userguide/mwaa-create-role.html#mwaa-create-role-attach-json-policy { "Version" : "2012-10-17" , "Statement" : [ { "Effect" : "Allow" , "Action" : [ "secretsmanager:GetResourcePolicy" , "secretsmanager:GetSecretValue" , "secretsmanager:DescribeSecret" , "secretsmanager:ListSecretVersionIds" ], "Resource" : "arn:aws:secretsmanager:{リヌゞョン}:{アカりントID}:secret:airflow/*" }, { "Effect" : "Allow" , "Action" : "secretsmanager:ListSecrets" , "Resource" : "*" } ] } Secrets Manager偎の蚭定 Secrets Managerにお、以䞋のように名前を付けお情報を保存したす。耇数のパラメヌタをたずめたい堎合はJSON圢匏にしおおくず、Airflow偎で分割しお取埗する必芁がなく䟿利でした。 airflow/connections/SSH_CONNECTION { "conn_id" : "SSH_CONNECTION" , "conn_type" : "ssh" , "host" : "192.0.2.0" , "login" : "centos" , "port" : 22 , "extra" : { "private_key" : "-----BEGIN RSA PRIVATE KEY----- \n <秘密鍵の内容は䌏せおいたす> \n -----END RSA PRIVATE KEY-----" } } airflow/connections/GCP_CONNECTION { " conn_type ": " google_cloud_platform ", " extra ": { " project ": " sample-project ", " keyfile_dict ": { " type ": " service_account ", " project_id ": " sample-project ", " private_key_id ": " abc123def456 ", " private_key ": " -----BEGIN PRIVATE KEY----- \n <秘密鍵の内容は䌏せおいたす> \n -----END PRIVATE KEY----- \n ", " client_email ": " sample-sa@example.com ", " client_id ": " 1234567890 ", " auth_uri ": " https://accounts.google.com/o/oauth2/auth ", " token_uri ": " https://oauth2.googleapis.com/token ", " auth_provider_x509_cert_url ": " https://www.googleapis.com/oauth2/v1/certs ", " client_x509_cert_url ": " https://www.googleapis.com/robot/v1/metadata/x509/sample-sa%40sample-project.iam.gserviceaccount.com " } } } airflow/variables/API_TOKEN abcdefg1234567890 DAGからの利甚䟋 その埌、DAGファむル䞊で以䞋のようにコヌドを曞くこずでSSH鍵やAPI_TOKENを利甚するこずが可胜になりたす。 from airflow.providers.ssh.operators.ssh import SSHOperator from airflow.providers.google.cloud.operators.bigquery import BigQueryExecuteQueryOperator from airflow.models import Variable # Secrets Manager に保存された SSH Connection を利甚 ssh_task = SSHOperator( task_id= 'ssh_task' , ssh_conn_id= 'SSH_CONNECTION' , command= "echo 'Hello MWAA!'" , dag=dag, ) bq_task = BigQueryExecuteQueryOperator( task_id= 'bq_task' , sql= "select 'Hello MWAA!'" , use_legacy_sql= False , location= 'asia-northeast1' , gcp_conn_id= 'GCP_CONNECTION' , dag=dag, ) # Secrets Manager に保存された API トヌクンを取埗 token = Variable.get( 'API_TOKEN' ) これにより、埓来の環境倉数やAirflow Connection、S3によるファむル管理ず比范しお、より明確か぀安党に機密情報を䞀元管理できるようになりたした。 2. フォルダ構成の敎理 MWAAではDAGファむル以倖にも、以䞋のような共通リ゜ヌスを利甚するため、dagsフォルダ配䞋に甚途ごずに敎理したした。 dags/ ├── sample_dag1.py # DAGファむル ├── sample_dag2.py ├── plugins/ # カスタムオペレヌタヌ、フックなど │ └── custom_operator.py ├── sql/ # ク゚リファむル │ └── sample_query.sql └── common/ # 共通関数やナヌティリティ └── utils.py MWAAのS3バケットでは、dagsフォルダ盎䞋がPythonモゞュヌルパスずしお認識されるため、DAGファむルず同じ階局配䞋( dags/ )に共通リ゜ヌスをすべおたずめおいたす。 そのため、DAGファむル内では以䞋のようにシンプルにむンポヌトできたす。 from common.utils import some_function from plugins.custom_operator import CustomOperator SQLファむルの利甚方法 Airflowで利甚するク゚リは以前から .sql ファむルで管理しおおり、この運甚をMWAAでも継続しおいたす。DAGのtemplate_searchpathにsqlフォルダを蚭定するこずでBigQueryExecuteQueryOperatorにファむル名を指定すればク゚リを実行できたす。 from airflow.providers.google.cloud.operators.bigquery import BigQueryExecuteQueryOperator # DAGオブゞェクトの䜜成詳现は省略、SQLファむルの怜玢パスのみ蚘茉 dag = DAG( dag_id= 'base_dwh' , template_searchpath=[ '/usr/local/airflow/dags/sql' ], ) bq_task = BigQueryExecuteQueryOperator( task_id= 'bq_task' , sql= 'sample_query.sql' , # sqlディレクトリ配䞋のファむル use_legacy_sql= False , location= 'asia-northeast1' , gcp_conn_id= 'GCP_CONNECTION' , dag=dag, ) もちろんJinjaテンプレヌトにも察応しおおり、DAG実行時に動的に倀を埋め蟌むこずも可胜です。以䞋は、Airflowの組み蟌みマクロ( {{ ds }} )ず、DAG偎から params を䜿っお枡した倀の䞡方を SQLファむル内で利甚する䟋です。 -- sample_query.sql SELECT column1, column2 FROM `sample_dataset.sample_table` WHERE DATE (column_date) = ' {{ ds }} ' AND category = ' {{ params.category }} ' DAG偎では、 params に倀を枡すこずで、SQLファむル内のJinjaテンプレヌトが展開されたす。 from airflow.providers.google.cloud.operators.bigquery import BigQueryExecuteQueryOperator bq_task = BigQueryExecuteQueryOperator( task_id= 'bq_task' , sql= 'sample_query.sql' , use_legacy_sql= False , location= 'asia-northeast1' , gcp_conn_id= 'GCP_CONNECTION' , params={ 'category' : 'category1' }, # params で category を指定する䟋 dag=dag, ) 3. GitHub Actions で MWAA ぞの自動デプロむ ECS時代もCircleCIを䜿っおCI/CDによるデプロむを行っおいたしたが、MWAAではS3にファむルを配眮する方匏になるため、移行にあわせおGitHub Actionsに切り替え、デプロむ方法も芋盎したした。 構築した内容 GitHub Actionsによっお以䞋を自動化したした。 mainブランチぞのマヌゞ時に、DAGファむル・plugins・共通凊理・SQLファむルなどに倉曎があれば、S3にアップロヌドする。 以䞋はそのGitHub Actionsのサンプルです。 name : Deploy MWAA DAGs on : push : branches : - main paths : - 'dags/**' jobs : deploy : runs-on : ubuntu-latest steps : - name : Checkout repository uses : actions/checkout@v4 - name : Configure AWS credentials uses : aws-actions/configure-aws-credentials@v2 with : aws-region : ap-northeast-1 # 䜿甚しおいる AWS リヌゞョン aws-access-key-id : ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key : ${{ secrets.AWS_SECRET_ACCESS_KEY }} - name : Sync DAGs to S3 run : aws s3 sync dags/ s3://sample-airflow-dag-bucket/dags/ --delete - name : List uploaded DAGs run : aws s3 ls s3://sample-airflow-dag-bucket/dags/ なお、 requirements.txt が曎新された堎合はMWAA環境の曎新が必芁です。珟圚は手動で察応しおいるものの、今埌はGitHub Actionsによる自動反映も怜蚎しおいたす。 ただし環境曎新䞭は䞀時的にMWAAが停止するため、バッチ凊理ぞの圱響がないタむミングで実行する必芁があり、このあたりは慎重に怜蚎しおいきたいず考えおいたす。 4. requirements.txt で発生した問題ず察凊 MWAAでも倖郚APIを利甚するために、requirements.txtにラむブラリを蚘茉しおむンストヌルしおいたす。ECS時代から利甚しおいたgoogle-ads, facebook-businessなどの広告系API甚ラむブラリも匕き続き䜿甚しおいたした。 発生した問題 MWAAでrequirements.txtを曎新した際、次のような問題が発生したした。 䞀郚のラむブラリ(google-ads, facebook-businessなど)のむンストヌル時に゚ラヌが発生 MWAAはpip installが1぀でも倱敗した堎合、党おのむンストヌルが䞭断される(All or Nothing)仕様 そのため、党おのDAGで必須なapache-airflow-providers-*系ラむブラリがむンストヌルされず、DAGが動䜜しなくなる 原因 Airflow公匏が提䟛しおいるconstraintsファむルず requirements.txt に蚘茉したバヌゞョン指定が衝突しおいたした。たずえば、MWAA v2.8.1(Python 3.10)の堎合、以䞋のconstraintsファむルが適甚されたす。 https://raw.githubusercontent.com/apache/airflow/constraints-2.8.1/constraints-3.10.txt このconstraintsファむルに含たれるバヌゞョンず異なるバヌゞョン(google-ads==22.0.0 など)を明瀺的に指定しおしたうず、バヌゞョン衝突によっおむンストヌル゚ラヌ → 党おのむンストヌルが倱敗ずいうこずになりたす。 参考: https://airflow.apache.org/docs/apache-airflow/stable/installation/installing-from-pypi.html#constraints-files 察応策 ロヌカル環境でAirflowのconstraintsを適甚した状態で pip install を怜蚌するようにしたした。 # 仮想環境を䜜成 rm -rf venv python -m venv venv source venv/bin/activate # pip / setuptools / wheel を最新化 pip install --upgrade pip setuptools wheel # constraints を適甚しおむンストヌル pip install -r requirements.txt \ -c https://raw.githubusercontent.com/apache/airflow/constraints-2.10.3/constraints-3.10.txt 特に以䞋に泚意しおいたす。 MWAAのバヌゞョンごずに察応するconstraintsファむルを適甚するこず むンストヌルしたいラむブラリがconstraintsファむルで制玄されおいるか確認するこず 必ずロヌカルでむンストヌルが成功するこずを確認しおから、MWAAに反映するこず MWAAぞの移行䜜業 デプロむやSecrets管理などの仕組みが敎ったので、実際の移行䜜業自䜓は比范的シンプルでした。 移行の進め方 DAGごずに独立しおいたため、党おを䞀床に切り替えるのではなく1぀ず぀順に移行・動䜜確認 TriggerDagRunOperatorを甚いたDAGのみ、たずめお切り替え 圱響範囲の小さいDAGから順に移行するこずでリスクを抑制 v1の時は実装䞊の郜合からBigQueryのク゚リ実行やSlack通知などで自䜜しおいたOperator / Hookを以䞋の芳点からAirflow公匏のProviderに眮き換え 保守・メンテナンスコストの削枛 Airflowバヌゞョンアップ時の互換性確保 Providerごずに现かな改善・バグ修正が取り蟌たれおいる その他 MWAAの動䜜環境(PythonバヌゞョンやAirflowバヌゞョン)に合わせお、コヌドの埮修正も行いたした。 機密情報の管理やDAG配眮堎所の倉曎も事前に行っおいたため、その郚分のコヌドの埮修正のみでDAG本䜓の移行䜜業自䜓はスムヌズに完了したした。 移行によっお埗られた意倖な効果 MWAAぞの移行を進めた䞻目的は「むンフラ管理の手間削枛」でしたが、思わぬ性胜改善ずいう効果も埗られたした。 凊理時間の改善 もずもず日次バッチずしお実行しおいたデヌタ連携凊理では、1日あたり玄14時間の凊理時間がかかっおいたした。MWAAに移行した結果、玄9時間で完了するようになり、4〜5時間ほど短瞮されたした。 詳现に芋おいくず、ECS偎では各タスクの開始間隔にも玄30秒の遅延があり、日次バッチ党䜓では玄500タスク × 30秒 = 箄4.2時間の埅機時間が発生しおいたした。MWAAではこの埅機時間がほがなくなっおおり、これによっお凊理時間が改善されたず考えおいたす。 原因の考察 さらに調査したずころ、ECSの方ではExecuterがSequentialExecutor(逐次実行)になっおいたしたが、MWAAではデフォルトでCeleryExecutor(䞊列実行)が䜿甚されおいたためでした。 ECS時代はシンプルさを優先しお SequentialExecutor を䜿甚しおおり、タスクは1぀ず぀実行しおいたした。䞀方、MWAAではCeleryExecutor(たたはKubernetesExecutor)がデフォルトで、タスクが䟝存関係に応じお耇数同時に実行される構成ずなっおいたす。これにより、独立しお動䜜可胜なタスクは自動的に䞊列実行され、タスク間の埅機時間も解消されたため、党䜓の凊理時間が倧幅に短瞮されたず考えおいたす。 なお、ECS時代でもExecutorの蚭定を倉曎すれば䞊列実行による改善は可胜だったかもしれたせん。ただし、そうした調敎やメンテナンスを自前で行うこずなく、マネヌゞド環境がデフォルトで最適な構成にしおくれるのも、MWAAを遞んだ倧きなメリットだず感じたした。 圱響範囲 タスクが䞊列実行されるこずによる圱響がないか、以䞋の芳点で確認したした。 元デヌタベヌスぞの圱響に぀いお MWAAぞの移行によっお凊理の䞊列化が進みたしたが、ETLツヌルずしおメむンで利甚しおいるEmbulk自䜓は逐次的に実行されるようになっおいるため、元デヌタベヌスぞの負荷が䞊列実行で急増するこずはありたせんでした。単玔に埅機時間が枛ったのみで、移行埌も元DBぞの負荷増加を心配するこずなく、安定しお運甚できおいたす。 䞊列実行によるタスク間の圱響 同じテヌブルや同じファむルぞの出力などをDAGのタスク内で行なっおおらず、タスクの䟝存関係(task1 >> task2)をDAG内で明瀺しおいたために同時実行がなされおも問題にはなりたせんでした。今埌もExecutorに䟝存しない(䞊列実行されおも問題ない)堅牢なDAG蚭蚈を継続しおいきたす。 今埌の改善点 1. DAGsフォルダ盎䞋のファむル敎理 珟圚、 dags フォルダ盎䞋にDAGファむルだけでなく plugins/ , sql/ , common/ ずいった耇数のフォルダが混圚しおいる状態です。 将来的には、DAGファむルず共通リ゜ヌスをより分かりやすく敎理し、管理・メンテナンスしやすい構成に改善したいず考えおいたす。 2. Terraformによるむンフラ構成管理 MWAA環境やSecrets Manager、S3バケットなどのAWSリ゜ヌスをTerraformで管理するこずで、環境構築や倉曎の再珟性を高め、運甚負荷の軜枛を図りたいです。 珟状は手動で蚭定しおいる郚分も倚いため、IaC化による暙準化・自動化が望たれたす。 おわりに Airflowの移行によっお、運甚負荷の軜枛だけでなく、思わぬ性胜改善も埗るこずができたした。 今埌も基盀党䜓の改善を進めながら、より安定したデヌタ連携基盀を目指しおいきたす。 最埌ずなりたすが、匊瀟ではデヌタ゚ンゞニアを募集しおいたす。䞊蚘で述べた課題以倖にもBASEの分析基盀には倚くの課題があっお、ずおもやりがいのある仕事かなず思っおおりたす。ご興味のある方は気軜にご応募ください open.talentio.com
AWS SUMMIT JAPANにあった瀟名を曞くボヌド はじめに BASE BANK Dept で Engineering Program Manager をしおいる倧接です。 BASEでは倚くのプロダクトでAWSを䜿甚しおおり、BASE BANK Deptでもフルサむクル゚ンゞニアの思想のもず、AWSに觊れる機䌚が倚いです。そのため、AWSのキャッチアップはずおも重芁です。 なぜフルサイクルエンジニアを目指すのか / FullCycleDeveloperNight#1 - Speaker Deck 今回はAWSの最新情報を埗るため、2025幎6月25日氎〜26日朚に開催されたAWS Summit Japan 2025に参加しおきたしたので、その様子をお届けしたす ちなみに昚幎の参加レポヌトブログもありたすので、そちらもぜひご芧ください。 devblog.thebase.in 基調講挔 基調講挔は倧盛況で、本䌚堎はもちろん、サテラむト䌚堎もほが満員の状況でした AWSやAWSを利甚しおいるパヌトナヌ䌁業の発衚に加え、AIに関しおはAnthropic瀟のプレれンテヌションなど、魅力的なトピックが目癜抌しでした サテラむトだけどなんずか座れた 基調講挔聎講したす✌ #AWSSummit pic.twitter.com/nYXHUW1h2J — 02 (@cocoeyes02) 2025幎6月25日 おおanthropic 日本オフィス開蚭 #AWSSummit pic.twitter.com/COh5DFCeYM — 02 (@cocoeyes02) 2025幎6月25日 ブヌス 䌚堎には様々な皮類のブヌスが蚭眮されおおり、AWSに぀いお詳しく知るこずができる「AWS Expo」や、各瀟のAWS掻甚事䟋を詳しく孊べる「Partner Solution Expo」などがありたした バヌチャルデヌタセンタヌツアヌ面癜かった 実際のAWSデヌタセンタヌをVRで芋れる空調ずか発電機ずか諞々実物芋れるの面癜い #AWSSummit pic.twitter.com/k9jBQ2LvAh — 02 (@cocoeyes02) 2025幎6月25日 去幎もブヌスみたchaos kitty! なんずwebアプリ機胜ができた他、7 月䞭には AWS Samplesで公開予定ずのこず 瀟内でやりたいなヌヌヌ #AWSSummit pic.twitter.com/QFS1snXt9h — 02 (@cocoeyes02) 2025幎6月25日 ポヌカヌラむクなゲヌムでAWSに぀いお孊べる#スマポ 䌚堎では自分のスマホでプレむできるよ 䜓にパタヌンを叩き蟌む感じがあっお反射でパタヌン出せるようになりそうで良い #AWSSummit pic.twitter.com/M1Qoldh7lK — 02 (@cocoeyes02) 2025幎6月25日 ちいかわの隣にゎリゎリのAWSアヌキテクチャ図あるのすき #AWSSummit pic.twitter.com/4W8Hh55fxh — 02 (@cocoeyes02) 2025幎6月25日 GameDay ゲヌムのようにAWSを䜓隓できるワヌクショップGameDayにも参加しおきたした aws.amazon.com 今回のGame Dayのテヌマはgenerative AIで、AWSが提䟛しおいる様々なAIサヌビスを䞭心ずした内容ずなっおいたした あたりにもGameDay参加したい欲が匷くお最前列取っおしたった #AWSSummit pic.twitter.com/RgryNMNEOO — 02 (@cocoeyes02) 2025幎6月26日 GameDay参加しおいきたす #AWSSummit pic.twitter.com/GnZR4ZGV0x — 02 (@cocoeyes02) 2025幎6月26日 惜しくも䞊䜍入賞はなりたせんでしたが、個人的にはあたりキャッチアップできおいなかった分野だったため、ずおも勉匷になりたした GameDay 8䜍/22チヌムでした残念 #AWSSummit pic.twitter.com/IGk1mlgqno — 02 (@cocoeyes02) 2025幎6月26日 もらった公匏ノベルティ たた、先着配垃のクッションやAWS認定ステッカヌなど、魅力的なノベルティグッズも倚数いただきたした サテラむトだけどなんずか座れた 基調講挔聎講したす✌ #AWSSummit pic.twitter.com/nYXHUW1h2J — 02 (@cocoeyes02) 2025幎6月25日 そういえばただもらっおなかったからAWS認定ステッカヌもろた #AWSSummit pic.twitter.com/rs2GBx3s9z — 02 (@cocoeyes02) 2025幎6月25日 Flight Tagもろた #AWSSummit pic.twitter.com/QdqKyHf2Pp — 02 (@cocoeyes02) 2025幎6月25日 おわりに 他にもセッションに参加したり、コミュニティブヌスでのLTを聞いたりず、このブログで曞ききれないほど様々なコンテンツを芋お、孊び、䜓隓しおきたした やはりAWS Summitは、AWSに぀いおキャッチアップするのに最適なむベントだず感じたす。来幎もぜひ参加したいです BASE BANK Deptでは、AWSにも觊れるフルサむクル゚ンゞニアを募集しおいたす。 たずはカゞュアル面談からどうぞ open.talentio.com open.talentio.com binc.jp
はじめに BASE の ProductDev で゚ンゞニアをしおいるTorataです。 2025幎6月28日土に開催された「PHP Conference Japan 2025」にBASEの゚ンゞニアが登壇 & ゎヌルドスポンサヌずしお協賛したのでその様子をお届けしたす ちなみに今幎は䟋幎ずは違いホットな倏開催でした BASEのスポンサヌブヌスの玹介に぀いお 先日のブログ でも玹介した通りBASEのスポンサヌブヌスでは「教えおPHPerの皆さん」ずいうテヌマでのアンケヌト圢匏の䌁画を実斜したした アンケヌトは3぀のお題を甚意したした PHPで成功した事 or 苊劎した事を教えお AIツヌルをどのように掻甚しおいるか教えお お気に入りの関数 or フレヌムワヌク教えお たた、アンケヌトに答えおもらった or 気に入ったものにシヌルを貌っおくれた人には BASE でもショップを開蚭されおいる COZY COFEE さんのコヌヒヌパックを配垃したした このショップさんはい぀も季節に合わせたブレンドを䜜っおくれる玠敵なショップさんなので気になる方はショップ芗いおみおください 圓日は想定しおいたよりもたくさんの方にアンケヌトに答えおいただき、アンケヌトボヌドも埋たるくらいの倧盛況でした。 䞭でもAIに関する質問には回答が集䞭しおいお、AIブヌムの盛り䞊がりを感じるこずができたした 登壇の玹介 Capi ( @ysssssss98 ) BASEでWebアプリケヌション゚ンゞニアをしおいるCapi(かぎ)です。 今回は趣味で觊っおる FrankenPHP を䜿いWebアプリケヌションを動かす方法をLTで玹介させおいただきたした。仕事に盎接掻きる内容ではありたせんが、PHPを取り巻く新しい技術を玹介できおよかったです。PaaSを利甚しお公開たで行えたのも個人的によかったです。もっず䜎レむアを深がり、次は深い話しができたら幞いです。 久しぶりに瀟倖で登壇をしお緊匵したした。 speakerdeck.com プログラミングをするパンダ ( @Panda_Program ) 今回は PHPerKaigi 2025 のモゞュラヌモノリス 、 TSkaigi 2025 のクリヌンアヌキテクチャ の発衚に続くオブゞェクト指向蚭蚈の発衚でした。スラむドの䞭で「クリヌンなコヌドずは認知負荷の䜎いコヌド」「Entity ず Value Object の違い」や「コマンドメ゜ッド・ク゚リメ゜ッド・モディファむアメ゜ッドを分けお曞こう」などオブゞェクト指向でコヌドを曞くにあたり倧切なこずをお䌝えしたした。コヌド䟋も亀えお玹介できたので、ここで埗た知識を掻甚しお日々の開発に掻かしおもらえれば幞いです。 スラむド䜜りで工倫した点は、markdownファむルをGoogle Slidesに連携しおスラむドを䜜るOSSの deck を䜿ったこずです。各スラむドの文字コンテンツをGoogle Slidesに反映できたので、転蚘の䜜業が倧幅に省力化できたした。たた、今回サンプルコヌドはmarkdownファむルをClaude Codeに読み蟌たせお生成させたものをチェックし、採甚したした。埮調敎をするだけで十分玹介できるコヌドを最初から出力しおくれたした。本スラむドの最埌に「このスラむドをAIに読み蟌たせたらコヌド生成できる」ず曞いおいるのは、実際に自分が手元で詊しおうたくいったからです。 PHP Conference での登壇は2回目でした。今回はプロポヌザルの段階でstar数が17、トラック4の䌚堎は満員で立ち芋が出るほどで嬉しい驚きでしたネットにはアップしないものの、写真撮れば良かったず埌悔したした笑。オブゞェクト蚭蚈は倚くの方が関心のある内容なのだず実感したのず同時に、たくさんの方にこの内容を届けられたこずが嬉しいです。 スラむドにも曞きたしたが、自分䞀人がクリヌンなコヌドを曞いおもチヌム開発においおは䞍十分です。みんなが「この時はこう曞くよね」ずいう共通認識がないず独りよがりになっおしたいたす。このため、倚くの方にこの内容が届けられたこずは意矩があるず思いたす。 䞀方、この発衚の内容は私の独創ではありたせん。 オブゞェクト蚭蚈スタむルガむド ずいう良曞を参照しおいたす。本曞を䜿った読曞䌚の進め方は、以前 ブログに曞いおいる のでこちらもぜひご芧いただければず思いたす。ぜひチヌムでこの本の読曞䌚をしお、みんなでクリヌンなコヌドを曞きたしょう speakerdeck.com 圓日芋たセッションの玹介 PHP 8.4の新機胜「プロパティフック」から孊ぶオブゞェクト指向蚭蚈ずリスコフの眮換原則 PHP8.4 で远加されるプロパティフックの玹介ず埌半は型システムの話も入れながらのプロパティフックが入るこずにより䜕が倉わるかの玹介でした。 個人的にプロパティフックがあるこずで今たでず䜕が倉わるの曞き方楜になるだけgetter, setter じゃだめなのず思っおいたのでこれから䜿っおいくぞず思えるような発衚でした。 自動販売機を䜿った䟋えばずおもわかりやすかったです。 speakerdeck.com むベントストヌミング図からコヌドぞの倉換手順 昚今のAI゚ヌゞェントでコヌド生成が楜になるずいうのは身をもっお䜓感しおいたしたが、このセッションでは自分たち゚ンゞニアがコヌドを曞かなくなったらその時間を䜕に䜿うべきなのかを感じさせられるセッションでした。 ポリシヌや倖郚システムずの連携など様々なパタヌンでの䟋があったのでむメヌゞもしやすかったです。 むベントストヌミングに賭けたくなりたすね speakerdeck.com おわりに ブヌスに来おいただいたみなさた誠にありがずうございたした たた、登壇された方々やスタッフの方もカンファレンスを盛り䞊げるために尜力しおいただき本圓にありがずうございたす。 おかげでい぀もカンファレンスを楜しむこずができおいたす。 BASEは今埌もカンファレンスむベントぞの参加や登壇を積極的に支揎しおいたす もしご興味ありたしたら採甚情報も確認しおください binc.jp
はじめに BASE BANK Dept で Engineering Program Manager をしおいる倧接です。 今回は、4月にリリヌスした最速振蟌ずそれたでの歎史に぀いお簡単に觊れ぀぀、どのようにプロゞェクトのリヌドをしたのか曞きたす baseu.jp 振蟌申請の皮類ず歎史 最速振蟌は、BASEが提䟛する振蟌申請の䞀぀の皮類です。 振蟌申請ずは、ショップオヌナヌさんがBASEでの売䞊金額を自身の銀行口座ぞ振り蟌むため申請する機胜です。 BASEの振蟌申請には、様々な皮類がありたす。衚にたずめるず䞋蚘のようになりたす。 皮類 振蟌日目安 手数料 通垞振蟌 10営業日埌 振蟌手数料事務手数料のみ お急ぎ振蟌 翌営業日たたは翌々営業日 振蟌手数料事務手数料振蟌申請金額の1.5% 定期振蟌 圓月末たでの売䞊金党額を翌月25日に自動で振り蟌む 振蟌手数料事務手数料のみ 最速振蟌 最短10分土日祝日含む 振蟌手数料事務手数料振蟌申請金額の3.0% 1. 通垞振蟌 BASEの基本的な振蟌方匏ずしお、圓初から提䟛されおいる振蟌方法です。䞀般的な決枈サヌビスでは月末締め翌月入金が倚い䞭、10営業日での入金サむクルを実珟し、早期入金を可胜にしたした。 手数料は、振蟌手数料事務手数料のみになりたす。 2. お急ぎ振蟌の導入2020幎2月 個人やスモヌルチヌムが倚いBASEショップのニヌズに応えるため、より迅速な入金サむクルを実珟する「お急ぎ振蟌」が導入されたした。翌営業日たたは翌々営業日での入金を可胜にし、キャッシュフロヌ改善に貢献しおいたす。 手数料は、振蟌手数料事務手数料振蟌申請金額の1.5%になりたす。 3. 定期振蟌の導入2022幎7月 申請の手間を軜枛するため、圓月末たでの売䞊金党額を翌月25日に自動で銀行口座ぞず振り蟌たれる「定期振蟌」が導入されたした。 手数料は通垞振蟌ず同じで、定期振蟌の蚭定はい぀でも解陀するこずができたす。 4. 最速振蟌の導入2025幎4月 さらなる入金スピヌドを求めるショップのニヌズに応えるため、お急ぎ振蟌よりもさらに早く早期入金を実珟する「最速振蟌」が導入されたした。䞻な特城は䞋蚘のずおりです。 最短10分での入金が可胜 土日祝日を含む365日察応 モアタむムシステム察応の金融機関であれば、圓日䞭の振蟌が可胜 手数料は、振蟌手数料事務手数料振蟌申請金額の3.0%になりたす。 どのようにプロゞェクトのリヌドをしおいったか たず前提ずしお、私はEngineering Program Manager以䞋EPMずいうプロダクトのデリバリヌずクオリティに責任を持぀ロヌルに぀いおいたす。 devblog.thebase.in 最速振蟌のプロゞェクトでは、䞻に䞋蚘のようなリヌドをしおいたした。 最速振蟌の蚭蚈アヌキテクチャやDB・API利甚などの基本蚭蚈、バッチの詳现蚭蚈、運甚蚭蚈など、実装、QAや本番テストの方針策定ず実斜 プロダクトマネヌゞャヌず連携しお契玄掚進および関連ステヌクホルダヌずの調敎MTGの実斜 スプリントやレトロスペクティブなどのチヌムむベントの運営 API調査からリリヌスたでの党䜓スケゞュヌルのハンドリング リリヌス埌の安定運甚を目指した改修ず保守 私個人ずしおは䞭芏暡プロゞェクトのリヌドは初めおでしたが、マネヌゞャヌず盞談しながらいく぀かの工倫を重ねおプロゞェクトのリヌドをしおいきたした。 ロヌドマップをベヌスに、目暙を瀺し続けおスケゞュヌルをすり合わせする プロゞェクトのリヌドをする人は、聞かれたらい぀でも答えられなければならないこずがたくさんありたす。 珟圚のプロゞェクトが順調に進んでいるかどうか どのマむルストヌンやリリヌスタヌゲットを目指しおいるのか どのタスクの優先順䜍が最も高いか、タスクの挏れはないか 想定されるリスクは䜕か スケゞュヌルが遅延しおいる堎合に、どのような具䜓的なリカバリヌ方法があるか これらの質問に答えられるよう、FigJamでロヌドマップを䜜成し、進捗管理を行っおいたした。 FigJamで䜜成したロヌドマップの図 ロヌドマップに蚘茉する内容は、次のようなものです。 タスクの内容 担圓者 芋積もり工数感 䜜業ステヌタス タスクの䟝存関係クリティカルパスがどこか タスク開始ず終了目安 などです。 このロヌドマップはプロゞェクトハンドリングの基瀎になりたす。 プロゞェクトがどのくらいタスクが終わっおいる/終わっおいないのか、今の状況を把握できる 挏れおいるタスクがないか客芳的にわかる どのタスクを最優先にすべきか、スケゞュヌルが遅れおいる堎合どうリカバリするか考えやすい メンバヌずのスケゞュヌルのすり合わせも、このロヌドマップをベヌスに行うずスムヌズに進む 䜜成するタむミングずしおは、理想は䞀番最初です。それが難しい堎合でも、なるべく早い段階で䜜成するず良いでしょう。 たた、このロヌドマップは䜕床でも䜜成し盎しおも構いたせん。重芁なのは、珟時点でプロゞェクトメンバヌずスケゞュヌルを通しお、リリヌス目暙ずそのプロセスを瀺し続けられるか、そしおスケゞュヌルのすり合わせができおいるかずいうこずです。 フェヌズごずの終了条件を明確にする 今回の最速振蟌は、銀行ず連携する倖郚連携を必須ずする開発でした。しかし、どのような倖郚連携であっおも「API調査」「蚭蚈」「実装」「QA」「リリヌス」ずいったフェヌズが必芁など、基本的な流れは共通しおいたす。 ただ、各フェヌズの終了条件を明確にしおおかないず、そのフェヌズで無限に時間を消費しおしたいたす。手戻りを枛らしながらも開発を進めおいくバランスを考え、適切な終了条件を蚭定する必芁がありたす。 最速振蟌では、API調査ず蚭蚈に぀いお䞋蚘のような終了条件を蚭定しおいたした。 API調査仮説ベヌスで最速振蟌にた぀わる業務フロヌ図をたたき台ずしお䜜成し、それが実珟できるかどうかを調査。実珟可胜性が確認できた段階で、API調査を終えお蚭蚈ぞ移る 蚭蚈党䜓の基本蚭蚈ドキュメントをベヌスに、それぞれのバッチなどの詳现蚭蚈が迷わず実装に着手できるあるいは実装しながら詰めおいくようになったら、バッチなどの詳现蚭蚈ぞ移り実装を始める 実際に動くものを䞀番に信じる なるべく䞍確実性をなくすには、実際に動くものをベヌスに考える必芁がありたす。 倖郚連携は動かしおみないず分からないものが倚いので、いかに早く動かせるか本番リリヌス前に確かめられるかを考える必芁がありたす。 倖郚連携先の開発環境で正垞に動䜜するか 最速振蟌では、できるだけ早く開発環境を入手できるよう契玄関連を最優先タスクに蚭定したした。 たた、開発環境で怜蚌できる事項をあらかじめ敎理し、怜蚌できない項目は本番環境でのテストで確認するこずにしたした。 本番環境で期埅通りに動䜜するか 最速振蟌では、本番環境での実際の銀行振蟌テストを実斜したした。本番環境でないず分からないこずを攟眮したたたリリヌスするのは非垞に危険だからです。 このテストは実際に銀行口座ぞ入金が発生するため、事前に瀟内での皟議手続きやテスト実斜ショップの準備なども䞁寧に行いたした。 プロゞェクトのリヌドをする人の腕の芋せ所 プロゞェクトのリヌドを実際に経隓しお、特に腕の芋せ所だず感じた点をいく぀か玹介したす。 いかに自分がボトルネックにならないプロセスを考えられるか vs いかに自分がクオリティに責任を持おるか 「自分がすべおを確認しなければ進められない」ずいう姿勢は非珟実的であるため、適切に暩限委譲しおいくこずが求められたす。 ただし、忙しさを理由に単なる䞞投げをしおはいけたせん。移譲のプロセスやissueチケットの曞き方などを工倫する必芁がありたす。たた、継続的にissueチケットを䜜成・管理する「筋力」も必芁です。 䞀方で、できるだけ倚くのレビュヌを行う姿勢も倧切です。プロゞェクトのリヌドする人は品質に責任を持぀立堎であり、レビュヌを怠るこずがPJの進捗を止めるこずにも぀ながりたす。 ずはいえ前述の通り、「自分がすべおを確認しなければ進められない」ずいう姿勢は非珟実的です。状況によっおは、期間限定でレビュヌを他のメンバヌに委ね、タスク消化に集䞭するずいう刀断が必芁な堎合もありたす。 この暩限委譲の適切なバランスを芋極めるこずが重芁です。 スケゞュヌルが遅れそうなずきのリカバリ案がいく぀出せるか プロゞェクトの開発を進めおいるず、スケゞュヌルが遅れおいる状況もありうるでしょう。そうなった時に、すぐに「玍期を䌞ばす」ではなく、どうリカバリするか、リカバリ案はいく぀あるかを考えるこずが重芁です。 䟋えば以䞋のようなリカバリ案がありたす。あくたで䞀䟋であり、プロゞェクトの状況によっおはさらに倚くの遞択肢があるでしょう。 タスクをさらに分解しお、䞊行で䜜業ができる状態にしたり、クリティカルパスのタスクを進めやすくする 先んじお特にクリティカルパスの䞭で䟝存関係が倚いタスクをこなし、タスクが終わるたでプロゞェクト党䜓の進捗が止たる状態を防ぐ 䟝存関係のないタスクを甚意しおおき、いざずいうずき人員远加した際のタスクずしお掻甚する このリカバリ案を出す胜力は、実際に経隓を積み、その経隓を振り返りながら埐々に䞊達しおいくこずで身に぀けられるものです。 リカバリが困難な堎合、プロゞェクトマネゞメントの基本である「スコヌプ/リ゜ヌス/玍期」のどれを調敎できるかずいう怜蚎が必芁になりたす。ただし、これは前述のリカバリ案の怜蚎ず実斜を䞀通り行った䞊での最終手段ず考えるべきです。 リ゜ヌス すぐにチヌム倖にヘルプを求められるよう、タスクが適切に敎理されおいるか プロゞェクトの知識を効率的にむンプットできる資料は甚意されおいるかただしプロゞェクト埌半になるほど難しくなる スコヌプ リリヌスに必芁な機胜や優先順䜍が明確に぀いおいるか 玍期 デリバリヌの遅延が事業蚈画にどの皋床の数字的圱響を䞎えるか ステヌクホルダヌはどう受け止めるか 越境するための関係倀づくりやコミュニケヌション力が問われる プロゞェクトで開発する機胜ず業務は密接に関わっおいたす。業務は想像以䞊に倚くのステヌクホルダヌが関䞎しおおり、これらのステヌクホルダヌを考慮せずに開発を進めるず、簡単に手戻りが発生しおしたいたす。 プロゞェクトの最初の段階でステヌクホルダヌを掗い出し、早めに盞談を持ちかけるこずが重芁です。 たた、コミュニケヌションにおいおは、堎の蚭蚈、ファシリテヌション、察話、ドキュメント䜜成など様々なスキルが求められたす。これらのスキルも、先述のスケゞュヌルリカバリ案ず同様に、実践ず振り返りを繰り返すこずで埐々に磚かれおいくものです。 おわりに プロゞェクトのリヌドをしおみるず、する前ずした埌で、芋えおくる景色には倧きな違いがあるず感じたした。今埌も積極的に経隓を積んで䞊達し、プロゞェクトのリヌドを通じお事業貢献できる゚ンゞニアになっおいきたいです BASE BANK Deptでは、プロゞェクトの開発リヌドをする / したい゚ンゞニアを募集しおおりたす。たずはカゞュアル面談からお埅ちしおおりたす open.talentio.com binc.jp
はじめに BASE BANK Department で ゚ンゞニア をしおいる池田聖瀺です。 入瀟しお1幎が経ちたしたが、この間、アラヌトやお問い合わせの察応に積極的に取り組んできたした。 今回は、その理由や意識しおいたこずを振り返っおみようず思いたす。 アラヌト察応、ナヌザヌからのお問い合わせ察応の䟡倀 䞻語を倧きくしたくないですが、倚くの゚ンゞニアにずっおアラヌト察応などは敬遠されがちだず思いたす。 確かに、集䞭しお取り組んでいるタスクを䞭断しなければならないこずもあり、スむッチコストもかかりたす。 しかし、私はアラヌト察応やナヌザヌからのお問い合わせ察応の業務に倧きな䟡倀があるず考えおいたす。理由は、以䞋のような圢で自分自身の成長にもチヌムぞの貢献にも぀ながるからです。 キャッチアップに぀ながる 問題解決胜力の向䞊 ナヌザヌの声に盎接觊れる貎重な機䌚 キャッチアップに぀ながる 私が所属しおいるチヌムでは、䞻に4぀のプロダクトや機胜を担圓しおいたす。 積極的に開発しおいるプロダクト以倖は、なかなか普段のタスクでシステムの詳现を远うこずが難しいです。 アラヌト察応やお問い合わせ察応を行うこずで、デヌタ構造や該圓凊理のコヌドを远うこずができおシステムぞの理解が深たりたす。 たた、この゚ラヌを出さないためにはどんな蚭蚈にすれば良いのか、どんなハンドリングが適切か、などを考えるこずができお゚ンゞニアずしお技術力を䞊げる機䌚になるず思いたす。 実際に、゚ラヌハンドリングの修正PRを䞊げるこずや、プロダクトのドキュメントに蚘述を远加するなどのアりトプットを行い、チヌムの資産にするこずもできたず思いたす。 問題解決胜力の向䞊 アラヌト察応やお問い合わせ察応などを行う際に、゚ンゞニアだけに閉じず、他職皮の方ず連携しお解決するこずが必芁な堎合がありたす。 䟋えばお問合せをもらった際に、「このような意図であっおいるか」、「曎にこういった情報が欲しい」ずいった連携をしたり、 「システム的にこんな状態になっおいるのでナヌザヌに䌝えたいがどんな颚に䌝えるのが適切か」などの盞談をしたりず、コンテキストを共有するこずや、問題解決たでの道のりを䞀緒に描くなどの職皮を超えた連携の力を育むこずができたす。 ナヌザヌの声に盎接觊れる貎重な機䌚 ナヌザヌからのお問合せを受けるこずで、どのように機胜を䜿っおいるか、どんなこずで困っおいるのか、ずいう情報に盎接觊れるこずができたす。 ナヌザヌず向き合っおいる実感が持おる貎重な機䌚だなず思うず共に、 こんな颚にヘルプ情報出したら良いかも、こんなUIにしたら分かりやすくなるかも、ずいう考える機䌚になるため゚ンゞニアずしおの芖野を広げるこずができるず思いたす。 実際にどのような流れで行っおいるか 実際には抂ね䞋蚘のような流れで行っおいたす。 お問い合わせの堎合 お問い合わせ文を芋お回答すべきこずを確認する 回答の根拠ずなる、情報を集めに行く 察象の゜ヌスコヌド、DB、ヘルプペヌゞ、ドキュメントなど 情報の敎理を行い、回答する アラヌト察応の堎合 アラヌトが発生したらSlackの通知が飛ぶので、そこからSentryを芋に行く 該圓ナヌザヌのデヌタを確認し぀぀、リカバリヌ必芁の有無を刀断しお実斜する リカバリヌが必芁であればク゚リを曞いたりなどの察応を行う 根本原因を調査 根本原因ぞの察策を怜蚎 EPMやPdMずすり合わせお優先床付けを行う 意識しおいるこず お問い合わせの回答をする際に、どの情報を、どのように䌝えれば過䞍足なく理解しおもらえるか 根本原因ぞの察策が運甚手順曞に曞いおあったずしおも、「なんでこの優先床の意思決定になったのか」などを远うこずで、自分自身の成長に繋がるためissueを远っお芋たりしたす 進め方や解決策に関しお積極的にフィヌドバックをもらいにいくこずで、本圓に良かったか、もっず良くするための方法を吞収しおいく 参照EPMずは devblog.thebase.in 具䜓的な埗 冒頭の結論で曞いた 「キャッチアップに぀ながる」、「問題解決胜力の向䞊」、「ナヌザヌの声に盎接觊れる貎重な機䌚」 でも蚘茉した内容ず重耇するずころもありたすがたずめるず䞋蚘の3点だず思いたす。 ゚ンゞニアずしおの技術力の向䞊 仕事の進め方が良くなる 目の前の問題を解決するだけではなく、「もっずスムヌズに解決するためには」、「そもそも起きないようにするためには」などのこずを思考するこずで䞊蚘のような成長に繋がるず思っおいたす。 倧倉なこずずその察凊法 䞀時的にマルチタスクになるず思うので忙しい、スむッチコストがかかるなどの負担があるず思いたす。 ただ、EPMやマネヌゞャヌなどに適切に゚スカレヌションを䞊げるこずで、忙しいずいう面は解消できおいたすし、この盞談も仕事の進め方胜力向䞊に぀ながるず思っおいたす。 具䜓的には、䞋蚘のような流れでEPMやマネヌゞャヌずコミュニケヌションをずっおいたす 目の前のアラヌト察応やお問合せ察応の緊急床を刀断既知の原因でのものか、機䌚損倱になるか、今埌のナヌザヌに圱響が出るかなど 目の前のアラヌト察応やお問合せ察応の抂算の工数を芋積もり、今の自分のタスクにどの皋床圱響が出るかを刀断30分皋床で終わりそうであれば、その堎で察応しお終了 必芁があればissueを䜜成しお重芁床ず緊急床なども含めお抂芁をたずめる 差し蟌みで察応するべきかバックログに積むかを怜蚎しおEPMやマネヌゞャヌず盞談 差し蟌みでの察応なら芋積もりなども螏たえお、差し蟌み前に察応しおいたissueの期限などを調敎 意識しおいるこずは、アラヌトのスレッドや、お問合せのスレッドなど现かく珟状の報告をするようにしおいたす調査開始時や、調査が長匕きそうな時の䞭間報告など 枩床感や難易床などの情報をEPM・マネヌゞャヌず共有するために必芁だず思っおいたす。 補足 私が所属しおいるチヌムのEPM・マネヌゞャヌがデむリヌなどで、良しなに調敎しおくれおいるケヌスが倚いので、私自身あたり差し蟌みで逌迫した経隓がない前提ではありたす。 たずめ アラヌト察応や、お問合せ察応は、倧倉な偎面もありたすが、個人的には埗られる経隓倀は膚倧であるず思っおいたす。 入瀟埌のキャッチアップスピヌドを䞊げる。゚ンゞニアずしお技術力を䞊げる。仕事の良い進め方を身に぀ける。など、意識次第で成長角床を䞊げるこずができるチャンスだず思いたす。 おわりに 今たで曞いおきたこずは私のチヌムが、メンバヌの成長をサポヌトするずいう土壌が豊かであるずいう前提のものです。 アラヌト察応やお問合せ察応から成長するためには、適切なフィヌドバックやアドバむスが䞍可欠です。 BASE、BASE BANKでは䞀緒に働く仲間を募集しおいたすので気になった方はぜひ䞋蚘リンクを芋おいただけるず嬉しいです。 binc.jp