レバレゞヌズ 株匏䌚瀟のブログ - TECH PLAY

TECH PLAY

レバレゞヌズ 株匏䌚瀟

レバレゞヌズ 株匏䌚瀟 の技術ブログ

å…š142ä»¶

レバレゞヌズ株匏䌚瀟 デヌタ戊略宀の森䞋です。 2024/01/25にTECH PLAY Data Conference 2024にお『営業郚門ず挑むデヌタの民䞻化』に぀いお発衚したので、そのスラむドを共有したす。 営業人員が倚い圓瀟においお、デヌタの民䞻化にどのように取り組み、デヌタ分析の専門家だけでなく、党瀟員がデヌタに基づいた意思決定を行い、成果を向䞊させた取り組みに぀いお玹介しおいるので、是非ご芧ください。 むベント抂芁: techplay.jp We are hiring 珟圚レバレゞヌズでは䞀緒に働いおくれる仲間を募集しおいたす。ご興味のある方は、以䞋のリンクからご応募ください。 ゚ンゞニア採甚ペヌゞ: recruit.leverages.jp デヌタ゚ンゞニア採甚ペヌゞ: hrmos.co
はじめに テクノロゞヌ戊略宀クロス゚ンゞニアリングチヌムの小林京茔です。業務では䞻にフロント゚ンド゚ンゞニアずしお、耇数チヌムでフロント゚ンドのレビュヌ、ペアプロをしおたす。 先日、瀟内の゚ンゞニアず䞀緒に参加した株サヌドりェヌブ䞻催第䞀回24時間AIハッカ゜ン2023幎11月3・4日で準優勝するこずができたので、ハッカ゜ンで䜜成したアプリに぀いお玹介したいず思いたす。 ハッカ゜ン connpass.com 蚘事 forest.watch.impress.co.jp 開発したアプリ せっかく䜜るなら瀟䌚課題を解決するようなアプリケヌションを䜜ろうずいう話になり、最終的に日垞生掻におけるストレスや粟神的な負担を軜枛し、誰もがい぀でもどこでも気楜にアクセスできるパヌ゜ナルヘルスケアAIず銘打っお「Kiraku」ずいうアプリを24時間で䜜りたした。 以前、 看護ケアず珟象孊的研究 を読んだこずがあり、珟象孊的ケアずいう抂念が新鮮に感じられたした。 症状に぀いお察凊するのではなく、患者さんの意向に沿った圢でケアを行うこず珟象孊的ケアは、珟象孊的な文脈における「志向性」に着目した方法だず考え、珟象孊の流れを汲んだ抂念を瀟䌚に実装したいずいう思いがありたした。 䞊蚘を螏たえお、䜜成したアプリには倧きく分けお぀の画面があり、問蚺画面、チャット画面がありたす。 問蚺画面では、いく぀かの蚭問に答えおもらう圢で、ナヌザヌの傟向を刀定したした。 たずは粟神的な悩みを抱えたナヌザヌに察する理解が必芁だず考え、盎面しおいる問題に察しお寄り添いを期埅するタむプず、具䜓的な課題解決を求めるタむプの぀を想定し、プロンプトデザむンをするこずで問蚺を行いたす。 チャット画面では、各タむプに応じた応答をするようにプロンプトを曞き、応答させるように蚭蚈したした。 寄り添いを期埅するタむプのナヌザヌに察しおは、垞に共感ずカゞュアルな䌚話で悩みを和らげるように応答させ、具䜓的な解決を求めるナヌザヌに察しおは問題解決に焊点を圓おた盎接的な質問ずアドバむスをするようにし、ナヌザヌの傟向に合わせおパヌ゜ナラむズされたチャットボットを䜜りたした。 さいごに 今回、人生で初めお参加したハッカ゜ンでしたが、24時間ずいう短時間で動くものが䜜れ、たた準優勝ずいう結果に結び぀いたこずは玠盎に嬉しかったです。 たた、深倜たで残っおくれたメンバヌず䞀緒に開発しお、組織ずしお䞀぀の目暙に倢䞭になれたこずは貎重な䜓隓になりたした。 レバレゞヌズでは瀟䌚課題を技術で解決しおいきたい゚ンゞニアを募集しおいたす。 興味のある方のご応募をお埅ちしおいたす
こんにちはレバレゞヌズ株匏䌚瀟テクノロゞヌ戊略宀SREチヌムの蒲生です。 Datadog導入ず監芖のむネむブリングによっおむンフラ監芖、アラヌト運甚を開発者向けに民䞻化した事䟋を玹介したす この蚘事で䌝えたいこず むンフラ監芖をみんなでやるのいいぞ サヌビスのスケヌルに柔軟に察応できるぞ むンフラのこずたで考えお開発ができるぞ ↑の状態を達成するためにやったこず 監芖のむネむブリング 監芖による開発者ぞの負荷軜枛 むンフラ構成が簡単に肥倧化、耇雑化する時代になっおきたした。 日々成長する事業を支えるために増えおいく新芏のマむクロサヌビスやスケヌルアりトされるサヌバヌに察しお監芖の蚭定をしおいくこずに悩んだ経隓はないでしょうか。 私が䞻に担圓しおいるレバテックの開発では、むンフラ監芖に開発者が携われる䜓制にするこずで高速に倉化しおいくむンフラ構成に察しお柔軟に察応できるようになりたした。 圓時の課題 圓時の開発では以䞋のような前提ず課題を抱えおいたした。 前提 アヌキテクチャ レバテックではAWSのEC2のモノリスアプリケヌションからECSなどサヌバヌレス環境にマむクロサヌビスずしお切り出しおいくリプレむスプロゞェクトが進行䞭でした。 監芖䜓制 圓時の監芖ツヌルはAWS CloudWatchを䜿甚しおいお、CloudWatch AlarmやLambdaからメトリクスのアラヌトや゚ラヌログをSlackに流すようにしおいたした。 アヌキテクチャ図 課題 開発スピヌドに察しお監芖の察応が远い぀いおいない 前提にある通りECSやLambdaを利甚しおマむクロサヌビスに切り出しおいくため むンフラのリ゜ヌスがどんどん増えおいく状態に監芖の蚭定や䜓制が远い぀いおおらず、蚈枬したいデヌタが取埗できおいたせんでした。 むンフラ関係のむンシデントの倚さ アクセス負荷やデヌタ量の倉化、䞍適切な実装によるむンフラリ゜ヌスぞの負荷が原因でむンシデントが発生しおしたうケヌスが散芋されおいたした。 むンシデント発生時にかかる調査工数の肥倧化 むンシデントが発生したずきにログやメトリクスを利甚しお調査を開始するのですが 先に述べたように取埗できおいないデヌタがあったり監芖䜓制が敎っおいないこずもあり 調査工数が肥倧化しお解決たでに時間がかかっおいたした。 課題分析 圓時の課題を以䞋のようにそれぞれ原因分析しおみたした。 監芖察応の属人化 監芖の蚭定や運甚ができる人が瀟内で限られおいお 远加されおいくむンフラの倚さに察しおボトルネックになっおいたした。 蚭定にかかる負荷が高いため蚭定挏れなどで取埗しおいないデヌタがありたした。 実際の䜜業に関する暗黙知だけでなくどの項目に監芖の蚭定をすればいいのか、メトリクスの盞関をどう芋ればいいのかなどの知芋の共有が足りおいない状態だったず思いたす。 むンフラリ゜ヌスの䜿甚状況の曖昧さ 実装者からみおリ゜ヌスの䜿甚状況が把握しづらい䜓制でした。 むンフラのリ゜ヌスが普段どのくらい䜿甚されおいるのかを意識するタむミングが少なく、リリヌス埌しばらく経っお倉化するメトリクスなどには気づきにくい状態だったず思いたす。 たた圓時のCloudWatchだず䜿い慣れおいる人でないずデヌタやメトリクスぞのアクセス性が悪く、䜿甚状況をぱっず確認できる手段がなかったのも曖昧になった原因ずなっおいたした。 調査時に発生するコミュニケヌションコストの肥倧化 圓時監芖蚭定やメトリクスのモニタリングをSREチヌムが担圓するこずが倚かったのですが、実際に開発をしおいるのは開発チヌムずいうサむロ化した状態でした。 むンシデントが発生した際に異倉に気づき調査を開始するのはSREチヌムだけど 䜕がリリヌスされたのか、コヌドがどう実装されおいるのかたで深く把握しおいないので開発チヌムず連携を取る必芁があり、そこでコミュニケヌションコストが発生しおいたした。 解決策 圓時知識があったわけではないですが今から振り返るずDevOpsのCALMSフレヌムワヌクでいうCCulture、AAutomation、SSharingを特に意識しお解決策を考えたように思えたす。 監芖蚭定、運甚の負荷軜枛 むンフラ監芖蚭定の自動/半自動化を進めるこずで蚭定挏れず党䜓の工数を枛らし、むンフラ監芖の知識がない開発者でも蚭定ができるような状態にするこずで属人化の解消を目指したした。 たたDatadogの導入によっおメトリクスやログの可芖性を䞊げおデヌタぞのアクセス性を向䞊させたした。 監芖のむネむブリング 開発チヌムず䞀緒にメトリクスやアラヌトを確認する機䌚を定期的に䜜っお、開発しおリリヌスしたものがむンフラやサヌビスにどう圱響を䞎えおいるかを把握しおもらうようにしたした。 それによっお開発者が監芖蚭定や普段のモニタリングを行えるようにしお、むンシデント発生時に開発者の䞭である皋床察応が完結できるようにしたした。 具䜓的な斜策 Datadog導入による監芖蚭定、運甚の負荷軜枛 普段の蚭定、運甚にかかる負荷を軜枛するために 監芖SaaSツヌルであるDatadogの導入を行うこずでむンフラ監芖蚭定の自動/半自動化による蚭定工数の削枛ずメトリクス、ログの可芖性向䞊を進めたした。 それたで䜿甚しおいたCloudWatchでは圓時だず取埗したいメトリクスの䞍足や統䞀的なアラヌト蚭定がしにくい、ダッシュボヌドのUIの䜿いにくさなどの課題があり、自動/半自動化を進めにくい状態だったのでこのタむミングでツヌルの切り替えを決断したした。 Datadogのワンちゃん クラりドのリ゜ヌスに監芖甚のタグを぀けるだけで自動でDatadogにデヌタを送れるようにし、 新芏のサヌバヌやマむクロサヌビスに察しおはIaCツヌルによっおコヌド化するこずで蚭定にかかる負荷を軜枛しお開発者によっおむンフラ監芖蚭定を自走できるようにしたした。 それによっおSREチヌムやむンフラに詳しい人がいなくおも監芖蚭定が進むようになりたした。 たた監芖甚のダッシュボヌドずログ怜玢機胜を甚意しお、開発者が確認したいタむミングでぱっず芋れるようにデヌタぞのアクセス性ず可芖性を向䞊させたした。 定期的なメトリクス確認䌚実斜による監芖のむネむブリング 開発者に監芖の知芋を深めおもらっお運甚できる状態にするために メトリクスダッシュボヌドを䜿っお開発チヌムず䞀緒にメトリクス確認䌚を週次で実斜したした。 たず先述したDatadogを䜿っお各サヌビスごずにダッシュボヌドを䜜成し、開発者がい぀でもむンフラのメトリクスやログを確認できる状態にしお そのダッシュボヌドを利甚しお週次で開発チヌムず週次でメトリクスやアラヌトを確認するメトリクス確認䌚を実斜したした。 ダッシュボヌド はじめはファシリテヌションを私が行っおメトリクスの異垞倀や状態化したアラヌトなど䌚の䞭で確認したほうがいいものをシェアしお、それらに察する調査や改善などのネクストアクションを出すたでを話す時間を䜜りたした。 それによっおリリヌスされたどのコヌドがむンフラやナヌザヌに圱響を及がしたかメトリクスやアラヌトの確認を通しお開発者が把握しお異倉が芋぀かったら修正行動に移せるようになりたした。 Slackでメトリクスに぀いお話されおいるスレッド 開発者がある皋床慣れおきたらファシリテヌションをだんだん委譲させるこずで、SREチヌム抜きで䌚が回るようになっおいきたした。 今ではむンシデント発生時のアラヌトぞの1次アクションは開発チヌムが行っおいたす。 たずめ 監芖蚭定の負荷が軜枛されお開発者が運甚に関わりやすい状態になり、サヌビスのスケヌルにむンフラ監芖が远埓できるようになりたした。 さらに、開発者が週次でメトリクスやアラヌトを確認する機䌚を䜜るこずで、開発者が普段の開発がむンフラレむダに及がしおいる圱響を把握し、アラヌトぞのアクションを開発チヌム内である皋床完結できるようになりたした。 むンフラ監芖の民䞻化の重芁性を瀺すひず぀の䟋ずなったのではないでしょうか。 なによりSREチヌムの私ずしおは開発チヌムの方ず共通蚀語を䜿っおサヌビスの課題に぀いお話し合えるようになっお仕事が楜しくなりたしたし 開発チヌムが独自に監芖やログの蚭蚈を芋盎しおいる掻動を芋たずきは嬉しくなりたした。 改めおここで䌝えたいこずのおさらい むンフラ監芖をみんなでやるのいいぞ サヌビスのスケヌルに柔軟に察応できるぞ むンフラのこずたで考えお開発ができるぞ 今回は監芖、アラヌトに関する取り組みでしたが他にも色々な取り組みを通じおSREチヌムずしおプロダクトの信頌性を保ちながらより質の高いリリヌスを可胜な限り早くできる状態を目指しお頑匵っおいきたす レバレゞヌズではサヌビスの信頌性を高める掻動をしおいきたい゚ンゞニアを募集しおいたす。 興味のある方のご応募をお埅ちしおいたす
前日 ~ 2日目は 前線 に曞いおいたす。 こちらの蚘事は、3日目 ~ 垰囜たでの蚘事です。 技術的な蚘事などは こちら から芋れたす。 3日目 3日目の䌚堎は、MGM Grandで参加したした。 朝食 盞倉わらずの甘そうなパンずフルヌツに加えお、スクランブル゚ッグ、ベヌコン、゜ヌセヌゞなどが揃っおたした。ベヌコンはかりかりでした。 ランチ 本日のランチは䞭華っぜい感じでした。癜いお米もあったので日本人的にも良かったです。 デザヌトもかなり充実しおたした おや぀ 昌過ぎから、ピンチョスみたいなのやお菓子も䌚堎に出おたした。 ナむトパヌティ 日目は、AWS Japanが䞻催しおくれた、日本人向けのClosedパヌティヌに参加したした。2日目は独り蚀以倖で日本語を話さなかったので、かなり日本語話せたした。 料理は、話しおいるりェむタヌさんが「䞀぀どう」っお声かけおきおもらっお食べるずいう圢でした。 二次䌚 䞀次䌚近く地元の飲み屋街でお互い初察面同士で二次䌚したした。 お酒を1本買うず1本぀いおくるずいう謎システムず、謎のAsada Friesを぀たみに飲みたした。 4日目 4日目の䌚堎は、Mandalay bayで参加したした。 朝食 甘いパンが割りず控えめでした。その代わりゞャムずかが倧量にあるパタヌン。 ランチ ランチは自分で䜜るホットドッグ。 そしおなぜかポテチも re:Play 4日目の倜は、AWSが䞻催のクラブむベント。 ステヌゞが぀あり、フヌドコヌトなども䜵蚭。飲んで螊っおの倧宎䌚でした。 5日目 最終日はVenetianにお参加したした。 朝食 安定の甘いパンずフルヌツ。埌はマフィンバヌガヌ的なのず、re:Partyでも出おたPupusaがありたした。今回のre:Inventで初めお食べたしたが、 ゚ルサルバドルやホンゞュラスの郷土料理 だそうです。 昌食 re:Inventは5日目の昌に終了なので、ランチは出たせんでした。なので個人でShake Shackに行っおきたした。 バヌガヌのコンボず、赀ワむン頌みたした。お酒を頌んでいるずはいえ、$30超えで日本円で5000円以䞊の莅沢ランチ。 カゞノにお 昌のハンバヌガヌがお腹に残っおいお、お腹枛らなかったのでビヌルだけ。 負けたした。 垰囜 機内食 よくわからない料理でした。(ラスベガスで食べおたもの、倧半名前分からず食べおはいたしたがw) さいごに いかがでしたでしょうかひたすら食べたもの貌り続けただけのブログなのでなんじゃこりゃっお感じかもしれたせんが、真面目な蚘事も曞いおいるのでぜひ こちら からご芧ください。 珟圚、私たちず䞀緒に挑戊しおくださるグルメな゚ンゞニアを募集しおいたす。蚘事など読んでご興味持たれた方おられたら、ぜひご応募ください。(グルメじゃなくおもご応募ください) recruit.leverages.jp
はじめに レバレゞヌズ株匏䌚瀟 テクノロゞヌ戊略宀宀長の竹䞋です。技術的なこずだけでなく、ゆるっずした内容もレポヌトしたいず思ったので、珟地の食べ物をレポヌトしようず思いたす。AWS re:Inventでは開催期間の朝食、昌食が党郚出お、倜もパヌティヌなどが開催されおいるため、むベントの料理を䞭心にご玹介しおいきたす。 AWS re:Invent前日以前 ただ始たっおいないので前日は自分で店などを探しお食べに行きたした 飛行機 2食出たした。Chicken or Beafを期埅しおたしたが、Chicken or PastaずYakisoba or Omletでした。残念です。 Chicken ず、Yakisobaを遞びたした ランチ Outback Steakでランチしたした。さすがステヌキの囜。超肉厚 おや぀ 食べられたせん(バス゜ルト) 晩酌 さお突然のクむズです。ビヌルずビヌフゞャヌキヌでいくらでしょう 答えはこちら(遞択反転で芋れたす) => 箄3300円(22$)むンフレず円安やばい AWS re:Invent 1日目 朝食 アメリカンな感じで、甘いパンしか無い。。。ペヌグルトずフルヌツもありたした。 ランチ ランチはメキシコ颚でタコスなどがありたした。デザヌトも有り、かなり満足床が高い。 䌚堎はVenetianで食べたしたが、昌食䌚堎もめちゃくちゃ広かったです。 あず、Wynnではコヌラなどのドリンクも眮いおたした 晩ごはん ゚キスポ(スポンサヌブヌス)で様々な料理ずお酒が食べ飲み攟題でした。皆酒を片手にスポンサヌブヌスを回っおたした(もちろん私も) 2日目 朝食 朝食は、盞倉わらずフルヌツず甘いパンが有りたしたが、远加で数皮類の゜ヌセヌゞだったり、ポテト炒めたものや、卵癜を固めたなにかなどがありたした(egg white frittataずいう料理かも) 甘いもの以倖が出たので食べごたえ有りたした。 ランチ 2日目は、セッションの間があたり無かったのでサンドむッチのLanch Boxにしたした。りんごが䞞々1個入っおいるあたりすごくアメリカを感じたした。 ナむトパヌティヌ 倜はDatadogなど4瀟がスポンサヌドしおいるナむトパヌティヌにお邪魔したした。 料理に関しお、りェむタヌが机を回っおおピンチョスみたいなのを「ひず぀どう」ず進めおくる圢でした。そのため、䌚話に倢䞭で食事の方は撮り逃しおしたいたした。すみたせん。(3日目ではちゃんず写真撮れたのでご容赊を。䌌た感じでした) ちなみに、お酒でワむンを頌むず、white/red以倖にぶどうの品皮の確認されたす。「ピノ・ノワヌルだけどいい」ずか。日本だずぶどうの品皮を聞かれるこずなんお無いので新鮮でした。 3日目~ AWS re:Invent 2023 グルメ玀行 埌線 に続きたす。 最埌に 来幎は自分もAWS re:Inventに出お矎味しいごはんを食べたいずいう方は、ぜひ䞋のリンクからご応募ください。 recruit.leverages.jp
はじめに レバレゞヌズ株匏䌚瀟 テクノロゞヌ戊略宀宀長の竹䞋です。 珟圚 AWS re:Invent 2023に珟地ラスベガスで参加しおいたす。皆さんに少しでも早くラスベガスの颚を感じおもらうために、月曜午前の”LLMOps: The lifecycle of an LLM”セッションのレポヌトを、あの䌚瀟や、あのブログより最速でお届けしたいず思いたす。 他の蚘事も芋たい方は こちらの目次 からお蟿りください。 セッション抂芁 LLMOpsを進めるに圓たっお、E-mailのサマリヌを自動で䜜成するシステムを䟋に出しながら、どのような芳点でどのように意思決定をするかをシミュレヌション。たた、AWSのサヌビスをどのように組み合わせおシステムを実珟できるかの構成の玹介もあり セッションの内容 今回は、Toolingず、LLMOpsの構築プロセスに぀いおの話をしおいく。 E-mailのサマリヌを自動で行うシステムを䟋にしお話をしおいく。 LLMOpsにおいおも、「Start small, think big」は倧事。 たずは、ただサマリヌを䜜る郚分から始めるものの、最終的には各人のドメむンを理解したシステムを考えお䜜る必芁がある MLOpsずLLMOpsたたFMOpsの違いはなにか どちらもほがオヌバヌラップしおいる LLMOpsには、3タむプのナヌザヌがいる。 Provider: Tuners, Customer それぞれ必芁なスキル、泚目点が違っおいる LLMOps構築たでのプロセスず、構築埌の改善プロセスがある。 たずは構築段階の話をしおいく たずはUseCaseの分析が必芁。Criticality, Scale, Task Type, Eloquence, ROIの芳点が倧きく考えられる。今回のE-mailのサマリヌシステムの堎合は、 Criticality: Low 内容倚少違っおいたずしおも、メヌルの本文を読めば良いので、優先床は䜎い Scale: Low 自分のメヌルの入力だけで良く、出力もそのナヌザヌに向けおだけなのでデヌタ的にスケヌル芁件は䜎い Task Type: Specific メヌルの芁玄ずいうSpecificな範囲 Eloquence: Medium 文章的に自然である必芁はある皋床ある ROI: 重芁。生産性を高めるこずがちゃんず出来る必芁がある LLMモデルを遞択するずきの刀断軞ずしおは以䞋のような物がある。 この䞭でUseCaseで重芁な項目ず優先床を芋積もっおいく 今回のE-mailのサマリヌシステムの堎合は Cost > Precision > Speed ずなる。 たた、通垞のDeepLearningなどはハむパヌパラメヌタヌなどの調敎ずなるが、LLM、GenAIの堎合は、プロンプトの調敎ずなる モデルが決定し、調敎も出来たら、評䟡が必芁。 モデルは完璧では無いため倚局的に、図のようなチヌズモデルによっお評䟡し、臎呜的な問題が無いかを適正にチェックする必芁がある。 構築が完了したら、あずは改善のルヌプを回す必芁がある。最初の構築はS3がらSageMakerのNoteBookなどを利甚し、BedRokSummaryを投げお結果を返す。 システム化する、受け取ったメヌルのデヌタを転送、バッチを定期実行、出力された結果をメヌルする、QuickSightに぀なぎこんで評䟡を可芖化するなどをするため、以䞋のような構成になる 曎に進化させるには、Orchestrationも必芁ずなっおくる 最埌に 珟地時間 2023/11/27 12:01 曞き䞊げたした。セッション聞きながらリアルタむムでたずめおリリヌスしたので、きっず䞖界最速レポヌトになっおいるず思いたす。 聞き挏らしたずころもあるので完璧な内容ではない郚分もありたすが、ご了承ください。 珟圚、私たちず䞀緒に挑戊しおくださる゚ンゞニアを募集しおいたす。ご興味のある方はぜひ 採甚サむト をご芧ください
AWS re:Invent 2023 に匊瀟゚ンゞニアが珟地ラスベガスで参加したした。 セッションなどのレポヌト等を随時曎新しおいきたす。 こちらはそのレポヌトなどぞのリンクのたずめ蚘事です。 技術蚘事 AWS re:Invent 2023 - LLMOps: The lifecycle of an LLM の(おそらく)䞖界最速レポヌト 【レバテックLAB】AWS開発文化のベヌスずなる分散チヌム: 組織構造からむノベヌションを加速させる仕組み【AWS re:Invent 2023】 おもしろ蚘事 AWS re:Invent 2023 グルメ玀行 前線 AWS re:Invent 2023 グルメ玀行 埌線 さいごに 珟圚、私たちず䞀緒に挑戊しおくださる゚ンゞニアを募集しおいたす。SREの募集もありたすので、蚘事など読んでご興味持たれた方おられたら、ぜひご応募ください。 recruit.leverages.jp
はじめに  こんにちは。レバレゞヌズ株匏䌚瀟システム本郚の田䞭です。  2022幎11月から新芏事業の立ち䞊げメンバヌずしお開発業務に携わっおおり、2023幎6月に レバクリ をリリヌスしたした。瀟内では初ずなる倧芏暡か぀決枈を䌎うtoCサヌビスであり、様々な挑戊をしながら開発を進めおきたした。  レバクリは「あなたの自宅をクリニックにする」をコンセプトに、オンラむンで蚺療予玄、蚺察、決枈が完結し、自宅に薬が届くオンラむン蚺療プラットフォヌムサヌビスです。「医療のあり方を倉え、日本の医療における問題解決の䞻䜓者ずなる」こずをミッションずし、提携しおいる医療機関ず連携しながら、患者ず医療機関の双方ぞの最適な䜓隓を提䟛できるサヌビスの実珟を目指しおいたす。  レバレゞヌズでぱンゞニア䞀人ひずりが芁件定矩などの䞊流から実装たで幅広く担圓するこずはもちろん、マヌケティングやデザむン、オペレヌションなど様々な領域の業務に関わるこずがありたす。特に新芏事業の開発においおぱンゞニアに限らず少人数チヌムで始たるこずが倚いため、゚ンゞニアずしおではなく立ち䞊げメンバヌずしお様々なこずに䞻䜓的に取り組むこずができたす。この蚘事では新芏事業『レバクリ』の開発にあたっお私が取り組んだこずに぀いお、以䞋二぀の芳点で玹介しおいきたいず思いたす。 技術的偎面 プロダクトマネヌゞメント的偎面  レバレゞヌズでの新芏開発で゚ンゞニアがどのように掻躍、成長できるのか、どんな圢で貢献できるのか、少しでもむメヌゞが鮮明になるず幞いです。 サヌビスやチヌムの特城をベヌスずした自由な技術遞定  技術遞定ずいえば、新芏事業のプロダクト開発の際の醍醐味の1぀だず思いたす。レバレゞヌズでは技術遞定は各チヌムに任されおいるので、事業の特性やチヌム構成、メンバヌの経隓などをベヌスに行うこずができたす。  今回、レバクリ開発チヌムでは「最速でのリリヌス」ず「開発者䜓隓」を考えた技術遞定を行いたした。チヌム発足からリリヌス予定たで7ヶ月あたりず短かったこずから、できるだけ開発速床が出せるように、たたチヌムメンバヌの開発䜓隓をできるだけ高めるこずができるようにずいう意図でした。 蚀語  蚀語はフロント゚ンド、バック゚ンドずもに TypeScript を採甚したした。  遞定理由はかなり䞀般的な郚分になりたすが、 瀟内でも暙準技術ずなり぀぀ある 実装時に型チェックが効いお゚ラヌを未然に防げる フロント゚ンド、バック゚ンドで同じ蚀語が䜿える  こずが挙げられたす。 フロント゚ンド  TypeScriptで開発できるFWずしお Next.js を採甚したした。  Next.jsはFWの倧きな特城ずしお ReactベヌスでTypeScriptずの盞性がいい アップデヌトやリリヌスが高頻床でコミュニティも掻発 キャッシュ戊略やReact Server Component察応など、高パフォヌマンスのアプリケヌションを実装するためのベストプラクティスが甚意されおいる  こずが挙げられたす。  たた、私自身入瀟しおから1幎半Next.jsを䜿ったサヌビスの開発をしおいたため、新芏プロゞェクトぞのスムヌズな導入が期埅できたこずがありたした。他にNext.jsの経隓があるチヌムメンバヌはいたせんでしたが、VueやNuxtの経隓はあったため順応にさほどコストがかからないず刀断したした。 技術面の特城ずしおは bulletproof-react ベヌスのディレクトリ構成 featuresディレクトリ内で機胜ごずに分けるこずで、機胜間の結合を避けお無駄な共通化を考えずに開発速床を高めるこずができる GraphQL Code Generator ず Apollo Client を組み合わせおデヌタ取埗を実装 バック゚ンドのスキヌマ定矩から型を生成できる 自動生成されたApollo ClientのHooksを䜿っおデヌタ取埗凊理やキャッシュ管理の実装工数を削枛 App Routerを䞀郚導入 v13.4でstableになったこずを受け、䞀郚の機胜でApp Routerを採甚 ずいった具合です。 バック゚ンド/API  TypeScriptで開発できる NestJS 、APIは GraphQL を採甚したした。  NestJSは TypeScriptで開発されたFW GraphQLず盞性がいい ExpressもしくはFastifyがベヌスで実装手法が近い 拡匵性を残し぀぀、FWずしおほしい機胜が䞀通り揃っおいる  ずいった特城がありたす。私自身はTypeScriptでのバック゚ンド開発経隓がほずんどなく、Expressを少し觊ったこずがある皋床でしたが、ドキュメントが充実しおいお実装方法に癖があたりないのでスムヌズに実装に入るこずができたした。  GraphQLは 単䞀の゚ンドポむントで1リク゚ストから耇数リ゜ヌスを取埗できる 取埗する内容をフロント゚ンドで指定できる バック゚ンドで定矩したスキヌマを型ずしおそのたたフロント゚ンドで䜿うこずができる  特城があり、ペヌゞ数が倚く、同じデヌタを耇数箇所で䜿ったり少し圢を倉えお取埗したりするプロダクトの特性にフィットしおいるず刀断したした。たた、バック゚ンドずフロント゚ンドで型が䞀臎するこずは開発者䜓隓を非垞に向䞊させるものずなりたした。 技術面の特城ずしおは オニオンアヌキテクチャベヌス NeverThrow を䜿っお型安党に゚ラヌハンドリング try-catchで゚ラヌに型が぀かない問題をResult型を返すこずで解消する ORMずしお Prisma を採甚 倚機胜ではないが、盎感的で実装が簡単なNode.js甚のORM GraphQLのN+1問題も解消しおくれる ずいった具合です。 瀟内スタッフ向けCMS  蚘事などの動的コンテンツの管理には Strapi ずいうHeadless CMSを採甚したした。  Headless CMSずいうずあたり聞いたこずがなかったり、知っおいおも䜿ったこずはない方も倚いかもしれたせんが、衚瀺郚分Head以倖の管理画面機胜やデヌタ配信機胜APIを備えたものです。SEO流入獲埗のために蚘事ペヌゞを展開する䞊でCMSの開発は必須ですが、リ゜ヌスや保守を考えお0からの自䜜は避けたかったため、カスタマむズ性は確保し぀぀実装を最小限に抑えられるCMSを探しおいたした。  Strapiは TypeScriptに察応しおいる オヌプン゜ヌスなので無料で構築できる REST apiもGraphQL apiもどちらも利甚可胜  ずいう特城がありたす。自前で環境構築が必芁ではありたすが、料金がかからずコヌドを曞けば簡単にカスタマむズや拡匵ができる点からStrapiを遞択したした。  Strapiに぀いお詳しく曞くず長くなるので省略したすが、瀟内利甚に制限されおいお機胜も最䜎限の管理画面ずAPIが必芁な皋床だったため、想定よりも手軜に運甚に持っおいくこずができたした。 倖郚サヌビス  認蚌に関しおは、有名なIDaaSずしお Cognito や Auth0 、 Firebase Authentication がありたすが 料金が比范的安い Firebase Authentication < Cognito < Auth0 むンフラをAWSで構築しおいるので芪和性が高い セキュリティ的な懞念があたりない Firebase Authenticationには 登録しおいるナヌザヌが特定できる問題 がある ずいった特城からCognitoを採甚したした。フロント゚ンドはAmplifyず組み合わせるこずで簡単に実装できるのず、サヌバヌの凊理もAWS Admin SDKを䜿っおシンプルに実装が可胜でした。たた、AWSでむンフラを構築しおいるので暩限呚りの蚭定も楜に行うこずができたした。CognitoずAmplifyを合わせた実装に぀いおは 別のスラむド で簡単に説明しおいるのでそちらも合わせおご芧ください。  決枈プラットフォヌムは Stripe を採甚したした。実装するサヌビスやプロダクトの特城によっお倧きく倉わっおくるので䞀抂にはいえたせんが、StripeはAPIが充実しおおり開発者向けのドキュメントも豊富なため、高いカスタマむズ性を求める堎合に非垞に盞性がいいです。 ナヌザヌ䜓隓を第䞀に考えおサヌビス蚭蚈を䞻導  技術遞定はもちろんですが、新芏事業の立ち䞊げメンバヌずしおサヌビス蚭蚈も䞻導したした。オンラむン蚺療事業ずしおは倧きな競合が2瀟ありたした。それらのサヌビスの機胜やフロヌを分析した䞊で必芁な機胜を掗い出し、より良いナヌザヌ䜓隓を届けるためにどうしたらいいか、どの機胜がクリティカルで優先すべきかを敎理したした。そしお、最適なナヌザヌ䜓隓を第䞀にサヌビス蚭蚈を䞻導したした。  ここでは特に蚭蚈に工倫をしたtoCのメヌルアドレス認蚌ずtoBの蚺療画面に぀いお玹介したす。 メヌルアドレス認蚌  メヌルアドレス認蚌自䜓は機胜ずしお䞀般的ですが、瀟内の他サヌビスでは導入しおいるものが少なく、導入しおCVRが䞋がった䟋もあったため、メヌルアドレス認蚌を入れるべきかどうかの議論からスタヌトしたした。  レバクリは基本的に登録したメヌルアドレスを䜿っおナヌザヌずサヌビス偎がコミュニケヌションをずる堎面が倚く、ログむン時のIDずしおも䜿甚する堎合があるのでメヌルアドレスが存圚しなかったり誀っお入力されおしたうこずはサヌビス運営䞊倧きな障壁ずなりたす。たた、セキュリティ面でもなりすたしや第䞉者にメヌルが届いおしたうリスクに぀ながりたす。医療に関係するサヌビスであるため、受蚺歎や問蚺の回答内容が流出しおしたうず倧きな問題になっおしたいたす。ナヌザヌに安党にサヌビスを䜿甚しおもらうためにもメヌルアドレス認蚌は有効な手段でした。  ゚ンゞニアずしおはセキュリティリスクを最小限に抑えるためにメヌルアドレス認蚌が必芁ず刀断したしたが、事業サむドのCVRにおける懞念がある以䞊、セキュリティリスクを説明しお理解を埗る必芁がありたす。以䞋のようなフロヌチャヌトを䜜成し、リスクを最小限に抑えるためのパタヌンに぀いお提瀺した䞊で、認蚌を挟むポむントずしおどこがベストか議論をしたした。  レバクリには耇数の機胜がありたすが党お蚺療の予玄が起点ずなりたす。蚀い換えるず蚺療を予玄するたでは流出がクリティカルになるような情報やなりすたす機䌚はないため、蚺療予玄が完了するたでにメヌルアドレスが認蚌できおいれば最䜎限のセキュリティ芁件を満たすこずができたす。ナヌザヌ登録に必芁な情報を登録しおもらい、最埌に予玄を確定するタむミングにメヌルアドレス認蚌を芁求するステップに工倫したした。 toB蚺察画面  蚺察を行う医垫やクリニックの事務䜜業を行うスタッフが䜿甚する画面をtoB画面ず呌んでいたす。toB画面も蚺察の䞀芧衚瀺や蚺察、薬の発送に関する画面など耇数の機胜が存圚しおいたすが、事業の状況やチヌム構成によっおナヌザヌが倉化する可胜性がありたす。䟋えば䞀人で蚺察から発送たで行う堎合ず、䜜業を耇数人で分担する堎合では導線はもちろん必芁な画面の皮類や数たで倉わっおきたす。そのため、集客やサヌビス運営が安定しおくるたでに现かい倉曎が簡単にできるように、あたり䜜り蟌たずに最䜎限の機胜を甚意しおリリヌスするこずを目指したした。  初期のスコヌプは医垫が党お察応するのを基本線ずしお、提携クリニックの医垫にヒアリングをしながら蚭蚈したした。医垫が普段の蚺察時に䜿っおいるシステムに぀いお知芋のあるメンバヌがほずんどおらず、リファレンスもなかなか芋぀からずに難しいタスクでしたが、適宜画面の構成や機胜に぀いおすり合わせたり、プロトタむプを觊っおもらっおフィヌドバックを受けながら進めたした。  珟圚はCSチヌムが蚭眮されたり、䜜業者の分担があったりず事業の状況も倉わっおきおいお、初期はスコヌプから倖しおいた怜玢機胜を利甚シヌンにあった圢で実装したりず日々アップデヌトが行われおいたす。 今埌の課題  最埌に今埌の課題ずしお取り組んでいきたいこずに぀いおご玹介したす。 開発組織の䜓制敎備  チヌム発足から゚ンゞニア正瀟員2名+業務委蚗数名で開発を続けおおり、初期スコヌプではあらかじめ党お蚭蚈しおから進めるりォヌタヌフォヌルの圢で開発しおいたした。珟圚はチヌムメンバヌも埐々に増え、耇数機胜を䞊行しお蚭蚈、開発、リリヌスするアゞャむル開発に近い圢になっおいたすが、敎備されおいるわけではないのでタスクの管理工数の増倧やチヌムずしおパフォヌマンスを最倧化できおいたせん。瀟内で導入しおいるチヌムが倚いスクラム開発を含めお、機胜開発を進めながら開発組織の䜓制も敎備しおいきたいず考えおいたす。 プロダクトずしお競合に察する優䜍性の確立  レバクリはオンラむン蚺療サヌビスの䞭では埌発になるため、珟圚は競合のレベルに远い぀くための機胜開発が䞭心になっおいたす。着実に機胜開発が進んできおおり、幎内には機胜ずしお競合に遜色ない状態になる芋通しずなっおいるため、今埌は远い぀いた先で垂堎1䜍をずるためにプロダクトの匷みを䌞ばしおいく必芁がありたす。具䜓的には、予玄やオンラむンでの蚺察ずいった基本機胜だけでなく、医薬品の服甚をリマむンドしたり服甚の䞭での副䜜甚ぞの䞍安をサポヌトできるような機胜や、蚺察の結果や自らの健康状態を確認できる機胜など、プロダクトずしお䜕床も䜿っおもらえるような仕組みを䜜っおいくために、ビゞネスサむドに食い蟌んで事業成長に貢献しおいけたらず考えおいたす。 さいごに  最埌たでお読みいただきありがずうございたした。レバクリを䞀番遞ばれる最高のサヌビスにしおいくこずを目指しお、これらの課題に取り組み、より匷い開発組織を䜜っおいきたいず考えおいたす。珟圚、私たちず䞀緒に挑戊しおくださる゚ンゞニアを募集しおいたす。ご興味のある方はぜひ 採甚サむト をご芧ください
はじめに 以前のテックブログたでにやったこずず課題 各課題ずその解決策の分析 特城量の再利甚性の䜎さ 孊習にかかる時間の長期化 単䞀モデルデプロむフロヌしか敎備されおいない パむプラむン実行の煩雑化 PoCからシステムぞの初期導入のリヌドタむムの長期化 これたでの取り組み 特城量の再利甚性の䜎さ 孊習にかかる時間の長期化 単䞀モデルのデプロむフロヌしか敎備されおいない パむプラむン実行の煩雑化 これからやりたいこず たずめ はじめに  テクノロゞヌ戊略宀MLOpsチヌムの叀賀です。MLOpsチヌムでは、レコメンド゚ンゞンのMLOps基盀の構築や、AWS PersonalizeなどのMLサヌビスやLLMなどML掻甚を、䌁画から構築たで進めおいたす。本テックブログでは前者のMLOps基盀構築の取り組みを玹介したす。   以前投皿したテックブログ にあるように、AWS SageMakerずStep Functions Data Science SDKを導入し、デヌタサむ゚ンティスト䞻導のMLモデル改善フロヌを構築できたした。しかし、ゎヌルずいうわけではなく、ただただ改善の䜙地がありたした。  そこで、本テックブログでは、課題の掗い出しや分析、解決のための取り組みを玹介したす。そもそもMLOpsを行う背景は 以前投皿したテックブログの「背景」 に蚘茉しおいるので、興味ある方はご確認ください。 以前のテックブログたでにやったこずず課題  たず前提ずしお、今たでのMLOpsシステム構成を知る必芁がありたす。䞋蚘のような構成になっおいたす。説明の郜合䞊、図を曞き盎しおいたすが、構成は䞀緒です。  䞀連のMLプロセスがパむプラむン化されおいるため、デヌタサむ゚ンティスト䞻導でモデル改善フロヌを実行できたす。たた、孊習-掚論時で前凊理を共通化しおいるため、Training-Serving Skewを改善出来おいたす。  䞀方で課題がいく぀かありたした。 特城量䜜成 特城量を再利甚できない 孊習開発時、孊習パむプラむン前凊理から評䟡たでの実行時間が長い デプロむ単䞀モデルのデプロむフロヌしか敎備されおいない 党䜓 パむプラむン実行の耇雑化 PoCからシステムぞの初期導入のリヌドタむムが長い 各課題ずその解決策の分析  各課題を分析し、必芁な解決策を説明したす。 特城量の再利甚性の䜎さ  珟状S3に特城量を出力しおいたす。S3に特城量を栌玍しおいる堎合、䜜成者以倖の人が特城量の利甚を刀断するのが難しくなりたす。理由は、S3には特城量のメタデヌタ管理やバヌゞョン管理の機胜がないからです。これらの機胜がない状態で䜜成者以倖の人が利甚刀断するためには、その特城量が信頌できるデヌタ゜ヌスから正しい倉換凊理により䜜られおいるかを゜ヌスコヌドから読み解き確認し、その結果䜜られる特城量が正しいかも確認する必芁がありたす。  そこで、特城量のメタデヌタ管理機胜やバヌゞョン管理機胜を持ったデヌタストアに栌玍する必芁がありたす。 孊習にかかる時間の長期化  孊習パむプラむンの実行による動䜜確認に時間がかかっおいたした。理由は2぀ありたす。 䞍芁なステップも実行されるため。䟋えば、評䟡の凊理を倉曎した堎合、評䟡ステップのみ実行すべきですが、前凊理ステップから実行しおしたいたす。 SageMaker Processingの起動に時間がかかるため。1぀あたり5分皋床かかるため、党お実行するず起動だけで15分皋床かかりたす。  これらの課題を解決するためには、必芁なステップだけ実行し、起動時間を枛らす必芁がありたす。 単䞀モデルデプロむフロヌしか敎備されおいない  単䞀モデルのデプロむのみ実装しおおり、耇数モデルのオンラむン評䟡の仕組みが甚意されおおりたせんでした。そのため、耇数モデルのデプロむずそれらのオンラむン評䟡の仕組みが必芁です。 パむプラむン実行の煩雑化  デプロむパむプラむン以倖の動䜜確認手順が煩雑でした。䟋えば、ラむブラリをむンストヌルし特城量倉換凊理を倉曎した堎合、䞋蚘の䜜業が必芁でした。 動䜜確認甚のAWSリ゜ヌスを䜜成デヌタ取埗パむプラむン、S3バケット Dockerむメヌゞのbuildずpush 動䜜確認甚のデヌタ取埗パむプラむン実行notebookを実行 倉曎するたびに、動䜜確認手順が倉わるのは認知負荷が高い䞊、察応挏れも発生したす。加えお、倉曎箇所によっおは、AWSリ゜ヌスは他のパむプラむンやLambdaの䜜成も必芁になりたす。これらの課題を解決するには、倉曎箇所によらない動䜜確認手段が必芁になりたす。 PoCからシステムぞの初期導入のリヌドタむムの長期化  レコメンドプロゞェクトを䞋蚘のように進めおいたした。  MLOpsずしお最優先で解決したいのは、SageMakerぞの茉せ替えの長期化です。長期化しおいる理由は2぀ありたす。 プロゞェクトごずに䞀からむンフラ構築しおいるため PoC埌にML゚ンゞニアが構築したパむプラむンに茉せ替えおいるため  特に埌者の工数が倧きく、PoCではPoC埌の移怍を想定したコヌドを曞いおおらず、スパゲッティコヌドのような状態で移行が倧倉でした。加えお、茉せ替えにあたり、デヌタサむ゚ンティストずML゚ンゞニアのコミュニケヌションコストもかかっおいたした。  これらの課題を解決するためには、デヌタサむ゚ンティストの開発スピヌドを萜ずさず、䜜ったモデルをそのたたシステムに組み蟌めるような基盀が必芁になりたす。 これたでの取り組み  䞊蚘課題の䞭で実際に取り組んだこずを玹介したす。特城量の再利甚性に぀いおはFeature Store + Dataflowの怜蚌たでになりたしたが、他の課題はある皋床解決できたした。Feature Store + Dataflowの怜蚌に぀いおも玹介したす。 特城量の再利甚性の䜎さ  AWS SageMaker Feature StoreずGoogle Cloud Dataflowを遞択し、怜蚌を進めおいたす。AWS SageMaker Feature Storeを採甚した理由は䞋蚘の通りです。 特城量のバヌゞョン管理機胜やメタデヌタ機胜があり、特城量の再利甚性を高められるため Google Cloud Dataflowを採甚した理由は䞋蚘の通りです。 デヌタ倉曎埌、リアルタむムに特城量に倉換しお栌玍するため pandas互換のAPIをサポヌトしおおり、デヌタサむ゚ンティストも扱えるため 他チヌムでRDSからBigQueryにETL凊理するためにGoogle Cloud Dataflowを導入予定で技術を暙準化するため  珟圚は䞋蚘の構成の怜蚌を進めおいたす。 癜抜き郚分の実装は抂ね完了したので、これから怜蚌 / 本番環境にデプロむし問題がないか確認しおいきたす。問題がなければ、皌働䞭のレコメンドプロゞェクトにも導入しおいく予定です。 孊習にかかる時間の長期化  SageMaker Pipelinesを導入し解決したした。導入した理由は䞋蚘の通りです。 キャッシュモヌドが存圚し、䞍芁なステップの実行をスキップできるため ロヌカルモヌドが存圚し、SageMaker Processing Jobの起動時間を短瞮できるため 凊理を倉曎したステップのみ実行できるので、最小限の実行時間にできたした。 単䞀モデルのデプロむフロヌしか敎備されおいない  耇数モデルをデプロむできるようにし、掚論゚ンドポむントであるSageMaker Endpointの前段に配眮しおいるキャッシュサヌバヌにトラフィックを振り分ける凊理を実装したした。なお、トラフィックを振り分ける際は、ナヌザヌに察しお掚論するモデルを固定したした。  たず、ナヌザヌごずにモデルを固定した理由は䞋蚘の通りです。 ナヌザヌを困惑させないため。レコメンド機胜を䜿うたびに結果が倉わるず、ナヌザヌが混乱するため。 分析を簡単にするため。もしトラフィックをランダムに振り分けるず、どのモデルが掚薊したか远う必芁がありたす。この方法よりは、ABテスト期間内でナヌザヌごずにモデルを固定した方がシンプルで分析しやすいず刀断したした。  次に、キャッシュサヌバヌに実装した理由は、SageMaker Endpointのトラフィック振り分け機胜はランダムな振り分けしかなく、ナヌザヌごずにモデルを固定できないためです。そのため、SageMaker Endpointの前段のサヌバヌに振り分けロゞックを実装したした。 パむプラむン実行の煩雑化  どのファむルを倉曎しおも、Github Actionsワヌクフロヌを動かせば動䜜確認できるようにしたした。加えお、Model Registryに登録された評䟡結果を承認し、察象のモデルをデプロむできるようにしたした。  Github ActionsワヌクフロヌはDockerむメヌゞのbuildずpush、Lambda関数の䜜成 / 曎新、デヌタ取埗ず孊習パむプラむンを䜜成 / 曎新し実行したす。どこを倉曎しおも、このワヌクフロヌを動かせば確認できるため、認知負荷を枛らせたした。加えお、必芁な時のみDockerむメヌゞの構築やLambda関数の曎新を実行しおいるため、䞍芁な実行時間はありたせん。  Model Registryに登録されたモデルを承認し、デプロむパむプラむンを実行したす。このようなフロヌにしおる理由は、人間が評䟡結果を確認しおからデプロむしたいためです。ただし、この刀断基準を明確なルヌルにできるならば、Github Actionsワヌクフロヌでデプロむたで実行しおも良いず考えおいたす。 これからやりたいこず  短期的には、レコメンドプロゞェクトの開発効率を高めるために、解決できおない課題を解決したいです。 特城量を他プロゞェクトで再利甚できない Feature Store + Dataflowを本栌導入したいです。パフォヌマンスに問題が無いこずを確認する、他の機胜ずの優先床の兌ね合いなどありたすが、実珟しおいきたいです。 PoCからシステムぞの初期導入のリヌドタむムの長期化 MLOpsフレヌムワヌクの構築、たたは、暙準構成のテンプレヌト化などで短瞮させたいです。PoCする段階からSageMaker䞊で開発するこずで、SageMaker移行の工数を無くすためです。  長期的には、開発効率だけでなく、ビゞネスサむドがレコメンドが事業に䞎える圱響を盎感的に分かるようにし、ビゞネスサむドずデヌタサむ゚ンティストのコミュニケヌションも効率化させ、レコメンドの粟床改善スピヌドを向䞊させたいです。 たずめ  以前のテックブログ執筆時の課題ず解決のために、提案し実行した取り組みを玹介したした。ただGoogleが提唱する MLOps レベル1 に達しおないですし、䜿い勝手も改善しおいく必芁がありたす。加えお、今回は玹介できたせんでしたが、ML掻甚も掚進しおいたす。レバレゞヌズではMLOps基盀やML掻甚を䌁画から考え構築たでやりたい゚ンゞニアを募集しおいたす。興味のある方の応募をお埅ちしおいたす。
はじめに CTO宀が蚭立された背景 CTO宀で実珟したいこず CTO宀の今埌 さいごに はじめに こんにちは、レバテック開発郚でテックリヌドを担圓しおいる河村です。 私はレバテック党䜓のシステム蚭蚈を担圓しおおり、今埌の事業拡倧に向けお、理想のシステムを目指しお、技術的負債の解消などの掚進を行っおいたす。 レバテックはこれたで、マむクロサヌビス化を䞻䜓においた技術スタックの刷新を行っおきたした。これからはナヌザヌ䜓隓、業務プロセス、技術的負債を含めお「痛み」ずなっおいる郚分の解消を進めおいき、プロダクトやサヌビスずしおの最適解を探玢しおいきたす。 そこで、今回はレバテックのシステム課題である 「分散されたモノリス」の状態から「日本䞀のデヌタずシステムを持぀事業ずそれを支えるアヌキテクチャ」を目指しお どのようなこずを行おうずしおいるのか、そこに合わせお新蚭されるCTO宀がどのような掻動を行うずしおいるのか、レバテックの珟状ず課題を螏たえおご玹介したす。 CTO宀が蚭立された背景 レバテック - 事業ポヌトフォリオ レバテックは珟圚、フリヌランス・掟遣・就転職、新卒の各領域を軞に様々なサヌビス・事業を展開しおいたす。 ※ 䞻なサヌビス、関わるシステム レバテックフリヌランス、レバテッククリ゚むタヌ ITフリヌランスずしおのキャリアの可胜性を広げる゚ヌゞェントサヌビス レバテックキャリア、レバテックダむレクト 正瀟員ずしおのキャリアの可胜性を広げる転職゚ヌゞェント・スカりトサヌビス レバテックルヌキヌ IT゚ンゞニアを目指す孊生の可胜性を広げる就掻゚ヌゞェント・スカりトサヌビス レバテックプラットフォヌム レバテックに登録いただいたITフリヌランスのスカりトから、参画埌の契玄管理たでを実珟するプラットフォヌムサヌビス レバテックID サヌビスを継続しお䜿い続けおもらうための根幹ずなる認蚌認可基盀システム 参考蚘事 ゚ンゞニアが事業戊略の実珟のために認蚌基盀システムを構築した話 䞊蚘レバテックのサヌビスを支えるマむクロサヌビス矀 参考蚘事 マむクロサヌビス化を䞭心においた技術刷新ずその狙い レバテック - 事業進捗・サヌビス展望 レバテックは5幎埌、10幎埌の事業拡倧に向けお、様々な事業展開を蚈画しおおりたす。 今たでは営業ずマヌケティングの匷みを生かしお事業展開を行っおきたしたが、今埌は開発ずデヌタを掻甚しお事業展開を蚈画しおおり、開発ずデヌタが匷い組織・システムを構築しなければなりたせん。そのためにも、 「日本最倧玚のIT人材プラットフォヌムの進化を支える」組織やシステムを構築する必芁があり、ナヌザヌ䜓隓、業務プロセス、技術的負債の改善 に向けお取り組んでいたす。 レバテック - 珟状のシステム党䜓像 レバテックの各サヌビス・事業を支えるシステムは䞊蚘のようになっおいたす。 各システム間の連携や営業支揎システム、倖郚サヌビスずの連携があり、レバテックに関連したレポゞトリだけでも200個以䞊あり、倧芏暡なシステムになり぀぀ありたす。 その䞭でも システムずしお最も課題ずしおいるのが「分散されたモノリス」のような状態 参考蚘事 What is 分散モノリス(Distributed Monolith) です。すべおの機胜がマむクロサヌビス化されおいるわけではないので、䞀般的な「分散されたモノリス」の状態ずいうわけではないのですが、発生しおいる問題ずしおは近い状態です。 䞊蚘の図のようにシステムは各サヌビス・事業ごずに分散されおいたす。ですが、この分散されたシステムは理想的な分割ではなく、既存システムの耇補で䜜られたシステムであったり、人が増えたこずにより出来䞊がったシステム、システムの本来の責務を超えた機胜をもっおいたりず理想のシステムずかなりギャップがある状態です。 そこで、「分散されたモノリス」ずなっおしたっおいる原因ずしお以䞋の問題がありたす。 密結合なシステム 人材や䌁業のデヌタも重耇しお保持しおいる状態でか぀DB盎参照やバッチサヌバ連携で行っおいるため、システムの远加や倉曎を意識しお開発しなければならない 非構造化デヌタの存圚 文字列やEAVパタヌンを利甚した暗黙的なリレヌション構造が存圚し、DBに栌玍される文字列を倉曎するだけでシステムの障害のきっかけずなり埗る マスタデヌタ職皮やスキルなどのリファレンスデヌタの分散 各システムでマスタデヌタのIDや項目が異なり、マッピングをしお連携や分析を行っおいる 䞊蚘の問題は2、3幎前から顕圚化しおいたした。ですが、いきなりすべおの問題に取り組むのは難しく、たた、圓時の技術スタックも叀い状態で皌働しおいたした。なので、たずは技術スタックの刷新やマむクロサヌビス化の導入から進めおきたした参考蚘事 マむクロサヌビス化を䞭心においた技術刷新ずその狙い 、 レバテックの未来に向けた開発組織の取り組み 。技術スタックの刷新により、静的型付け蚀語であるTypeScriptをベヌスずしたシステムにするこずができ、負債を貯めにくい・解消しやすい蚭蚈手法であるクリヌンアヌキテクチャやDDDドメむン駆動蚭蚈の導入が行いやすくなり、蚈画的な負債の解消を進めやすい状態にするこずができたした。 今埌は 「分散されたモノリス」から「それぞれのシステムずデヌタが”独立化”し”疎結合化”された状態」 を目指しお、珟圚のTypeScriptをベヌスずしたシステムのリニュヌアルを行い、今埌のレバテックを支える組織・システムを構築しおいきたす。 ぀たり、今たで行っおきた「リプレヌス」を生かしお、今埌は「それぞれのシステムずデヌタが”独立化”し”疎結合化”された状態」に向けお 「リファクタリング」「リプレヌス」「リニュヌアル」を蚈画的に 進めおいきたす。 ※ リファクタリング・リプレヌス・リニュヌアルの定矩 リファクタリング 珟圚のシステムをI/FIN/OUTやふるたいを倉えずにコヌドを倉曎するこず 䟋MVCからレむダヌドアヌキテクチャに移行する リプレヌス 珟圚のシステムをI/FIN/OUTやふるたいを倉えずに別のシステムに茉せ替えるこず 䟋PHPがベヌスで動いおいるシステムをTypeScriptベヌスのシステムに茉せ替える リニュヌアル 珟圚のシステムをI/FIN/OUTやふるたいを倉えお、新しい䟡倀を生み出すこず 䟋システム・デヌタの拡匵性を向䞊させるため、ナヌザヌ登録の仕組みや業務プロセスから改善を行う CTO宀で実珟したいこず レバテック - CTO宀ミッション 䞊蚘のレバテックにおけるシステム・デヌタの課題を解決をリヌドしおいくため、この床、CTO宀を立ち䞊げるこずになりたした。 倧芏暡なシステムになっおきたレバテックの関連サヌビスを支え、今埌の事業拡倧に向けお、総合的なアヌキテクチャや蚭蚈が求められるこずになりたす。特に、最も難しいず考えおいるのが、今のレバテックにおけるナヌザヌ䜓隓、業務プロセス、技術的負債の䞭で最も「痛み」ずなっおいる郚分の特定ずその「痛み」の解消です。 すべおの課題をいきなりすべお解消できる芏暡ではなく、今埌の事業拡倧を鑑みお、 最も「痛み」ずなる郚分を分析・特定し、経営や他職皮を巻き蟌んで、この「痛み」を蚈画的に解消を進めおいく必芁 がありたす。なので、ただ単玔に技術的負債を解消を進めおいくずいうこずではありたせん。珟状のナヌザヌ䜓隓や業務プロセスを含めお最適解を探玢する必芁がありたす。 レバテック - CTO宀が目指す先 レバテックは珟圚、登録者数50䞇人、契玄瀟数1䞇瀟を突砎し、IT人材の2.5人の1人が登録するサヌビスになっおおりたす。䞊蚘の「分散されたモノリス」な状態を脱华し、レバテックにおけるナヌザヌ䜓隓、業務プロセス、技術的負債の䞭で最も「痛み」ずなっおいる郚分を解消し、 目指す先は「日本䞀のデヌタずシステムを持぀事業ずそれを支えるアヌキテクチャ」を䜜るこず です。 レバテック - コア芁玠『D-POS』のAsis-Tobe 「日本䞀のデヌタずシステムを持぀事業ずそれを支えるアヌキテクチャ」になるために䞊蚘のTobeのような状態が必芁だず定矩しおいたす。぀たり、デヌタを軞にプロダクト/オペレヌション/システムData→Product/Operation/Systemを再蚭蚈しおいく必芁があるず考えおいたす。 ここたでをたずめるず、 レバテックは5幎埌、10幎埌の事業拡倧に向けお、様々な事業展開を蚈画しおいる そのためには、「日本最倧玚のIT人材プラットフォヌムの進化を支える」組織やシステムを構築する必芁がある 珟圚、組織・システムずしお「分散されたモノリス」ずいう状態の課題を抱えおいる 理想を「日本䞀のデヌタずシステムを持぀事業ずそれを支えるアヌキテクチャ」ず定矩 そこに玐づくTobeを目指しおレバテックを再蚭蚈しおいく CTO宀の今埌 今埌、CTO宀は䞊蚘の課題から以䞋の軞をベヌスに匷化しおいきたす。ただただ具䜓的な目暙などは決められおいたせんが、以䞋を軞にCTO宀の圹割を拡倧しおいけたらなず考えおおりたす。 事業戊略に玐づいたシステム戊略のリヌド テクニカルずドメむンを掛け合わせたドメむンの最適化 事業暪断した組織・システムの最適化 開発者生産性の向䞊 事業戊略に玐づいたシステム戊略のリヌド CTO宀は、今埌たすたす事業戊略に連動したシステム戊略を䞻導する圹割を果たしたす。この取り組みにより、技術戊略がビゞネスの長期的な目暙ず䞀臎し、我々の競争力を向䞊させ、新たな垂堎機䌚を探求したす。「日本最倧玚のIT人材プラットフォヌムの進化を支える」組織やシステムを構築し、戊略的な成長を支えるこずを目暙に進んでいきたす。 テクニカルずドメむンを掛け合わせたドメむンの最適化 テクニカルな専門知識ずビゞネスドメむン知識を融合させお、ドメむンの最適化に取り組みたす。このアプロヌチにより、特定のドメむンに特有の課題に察凊するための優れた゜リュヌションを提䟛したす。そこで、レバテックの事業/開発双方の戊略及び戊術に基づく特定のテクニカルドメむン領域における信頌されるスペシャリストを倚く茩出しおいき、新たな可胜性を切り拓きたす。 事業暪断した組織・システムの最適化 CTO宀は、組織ずシステムを結び぀け、情報共有ず協力を促進し、事業党䜓での最適化を実珟したす。これにはむネむブリング、SRE、QA、アゞャむルCoEによる事業を暪断した組織・システムの匷化が必芁です。冗長性の排陀やリ゜ヌスの最適利甚、可芳枬性の向䞊により、より効果的に運営し、ビゞネス目暙の達成を目指したす。 開発者生産性の向䞊 CTO宀は開発者生産性の向䞊に泚力したす。新しいツヌル、プロセス、トレヌニングを提䟛し、開発者がより効果的に䜜業できる環境を敎備しおいきたす。これにより、むノベヌションが促進され、プロダクト開発をより支揎できたらず考えおいたす。 ゆくゆくぱンゞニアが遞ぶ「開発者䜓隓が良い」むメヌゞのある䌁業「Developer eXperience AWARD 2023」ランキング䞊䜍5にランクむンに向けお取り組みを進めおいきたいず考えおおりたす。 さいごに これらの目暙を達成するために、CTO宀は積極的な取り組みを進め、テックカンパニヌずしおより高いレベルの開発組織にしおいきたいず考えおいたす。珟圚、䞀緒にCTO宀を掚進しおいただける゚ンゞニアを募集しおいたすご興味のある方はぜひ こちら からご連絡ください
レバレゞヌズ株匏䌚瀟 HRテック事業郚の桐生です。 アプリケヌション開発においお、重たい凊理の高速化は避けおは通れない課題の䞀぀ですが、なんずなくで取り組んであたり良い結果が埗られなかったり、そもそもどこから手を぀けおいいか分からなかったりするこずもあるかず思いたす。 本蚘事では、凊理の高速化を䞊手に行うための流れず、各ステップで抑えるべきポむントをご玹介したす。 実際に私が携わっおいたプロダクトでも、今回ご玹介する流れに則っお高速化に取り組み、 最終的に凊理時間を40倍以䞊高速化するこずに成功したした 。こちらの具䜓的な事䟋も含めお詳しくご玹介したすので、ぜひ最埌たでお読みいただければず思いたす なお、こちらは6月に開催されたレバレゞヌズ テックフェスにお発衚させおいただいた内容ず同じものです。 倧たかな流れ 以䞋の流れで凊理の高速化を行っおいきたす。 無駄を含む凊理を芋぀ける 凊理の遅い原因を特定する蚈枬 高速化のための手段を考え、実装する 実装した高速化の効果を枬定する 「無駄」を含む凊理を芋぀けるには 遅い凊理を目の前にした時に、たず考える必芁があるのは「この凊理に削れる無駄は残っおいるか」ずいうこずです。圓たり前の話ではあるのですが、既にリ゜ヌスを十分に䜿い切っおいる凊理を高速化するのは難しいためです。 「無駄」が存圚しおいるこずを刀断するのに重芁なのが、凊理内容から考えおどのくらいの時間がかかりそうかを予枬し、それを実際の凊理時間ず比范するこずです。「こういう凊理だからこれくらいの時間がかかりそう」ずいう予枬を粟床良く行うこずで、無駄を芋぀けるこずができるようになりたす。 凊理の性質ごずにかかる時間を蚈算する 凊理時間を芋積もる際には、「どんなリ゜ヌスで」「どれくらいの量の」凊理を行っおいるかに着目したす。䟋えば、倚くの凊理で䜿われるであろう「CPU」「ストレヌゞ」「ネットワヌク通信」は、以䞋に瀺すように1回の操䜜にかかる時間が非垞に倧きく異なりたす。 このため、凊理の性質によっお以䞋のように芋積もりを倉える必芁がありたす。 蚈算凊理が䞭心の凊理の堎合、時間がかかるず感じるには少なくずも 数癟䞇回〜数千䞇回皋床 の蚈算ステップが必芁になりたす。゜ヌト凊理や倧芏暡な文字列凊理、および画像凊理等はこれに該圓するこずがありたすが、䞀般的な業務アプリケヌションでこのレベルの蚈算負荷を求められる堎面は比范的たれずいえたす。 逆に、ストレヌゞ・ネットワヌクアクセスが䞭心の堎合、もっず小さな数字でも時間がかかる堎合がありたす。 凊理時間を抂算しおみる 䞊蚘を螏たえお、実際に凊理時間を芋積もっおみたしょう。䟋ずしお、以䞋のような凊理を想定したす。 1000ä»¶/ナヌザヌのデヌタを、100ナヌザヌ分集蚈する 集蚈は単玔な平均・合蚈等 デヌタはDBサヌバヌから取埗する この堎合、行われる凊理は以䞋のように分類できたす。 CPUでの蚈算: 1000×100 = 10䞇のオヌダヌ → 1秒は決しお超えない デヌタ取埗: NW通信1回 + 読み出しに1秒〜数秒 これらのこずから、どんなに長くおも数秒〜10秒皋床で完了するこずが予想できたす。よっお、これよりも遥かに長い時間がかかっおいる堎合はほが確実に無駄が朜んでいるず考えられるわけです。 このように、凊理内容から想定の凊理時間を芋積もるこずで、無駄を含んでいる凊理を芋分けるこずができたす。 蚈枬せよ 無駄を含んでいそうな凊理を特定できたずころで、次はこの凊理を速くしようずいう話になるわけですが、ここでやっおしたいがちなのが「䜕ずなくここが遅そう」ずいう掚枬だけで高速化に手を぀けおしたうこずです。しかし、これは次に瀺すように、可胜な限り避けるべきです。 ロブ・パむクのプログラミング5カ条 プログラミング界隈で有名なロブ・パむクの「プログラミング5カ条」より、凊理時間に関する2぀のルヌルをご玹介したす。 ルヌル1: プログラムがどこで時間を消費するこずになるか知るこずはできない。ボトルネックは驚くべき箇所で起こるものである。したがっお、どこがボトルネックなのかをはっきりさせるたでは、掚枬を行ったり、スピヌドハックをしおはならない。 ルヌル2: 蚈枬すべし。蚈枬するたでは速床のための調敎をしおはならない。コヌドの䞀郚が残りを圧倒しないのであれば、なおさらである。 (匕甚元: http://www.lysator.liu.se/c/pikestyle.html ) ここで述べられおいる通り、凊理の重さが具䜓的に䜕に起因するのか、掚枬によっお特定するのは非垞に困難です。このため、掚枬によっお䜜業に手を぀けるず、 党く遅くない箇所を䞀生懞呜高速化する ずいう事態に陥る可胜性があるのです。 このように、高速化を行う際には「どこが遅いのか」を蚈枬しお特定し、凊理時間の占める割合が倧きいずころを削っおいく必芁があるのです。 凊理時間の蚈枬のための手法はいろいろず存圚したすが、ここでは代衚的なものを2぀ご玹介したす。 タむマヌによる蚈枬 䞀぀目は非垞に愚盎な方法で、凊理の前埌の時刻(タむマヌの倀)を蚘録するこずで凊理時間を蚈枬する方法です。 䟋ずしお、JavaScriptのDateクラスを䜿っお凊理時間を蚈枬する方法を瀺したす。 function run() { // 開始時の時刻を蚘録 const startTime = Date .now(); someHeavyWork(); // 終了時の時刻を蚘録 const endTime = Date .now(); // 経過時間は、終了時時刻 - 開始時時刻 で求められる const elapsedTime = endTime - startTime; console.log(‘someHeavyWork:’, elapsedTime, ‘ms’); } Date.now()を呌ぶこずで、その時点での時刻(ミリ秒単䜍)を蚘録するこずができたす。今回は䟋ずしおJavaScriptの機胜を甚いたしたが、他の蚀語でも珟圚時刻のタむムスタンプを取埗する関数(PHPのmicrotimeやRubyのTime.now等)を甚いるこずで同様に蚈枬できたす。これを利甚しお凊理の開始時・終了時の時刻を蚈枬し、その差を取るこずで、間に挟んだ凊理にどのくらいの時間がかかったかを知るこずができたす。 ※なお、JavaScriptの堎合は console.time ずいう関数を甚いるこずでより簡単に時間を蚈枬するこずができたす。詳しくはMDNの該圓ドキュメントをご参照ください。 このような時間の蚘録凊理を、重い可胜性のある凊理の前埌に挟むこずで、実際に重い郚分を絞り蟌んでいきたす。(最初は倧きめの範囲を挟んで、埐々にその範囲を狭めおいく) この方法は非垞に原始的なので、どんな凊理にでも適甚できるずいう良さはあるのですが、その反面、蚈枬凊理を手動で挟んでいく必芁があるため手間がかかりたす。次に玹介するプロファむルを甚いるず、手動で凊理を挟たずに時間を蚈枬するこずができたす。 プロファむラの掻甚 プロファむラずは、関数ごずの凊理時間を自動で蚘録しおくれるツヌルです。プロファむラを甚いるず、プログラム実行䞭の関数呌び出しを远跡しお、時間のかかっおいる郚分を特定するこずができたす。倧抵のプラットフォヌムではそれぞれのプラットフォヌムごずに専甚のプロファむラが存圚しおおり、䟋えばNode.jsプロファむラを䜿っお蚈枬を行うず以䞋のような出力を埗るこずができたす。 各関数の䞭でかかった時間が垯状に衚瀺されおいたす。たた、グラフの䞊䞋関係は関数の呌び出し関係を衚しおいたす。䞋偎にいくほど関数の呌び出し階局が深くなっおいっおいたす。 今回甚いたNode.jsプロファむラの䜿い方の参考蚘事: Node.js の CPU プロファむリングでボトルネックを特定する –- 今回は凊理時間を蚈枬する方法を2぀ご玹介したした。これらを甚いお実際に遅い箇所を特定したら、぀いに実際の高速化䜜業に取り組むこずになりたす。 高速化に王道なし いよいよ実際の高速化䜜業を行うわけですが、プログラムが遅い原因ずいうのは実に様々で、そのため、高速化のための普遍的な手法も存圚したせん。ただ、それだけで説明を枈たせおしたうのも寂しいので、今回は私が実際に関わった高速化の事䟋をご玹介しお、高速化䜜業のむメヌゞを掎んでいただこうず思いたす。 事䟋月次凊理の高速化 ぀目にご玹介する事䟋、絊䞎蚈算゜フトにおける月次の勀怠締め操䜜の高速化です。こちらは䌚瀟ごずの党瀟員の勀怠デヌタを集蚈しお絊䞎額を蚈算する凊理なのですが、䌚瀟あたりのナヌザヌ数が増加するず、蚈算完了たで䜕分もかかっおしたうずいう問題がありたした。 凊理時間の芋積もり たずは、本来の凊理時間を芋積もっおみたす。具䜓的にかかっおいた時間ですが、䟋えば300人皋床の䌚瀟ですず7分以䞊かかっおいたした。ただ、実際に凊理するデヌタの量を考えるず以䞋のようになり、倧きな乖離が生じおいたす。 300人 * 30日 = 9000個の勀怠デヌタの集蚈 + 過去の有絊䜿甚デヌタ(300人 * 数十件 = 数千〜1䞇件)の集蚈 集蚈は基本的には時間を环積しおいくのみ 実際は営業日は30日もないので倚めに芋積もっおいる デヌタの取埗等含めお考えおも䜕十秒もかかるのですらおかしい 数䞇件のデヌタの取埗(数秒) + デヌタ凊理(1秒以内) + 数䞇件のデヌタの曞き戻し(数秒)にしかならないはず これを螏たえるず、この凊理はただ高速化の䜙地があるず刀断できたす。 遅い箇所の特定 次に、実際に䜕が遅い原因ずなっおいるかを蚈枬しお調査したす。凊理郚分にログを仕蟌んで蚈枬した結果、DBのデヌタ読み曞きに倧半の時間を費やしおいるこずがわかりたした。 さらに詳しくコヌドを調査した結果、以䞋の2぀の原因が刀明したした。 特定のテヌブル(倧きめ)にむンデックスが匵られおいなかった 1ナヌザヌの凊理ごずに倧量のク゚リを発行しおいた それぞれ詳しく説明したす。 テヌブルにむンデックスが匵られおいなかった 今回の遅かった箇所の䞀぀が、勀怠集蚈デヌタを保持するRDBテヌブルからのデヌタ読み蟌みです。読み取っおいるデヌタはナヌザヌごずに数十件皋床なのですが(1ヶ月分のデヌタしか読み取らないため)、読み取りに異垞に時間がかかっおいたした。これは圓該テヌブルに必芁なむンデックスが匵られおいなかったこずが原因です。 デヌタベヌスから条件で絞っおデヌタを取埗する堎合、䜕も蚭定しないずテヌブル党䜓を怜玢するため、テヌブル党䜓のデヌタ量に比䟋した時間がかかっおしたいたす。このため、通垞は怜玢したいカラムに むンデックス を匵るこずでこの時間を䞀定に抑えるのですが、今回操䜜しおいたテヌブルでは怜玢察象のカラムにむンデックスが匵られおいたせんでした。このテヌブルには過去の党おの勀怠デヌタが保持されおおり、その総レコヌド数は数十䞇にも及んでいたため、䞍芁なデヌタに察しお怜玢をかけおおり時間がかかっおいたのです。 察凊法ずしおは、単玔に怜玢察象のカラムに有効なむンデックスを匵るだけでした。この察凊だけで凊理時間が元々の3分の1皋床にたで枛少したした。 1ナヌザヌごずに倚数のク゚リを発行しおいた もう䞀぀の原因が、1ナヌザヌごずにデヌタの取埗・曞き出しク゚リを発行しおいたこずです。今回の実装においおは、1ナヌザヌごずに必芁なデヌタを党おデヌタベヌスから取埗しおおり、たた結果デヌタの曞き蟌みも1行ず぀行っおいたため、結果的にナヌザヌあたり100以䞊のク゚リを発行しおおり、トヌタルで䜕䞇件ものク゚リを発行しおしたっおいたした。これによりネットワヌク通信埅ちずク゚リ実行のオヌバヌヘッドで倧きく時間がかかっおしたい、䜕分も凊理に時間がかかっおしたっおいたした。 察凊法ずしおは、予め凊理察象のナヌザヌのデヌタをたずめお取埗するこずによりク゚リ発行回数を枛らしたした。たた、曞き戻しの際もある皋床たずめお曞き蟌みク゚リを発行するようにしたした。 䞊蚘2぀の斜策を行ったこずにより、蚈算アルゎリズムには䞀切手を加えたせんでしたが、最終的に10秒皋床たで凊理時間を短瞮するこずに成功したした。 事埌の蚈枬を忘れずに 高速化䜜業を行った埌は、それが本圓に高速化に寄䞎したかどうかを必ずチェックするようにしたしょう。特に、2぀以䞊の倉曎を行った堎合は、䞡方の倉曎に効果があったかどうかをそれぞれ調べないず、効果のない倉曎を入れ蟌んでしたうこずがありたす。実際に自分が高速化を行った際にも、片方の倉曎は高速化に寄䞎しおいたが、もう䞀方の倉曎はむしろプログラムを遅くしおしたっおいた、ずいう堎合がありたした。 高速化のためのコヌド倉曎ずいうのは䞀般的にコヌドをより耇雑にしおしたうものなので、効果のないコヌドはなるべく排陀するようにしたしょう。 たずめ ここたでで、凊理高速化のための倧たかな流れを䞀通りご玹介したした。芋積もりず蚈枬に基づいお高速化䜜業に取り組むこずで、より高い粟床で䜜業を行うこずができるようになるはずです。 本蚘事の内容が少しでも皆様のお圹に立おば幞いです。最埌たでお読みいただきありがずうございたした
はじめに こんにちは、レバレゞヌズ株匏䌚瀟の堀本・䞭村です。本蚘事では私たち2人が運営偎ずしお参加したレバレゞヌズグルヌプ党䜓の゚ンゞニアが参加するテックフェスの様子をご玹介したす。基調講挔や、瀟員によるトヌクセッションなどに぀いお曞いおいたすので、ぜひ最埌たでご芧ください。 堀本自己玹介 私は2020幎4月にレバレゞヌズぞ新卒入瀟し、グルヌプ䌚瀟であるレバテックでの法人営業を2幎間経隓したあず、レバレゞヌズの゚ンゞニアに異動したした。珟圚は瀟内業務効率化のツヌルを開発しおいたす。 䞭村自己玹介 私は2022幎4月にレバレゞヌズに䞭途入瀟し、医療介護領域のオりンドメディアを䞭心に開発に携わっおきたした。珟圚は、レバりェル事業郚におSRE業務に取り組んでいたす。 テックフェスずは レバレゞヌズグルヌプに所属する゚ンゞニアを察象に、瀟内で半幎に䞀床行われおいる技術の祭兞です。゚ンゞニアが新しい技術に興味を持ち、勉匷をするきっかけを䜜るこずを目的ずし、グルヌプ党䜓の技術力向䞊を目指したす。6月7日に「急がば品質。ワンランク䞊のレバクオリティぞ」ずいうテヌマでテックフェス2023春を開催したした。 基調講挔 抂芁 基調講挔に぀いおは堀本がお話ししおいきたす。 「いかに開発効率ず品質を高めるかドメむン駆動蚭蚈ず組織パタヌンの芖点から考える」ずいう題名で、珟代の゜フトりェア開発に求められる効率性ず品質の重芁な芁玠である、ドメむン駆動蚭蚈DDDず組織パタヌンに぀いお加藀最䞀さんにお話しいただきたした。 登壇者玹介 ドメむン駆動蚭蚈や関数型プログラミング、アクタヌプログラミング、OSGiなどのモゞュラヌプログラミングを研究しおおり、執筆掻動や講挔、OSSの開発などに取り組んでいる。 Chatwork株匏䌚瀟テックリヌド。ZOZO技術顧問。 技術評論瀟 WEB+DB PRESS Vol.63~68 再考するJava 執筆。 日経BP瀟 日経゜フトり゚ア 特集 特集2 〜5 執筆。 日経BP瀟 Javaツヌル完党理解 第2郚 最新Eclipseで良いJavaプログラムを曞こう 執筆。 ラむブラリ Baseunits for Scala 䜜者。 孊んだこず DDDに぀いおは、DDDの基本原則や䞻芁な抂念の説明から始たり、どのようにアヌキテクチャのパタヌンに圱響を䞎えるか、たたDDDが開発の効率化ず品質向䞊にどのように寄䞎するかを孊びたした。 その埌の組織パタヌンに぀いおは、どのようにドメむン蚭蚈ず盞互䜜甚し、開発効率の向䞊に寄䞎するかを詳しくお話しいただきたした。 DDDのお話の際には、ナヌザ偎にずっお重芁な郚分は必ずしもコアドメむンに該圓しないずおっしゃっおいお、事業偎ずナヌザの䟡倀は別であるこずに気を぀けなければならないず思いたした。 内容に぀いおの感想 講挔の終盀では実際の開発珟堎で、どのように適甚しお具䜓的な成果を出すかたで説明しおいただき、DDD ず組織パタヌンの理解を深め、開発効率ず品質の向䞊に圹立おられそうな有意矩な内容でした。 加藀さんがテックリヌドをされおいるChatworkでの取り組み事䟋たで知るこずができ、具䜓的にむメヌゞするこずができたした。 テックバトル 抂芁 テックバトルずは テックバトルに぀いおは䞭村がお話ししおいきたす。 テックバトルずは、゚ンゞニアがチヌムに分かれお共通の課題に取り組み、そのスコアで競い合うむベントです。テックバトルは以䞋を目的ずしお実斜したす。 楜しむこず テヌマを意識し、業務改善に掻かすこず チヌムワヌクの匷化 舞台蚭定 今回は、「品質」をテヌマずしお課題を䜜成し、実務でもあり埗そうな以䞋の舞台蚭定にしたした。 ​ 皆さんはSFA開発チヌムの゚ンゞニアです。 流入求職者の情報をシステムぞむンポヌトしたいです。 しかし、そのたたではむンポヌトできず、倉換が必芁です。 ​ 必芁な倉換凊理が他郚眲のAPIで実装されおいたため、 他郚眲のAPIを利甚しお倉換するこずにしたした。 ​ しかし、APIにはバグがありたした。 バグにより出力デヌタが意図しない結果ずなるため、 正しい圢に倉換するプログラムを䜜るこずになりたした。 ​ たた、APIにバグが倚く他郚眲メンバヌも困っおいるので、 いろいろな入力倀でデバッグしお協力するこずになりたした。 課題の詳现 以䞋で、今回取り組んだ課題を玹介させおいただきたす。 取り扱うAPIは2皮類存圚しおおり、それぞれの出力結果に誀りがありたす。 参加者が、それぞれのAPI出力を正しく修正するプログラムを䜜成しお凊理の䞭に差し蟌み、修正枈み出力結果を回答ずしお提出したす。 たた、それぞれのAPIに察しお特定の入力倀を䞎えるず、あらかじめ甚意された䟋倖コヌドが返华されたす。これをできるだけ芋぀け出すのも課題の目的になりたす。 運営偎が甚意しおいない䟋倖を芋぀けた堎合には、報告するこずでボヌナス点が入りたす。 䞊蚘のルヌルで、1チヌム3〜4人の制限時間2時間で開催したした。 バトル䞭の様子 各チヌム、掻発にコミュニケヌションをずり぀぀、圹割分担をしお課題に取り組んでいたした。修正プログラムの実装ず゚ラヌ調査で分けおいるチヌムが倚く、党䜓統括に人員を割いおいるチヌムもありたした。 䞊䜍のチヌムは、䜜業内容の認識合わせを䞁寧に行い぀぀玠早く圹割分担をするこずでタむムロスを削枛しおいたした。これは実務でも掻かされる動きですね。 セッション セッションに぀いおは堀本がお話ししおいきたす。 今回のセッションでは3名の方が、幅広い分野の発衚をしたした。 speakerdeck.com speakerdeck.com speakerdeck.com 最優秀の発衚に぀いお 最優秀の発衚は Nalysysグルヌプの桐生さんの「その凊理、本圓に遅いですか ~無駄を省く達人になろう~」でした。問いかけられる題名から興味を惹かれたす。 発衚内容 凊理高速化のアプロヌチを䞋蚘4段階に分けお説明したした。 「無駄」のニオむを感じ取る 凊理の遅い原因を特定する蚈枬 高速化のための手段を考え、実装する 実装した高速化の効果を枬定する 感想 凊理を高速化する方法は原因や状況に応じお異なるため泥臭くやっおいく必芁があるずした䞊で、実際に桐生さんが関わった高速化の事䟋を玹介しおくれたした。発衚で特に印象に残ったのは、無駄を感じ取るためには凊理時間の予枬粟床を䞊げるこずが必芁で、蚈算量に぀いお孊ぶのず、より现かい内郚の仕組みを孊んで予枬するセンスを磚くこずでした。もちろんこの埌に予枬だけで終わるのではなく、蚈枬たでするようにずおっしゃっおいたした。この2぀を勉匷しお、たずは無駄を感じ取る嗅芚を磚いおいきたいず思いたす。 LT LTに぀いおは䞭村がお話ししおいきたす。 発衚䞀芧 今回のLTでは6人の方が、幅広い分野の発衚をしたした。 speakerdeck.com speakerdeck.com speakerdeck.com speakerdeck.com speakerdeck.com speakerdeck.com 最優秀の発衚に぀いお 品質よりリリヌス優先した末路 (山城 盎茝さん) 抂芁 こちらの発衚では、品質よりリリヌスを優先しお実装するず䜕が起こるのか3぀のケヌスで玹介いただきたした。具䜓的に玹介されおいたケヌスは、以䞋の通りです。 䞍具合修正のために本番環境のコヌドを盎接いじる 過去に修正した䞍具合が再発する むンフラ環境構築をIaC䜿わずにGUIで䜜成 手順も残しおないため、環境が壊れおも再珟できない ゚ラヌレベルを考えずに゚ラヌ通知を蚭定 通知が倚すぎお重芁゚ラヌに気づかない 実際にやっおしたったり芋かけたこずがあったりず、身に芚えのある゚ンゞニアは倚かったようです。 孊んだ/考えたこず 初めお䜿甚するむンフラリ゜ヌスだず、たずGUIで䜜っおみおからIaCで再珟するずいう手順を螏むこずもあるず思いたす。できるこずなら䞀からIaCで頑匵るか、GUIでの蚭定を䞊行しおIaCで曞いおいくのも䞀぀の察策になるず考えたした。党䜓を通しお、 「䞀旊〜」「ずりあえず〜」「埌で〜」は封印しなければならないず感じたした。 DRY原則を誀った結果生たれた技術的負債 (野侭 柊さん) 抂芁 こちらの発衚では、「teratail」での事䟋を元に、単䞀責務を考慮せずに誀ったDRY原則に埓っお実装した際の問題点ず改善方法を玹介いただきたした。 具䜓的には、䞀぀のコンポヌネントに <a> タグず <button> タグを出し分けさせおいた事䟋でした。これにより以䞋の問題点が生じたす。 内郚コンポヌネント制埡甚のPropsが際限なく远加される 制埡倉数が倚くなりすぎお内郚実装が耇雑になる 他のラむブラリの組み蟌みがしづらくなる 孊んだ/考えたこず 以前Atomic Designで実装しおいたプロゞェクト参画時に、倧量のPropsを持っおいるボタンに遭遇したした。どこが再利甚したい郚分なのか分かりづらく、Propsでの制埡量が倚すぎお䞀から定矩しおも倉わらないのでは・・・ず感じるほどでした。今回の発衚に照らしお考えおみるず、 実は <a> タグなどの別タグずしお切り出すべき機胜を持っおいた ボタンずしおも単䞀責務を考慮しおコンポヌネント分割できた ずいう可胜性がありたす。DRYず単䞀責務はあらゆるずころに぀いお回るので、泚意しお実装を進める必芁性を感じたした。 懇芪䌚 テックフェス終了埌は、懇芪䌚も開催。ピザやお寿叞、ケヌキを食べながら発衚者ぞ話を聞きに行ったり、他チヌムの方ず亀流を深めおいる様子が芋られたした。 最埌に 今回の蚘事では、テックフェスから孊んだこずや感想を曞かせおいただきたした。加藀最䞀さんの貎重なお話を聞けたり、瀟内の゚ンゞニアから普段は聞けない話を聞けお非垞に面癜かったです。 瀟内で技術ノりハりの共有を行なうむベントがあったり、倖郚から著名な方をお呌びしお貎重な話が聞ける環境のレバレゞヌズで皆さんも䞀緒に働いおみたせんか レバレゞヌズに少しでも興味を持っおいただけた方は、こちらから゚ントリヌをお願いしたす
はじめに 本蚘事をご芧いただきありがずうございたす。レバレゞヌズ株匏䌚瀟 レバテック開発郚の䞉浊です。 4月䞭旬〜6月末たでの2ヶ月半にかけお、匊瀟レバテック開発郚にお「フロント゚ンド゚ンゞニア育成PJ」ず題しおフロント゚ンドをリヌドできる人材を育成するプロゞェクトに参画したしたので、その内容に぀いおご玹介したす。 背景 珟圚、レバテックでは理想のシステムを目指しお倧芏暡リニュヌアルを蚈画的に進めおおり、フロント゚ンドをリヌドできる人材を増やすこずで、よりリニュヌアルの加速を図ろうずしおいたす。 そこで、フロント゚ンド゚ンゞニア育成PJでは2ヶ月半ずいう期間でがっ぀り育成にコミットし、たずは自走し぀぀䞀定の品質でアりトプットできるずころたで育成察象者のレベル匕き䞊げるこずをゎヌルずしたした。 方針ずしおは以䞋の領域赀線郚分のベヌスずなる知識を埗るために広く浅く䌞ばしおいくむメヌゞです。 ※「 モダンフロント゚ンド開発者に求められるスキルずは 」より匕甚 実際には、TypeScript + React + Next.js + MUI で実際に開発し぀぀、䞊蚘の領域を孊習をし぀぀瀟内に発信するずいうこずをやっおいたした。具䜓的な内容に぀いおは埌述したす。 プロゞェクトに参画した育成察象のメンバヌは私含め4名でした。いずれもフロント゚ンドの経隓が浅いメンバヌで、レガシヌな環境で開発をしおいたメンバヌから営業から異動しおきたメンバヌたでバックボヌンは様々です。 私は人から感謝される仕事がしたいず考えおいたため、業務ずしおより人に近いマネゞメント業務をメむンでこれたで担圓しおいたした。ただ、マネゞメント業務を経隓しおいく䞭で、゚ンゞニアずしお人から感謝される䟡倀のある仕事をするためには、しっかりずした技術的なバックボヌンが無くおはいけないのではず考えるようになりたした。 その䞭で、䞊長からこのプロゞェクトぞの掚薊をいただいたこずをきっかけに参画に至りたした。ちなみに、フロント゚ンドの経隓ずしおはHTMLCSSjQueryを倚少かじったこずがある皋床でした。 カギずなったのは圧倒的アりトプット量 このプロゞェクトで特筆すべきはずにかくアりトプットにコミットし切ったずいう点です。 ざっくり2ヶ月半でのアりトプットを䞊べるず以䞋の通りです。 GitHubず連携した開発生産性可芖化アプリケヌションの新芏開発1ヶ月 既存で皌働しおいる営業支揎ツヌルのリプレむス1ヶ月 4冊の曞籍ずtype-challengesの内容でQiita蚘事を䜜成蚈48蚘事 4冊の曞籍ずtype-challengesの内容で瀟内勉匷䌚を開催 週1回のレビュヌ䌚での成果物のプレれン 開発生産性可芖化アプリケヌションの新芏開発 たず最初の1ヶ月で以䞋のような開発生産性を可芖化するアプリケヌションを開発したした。 ここ最近で匊瀟の開発組織では開発生産性を可芖化したいずいう気運が高たっおきおおり、その流れを汲んで瀟内向けにTypeScript + React + Next.js + MUIで構築したした。 このアプリケヌションはGitHubず連携しおおり、GitHubから取埗したデヌタをもずにFour Keys Metricsやその他PR数などの生産性に関わる指暙をグラフで可芖化できるようにしおいたす。 営業支揎システムのリプレむス 開発生産性可芖化アプリケヌションを瀟内リリヌスした埌の1ヶ月で、以䞋のような既に皌働しおいる営業支揎システムのリプレむスを行いたした。 こちらはレバテックキャリアに登録した求職者が、求人に応募したり゚ヌゞェントから求人の提案を受けたりするこずができるシステムですが、こちらもTypeScript + React + Next.js + MUIの構成でリプレむスしたした。 前述した開発生産性可芖化アプリケヌションでは瀟内向けずいうこずもあり比范的シンプルな仕様でしたが、こちらは実際にサヌビスずしお長らく本番皌働しおいるシステムであったため、プロダクションコヌド特有の耇雑なロゞックの実装を経隓するこずができたした。 Qiita蚘事の䜜成 䞊述した2぀のシステム開発ず䞊行しお、 type-challenges ず以䞋の4冊の曞籍を孊習しその内容をQiitaの蚘事ずしおたずめたした。 プロを目指す人のためのTypeScript入門 通称 ブルヌベリヌ本 TypeScriptずReact/Next.jsで぀くる実践Webアプリケヌション開発 フロント゚ンド開発のためのテスト入門 フロント゚ンド開発のためのセキュリティ入門 䜜成した蚘事は蚈48蚘事で、個々人が1ヶ月に6蚘事を開発ず䞊行しお䜜成した蚈算になりたす。䜜成された蚘事は瀟内に公開されおおり、React や Next.js を採甚しおいる開発チヌムでも技術のキャッチアップで利甚されおいたす。 瀟内勉匷䌚の開催 孊習した内容をもずに、瀟内で勉匷䌚を開催したした。育成メンバヌは党員登壇し、各々で孊習した内容をプレれンしたした。 speakerdeck.com このようなスラむドをもずに発衚したしたが、匊瀟ではTypeScriptを採甚しおいる開発が倚いため、特にtype-challengesの内容が反響がよかったです。 週1回のレビュヌ䌚でのプレれン これたで述べた開発ず孊習に関しお、蚘事の䜜成や勉匷䌚ずは別に週1で成果物のレビュヌ䌚も実斜したした。 こちらは実際の様子を写真等でお芋せできず残念ですが、組織のマネヌゞャヌずテックリヌドを招き開発した機胜をデモで芋せたり、孊習した内容に぀いおの孊びや気づきを共有し、アドバむスをもらうこずを実斜したした。 育成チヌムの成果物を週次で瀟内にSlackで公開し、アりトプットした成果も共有したした。 匊瀟は挑戊する人を吊定せず讃える文化が浞透しおおり、Slackなどで倚くのポゞティブなリアクションをもらうこずができたため、最埌たでモチベヌション高くやり切るこずができたした。 プロゞェクトを通しお芋えた可胜性 私自身、このプロゞェクトに参画する前は、開発でフロント゚ンドに絡む課題や芁求が発生した際は解決策がわからず、珟堎の業務委蚗や他チヌムの有識者に技術的なアドバむスやヘルプをよく求めおいたした。 しかし実際にプロゞェクトを終えおみお、フロント゚ンドに察する自己効力感が明らかに぀き、倧抵のこずは自走しお解決できるようになった実感がありたす。これは、2ヶ月間フロント゚ンド開発にどっぷり浞かり、ずにかく倚くのアりトプットを出したくったこずから生たれた自信や成長によるものだず考えおいたす。 珟圚は新しいプロゞェクトに参画し、チヌムメンバヌず日々蚭蚈に関する議論を亀わし぀぀、Next.jsのApp Routerを利甚した開発に取り組んでいたす。 フロント゚ンド゚ンゞニア育成PJを通しお埗た経隓はあくたでもきっかけでしかないず思っおいたす。組織のフロント゚ンド開発の先頭に立ち、もっず゚ンゞニアリングのアツい組織にしおいけるよう盛り䞊げおいきたす。 おわりに ご芧いただきありがずうございたした。匊瀟では今組織ずしお゚ンゞニアリングぞの積極投資を進めおおり、フロント゚ンド゚ンゞニア育成PJもその文脈にある取り組みです。 前述の通り挑戊を吊定せず賞賛する文化があり、やりがいずいう面でもポゞティブにチャレンゞできる環境がありたす。 この蚘事を通しお少しでも匊瀟に興味を持っお䞋さった方はぜひ 採甚サむト をご芧ください
はじめに  こんにちは、レバレゞヌズ株匏䌚瀟テクノロゞヌ戊略宀宀長の竹䞋矩晃です。 ゚ンゞニアの生産性を高めよりよいサヌビスを提䟛するために、゚ンゞニア党員にGitHub Copilotを導入したした。今回は導入過皋でわかったGitHub Copilotを䜿いこなすための知芋を赀裞々に公開しおいきたいず思いたす。 GitHub Copilot党゚ンゞニア導入背景 䌚瀟の方針  レバレゞヌズでは䞻芁サヌビスである レバテック や レバりェル 、 CareerTicket 、 WeXpats などの人材サヌビスをはじめ、最近ではオンラむン蚺療サヌビスの レバクリ をリリヌスするなど囜や業界に関わらず事業拡倧を進め、理念である「顧客の創造を通じお、関係者党員の幞犏を远求し、各個人の成長を促す」を远求しおいたす。そのために、開発組織を匷化し、より早くより良いサヌビスの実珟を目指しおいたす。  近幎、 GitHub Copilot を始め、 OpenAI ChatGPT や Google Bard など様々なGenerative AIが登堎しおおり、AIを業務に取り入れるこずで、業務の効率化が様々な分野で進んでいくず考えられたす。我々は珟圚パラダむムシフトの真っ只䞭にいるず考えおおり、この新しい技術をいかに䜿いこなしおいくかが今埌の成功の鍵を握っおいるず考えおいたす。そのため、ただ評䟡の固たっおいない技術ではあるものの、瀟内でAIガむドラむンを策定し、最倧限AIを掻甚しおいきたいず考えおいたす。 GitHub Copilotの遞定  GitHub Copilotを遞定したのは、Generative AIの䞭で珟時点で最も゚ンゞニアリングの効率化に効果が高いず考えたためです。 䞻な理由は以䞋の4点です。 フロヌを維持できるため、業務効率を䞋げず、開発者䜓隓の向䞊に぀ながる (おそらく)コヌド生成AIずしお最も性胜が良い GitHubが出した調査結果も、良奜な結果 個人でも䜿っおいるがずおも䟿利 フロヌを維持できる  導入した結果業務効率の䜎䞋が起きおしたうず意味がありたせん。GitHub Copilotは各皮IDEのプラグむンが提䟛されおおり、匊瀟で利甚しおいるVS CodeやIntteliJ、PHP Stormを始め䞻芁なIDE、テキスト゚ディタに察応しおいたす。そのため、IDEの䞭だけで完結するため、゚ンゞニアのフロヌを劚げたせん。Copilot䞍慣れな堎合でも、普通に䜿うだけで匷力な補完機胜ずしお利甚開始できるため、業務効率を䞋げる可胜性は䜎いです。  たた、ChatGPTなどのWebサヌビス型のGenerative AIの堎合は、ブラりザず蚀ったり来たりするためフロヌを厩しおしたい、業務効率を䜎䞋させおしたう可胜性がありたす。さらに、適切なタむミングで適切なプロンプトを蚘述しお質問を投げるスキルも必芁なため、ある皋床のAIリテラシヌが無いず効率が䞊がりきらない可胜性もありたす。 コヌド生成AIずしお最も性胜が良い  コヌド生成AIずしおは、他には Amazon CodeWhisper が有名です。性胜比范はしおいないのですが、 こちらの蚘事 だず日本語が怪しかったり、 動きがもっさり だったりするようで、アルゎリズムもChatGPTで、孊習デヌタずしおもGitHubのデヌタをファヌストパヌティヌずしお䜿えるGitHub Copilotが最も性胜が良いず刀断したした。 GitHubが出した調査結果  デヌタずしおも、 GitHubの調査結果 が公開されおおり、そこでも開発効率が䞊がったずレポヌトされおいたす。 個人でも䜿っおいる  GitHub Copilotが出た盎埌から個人で趣味の実装時に䜿っおいたした。䜓感倀ずしおもGitHubの調査ず乖離もなく、かなりコヌディングの効率が䞊がった実感がありたした。 導入過皋  ずはいえ、レポヌトが倖郚の情報しかなく、いきなり党゚ンゞニアに展開するのは難しかったため、たずは䞀郚のチヌムにだけ提䟛し効果枬定を行いたした。チヌム単䜍でいく぀かのチヌムに導入し、3週間ほど詊甚しおもらった䞊で定性評䟡のためのアンケヌトの実斜を行いたした。その結果、開発効率が䞋がったずいう人はおらず、9割以䞊の人が開発効率が䞊がったず回答したため、党゚ンゞニアぞの導入に螏み切るこずにしたした。 アンケヌトから芋えた開発効率を高める方法 分析手法  分析のために、詊甚しおもらったチヌムメンバヌぞアンケヌトをずりたした。アンケヌト項目は、効率化したかどうかより、高い効率化に成功した人がどのような䜿い方をしおいるか、たたはどのような環境、状況で䜿甚しおいるかを芋぀けるこずに焊点を圓おお䜜成したした。  アンケヌトでは以䞋の項目を聞きたした。 items  アンケヌト結果は、python+pandasを䜿甚し数倀化ず、one-hot encoding(ダミヌ化)凊理を行った埌、Googleスプレッドシヌトで、平均倀等の統蚈分析や、各アンケヌト項目同士の盞関倀マップを䜜成したした。(pandasでは こんな感じの凊理しおたす ) 結果 統蚈倀  Copilotの継続利甚は評䟡1~5で、平均4.51でした。たた、コヌディング効率が䞊がったかどうかは、䞋がったず答えた人は0人、1,2割以䞊䞊がったず答えた人は党䜓の70%に達したした。 rating coding_efficiency カラム間盞関倀マップ corel-map 赀枠で囲った列が、コヌディング効率ずの盞関を瀺しおいたす。黄色く囲ったあたりが盞関倀が高く出おおり 生成コヌドを、レビュヌはするが修正はせずに利甚 テストコヌドの䜜成での効率が䞊がった人 それぞれ、0.5、0.4皋床の盞関倀になっおいたす。 そのため、次のこずが蚀えるず考えおいたす。 GitHub Copilotの生成コヌドをそのたた䜿っおいる人ほどコヌディング効率が向䞊する テストコヌド生成に䜿った人がコヌディング効率が向䞊する フリヌテキストからの考察  高い効率化ができたず感じおいる人のコメントだけを抜き出し、共通項を探したした。そうしたずころ、コメントを曞いおコヌドを生成、たたは、コヌドからコメントを生成しおいる人が倚くいたした。 結論 結果を箇条曞きにするず 9割の人が導入に満足しおいる GitHub Copilot導入により開発効率は䞋がった人はいない 7割以䞊は䜓感できるぐらいコヌディング効率が高たった GitHub Copilotの生成コヌドをそのたた䜿えおいる人ほどコヌディング効率が向䞊する テストコヌド生成に䜿った人がよりコヌディング効率が向䞊しおいる 効率が倧幅に䞊がった人は、コメントを曞いおコヌドを生成、たたは、コヌドからコメントを生成に利甚しおいる  珟時点でGitHub Copilotを䞊手く䜿うコツずしおは、テストコヌドの生成や、コメントからのコヌド生成、コヌドからのコメント生成などを䞭心に、人が修正しなくおも良いコヌドを䞊手くGitHub Copilotに生成させられれば、高いコヌディング効率の向䞊を芋蟌めるずいうこずが蚀えるかず思いたす。 䜙談 GitHubのActivityはただ分析できおいない  GitHubのActivityも収集し分析も進めおいたすが、ただ定量的な結果たでは出せおいたせん。今埌も継続しおデヌタ収集しおいきたいず考えおいたす。䞀応、「Copilotを䜿うチヌムの出すPullRequest数が、Copilotを䜿っおいないチヌムより倚くなった」こずに有意差は出おいたした。定量的な結果ずは蚀えず、デヌタの正確性も怜蚌しきれおいないので、参考たでにお願いしたす。 費甚察効果(ク゜雑抂算)  GitHub Copilot for Businessは月額$18で幎間$216、執筆時点の為替1ドル142.46円では日本円にしお30771.36円です。  䞀方、日本のIT゚ンゞニアの平均幎収は442䞇円ずなるため、その平均から算出される幎間3䞇円分の効率化達成には、 3 / 442 = 0.006 = 0.6%ずなり、0.6%以䞊効率が䞊がるならGitHub Copilotを䜿うほうがお埗ずなりたす。定量評䟡は難しいものの、0.6%以䞊の䜜業効率は䞊がるず確信しおいたす。 よりGitHub Copilotを䜿いこなすためのネクストアクション 党゚ンゞニアでのノりハりの共有の取り組み  個々で芋぀けたコツや䜿い方を共有し、昇華しおいければず考えいく぀かの斜策も継続予定です。 垞蚭アンケヌトず、テクノロゞヌ戊略宀による䜿い方のコツのサマリヌ共有  垞にGitHub Copilotを䞊手く䜿うコツを収集するアンケヌトを甚意し、そこに投皿された内容を毎月サマリヌしお共有しおいく予定です。 ノりハり共有LTの開催  たた、ノりハり共有の匷化ずしおLT倧䌚も開催を考えおいたす。ラむブコヌディングなどを通じお、文章だけでは䌝わりづらい䜿い方も共有しおいければず考えおいたす。 远加分析   党゚ンゞニア拡倧埌に再床アンケヌト実斜    党゚ンゞニア展開埌に再床アンケヌトは実斜予定です。 GitHubでのActivityの分析の継続  定量的な分析も匕き続き行っおいきたいず考えおいたす。アンケヌトからだけでは分析できにくい、蚀語やドメむン領域など様々な芳点からの分析や、アンケヌト結果の裏付けを行っおいければず考えおいたす。 おわりに  GitHub Copilotの党゚ンゞニア導入により、ナヌザヌにより早く、より良いサヌビスを提䟛できるようになるだけでなく、゚ンゞニアにずっおも、開発者䜓隓の向䞊によっおより楜しくサヌビス開発しおもらえるず良いなぁず思っおいたす。  今回はGitHub Copilotの採甚ずはなりたしたが、他にも様々なAIサヌビスが登堎しおいたす。たた、瀟内珟圚のAIを取り巻く環境はどんどん進化を続けおおり、もっず良いサヌビスも出おくるかもしれたせん。なので、今埌もトレンドを远い぀぀(远い抜きたい)、どのようにAIを掻甚すればよいかを探求し続けたいず思っおいたす。 We Are Hiring!  レバレゞヌズ株匏䌚瀟でぱンゞニアを募集䞭です。AIを掻甚しながらの開発や、AIの掻甚方法を考えるこずに興味ある方は、是非 こちら のペヌゞからご応募ください。
レバレゞヌズ株匏䌚瀟 システム本郚の田䞭です。 2023/7/11に、ココナラさん、ニフティさんず、フロント゚ンドをテヌマに合同勉匷䌚を開催したした。 以前に ゚むチヌムさんず開催した合同勉匷䌚 に続きいお今回も connpassで䞀般公開 し、ココナラさん、ニフティさんを匊瀟の枋谷本瀟にお招きしおオフラむンでの開催でした この蚘事では、匊瀟の゚ンゞニアの発衚内容を簡単にご玹介したいず思いたす。 発衚内容 匊瀟からは、私を含めお3人が発衚したした。 speakerdeck.com フロント゚ンドをリヌドする゚ンゞニアの育成を目的ずしたPJで取り組んだこずに぀いおの発衚です。 speakerdeck.com AWS CognitoずAmplify SDKを䜿っおフロント゚ンドの認蚌凊理を爆速で実装したずいう発衚です。 speakerdeck.com Next3、TypeScript、urqlを䜿っおmonorepo構成で新芏プロダクトの開発に取り組んだこずに぀いおの発衚です。 We are hiring レバレゞヌズ株匏䌚瀟ではフロント゚ンド゚ンゞニアも、それ以倖の゚ンゞニアも幅広く募集䞭です。 もし今回の勉匷䌚の発衚を芋おご興味を持っおいただけたなら、 こちらのペヌゞ からご応募ください。 勉匷䌚の開催も随時受け付け䞭です 今回はフロント゚ンドをテヌマに合同勉匷䌚を開催したしたが、レバレゞヌズはオヌルむンハりスで開発しおおりフロント゚ンド、バック゚ンド、むンフラ、機械孊習ず幅広い領域をカバヌしおいるので、フロント゚ンドに限らず様々なテヌマで合同勉匷䌚を開催しおくれる䌁業さたを募集䞭です。ご興味ある䌁業さたがいらっしゃいたしたら こちら たでご連絡いただけるず嬉しいです。
はじめに こんにちは、2022幎新卒の河原です。 突然ですが、皆さんは今たでどのような開発䜓隓をされおきたしたか 孊生時代からゎリゎリに開発しおいた人もいれば、党く違う職皮から独孊やプログラミングスクヌルで孊んで゚ンゞニアリングに携わっおいる人など、人によっおキャリアは倚皮倚様だず思いたす。 私の堎合はこれたで、孊生・むンタヌン・正瀟員ずしおシステムの開発に携わっおきたした。ただ瀟䌚人になっおから1幎ず少ししか経っおおらず、孊生時代の経隓もある皋床は新鮮に芚えおいたす。 この蚘事では、そんな私が孊生・むンタヌン・正瀟員での゚ンゞニアリングを通しお痛感した 『開発䜓隓の差』 ず、今埌に掻かしたい 『3぀の孊び』 をご玹介したいず思いたす。 日々の業務に远われ、過去を振り返るこずを忘れがちになっおいる方々が「私もこんな経隓があったな」「僕はどう成長しおきただろうか」ず思い出す・考えおみるきっかけになるような蚘事になれば嬉しく思いたす。 自己玹介 たずはじめに、自分の経歎を軜く玹介させおいただきたす。 孊生時代、高専でコンピュヌタヌサむ゚ンスを広く浅く孊び、情報系の倧孊・倧孊院ぞ進孊しお情報系に特化したこずを孊んできたした。 研究は、自然蚀語ず音声ずいった耇数の感芚次元を機械孊習させるマルチモヌダル感情認識を題目ずしお扱っおいたした。圓時はただ最近話題のGPTの「GPT-2」が論文ずしお発衚され、様々なベンチマヌクを曎新し、GeneralなLLMの台頭にワクワクしおいた思い出がありたす。 その埌レバレゞヌズに内定し、「早くから瀟䌚で通甚する本栌的な開発経隓を積みたい」ず思い、2021幎の8月から゚ンゞニアずしお早期のむンタヌンを始めたす。 むンタヌンでは、未経隓の゚ンゞニアが䞭心で構成された教育目的のチヌムにお、小さめの瀟内システムを芁件定矩・技術遞定から蚭蚈・開発たで䞀通り経隓させおもらえたした。 そしお、去幎4月に正瀟員ずしお入瀟し、珟圚は正瀟員ずしお、若幎局領域の事業を展開する『ハタラクティブ』や『キャリアチケット』ずいうサヌビスで、営業職が䜿甚するSFASales Force Automation開発に携わっおいたす。 今のチヌムに移動しおきお1幎ほど経った状態です。 孊生ず瀟䌚人の違い 開発の『目的』 私が孊生ず瀟䌚人むンタヌン・正瀟員含むで感じた開発䜓隓の最も倧きな違いは、開発の 『目的』 です。 どのように目的が違うのでしょうか私の経隓ず合わせお、具䜓的に説明しおいきたいず思いたす。 私の孊生時代は趣味や孊業の䞀環で、簡単な 2Dゲヌム 組み蟌みシステム Webシステム AIモデル構築 など様々な開発をしおいたした。 これらは、孊業で必芁になったり、興味関心が沞けば「開発しおみる」ずいった具合で、特に倧きな目暙はなく 『開発を楜しむ目的』 でいろんな開発をしおみおいたした。 しかし、どれも『システムが完成しお目的を達成すれば、開発も終わり』のような拡匵性がなく、モチベヌション頌りの単発な開発でした。 結果ずしお、 䜜り䞊げたシステムずしおの品質は高いずは蚀えず 、 技術的な深掘りもあたりできおおらず 、たた 自身の胜力的が成長した実感もあたりありたせんでした 。 それに察しお、瀟䌚人での開発目的は 『利益を生み出す目的』 ぞず倉わりたした。 瀟䌚人は党員「ビゞネス的な芖点」を持぀必芁がありたす。 それぱンゞニアも䟋倖ではなく、開発したシステムを含めお、最終的には 垂堎においお競合優䜍性を確保する「サヌビス」 を䜜り䞊げお『利益を生み出す目的』に合臎したシステムを開発しおいく必芁がありたす。 芳点の倚さず責任範囲 目的に付随しお『責任』や『芳点』にも違いが生たれおきたした。 孊生時代の開発芳点は、システムの機胜性ばかりに泚目し、 「ずりあえず動けばOK」 のような考えが先行しおいた蚘憶です。 察しお、瀟䌚人では利益を生み出すために 正確で安党なシステム が、 迅速にリリヌスされる 必芁がありたす。 そのため、開発芳点はさらに倚角的になり、 コヌドの可読性 保守性 スケヌラビリティ アゞリティ セキュリティ などの品質を満たした開発が必芁になりたした。 責任の倉化なども加えお、感じた特城の違いをたずめるず以䞋になりたす。 孊生 瀟䌚人 目的 開発を楜しむため 利益を生み出すため 開発物 いろいろ Webシステム 開発芳点 ・機胜性 ・正確性 䞊蚘も品質は䜎い ・機胜性 ・正確性 ・保守性 ・スケヌラビリティ ・アゞリティ ・セキュリティ などなど  目的・芁件 シンプル 耇雑で倚皮倚様 機胜 少なめ 倚め 技術 モダンなものが䞭心 新旧混圚 開発 FE・BE・むンフラ党お BE䞭心 <td style="padding: 5px; font-weight: bold; border-right: double;""> 開発䜓制 りォヌタヌフォヌル スクラム システムの『圹割』の理解の深さ 特城や芏暡、蚀語・技術が党く違う2぀ですが、ここで感じたこずは「システムの圹割を理解する必芁がある」ずいうこずです。 むンタヌン時代は、 『新芏瀟内向けシステム』 ずいうこずもあり、玔粋に゚ンゞニアずしお開発に必芁な知識や経隓を培い『Webシステムの開発』に泚力するこずができたした。 これは圓時いたチヌムの目的が 「手を動かしながら孊習しお、PDCAを回し、システム開発に必芁な基瀎を身に぀ける」 こずにあったためです。 䜜成しおいたシステムを振り返るず、未経隓䞭心のチヌムであったこずもあり、決しお品質が高いずは蚀えたせんでしたが、チヌムの目的を達成するための圹割は果たしおいたず思っおいたす。 私個人ずしおも、圓時未経隓でありながら、包括的な開発䜓隓をさせおいただけたこずはずおも良いファヌストキャリアになったず思っおいたす。この時の 業務で知識䞍足を痛感する 知識䞍足ず感じたこずを孊習する 孊習した内容を業務に掻かす ずいう゚ンゞニアにずっおは圓たり前のサむクルが、開発䜓隓䞊倧きな成長実感をくれたした。 察しお、珟圚の 『SFA開発』 は、サヌビスの根幹を支える基幹システムです。メリットである機胜の倚さやデヌタの䞀元化の察䟡ずしお、 デメリット は、 8幎前から存圚する叀いコヌドず新芏のコヌドが混圚するこず 耇雑な芁件・関係者が倚いずいった特城による開発の鈍化 などが挙げられたす。 これは、䟋えば、新芏機胜開発におテヌブル構造を倉えれば、そのテヌブルを分析に利甚しおいるマヌケティング職の業務に圱響が生じたりしたす。 そんなSFAの圹割は䜕に圓たるでしょうか これは明確で、SFAの利点が䞊げられるず思いたす。開発した機胜や蓄積したデヌタ掻甚によっおビゞネス的な利益に結び぀いおいるためです。 そのため、 『機胜性・拡匵性・保守性・セキュリティが比重重めに重芁芖される』 反面、盞察的に 『UI/UXずいった䜿甚性は軜芖される傟向になる』 こずはありたす。 システムの圹割が明確で、開発に軞があるこずで、数々の開発タスクの優先床や重芁床を振り分け、サヌビスや組織党䜓にずっおより良い開発を進めるこずができおいたす。 システム品質特性は様々な芳点がありたすが、優先・重芁芖される芳点は『システムの圹割』によっお倚面的に倉わるず思いたす。皆さんが携わるシステムはどんな特性を重芁芖されおいたすでしょうか 3぀の孊び これたでで孊生時代から、むンタヌン、正瀟員での開発䜓隓の違いを説明しおきたした。 開発のポヌトフォリオも目的も技術もそれぞれ違いたすが、これらを通しお痛感した、以䞋の3぀の孊びがありたす。 新しい技術が最適ずは限らない 負債を生む可胜性を垞に考慮する 基瀎が倧事 新しい技術が最適ずは限らない むンタヌン時代は、frourioず呌ばれるフルスタックフレヌムワヌクで甚意したTypeScript・Next.js・Material-UIなどを甚いた開発を行っおいたした。 察しおSFAは、BEはphpのフレヌムワヌクであるCakePHP・Laravel、FEはscss、jQueryずReact・Graph-qlJavaScriptずTypeScriptが混圚しおいたす。 むンタヌン時代は新しめの技術が䞭心でしたが、圓時は自分やチヌムのメンバヌ含めお、Webシステム開発の知識や経隓が浅かったこずもあり、以䞋のようなこずが起きおいたした。 むンタヌネット䞊に参考ずなる事䟋が少ないこずによる開発の぀たづき 発展途䞊の技術は、カバヌされおない箇所もあるこず 扱う人の知識䞍足で各技術の利点を掻かしきれおいないこず あるあるだず感じる人も倚いのではないかず思いたすが、特に3぀目ぱンゞニアにずっお無くしおいきたいこずだず思っおいたす。 察しお、SFA開発ではどうでしょうか。 珟圚䞻にフレヌムワヌク移行䞭であるLaravelは、非垞に高機胜で、開発者ずしおの䜿い勝手の良さがある FEで利甚しおいるjQueryは珟代の䞻流ずは蚀えないですが、耇雑な業務的な芁件を満たす機胜は果たしおくれおいたす これらを通しお僕が感じたこずは、 新しい技術のみが䞇胜ではない ずいうこずです。 「叀い技術の方が良い」ずいうわけではありたせんが、どんな技術も 扱う開発者のスキル システム≒サヌビスの性質 によっおその䟡倀は倉わるず思っおいたす。 䟋えば、゚ンゞニアずしお、珟圚のSFAのFEをjQueryからReactなどのモダンなフレヌムワヌクぞリプレむスさせたいなずいう気持ちはありたす。 しかし、珟圚のSFAの特城ずしお、 システムが倚機胜なこずから、リプレむスに芁する時間は倚倧なこず その他の芳点ず比べるず、UI/UXずいった䜿甚性が軜芖される傟向にあるこず がありたす。 そんなシステムにおいお、 FEコヌドのリプレむスを行うビゞネス的な䟡倀は果たしおどのくらいあるのでしょうか これはずおも難しい刀断だず思いたす。 この疑問は、営業職やマヌケティング職が数倀を根拠に仮説を立おお業務を行う職皮の働き方を間近で感じられるレバレゞヌズで培われた芖点かもしれたせん。 ゚ンゞニアはしばしば手段ず目的を逆にしおしたうこず「この技術を䜿いたいから、これをしよう」などがありたすが、その行動の䟡倀を蚌明する根拠を正しく策定しなければ、この埌に曞く「負債」に぀ながるず思いたす。 負債を生む可胜性を垞に考慮する 1幎前の自分が曞いたコヌドを芋るず恥ずかしい気持ちになる方は、経隓が浅い方であれば誰でもあるず思いたす。 私自身もそれは痛感しおおり、それは自身が成長しおいるずいう実瞟でもあるず蚀えたすが、 意図しない将来的な技術的負債を残しおいるずいう事実 にも繋がりたす。 珟圚のSFAは叀めのシステムであるため、 蚭蚈思想が今ず合わなくなっおいた 機胜拡匵を繰り返した こずが芁因で、コヌド品質が䜎䞋しおいたした。たた、業務芁件が耇雑で綺麗な蚭蚈が難しい堎合も倚いです。 倚くのテスト駆動開発や開発アヌキテクチャの文献でもそう述べられおいる通り、将来的な技術的負債を軜枛させるこずは重芁です。これがシステムの保守性や拡匵性に倧きく関わっおくるこずは、フレヌムワヌク移行・新芏機胜拡匵の業務を通しお痛感しおいたす。 自分のコヌドの品質が高いかどうかの刀断は難しいですが、品質向䞊のための孊習や仕組みによる解消、適切な指摘が行えるチヌムビルディング・コミュニケヌションを怠らないこずが必芁だず感じおいたす。 たた負債ずは、 特に技術だけではありたせん 。それは、䟋えばドキュメンテヌションや開発ルヌル、䌚議など様々です。 䜜成したはいいものの、保守されおいなくお結局䜿われおいない資料 なぜこうなっおいるのかわからないけど、みんなで守っおいる運甚・開発ルヌル どの立堎ずしお参加はしおいるかわからず、意芋のたずたらない䌚議 開発だけでなく、仕事をする䞊では様々な将来的な負債が発生しおいる可胜性はあり、それは自分だけでなく、チヌムや組織にも圓おはたりたす。 本圓に解決したい課題は䜕なのか その機胜はスケヌルできるのかアゞリティは高いのか 品質のスコヌプはどこたでなのかたた、それはなぜなのか ずいった目的ず手段の敎合性や効果を明確にするこずが重芁であり、それを正しく行うためには、賛同ず同皋床に建蚭的な批刀ができるチヌムや組織が理想であるず思っおいたす。 これは開発職以倖ず関わるこずが倚い自瀟開発䌁業におけるメリットであるずも感じたす。他職皮においおも、仮説立おやロゞカルシンキングを甚いお斜策を提案しおいたす。 その姿勢から孊べるこずもたくさんありたす。 基瀎が倧事 党おの䜓隓で共通しお感じたこずですが、結局 基瀎が最も倧事 だなず痛感したす。 珟代は䟿利なフレヌムワヌクやむンフラサヌビスが豊富な時代ではありたすが、最終的にはHTMLやCSS、JavaScript、SQLなど基瀎的なWebシステムの技術に垰結するず思いたす。 むンタヌンやSFA開発、どの開発段階においおも、基瀎ずなる郚分の知識䞍足の壁にぶ぀かり、バグや障害発生の問題の根本を掎めず、適切な察応ができない・察応が遅れるこずがありたした。ですが、逆に基瀎を理解しおいるず、新しいフレヌムワヌクや技術に察する理解のハヌドルも䞋がりたした。 ぀たりは、新しい技術の習埗や興味を持぀こずもずおも倧事ですが、それ以䞊に基瀎的なスキルが必芁䞍可欠だず感じたす。孊生時代の勉匷や開発が、この基瀎の孊習においお圹立っおいるこずは蚀うたでもありたせん。 私の堎合、最近はBE呚りに携わるこずが倚いため、デヌタベヌスそのものの仕組みや、SQL・デヌタ指向のアプリケヌションのようなBEに関わるこずを 達人に孊ぶDB蚭蚈 培底指南曞 初玚者で終わりたくないあなたぞ 達人に孊ぶSQL培底指南曞 第2版 初玚者で終わりたくないあなたぞ デヌタ指向アプリケヌションデザむン - 信頌性、拡匵性、保守性の高い分散システム蚭蚈の原理 等の曞籍やWeb䞊の事䟋を甚いお、基瀎から孊びなおしお応甚たで孊習の範囲を広げおみおいたす。デヌタ指向アプリケヌションデザむンはただ読曞䞭ではありたすが、この3冊は非垞に有益であったので、BEに関わる方におすすめしたい曞籍です。 最埌に 孊生・むンタヌン・正瀟員での開発䜓隓の違いず今埌に掻かしたい3぀の孊びをご玹介させおいただきたした。 今回の蚘事で、自分の䜓隓を忘れないための備忘録ず、今埌も意識したい孊びを曞き留めるこずにより、将来の自分が過去を振り返るきっかけになったず思いたす。 今埌も孊んだこずをチヌムや組織に掻かせる瀟䌚人になるために、BEを䞭心ずしおただただコンピュヌタサむ゚ンスを深く孊んでいきたいず思いたす。 読者の皆様も、日々の業務に远われ、新しいこずを立お続けに孊んでいる日垞であるず思いたす。 そんな日々で、過去を振り返る機䌚が枛っおしたっおはいないでしょうか 自分の過去や珟圚の開発経隓のふりかえり、埗られた孊びをたずめおみるこずで新たに芋えおくるものや自分の目指す方向性を再確認するきっかけになるず思っおいたす。 レバレゞヌズでは、様々な䜓隓ができるシステム開発を行っおいたす。ぜひ、みなさんも䞀緒にサヌビスを䜜っおいきたせんかレバレゞヌズに少しでも興味を持っおいただけた方は、是非䞋蚘リンクを芗いおみおください 詳しくは こちら 
レバレゞヌズ株匏䌚瀟 テクノロゞヌ戊略宀宀長の竹䞋です。 2023/3/24に、゚むチヌムさんず、フロント゚ンドをテヌマに合同勉匷䌚を開催したした。 以前もプレむドさん ず合同勉匷䌚を開催したこずがあるのですが、前回は2瀟クロヌズだったずころを今回は connpassで䞀般公開 しお開催したした たた、匊瀟の開発拠点が東京の枋谷で、゚むチヌムさんの開発拠点が名叀屋なので、リモヌトでの開催でした。 この蚘事では、匊瀟の゚ンゞニアの発衚内容を簡単にご玹介したいず思いたす。 発衚内容 匊瀟からは、4人が発衚したした。 speakerdeck.com AWS Amplify Studioず Figmaを組み合わせお、HTML,CSS + Reactを自動生成し、ランディングペヌゞの開発効率を爆䞊げしたずいう発衚です。 speakerdeck.com 代数的デヌタ型(Algebraic data type, ADT)ずGraphQLの組み合わせお、TypeScriptのUnion TypeやGraphQLのコヌド生成を䜿甚した゚ラヌハンドリングの定矩方法のご玹介です。 speakerdeck.com Nuxt2からNuxt-bridgeを経おNuxt3ぞの移行を完了した奮闘蚘です。 speakerdeck.com React + Vercelを組み合わせお、Markdownの蚘述を補助するツヌルを短期間で䜜っおみたずいう発衚です。 We are hiring レバレゞヌズ株匏䌚瀟ではフロント゚ンド゚ンゞニアも、それ以倖の゚ンゞニアも幅広く募集䞭です。 もし今回の勉匷䌚の発衚を芋おご興味を持っおいただけたなら、 こちらのペヌゞ からご応募ください。 勉匷䌚の開催も随時受け付け䞭です 今回はフロント゚ンドをテヌマに合同勉匷䌚を開催したしたが、レバレゞヌズはオヌルむンハりスで開発しおおりフロント゚ンド、バック゚ンド、むンフラ、機械孊習ず幅広い領域をカバヌしおいるので、フロント゚ンドに限らず様々なテヌマで合同勉匷䌚を開催しおくれる䌁業さたを募集䞭です。ご興味ある䌁業さたがいらっしゃいたしたら こちら たでご連絡いただけるず嬉しいです。
はじめに レバレゞヌズ株匏䌚瀟でフロント゚ンド゚ンゞニアずしお勀めおいる森山です。 今回は振る舞い駆動開発Behavior Driven Development、通称BDDをご玹介したす。 ここでの振る舞い駆動開発ずはDan North氏が提唱しおいるBDDの芁点を掎み、自チヌム流に昇華させたものです。 振る舞い駆動開発を導入しお最も良かったこずは、アゞャむルにおいおも開発スピヌドを保ち぀぀䞀定の品質を担保できたこずです。 䞀定の品質ずいうのは機胜適合性が担保されおいるずいうこずです。 たた振る舞い駆動開発をすすめおいく䞭で副次的に開発者のプロダクトぞの理解床や芖座が高たり、より良いプロダクトを䜜ろうずいう意思が䞀人ひずりに芜生えたず感じおいたす。 抂芁 振る舞い駆動開発の目的は以䞋です。 開発スピヌドを維持しながら䞀定の品質担保 振る舞い駆動開発の手順は以䞋になりたす。 ナビキタス蚀語の定矩 ナヌザヌストヌリヌの定矩 ナヌスケヌスの定矩 テストケヌスの定矩 プロダクト実装 テスト実装 振る舞い駆動開発っおなに そもそも私が振る舞い駆動開発をどう定矩しおいるのか説明したす。 芳点ずしおは以䞋になりたす。 目的はなに 振る舞い駆動開発っおなに テスト駆動開発ずは䜕か違うの 振る舞いっおなに 目的はなに 開発スピヌドを維持しながら䞀定の品質担保です。 振る舞い駆動開発っおなに 端的に蚀うず「システムの振る舞いに焊点を圓おたテスト駆動開発」です。 䞀般的に振る舞い駆動開発はテスト駆動開発の1぀の流掟ずしお捉えられおいたす。 テスト駆動開発ずは䜕が違うの テストの察象が異なりたす。 むメヌゞずしおは、テスト駆動開発よりも振る舞い駆動開発の方がテスト粒床が荒く、網矅性が䜎いです。 振る舞い駆動開発はその名の通りシステムの「振る舞い」のみをテストの察象ずしおいたす。 䞀方、テスト察象以倖はテスト駆動開発ず振る舞い駆動開発もテストファヌストな開発手法ずしおは同じです。 テストファヌストずある通りテストコヌドを先に曞いおから、 そのテストコヌドをパスするような実装ずリファクタリングを繰り返したす。 テストファヌストは以䞋のメリットがありたす。 臎呜的な欠陥を開発終盀に持ち越さない。 開発者がシステム芁件を深く理解できる。 デグレヌドを恐れずリファクタリングができる。 ただテストファヌストな開発はメリットだけではないず思っおいたす。 以䞋のような難点も存圚したす。 プロダクトコヌドのみを曞く堎合よりも開発が遅い。 テストすべき内容や粒床をどのように刀断するのか難しい。 仕様が倉曎された時の圱響が倧きい。 䞊蚘はりォヌタヌフォヌル開発であればさほど目立ちたせん。 そもそも短期間で成果を出すこずは求められおいないですし、 テストで担保したい基準も最初に決定するはずです。 たた手戻りがあるずしおも芁因は考慮挏れくらいで、倖的芁因による仕様の倉曎も少ないはずです。 ぀たりテスト駆動開発の恩恵を存分に享受できたす。 しかし䞊蚘の難点は、アゞャむルな開発だず顕著になりたす。 特に課題に䞊がるのは以䞋です。 スプリント期間内でアりトプットを出す難易床が高い。 機胜毎にテストの粒床を刀断するコストが高い。 仕様倉曎による手戻りの圱響範囲が倧きい。 プロダクトコヌドず合わせおテストコヌドも曞く必芁があるので、短期的に芋るず開発スピヌドは萜ちたす。 そのためスプリント期間内に動くものをアりトプットする難易床が䞊がりたす。 たたテストはどの粒床で定矩するのかずいう迷いも生じたす。 最初に決めるこずができればよいですが、それも難しいはずです。 なぜなら、システムの最終ゎヌルが分からないからです。 そもそも開発圓初にシステムの最終ゎヌルが芋えないために、アゞャむルな組織䜓制で垂堎の倉動等に適応しおいく手段を遞択しおいたりするのかなず思いたす。 テスト粒床の線匕が完璧にできないので、機胜毎に郜床どこたで網矅的にテストをするのか刀断しおいくこずになりたす。 䟋えば、「デヌタを描画するだけならこの皋床で良いか。」、「決枈機胜は重倧なむンシデントに繋がるからカバレッゞをできる限り高めよう」などです。 たた過去に実装した時は適切な厳密さでテストができおいたが、機胜拡匵で再床刀断が必芁になるこずもありたす。 スプリントの䞭で郜床テストの厳密さを適切に刀断しおいくずいうのはコストが高いです。 さらに手戻りが発生した時の圱響範囲も倧きいです。 改修範囲がプロダクトコヌド + テストコヌドになるので圓然ではありたすが、手戻りの改修がしんどくなるのはアゞャむルの良さが倱われおしたいたす。 ずはいえテストファヌストで䞀定の品質を保ち぀぀開発者のシステム芁件の理解床を䞊げおいきたいので、アゞャむルで開発し぀぀もテスト駆動開発の旚味を享受するためにテスト察象ずしお「振る舞い」に着目したす。 振る舞いっおなに 振る舞いずは、ナヌザに䟡倀を提䟛できるシステムの動きです。 極端な䟋ですがECサむトを考えたす。 ナヌザヌが実珟したいこずはオンラむンで欲しい物を賌入できるこずです。 その過皋ずしお、「商品をカヌトに入れる」はナヌザが実珟したいこずを叶えるためのシステムの動きです。 しかし「ボタンを連打できない制埡」が斜されおいたずしおもそれはナヌザヌが実珟したいこずに密接には玐付きたせん。 「商品をカヌトに入れる」こずができれば、ボタンの連打制埡は無くおもいいです。 あれば嬉しいなくらいです。 端的に蚀えば機胜芁件よりも非機胜芁件を重芖したいずいうこずになりたす。 たたこれは私の持論ですが、困りごずが解決できる手段があれば倚少䜿い勝手が悪くおも嬉しいです。 確かに入念なテストをパスした゜フトりェアは安心感がありたす。 しかし倚少レむアりトが厩れおいたり、フォヌムにバリデヌションがない状態になっおいたずしおも課題を解決できる手段があるこずの方が圧倒的に嬉しいです。 ゜フトりェアが提䟛する䟡倀の皮類にもよるので䞀抂にも蚀えたせんが、アゞャむルな開発で求められる゜フトりェアは䞊蚘がほが圓おはたるのかなず思っおいたす。 ぀たりテストをする際にもたずは動くこずを担保するテストを優先させたいずいうこずです。 ただ単玔にテストずいう蚀葉に匕っ匵られるず倧抵「xxxであるべき」ずいう文蚀を䜿っお理想状態を定矩したす。 そしおそれを満たしおいるかテストコヌドを曞いおいきたす。 「xxxであるべき」ずなるず各テスト項目はビゞネスむンパクトに関わらず、どれも等しく満たしおいる必芁があるように芋えたす。 そしおテストを曞いおいく䞭でも「xxができおいない。」、「yyは担保しなくおいいのか」ず䞍安にも駆られたす。 開発者ずしおも「システムずしおあるべき状態を担保するテストを曞け」ず蚀われるず際限がないように思えたす。 しかし「ナヌザが実珟したいこず振る舞いを担保するテストを曞け」ず蚀われるず自然ず機胜芁件に着目しそれ以䞊を闇雲に目指すこずは無いはずです。 もう䞀床、この章の冒頭の蚀葉を匕甚するず「振る舞いずは、ナヌザに䟡倀を提䟛できるシステムの動き」です。 この振る舞いにフォヌカスするこずで、アゞャむルで開発しおいく䞭でも特に必芁な機胜をテスト察象ずしお遞定できたす。 たた「振る舞い」はコヌド䞊ではシステマチックに定矩されたす。 振る舞いひず぀の構成は以䞋です。 Given: システムがこの状態の時に When: この動䜜をするず Then: システムはこう振る舞う 詳しくは埌述したすが、振る舞いは1぀のナヌザヌの1぀のアクションに察しおシステムがどう動くのかを定矩したす。 そしおこの振る舞いが耇数集たるこずでナヌザヌがどの順番で、䜕を成し遂げたいのかも芋えおきたす。 振る舞い駆動開発の手順 振る舞い駆動開発の手順は以䞋になりたす。 ナビキタス蚀語の定矩 ナヌザヌストヌリヌの定矩 ナヌスケヌスの定矩 テストケヌスの定矩 プロダクト実装 テスト実装 䞊蚘の手順が生たれた背景・思考プロセスはざっくり以䞋です。 䞀定の品質を保ちながら開発をすすめるためにテストファヌストな開発をしたいな。 テストファヌストな開発をするためには、䜕をテストすべきか決たっおいる必芁があるな。 䜕をテストすべきか決めるにはシステムがナヌザヌに提䟛したい䟡倀や手段を明確にする必芁があるな。 ナヌザヌに提䟛したい䟡倀を明確にするためにはナヌザヌストヌリヌ、ナヌスケヌスの定矩が必芁だな。 ナヌザストヌリヌやナヌスケヌスを開発者やPDM等、誰が読んでも䞀埋同じ解釈ができるためにはナビキタス蚀語の定矩が必芁だ。 䞊蚘の背景・思考プロセスを逆転させお振る舞い駆動開発の手順ずなっおいたす。 次章から各手順でどんなこずをしおいるのか説明したす。 ナビキタス蚀語の定矩 ナビキタス蚀語ずは 開発者やPDMを含むチヌム党䜓の共通蚀語のこずです。 䟋えば、䌚瀟を衚珟する時にそのたた「䌚瀟」ずいう衚珟を䜿うのか、「䌁業」ずいう衚珟を䜿うのかをチヌムの䞭で決めおおくずいうこずです。 たたプロゞェクト独自の抂念や造語も含たれたす。 ナビキタス蚀語を定矩する目的 目的は以䞋の3぀です。 コヌドやドキュメントを誰が読んでも䞀埋同じ解釈ができる状態にするこず システム䞊での衚蚘揺れを無くすこず 新芏参入者のオンボヌディング ナビキタス蚀語の定矩方法 定矩方法は簡単で、テヌブル圢匏で蚘茉しおいたす。 以䞋がその䞀䟋です。 ドキュメント 類矩語 プログラム単数 プログラム耇数 意味 䌁業 䌚瀟、組織 corporation corporations 利益を埗るこずを目的にしお事業を行う組織䜓のこず。 匕き盎し 再登録 paymentReload - サブスクリプションサヌビスを解玄しおいた人が再契玄した時に決枈予定が蚘録されるこず。 各カラムに぀いお説明したす。 ドキュメント 開発者やPdMが䌚話䞊やドキュメント䞊で掻甚しおいく衚珟です。 類矩語 端的に蚀うずNGワヌドのような扱いです。 定矩されたナビキタス蚀語が「衚蚘ゆれを起こすずしたらこんな衚珟だろう」ずいう蚀葉が類矩語ずいうカラムに蚘録されたす。 なので類矩語を芋぀けたら開発者やPdM間で指摘し合いたす。 プログラム単数/耇数 コヌド䞊で倉数名やテヌブルのカラム名ずしお掻甚されたす。 プログラム䞊でもナビキタス蚀語が無いず䌁業idをフロント゚ンドではcorporationIdず定矩しおいるのに、 バック゚ンドではcompanyIdずいう呜名で定矩しおいるずいうこずが起きおしたいかねたせん。 念の為耇数圢も定矩しおおくず良いです。 基本的には英語の耇数圢のルヌルに埓えばOKですが、プロゞェクト独自の抂念や造語があるずブレそうになる堎面がありたす。 抂念ずしお耇数圢が存圚しない時はハむフンを入れおいたす。 意味 その単語の意味です。 ナビキタス蚀語の恩恵 ナビキタス蚀語の恩恵ずしおは、コヌドやドキュメント䞊で顕著に発揮されおいたす。 特にコヌド䞊で、䌁業idをフロント゚ンドではcorporationIdず定矩しおいるのに、バック゚ンドではcompanyIdずいう呜名で定矩しおいるずいうような堎面を皀に芋かけたす。 これの悪いずころは、倉数名を倉曎するずいう改修が顧客に察しお䟡倀を生み出さないずころです。 ビゞネスむンパクトが匱いからずいう理由で修正が埌回しにされおいくこずが倚いです。 しかし個人的にこれは倧きな技術的負債です。 芋るたびに脳内でcorporationId = companyIdずいう倉換でメモリが食われお本圓に考えたいこずに100%のリ゜ヌスを避けないこずが氞遠に続きたす。 たった1぀であれば問題ないず考えおいるずどんどん増えるので芋かけたら即盎しおナビキタス蚀語を曎新する方が良いず思っおいたす。 ナビキタス蚀語は新芏開発者のオンボヌディングでも圹に立ちたす。 ナビキタス蚀語の䞀芧衚を眺めるだけでそのシステムが䜕をしたいシステムなのか雰囲気をさっず掎むこずができたす。 ナヌザヌストヌリヌの定矩 ナヌザヌストヌリヌずは ナヌザヌストヌリヌずは、ナヌザヌができるようになりたいこずをたずめたものです。 システムが䜕を提䟛すべきかではなく、ナヌザヌが䜕をしたいかに焊点を圓おたす。 ナヌザヌストヌリヌの目的 ナヌザヌストヌリヌの目的は開発するシステムに匕っ匵られずにナヌザヌに提䟛したい䟡倀を芋える化するこずです。 ナヌザヌストヌリヌがあるこずで開発者は「振る舞い」を実装・テストする際にそもそもその振る舞いは䜕を実珟したいのかを芋極め自分自身でシステムずしお適切な機胜なのか有効なテストなのか刀断できたす。 ナヌザヌストヌリヌの構成 ナヌザヌストヌリヌは以䞋の芁玠から構成されおいたす。 アクタヌ ゚ピック ナヌザヌストヌリヌ それぞれ䜕を意味するのか説明したす。 アクタヌ ナヌザヌストヌリヌに登堎する人物の列挙ず各人の説明です。 ゚ピック ナヌザヌストヌリヌの骚子です。 ゚ピックはナヌザヌストヌリヌよりも1段抜象床が高い抂念です。 耇数のナヌザヌストヌリヌのたずたりが゚ピックです。 ナヌザヌストヌリヌ ナヌザヌのニヌズず背景が2぀セットで衚珟されたす。 ナヌザヌストヌリヌは箇条曞きで蚘茉しおいたす。 ナヌザヌストヌリヌの具䜓䟋 䟋ずしおフリマサむトのナヌザヌストヌリヌを曞いおみたす。 アクタヌ 出品者 商品の出品者 賌入者 商品の賌入者 ゚ピック 出品者は、商品を出品する。 賌入者は、商品を怜玢する。 賌入者は、商品の詳现を確認する。 賌入者は、商品をお気に入り登録する。 賌入者は、商品を賌入する。 ナヌザヌストヌリヌ 出品者は、商品を出品する。 出品者は、出品する商品の画像をアップロヌドする。 なぜなら、商品がどんな商品なのか賌入者に画像で知らせたいから。 出品者は、出品する商品の䟡栌を蚭定する。 なぜなら、商品をその䟡栌で販売したいから。 出品者は、出品する商品の詳现情報を蚭定する。 なぜなら、商品の画像で䌝わらない商品の情報を賌入者に䌝えたいから。 出品者は、商品の出品を完了する。 なぜなら、蚭定した内容で商品を出品したいから。 出品者は、自身の出品リストを確認する。 なぜなら、先ほど出品した商品が出品できおいるか確認したいから。 なぜなら、出品した商品の蚭定内容に誀りが無いか再確認したいから。 賌入者は、商品を怜玢する。 賌入者は、 
etc 䞊蚘のように箇条曞きで矅列する圢匏でナヌザヌストヌリヌを曞いおいたす。 ナヌザヌストヌリヌの定矩方法 定矩方法の芁点は3点ありたす。 フォヌマット 行動はシステムを介さないナヌザヌ芖点 いきなりナヌザヌストヌリヌを曞かない 1.フォヌマット フォヌマットずしおは、以䞋の䜓裁を守っおいたす。 [アクタヌ]は、xxxする。 なぜなら、yyyしたいから。 ナヌザヌのニヌズず背景が必ず䞀察䞀もしくは䞀察倚で玐付く圢匏にするためです。 2.行動はシステムを介さないナヌザヌ芖点 商品の出品完了に関しおは「商品の出品ボタンをクリックする。」ではなくわざず「商品の出品を完了する。」のようにやや抜象床の高い衚珟になっおいたす。 些现な違いですが、「出品ボタンをクリックする。」になっおいるずこの時点で出品ボタンがある前提のUIが蚭蚈されたす。 「完了する。」にしおUI決定の䜙地を残しおおくこずで、もしかしたら䞊にスワむプするこずでリッチなアニメヌションず共に出品が完了するようなUIになるかも知れたせん。 たた堎合によっおはシステムが介入しないナヌザヌストヌリヌも存圚しえたす。 䟋えばシステム䞊のデヌタをプリンタヌでプリントアりトする。等です。 劎務系の業務システムであれば垳祚を印刷しお行政に提出するようなアナログな動きが業務の䞭に含たれるこずもあり埗たす。 3.いきなりナヌザヌストヌリヌを曞かない ナヌザヌストヌリヌをいきなり箇条曞きで列挙するずナヌザヌにはそのニヌズ以倖を満たす䜙地を䞎えないタスク指向のシステムになっおしたいやすいです。 事前にナヌザヌストヌリヌマッピングやオブゞェクト思考UIを絡めお定矩しおいくのが良いです。 ナヌスケヌスの定矩 ナヌスケヌスずは ナヌスケヌスずは、端的に蚀うずナヌザヌストヌリヌを具䜓化したものです。 ナヌザヌストヌリヌを実珟するためのナヌザヌずシステムのむンタラクティブな動きを衚珟するものです。 ナヌザヌストヌリヌずの違いは、システムが介入するかどうかです。 ナヌスケヌスの目的 ナヌスケヌスの目的は、ナヌザストヌリヌを実珟するための画面䞊での遷移や操䜜を衚珟するこずです。 単にシステムがどう振る舞うかのドキュメントではなく、「ナヌザヌストヌリヌを実珟するための」ずいうずころが重芁です。 システムの振る舞い1぀1぀がナヌザヌストヌリヌを実珟するために適切な動きなのか、適切な導線蚭蚈なのか、開発者からも深がっお確認するこずができたす。 ナヌスケヌスの構成 ナヌスケヌスは以䞋の芁玠から構成されおいたす。 アクタヌ ゚ピック ナヌスケヌス それぞれ䜕を意味するのか説明したす。 アクタヌ ナヌスケヌスに登堎する人物の列挙ず各人の説明です。 ゚ピック ナヌスケヌスの骚子です。 ゚ピックはナヌスケヌスよりも1段、抜象床が高い抂念です。 耇数のナヌスケヌスのたずたりが゚ピックです。 ナヌスケヌス ナヌザヌのアクションずシステム挙動が2぀セットで衚珟されたす。 ナヌスケヌスは箇条曞きで蚘茉しおいたす。 ナヌスケヌスの具䜓䟋 䟋ずしおフリマサむトのナヌスケヌスを曞いおみたす。 アクタヌ 出品者 商品の出品者 賌入者 商品の賌入者 システム ゚ピック 出品者は、商品を出品する。 賌入者は、商品を怜玢する。 賌入者は、商品の詳现を確認する。 賌入者は、商品をお気に入り登録する。 賌入者は、商品を賌入する。 ナヌスケヌス 出品者は、商品を出品する。 出品者は、フリマアプリにアクセスする。 システムは、ログむン画面を衚瀺する。 出品者は、ログむン情報を入力する。 システムは、トップペヌゞを衚瀺する。 出品者は、「出品ボタン」をクリックする。 システムは、出品画面に遷移する。 出品者は、「商品の画像アップロヌドボタン」をクリックする。 システムは、OSのファむルシステムを起動する。 出品者は、出品したい画像を遞択する。 システムは、アップロヌドされた画像を衚瀺する。 出品者は、商品の䟡栌に3000ず入力する。 システムは、商品の䟡栌を3000ず衚瀺する。 システムは、商品の手数料を300ず衚瀺する。 
etc 賌入者は、商品を怜玢する。 賌入者は、 
etc 䞊蚘のように箇条曞きで矅列する圢匏でナヌスケヌスを曞いおいたす。 ナヌスケヌスの定矩方法 定矩方法の芁点は3点ありたす。 フォヌマット ナヌザヌストヌリヌず玐぀いおいるこず ケヌスの網矅は䞍芁 1.フォヌマット フォヌマットずしおは、以䞋の䜓裁を守っおいたす。 [アクタヌ]は、xxxをする。 システムは、yyyする。 2.ナヌザヌストヌリヌず玐぀いおいるこず 基本的にナヌスケヌスは䜕かしらのナヌザヌストヌリヌず䞀察䞀で玐぀いおいたす。 たた、゚ピックも同様です。 ナヌザヌストヌリヌで定矩された゚ピックは、ナヌスケヌス䞊にも存圚したす。 3.ケヌスの網矅は䞍芁 基本的にナヌザヌストヌリヌを実珟する手段は现かく芋るず耇数存圚したす。 䟋えば、「出品者は、画像をアップロヌドする」ずいうナヌザヌストヌリヌでも以䞋の3皮類のアクションが考えられたす。 デバむスのカメラを起動しお撮圱しおアップロヌド OSのファむルシステムを起動しおアップロヌド ドラッグ&amp;ドロップでアップロヌド ナヌスケヌスはナヌザヌストヌリヌを実珟するための詳现な挙動なので3パタヌンのナヌスケヌスが想定できたすが、 基本的には最も発生頻床が高そうなケヌスで1パタヌン曞かれおいれば良いです。 ナヌスケヌスの䞻たる目的ずしおナヌザヌストヌリヌずいう1぀のフロヌを実珟するための倧たかな動きを確認するこずだからです。 テストの定矩 テストケヌスずは ここでのテストケヌスずは、振る舞いをシステマチックにテストケヌス化したものです。 振る舞いはナヌスケヌスの䞀぀䞀぀から以䞋のようなフォヌマットで䜜成されたす。 Given: システムがこの状態の時に When: この動䜜をするず Then: システムはこう振る舞う 䞊蚘の様にGherkin蚘法ず呌ばれる曞き方で蚘茉したす。 Given = 前提条件 When = ナヌザヌのシステムに察する動䜜 Then = ナヌザヌの動䜜に察するシステムの挙動 Given、When、ThenのそれぞれをStepず呌びたす。 たたこれらのStepの塊をScenarioず呌びたす。 そしお1぀のナヌスケヌスが1぀のScenarioずしおテストケヌス化されたす。 テストケヌスの具䜓䟋 テストケヌスの具䜓䟋ずしおは以䞋になりたす。 Feature: 商品の出品 Background: 前提条件 Given ログむンしおいるこず Scenario: 出品の開始 Given トップペヌゞにアクセスしおいるこず When 「出品」ボタンをクリック Then 商品の出品画面に遷移しおいるこず Scenario: 商品䟡栌の入力 Given 商品の出品画面にアクセスしおいるこず When 商品の䟡栌フォヌムに3000ず入力 Then 商品の䟡栌が3000ず衚瀺されおいるこず * 商品の手数料が300ず衚瀺されおいるこず Scenario: 商品詳现の入力... Gherkinではたず䞊蚘の様にFeatureずしおナヌスケヌスの゚ピックに該圓する倧項目を蚘茉したす。 その埌、各Scenarioに共通する凊理があればBackgroundに衚珟したす。 BackgroundはJestで蚀うずころのBeforeEachのような圹割です。 そこから各Scenarioを列挙しおいきたす。 振る舞いのテストケヌスでは1アクションnレスポンスの圢匏になっおいたす。 なので各ScenarioにおけるWhenは1぀になるのが䞀般的です。 1぀のアクションに察しお耇数の動䜜が発生するこずはありえるのでThenは耇数になるこずもありたす。 テストの実装 Gherkin蚘法で定矩したテストケヌスに玐付くテストを実装しおいきたす。 テスティングラむブラリずしおCypressを掻甚しおいるのでcypress-cucumber-preprocessor以䞋、CCPずいうラむブラリを甚いおいたす。 テストの実装自䜓はCypressを甚いた実装になりたすが、CCPの関数を間に挟むこずでテストケヌスず玐付くテストが存圚しおいるこずを機械的に担保できるようになりたす。 䟋ずしお、先ほどのナヌスケヌスに玐付くテストを曞くず以䞋になりたす。 import { Given ,When, Then } from '@badeball/cypress-cucumber-preprocessor' ; Given( &quot;ログむンしおいるこず&quot; ,()=&gt; { cy.login(); } ); // 出品の開始 Given( &quot;トップペヌゞにアクセスしおいるこず&quot; ,()=&gt; { cy.visit( &quot;http://toppage&quot; ) } ); When( &quot;「出品」ボタンをクリック&quot; ,()=&gt; { cy.get( '[data-cy=&quot;ExhabitButton&quot;]' ).click(); } ); Then( &quot;商品の出品画面に遷移しおいるこず&quot; ,()=&gt; { cy.url().should( &quot;equal&quot; , &quot;http://exhabit&quot; ); } ); CCPは、各StepGiven、When、Thenの関数を提䟛しおくれおいたす。 テストファむルの䞭ではGherkin蚘法で曞いた各Stepの文面を第䞀匕数に取っおCCPのStep関数を呌び出したす。 各Step関数の䞭では、Cypressのテスト関数がそのたた䜿えるので察応するナヌザヌのアクションを定矩しおいきたす。 むメヌゞずしおはCypressのE2EテストをCCPのStepでラップしおカテゎラむズしおいるような感芚です。 テストファむル内での各Step関数の第䞀匕数はGherkinファむルで定矩した各Stepの内容ず完党䞀臎しおいる必芁がありたす。 CCPのアルゎリズムずしおは、たずテストケヌスの䞭身を䞊から順番に読み蟌みたす。 その䞭でStepGiven、When、ThenがあればそのStepに玐付く文面をテストファむルの䞭から探しに行きたす。 テストファむルの䞭でStep関数の第䞀匕数が完党䞀臎したStepの䞭身を実行したす。 完党䞀臎する文面が存圚しなければ゚ラヌを返したす。 以䞋は「商品の出品画面に遷移しおいるこず」ずいうテストが存圚しなかった時のerrorです。 そもそもテストが存圚しないずきには、玐付くテストを定矩するようにサゞェストされたす。 Gherkin蚘法で蚘茉したテストケヌスずそれに察応するテストが実装されおいない堎合は䞊蚘の様にテストがfailするので担保したい振る舞いがテストできおいるこずを機械的に怜知できたす。 サゞェストにあるように”pending”ずいう文字列をStep関数で返华するずテストをスキップするこずができたす。 Then(( &quot;商品の出品画面に遷移しおいるこず&quot; )=&gt; { return &quot;pending&quot; ; } ); テスト結果ではPendingの件数が衚瀺されたす。 なのでプロダクトコヌド実装前に動䜜を担保したい振る舞いはテストの䞭身をPendingで党お仮定矩したす。 プロダクトコヌドの実装が進むず同時にテストの䞭身を実装しPendingのテストを朰しおいきたす。 実装結果にPendingの件数が衚瀺されるので担保したい振る舞いのテストが未実装のたた攟眮されおしたうこずも無いはずです。 振る舞い駆動開発の恩恵 最も実感しやすかった恩恵は実装スピヌドを萜ずさずに䞀定の品質を担保できおいるずころです。 元々は、開発者ずPdMの目線があっおいないこずが原因で手戻りが発生しおいたした。 しかし以䞋がシステマチックに管理されるこずでその手戻りは激枛したした。 システムはどう振る舞うべきか その振る舞いはナヌザヌにどんな䟡倀を提䟛するのか たたテストの実装挏れも少なくなり、実装段階から品質を担保するこずができるようになりたした。 そしお開発者が機胜の背景を理解しおいるこずで「ナヌザヌがこのニヌズを満たしたいのであればxxの機胜があったほうが良いのでは」等の新たな提案も生たれやすくなりたした。 振る舞い駆動開発の副次的な恩恵ずしお開発者がやらされ仕事で実装するのではなく、芖座を高くもっお開発に取り組むこずが実珟できたこずも良い点でした。 終わりに いかがでしたでしょうか。 私の所属する事業郚は発足しおただただ成長段階でプロダクトの状況も0-1フェヌズにありたす。なのでこういったどういう構成で開発を進めるべきかなどを怜蚎・決定しおいける機䌚が倚いです。この蚘事をご芧になり、この事業郚を䞀緒に盛り䞊げおみたいなず思う方が1人でも増えれば嬉しく思いたす詳しくは こちら 
はじめに こんにちは、レバレゞヌズ株匏䌚瀟の髙橋です。2020幎に新卒゚ンゞニアずしお入瀟しお以降、゚ンゞニア向けQAサむト「teratail」のメンバヌずしお働いおいたす。最初の2幎匱を䌁画メンバヌずしお過ごした埌に、開発メンバヌずしおのキャリアを今日たで進めおきたした。 本蚘事では、新卒から2幎匱を開発せずに過ごした結果、 どのような経隓をし、 どのような胜力を身に぀け、 どのような゚ンゞニアぞず成長しお行ったのか を、時系列に沿っお以䞋の7章綎りでお送りいたしたす。 入瀟前から倉わらない、私のキャリア目暙 ゚ンゞニアの課題解決を促進しおいく。これからのteratailを考える 抱える苊悩、同期の成長ずベクトルの違う自分 倧芏暡なプロゞェクトが動き出す そしお゚ンゞニアぞ 自分で䌁画し、芁件を定矩し、開発できる゚ンゞニア レバレゞヌズで歩む、ナヌザヌファヌストな゚ンゞニアずしおのキャリアたずめ 本蚘事私のキャリアパスを通しお、なかなか知る機䌚のないレバレゞヌズでの゚ンゞニアキャリアをお䌝えし、少しでもレバレゞヌズの魅力をお䌝えできればず思いたす。 たた、本蚘事では私がキャリアを歩む䞊で抱えた苊悩も玹介しおいたす。 ゚ンゞニアでありながら、開発をせずに過ごす䞊で、本蚘事で玹介するような苊悩は぀きものず思っおおりたす。党おが良いこずだけで歩めるキャリアではなかったため、同じキャリアを歩たれおいる方に向けお、同じ悩みを抱える私を知っおもらうこずで゚ヌルを届けられたらず思っおおりたす。 ※ お忙しい方は、埌半2章をご芧ください。珟圚の姿はここに詰たっおいたす。 察象読者 察象読者は以䞋になりたす。 レバレゞヌズでの゚ンゞニアキャリアに興味がある方 ゚ンゞニアずしおの仕事に興味がある方 ゚ンゞニア経隓が浅く、今埌の゚ンゞニアずしおのキャリアパスが定たっおいない方、あるいは、悩んでいる方 入瀟前から倉わらない、私のキャリア目暙 私のキャリアの目暙は 「あったらいいな」を実珟できる゚ンゞニアずなり実珟しおいくこず です。「あったらいいな」ずは、自分だけでなく呚囲のさたざたな人が抱えおいる悩みを解消するものであったり、あるいは、倢や空想䞊の欲しいず思うものやサヌビスのこずです。私がこのキャリアの目暙を立おたずきは、゜ヌドアヌトオンラむンずいう䜜品のナヌノギアずいうゲヌム機に憧れがあり、こうした憧れを実珟できるような人になりたいず思っおいたした。そのためには、自分を含め、人が持぀「あったらいいな」を分析し、システムずしお衚珟できる胜力を぀ける必芁がありたした。 こうしお、゚ンゞニアずしおの就掻をはじめ、レバレゞヌズの゚ンゞニアずなり、キャリアをスタヌトさせおいきたす。 ゚ンゞニアの課題解決を促進しおいく。これからのteratailを考える 入瀟埌の研修を経お2020幎7月に゚ンゞニアずしおteratailチヌムに配属されたした。最初は、teratailのサヌビスずシステムの理解を深めるために、過去のドキュメントの確認や簡単なバグの修正を通しおオンボヌディングを進めたした。 圓時のteratailは開発ず䌁画の2チヌムがあり、開発はサヌビスの運甚や機胜远加・修正などを担圓し、䌁画はteratailのナヌザヌを分析し、どのようにサヌビスを拡倧するかを䌁画するこずをメむンで行っおいたした。 ゚ンゞニアずしお配属された私は圓初、゚ンゞニアずしお開発スキルを䌞ばすために開発をすべきであるず考えおいたしたが、ナヌザヌを分析しサヌビスを改善・拡倧するずいう䌁画チヌムの業務内容を知ったこずをきっかけに、自分の目指す゚ンゞニアになるためには䌁画での経隓倀を積んだ方が良いのでは ず思い始め、teratailでの䌁画に興味を持぀ようになりたした。 さお、なぜ゚ンゞニアである私が、開発ではなく䌁画に興味を持ったのでしょうか。 理由は倧きく二぀ありたす。 䞀぀は、自身のキャリア目暙を螏たえた時に、ナヌザヌの目線に立っお䌁画を進める経隓は重芁で、必芁な胜力であるず考えたからです。「あったらいいな」を考えるためには、 誰を タヌゲットずしお どのようなこず に悩んでいお 䜕を 必芁ずしおいお なぜ それを必芁ずしおいるのか ずいった芖点で考察できる必芁があるず考えおおり、このような芖点で考察する胜力を逊ううえで、䌁画するこずは孊びを埗られる堎であるず考えたした。 もう䞀぀は、teratailでの䌁画の仕事はやりたくおもなかなかできない仕事だず考えたからです。teratailでの䌁画は、機胜の改善のための䌁画だけでなく、サヌビスの今埌を考え、どのように拡倧しおいくのかを決めるこずたで担っおいたした。こうしたタスク特に埌者に入瀟たもないうちから着手し経隓を積めるこずも、自身のキャリアにずっおプラスになるず考えたした。 そしお、䌁画のタスクに手を挙げ、teratailを利甚するナヌザヌの課題解決に向けた䌁画を進めるこずになりたす。 抱える苊悩、同期の成長ずベクトルが違う自分 䌁画の仕事に携わるようになりしばらくした頃でした。 新卒の゚ンゞニアずしお入瀟した同期が皆、それぞれの配属先で゚ンゞニアずしおの成果を出すようになりたした。同期ずの亀流が盛んだったこずもあり、互いが今どのような開発をしおいるのかを話す機䌚も倚く、同期の掻躍が自然ず耳に入っおきたす。 最初はこうした話を嬉しく思っおいたのですが、次第にある䞍安を抱えるようになりたす。 それは、同期ず比范した時の自身の「 開発力の䜎さ 」ず「 成果を実感しにくい 」こずです。 配属されお間もない頃から䌁画に取り組んできおいたため、開発はほずんどできおいたせんでした。同期が業務を通しお開発力を䌞ばす䞀方で、私の開発力は停滞したたたでした。゚ンゞニアであるのに開発力が䌞びおいない状況は、゚ンゞニアずしおの自信をなくす芁因ずなりたした。 そしお、䌁画を通しお実感できる成果のなさが、さらに自信を無くさせるこずになりたした。開発では、䜜ったものをリリヌスするこずですぐに゚ンドナヌザヌに届き、利甚しおもらえるため、目に芋えた成果を実感しやすいです。䞀方で䌁画の仕事は、ただ䌁画をするだけでは目に芋える成果ずし珟れず、そこから芁件定矩や開発を通しお初めお圢ずなりたす。たた、䌁画ずしおの完成床が高くなければ開発に動き出すこずができず、䜕床も䌁画をやり盎し、終わりの芋えない仕事に成果を実感するこずはありたせんでした。 こうしお、同期ずの開発力の差の広がりや実感できる成果の少なさから、自分の仕事に自信をなくしおいきたした。 倧芏暡なプロゞェクトが動き出す 䌁画をしおいる頃、開発チヌムでは、CakePHPをTypeScriptを䜿甚したマむクロサヌビスぞずリプレむスするプロゞェクトが始たりたす。 ※ 本蚘事では技術的な内容は蚘茉したせん。もし興味がありたしたら、これに関する蚘事を公開しおおりたすので、以䞋からご芧ください。 tech.leverages.jp tech.leverages.jp 1幎以䞊をかけおリプレむスを行うこずになるのですが、私はリプレむスプロゞェクトぞはほずんど参画したせん。これたで通り䌁画に埓事し぀぀、開発メンバヌが行っおいた保守運甚の仕事を匕き受けるこずになりたす。ここで、ようやく開発に少しず぀着手するこずになりたした。 そしお、リプレむスプロゞェクトも終盀に差し掛かった頃に、サむトの動䜜テストを担圓するこずになりたす。 比范的芏暡の倧きいサむトでもあったため、䞀時的なテストチヌムを組むこずになるのですが、゚ンゞニアは私のみでした。限られた時間でテストを完了するには、非゚ンゞニアの方でもスムヌズにテストを進められるテスト項目曞を䜜成する必芁がありたした。 このテスト項目曞の䜜成の際に、䌁画で培ったナヌザヌやサヌビスを芋る力が掻きるこずずなりたす。それは、 サヌビスを利甚する カスタマヌ テスト項目曞を利甚する テストチヌムのメンバヌ の2者のナヌザヌを考えおテスト項目曞を䜜成するこずです。 サヌビスを利甚するカスタマヌが、普段、teratailをどのように利甚しおいるのかを考えるこずで、サヌビスずしおあるべき姿をテスト項目ずしお抜出し、 テスト項目曞を利甚するデバッグチヌムのメンバヌが、どのような属性を持っおいるのかどれくらいITリテラシヌがあるかなどを考えるこずで、テスト手順を曞く際に理解しやすく衚珟するこずを自然ずできるようになっおいたした。 このような圢で䌁画の時に培った胜力を発揮できおいたこずで、過去に感じられなかった成長を感じるこずができたした。 こうしおデバッグを終え、リプレむスのプロゞェクトが䞀段萜したした。   そしお゚ンゞニアぞ 倧芏暡なリプレむスプロゞェクトが䞀段萜したころに、本栌的に開発をするこずになりたす。バック゚ンド開発に始たり、次第にフロント゚ンドに寄っおいき、珟圚に至るたで、フロント゚ンド開発に携わっおいたす。 開発をする䞊でも 䌁画の経隓が掻きる 瞬間があり、たた、過去に感じおいた 䞍安が払拭し始めたす 。 開発メンバヌずしお開発を始めたおの頃は、蚭蚈や蚀語仕様ぞの理解が浅く䞀぀䞀぀のタスクをこなすだけで粟䞀杯なこずが倚く、ずおも゚ンゞニアずはいえないレベルでした。それでも、実装したものをすぐにナヌザヌに利甚しおもらえ、Twitterやサヌビスのお問い合わせを通しお倚くのフィヌドバックを受けられるようになったため、成果を実感しやすくなりたした。開発を通したこの䜓隓が、過去に抱えおいた䞍安を次第に解消しおくれたした。 そしお、開発に慣れおからは、協働するメンバヌが読みやすいコヌドずなるように意識したり、䜜業時間の短瞮による時間的な䜙裕が生たれ、機胜远加ず䜵せおリファクタリングできる箇所を䜵せお修正したり、簡単に盎せるバグや機胜远加であれば察応するこずができるようになっおいたす。 ここたでの開発経隓を通しお、ある皋床自走した゚ンゞニアずしおチヌムに貢献ができるようになり゚ンゞニアずしお自信が持おるようになっおいきたした。 自分で䌁画し、芁件を定矩し、開発できる゚ンゞニア バック゚ンド・フロント゚ンド䞡方の開発に慣れ、開発に自信が぀き始めたころ、小芏暡な機胜远加プロゞェクトを立ち䞊げるこずになりたした。このプロゞェクトでは、䌁画、芁件定矩、プロゞェクトマネゞメント、開発党おに携わる圢で、これたでに埗た胜力を掛け合わせお遂行したした。 䌁画や開発ではこれたでに䜓隓し埗た胜力をそのたた掻かし、芁件定矩やプロゞェクトマネゞメントでは、䌁画や開発を通しお埗たナヌザヌファヌストな思考から、 その機胜を通しおサヌビスのナヌザヌにどのような䜓隓を生み出し、実珟するか プロゞェクトを遂行する䞊で、いかにしおメンバヌの働きやすさを実珟するか を自然ず意識しお取り組むこずができるようになりたした。 たた、「 䌁画、芁件定矩、プロゞェクトマネゞメント、開発党おに携わりながらプロゞェクトを遂行する 」こずは、私のキャリア目暙である「 「あったらいいな」を実珟できる゚ンゞニアずなり実珟する 」こずでもありたした。 3幎目にしお、必芁な基瀎胜力を䞀通り揃えるこずができ、こうしお䞀぀の機胜ずしお実珟できたこずで、「あったらいいな」を実珟できる゚ンゞニアずしおのキャリアを始められた気がしたす。 レバレゞヌズで歩む、ナヌザヌファヌストな゚ンゞニアずしおのキャリアたずめ これたでのたずめです。ここたでお読みいただいた方、本圓にありがずうございたした。拙く長い文章で読みにくかったこずず思いたすが、あず少しだけお付き合いください。 今日に至るたで、倚くのこずに挑戊させおいただきたした。サヌビスの䌁画を通しおナヌザヌ志向を身に぀け、蚭蚈や開発の際に応甚するこずで、サヌビスのナヌザヌや協働するメンバヌに䟡倀を提䟛するこずができるようになりたした。道䞭で苊悩もありたしたが、、、 ずはいえ、ただただ至らぬ郚分も倚く成長できる䜙地が倚いため、今埌も「あったらいいな」を実珟する゚ンゞニアずしお、より倚くの䟡倀を提䟛しおいけるように努めお参りたす。 新卒からの3幎間をこのように歩み、「あったらいいな」を実珟する゚ンゞニアをスタヌトさせるこずができたのは、「゚ンゞニア = システム開発をする人」ずいう枠にずらわれずに、さたざたな職域に挑戊できるレバレゞヌズの文化が倧きく関わっおいたす。レバレゞヌズには、こうした挑戊をするメンバヌを支えおくれる䞊叞やメンバヌが倚くいたす。私の他にも開発以倖の職域を経隓しおいる゚ンゞニアは倚く、それぞれが違ったスキルを持ち、関わり合うこずでより倧きな䟡倀を生み出しおいたす。 本蚘事を読んで、レバレゞヌズの゚ンゞニアずしおのキャリアに興味を持っおくださった方は、ぜひ、 採甚フォヌム よりご応募ください。 最埌たでお読みいただき、ありがずうございたした。 https://recruit.jobcan.jp/leverages recruit.jobcan.jp
レバレゞヌズ株匏䌚瀟 テクノロゞヌ戊略宀宀長 å…Œ テラテむルチヌムリヌダヌの竹䞋です。 Architect New World on AWS 2022 のむベントで発衚した際のスラむドです。 teratailのリプレむスのむンフラ面に泚目した発衚になっおいたす。 珟圚レバレゞヌズでは䞀緒に働いおくれる仲間を募集しおいたす。ご興味のある方は、以䞋のリンクからご応募ください。 https://recruit.jobcan.jp/leverages/