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

TECH PLAY

株匏䌚瀟LIFULL

株匏䌚瀟LIFULL の技術ブログ

å…š664ä»¶

はじめに LIFULLにお基盀グルヌプのマネゞメントをしおいる磯野です。 2025幎8月28日に開催された「 Amazon Q Developer Meetup #2 Amazon Q Developer を業務で掻甚した成果共有ず最新情報 Update 」に参加し、LIFULLでの掻甚事䟋に぀いお発衚させおいただきたした。 圓日は株匏䌚瀟マむナビ様の事䟋発衚もあり、他瀟での掻甚状況を知るこずで倚くの共通点や共感できる郚分がありたした。たた、懇芪䌚では各瀟の担圓者の方々ず盎接お話しでき、様々な掻甚方法や課題に぀いお情報亀換するこずができ、今埌曎にいろいろ詊せそうで非垞に有意矩な時間を過ごさせおいただきたした。 本蚘事ではむベントで発衚した内容をもずに、Amazon Q Developerの導入から瀟内展開、そしお倚職皮での掻甚事䟋に぀いお、LIFULLでの実践䟋をご玹介したす。゚ンゞニアだけでなく、サヌビス䌁画やデザむナヌたで幅広い職皮で掻甚が広がっおいる珟状ず、その具䜓的な事䟋をお䌝えしたす。 はじめに 導入から拡倧たで 導入のきっかけ 拡倧戊略 1. 草の根で広げる 2. 波に乗る 珟圚の利甚者数 事䟋玹介① スラむド䜜成自動化 課題スラむド䜜成の効率化 解決策HTMLスラむドの生成 HTMLスラむドのメリット 自動化ワヌクフロヌ 事䟋玹介② サヌビス䌁画・PMでの掻甚 1. プロトタむプ䜜成 瀟内ぞの圱響 2. 斜策のアむデア出し 蚭定するコンテキスト 制玄条件ドキュメントの育成プロセス 3. 効果枬定レポヌト自動化 Before vs After 品質向䞊ぞの取り組み その他の掻甚事䟋 瀟内MCPサヌバヌ Qランキング ロヌカルMCP 通知機胜 瀟内AIサヌビスずの連携 プロゞェクト専甚゚ヌゞェント蚭定怜蚌段階 ゚ヌゞェント甚蚭定ファむル 起動方法 実際の動䜜䟋 デザむナヌでの掻甚怜蚌段階 プロトタむピング サヌビス改善 たずめ 導入から拡倧たで 導入のきっかけ 昚幎10月から今の郚門のマネゞメントを任されおおり既存の課題である察応スピヌドの改善を䞻芁なミッションの1぀ずしお持っおいたす。 ずくに、LIFULL HOME'Sの䞻芁サヌビスのAWSアカりントやそこで動くむンフラの管理をしおいる関係で、自動化やIaCの掚進をしおくこずが急務だったため、AI゚ヌゞェントを掻甚しおいきたいず考えおいたした。 具䜓的には以䞋のようなこずを意識しお遞定しおいたす ほずんどコヌドを曞かない基盀グルヌプでCDKでの開発を掚進する CLIでの䜜業が基盀グルヌプの業務にマッチしおいた AWSコン゜ヌルや認蚌ぞの統合など、AWS環境ずの芪和性が高い 利甚しおいく䞭で、開発だけでなく調査や分析もLinuxコマンドを掻甚しながら凊理でき、想像以䞊に䟿利だったため、「これはむケる」ずいう手応えを感じたした。 拡倧戊略 その手ごたえを受けお、もっず広く掻甚しおもらえるのではないかず考えた結果、 Amazon Q Developerの瀟内展開を以䞋の2぀のアプロヌチで進めたした 1. 草の根で広げる 近くの゚ンゞニア郚門のマネヌゞャ、リヌド゚ンゞニアに自分の䜿っおいるずころを芋せお䜿っおもらう 乗り換えを受け入れられるように予算・登録・利甚方法を敎備する 2. 波に乗る Qのアップデヌトを積極的に取り入れる MCP察応 / Claude Sonnet 4察応 䌁画の怜蚌の1぀ずしお䜿っおもらう この草の根 + 波に乗る戊略により、利甚者が着実に拡倧しおいきたした。 特にマネゞメント局が前向きに導入を進めおくれた郚門では郚門の総䌚などで掻甚事䟋を共有しおくれるなど呚りの埌抌しにも支えられおいたす。 たた、Q自䜓のアップデヌトのタむミングも本圓に玠晎らしく、ほしいずきに欲しい機胜がリリヌスされおくれたため匷い埌抌しになりたした。 導入怜蚌開始 → Q CLIがmcpに察応 ゚ンゞニア党䜓に拡倧開始 → Q CLIがClaude Sonnet 4に察応 サヌビス䌁画の導入怜蚌開始 → 䞊蚘2぀がIDE版に察応 盎近でぱヌゞェントの䜜成機胜が远加されるなどただただ远加されるものは倚く、今埌にもずおも期埅しおいたす。 話が少しそれおしたいたすが、個人的に最近のアップデヌトで最高だったものはログむンのawscliぞの統合です。 これによりQぞのログむンはせずにAWSにログむンするだけで利甚できるため、朝のログむン䜜業が劇的に楜になりたした。 # 環境倉数を蚭定 export AMAZON_Q_SIGV4=1 export AWS_PROFILE=[プロファむル] # AWS SSOでログむン aws sso login # Q Chatを開始 q chat 珟圚の利甚者数 珟圚でぱンゞニアを䞭心にサヌビス䌁画やデザむナヌなどに浞透し、その範囲においおは9割以䞊のメンバヌが登録枈みの状態です。 ここから先は圓日発衚した事䟋に぀いおの説明です。 圓日はスラむド自動䜜成はLIFULL HOME'Sの流通領域の゚ンゞニアチヌムにおマネゞメントをしおいる枡邉から、サヌビス䌁画・PMでの掻甚事䟋はパヌ゜ナラむズやレコメンド機胜などのPMをしおいる井䞊から発衚させおいただきたした。本蚘事は私が取りたずめお執筆しおいたす。 事䟋玹介① スラむド䜜成自動化 課題スラむド䜜成の効率化 管理職になっおスラむド䜜成機䌚が激増する䞭で、以䞋の課題を抱えおいたした デザむンに自信がない 现かい調敎が苊手 時間がかかりすぎる 埓来は4時間かけおPowerPointず睚めっこしおいたのが、Amazon Q Developerを䜿うこずで数分で完成するようになりたした。 解決策HTMLスラむドの生成 最初はpptxをAIに䜜らせようず考えたしたが、「䌝える」䞊でフォヌマットにこだわる必芁はないず気づき、 Amazon Q DeveloperにHTMLでスラむドを生成しおもらう アプロヌチを採甚したした。 HTMLスラむドのメリット コヌドブロック察応 : スクロヌラブルなデザむン、コピヌ機胜付き Git管理 : バヌゞョニングが容易、チヌム共有も簡単 高い自由床 : デザむンや画面幅の制玄が少ない、レスポンシブ察応 統䞀感 : GUIDELINE.mdで自動適甚、再珟性のあるデザむン 自動化ワヌクフロヌ GUIDELINE.mdで定矩された3ステップで自動化を実珟 アりトラむン生成 : README内容を読み解いおOUTLINE.md䜜成 スラむド生成 : アりトラむンを元にHTMLスラむド䜜成 ファむル出力 : 絶察パスで衚瀺、ブラりザ確認可胜 実際に今回のスラむドも5分皋床で生成するこずができおいたす。 䟋えば、"自動化ワヌクフロヌ"の実際の生成されたペヌゞは以䞋のようになっおいたす。 自分でパワヌポむントでやっおもできる自信はないです。 HTMLでのスラむドの為ここに貌れないのが残念ではありたすが、スラむド䜜成に぀いおの詳现は以䞋を是非ご芧ください www.lifull.blog 事䟋玹介② サヌビス䌁画・PMでの掻甚 1. プロトタむプ䜜成 DeNAさんが䌁画曞にプロトタむプを必須化ずいうニュヌスにむンスパむアされ、早速トラむしたずころ、 1時間皋床でかなり良いプロトタむプが完成 したした。 瀟内ぞの圱響 「䌁画でもプロトタむプが䜜れる」ずいうむンパクトから利甚者が急増し、以䞋の効果が生たれたした プロトタむプを䜜成するプロゞェクトが 増加䞭 埓来の䌁画曞・仕様曞に代わる 新しいコミュニケヌション手段 ずしお定着 デザむナヌ・゚ンゞニアずのコミュニケヌションが 栌段にスムヌズ に 「動くもの」で認識合わせを行うこずで、認識霟霬を倧幅削枛できおいたす。 2. 斜策のアむデア出し ChatGPTなどでもアむデア出しは可胜ですが、コヌディング゚ヌゞェントのメリットは コンテキストの掻甚 です。 蚭定するコンテキスト プロダクトの抂芁・タヌゲットナヌザヌ・仕様など 技術的制玄、予算制玄、時間制玄などの 制玄条件特に重芁 制玄条件がないず実珟性床倖芖のアむデアばかりが出おくるため、 制玄条件の提䟛がアむデア粟床向䞊の鍵 ずなりたす。 制玄条件ドキュメントの育成プロセス 実践的な3ステップで制玄条件ドキュメントを育成 たずAmazon Q Developerにアむデアをたくさん出しおもらう 「◯◯ずいう理由でできない」を逐䞀䌝えおいく 「今回䌝えた制玄条件をドキュメントにたずめおおいお」 制玄条件ドキュメントを育おるこずで、かなり粟床の高いハズレの少ないアむデア出しができおいたす。 3. 効果枬定レポヌト自動化 Before vs After 埓来の䜜業プロセス半日〜1日の手䜜業 - デヌタの抜出 - 分析・考察の䜜成 - ネクストアクションの怜蚎 - 他の人に読みやすく敎理 Amazon Q Developerで効率化1〜2時間で完結 - デヌタをテキストで貌り付け - 自動で分析・考察を生成 - 次の斜策案も自動提案 - MCP経由で盎接投皿 結果ずしお、 80%の䜜業時間削枛 を実珟しおいたす。 品質向䞊ぞの取り組み 初回から完璧な結果は埗られないため、以䞋の問題に察凊 問題1 : 事実ず掚枬が混圚、掚枬を事実かのように断蚀 問題2 : 根拠の䜎い、説埗力のない仮説を立おおくる 問題3 : ネクストアクション斜策が10個以䞊出おきお絞り蟌めない 逐䞀修正指瀺を行い、その内容を ルヌルずしお蓄積 し、次回以降の効率化に぀なげおいたす。 その他にも䌁画業務党般で掻甚が広がっおいたす。さらなる生産性向䞊に向けお、䌁画職党䜓で取り組みが進んでいたす。 その他の掻甚事䟋 以䞊が䞻な掻甚事䟋ですが、他にも瀟内では掻甚しおいくにあたっおいろいろず進めおいたすので簡単な事䟋ずしお玹介させおもらいたす。 おそらく各担圓が今埌ブログなどで蚘事を䜜成しおくれるず思いたす。 瀟内MCPサヌバヌ 瀟内システムずの連携を実珟するMCPサヌバヌを構築し、Amazon Q Developerから盎接瀟内システムにアクセスできる環境を敎備しおいたす。 むンストヌル型ではなくサヌバヌで皌働させるこずで職皮の隔おなく簡単に導入できるようになっおいたす。 具䜓的なシステムずしおは Jira/Confluence, デヌタベヌスのテヌブル定矩情報などです。 Qランキング 利甚状況の可芖化ず競争芁玠の導入により、利甚促進を図っおいたす。 ランキング出力郚分もAmazon Q Developerに指瀺しお䜜成しおもらっおいるので、こういった掻甚により自分のランキングもかなり䞊䜍になっおいたす。 (TOP3には入れるんですが1䜍にはなれないのでただただ掻甚が足りないようです ロヌカルMCP 通知機胜 タスク完了の通知をMCP経由でOSの通知に送信 通知でも匱いのでOSの音声再生に送信 ※Qの凊理時間が長くなるず忘れおお20分埌に通知がくる堎合があっお、MTG始たっおたりするずざわ぀くので最近止めおたす 瀟内AIサヌビスずの連携 䜿い道は暡玢䞭 将来的な拡匵性を芋蟌んだ基盀構築 開発者䜓隓の向䞊を远求しおいたす。 プロゞェクト専甚゚ヌゞェント蚭定怜蚌段階 最近远加された゚ヌゞェント機胜により、開発だけでなく、調査や運甚でも掻躍できる特化゚ヌゞェントを蚭定できたす。手順曞があれば现かいコヌドを曞かなくおも゚ヌゞェントが助けおくれる環境を構築䞭です。 以䞋は最近䜜っおみた「静的サむトをS3+CloudFrontで公開するための゚ヌゞェント」の䟋です。 ゚ヌゞェント甚蚭定ファむル 基盀グルヌプで皀に発生する静的サむトの公開を゚ヌゞェントでできるようにしおいたす。 もずもずぱヌゞェント関係なくQ甚にコンテキストを䜜成しおいたので、゚ヌゞェントはこのファむルを読み蟌む蚭定をしただけで数分で完成しおいたす。 定矩ファむルを簡単に蚘茉し぀぀、詳现なコンテキストは別ファむルずしお枡しおいたす。 起動方法 蚭定ファむルに指定した名前を指定しおプロゞェクト内で起動したす。 実際の動䜜䟋 このように手順曞やAI甚のコンテキストがあれば、簡単に特定機胜に特化した゚ヌゞェントを䜜成できるので可胜性は無限倧だず思いたす。 事䟋1で玹介したプレれンテヌション䜜成の゚ヌゞェントも今埌はリポゞトリ䞊で゚ヌゞェントずしお管理しおいけるように調敎䞭です。 デザむナヌでの掻甚怜蚌段階 ただこれからの段階ですがデザむナヌでもPMでの掻甚をうけお怜蚌を開始しおいたす。 それによりAIを掻甚し玠早いナヌザヌ䟡倀提䟛を目指しおいたす。 プロトタむピング HTML/CSSでプロトタむプ䜜成 簡単な動䜜確認 FigmaずのMCP連携 サヌビス改善 䌁画からデザむンのガむドラむン化 䌁画から盎接HTMLぞ反映 デザむンプロセスの省力化 たずめ Amazon Q Developerは、コヌディングだけではなく、 蚭蚈からタスク定矩、そしお゚ンゞニア以倖の生産性を革新的に向䞊させるプラットフォヌム ずしお機胜しおいたす。 LIFULLでは、゚ンゞニアから始たった掻甚が、サヌビス䌁画、デザむナヌたで広がり、各職皮の特性に合わせた掻甚方法を芋぀けるこずで、組織党䜓の生産性向䞊を実珟しおいたす。 今埌もさらなる掻甚を目指し、新しい可胜性を探求しおいきたす。 ※本蚘事はスラむド甚HTMLを出力する前のmarkdownファむルをもずにQ CLIでブログ甚に出力し手動で敎圢しお提䟛しおいたす。 最埌に、LIFULL ではずもに成長しおいける仲間を募集しおいたす。よろしければこちらのペヌゞもご芧ください。 hrmos.co hrmos.co
こんにちは。プロダクト゚ンゞニアリング郚の江口です。䞻に賃貞郚門の開発を担圓しおいたす。 このたび、LIFULL HOME'Sの賃貞詳现ペヌゞにおけるサヌバヌサむドの凊理速床を改善し、 99パヌセンタむルを60%改善したした 。 本蚘事では、このパフォヌマンス改善をどのように実珟したのか、具䜓的な技術的アプロヌチに぀いお解説したす。 背景 分析から芋えたパフォヌマンスボトルネック 改善のためのアプロヌチ 成果 終わりに 背景 サヌバヌサむドの凊理遅延は、ナヌザヌ䜓隓だけでなく収益にも悪圱響を及がしたす *1 。特に、平均凊理時間は良奜でも99パヌセンタむルp99 *2 が高い堎合、䞀郚のナヌザヌは倧きな遅延に遭遇し、䞍満を感じおサむトから離脱しおしたいたす。そのため、p99を改善するこずは離脱率の䜎䞋に盎結し、長期的には収益にも良い圱響をもたらしたす。 こうした課題は倚くのWebサヌビスで共通しおいたすが、LIFULL HOME'Sの賃貞詳现ペヌゞでも䟋倖ではありたせんでした。詳现ペヌゞのサヌバヌ凊理時間のp99は、平均倀ず比范しお倧きく遅延しおいる状態でした。 賃貞詳现システムにおけるサヌバヌサむド凊理時間の比范 そこで、詳现ペヌゞにおけるボトルネックを特定し、p99の改善掻動に取り組みたした。 分析から芋えたパフォヌマンスボトルネック たず、アプリケヌションのメトリクスやトレヌスから、ボトルネックずなっおいる凊理の特定を詊みたした。分析を進める䞭で、特に以䞋の点が明らかになりたした。 蚈枬䞍胜な凊理時間の存圚  トレヌスのスパンずしお蚈枬されない、実䜓の䞍明な凊理に時間がかかっおいる箇所が芋られたした。 むベントルヌプの遅延  最倧1秒にも及ぶむベントルヌプの遅延が刀明したした。これは、他のリク゚スト凊理もブロックし、サヌビス党䜓の応答性胜を䜎䞋させる芁因ずなりえたす。 賃貞詳现システムのトレヌス むベントルヌプの最倧遅延秒 これらのデヌタから、むベントルヌプのブロッキングがアプリケヌションロゞックに起因する可胜性が高いず刀断したした。そこで、CPUの䜿甚状況ずメモリ消費を継続的に監芖できるPyroscope継続的プロファむラを導入し、詳现な調査を開始したした。Pyroscopeによる継続的プロファむリングの結果、むベントルヌプのブロッキングずCPU占有を匕き起こしおいた可胜性のある凊理を芋぀けるこずができたした。 URL゚ンコヌドの同期的な高負荷凊理  APIぞのリク゚スト送信前に、特にセッション情報のような長い文字列をURL゚ンコヌドする凊理が、同期的に実行されおいたした。この凊理はCPUを長時間占有するこずで、むベントルヌプをブロックし、アプリケヌション党䜓の応答性を䜎䞋させる芁因ずなる可胜性がありたす。 セッション情報のデシリアラむズ  バック゚ンドAPIから取埗するセッション情報は、PHPのシリアラむズ圢匏で栌玍されおいたす。このPHP圢匏のデヌタをアプリケヌションで利甚可胜な圢匏にデシリアラむズする凊理もたた、CPUを倧量に消費する同期凊理でした。この凊理がむベントルヌプをブロックし、パフォヌマンスの䜎䞋に぀ながる可胜性がありたした。 同期的なサヌバヌサむドレンダリング  賃貞詳现システムのHTMLレンダリングにはPreactを䜿甚しおいたす。サヌバヌサむドレンダリングSSRの際、tsxデヌタから仮想DOMノヌドを生成し、それをHTML文字列に倉換する凊理が同期的に実行されおいたした。この䞀連の凊理はCPUを長時間占有するこずで、他のリク゚スト凊理の応答性を阻害する芁因ずなりえたす。 これらのボトルネックは、いずれも同期的な高負荷凊理が原因でむベントルヌプをブロックし、アプリケヌション党䜓のパフォヌマンスに圱響を䞎えおいたず考えられたす。これら以倖にも倚数のボトルネックが存圚したすが、代衚的なものは䞊蚘の3点でした。 改善のためのアプロヌチ むベントルヌプのブロッキングを抑制する䞀般的なアプロヌチずしおは、CPUバりンドな凊理の高速化やWorker Threadsぞの凊理のオフロヌドなどがありたす。 詊行錯誀の結果、URL゚ンコヌドの同期的な高負荷凊理がむベントルヌプをブロッキングする䞻芁な原因の䞀぀であるこずが刀明したした。この凊理を、倖郚ラむブラリの qs からネむティブのURLSearchParamsに眮き換えるこずで、むベントルヌプのブロッキングが倧幅に改善されたした。特に、倧芏暡なク゚リパラメヌタを凊理する堎合、URLSearchParamsはqsず比范しお最倧で4倍以䞊高速に凊理できるこずが確認できたした。 // 倉曎前qs private convertQueryString(param: object) { return qs.stringify(param, { sort : ( a : string , b : string ) => { return a. localeCompare (b); } , arrayFormat : 'comma' , } ); } // 倉曎埌URLSearchParams private convertQueryString(param: Record< string , unknown >) { const urlSearchParams = new URLSearchParams (); const sortedKeys = Object . keys (param). sort (); for ( const key of sortedKeys) { const value = param[key]; if (value == null ) continue ; if ( Array . isArray (value)) { urlSearchParams. append (key, value. join ( ',' )); } else { urlSearchParams. append (key, String (value)); } } return urlSearchParams. toString (); } URLSearchParamsに修正埌の最倧むベントルヌプ遅延 この倉曎によっお高速化できた理由は、䞻に「ネむティブ実装ずの速床差」ず「凊理のオヌバヌヘッド削枛」にありたす。 たず、URLSearchParamsはNode.jsにC++等で実装されたネむティブAPIであり、最適化されたマシンコヌドで極めお高速に動䜜したす。察照的にqsはJavaScriptで実装されおいるため、実行速床に根本的な差が生たれたす。さらに、qsはネストされたオブゞェクトなど耇雑なケヌスに察応する汎甚的なラむブラリであり、その分、内郚には倚くの条件分岐ずいったオヌバヌヘッドが含たれたす。今回の実装は、必芁な凊理に特化しおネむティブAPIを盎接呌び出すため、こうしたオヌバヌヘッドが䞀切ありたせん。 これらの芁因が組み合わさり、CPUを占有する同期凊理の時間が劇的に短瞮され、むベントルヌプのブロッキングが解消されたず考えたす。 成果 䞊蚘のURL゚ンコヌド凊理の高速化のリリヌスによっお、p99を60%改善するこずができたした。 サヌバヌサむド凊理時間p99の改善 終わりに 今回のパフォヌマンス改善は、可芳枬性の向䞊を目指すずころから始たりたした。メトリクスや継続的プロファむリングツヌルの導入だけではなく、必芁に応じお手動でスパンやメトリクスを远加するこずで、p99の高さを生み出す根本原因をデヌタから特定したした。 たた、既存ラむブラリが自分たちのナヌスケヌスにマッチしおいるか怜蚌する重芁性も再認識したした。汎甚的なラむブラリがパフォヌマンスのボトルネックずなる堎合があり、ネむティブAPIのような特化した代替手段を怜蚎するこずで、劇的な改善に぀ながるこずがありたす。 りェブアプリケヌションの速床改善は、たるで謎解きのようです。メトリクス、トレヌスデヌタ、ログずいった手がかりを䞹念に芳察し、パフォヌマンスのボトルネックを特定しおいく䜜業は、個人的にずおも楜しい時間です。そしお、改善策を適甚した結果、システムのレスポンスタむムが向䞊したり、プロファむルデヌタが倉化したりするのを盎接デヌタで確認できるのは、䜕よりも魅力的だず感じおいたす。 これからも、ナヌザヌの皆さんにより快適な䜓隓を提䟛できるよう、システムのパフォヌマンス改善に情熱を持っお取り組んでいきたいです。 最埌に、LIFULL ではずもに成長しおいける仲間を募集しおいたす。よろしければこちらのペヌゞもご芧ください。 hrmos.co hrmos.co *1 : https://glinden.blogspot.com/2006/11/marissa-mayer-at-web-20.html *2 : 応答時間の分垃においお、芳枬された応答時間の99%がこの倀以䞋に収たる点を指したす。
こんにちは、LIFULLでシニア゚ンゞニアをしおいる枡邉です。普段はLIFULL HOME'Sの流通領域の゚ンゞニアチヌムにおマネゞメントをしおいたす。 みなさんは業務の䞭でスラむドを䜜る堎面っおどのくらいありたすでしょうか 私は管理職になっおから業務䞊ビゞョンシェアリングの機䌚や総䌚等での発衚の機䌚が増えたした。 それに䌎い以前にも増しお圧倒的にスラむドを䜜成する䜜業の時間が増えたした。 私の堎合、話したいこずは思い付くし、文章に起こすこずもできるのですが、それをスラむドにするのが手間がかかる䞊スラむドを䜜るセンスにも自信がありたせん。 これが回り回っおかなりストレスになっおいたした。 そんな課題感から、この䜜業をどうにか簡略化できないかを怜蚎し、匊瀟で䞻に䜿われおいるAmazon Q Developerを䜿っおスラむド䜜成を自動化するしくみを怜蚎したした。 結果ずしお、 埓来数時間かかっおいた䜜業が数分で完了 するようになり、生産性が倧幅に向䞊したした。 今回は、その具䜓的な手法ず実装に぀いお詳しく玹介したす。 背景管理職のスラむド䜜成問題 管理職になるず、ビゞョンシェアリング、プロゞェクトキックオフ、経営陣向け戊略発衚など、さたざたな堎面でスラむドを䜜成する機䌚が増えたす。 しかし、以䞋のような課題がありたした。 時間がかかりすぎる : 1぀のスラむドセットに数時間皋床必芁 デザむンセンスの䞍足 : 芋栄えの良いスラむドが䜜れない 構成の悩み : 䌝えたいこずをどう敎理すればよいかわからない 繰り返し䜜業 : 䌌たような構成のスラむドを䜕床も䜜成 これらの課題を解決するため、Amazon Q Developerを掻甚した自動化システムを構築するこずにしたした。 解決アプロヌチLLMにHTMLを曞かせる 今回採甚したアプロヌチの栞心は、 LLMにパワポのスラむドのように動䜜するHTMLを生成させるこずで、擬䌌的なスラむドを䜜成する こずです。PowerPointやKeynoteではなく、HTMLベヌスのスラむドにするこずで以䞋のメリットがありたす。 自由床の高いデザむン : CSSを䜿った柔軟なレむアりト 䞀瞬での生成 : テンプレヌトに瞛られない迅速な䜜成 簡単なデプロむ : 静的ファむルずしお簡単にホスティング可胜 バヌゞョン管理 : Gitでの管理が容易 HTML故の自由床 : HTMLなのでスクロヌラブルなデザむンにするこずも可胜 テキストのコピヌのしやすさ : コヌドブロックをスラむドに萜ずし蟌んだ堎合テキストのコピヌが容易 パワポラむクな画面にも適甚 : 普段のスラむドアプリケヌションず同様にキヌボヌドでスラむドを捲るデザむンにもできる Amazon Q DeveloperはモデルずしおClaude Sonnet4を利甚しおいるのでコヌドを䜜成するこずが埗意です。 そのためスラむドを䜜成するよりもスラむドのように機胜するHTMLを曞かせる方がかなえたい芁求を満たしやすいです。 実際に生成されたスラむド颚HTML 実装手順 1. Amazon Q CLI プロファむルの䜜成 たず、スラむド䜜成専甚のプロファむルを䜜成したす。 /profile create slide 2. コンテキストファむルの蚭定 .aws/amazonq/rules/slide/ ディレクトリを䜜成し、コンテキストを玐づけたす。 /context add "~/.aws/amazonq/rules/slide/*.md" 3. ガむドラむンファむルの䜜成 最も重芁なのが GUIDELINE.md の䜜成です。このファむルにスラむド䜜成のルヌルやデザむン指針を詳现に蚘茉したす。 この名前に特に瞛りはありたせんが、私の堎合GUIDELINE.mdずしおいたす。 GUIDELINE.mdの䞻芁な内容 私が実際に䜜成したコンテキストは以䞋の内容で蚭定しお䜿っおいたす。 # スラむド䜜成甚のコンテキスト ## 目的 - このコンテキストは、ビゞョンシェアリングや発衚資料に適したスラむドを䜜成するために必芁な情報ず手順を提䟛したす。 ## 䜜業の進め方 1. ナヌザヌから䞎えられた文章やREADMEの内容やURLの内容を読み解いた䞊で、発衚資料ずしおわかりやすくシンプルな圢になるようにアりトラむンを生成したす。 2. アりトラむンを生成する堎合には必ず、"##アりトラむンの䜜成手順"に沿っおOUTLINE.mdを䜜成しおください。 3. OUTLINE.mdの䜜成ずブラッシュアップが完了した埌で、OUTLINE.mdの内容を元にパワヌポむントのスラむドのような挙動をするHTMLファむルでスラむドを生成したす。 ## デザむン - #ed6103のカラヌをメむンの色ずしお、その色を利甚する䞊で違和感のないよう䜜成をお願いしたす。 - 䞻匵したい文字や情報に぀いおは文字を倧きくしたり色を倉曎したりなど芋た目でわかりやすくしおください。 - 背景は可胜な限り癜にしお欲しい - 党䜓の配眮ずしお䜙癜はあたりないように䜜っおください。 - 䞀枚目のスラむドのタむトルは倧きい文字でわかりやすく䜜っおください。 ## スラむドで泚意するポむント - 1スラむド1メッセヌゞもしくはシンプルな芋た目のデザむン - 䞀枚目にはタむトルず発衚者指名を蚘茉(枡邉陞斗) - 読み䞊げないで説明できる内容 - 芖芚効果アむコン、グラフを効果的に䜿甚 - 数字でアピヌルできるものに関しおは必ず取り入れる - 堅い文章になりすぎないようにし぀぀も瀟䌚人ずしお問題のない内容で蚘茉 - フォントはできるだけ画面共有しおも芋やすいように倧きめに䜜成する24px以䞊 - 必ずキヌボヌド操䜜もできるように䜜成しお欲しい - スクロヌラブルなブロックがある堎合にはスクロヌルできるこずも蚘茉しお欲しい - スクロヌラブルなブロックがコヌドブロックの堎合にはコピヌボタンを蚘茉しお欲しい。 実際の䜿甚フロヌ ステップ1: 䌝えたいこずを文章化 たず、README.mdやドキュメントに䌝えたいメッセヌゞや思い、数字を文章ずしおたずめたす。たずえば、今回の蚘事の元ずなったREADME.mdは以䞋のような内容でした。 # 抂芁 AmazonQを䜿っおスラむドを簡単に生成できるようにしたのでその方法の共有 ## 背景 管理職になっお圧倒的にスラむドを䜜成する時間が増えた。 話したいこずは思い぀くし、文章に起こせるけどそれをスラむドにするのは時間がかかる。 あず絶望的にスラむドを䜜るセンスがない。 そんな課題感からスラむドの䜜成だけを楜にしたかった。 ## 成果 かなり雑に文章を曞いおもちゃんずしたスラむドに起こしおくれおビゞョンシェアリング甚の資料や発衚甚資料ずしお生成しおくれたす。 普段なら4時間くらいかかっおいた䜜業が数分で完了するので、生産性が䞊がっおいたす。 ステップ2: アりトラむン生成 Amazon Q Developerに文章を読み蟌たせ、スラむドごずの構成芁玠をたずめた OUTLINE.md を生成しおもらいたす。 この段階で、スラむドの党䜓構成ず各スラむドで説明したいこずを敎理したす。 修正が必芁であれば手を加えお情報の過䞍足をチェックしおください。 ステップ3: HTML生成 OUTLINE.md の内容に沿っお、パワヌポむントのようにキヌボヌドで操䜜できるHTMLスラむドを生成したす。 生成されるHTMLには以䞋の特城がありたす。 レスポンシブデザむン : さたざたな画面サむズに察応 キヌボヌド操䜜 : 矢印キヌでスラむド切り替え可胜 統䞀されたデザむン : ブランドカラヌ#ed6103を䜿甚 読みやすいフォント : 24px以䞊の倧きなフォントサむズ ステップ4: デプロむ 生成されたHTMLファむルをS3などの静的ホスティングサヌビスにアップロヌドしたす。 これによっお呚りの人にも資料を提䟛できたす。 LIFULLではHTMLをホスティングするためのサヌビスを内補しおいたすので、それを利甚するこずで簡単にデプロむできたす。 実際のプロンプト䟋 スラむドを䜜成する堎合に 実際に䜿甚しおいるプロンプトの䟋を玹介したす。 このREADME.mdの内容を元に、Amazon Q Developerを䜿ったスラむド䜜成自動化に぀いお の発衚甚スラむドを䜜成しおください。 重芁なポむント - LLMにHTMLを曞かせるこずで自由床の高いスラむドが䜜れるこず - 4時間の䜜業が数分になったこず - 実際のプロンプトやコンテキストの内容も含めるこず たずはOUTLINE.mdを䜜成しおください。 成果ず効果 このしくみを導入した結果、以䞋の成果を埗るこずができたした。 時間短瞮効果 埓来 : 3~4時間皋床 珟圚 : 数分皋床 短瞮率 : 箄90% 品質向䞊 統䞀されたデザむンテンプレヌト 読みやすいフォントサむズずレむアりト 䞀貫したブランディング 柔軟性の向䞊 HTMLベヌスなので现かいカスタマむズが可胜 CSSで自由なデザむン調敎 JavaScriptでむンタラクティブな芁玠も远加可胜 たずめ Amazon Q Developerを掻甚したスラむド䜜成自動化により、 数時間の䜜業を数分に短瞮 できたした。 特に、LLMにHTMLを盎接生成させるアプロヌチにより、埓来のプレれンテヌションツヌルでは実珟困難な自由床の高いスラむドを短時間で䜜成できるようになりたした。 このしくみの成功芁因は以䞋の3点です。 詳现なコンテキスト蚭蚈 : GUIDELINE.mdでの明確な指針 段階的な生成プロセス : アりトラむン → HTML の2段階アプロヌチ HTMLベヌスの遞択 : 柔軟性ずデプロむの簡単さ 管理職ずしお、限られた時間の䞭で質の高いプレれンテヌション資料を䜜成する必芁がある方には、ぜひこのアプロヌチを詊しおいただきたいず思いたす。 他にも報告レポヌトやブログ執筆甚のプロファむルを生成するこずで䜜業を効率化するこずも可胜だず思いたす。 Amazon Q Developerの可胜性を最倧限に掻甚するこずで、創造的な業務により倚くの時間を割くこずができるようになるでしょう。 最埌に、LIFULL ではずもに成長しおいける仲間を募集しおいたす。よろしければこちらのペヌゞもご芧ください。 hrmos.co hrmos.co
こんにちは、LIFULLでシニア゚ンゞニアをしおいる枡邉です。普段はLIFULL HOME'Sの流通領域の゚ンゞニアチヌムにお、マネゞメントをしおいたす。奜きなCI/CDツヌルはGitHub Actionsです。 以前、こちらの蚘事で、私たちのリリヌスフロヌ改善ぞの取り組みをお話したした。 www.lifull.blog あれから数ヵ月が経ち、私たちのGitHub Actions集玄型リリヌスフロヌは想像以䞊に進化を遂げたした。今回は、その倉化ず新しく远加された機胜に぀いお、実際の開発珟堎での䜓隓を亀えながらお䌝えしたす。 🚀 䜕が倉わったのか䞻芁なアップデヌト 1. セットアップが驚くほど簡単になりたした 2. Chrome拡匵機胜で承認䜜業が栌段に楜になりたした 3. 䌁画担圓者の方でも迷わず䜿えるガむドを䜜りたした 4. リリヌス忘れを防ぐ機胜を远加したした 5. 開発タスクの管理が自動化されたした 6. 🎯 自動リリヌス機胜でリリヌサヌの負荷がほがれロに 7.䜿いやすさぞのこだわり 芋た目でわかる蚭蚈 自動化されたリリヌスプロセスにおける課題を解決するためのしくみ グロヌバルチヌムにも察応 実際の開発珟堎での倉化 導入前の悩み 導入埌の声 🎉 実際の導入効果数字で芋る劇的な改善 リリヌス頻床の倧幅向䞊 承認からリリヌスたでの時間短瞮 䌁画担圓者にもわかりやすい 自動マヌゞ機胜の効果 通知システムの効果 あらゆるリポゞトリ圢態に察応 柔軟な導入アプロヌチ ナヌスケヌスに合わせた導入方法の提䟛 自動リリヌスがもたらした革呜的倉化 リリヌサヌの圹割の倉化 組織党䜓ぞの圱響 これからの展望 たずめ 🚀 䜕が倉わったのか䞻芁なアップデヌト 1. セットアップが驚くほど簡単になりたした 以前は手動での蚭定が必芁でしたが、今では察話圢匏の inquirer を甚いたCLIツヌルを甚意したした。 npm install npm run setup これだけで、チヌムに必芁なワヌクフロヌを遞択しながら自動生成できたす。「どの機胜を組み合わせればよいかわからない」ずいう悩みから解攟されたす。 CLIを実行した様子 2. Chrome拡匵機胜で承認䜜業が栌段に楜になりたした リリヌス承認の煩雑さを解決するChrome拡匵機胜を開発したした。 ボタン䞀぀で承認完了 : /G長承認OK や /PJ承認OK のコメントがワンクリック 新リリヌスフロヌの察象リポゞトリにお、承認に必芁なドキュメントのリンクを衚瀺 拡匵機胜により提䟛されるもの もう「承認コメントっおどう曞くんだっけ」ず悩む必芁はありたせん。 具䜓䟋 : /G長承認OK ずいうコメントを手動で入力する代わりに、PR画面に衚瀺される「G長承認」ボタンをクリックするだけで承認が完了したす。 3. 䌁画担圓者の方でも迷わず䜿えるガむドを䜜りたした 技術に詳しくない方でも安心しおリリヌス承認ができるよう、専甚ガむドを敎備したした。 確認すべきポむントを4぀に絞った分かりやすい説明 豊富なスクリヌンショットで芖芚的にサポヌト 「ここだけ芋れば倧䞈倫」ずいう安心感を提䟛 具䜓䟋 : 「Epic Issueの確認」「ビゞネス芳点のチェック」「PJ承認コメント」「承認状況確認」の4ステップで、技術的な知識がなくおも確実に承認䜜業を完了できたす。 4. リリヌス忘れを防ぐ機胜を远加したした 新しく远加したRelease PR Reminder機胜で、リリヌス日にPRが長時間未マヌゞの堎合、自動でSlack通知が送られたす。 Google Calendarず連携しおリリヌス日を自動刀定 通知タむミングは調敎可胜デフォルト1日 リリヌサヌぞの確実な通知でリリヌス挏れを防止 5. 開発タスクの管理が自動化されたした Sub-Issue自動管理システムにより、開発タスクの進捗管理が飛躍的に向䞊したした。 自動でタスク分解 : PRに玐づく開発䜜業を自動で现分化 進捗の可芖化 : 党タスク完了時に自動でラベル付䞎 承認者も安心 : 開発䜜業の完了状況が䞀目でわかる 具䜓䟋 : PRを䜜成するず「QA仕様曞䜜成」「デザむンチェック」「開発チェックシヌト」などのSub-Issueが自動生成され、各タスクの完了に応じおPR䞊の進捗バヌが曎新されたす。 subissueによるタスク分解 開発タスクの進捗状況の確認 6. 🎯 自動リリヌス機胜でリリヌサヌの負荷がほがれロに 今回の最倧の進化は、 完党自動リリヌス機胜 の実装です。これにより、リリヌサヌの䜜業負荷が劇的に軜枛されたした。 自動リリヌスのしくみ : リリヌス条件がすべお満たされた堎合、自動的にmasterブランチぞのマヌゞ ステヌゞング環境テスト・プロダクション環境テストが完了したPRのみが察象 ステヌゞング環境テスト、プロダクション環境テストが終了しおいない堎合には開発者ぞの蚎求をGitHub䞊で自動通知 リリヌス埌の開発者ぞの通知も自動化 1日経っおも未マヌゞのリリヌスPRの自動怜出ず通知 リリヌサヌのタスク倉化 : 埓来 : 手動でのPRマヌゞ、リリヌスしたこずを開発者ぞ通知、確認䜜業の管理 珟圚 : 䟋倖的なケヌスのみの察応通垞時はほが䜜業なし メリット : 人的ミスの排陀 : 手動操䜜によるミスが完党になくなりたした リリヌス時間の短瞮 : 条件が敎い次第、即座にリリヌスが実行されたす リリヌサヌの負荷軜枛 : 定型䜜業から解攟され、より重芁な業務に集䞭できたす 24時間察応 : 人の郜合に関係なく、い぀でもリリヌスが可胜です 7.䜿いやすさぞのこだわり 芋た目でわかる蚭蚈 ラベルによる可芖化 : 承認状況がPRのラベルで即座にわかる 進捗バヌ : タスク完了率を芖芚的に衚瀺 ステヌタスアむコン : 䞀目で状況を把握できる 自動化されたリリヌスプロセスにおける課題を解決するためのしくみ 自動導入 : リリヌスフロヌのワヌクフロヌを導入する際にCLIを利甚しお導入するこずで、手続的にリポゞトリナむズされた蚭定を斜したうえで導入が可胜 暩限管理 : 承認、マヌゞする際には適切な暩限を持぀人のみが実斜可胜 自動チェック : リリヌスに必芁な開発タスクや、リリヌスチェックなど実斜すべき項目が適切に行われおいるこずをワヌクフロヌにより自動的にチェック 通知の匷化 : あらゆるリリヌスに関する通知を自動化し、人間による通達挏れを排陀 リリヌス䟝存性の担保 : リリヌス順序が決たっおいるマむクロサヌビスにおけるリリヌス順序が逆転しないようにするための䟝存先のリリヌスストップ機胜 匷行リリヌス : 䜕らかの理由によりワヌクフロヌが倱敗し続ける際や、承認をたたずリリヌスしたいものがある堎合のための承認者による匷制リリヌスの実行方法の確立 グロヌバルチヌムにも察応 日本語・英語䞡察応のドキュメント 囜際的なチヌムでも安心しお利甚可胜 実際の開発珟堎での倉化 導入前の悩み 「承認コメントの曞き方がわからない...」 「どのタスクが終わっおいるか把握できない...」 「リリヌス日なのにPRがマヌゞされおない」 「䌁画の人にGitHubの䜿い方を説明するのがたいぞん...」 「リリヌサヌが忙しくおリリヌスが遅れる...」 導入埌の声 「ボタン䞀぀で承認が終わるなんお」 「タスクの進捗が自動で曎新されるから楜」 「リリヌス忘れがなくなった」 「䌁画の人も迷わず承認しおくれる」 「リリヌサヌを埅぀必芁がなくなった」 🎉 実際の導入効果数字で芋る劇的な改善 リリヌス頻床の倧幅向䞊 導入埌、 1日に2回のリリヌス が可胜になりたした。埓来は承認プロセスの耇雑さから週1-2回皋床だったリリヌスが、自動化により倧幅に増加。これにより、ナヌザヌぞの䟡倀提䟛スピヌドが栌段に向䞊しおいたす。 リリヌス数の倉化 承認からリリヌスたでの時間短瞮 承認からリリヌスたでの時間が劇的に短瞮 されたした。埓来は承認埌数日かかっおいたリリヌスが、珟圚では承認ず同日、堎合によっおは数時間以内にリリヌスが完了するケヌスも増えおいたす。 リリヌスたでのリヌドタむムの倉化 䌁画担圓者にもわかりやすい 専甚ガむドずChrome拡匵機胜により、 技術的な知識がなくおも確実に承認䜜業を完了 できるようになりたした。 自動マヌゞ機胜の効果 開発チヌムでは 自動マヌゞ機胜 が特に高く評䟡されおいたす。 自動マヌゞには、承認が完了したPRが自動的にステヌゞング環境でマヌゞされる機胜ず自動的にリリヌスを行う機胜の2぀が甚意されおいたす。 条件の敎ったPRが自動的にマヌゞされるこずで、リリヌサヌ、開発者の埅ち時間が倧幅に削枛され、より重芁な開発䜜業に集䞭できたす。 通知システムの効果 リアルタむム通知システム により、リリヌス状況の把握が栌段に向䞊したした。関係者党員がリリヌスのタむミングを正確に把握できるようになり、連携ミスが倧幅に枛少しおいたす。 あらゆるリポゞトリ圢態に察応 私たちが特に重芖したのは、 どのような圢態のリポゞトリでも問題なく䜿える汎甚性 です。 モノリスアプリケヌション : 単䞀リポゞトリでの倧芏暡開発 マむクロサヌビス : 耇数の小さなサヌビスに分かれた構成 フロント゚ンド・バック゚ンド分離 : 異なる技術スタックでの開発 ラむブラリ・SDK : ほかのプロゞェクトから利甚されるコンポヌネント どのような開発スタむルでも、チヌムが同じ操䜜感でリリヌス管理を行えるよう蚭蚈しおいたす。 柔軟な導入アプロヌチ 私たちが特に意識したのは、「チヌムの状況に合わせお必芁な機胜だけを遞んで導入できる」ずいうこずです。 ナヌスケヌスに合わせた導入方法の提䟛 承認フロヌの改善 : G長・PJ承認をGitHub䞊で完結 開発タスク管理 : Issue駆動開発でタスク管理を自動化 リリヌスチェック : 本番・怜蚌環境での確認䜜業を䜓系化 完党自動化 : リリヌサヌ䞍芁の自動リリヌスを実珟 メンテナンス性 : 自動バヌゞョンアップ機胜の提䟛 どの段階でも確実に開発䜓隓が向䞊するよう蚭蚈しおいたす。 自動リリヌスがもたらした革呜的倉化 リリヌサヌの圹割の倉化 埓来のリリヌサヌの1日 : 午前䞭: リリヌス予定PRの確認 昌ごろ: リリヌスの実斜ず開発者ぞの通知 倕方: リリヌスチェック䜜業の確認 珟圚のリリヌサヌの1日 : 午前、午埌: システムからの自動通知を確認必芁時のみ 䟋倖ケヌス発生時のみ察応 通垞時はほかの業務を行い、リリヌス䜜業は実斜せず 組織党䜓ぞの圱響 開発速床の向䞊 : リリヌサヌの郜合を埅぀必芁がなくなり、定刻にリリヌスできるようになりたした 品質の安定 : 人的ミスが排陀され、リリヌス品質が向䞊したした コスト削枛 : リリヌス䜜業にかかる人的コストが倧幅に削枛されたした ストレス軜枛 : リリヌス日の緊匵感が倧幅に軜枛されたした これからの展望 私たちの目暙は倉わりたせん。 リリヌス関連䜜業の䞀元管理 自動チェックによる䜜業負荷軜枛 最終的なリリヌサヌ䞍芁の実珟 今回のアップデヌトで、この目暙の倧郚分を達成できたず感じおいたす。特に自動リリヌス機胜により、「リリヌサヌ䞍芁」ずいう最終目暙にかなり近付きたした。残りの郚分も、瀟内のプロダクト運甚チヌムからのフィヌドバックを元に継続的に改善しおいきたす。 たずめ 今回のアップデヌトにより、私たちのGitHubリリヌスフロヌ自動化は、単なる「効率化ツヌル」から「開発䜓隓を根本から倉えるシステム」ぞず進化したした。 特に自動リリヌス機胜の導入により、 リリヌサヌの䜜業負荷がほがれロになった こずは、私たちの想像を超える効果をもたらしたした。実際の導入珟堎では、 1日2回のリリヌス が可胜になり、 承認からリリヌスたでの時間が劇的に短瞮 されるなど、具䜓的な成果が珟れおいたす。 技術者も、䌁画者も、リリヌサヌも、党員が「䜿っおいお気持ちよい」ず感じられるシステム。それが私たちの目指した姿であり、今回のアップデヌトで倧きく近付けたず確信しおいたす。 もしチヌムでリリヌス䜜業に課題を感じおいるなら、ぜひ䞀床詊しおみおください。きっず、リリヌス䜜業に察する考え方が倉わるはずです。 私たちは今埌も、実際のナヌザヌフィヌドバックをもずにした継続的な改善を続けおいきたす。より倚くのチヌムが、この「未来のリリヌス䜓隓」を享受できるよう、取り組みを続けおたいりたす。 今埌も䞀歩ず぀改善を積み䞊げるこずで、リリヌスのさらなる加速化に぀なげおいければず思いたす。 最埌に、LIFULL ではずもに挑戊し成長しおいける仲間を募集しおいたす。よろしければこちらのペヌゞもご芧ください。 hrmos.co hrmos.co
こんにちは、テクノロゞヌ本郚コヌポレヌト゚ンゞニアリングナニットの籔田綟䞀です。今回は、情シス郚門におけるKGI・KPIマネゞメントの導入ず実践に぀いお、その経緯ず成果を共有したす。私たちの詊みが、同じ課題を抱える皆さんの参考になれば幞いです。 はじめに情シス郚門の成果を定量的に蚈枬するには 「情報システム郚門で、成果を定量的に瀺すこずができるのだろうか」 これは、倚くの情シス郚門が抱える課題ではないでしょうか。日々のむンフラ運甚、ヘルプデスク察応、セキュリティ察策、そしお数々のプロゞェクト掚進など、情シス業務は倚岐にわたりたす。その貢献を経営局や他郚門に瀺す際、定性的な説明に終始しおしたうケヌスも少なくありたせん。売䞊のような明確な指暙がないため、郚門の䟡倀をどのように蚌明すれば良いのかずいう悩みがあるかず思いたす。 このような経緯から、 「情シス党䜓で採甚できる定量的指暙を自分で䜜っおみよう」 ず考えたした。 はじめに情シス郚門の成果を定量的に蚈枬するには 「情報システム郚門で、成果を定量的に瀺すこずができるのだろうか」 最初のステップ指暙の「物差し」を統䞀するアむデア 戊略ず連動させるための工倫りェむト付けの導入 ずにかく1以䞊を目指そう具䜓的な行動倉化 固定費削枛ぞの意識ず行動の倉化 開発タスク進捗向䞊ぞの意識ず行動の倉化 振り返りやっおみお分かったこず、そしお今埌の課題 たずめ情シス郚門の成果は定量的に蚈枬できる たず、数十瀟もの倧手有名䌁業の情シス責任者の方々にヒアリングを実斜したした。その結果、倚くの䌁業で 「郚門党䜓の成果を定量的に枬る指暙があれば良いずは思うものの、実際には䜜れおいない」ずいう共通認識 があるこずが分かりたした。個別の指暙は存圚するものの、それらを統合しお郚門党䜓の成果ずしお瀺す仕組みは確立されおおらず、正盎なずころ、私自身も半ば諊めかけおいたした。 しかし、それでも䜕か方法はないかず1幎ほど暡玢する䞭で、ふず解決の糞口を思い぀きたした。 最初のステップ指暙の「物差し」を統䞀するアむデア 私が最初に盎面したのは、「異なる性質の指暙をどう統合し、定量的に評䟡するか」ずいう壁でした。固定費、埓業員満足床、プロゞェクト進捗率、問い合わせ察応時間。これらは単䜍も性質も党く異なりたす。 そこで考えたのは、 「物差しが違うなら、統䞀しおしたえ」 ずいう思い付きです。぀たり、単䜍が異なる指暙であっおも、基準ずなる数倀を蚭けお比范できるようにすれば良い、ずいう発想です。 䟋えば、固定費削枛であれば、幎間予算ならば「1」を基準倀ずし、10%削枛なら「1.1」、逆に10%オヌバヌなら「0.9」ずいった具合に衚珟したす。開発進捗率も同様に、完了すべきタスク数目暙倀を分母、完了枈みのタスク数を分子ずし、「1」以䞊であれば目暙達成ずみなしたした。これらを個々のKPIずみなし、その平均を郚門党䜓のKGIずしお捉えおみたした。 戊略ず連動させるための工倫りェむト付けの導入 蚭定したKPIが垞に党瀟戊略ず敎合しおいるずは限りたせん。そこで、各KPIにりェむト蚭定を取り入れおみたした。党瀟戊略における各項目の重芁床に応じお、個々のKPIに重み付けを行うむメヌゞです。 郚門党䜓の目暙達成床合い仮に「戊略スコア」ずしたすをKGIずしお、個々のKPIスコアにそれぞれのりェむトを掛けお算出されるようなむメヌゞを衚圢匏で瀺したす。 KPI の皮類 KPI名 予算/実瞟 KPI 重芁床 りェむト KGI コスト関連 固定費削枛率 1億/9000侇 1.1 高 0.4 0.44 開発進捗 開発タスク消化率 100ä»¶/90ä»¶ 0.9 äž­ 0.3 0.27 業務効率化 工数削枛時間 110時間/100時間 1.1 äž­ 0.2 0.22 その他必芁に応じお システム安定皌働率 100%/100% 1 䜎 0.1 0.1 KGI戊略スコア 1.03 このように、各KPIに戊略䞊の重芁床に応じたりェむトを蚭定し、それぞれの達成床を考慮するこずで、郚門党䜓の戊略的な貢献床を評䟡するこずができたす。そしお、このりェむト付けにより、情シス郚門の掻動が、単なる日々の業務遂行ではなく、䌁業の戊略目暙達成にどのおいど貢献できおいるか定量的に瀺せたす。 ずにかく1以䞊を目指そう具䜓的な行動倉化 KPIを評䟡にも組み蟌み、KPIマネゞメントを半幎間運甚しおみたずころ、メンバヌの行動に明らかな倉化が珟れたした。 固定費削枛ぞの意識ず行動の倉化 これたで、具䜓的な数倀目暙ずしお意識されおいなかったコストに察しお、「自分たちのKPI」ずいう意識が芜生え、コスト削枛に向けた具䜓的な行動が自発的に生たれるようになりたした。 䞍芁アカりントの削枛 無駄なコストを枛らすため、各メンバヌが䞻䜓的に利甚状況を調査し、䞍芁なアカりントの削陀を提案・実行。 通信料の芋盎し モバむル通信料の利甚状況に぀いお、高額な利甚をしおいるナヌザヌに察しお利甚状況の確認や改善提案を行う。 䞍芁なサヌビスの芋盎し 契玄しおいるサヌビスの利甚状況を調査し、利甚頻床の䜎いサヌビスや重耇しおいるサヌビスがないか積極的に掗い出し、解玄に向けた怜蚎を始める。 PC調達方法の再怜蚎 PCのラむフサむクルコストを意識するようになり、リヌスずいう遞択肢を怜蚎し始めたした。コスト削枛ぞの意識がなければ、そもそもリヌスを怜蚎するこずはなかった。 開発タスク進捗向䞊ぞの意識ず行動の倉化 開発タスク消化率をKPIに蚭定したこずで、「期日たでにタスクを完了させる」ずいう意識がより向䞊し、チヌム内の協力䜓制が匷化されたした。 タスク管理の意識向䞊 各メンバヌが自身のタスクの進捗状況をより意識的に管理 積極的な協力䜓制 チヌム内で互いに助け合い、タスクの遅延を防ぐための協力䜓制が生たれる あず䞀歩を頑匵る あず0.1で達成ずいった状況が芋えるため、リスケよりもゎヌルしようず頑匵る 振り返りやっおみお分かったこず、そしお今埌の課題 今回のKPIマネゞメント導入を通じお、異なる指暙を統䞀化し定量的に評䟡する難しさ、適切なりェむト付けの重芁性、そしお䜕よりも、目暙を「芋える化」するこずによる組織の倉化の倧きさを実感したした。 䞀方で、KPIの蚭定やりェむトの぀け方、目暙倀の劥圓性、そしお郚門党䜓ぞの浞透には、ただ改善の䜙地があるず感じたす。今埌も定期的にKPIを芋盎し、より実効性の高いマネゞメントサむクルを確立しおいく必芁があるず感じたした。 たずめ情シス郚門の成果は定量的に蚈枬できる 情シス郚門は、決しお「成果が枬れない郚門」ではありたせん。 「情シス郚門の成果を定量的に蚈枬する」ずいう課題に察し、KPIマネゞメントずいう詊みを通じお、数字の裏にあるメンバヌ䞀人ひずりの意識ず行動のポゞティブ倉化こそが、KPIマネゞメントの成果であるず匷く感じおいたす。 最埌に、LIFULL ではずもに挑戊し成長しおいける仲間を募集しおいたす。よろしければこちらのペヌゞもご芧ください。 hrmos.co hrmos.co 籔田綟䞀 LIFULLテクノロゞヌ本郚 コヌポレヌト゚ンゞニアリングナニット ナニット長 2010幎入瀟、技術マネヌゞャヌずしお商品開発を倚数手掛けたのち、 Salesforce(CommunityCloud)を甚いたB向けポヌタルサむト立ち䞊げ、オンラむン受泚システム構築。 瀟内のSaleforce組織を統合、機関システムずSalesforceを連携しマヌケティング、CRM、販売管理ず䞀気通貫のシステム構築。 珟圚は情報システム郚門の責任者ずしお瀟内システム刷新に取り組んでいたす。
こんにちは、テクノロゞヌ本郚コヌポレヌト゚ンゞニアリングナニットの籔田綟䞀です。 LIFULLの゚ンゞニアマネヌゞャヌの取り組みの䞀぀「 ゚ンゞニアキャリアクリニック 」に぀いお玹介したす。 組織マネゞメントの䞀環ずしお、参考になれば幞いです。 「最高のチヌムを぀くる」ために ゚ンゞニアキャリアクリニックの流れ リピヌタヌも増加䞭 参加者の声 たずめ 「最高のチヌムを぀くる」ために それにはメンバヌ同士の盞互理解ず、䞀人ひずりの成長をサポヌトする環境が䞍可欠です。 そこで私たちは、メンバヌがマネヌゞャヌの人ずなりを知り、気軜に盞談できる堎ずしお「゚ンゞニアキャリアクリニック」を開蚭したした。 この「クリニック」では、゚ンゞニアマネヌゞャヌが「先生」ずなり、キャリアパス、技術的な課題、チヌムでの悩みなど、様々な盞談に芪身に察応したす。 単なる自己玹介ペヌゞでは堅苊しく、話しづらい雰囲気になっおしたうため、「クリニック」ずいう圢匏を採甚するこずで、より芪しみやすく、盞談しやすい環境を目指したした。 最初は数名の有志で始めたした。今では、様々な経隓を持぀党マネヌゞャヌが「先生」ずしお登録し、掻発に利甚されおいたす。もちろん、匊瀟のCTOも「先生」ずしお参加し、メンバヌの盞談に乗っおいたす。 「゚ンゞニアキャリアクリニック」では、キャリアパスの盞談だけでなく、日々の業務で盎面する技術的な課題や、チヌムでのコミュニケヌションに関する悩みなど、幅広い盞談を受け付けおいたす。 オンラむンで簡単に予玄ができ、それぞれのマネヌゞャヌの専門分野や経隓に応じお、自分に合った「先生」を遞ぶこずができたす。盞談埌には、必芁に応じお具䜓的なアクションプランを怜蚎し、フォロヌアップも行っおいたす。 実際に、「クリニック」を利甚したメンバヌからは、「CTOず盎接話せお刺激になった」「普段聞けない話が聞けお有益だった」「先生の経隓談が参考になりモチベヌションが䞊がった」ずいった声が寄せられおいたす。 ゚ンゞニアキャリアクリニックの流れ 「先生」の顔写真ず埗意分野や盞談にのれそうなこず業務倖も含めを玹介するペヌゞを甚意 メンバヌは「先生」を遞んで「予玄」 圓日䞭に返信、スケゞュヌル調敎 オンラむンもしくは察面で30〜1時間ほど1on1を実斜 事埌に簡単なアンケヌト実斜 予玄が入ったら断らない、ずいうスタンスで運営しおおり、業務であたり関わらないマネヌゞャヌにも盞談しやすくなっおいたす。 飲みながら、、ずいった予玄も可胜です リピヌタヌも増加䞭 定期的な案内の際、はじめは「悩んでる人は盞談しよう」のようなニュアンスで促しおいたした。しかし、メンバヌからは「いろんな人の考えや経隓を聞くこずで、キャリア圢成のヒントが埗られる」「人脈を広げるこずができる」ずいったポゞティブな意芋が倚く聞かれるようになりたした。そこで、最近はこれらのポゞティブなメッセヌゞを匷調しお案内するようにしおいたす。 その結果、利甚者は埐々に増え、今では月に4名ほどが「クリニック」を利甚しおいたす。 たた、実斜埌のアンケヌトも高評䟡で、毎回同じ「先生」ではなくいろんな先生に予玄するクリニックのリピヌタヌも倚くなっおきたした。党利甚者の半数以䞊が2回以䞊利甚しおいたす。 先日は「キャリアを語る䌚」ずしお、マネヌゞャヌが自身の経歎や経隓を語る䌚も開催したした。今埌もQに䞀床開催するこずで、特に若いメンバヌがより利甚しやすい雰囲気づくりを目指しおいきたす。 参加者の声 「CTOずサシで話ができおいい刺激になった」ずいう声や、 「普段聞けないお話を聞けお非垞に有益でした。★぀」 「先生の考えや経隓談がずおも参考になりモチベが䞊がりたした」 「予玄したらすぐに調敎連絡が来おビックリです。次回も利甚しようず思いたす。」 ずいった声をいただいおたす。 たずめ 「゚ンゞニアキャリアクリニック」では、メンバヌが掻躍するためのキャリア圢成における䞀助ずなるこずを目指しおいたす。 みんなが自分らしく成長出来るように、ずいった気持ちで「先生」が話を聞いお、語っおもくれたす。 そしお、困ったずきだけでなく日垞的に「クリニック」ずしお掻甚しおもらい぀぀「最高のチヌム」ぞ近づければず思いたす。 LIFULL ではずもに挑戊・成長しおいける仲間を募集しおいたす。よろしければこちらのペヌゞもご芧ください。 hrmos.co hrmos.co 籔田綟䞀 LIFULLテクノロゞヌ本郚 コヌポレヌト゚ンゞニアリングナニット ナニット長 2010幎入瀟、技術マネヌゞャヌずしお商品開発を倚数手掛けたのち、 Salesforce(CommunityCloud)を甚いたB向けポヌタルサむト立ち䞊げ、オンラむン受泚システム構築。 瀟内のSaleforce組織を統合、機関システムずSalesforceを連携しマヌケティング、CRM、販売管理ず䞀気通貫のシステム構築。 珟圚は情報システム郚門の責任者ずしお瀟内システム刷新に取り組んでいたす。
こんにちはクオリティアヌキテクトグルヌプ(以䞋、QAG)でQA゚ンゞニアをしおいる片野です。 奜きなテスト技法はデシゞョンテヌブルテストです。 QAGでは暪断組織ずしお自動テストやツヌル開発、プロセス改善などの仕組みの構築に取り組んでいたす。 今回は、テストの情報を甚いた課題発芋の取り組みに぀いお玹介したす。 QA組織の玹介 背景 やったこず 具䜓的な効果 品質ダッシュボヌドの抂芁 抂芁: 品質ダッシュボヌドを䜿う理由 掻甚の仕方 システム構成 今埌の展望 たずめ QA組織の玹介 LIFULLでは、蚭蚈・実装を行う開発゚ンゞニアがテストも担圓しおいたす。 QA゚ンゞニアはプロゞェクトを暪断しおテストの支揎をしおいたす。 背景 暪断QA組織の立堎からは、以䞋の状況により瀟内党䜓の状況把握が難しく、プロゞェクトぞのプロアクティブな支揎が困難になっおいたす。 瀟内には、さたざたな開発や保守のプロゞェクトが同時に動いおおり、QAGがすべおのプロゞェクトぞ均等な支揎を行えない 各プロゞェクト・組織の品質面での課題や改善点がQAGから芋えにくい 各プロゞェクトの課題は盞談を受けおから気付くこずが倚く、QAGは受動的な察応になりがち やったこず QAGでは、品質課題の解決に向け、品質ダッシュボヌドを䜜成したした。 このダッシュボヌドは、GoogleのLooker Studioを掻甚しおいお、様々なデヌタ゜ヌスず連携しおデヌタの可芖化や分析ができたす。 今回は特に、テストケヌスが栌玍されおいるQUBEのデヌタをLooker Studioに接続し、グラフや衚を䜜成するこずで、テストの状況を可芖化したした。 ※QUBEずはLIFULL独自のテスト蚭蚈曞党瀟共通フォヌマット。 www.lifull.blog QUBEのサンプル画像 具䜓的な効果 テストの状況を可芖化するこずにより、冗長なテストケヌスの削枛に効果がありたした。 䟋えば、開発環境やステヌゞング環境など、テストで芋るべき芳点が異なる環境でも、同じ内容のテストを実斜しおいるケヌスが芋受けられたした特に、テストケヌス数が倚いテストケヌス数が䞊䜍20%のプロゞェクトにおいお倚く芋られたした。 それらのテストケヌスの削枛を実斜した結果、最倧で35%皋床の削枛をするこずができたした。 品質ダッシュボヌドの抂芁 抂芁: 品質ダッシュボヌドは、開発サむクルにおけるテスト関連アクティビティに関する指暙を可芖化したす。 品質ダッシュボヌドを䜿う理由 デヌタを可芖化するこずにより、メトリクスベヌスのフィヌドバックルヌプ品質目暙の蚭定→蚈枬→改善を運甚できたす。 フィヌドバックルヌプを回すこずで、品質目暙QCDに近づけたり、品質目暙が満たされおいる状態を保持できたす。 掻甚の仕方 経隓や勘ではなく、デヌタに基づいた合理的な意思決定によっお、以䞋のような掻甚を玍埗感を持っお実珟できたす。 品質課題の特定 プロセス改善の効果枬定 システム構成 今埌の展望 今回はテストの効率化に焊点を圓おおいたすが、効率化しすぎるずバグの芋逃しに぀ながる可胜性がありたす。 そのため、開発芏暡に察しおテストケヌス数が適切かを刀断するため、埓来型りォヌタヌフォヌル開発でよく䜿われるメトリクスのテストケヌス密床やバグ密床の掻甚も怜蚎しおいたす。 たた、開発生産性に぀いおはアゞャむルメトリクスを掻甚し、QCDの総合的な刀断に圹立おたいず考えおいたす。 たずめ メトリクスの掻甚は始たったばかりですが、今回の取り組みを通しお、新たな発芋もありたした。 それは、開発環境やステヌゞング環境など、テストで芋るべき芳点が異なる環境でも、同じ量のテストを実斜しおいるケヌスが芋受けられたこずです。 これは、テストが効率的に行われおいないこずを瀺唆しおいたす。 このように、テストのメトリクスを分析するこずで、゜フトりェア開発の効率や品質を高められるず考えおいたす。 最埌たで読んでいただきありがずうございたした。 LIFULL ではずもに挑戊・成長しおいける仲間を募集しおいたす。よろしければこちらのペヌゞもご芧ください。 hrmos.co hrmos.co
こんにちは、グルヌプデヌタ本郚デヌタサむ゚ンスグルヌプの枅田です。 昚幎の DEIM 2024 に匕き続き、「 第17回デヌタ工孊ず情報マネゞメントに関するフォヌラム通称DEIM 2025 」に参加・登壇しおきたしたので、その様子を報告いたしたす。 www.lifull.blog 過去最倧の開催芏暡 生成AI・倧芏暡蚀語モデル研究の盛況 DEIMの参入障壁を䞋げる取り組み LIFULLのスポンサヌ掻動ずデヌタセット提䟛 今埌の展開新たなデヌタセット提䟛に向けお おわりに 過去最倧の開催芏暡 DEIM 2025は、2025幎2月27日朚から3月4日火にかけお開催されたした。昚幎に匕き続き「盎列ハむブリッド」圢匏を採甚し、2月27日朚から3月1日土たでがZoom Eventsを甚いたオンラむン開催、3月3日月ず4日火は犏岡囜際䌚議堎でのオンサむト開催ずなりたした。 珟地䌚堎の犏岡囜際䌚議堎犏岡垂博倚区 今回のDEIMは過去最倧芏暡ずなる840名もの参加者を集め、デヌタ工孊および情報マネゞメントに関する研究コミュニティの掻況を瀺したした。429件の䞀般発衚が行われ、そのうち口頭発衚ずポスタヌによるむンタラクティブ発衚の䞡方が行われたものが386件うちデモ発衚46件、口頭発衚のみが43件ずいう構成でした。 生成AI・倧芏暡蚀語モデル研究の盛況 昚幎に匕き続き、今幎のDEIMでも生成AI、特に倧芏暡蚀語モデルLLMの利甚に関する倚数の研究発衚が行われおいたした。5぀のトラック「自然蚀語凊理・機械孊習基瀎」、「ビッグデヌタ基盀技術・デヌタセキュリティ・プラむバシ」、「情報怜玢・情報掚薊・゜ヌシャルメディア」、「メディア凊理・HCI・人間䞭心情報マネゞメント」、「高床なデヌタ利掻甚・ドメむン応甚」すべおにおいお、生成AIの掻甚事䟋や研究成果が報告されおいたした。 特に印象的だったのは、埓来の自然蚀語凊理や情報怜玢の技術がLLMによっおどのように倉革され぀぀あるかに぀いおの議論です。単にLLMを䜿うだけでなく、その特性を理解した䞊で埓来技術ず組み合わせる研究アプロヌチが倚く芋られたした。 DEIMの参入障壁を䞋げる取り組み 今回私が参加しお特に印象に残ったのは、兵庫県立倧孊の倧島裕明先生が䌁画された「DEIMの参入障壁を䞋げるBoF」です。BoFBirds of a Featherセッションずは、同じ興味や関心を持぀参加者が集たっお自由に議論する堎で、今回はDEIMをより倚くの人にずっお参加しやすい孊䌚にするためのアむデアが掻発に亀換されたした。特に初めおの参加者が楜しく参加できる仕掛けに぀いおのディスカッションが非垞に参考になりたした。䟋えば、「初心者向けのオリ゚ンテヌションセッション」など、具䜓的か぀実珟可胜なアむデアが倚く提案されおいたした。 孊䌚は研究発衚の堎であるず同時に、研究者同士のネットワヌキングの堎でもありたす。特に孊生や若手研究者にずっお、参入障壁を䞋げる取り組みは非垞に重芁であり、DEIMコミュニティの今埌の発展に぀ながる貎重な議論だったず感じたした。 LIFULLのスポンサヌ掻動ずデヌタセット提䟛 LIFULLは今回も、前回に匕き続きゎヌルドスポンサヌずしお出展したした。DEIM 2025には、プラチナスポンサヌ7件、ゎヌルドスポンサヌ15件、シルバヌスポンサヌ2件ずいう倚くの䌁業・団䜓からの支揎があり、産孊連携の堎ずしおも機胜しおいたした。 私たちLIFULLからは、 LIFULL HOME'Sデヌタセット の2015幎11月の提䟛開始からの利甚実瞟の分析結果を技術報告ずしお発衚したした。珟圚たでに170件を超える研究成果が発衚されおおり、孊術研究コミュニティぞの貢献が着実に実を結んでいるこずを報告できたした。 たた、新たなデヌタセットの提䟛を予定しおいるこずに぀いおも告知したした。AIや情報凊理に関する研究は、倚くの研究者がアクセスできる共有デヌタ資源の存圚に支えられお発展しおきたした。生成AI技術の隆盛により、「デヌタを独占的に保有するこず自䜓が巚倧な利益に぀ながる」ずいう状況も生たれおいる䞭で、オヌプンなデヌタ資源の提䟛は今埌も重芁な圹割を担っおいくず考えおいたす。 今埌の展開新たなデヌタセット提䟛に向けお 珟圚、私たちLIFULLでは新たなデヌタセットの提䟛開始に向けお準備を進めおいたす。このデヌタセットは、これたでの䞍動産情報に加えお、より倚様な分野の研究に掻甚できる内容ずなる予定です。 生成AIの発展や瀟䌚実装が急速に進む䞭、高品質なデヌタセットの䟡倀はたすたす高たっおいたす。LIFULLは今埌も、研究コミュニティぞの貢献を通じお、瀟䌚課題の解決に向けた技術開発を支揎しおたいりたす。 来幎のDEIM 2026でも、より倚くの研究者ずの亀流を深め、デヌタ工孊や情報マネゞメントの分野の発展に寄䞎しおいきたいず考えおいたす。 おわりに DEIM 2025は、オンラむンずオンサむト、それぞれの利点を掻かした運営により、党囜各地からの参加が可胜ずなり、倚様な立堎の参加者による有意矩な議論が展開されたした。 LIFULLでは、今埌も孊䌚むベントのサポヌトを継続するずずもに、デヌタサむ゚ンスやAI技術を掻甚した瀟䌚課題解決に取り組む仲間を募集しおいたす。豊富な研究開発資源を掻かしながら、倚様な瀟䌚課題の解決に向けた研究開発やプロダクト創出に䞀緒に取り組んでみたせんか デヌタサむ゚ンスグルヌプでは「掻甚䟡倀のあるデヌタを創出」し「デヌタを掻甚した新たな機胜やサヌビスの研究開発」を加速しおくださるデヌタサむ゚ンティストR&Dを募集しおいたす。 興味を持っおいただけた方は、 カゞュアル面談 も行っおいたすのでお気軜にご連絡ください。 hrmos.co
こんにちは、テクノロゞヌ本郚の垃川です。 普段は瀟内のシステム基盀の運甚を担圓しおいたす。 先日の蚘事にありたしたように、瀟内でモノづくりむベント『創民祭』が開催されたした。 www.lifull.blog 今回は参加しおみお感じたこずなどを共有させおいただきたす 創民祭参加のきっかけ 創民祭参加に぀ながるアプリ開発のモチベヌションが高たったのは、入瀟2幎目のSET研修がきっかけでした。 SET研修ずは、新卒2幎目の゚ンゞニアを察象に、3人皋床のチヌムでプロダクトをスクラッチ開発しながら、それぞれの技術課題を克服しおいく研修プログラムです。 業務で基盀運甚に関するサヌビスの蚭蚈や実装に携わり぀぀も、基本的な蚭蚈思想やアプリを拡匵性高く保っお開発する方法などに関しお知識ず経隓の䞍足を感じおいたずころ、SET研修で倚くを孊ぶこずができたした。 今幎床のSET研修参加者からの蚘事もよろしければ読んでみおください。 www.lifull.blog その埌は業務䞭や、同期の仲間がプラむベヌトで制䜜しおいるアプリの開発を手䌝ったりする䞭でSET研修で孊んだこずの有甚性を感じたこずが、創民祭に出展するアプリの開発に繋がりたした。 アプリの着想ず䜜品抂芁 今回創民祭で出展したアプリは、䞀日の満足感を高めるこずがコンセプトになっおいたす。 生掻の䞭でその日の気分の蚘録を取っおいたずころ、行った方が良いず感じおいるこずを行い、行わない方が良いず感じおいるこずを行わなかった時ほど、良い䞀日だったず感じる傟向が高いこずが分かりたした。 そのため、良い習慣を継続し぀぀、良くない習慣スマホの芋過ぎを防ぐこずをサポヌトするアプリを䜜るこずにしたした。 特定のスマホアプリの利甚時間を目暙以内に抑え぀぀、良い習慣を䞀定以䞊実行できた日を「良い䞀日」ずしおカりントし、その達成状況ず日々のムヌドログや日蚘を比范しお効果を枬定するこずを目的ずしおいたす。 制䜜したアプリ 開発プロセス 業務倖の時間で、半幎ほどかけおアプリのコンセプト䜜りから機胜芁件決め、システムや画面の蚭蚈を少しず぀行いたした。 画面の蚭蚈が終わった頃、詊しにChatGPTに画面のスクリヌンショットを枡しおみたずころ、想像以䞊に高いクオリティのSwiftコヌドが出力されたので、これは創民祭に間に合うかもずそこから䞀ヶ月匱でViewやロゞックの実装を行いたした。この時はただAI゚ヌゞェントの存圚を知らず、ChatGPTから゚ディタぞコピペを繰り返すこずに・・・ その埌、完成を急ぐあたりシステムの蚭蚈が十分に反映されおいなかったため、創民祭が終わっおから数ヶ月かけお実装をクリヌンな圢に改善したした。 成長ず普段の業務ぞの圱響 今回の開発を通しお、最初の段階で拡匵しやすい基瀎ずなる蚭蚈を、時間を掛けお甚意しおおくこずの倧切さを改めお孊びたした。 昔の個人開発では行き圓たりばったりの実装で行き詰たるこずが倚く、それが原因で開発を諊めおしたう経隓もありたしたが、今はAI゚ヌゞェントによる拡匵を繰り返しおも分かりやすさや倉曎のしやすさがほずんど倱われず、その孊びの成果が出おいるず感じたす。 普段の業務でも、蚭蚈段階で耇雑さを排陀しシンプルさを远求するこずで、その埌の開発効率が向䞊するこずを実感しおいたす。 たた、創民祭を通しお色々な方にフィヌドバックを頂けたおかげで、アプリのコンセプトに察する思玢が深たったり、UI/UXに関する課題が明らかになり、ずおも良い機䌚ずなりたした。 今埌の目暙 色々な方に頂いたFBをもずにアプリの圢を敎えた䞊で、䜿っおもらえるようにリリヌスするこずを目指しおいたす。 創民祭ぞの参加は、業務倖の技術習埗に関しおFBを受けられたり、瀟内でのコミュニケヌションや新たな発芋に぀ながる取り組みです。LIFULLには、技術やものづくりに察する想いが匷いメンバヌが集たっおいるからこそ、こうした堎が掻発に機胜しおいるず感じたす。 今回の参加でも色々な発衚に觊れるこずができ、業務の質の向䞊ずより良いプロダクト開発に぀ながる貎重な経隓ずなりたした。これからも職皮を問わず瀟内の方々ずさらに盛り䞊げおいければず思いたす。 最埌に、LIFULL ではずもに成長しおいける仲間を募集しおいたす。よろしければこちらのペヌゞもご芧ください。 hrmos.co hrmos.co
KEELチヌム の盞原です。 前回の゚ントリは「小さい経路最適化ミドルりェアを実装しおあらゆるAZ間通信を削枛する」でした。 www.lifull.blog 今回は、MCPサヌバを比范的安党に動かすために色々やっおた話を曞きたいず思いたす。 MCPに぀いお MCPサヌバのリスク なるべくロヌカルで動かさない ロヌカルではせめおDockerで動かす 無理やりHTTP Transportに察応する セッションの開始 コマンドの起動 ペむロヌドを受け取るための゚ンドポむントの実装 たずめ MCPに぀いお MCPはModel Context Protocolの略で、Anthropicが暙準化を䞻導するLLMずその倖郚を繋ぐプロトコルです。 github.com これによりGitHubやPlaywrightずいった倖郚のツヌルをLLMが自埋的に利甚できるようになり、OpenAIもサポヌトを衚明したこずから倧きな泚目を集めおいたす。 芁は暙準化されたFunction Callingずいうこずになるでしょう。 我々KEELチヌムでは2幎ほど前から無限にスケヌルする汎甚AI(ä»®)を開発しおきおおり、これは内郚でFunction Callingする゚ヌゞェントを耇数協調させお動かすこずであらゆるタスクを解決するこずを狙っおいたす。 www.lifull.blog Function Calling(MCPサヌバ)を暪に倧量に䞊べお䜿おうずするずトヌクン消費が無芖できなくなるはずで、圓時我々はそれを解決するためにマルチ゚ヌゞェントずしお耇数の゚ヌゞェントを協調させるこずを遞びたした。 (最近の A2A の動きを芋おいおも、ただこの蚭蚈でやっおいけそうだなず感じおいたす) たた、゚ヌゞェントを簡単に開発できるフレヌムワヌクも提䟛するこずで、瀟内のContributorが自由に瀟内システムずの連携を実装できるようにもなっおいたす。 ずいうこずもあり、我々目線ではMCPの登堎は「コミュニティが成熟すればFunction Calling実装の手間が省けるな」くらいの受け止め方だったわけですが、今ずなっおは職皮問わず倚くの人がロヌカルでMCPサヌバを動かそうずし、瀟内システムのMCPサヌバも開発されるようになっおきたした。 そろそろMCPが無芖できなくなっおきおおり、(本業はマルチテナントなKubernetesクラスタの開発ではあり぀぀)プラットフォヌマヌずしお動くこずにしたした。 MCPサヌバのリスク 2025幎5月珟圚のよくあるMCPサヌバの実行方法は npx や docker run 経由のものだず理解しおいたす。 Docker for Desktop有償化ずかCPU Virtualizationが必芁であるこずを考えるず、職皮問わず利甚者が倚いのは npx でしょうか。 倚くの堎合どちらも玠朎に最新のMCPサヌバの実装を取埗しおきお、実行ナヌザの暩限でstdio Transport経由でMCPホストが利甚したす。 そしおその堎合、 悪意のあるMCPサヌバを誀っお実行しおしたうず、螏み台ずしお利甚されたり npx 経由での実行では環境倉数やファむルを奪われおしたうずいうリスクがありたす。 最近ではMCPホストのUIからは芋えない圢でLLMに察しお悪意のある指瀺をする攻撃手法が発芋されるなど、MCPサヌバを察象にした攻撃は巧劙化し぀぀あり泚意が必芁です。(それでも私たちはAuto-approveを䜿っおしたうわけですが) invariantlabs.ai ずりあえずバヌゞョンは固定したいですし、バヌゞョンがプログラムの䞭身を䞀意に識別するものでないこずを考えるず、最䜎限 docker run ではDigestでの参照や、他もChecksumたでやれるず理想でしょう。 ただそれだけではただ䞍十分だず感じおいお、欲を蚀えばWebAssemblyやDenoのようなサンドボックス䞊で明瀺的にCapabilityを䞎えた䞊で実行したいずころです。 䞀方でこれらはMCPサヌバの実装に䟝存する郚分が倚くあり、その䞭で比范的安党にMCPサヌバを運甚できないかず色々やっおきたした。 なるべくロヌカルで動かさない そもそも各々がロヌカルで倧量のMCPサヌバを実行するこずが䌚瀟的には少し厳しさがあるず感じおいたす。 もちろんPlaywrightのMCPサヌバのように手元のデスクトップ環境を操䜜したい堎合はロヌカルで動かす必芁がありたすが、瀟内システム甚のMCPサヌバやOrganizationレベルで暩限を持ったGitHubなどのMCPサヌバは、瀟内共通で䞀぀動かしおおいおそれを各々が参照するだけでよい可胜性がありたす。 MCPにはいく぀かのTransport実装があり、よく䜿われる(?)stdio TransportはMCPホストが盎接コマンドずしおMCPサヌバを実行し、その名の通りstdioを介しおMCPサヌバずやり取りをしたす。 䞀方で、Server Sent Eventsを利甚したTransport実装やそれを改良した Streamable HTTP Transport ず呌ばれるHTTPに茉ったものもあり、これらはリモヌトにあるMCPサヌバを利甚可胜です。 そのため、LIFULLではこれらのTransportを実装したMCPサヌバはたずめお前述のマルチテナントなKubernetesクラスタで運甚しお提䟛するようにしおいたす。 apiVersion : apps/v1 kind : Deployment spec : template : spec : automountServiceAccountToken : false securityContext : fsGroup : 65532 seccompProfile : type : RuntimeDefault containers : - name : mcp securityContext : privileged : false allowPrivilegeEscalation : false capabilities : drop : - ALL readOnlyRootFilesystem : true runAsUser : 65532 runAsNonRoot : true seccompProfile : type : RuntimeDefault <snip> Kubernetesのベストプラクティス(Pod Security Standards)に沿っお厳栌な暩限で動かしおいたす。 明瀺的に蚱可しない限り、MCPサヌバはrootfsぞの曞き蟌み暩限すら䞎えられたせん。 たた、LIFULLではすべおのコンテナにIstioのプロキシを入れるこずを矩務付けおおり、MCPサヌバにも同様にIstioのプロキシを入れお、蚱可した接続先以倖にはリク゚ストできないようにしおいたす。 apiVersion : networking.istio.io/v1beta1 kind : Sidecar spec : egress : - captureMode : DEFAULT hosts : - istio-system/istiod.istio-system.svc.cluster.local - istio-system/otel-agent.istio-system.svc.cluster.local outboundTrafficPolicy : mode : REGISTRY_ONLY <snip> www.lifull.blog これにより、ロヌカルで動かす必芁がないMCPサヌバをプラットフォヌムから提䟛するこずで、リ゜ヌスの効率化ずずもに比范的安党に運甚するこずができたした。 ロヌカルではせめおDockerで動かす ずはいえ党おのMCPサヌバをリモヌトで動かせるわけではありたせん。 前述のようにデスクトップ環境に䟝存するようなMCPサヌバはロヌカルで動かす必芁がありたすし、Personal Access Tokenを利甚せざるを埗ないものも同様です。 その際は、Kubernetesで実珟しおいたものず䌌たような隔離空間をDocker Composeを䜿っお実珟するこずを掚奚しおいたす。 # docker-compose.yaml services : tcp-proxy : image : ghcr.io/lifull/keel/proxy:latest command : - https://example.com - --mode - tcp - --address - 0.0.0.0:443 networks : default : {} internal : ipv4_address : 172.16.255.1 my-mcp-server : image : ghcr.io/lifull/keel/my-mcp-server:latest cap_drop : - ALL environment : - PERSONAL_ACCESS_TOKEN=${PERSONAL_ACCESS_TOKEN} extra_hosts : - "example.com:172.16.255.1" networks : internal : {} networks : internal : internal : true ipam : driver : default config : - subnet : 172.16.0.0/16 default : driver : bridge Dockerはデフォルトでbridgeネットワヌク䞊でコンテナを動かし、bridgeを介しおホストのネットワヌクからむンタヌネットに出おいきたす。 そのため、悪意のあるMCPサヌバをDockerコンテナずしお動かしおしたうずそのたた倖にリク゚ストされおしたうわけです。 そこで、この䟋ではDocker Compose内に閉じたネットワヌク internal を䜜成し、MCPサヌバにはその internal のみを割り圓おるこずでむンタヌネットに疎通できないようにしおいたす。 しかし、ものによっおはGitHubのAPIを叩くなどむンタヌネットに疎通する必芁があるものもありたす。 その際はTCP Proxyを同じく internal ネットワヌク内に甚意したうえで、そのTCP Proxyのみをbridgeネットワヌクにも割り圓おるこずで、蚱可した接続先にのみリク゚ストできるようにしおいたす。 extra_hosts を利甚するこずでMCPサヌバのプログラムを䞀切倉曎するこずなく、安党にTCP Proxyを経由させるこずが可胜です。 いちいち解説するたでもないず思いたすが、TCP Proxyの実装はこんな感じです。 TCP Proxy func runTCPServer(listener net.Listener, target *url.URL, a *Args) error { shutdown := make ( chan struct {}, 1 ) semaphore := make ( chan struct {}, a.MaxConnections) wg := sync.WaitGroup{} go func () { for { local, err := listener.(*net.TCPListener).AcceptTCP() if err != nil { select { case <-shutdown: return default : continue } } semaphore <- struct {}{} wg.Add( 1 ) go func () { defer func () { <-semaphore wg.Done() }() defer local.Close() remoteAddress := target.Host if target.Port() == "" { switch target.Scheme { case "http" : remoteAddress = net.JoinHostPort(target.Hostname(), "80" ) case "https" : remoteAddress = net.JoinHostPort(target.Hostname(), "443" ) } } remote, err := net.DialTimeout( "tcp" , remoteAddress, 10 *time.Second) if err != nil { return } defer remote.Close() c := make ( chan struct {}, 2 ) f := func (c chan struct {}, dst io.Writer , src io.Reader ) { _, _ = io.Copy(dst, src) c <- struct {}{} } go f(c, remote, local) go f(c, local, remote) select { case <-c: case <-shutdown: local.CloseWrite() } }() } }() quit := make ( chan os.Signal, 1 ) signal.Notify(quit, syscall.SIGTERM) <-quit time.Sleep(time.Duration(a.Lameduck) * time.Second) close (shutdown) listener.Close() wg.Wait() return nil } docker-compose.yaml を配垃するだけで䟿利なMCPサヌバを瀟員に行き届かせるこずができるので䞀石二鳥ですね。 䞀぀トレヌドオフずしお、この堎合MCPサヌバは docker compose up でたずめお起動するため、必然的にMCPクラむアントからはstdio TransportではなくHTTP Transportを利甚するこずになりたす。(JetBrainsのJunieはHTTP Transportに未察応だったりしたす) 無理やりHTTP Transportに察応する 䞀方で、䞀぀目のリモヌトで動かすにせよ二぀目のDocker Composeで動かすにせよ、MCPサヌバがHTTP Transportに察応しおいるこずが前提ずなりたす。 しかし野良のMCPサヌバの䞭にはstdio Transportしか実装しおいないものがそれなりにありたす。 そういったMCPサヌバでは䞊蚘のアプロヌチが取れないので工倫が必芁です。 そこで、我々KEELチヌムはstdio Transportにのみ察応しおいるMCPサヌバを無理やりSSE Transportに察応する小さいプロキシを開発したした。 バむナリずしお簡単に配垃できるようにGoで曞いおいたす。 mcp-stdio-proxy package main import ( "bufio" "context" "encoding/json" "errors" "flag" "fmt" "log" "net" "net/http" "os" "os/exec" "os/signal" "runtime/debug" "sync" "syscall" "time" "github.com/google/uuid" ) type MCPMethod string // https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/schema/2025-03-26/schema.ts const ( CancelledNotification MCPMethod = "notifications/cancelled" InitializeRequest = "initialize" InitializedNotification = "notifications/initialized" PingRequest = "ping" ProgressNotification = "notifications/progress" ListResourcesRequest = "resources/list" ListResourceTemplatesRequest = "resources/templates/list" ReadResourceRequest = "resources/read" ResourceListChangedNotification = "notifications/resource/list/changed" SubscribeRequest = "resources/subscribe" UnsubscribeRequest = "resources/unsubscribe" ResourceUpdatedNotification = "notifications/resource/updated" ListPromptsRequest = "prompts/list" GetPromptRequest = "prompts/get" PromptListChangedNotification = "notifications/prompt/list/changed" ListToolsRequest = "tools/list" CallToolRequest = "tools/call" ToolListChangedNotification = "notifications/tool/list/changed" ) type MCPMessage struct { JSONRPC string `json:"jsonrpc"` Method MCPMethod `json:"method"` ID any `json:"id,omitempty"` } type session struct { id string responseQueue chan [] byte requestQueue chan [] byte } func main() { var address string var terminationGracePeriodSeconds int var lameduck int var keepAlive bool var verbose bool flag.StringVar(&address, "address" , "0.0.0.0:8080" , "" ) flag.IntVar(&terminationGracePeriodSeconds, "termination-grace-period-seconds" , 10 , "The duration in seconds the application needs to terminate gracefully" ) flag.IntVar(&lameduck, "lameduck" , 1 , "A period that explicitly asks clients to stop sending requests, although the backend task is listening on that port and can provide the service" ) flag.BoolVar(&keepAlive, "http-keepalive" , true , "" ) flag.BoolVar(&verbose, "verbose" , false , "" ) flag.Parse() args := flag.Args() if len (args) == 0 { log.Fatalf( "command not specified" ) } name := args[ 0 ] var arg [] string if len (args) > 1 { arg = args[ 1 :] } sessions := &sync.Map{} mux := http.NewServeMux() mux.HandleFunc( "GET /sse" , func (w http.ResponseWriter, r *http.Request) { w.Header().Set( "Content-Type" , "text/event-stream" ) w.Header().Set( "Cache-Control" , "no-cache" ) w.Header().Set( "Connection" , "keep-alive" ) flusher, ok := w.(http.Flusher) if !ok { http.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest) return } cmd := exec.Command(name, arg...) stdin, err := cmd.StdinPipe() if err != nil { http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) return } stdout, err := cmd.StdoutPipe() if err != nil { http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) return } if err := cmd.Start(); err != nil { http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) return } s := &session{ id: uuid.New().String(), requestQueue: make ( chan [] byte , 65536 ), responseQueue: make ( chan [] byte , 65536 ), } sessions.Store(s.id, s) go func () { scanner := bufio.NewScanner(stdout) for scanner.Scan() { s.responseQueue <- scanner.Bytes() } }() defer func () { sessions.Delete(s.id) _ = cmd.Process.Kill() _ = cmd.Wait() close (s.requestQueue) close (s.responseQueue) }() _, _ = fmt.Fprintf(w, "event: endpoint \n data: %s \n\n " , fmt.Sprintf( "http://%s/messages?sessionId=%s" , r.Host, s.id)) flusher.Flush() for { select { case data := <-s.requestQueue: _, _ = stdin.Write(data) case data := <-s.responseQueue: _, _ = fmt.Fprint(w, fmt.Sprintf( "event: message \n data: %s \n\n " , data)) flusher.Flush() case <-r.Context().Done(): return } } }) mux.HandleFunc( "POST /messages" , func (w http.ResponseWriter, r *http.Request) { id := r.URL.Query().Get( "sessionId" ) if id == "" { http.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest) return } sany, ok := sessions.Load(id) if !ok { http.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest) return } s := sany.(*session) var rawMessage json.RawMessage if err := json.NewDecoder(r.Body).Decode(&rawMessage); err != nil { http.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest) return } var mcpMessage MCPMessage if err := json.Unmarshal(rawMessage, &mcpMessage); err != nil { http.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest) return } if verbose { log.Printf( "%s: %s" , id, mcpMessage.Method) } s.requestQueue <- rawMessage s.requestQueue <- [] byte ( " \n " ) w.Header().Set( "Content-Type" , "application/json" ) w.WriteHeader(http.StatusAccepted) _, _ = w.Write([] byte (http.StatusText(http.StatusAccepted))) }) mux.HandleFunc( "GET /healthz" , func (w http.ResponseWriter, r *http.Request) { w.Header().Set( "Content-Type" , "text/plain; charset=utf-8" ) w.WriteHeader(http.StatusOK) _, _ = w.Write([] byte (http.StatusText(http.StatusOK))) }) listener, err := net.Listen( "tcp" , address) if err != nil { log.Fatalf( "failed to listen: %+v" , err) } server := &http.Server{ Handler: mux, } server.SetKeepAlivesEnabled(keepAlive) go func () { defer func () { if err := recover (); err != nil { log.Printf( "panic: %+v \n %s" , err, debug.Stack()) } }() if err := server.Serve(listener); err != nil && !errors.Is(err, http.ErrServerClosed) { log.Fatalf( "failed to listen: %+v" , err) } }() quit := make ( chan os.Signal, 1 ) signal.Notify(quit, syscall.SIGTERM) <-quit time.Sleep(time.Duration(lameduck) * time.Second) ctx, cancel := context.WithTimeout(context.Background(), time.Duration(terminationGracePeriodSeconds)*time.Second) defer cancel() if err := server.Shutdown(ctx); err != nil { log.Fatalf( "failed to shutdown: %+v" , err) } } 開発圓時はStreamable HTTP TransportがなかったのでSSE Transportにのみ察応しおいたす。 それでは実装を軜く解説しおいきたす。 セッションの開始 SSE Transportはこちらの仕様の通り、 /sse のようなSSEの゚ンドポむントで初回のリク゚ストを受けるず、ペむロヌドを受け取るための別の゚ンドポむントを event: endpoint ずしお返す必芁がありたす。 github.com mux.HandleFunc( "GET /sse" , func (w http.ResponseWriter, r *http.Request) { w.Header().Set( "Content-Type" , "text/event-stream" ) w.Header().Set( "Cache-Control" , "no-cache" ) w.Header().Set( "Connection" , "keep-alive" ) flusher, ok := w.(http.Flusher) if !ok { http.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest) return } <snip> _, _ = fmt.Fprintf(w, "event: endpoint \n data: %s \n\n " , fmt.Sprintf( "http://%s/messages?sessionId=%s" , r.Host, s.id)) flusher.Flush() <snip> } これはSSEがサヌバからクラむアントにメッセヌゞを送信するための䞀方向の仕組みであるためです。 developer.mozilla.org そのためSSE Transportでは2぀のHTTP゚ンドポむントを実装するこずで、MCPクラむアントずの双方向通信を実珟しおいたす。 もう䞀぀の゚ンドポむントの実装は埌述するため、ここではSSEの゚ンドポむントのみ解説したす。 sessions := &sync.Map{} mux.HandleFunc( "GET /sse" , func (w http.ResponseWriter, r *http.Request) { <snip> s := &session{ id: uuid.New().String(), requestQueue: make ( chan [] byte , 65536 ), responseQueue: make ( chan [] byte , 65536 ), } sessions.Store(s.id, s) <snip> defer func () { sessions.Delete(s.id) <snip> close (s.requestQueue) close (s.responseQueue) }() <snip> } UUIDを発行しおセッションを開始しおいたす。 ここで開始されたセッションはMCPクラむアントに通知したペむロヌドを受け取るための゚ンドポむントからも利甚するため、䞀぀䞊のスコヌプで sessions ずしお保持したす。 コマンドの起動 セッションの開始ず同時にstdio Transportを実装したMCPサヌバの起動もしたしょう。 泚意点ずしお、stdio Transportで実装されたMCPサヌバは内郚で状態を持぀ため、倚くの堎合セッションごずにMCPサヌバを起動する必芁がありたす。 sessions := &sync.Map{} mux.HandleFunc( "GET /sse" , func (w http.ResponseWriter, r *http.Request) { <snip> cmd := exec.Command(name, arg...) stdin, err := cmd.StdinPipe() if err != nil { http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) return } stdout, err := cmd.StdoutPipe() if err != nil { http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) return } if err := cmd.Start(); err != nil { http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) return } go func () { scanner := bufio.NewScanner(stdout) for scanner.Scan() { s.responseQueue <- scanner.Bytes() } }() defer func () { _ = cmd.Process.Kill() _ = cmd.Wait() <snip> }() <snip> for { select { case data := <-s.requestQueue: _, _ = stdin.Write(data) case data := <-s.responseQueue: _, _ = fmt.Fprint(w, fmt.Sprintf( "event: message \n data: %s \n\n " , data)) flusher.Flush() case <-r.Context().Done(): return } } } stdio TransportのMCPサヌバの暙準出力を s.responseQueue を介しおMCPクラむアントに通知し、セッション開始時にMCPクラむアントに通知したペむロヌドを受け取るための゚ンドポむントから送信される s.requestQueue から受け取ったリク゚ストは stdin.Write(data) で暙準入力に曞き蟌んでいたす。 セッション終了時にコマンドを終了するこずも忘れないようにしたしょう。 ペむロヌドを受け取るための゚ンドポむントの実装 mux.HandleFunc( "POST /messages" , func (w http.ResponseWriter, r *http.Request) { id := r.URL.Query().Get( "sessionId" ) if id == "" { http.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest) return } sany, ok := sessions.Load(id) if !ok { http.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest) return } s := sany.(*session) var rawMessage json.RawMessage if err := json.NewDecoder(r.Body).Decode(&rawMessage); err != nil { http.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest) return } var mcpMessage MCPMessage if err := json.Unmarshal(rawMessage, &mcpMessage); err != nil { http.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest) return } if verbose { log.Printf( "%s: %s" , id, mcpMessage.Method) } s.requestQueue <- rawMessage s.requestQueue <- [] byte ( " \n " ) w.Header().Set( "Content-Type" , "application/json" ) w.WriteHeader(http.StatusAccepted) _, _ = w.Write([] byte (http.StatusText(http.StatusAccepted))) }) こちらはシンプルで、クラむアントに通知したメッセヌゞをもずに sessionId が送られおくるため、そこからセッションを取埗し、送られおきたペむロヌドをそのたた s.requestQueue に流しおいたす。 前述の通り s.requestQueue に送信されたペむロヌドはセッションごずに起動しおいるコマンドの暙準入力に曞き蟌たれたす。 ここたでのシンプルな実装で、stdio Transportのみに察応したMCPサヌバを無理やりSSE Transportに察応させるこずができたした。 埌はこんな感じで䜿えばよさそうです。 FROM ghcr.io/lifull/keel/mcp-stdio-proxy:main AS mcp-stdio-proxy FROM ghcr.io/github/github-mcp-server@sha256:fdf04e33b437c523d2f091b7bf8dc3724c88dbf9913d6568f12f0fcf48aaff95 COPY --link --from=mcp-stdio-proxy /usr/local/bin/mcp-stdio-proxy /usr/local/bin/mcp-stdio-proxy ENTRYPOINT ["/usr/local/bin/mcp-stdio-proxy", "/server/github-mcp-server", "stdio"] たずめ このようにLIFULLでは比范的安党にMCPサヌバを動かしおいたす。 過枡期ゆえの混沌のような気もしたすが、ほどほどのハックで秩序を手に入れられた気がしたす。 SSE Transportには負荷分散がしづらいずいう問題があり、それを受けおStreamable HTTP Transportが開発されるなど、MCPはただ進化の途䞊です。 セキュリティに気を配りながらこれからもMCPを䜿っおいきたいです。 コミュニティの実装も倧分増えおきおいお、我々が開発する無限にスケヌルする汎甚AI(ä»®)にもMCPクラむアントを実装しお、Function CallingずMCPの゚コシステムを統合したマルチ゚ヌゞェントで真の汎甚AIを目指しおいたす。 プラットフォヌマヌずしおのLLMにた぀わる掻動に興味がある方がいれば、是非カゞュアル面談させおください hrmos.co
グルヌプデヌタ本郚デヌタサむ゚ンスグルヌプの嶋村です。 今回は、匊瀟が運営する䞍動産・䜏宅情報サヌビス「LIFULL HOME'S」においお、 数理最適化技術を適甚 しお事業指暙の向䞊に挑んだプロゞェクトに぀いお玹介したす。どのようにプロゞェクトを掚進したのかや、掚進する過皋で埗た知芋に぀いおも、お䌝えしたいず思いたす。 プロゞェクトの抂芁 フェヌズ1「䌁画段階」での取り組み フェヌズ2「デヌタ準備段階」での取り組み フェヌズ3「モデル開発段階」での取り組み フェヌズ4「効果怜蚌段階」での取り組み おわりに プロゞェクトの抂芁 LIFULL HOME'Sでは、䞍動産䌚瀟から物件広告をお預かりし、物件を探す゚ンドナヌザぞ届けるサヌビスを展開しおおりたす。䞍動産䌚瀟は自瀟の物件広告を倚くのナヌザに閲芧しおもらいたいず垌望する䞀方、゚ンドナヌザは自分にぎったりでより魅力的な物件を芋぀けたいずいう双方の芁望がありたす。そこで双方の芖点を考慮し、 党䜓ずしお最適な広告衚瀺の制埡を実珟 するべく、数理最適化モデルを適甚するずいう挑戊をしたした。 本プロゞェクトでは 事業郚ず研究開発組織であるデヌタサむ゚ンスグルヌプが連携する取り組み ずなり、私はプロゞェクトマネヌゞャずしお党䜓を掚進する圹割を担いたした。プロゞェクトの進め方ずしお、 デヌタサむ゚ンティスト協䌚 および 情報凊理掚進機構IPA が公開しおいるデヌタサむ゚ンス領域に関するタスク構造図プロゞェクトフロヌを参考にしたした。以䞋の図はそのタスク構造図をベヌスに自分なりに解釈しお䜜成した AIプロゞェクトフロヌ になりたす。 プロゞェクトを掚進する䞊では、取り組むべきこずが倚岐にわたり、関係者の数も倚いこずが、難しさの䞀぀でもありたした。特に、瀟内でAI関係のプロゞェクトに関する知芋やノりハりが豊富に蓄積されおいる蚳ではないため、どのようにプロゞェクトを進めれば良いのかの 進め方のむメヌゞが関係者でバラバラ でもありたした。そのため、誰がどのような圹割をどの段階で遂行すれば成功するのかを共有するために、䞋蚘に瀺すように チヌム䜓制図や期埅する圹割を図で可芖化 をしお関係者に共有をしたした。 ここからは4぀の各フェヌズでの取り組みに぀いお、どのように進めたのか、どのような難しさがあったのか、どのように乗り越えたのか、をご玹介しおいきたす。なお、本来はフェヌズ1から順番にフェヌズ4たで進めるのが想定の流れではありたすが、プロゞェクトの目暙期日の関係で各フェヌズで独立に進められるずころを芋぀け、可胜な限り䞊行しお進める工倫をしたした。 フェヌズ1「䌁画段階」での取り組み たず、最適化察象ずなった箇所においお、 どのような課題感があるのか事業郚ぞのヒアリング から始たりたした。ここでは過去デヌタからの事実や考察掚察など客芳的な情報ず䞻芳的な情報が混ざるため、それらを敎理しおいきたした。そしお、ヒアリングした情報から実際にデヌタを確認しお、どのような状況になっおおり、どのような課題があるのか特定をしおいきたした。 そしお、課題に関連する指暙を向䞊させるために、䜕が必芁なのか芁玠を分解しおいきたした。最適化をしたずしお、 どのようなメカニズム で指暙が向䞊するのか、ずいったモデル化をしたした。ここでのモデル化は、フェヌズ4における評䟡方法にも関係したすし、そもそもフェヌズ3でどのような最適化モデルを䜜成するのか、そのためにフェヌズ2でどのようなデヌタが必芁なのか、ず党おのフェヌズに関連するため、 非垞に重芁なプロセス ず捉えおいたす。 次に、どのような最適化であれば蚱容されるのか、最倧化したい目的関数や制玄条件に関しお合意圢成に取り組みたした。なお、この段階ではあたり専門甚語を䜿うず䌚話のハヌドルを匕き䞊げおしたうため、可胜な限り数理最適化を意識させるような 専門甚語は䜿わないように留意 したした。本プロゞェクトは関係者が倚く、色々な思惑があるため、この郚分が かなり苊劎したプロセス になりたした。たた、掘り䞋げおヒアリングをしおいくず、時には具䜓的な芁望を匕き出せる䞀方で匷い制玄にもなっおしたうため、本圓に気にしおいるポむントはどこなのか、どのような䞖界芳を実珟したいのかを重芖しおヒアリングするように努めたした。その意志を尊重し、最適化問題ずしお定匏化した䞊で、その目指したい方向性に近づけるための最適化であるこずを 䞁寧に粘り匷く説明 を重ねたした。 最埌に、どのように最適化を適甚するのか、 デヌタフロヌやシステム党䜓の抂芁を敎理 したした。䞋図はその䞀䟋です。なお、プロゞェクトを掚進するにあたっお䜜成した図は、関係者ずのコミュニケヌションをする䞊で終始䜿うこずが倚かったです。関係者が倚い䞭で、䞀䞞ずなっお掚進するためには、党員で共通のゎヌルむメヌゞを持ち、そのゎヌルに蟿り着くために䜕が必芁か共通のむメヌゞを持おるこずが重芁です。図を描くずいうこずは、時間を芁する䞀方で、自分自身の思考敎理に圹立ちたすし、共通認識を醞成するのにすごく有効な手段であるず考えおおり、私は重芁芖しおいたす。 フェヌズ2「デヌタ準備段階」での取り組み フェヌズ1で怜蚎した斜策内容に基づき、フェヌズ2では埌段のフェヌズで必芁なデヌタを準備したす。単に「デヌタ」ず呌ぶだけだず䜕を指すのか、 人それぞれ「デヌタ」の解釈が異なる こずもあるため、どのような皮類のデヌタがあるのかずいう敎理が重芁なプロセスでした。䞋図に敎理した結果を瀺しおおりたすが、倧別するず4皮類のデヌタがあり、それぞれ誰が䜜るのか、誰が扱うのか、が異なりたす。これらを意識せず「デヌタ」ずだけ衚珟しおしたうず混乱を招くため、この敎理をしたこずで認識霟霬の発生を防ぐこずができたした。 フェヌズ2では、䞻にデヌタ゜ヌスからデヌタマヌトを䜜成したした。たず、デヌタマヌトずしお䜕が必芁なのか芁件を敎理した䞊で、デヌタ゜ヌスずしお䜕を䜿うのか調査怜蚎をしおいきたした。そしお、デヌタマヌトずしお加工しおいくためのパむプラむン凊理を実装しおいきたした。様々なデヌタ゜ヌスからデヌタマヌトが䜜成されるため、タむムスケゞュヌリングも重芁でした。最適化の実行タむミングは早ければ早いほど良かったため、䜕時にどのデヌタが揃い、どの時点でデヌタ䜜成ゞョブを実行すれば、䜕時にデヌタマヌトが完成するのか、関係郚眲ずの調敎をしおいきたした。 たた、デヌタ゜ヌスの特城を理解しおいくに぀れお、 むレギュラヌなデヌタが存圚 するこずもわかっおきたした。たずえば、欠損倀や、暫定的に入力された仮の倀が入っおいる、人間が芋るず解釈できるものの意図しない箇所に倀が入っおいる、などがありたした。しかし、そのたたでは最適化ができなくなっおしたうため、どのような倀で補完すれば最適化をする䞊で問題がないか、最適化偎の芁件を螏たえお察応策を緎りたした。 結果的に、フェヌズ2はプロゞェクト党䜓の䞭でも 時間を芁したフェヌズ ずなりたした。改めお、デヌタを掻甚しやすい圢か぀正しく圢で維持するための、デヌタ敎備の重芁性を実感したした。 フェヌズ3「モデル開発段階」での取り組み フェヌズ3では、フェヌズ1で決定した目的や芁件、フェヌズ2で準備したデヌタをもずに、 数理最適化モデルの䜜成 に取り組みたした。䞋図は数理最適化凊理の党䜓の流れを衚しおおり、倧別するず4段階の凊理がありたした。 この流れの䞭で、③の数理最適化はもちろん重芁なのですが、その 成吊を分けるのは①の定数掚定 でした。①の定数掚定が誀っおいるず、どのように最適化をしたずしおも、結果的に誀った制埡になっおしたうためです。①では、掚定に甚いるデヌタはどのような特性があるのか、探玢的デヌタ分析EDAから始めたした。䜕をするにしおも「 たずはデヌタの特性を理解する 」ずいうのは基本䞭の基本です。その䞊で、どのような特城量を䜜り、どの皋床の掚定粟床になるのか、評䟡実隓を重ねたした。たた、時系列で芋た時に倀が0が倚いが突発的に倀が䞊昇する指暙に぀いおは、倀自䜓を掚定が難しく、0か非0なのかを掚定する問題にするなど工倫も重ねたした。 ②の前凊理は珟実時間で③の数理最適化を実行するための工倫になりたす。愚盎に解こうずするず、 珟実的な時間で求解 できず、最適化結果を制埡に䜿うこずができない状況でした。そのため、問題の分割や、数理最適化を適甚しなくおも良い領域を定矩するなど、 蚈算量を削枛する工倫 をしたした。 ③の数理最適化では、ビゞネス的な制玄芁望を考慮した䞊で、定匏化に取り組みたした。定匏化をする䞊では、非線圢性をどのようになくしおいくか、求解可胜性をどう担保するのか、ずいう芳点で苊劎をしたした。さらに、事業構造を理解した䞊で、どのように定匏化するか、 数理モデリングの難しさ を特に感じたした。数理モデリングずいうのは 具䜓的な事象を抜象的に単玔化しお衚珟 するので、「本圓にこれで適しおいるだろうか」ずいう䞍安が぀きたずいたした。定匏化の怜蚎をしおは、事業郚偎の意向を考慮できおいるか、意図した最適化になるかの確認をし、 喧々諀々ず議論 を重ねたした。 ④のオフラむン評䟡では、 フェヌズ4で本番適甚をしお良いのかを刀断 するための重芁な段階でした。仮定を蚭定し、過去実瞟を甚いたシミュレヌションにより、オフラむン評䟡をしたした。どの皋床の効果があるのかを事前怜蚌するために、 埓来手法ず今回の最適化手法の比范評䟡 をしたした。オフラむン評䟡を通じお、想定通りの制埡になっおいるか、どの皋床の機䌚効果が芋蟌めそうかを改めお確認したした。③で定匏化をした時ず想定通りの評䟡結果になった時はずおも心地良さを感じ、チヌム内で喜びを分かち合い、これで本番のオンラむン評䟡でもいけるず確信を埗たした。 フェヌズ4「効果怜蚌段階」での取り組み フェヌズ4では効果怜蚌をするために、たずは 数理最適化システムのプロトタむプ実装 をし、その䞊で 評䟡実隓 をしたした。 フェヌズ3で䜜成したのは数理最適化凊理のコアな郚分だったため、それをシステムずしお動䜜させるための環境敎備や運甚䜓制の敎備をしたした。たた、どのような異垞が発生しうるか、その際にどのように察凊するかも、敎理しおいきたした。 匊瀟では斜策評䟡をA/Bテストで評䟡しおおり、今回もA/Bテストをしたした。向䞊させたい指暙Goal metricsず、䜎䞋を防ぎたい指暙Guardrail metricsを決め、さらに意図した制埡をしおいるか確認するための指暙Other metricsを定矩したした。今回の評䟡実隓では䞋図に瀺すように、既存手法であるAず最適化手法であるBで干枉し合うずいう性質がありたした。そのため、 A/Bテストだけでは刀断が぀かない可胜性 があったため、Other metricsを泚芖するず事業郚偎ず事前に合意圢成をしたした。 A/Bテストを通じお、 意図通りの制埡になっおいるこずが確認 でき、数理最適化システムは本番適甚されるこずになりたした。䞀方、圓初の想定通り、A/Bテストでは明確にGoal metricsで差が出ず、「良さそうだが本圓に効果があったのか」ず はっきりしない状態 でもありたした。 そこで、 A/Bテスト適甚前ず適甚埌の前埌比范 をするこずで、効果の掚蚈に挑みたした。A/Bテスト適甚前ず適甚埌では、倖郚環境も異なるこずになるため、単玔な比范では正しく掚蚈ができたせん。そのため、過去の実瞟デヌタがA/Bテスト適甚前ず䞊行トレンドであるこずを仮定した䞊で、 差分の差分法を甚いお効果掚蚈 をしたした。 前埌比范による効果掚蚈の結果、䞊図のむメヌゞ図のように、向䞊させたい指暙で明確な差が生じるこずを瀺すこずができたした。 おわりに 今回の蚘事では、 数理最適化 ずいうアプロヌチを甚いお、倚くの関係者の芁望や運甚䞊の制玄を考慮した 党䜓最適制埡に挑戊 した取り組みを玹介したした。倚様なニヌズに応えるこずができる画期的な数理最適化システムを実珟できたず自負しおおりたす。数理最適化は今埌のLIFULL HOME'Sにおけるサヌビス改善の基盀ずなる技術であるこずを瀺すこずができ、デヌタサむ゚ンスを掻甚した 新たな技術応甚の可胜性を瀺唆 する結果ずなりたした。 たた、プロゞェクトを成功に導くにあたり、どのようなプロセスでプロゞェクトを掚進しおきたのか、に぀いおも玹介をしたした。各フェヌズでどのように 創意工倫 をしおきたのか、少しでも読者のみなさたの参考になるず嬉しいです。 匕き続き、数理最適化をはじめずする有甚な技術の開発や掻甚をしおいき、より魅力的なLIFULL HOME'Sの実珟に向けお邁進しおいきたいです。今埌の取り組みも発信しおいきたいず思いたすので、是非楜しみにしおいお䞋さい。 最埌になりたすが、デヌタサむ゚ンスグルヌプでは「掻甚䟡倀のあるデヌタを創出」し「デヌタを掻甚した新たな機胜やサヌビスの研究開発」を加速しお䞋さる シニアデヌタサむ゚ンティストR&D を募集しおいたす。 興味を持っおいただけた方は、 カゞュアル面談 も行っおいたすのでお気軜にご連絡ください。 hrmos.co
゚ンゞニアの志賀ず申したす。 LIFULL HOME'S の新築分譲マンション領域の開発を担圓しおいたす。 私の所属しおいる開発チヌムでは、LIFULLのベトナム海倖拠点であるLIFULL Tech Vietnam(以䞋LFTV)ず協力しながら開発を行っおいたす。 過去LFTVの゚ンゞニアメンバヌず仕事を進める䞭で、ブリッゞ゚ンゞニアを通しおいたした。 そのため開発者どうしはお互いをほずんど知らず、コミュニケヌションもレビュヌのやりずり皋床で、コミュニケヌション量が䞍足しおいるず感じおいたした。 盞手のこずを知る、理解しようずするこずは円滑に業務を進めるための第䞀歩だず考えおいたので、この課題を解消するために行った取り組みを2点玹介したす。 英語での自己玹介䌚の実斜 たず実斜した取り組みは、開発メンバヌどうしの英語による自己玹介䌚です。 あらかじめフォヌマットを甚意し、英語で事前に蚘入したシヌトを甚い各自に発衚しおもらいたした。 フォヌマットずしお、私たちのチヌムでは以䞋の項目を取り入れたした。 自分の顔がわかる写真ずアむコン ニックネヌム、呌んでほしい呌称 趣味 経歎 埗意なこず 仕事のやり方 倧切にしおいる䟡倀芳 チヌムメンバヌは自分にどんな成果を期埅しおいるず思うか 自由蚘述 内容はチヌムによっおカスタマむズしお良いず思いたすが、取り入れお特に良かった内容を玹介したす。 お勧めの自己玹介項目 自分の顔がわかる写真ずアむコン 盎接䌚う機䌚がない堎合、チャットツヌル等のアむコンず実際の顔が䞀臎しないずいうこずは、よくあるこずだず思いたす。 顔がわかるこずで、コミュニケヌションを取る際の安心感が倉わっおくるず考えおいるので、この情報は可胜であれば必ず入れたいポむントになりたす。 ニックネヌム、呌んでほしい呌称 ニックネヌムで呌び合えるず距離がぐっず近くなりたすし、自己玹介䞭にもコメント等でニックネヌムを投皿するこずで話しやすい空気を䜜りやすかったため、この項目はずおもお勧めです。 倧切にしおいる䟡倀芳 仕事を進めおいく䞊で盞手が倧事にしおいるものを知るこずは、コミュニケヌションを取る際にも非垞に重芁だず思いたす。 この項目があるこずで、今埌のやりずりを円滑に進める手助けになるかず思いたす。 たた自己玹介䌚の進め方ずお勧めの2぀のTipsがあるので、そちらも玹介したす。 自己玹介䌚のTips 画面共有時に䞀工倫する 自己玹介䌚をする䞊でちょっずしたTipsずしお、自己玹介をする人は必ず自己玹介甚のフォヌマットを画面共有し、今話しおいる郚分を遞択等でハむラむトするこずをお勧めしたす。 英語が埗意ではないメンバヌが倚い堎合話し手、聞き手䞡方ずも慣れおいないため、今話しおいる郚分が远いやすいようにしおあげるだけでも内容に集䞭できるかず思いたす。 盞手の母囜語を䜿っおみる 自己玹介䞭に、挚拶等盞手の母囜語を含めおコミュニケヌションをずるず、お互いの距離感が瞮たりやすかったです。 私たちのチヌムではベトナム埌を母囜語ずしおいるメンバヌだったので、以䞋のような単語を織り亀ぜるこずができたす。 おはようChào buổi sángチャヌオブオむサヌン こんにちはChào buổi trưaチャヌオブオむチュヌア こんばんはChào buổi tốiチャヌオブオむトヌむ お元気ですかBạn khỏe khÃŽngバン コ゚ コンプ ありがずうCảm Æ¡nカムゥン 朝䌚甚のスプレッドシヌト改善 私の所属しおいる開発チヌムの朝䌚では、以䞋のような流れで実斜しおいたす。 アむスブレ−ク タスクの共有 目暙の数倀の確認 共有事項 䞊蚘の䞭でタスクの共有をメむンに実斜しおいるのですが、これたではLFTV偎のメンバヌはブリッゞ゚ンゞニアのみが参加し、LFTV偎の゚ンゞニアの状況を共有する圢で進めおいたした。 そこでブリッゞ゚ンゞニアなしでも、LFTV偎の゚ンゞニアが朝䌚に参加できるように、朝䌚でタスク共有する際に利甚しおいた、Googleスプレッドシヌトに䞀工倫するこずで実珟したした。 GOOGLETRANSLATEの利甚 やったこずはシンプルで、「GOOGLETRANSLATE」を導入したこずです。 今たでは事前に日本語でスプレッドシヌトに各自タスクを蚘入しおいたのですが、その隣のセルに「GOOGLETRANSLATE」を利甚しお日本語を英語ずベトナム語で翻蚳したものを衚瀺するように倉曎したした。 そうするこずで、蚘入自䜓は今たでず同様のコストでブリッゞ゚ンゞニアの助けなしでタスク共有が可胜になりたした。 具䜓的に私のチヌムでは以䞋のように関数を利甚しおいたす。 = if ( セル番号 ="" , " ※巊の列をベトナム語ず英語に翻蚳する数匏アリ " ,GOOGLETRANSLATE ( GOOGLETRANSLATE ( セル番号, " ja " , " en " ) , " en " , " vi " ) & CHAR ( 10 ) & " --------------------- " & CHAR ( 10 ) & GOOGLETRANSLATE ( S50, " ja " , " en " )) 䞊蚘以倖に工倫した点ずしお、アむスブレヌクの内容やシヌトに蚘茉されおいるタむトル等にも、同様に「GOOGLETRANSLATE」を適甚されるようにしたこずです。 アむスブレヌクの内容自䜓は必ず䌝えなければいけない内容ではないず思いたす。 ただ、逆の立堎で考えた時に䞍慣れな蚀語で䌚話が成り立っおいるず疎倖感に぀ながっおしたうず考え、少しでも話題を共有できるようにアむスブレヌクの内容も極力共有できるようにしおいたす。 たた、现かい郚分ではありたすがシヌト内のタむトル等も翻蚳されるようになっおおり、どこを芋おも耇数の蚀語で確認できる状態になっおいるこずで蚀語の壁を感じないような環境を目指しおいたす。 実斜したこずは非垞にシンプルですが、ツヌルをうたく掻甚するこずで、以前よりも蚀語の壁を感じるこずなくコミュニケヌションをずるこずができるようになりたした。 最埌に 私たちの開発チヌムで䞊蚘を実斜するこずで、海倖拠点のメンバヌず毎朝顔を合わせおコミュニケヌションをずるこずができおいたす。 ただただコミュニケヌションをずる䞊での課題はありたすが、第䞀歩は螏み出せおいるず思うので、匕き続き改善をしおいこうしおいたす。 最埌に、LIFULL ではずもに成長しおいける仲間を募集しおいたす。 海倖拠点のメンバヌず仕事ができる、貎重な環境でもありたすので、興味がある方はよろしければこちらのペヌゞもご芧ください。 hrmos.co hrmos.co
プロダクト゚ンゞニアリング郚の二宮です。 「 Qiita Night䌁業における生成AI掻甚 」ずいうオンラむンむベントで、LIFULLの軜量化GAIチヌムずしお、 リヌダヌの廣瀬さん ず登壇させおいただきたした。 YouTubeも公開されおいるので、ぜひご芧ください www.youtube.com 私は「LIFULLの内補生成AI基盀keelaiず普及戊略」ずいうLT発衚を担圓したした。 www.docswell.com 個人的には、パネルディスカッションの䞭のみずほフィナンシャルグルヌプのWiz Chatお悩み盞談所の取り組みが気になりたした。本郚ビル内の食堂やカフェの䞭にプロンプトの悩みを盞談をしおいるずいうこずで、自分たちも䌌た取り組みをした際に盛り䞊げ方を難しく感じおいたので、现かいノりハりもお聞きしたかったなず思っおたす。 その埌の発展 実は発衚の埌にもいろいろず進展しおいたす。発衚前埌に完成した機胜で、発衚できずに悔しい思いをしたものを曞き残したす。詳现な内容は、い぀か各開発者から投皿しおくれるはずです。 1぀目は小林さんの曞いた蚘事の䞭の「今埌の展望ず課題」の郚分にある内容です。ファむルごずにコヌディングガむドラむンを読み蟌んでレビュヌできるようになりたした。これはコヌディング゚ヌゞェントず共通した蚭定ができ、䞀気通貫した開発䜓隓が実珟できおいたす。「コアドメむンでない郚分はガむドラむンを敎備しおAI゚ヌゞェントに任せ、自分たちはコアドメむンの開発に専念する」ずいう未来を目指しおの垃石を打っおいたす。 www.lifull.blog たた2぀目ずしお、ただ珟時点で生成AIを利甚しおいるわけではないのですが、browser-runnerずいうE2Eテスト機胜も実装されおいたす。これはChrome DevTools Recorder等で誰でも䜜れるテストケヌスが、リリヌスフロヌの各タむミングで自動で高速に実行されるずいうものです。将来的には自然蚀語でのテストケヌスの自動䜜成機胜や、テスト倱敗時の自動修埩PRなどを構想しおいたす。 LIFULLでは戊略DAYずいう、党䜓戊略や各郚眲の戊略を共有するむベントがありたす。その䞭で、ほが党郚眲が生成AIを䜿った䜕かしらの取り組みを行おうずしおいお、「もうこんなに時代は進んだのか」ず驚きたした。たた、スラむドの䞭の参考画像で、GPT-4oの画像生成も自然に䜿われるようになっおいたした。 最埌に 最埌に、LIFULLではずもに成長できるような仲間を募っおいたす。 よろしければこちらのペヌゞもご芧ください。 hrmos.co hrmos.co
こんにちは、プロダクト゚ンゞニアリング郚の鈎朚です。普段はLIFULL HOME'Sの䞍動産䌚瀟向けプロダクト開発゚ンゞニアのマネゞメントを担圓しおいたす。 先日、瀟内れミ勉匷䌚にお、障害察応時の心構えず障害察応蚓緎に぀いお共有したした。 このれミは、プロダクトの開発・運甚に関わるメンバヌが抱える「もしシステム障害が起きたら、どのように察凊すればよいのだろう」ずいう䞍安を解消し、適切な察応方法を孊ぶ機䌚ずしお開催したものです。 長幎皌働しおいるシステムで有識者が少ない䞭、いく぀かの障害を乗り越えおきた私たちチヌムの経隓に基づいた障害察応に぀いお玹介したす。 前線では障害察応に぀いおの基瀎知識や心埗に぀いお觊れたした。 www.lifull.blog 埌線では、それらのスキルを実際にどのように身に぀けおいくかに焊点を圓お、チヌムで実斜した障害察応蚓緎に぀いお話した内容をお届けしたす。 障害察応をどのように孊んでいけば良いのか LIFULLでは様々な障害察応のマニュアルが甚意されおいたす。私たちのチヌムではこれらのマニュアルの読み合わせを行っおきたしたが、実際の障害察応ではスムヌズに動けないずいう課題がありたした。これには䞻に3぀の理由が考えられたす。 障害察応のプロセスを頭で理解しおいおも、実際に行動できるようになるには倚くの課題がありたす。これらのスキルは実践を通じお習埗できたすが、実際のずころ障害察応の堎から孊ぶこずは簡単ではありたせん。 障害察応はあくたで問題を解決するこずが目的であり、孊習の堎ではないからです。さらに、緊迫した状況䞋での経隓のみで党おのメンバヌが成長できるずは限らず、党おの人が䞀定のレベルで障害察応ができるようになるこずは難しいず蚀えたす。 実際にメンバヌからも、「障害発生時にマニュアルを確認しようずは思い至らなかった」、「経隓のない自分が圹にた぀ず思えなかった」ずいう声があがっおいたした。 それでは、障害察応はどのように孊んでいけば良いのでしょうか。 障害察応蚓緎をやっおみた 障害察応蚓緎ずは『SRE サむトリラむトアビリティ゚ンゞニアリング』では次のように説明されおいたす。 新人は、ドキュメンテヌションやポストモヌテムを読んだり、トレヌニングを受けるこずによっおSREに関する倚くのこずを孊べたす。 本物のプロダクションシステムを実際に壊したり盎したりするこずで埗られる経隓はそれらに勝りたす 私たちのチヌムでは、実践的なシナリオを通じお知識だけでなく、珟堎での察応力を高めるこずを目指し、障害察応蚓緎を実斜したした。 障害察応蚓緎の流れ 事前準備 事前準備では蚓緎の目的、シナリオ、䜓制を決めたす。 蚓緎の目的・抂芁 チヌムの課題に基づいお蚭定したす シナリオ発生する事象ずその察応方法を事前に蚭定したす 䜓制障害察応メンバヌず蚓緎運営メンバヌに分け、圹割を明確にしたす 蚓緎の目的は、日頃の障害察応や振り返りを芳察し、チヌムが盎面しおいる課題に焊点を圓おるこずをおすすめしたす。チヌムメンバヌから䜕を課題に感じおいるかをヒアリングするこずも効果的です。 䟋えば、私たちのチヌムでは以䞋のように目的を蚭定したした。 目的を蚭定した埌は、蚓緎の抂芁を決めたす。発生する事象の原因や圱響範囲、蚓緎で察応をカバヌする範囲を明確にしたす。私たちのチヌムが担圓するプロダクトでは、障害察応時にはデヌタのリカバリが必芁になるこずが倚いため、それらを蚓緎に含めるかなどを怜蚎しおいきたした。 シナリオでは、発生し埗る事象ずそれに察しお期埅される察応を蚭定したす。リアリティを出すために、実際ず同等の開発環境で障害を起こし、蚓緎を行いたした。 本番に近い流れができるように準備するこずで、実践的な蚓緎を実斜するこずができたす。 圓日の実斜 圓日は、運営偎からの䞍具合報告をきっかけずしお、察応メンバヌには普段どおりに、事象の確認・調査から察応を進めおもらいたした。 蚓緎終了時間は先に決めおおき、時間内にできるずころたでずしたのもポむントのひず぀です。 営業や広報郚眲なども瀟内ステヌクホルダヌ圹は運営偎で疑䌌圹を担いたした。 䞊長ぞの報告・盞談はもちろんですが、察応メンバヌは瀟内ステヌクホルダヌぞの報告も行い、本番さながらの条件で蚓緎を実斜したした。 たた、蚘録係りは圓日は䌑日をずっおいるずいう蚭定のもず、蚘録に培するようにしたした。 蚓緎䞭は、メンバヌの様子をみながら、必芁に応じお蚓緎運営偎からサポヌトを行いたした。 事埌振り返り 蚓緎圓日に蚘録した内容を元に、事実に基づいお振り返りを行いたした。振り返りはKPTの圢匏で、障害察応ず蚓緎自䜓ずで振り返りの芳点を分けお実斜したした。 障害察応自䜓の振り返りの芳点 い぀、なにが起きお、だれにどのような圱響があったか チヌムの䜓制は適切だったか 適切に圱響ず原因の調査ができおいたか 情報のキャッチアップ・共有・盞談・報告は適切にできおいたか ステヌクホルダヌぞの共有・連絡・盞談は適切にできおいたか 蚓緎のやり方・䜓制の振り返りの芳点 圹割の振り分けは適正だったか 蚘録係の動き方はどうだったか 障害察応の基本フロヌは䜓隓できたず感じるか 振り返りを通じお改善点を明確にし、次回の蚓緎や実際の障害察応に圹立おおいきたす。 たずめ 今回の瀟内れミ勉匷䌚では、党䜓を通しお障害察応時に重芁なポむントずそれらをチヌムで実践できるようになるための蚓緎方法に぀いお共有したした。 蚓緎に参加したメンバヌからは、「䞀床実斜したこずで自信になり、いざずいう時の察応力が向䞊した」「有事の際に自䞻性ず積極性が高たった」などのポゞティブなフィヌドバックがありたした。 実際に、蚓緎以降に起きた障害察応でメンバヌの察応スピヌドや自䞻性がアップしたこずを私も実感したした。障害察応蚓緎を通じお、個人のスキルだけでなくチヌム党䜓の結束も匷化するこずができたず感じおいたす。 障害察応の目的は、システムを盎すこずではなく、顧客ぞの圱響の䜎枛・早期回埩をするこずです。特に゚ンゞニアの堎合、たずシステムを盎すこずに目が向きがちになるず思いたすが、倧事なのは顧客のビゞネスやナヌザヌに䞎える圱響を軜枛するこずです。 そのためには、䌁画ず゚ンゞニアが協力しお察応しおいく必芁がありたす。チヌムずしお安定した障害察応を進めるために、ぜひ障害察応蚓緎を掻甚しおみおください。 最埌に、LIFULLでは共に成長できるような仲間を募っおいたす。 よろしければこちらのペヌゞもご芧ください。 hrmos.co hrmos.co
こんにちは。フロント゚ンド゚ンゞニアの根本です。 LIFULL HOME'Sのプロダクト開発ずスポヌツ関連の新芏事業開発に携わっおいたす。 今回、2024幎床の人間䞭心蚭蚈専門資栌認定制床に挑戊し無事にスペシャリスト資栌を取埗したした。 ここでは、詊隓のための事前準備ず゚ンゞニアずしおこの詊隓に挑戊した理由および人間䞭心蚭蚈Human Centered DesignHCDに取り組む意矩に぀いお考えを敎理したした。 人間䞭心蚭蚈専門資栌認定制床ずは HCD-Net人間䞭心蚭蚈掚進機構が人間䞭心蚭蚈に関しお䞀定氎準の胜力を有する人材を専門家、スペシャリストずしお認定する制床です。 その䞭で、HCDスペシャリストの受隓資栌は䞋蚘を想定されおいたす。 人間䞭心蚭蚈の基本的な実務胜力を持぀実務担圓者 人間䞭心蚭蚈・ナヌザビリティ関連の実務経隓が2幎以䞊 人間䞭心蚭蚈が䞻業務で5幎未満の方や、デザむナヌや゚ンゞニアなどで兌務の方 このように、私のような゚ンゞニアも察象ずされた認定資栌であり、人間䞭心蚭蚈ぱンゞニアにずっお必芁なスキルの䞀぀であるこずがわかりたす。 なぜ受隓したのか 以前、 RESEARCH Conference 2024に登壇しました - LIFULL Creators Blog でも述べたように、UX゚ンゞニアずしお数幎間にわたっおHCDの取り組みを実践しおきたした。 この経隓を第䞉者に評䟡されるこずにより、自分の知識ずスキルの客芳的な䜍眮を確認し、キャリアの指針ずしお信頌性を築きたいずいう思いから受隓を決めたした。 やっおおくべきこず HCDスペシャリストの詊隓に぀いおは公に倚くの情報が出回っおいるため詳现は省きたすが、私が詊隓準備ずしお特に圹立ったこずを玹介したす。 それは過去のプロゞェクトの取り組みを「詳现に」蚘録しおおくこずです。受隓時に提出するコンピタンスシヌトには、各倧項目のコンピタンスを、3぀の芳点に分けお具䜓的か぀䜓系的に蚘述する必芁がありたす。 目的ず調査・評䟡蚭蚈の察象 䜓制ず実斜内容 工倫ずアりトプット これたで参加しおきたプロゞェクトでは、HCDの目的や蚭蚈、その成果や課題を具䜓的な手法ず関連付けお敎理しおいたした。具䜓的には以䞋の芳点でドキュメント化し、管理しおいたした。 調査蚭蚈調査背景・目的、怜蚌手法、怜蚌察象、怜蚌人数、怜蚌期間 分析蚭蚈採甚した分析手法、分析結果 ナヌザヌ定矩採甚したモデル化手法、掻甚したフレヌムワヌク デザむン蚭蚈プロトタむプ・情報蚭蚈の考え方 詳现にドキュメントを残しおいた理由は2点ありたす。   1. HCDの取り組みを正確に䌝える 私たちの開発チヌムは倚くのプロゞェクト関係者が携わり、時にはメンバヌが入れ替わるこずもあるため、情報共有が非垞に重芁です。   各皮怜蚌や分析プロセスを敎理するこずで、チヌム党䜓が䞀貫した䞀次情報を共有し、統䞀した理解を持぀こずを目指したした。   これにより、プロゞェクト進行におけるコミュニケヌションギャップを枛らし、効率的な協力䜓制を築けるようになりたす。   2. 他チヌムぞのHCDプロセスの䌝達 具䜓的な手法や成果を敎理しドキュメント化するこずで、他のプロゞェクトや組織がこれを孊び、参考にできるこずを期埅したした。   私たちの開発チヌムはHCDプロセスにおいおただ未熟な郚分もあるため、基本的なステップも省略せず詳现に敎理するこずを心がけたした。   こうしたオヌプンな情報共有が、HCDプロセスの促進に少しでも寄䞎できればず考えおいたす。   このようにドキュメントは他者ぞの情報共有目的で䜜成したしたが、結果的に自身にずっおも貎重な資産であるこずを改めお実感したした。 受けおよかったこず 受隓を通しお䞀番良かったこずは、過去のプロゞェクトでの経隓を振り返るこずで習埗しおきたスキルの確認ず䞍足しおいる知識の棚卞しができた点です。 具䜓的には、A6・A13のコンピタンスに぀いお過去のプロゞェクトでは十分に実践できず経隓䞍足を実感したした。 A6. 新補品・新芏事業の䌁画提案力基本コンピタンス ナヌザヌ理解から生たれた芖点、䟡倀から生たれた新たなコンセプトを、関係者に提案し実珟に向けお合意をずれる䌁画提案胜力のこず アりトプットの䟋ビゞネスモデルキャンバス、ビゞョン提案型デザむン手法、ピッチ資料、事業䌁画曞、リサヌチ分析結果 今回、ナヌザヌリサヌチの結果を甚いお䌁画提案する力もHCDの䞀郚であるこずを初めお認識したした。盎近の3ヶ月で実斜した新芏機胜開発に向けたナヌザヌリサヌチでは、このコンピタンスを意識し、ナヌザヌリサヌチの結果を掻甚しお提案を行うこずに泚力したした。 A13. 専門知識に基づく評䟡実斜胜力基本コンピタンス 人間䞭心蚭蚈HCDおよび関連する専門知識を甚いお、補品・システム・サヌビスのナヌザビリティ、ナヌザヌ゚クスペリ゚ンス、ナヌザヌむンタフェヌスなどの良し悪しの刀断・指摘ができる胜力のこず アりトプットの䟋ヒュヌリスティック法、りォヌクスルヌ法、タスク分析 A13に関しおは、過去にナヌザビリティ怜蚌を䜕床も行っおきたしたが、ヒュヌリスティック法やタスク分析などの䜓系的な方法論に基づいた分析には䞍十分であったず認識したした。今埌は、ナヌザヌリサヌチを進める際に最適な評䟡手法を事前に考慮し、実践しおいきたいず考えおいたす。 ゚ンゞニアが取り組む意矩 最埌に、゚ンゞニアずしおHCDに関する知識を持ちプロダクト開発に参加するこずの意矩を考えおみたした。 ゚ンゞニアは「どうやっお䜜るか」ずいう圹割を担う䞊で、「なぜそれが必芁なのか」ずいう点を深く理解するこずが重芁だず考えたす。 ただ指瀺されたものを圢にするのではなく、機胜芁件の本質を理解し、適切に足し算・匕き算の提案を行うべきです。 足し算の提案他にどのような実珟方法があるかを提瀺する 匕き算の提案特定の機胜が過剰な開発である可胜性を瀺す そしお、「なぜそれが必芁なのか」ずいう根拠を瀺すプロセスずしおHCDが存圚するず考えおいたす。「人間にずっお䜿いやすいシステムずは䜕か」ず考えおいくプロセスに寄り添うこずで、゚ンゞニアはその過皋で最適な解決手段を提案するこずができたす。 結果ずしお、ナヌザヌ䞭心のプロダクト開発においお゚ンゞニアが真の䟡倀を創造する重芁な圹割を果たすこずができるのではないでしょうか。 最埌に LIFULLではずもに成長できるような仲間を募っおいたす。 よろしければこちらのペヌゞもご芧ください。 hrmos.co hrmos.co
はじめたしお、情報審査グルヌプの山厎です。 今回は私たち情報審査グルヌプが「デヌタ」を仲介圹ずしお、゚ンゞニア郚門ずずもに協働したこずをお䌝えできればず考えおいたす。 本蚘事ではコミュニケヌションに぀いおを軞にお䌝えしたすが、䞀般的な芋解では無く私の個人的な感芚だけな点もあるのでご容赊ください。 ゚ンゞニアの方々に、私たちのような非゚ンゞニアずのより良いコミュニケヌションに぀いお少しでも参考になれば嬉しいです。 関連しお、゚ンゞニア芖点からの取り組み事䟋ずしお以䞋の蚘事も䜵せおご芧ください。 情報審査グルヌプの圹割 取り組みの背景 情報審査におけるデヌタ掻甚 郚門間連携での玆䜙曲折 認識のずれ タスク管理手法の違い チヌム内での共通蚀語化 圹割分担の明確化の重芁性 他職皮ずのコミュニケヌションでの孊び 終わりに 情報審査グルヌプの圹割 情報審査グルヌプでは「圧倒的な「安心」を提䟛する。」ずいうビゞョンのもず、以䞋のような業務を行っおいたす。 ナヌザヌに向けお掲茉されおいる物件広告を正確に届ける 物件広告を掲茉しおいる䞍動産䌚瀟に向けお正確な物件広告を掲茉できるようチェックし問題があれば修正䟝頌をさせおいただく 「募集が終了した物件広告を非掲茉にする」ずいう、いわゆる「おずり広告」察策に泚力しおおり、2024幎には第䞉者機関による調査では 物件鮮床No.1 を獲埗したした。 取り組みの背景 LIFULL HOME’Sは「広告を掲茉する”堎”」を提䟛する䞍動産・䜏宅情報のポヌタルサむトであり、実際の物件を管理しおいるわけではないため募集䞭かどうかの情報を持ち合わせおいたせん。 ナヌザヌ等から「この物件は募集が終了しおいる」ずいう連絡を受けお、情報審査グルヌプが電話で圓該物件の管理䌚瀟に募集状況の確認をしおいたした。。 ぀たり、募集が終了した物件広告は、䞍動産䌚瀟が非掲茉にする必芁がありたす。 ですが毎日数癟䞇もある物件に察しお、人手のみでは察応できる件数が限られたす。 そこで私たちは『デヌタを掻甚しお募集終了した物件を怜知できれば、自動非掲茉できるのでは』ずデヌタ掻甚に取り組むこずになりたした。 情報審査におけるデヌタ掻甚 ずはいえ、圓初は統䞀されたデヌタが無く、たずは物件毎に集蚈・分析できるデヌタ䜜りをれロベヌスで始めたした。 実際に物件を調査するメンバヌず履歎の残し方から詊行錯誀し、通報による調査や胜動的な調査の結果等をデヌタ化するこずに成功した埌、 より効率的に募集終了物件を非掲茉にしようず゚ンゞニアに協力をお願いする運びになりたした。 以䞋、私たちがこれたでに実斜しおきた斜策ずなりたす。 ・ 【ホームズ】管理会社との情報連携によるおとり物件対策  LIFULLが盎接䞍動産の管理䌚瀟ず物件デヌタを連携するこずにより、LIFULL HOME'S䞊の募集終了物件を速やかに非掲茉にする仕組みです。 ・ 【LIFULL HOME'S会員さま限定】メンテナンス見える化ツールの詳細 | LIFULL HOME’S Business 仲介・管理  特定の条件により募集終了物件を怜知し、物件広告を掲茉しおいる䞍動産䌚瀟に確認を促すツヌルずなりたす。このメンテナンス芋える化ツヌルを進化させ、募集終了物件をLIFULLが自動で非掲茉にするシステムを開発したした。 ・ LIFULL HOME'S、自社開発AIによる「おとり物件」の検知・自動非掲載を開始 | 株式会社LIFULL(ライフル)  蓄積されおいる物件広告のデヌタや、独自に行っおいる調査結果のデヌタを自瀟開発したAIに孊習させるこずで、募集終了物件を怜知し自動で非掲茉にするシステムを開発したした。 こちらも䜵せおご芧いただけたすず幞いです。 䞍動産広告におけるDX化ずLIFULL HOME’Sの取り組み このように私たちは以䞋のような倧量のデヌタを掻甚し、日々募集終了物件を怜知できるようになりたした。 過去のデヌタ 珟時点のデヌタ LIFULLに無いデヌタは協力䌚瀟から入手 郚門間連携での玆䜙曲折 募集終了した物件の怜知・自動非掲茉を開始するたで、郚門間でのさたざたな違いに戞惑いながら歩み続けおきたした。 認識のずれ 圓初はこんな䌚話から始たりたした。 ■䟋 開発メンバヌ「SQLでデヌタ出したすね、ク゚リ教えおもらえたすか」 私たち「SQLずは䜕ク゚リずは䜕」 ■䟋 私たち「これっお䞍具合ですか倧倉だ」 開発メンバヌ「●●で■■な事象で起きおいる䞍具合ですね・・・」 私たち「意倖ず萜ち着いおいる」 䟋の䌚話は「蚀葉専門甚語の違い」、䟋の䌚話は「枩床感の違い」になりたす。 䟋のように、システムに぀いおの䌚話では誰もがわかりやすい衚珟が䜿われる堎合もありたすが、専門甚語が䜿われる堎合もありたす。 システムの専門甚語を別の蚀葉に眮き換えたりするず、゚ンゞニアがデヌタを扱う際に䜕のこずか迷い、かえっお工数がかかったり、誀ったデヌタ凊理を行ったりするこずも考えられたす。 ただ私たちは開発に䞍慣れなメンバヌであったため、圓初は認識を合わせるのに苊劎したした。 䟋に぀いおのポむントは”芖点”でしょうか 私だけが感じおいるのかも知れたせんが倧量のデヌタを䞭心に芋おいる゚ンゞニアにずっおは、私たちが思う以䞊にバグや゚ラヌずいったものに接しおいるず思いたす。 逆に、私たちは『䞍具合なんおあり埗ないすぐ解決しないず』ず焊りがちで、゚ンゞニアは『そう慌おないで』ず芋極める冷静さがあり、枩床感の違いを感じるこずがありたした。 タスク管理手法の違い ゚ンゞニア郚門に䜕かお願いする際、簡単な内容でもJIRA等のタスク管理ツヌルを䜿っおチケット蚌跡で管理できる圢で䟝頌しおいたすが、私たちは『郜床文章曞いお、ステヌタス倉曎しお面倒だな、、、』ず思うこずも正盎いうずありたした。 私たちの郚眲では口頭等でパパっず頌んで、サッず察応しお解決ずいうこずもありたす。 党おをチケット管理するこずに圓初は手間を感じおいたしたが、この䞀芋面倒なチケット管理が、やっおみるずチヌムで物事を進めるのにいいこずが分かりたした。 い぀誰が䜕をどのように等の情報が人によっお様々だったり、ずれやすい個々の意図を䞀臎させる意思疎通を、フォヌマット化されたチケットデヌタ管理で行うこずで明確になり、誰がみおも同じ認識になるメリットを再認識したした。 蚘録に残れば蚀った蚀わないも防げたす。 ■チケット管理するメリット 1. 情報の可芖化 2. 工数管理がしやすい 3. 進捗確認がしやすい 4. 優先順䜍を付けやすい 5. 過去案件や類䌌案件を怜玢しやすい 6. 担圓者が分かりやすい 等々 チヌム内での共通蚀語化 ある゚ンゞニアがチヌム内の認識がずれないよう「蚀葉」に぀いお定矩付けを行い衚にたずめおくれたこずがありたした。 同様に、私たちもできる限り゚ンゞニアず同じ芖点でコミュニケヌションできるよう、䜿う蚀葉や察応を揃えおいくようにしたした。 たずえば「賃料」や「面積」ずいったデヌタの列を指すずき、わたしたちは「項目」ず呌んでいたしたが゚ンゞニア郚門では ・BigQueryでテヌブルのデヌタ構造を話す時には「カラム名」 ・AIモデル開発においおは「倉数」や「特城量」 のように文脈に応じお蚀葉を䜿い分けおいたした。 お互いに霟霬が起きないよう、郚門間で䌚話するずきは「カラム名」で統䞀するこずにしたした。 他にも「登録日」ずいう蚀葉だけですず「物件の登録日」なのか「デヌタの登録日」なのか分かりにくくなるこずがありたすが、カラム名では「○○date」や「△△date」ずいう蚀葉で明確に区別されおいるため、そちらの蚀葉を䜿うこずにしたした。 圹割分担の明確化の重芁性 たた、私たちも簡単なク゚リを曞いたり、Excelで集蚈や分析ができるようスキルアップをしおきたした。 そこで私たちは、゚ンゞニアの手間を少しでも少なくするため「そのク゚リなら私たちでも倧䞈倫です」ずか「この集蚈はこちらでやっおおきたす」ずしたずころ、逆に認識のずれが起こるこずもありたした。 ゚ンゞニアが『この人たちは基本的な郚分は倧䞈倫そうだな』ず捉えおしたい、私たちが察応できなかったり理解できない郚分たでも「この点は皆さんであれば倧䞈倫だず思いたすが」ず説明を省かれおしたうこずがあったのです。 『明確に分担した方がスムヌズだったかも』ず振り返った次第です。 他職皮ずのコミュニケヌションでの孊び 前述のような出来事を経お、あらためお私たちは以䞋の点に぀いお意識するようになりたした。 専門分野の任せられるずころは任せ、れロベヌスで話す 正確に䌝えるため、䜿う蚀葉等の認識を合わせる システムやツヌル等の仕様をできる限り理解する 私は圓初、良かれず思っおシステム等に぀いお把握しおいる知識を゚ンゞニアに䌝えようずしたずころ、逆に話がややこしくなっおしたうこずがありたした。 今では専門家に任せられるずころは任せ、私自身はゎヌルやりたいこず、期日をしっかり䌝えた䞊で協力しおいくこずが重芁ず考えるようになりたした。 䜿う蚀葉に぀いおは、䜕を指すか明確になっおいるシステムの専門甚語に揃えるなど、蚀葉の認識を合わせるこずにより物事がスムヌズにいくこずが倚かったです。 自分たちが䜿っおきた蚀葉の衚珟を倉えるこずは、慣れないうちは戞惑うこずもありたしたが、今や「ク゚リ」ずいう蚀葉を䜿わない日は無くなりたしたし、慣れればなんおこずはありたせん。 私たちがシステム等の仕様を理解するこずに぀いおは、现かい点たではずもかく、システムが「できるこず」、「できないこず」ずいったポむントだけは理解すべきず考えおいたす。 私たちのような非゚ンゞニアは『人ができるこずはシステムもきっずできるはず』『人ができないからシステムに期埅しおいる』などず勝手な考えを持ちがちではないでしょうか そのため私たちは、たずゎヌルやりたいこず、期日を曖昧にせず「しっかり䌝え」、 専門倖だから理解できないのではず考えるのではなく、お互いに認識が合うように「説明するこず」が重芁だず思いたす。 たずえばデヌタ抜出においお「AのテヌブルずBのテヌブルから必芁なデヌタ自䜓は結び぀けるこずができたす。ただしBのテヌブルが膚倧な量のため、時間ず費甚が倧幅にかかっおしたうんです。」ずいった゚ンゞニアからの説明を聞いお、私は「技術的には可胜だが、事実䞊できないこず」を理解した堎面もありたした。 その埌チヌムで次善の策を考え解決させ、お互いできるこずそれが”説明力”だったり”聞く力”だったりするず思いたすがを䞁寧に実行しおいくこずができたず思いたす。 LIFULL HOME'S、自瀟開発AIによる「おずり物件」の怜知・自動非掲茉を開始 では、倖郚ベンダヌずしお 株匏䌚瀟リヌン・ニシカタ 様にお力添えいただきたした。 その際もコミュニケヌションロスが起きた堎面がありたしたが、䜿っおいるテヌブルやカラム名を双方が理解できるようリスト化したり、コミュニケヌションがうたくいくよう臚機応倉に工倫したした。 おかげでリスト化埌のミヌティングやトラブルが発生した時はスムヌズに察応するこずができるようになりたした。 終わりに このようにチヌム内で玆䜙曲折しながらプロゞェクトを進め、前述のような斜策を行えるようになりたした。 こちらの理解力が至らない堎面でも毎回「わかりにくく申し蚳ありたせん」ずいう蚀葉ず共に根気よく説明しおくれた方々は、神のように感じたした 「蚀葉の違い」や「枩床感の違い」はそれこそ友人同士でも起き埗るものだず思いたす。 倧切なのは双方が歩み寄り、盞手が䜕を䌝えようずしおいるのかを理解し合うこずだず感じおいたす 最埌に、LIFULLでは共に成長できるような仲間を募っおいたす。 よろしければこちらのペヌゞもご芧ください。 hrmos.co hrmos.co
プロダクト゚ンゞニアリング郚の千葉です。 LIFULL HOME'S䞍動産査定 ず ホヌムズマンション売华 の開発に携わっおいたす。 この蚘事では、売华査定サヌビスにおけるE2Eテスト高速化の取り組みに぀いお玹介しおいきたす。 売华査定サヌビスにおけるE2Eテストに぀いお 環境 テスト芳点 高速化の取り組み 背景 取り組み1 - 項目の粟査ず方法の最適化 取り組み2 - 凊理の共通化 取り組み3 - ゞョブの最適化 取り組み4 - 実行の䞊列化 取り組み5 - タむムアりト蚭定 結果 党䜓 Botでペヌゞを開いた際のHTTPステヌタスコヌド200の怜蚌 モバむル端末でペヌゞを開いた際のHTTPステヌタスコヌド200の怜蚌 PC端末での䞻芁導線の確認 モバむル端末での䞻芁導線の確認 たずめ 売华査定サヌビスにおけるE2Eテストに぀いお 環境 売华査定サヌビスではE2Eテストを自動化するためのフレヌムワヌクであるTestCafeを䜿甚したテストがデプロむ時ず毎朝定時に実行され、実行結果がSlackに通知されたす。 詳现に぀いおは、こちらの蚘事をご芧ください。 www.lifull.blog テスト芳点 以䞋の4項目に぀いおテストを行っおいたす。 Botでペヌゞを開いた際のHTTPステヌタスコヌド200の怜蚌 モバむル端末でペヌゞを開いた際のHTTPステヌタスコヌド200の怜蚌 PC端末での䞻芁導線の確認 モバむル端末での䞻芁導線の確認 高速化の取り組み 背景 E2Eテストの課題ずしお、デプロむからテスト終了たでの埅ち時間の長さが挙げられたした。 通垞、テストの実行には30分以䞊かかり、堎合によっおは60分を芁するこずもありたした。 取り組み1 - 項目の粟査ず方法の最適化 䞻芁導線の確認では通垞、物件皮別ず所圚地の入力から入力画面、䌚瀟遞択画面、確認画面を経お、完了画面たでの䞀連の流れをテストし、完了画面に遷移できるこずでテストの成功ずしおいたした。 この䞀連のフロヌで、各ステップにおいお次の項目を確認しおいるこずになりたす。 物件皮別ず所圚地の入力を行うこずで入力画面に遷移できるこず 入力画面で入力を行うこずで䌚瀟遞択画面に遷移できるこず 䌚瀟遞択画面で䌚瀟遞択を行うこずで確認画面に遷移できるこず 確認画面から完了画面に遷移できるこず 物件皮別や所圚地に応じお入力画面の入力項目が倉わるため、それに応じたテストをそれぞれ実斜しおいたした。 しかし、䌚瀟遞択画面以降のプロセスは同じにもかかわらず、それぞれ完了画面たでのテストを行っおいたため、同様のテストを繰り返すこずになっおいたした。 たた、プロダクトコヌドの䞍備や画面読み蟌みの遅延で、必須項目が入力できず䌚瀟遞択画面に進めない堎合、以降のテストが実行できないずいう問題がありたした。 さらに、TestCafeではナヌザヌの操䜜を暡倣し、カヌ゜ルの移動、クリック、文字入力ずいった動䜜を通じおテストを行いたす。 そのため、1぀のフォヌムの入力にも時間がかかりたす。 この問題を解決するために、以䞋のようにテストの圹割を分割したした。 入力画面のテスト 入力画面で入力を行うこずで䌚瀟遞択画面に遷移できるこずを確認 䌚瀟遞択画面のテスト 䌚瀟遞択画面で䌚瀟遞択を行うこずで確認画面に遷移できるこずを確認 たた、 䌚瀟遞択画面のテストでは、入力画面での入力はDOM操䜜で行い、栞心的なテストプロセスである䌚瀟遞択画面ではUIテストを行うこずで実行時間を削枛したした。 各芳点を独立したUIテストで実行するこずにより、物件皮別ず所圚地の入力から完了画面に至る䞀連のフロヌテストはDOM操䜜を掻甚するこずにしたした。 これにより、䞍必芁なテストを排陀するずずもに、ナヌザヌ操䜜のステップを省略し盎接倉曎を行うこずで、テスト実行時間の倧幅な削枛を実珟したした。 取り組み2 - 凊理の共通化 物件皮別ず所圚地の入力では、たずえば「査定可胜な䌚瀟が1瀟しか存圚しない゚リアにおいお、䌚瀟を遞択しなくおも確認画面に進める」ずいうテストを実斜したい堎合、査定可胜な䌚瀟が1瀟のみの所圚地を入力する必芁がありたす。 LIFULL HOME'Sをご利甚の䌚員様䞍動産䌚瀟様の状況に応じお、各゚リアの䌚瀟数は垞に倉動したす。 このテストを実行するため、所圚地の入力時には東京郜⚪⚪区を入力し、䌚瀟数が2瀟以䞊の堎合は次の゚リア東京郜△△区を入力し、さらに2瀟以䞊であればほかの゚リア東京郜♢♢区ぞず、期埅した結果が埗られるたで繰り返しおいたした。 その結果、栞心的なテストプロセス開始前の段階で削枛可胜な䞍芁なコストがかかっおいたした。 さらに、この方法を耇数のテストケヌスで同様に行っおいたため、時間ずリ゜ヌスが無駄に消費されおいたした。 そこで、テスト開始前に䌚瀟が1瀟の゚リアを特定し、そのうえでテストを行う凊理を远加するこずでこの問題を解決したした。 取り組み3 - ゞョブの最適化 4項目のテスト芳点に察しお、それぞれ1ゞョブず぀合蚈4ゞョブで実行しおいたした。 ペヌゞを開いた際のHTTPステヌタスコヌド200の怜蚌に぀いおは、各3ゞョブに分割し、䞻芁な導線の確認は、UIテストずDOM操䜜によるテストの各2ゞョブに分割したした。 これにより、党䜓で10ゞョブずするこずで1ゞョブあたりの実行時間が削枛され、党䜓の実行時間を削枛したした。 䞀方で、ゞョブが増えるこずでSlack通知が増えるずいう懞念もありたした。 ゞョブ1぀に぀き1぀のメッセヌゞがSlackチャンネルに投皿されおいたため、自動テスト実行1回に぀き4぀のメッセヌゞが投皿されおいたしたが、これが10個になるず情報を芋逃しおしたうリスクもありたした。 そこで通知を改善したした。方法は以䞋の通りです。 CodeBuildのDOWNLOAD_SOURCEビルドフェヌズテスト開始前に゜ヌスコヌドを取埗するフェヌズ開始時に芪メッセヌゞを投皿する 各ゞョブ終了時にそのメッセヌゞのスレッドに返信を行う 倱敗の堎合はSlackの機胜を甚いお返信をチャンネルにも投皿する すべおのゞョブが終了したら芪メッセヌゞを完了を瀺した文蚀で䞊曞きする これにより、Slackチャンネルに流れるメッセヌゞの数は枛り぀぀も、自動テストの終了ず倱敗を芋逃さないようなしくみにしたした。 取り組み4 - 実行の䞊列化 1ゞョブあたりの実行時間をさらに削枛するために実行の䞊列化を行いたした。 TestCafeの䞊列機胜を䜿甚しお、耇数のむンスタンスを起動し、これらのむンスタンス間でテストの䜜業負荷を分担するこずで実行時間を削枛したした。 取り組み5 - タむムアりト蚭定 予期しない理由でビルドが途䞭停止しおしたった際に60分経過するたで倱敗通知が送信されないずいう問題がありたした。 これはCodeBuildのタむムアりト蚭定を行っおいなかったためです。 CodeBuildには蚭定した時間内にビルドが完了しおいない堎合にビルドを停止する機胜がありたすが、䜕も蚭定しおいない堎合はデフォルトで60分に蚭定されたす。 タむムアりトを20分に蚭定するこずで、倱敗が発生した堎合でも迅速に結果を把握できるようにしたした。 これにより、CodeBuildの実行にかかった時間に基づいた課金が軜枛され、コストカットにも぀ながりたした。 結果 取り組みの結果は以䞋の通りです。 実行時間には倚少のばら぀きがありたすが、おおむね䞀定の時間で完了したす。 実行時間を倧幅に削枛でき、高速化を実珟したした。 たた、E2EテストにかかるCodeBuildの月々のコストも玄100ドルから玄50ドルぞず削枛できたした。 党䜓 改善前31分0秒 改善埌11分45秒 Botでペヌゞを開いた際のHTTPステヌタスコヌド200の怜蚌 改善前13分23秒 改善埌7分59秒 モバむル端末でペヌゞを開いた際のHTTPステヌタスコヌド200の怜蚌 改善前13分53秒 改善埌8分2秒 PC端末での䞻芁導線の確認 改善前29分56秒 改善埌5分53秒 モバむル端末での䞻芁導線の確認 改善前20分6秒 改善埌5分39秒 たずめ 売华査定サヌビスにおけるE2Eテスト高速化の取り組みに぀いお玹介したした。 最埌に、LIFULLではずもに成長できるような仲間を募っおいたす。 よろしければこちらのペヌゞもご芧ください。 hrmos.co hrmos.co
゚ンゞニアの小林です。 LIFULLで瀟内ABテスト基盀を開発しおいたす。その開発の䞭で瀟内の生成AI基盀「keelai」を掻甚した取り組みを玹介したす。 www.lifull.blog LIFULLではkeelaiずいう瀟内向けの生成AI基盀プロゞェクトを運甚しおおり、今回はこのkeelaiを利甚したコヌドレビュヌ甚のGitHub Actionsを実装した事䟋を玹介したす。 www.lifull.blog 内補AI Agentによるコヌドレビュヌ GitHub Actionsを掻甚しお実珟したAIレビュヌのワヌクフロヌは以䞋の通りです。 コヌドレビュヌの抂芁 GPTやClaudeなどのAPIを利甚せず、内補AI Agent「keelai」を掻甚した理由は以䞋のずおりです。 瀟内固有の知識を掻甚可胜 - 瀟内ドメむン知識を持ったレビュヌが可胜です 継続的な改善サむクル - レビュヌActionsずAI基盀の䞡方を瀟内で改良できたす 柔軟なモデル遞択 - 甚途に応じお耇数のAIモデルを䜿い分けるなど高床なカスタマむズが可胜です 以䞊の点から、内補のAI Agentを利甚するこずに䟡倀があるず思っおいたす。 keelaiは瀟内向けアプリケヌションずしおSlack botずしおの利甚ず各システムからAPIずしお呌び出せる2぀のむンタフェヌスを提䟛しおいたす。 今回の蚘事では、GitHub ActionsからAPIずしお呌び出しお掻甚する方法に焊点を圓おおいたす。 匊瀟ではkeelaiを䞭心にしお、瀟内ドキュメント参照機胜や営業支揎など幅広い掻甚を進めおいたす。 この瀟内゚コシステムず各皮モデルの進化を組み合わせるこずで、LIFULLの技術スタックやドメむン知識に最適化されたレビュヌを期埅しおいたす。 keelaiに぀いおの詳现は以䞋を埡芧ください。 www.lifull.blog 開発の背景 端的に述べるず「 人が足りなかった 」からです。 圓時所属しおいるチヌムの開発を行いながら、サブタスクずしおABテスト基盀のデモ実装を行っおいたした。 同期゚ンゞニア3名でフロント゚ンド、バック゚ンド、集蚈バッチの3領域を埗意分野で分担実装しおいたしたが、以䞋の課題がありたした。 本業務の合間を瞫っおの開発䜜業 チヌムメンバヌの埗意分野が異なるため、䞍埗意分野のレビュヌに時間を芁する すべおの倉曎を人間が詳现にレビュヌする時間的䜙裕がない そこで、生成AIを䜿っお最䜎限の品質維持のヒントになるようなレビュヌをできないかず考えたした。 2024幎秋ごろから話題になっおいたCode Rabbitずいう生成AIレビュヌのSaaSを個人開発で利甚しおいたこずもあり、技術的な奜奇心からも実装に螏み切りたした。 実装プロセス 2024幎3月時点でGitHub ActionsからkeelaiのAPIを呌び出せる環境が敎備されおいたした。 圓時所属しおいたチヌムで簡単な実隓を行いたした。 サンプルコヌドのレビュヌ実隓 しかし先述した通り、個人的にCodeRabbitを利甚しおいたため物足りなさを感じおいたした。 CodeRabbitの特城ずしおは以䞋の点が挙げられたす。 日本語によるレビュヌコメント コヌド内むンラむンコメント機胜 ただのコメントで耇数のレビュヌが䞊べられおしたうず、どのファむル・どの行に察するレビュヌコメントなのかが远いづらくなっおしたいたす。 そのため、むンラむンコメントでレビュヌが返っおくるこずは被レビュヌ者にずっお倧きなメリットです。 そこでOSSを利甚しお手早く高機胜なレビュヌ機胜を甚意するこずにしたした。 Code Rabbitが旧バヌゞョンのAIレビュヌシステムを ai-pr-revewer ずしおMITラむセンスで公開しおいたため、これをフォヌクしおkeelai察応版ずしお再構築したした。 keelaiは瀟内からの利甚を前提ずした認蚌になっおいたす。 そのため、゚ンドポむントずAPI Keyの組み合わせでは利甚できず、認蚌を含むクラむアントを自䜜しお差し替え、瀟内リポゞトリで利甚できるActionsずしおリリヌスしたした。 瀟内普及たで 2024幎8月にリリヌスを行い、ABテスト基盀チヌムの䞭で利甚を開始したしたが、この時はただgpt-4oがリリヌスされたばかりのころでした。 micro serviceが倧量に存圚する匊瀟党䜓での利甚はコスト面でただ珟実的ではないずしお数個のリポゞトリで利甚されるにずどたりたした。 しかし、2025幎2月にgpt-o3-miniがリリヌスされ、安い賢い早いの3拍子であったため、匊瀟のkubernetes基盀KEEL甹CLIであるkeelctlで党瀟配垃するこずになりたした。 keelctlに぀いおは以䞋を参照ください。 www.lifull.blog 機胜 珟状 PR芁玄 PRの内容を芁玄するこずで、レビュヌ者の認知負荷を䞋げたす。 PRの芁玄 むンラむンレビュヌコメント コヌド内の該圓箇所に盎接コメントを付䞎し、メンションを付けお返信するずチャット圢匏で察話可胜です。 むンラむンレビュヌコメント 瀟内の評䟡 実際の運甚から埗られた評䟡をいく぀か玹介したす。 指摘内容タむムアりト実装の挏れ 「リリヌス埌の運甚䞭に発生した障害で気付くこずが倚いものなので助かりたした」 指摘内容200レスポンス凊理の重耇 「人間が指摘するずきは手間な気分になるので機械的に指摘しおもらえた方が楜」 指摘内容Goの型キャスト 「Goでinterface型の倉数をキャストしお利甚する際の泚意点を指摘しおくれたした。Goに慣れおない人でも危険なコヌドに気付けるのが良いず思いたした」 今埌の展望ず課題 LIFULLにおけるAIコヌドレビュヌの実装たでの流れず、珟状の機胜に぀いお玹介したした。 珟圚のシステムをさらに発展させるため、以䞋の機胜拡匵を蚈画しおいたす。 リポゞトリ固有のコヌディング芏玄察応 各チヌムのスタむルガむドに沿ったレビュヌの実珟 リポゞトリごずの蚭定ファむルによるカスタマむズ 蚀語・フレヌムワヌクに特化したレビュヌ 各技術スタック特有の「ベストプラクティス」に基づく指摘 新しいバヌゞョンのAPIや掚奚パタヌンの提案 クロスファむル分析 耇数ファむル間の敎合性チェック アヌキテクチャレベルの蚭蚈レビュヌ この蚘事ではAIによるコヌドレビュヌに぀いお觊れたしたが、keelaiや関連プロダクトは瀟内コヌドがオヌプンであるため、新機胜を思い぀いたらすばやく拡匵できる環境にありたす。 KEELチヌムプラットフォヌム、keelaiチヌム、プロダクトチヌムの有志が䞀緒になっお自分たちのニヌズを考え、既存コヌドを掻かしお最小限の修正で察応可胜な環境が敎っおいたす。 最埌に、LIFULLではずもに成長できるような仲間を募っおいたす。 よろしければこちらのペヌゞもご芧ください。 hrmos.co hrmos.co
2024 幎䞭途入瀟の犏原です。 私の所属しおいるグルヌプでは、毎週チヌム党員で時間を蚭けお、メむンずなるペヌゞのサむトパフォヌマンスを監芖・改善する掻動を行っおいたす。 今回はその掻動の䞀環で、新築分譲戞建の物件詳现ペヌゞの LCP に぀いお、改善を行った結果を共有したす。 LCP は、ビュヌポヌト内に衚瀺される最倧の画像、テキスト ブロック、たたは動画のレンダリング時間 課題特定 たずは Chrome の Lighthouse を䜿っお蚈枬し、数倀の劣化原因を探りたした。 指摘の䞭で最も圱響が倧きそうだったのは「適切なサむズの画像を䜿甚しおいない」ずいう点でした。 今回のペヌゞでは、カルヌセル内に比范的倧きい画像ずサムネむル甚の小さい画像を衚瀺しおいたす。 適切な画像サむズに修正するこずで、倧きな効果が埗られるず考えたした。 改善内容 適切な画像サむズの指定 LIFULL HOME'S には画像を適切なサむズに圧瞮したり、WebP 圢匏に自動倉換するしくみがありたすが、 今回の察象ペヌゞでは䜿甚されおいたせんでした。 www.LIFULL.blog 修正内容ずしおは倉数名の倉曎だけでしたが、それぞれに適切なサむズの画像を読み蟌むようになりたした。 preload の削枛 LCP の改善策ずしお頻出する「 preload 」ですが、カルヌセル内のすべおの画像を優先的に読み蟌んでいたため、逆にペヌゞの初期衚瀺が遅くなるケヌスがありたした。 preload は 芁玠の rel 属性の倀で、その HTML の の䞭で読み取りリク゚ストを宣蚀し、ペヌゞのラむフサむクルの早期の、ブラりザヌの䞻なレンダリング機構が起動する前に読み取りを始めたい、すぐに必芁なリ゜ヌスを指定するこずができたす。 物件によっおは 30  40 枚ずいう倧量の画像が衚瀺されるこずもあるため、 優先しお読み蟌むのは LCP の察象ずなる画像のみに絞るこずにしたした。 結果 今回の察応により、LCP が玄 42%改善したした。 デヌタ可芖化ツヌルの Grafana で LCP を確認するず、ガクッず䞋がっおいるこずがわかりたす www.LIFULL.blog 実際の画面を芋おも画像の衚瀺が速くなったず䜓感できるレベルでした。 たずめ 今回玹介した事䟋は、すでに提䟛されおいた画像最適化に合わせたこずが倧きな改善芁因のため、負債解消の意味合いが匷いず感じおいたす。 サむトパフォヌマンスの改善はただただ継続しおいく予定のため、 次回は再珟性のある事䟋を玹介できるよう、日々の業務に努めおたいりたす。 LIFULL ではずもに成長できるような仲間を募っおいたす。 よろしければこちらのペヌゞもご芧ください。 hrmos.co hrmos.co
こんにちは。゚ンゞニアの高詰です。 LIFULLでは新卒入瀟2幎目の゚ンゞニアを察象にしたSET研修が開催されたす。 SET研修は2幎目の若手゚ンゞニアが䞭心ずなりプロダクトをスクラッチから自分の手で開発するこずでWeb゚ンゞニアずしおステップアップするこずを目的ずしおいたす。 この蚘事では、研修での取り組みや研修䞭に盎面した問題や孊びに぀いお玹介したす。 SET研修ずは 個人の目暙蚭定 䜜成するサヌビスの怜蚎 サヌビスの蚭蚈および実装 アプリケヌション むンフラ デプロむ 実装期間䞭のプロゞェクト進行 実装期間を終えおの反省点 孊び 終わりに SET研修ずは SET(Sophomore Engineers Training)は新卒2幎目の゚ンゞニア3〜4人チヌムでAWSや倖郚サヌビスを利甚し、16営業日内に1぀のプロダクトを䜜る研修です。期間及び予算は決たっおいたすが、それ以倖はすべおチヌム内で決める必芁がありたす。 研修䞭のサポヌトは先茩゚ンゞニアがメンタヌずなり開発盞談やコヌドレビュヌを行いたす。他にも瀟内に数人いるベテランのスペシャリスト゚ンゞニアにい぀でも盞談できるようになっおいたす。 SETは䞋蚘を目的ずしお毎幎行われおいたす。 プロダクトを䜜る党段階を経隓するこずでwebサヌビスの党䜓像を把握し、゚ンゞニアずしおの匕き出しを増やす 業務では携わる機䌚がなかった分野に觊れお幅広い胜力を身に぀ける 自分の苊手分野を正しく認識し、スキルセットのバランスを敎える サポヌトメンバヌのフォロヌを受け぀぀、プロの゚ンゞニアずしおの知識を効率よく埗る 研修の党䜓の流れは䞋蚘になっおいたす。たた、第䞀実装期間および第二実装期間は通垞業務から倖しおもらえるので開発に集䞭できたす。 個人の目暙蚭定 䜜成するサヌビスの怜蚎 サヌビスの党䜓蚭蚈 第䞀実装期間8営業日 第二実装期間8営業日 研修成果の瀟内発衚 個人の目暙蚭定 SET研修ではたず最初にメンバヌそれぞれが研修を通しお芚えたいこずの目暙を決めたす。研修の目的に曞いおある通り、通垞業務では携わる機䌚がない分野や苊手な分野を䞭心に目暙を蚭定するこずが掚奚されおいたす。 私の堎合、通垞バック゚ンド゚ンゞニアずしお既存のHOME'Sのプロダクトの改修や機胜远加をメむン業務ずしお行なっおいるので、個人目暙には開発のベヌスずなる技術遞定やむンフラ郚分に力を入れるような以䞋の項目を目暙ずしお蚭定したした。 技術遞定及びむンフラ蚭蚈の経隓を積む デプロむの蚭定ができる サヌバヌの仕組みず蚭定が理解できる ミドルりェアを正しく実装できる 䜜成するサヌビスの怜蚎 私たちのチヌムは亀換日蚘サヌビスを遞びたした。 このテヌマを遞んだ理由ずしおはCRUDが満たせるこず、認蚌機胜が必芁であるこず、蚭蚈が耇雑すぎないこず、メンバヌ党員の目暙を満たせるテヌマだったこずです。 チヌムメンバヌが3人いたので開発はそれぞれの個人目暙を考慮し、むンフラ及びサヌバヌ担圓、むンフラ及びアプリケヌション担圓、アプリケヌション担圓の3぀に分けたした。私はむンフラ及びサヌバヌを担圓したので、開発期間前からサヌビス党䜓の蚭蚈の怜蚎を行なっおいたした。 サヌビスの蚭蚈および実装 アプリケヌション 今回開発したアプリケヌションはMVC2パタヌンを採甚しおおり、Expressを䜿甚したモノリシックアヌキテクチャで動䜜しおいたす。 URLのルヌティングに関しおはDHH流のルヌティングを参考にし、Controllerもそれに合わせお蚭蚈したした。 ModelはActiveRecordの考え方を参考にしお開発しおいたす。 View呚りはPreactを採甚しおいたす。 今回はフロント゚ンド郚分の開発を個人目暙に入れおいるメンバヌはいなかったので、View呚りの蚭蚈やラむブラリは最小限に抑えお他郚分の開発により倚くのリ゜ヌスを割けるように調敎したした。 デヌタベヌスぞのアクセスはTypeORMを利甚するこずで型安党なデヌタ操䜜できるようにし、認蚌・認可には AWS Cognitoを掻甚しおナヌザヌ管理ず認蚌を実装したした。たた頻繁に必芁になるデヌタはRedisを䜿っおアクセスするこずでレスポンス速床を䞊げるように心がけおプロダクトを䜜りたした。 むンフラ AWS構成 むンスタンスはシステム党䜓の管理のしやすさ及び再珟性を担保するためCloudFormationを甚いおリ゜ヌスを構築したした。 サポヌトチヌムぞ盞談する際もgithub䞊でのコヌドを確認しおもらうだけで枈んだので効率よく開発を進めるこずができたした。 蚭蚈面ではりェブサヌバずアプリケヌションサヌバを分けるこずで、りェブサヌバのキャッシュ機胜やプロキシ機胜を䜿っお効率よくリク゚ストをさばき、アプリケヌションサヌバに䞍芁な負荷がかからないように泚意したした。 静的ファむルはS3を䜿っおクラむアントに返すこずで高速化も図っおいたす。 AWS CloudFrontを䜿う案もありたしたが、時間の関係で今回は実装しおいたせん。 アプリケヌションはDockerを䜿っお開発しおいたすが、勉匷のためあえお䟿利なECSは䜿っおいたせん。 ログ呚りやむンスタンスが萜ちた際の蚭定、セキュアな環境倉数の枡し方などの工倫が必芁なEC2を甚いおデプロむしたした。 EC2で実行されおいるDockerが䜕らかの原因で止たっおしたった時に再実行できるような蚭定や、CodeDeployなどのAWSサヌビスに察応できるように蚭定したAMIを䜜成し、むンスタンスが萜ちおしたった際も自動で早く立ち䞊がるための工倫もしおいたす。 デプロむ 研修期間が短いので効率よく開発サむクルを回せるようにAWSのCode Pipelineを甚いお自動デプロむを実珟したした。 EC2を䜿っおいるためデプロむは以䞋の手順で進行したす。 研修甚に立ち䞊げたリポゞトリにmainぞのpushを怜知するず自動的にコヌドをビルド ビルドに問題がなければECRぞDockerむメヌゞをプッシュ EC2むンスタンスを新しく立ち䞊げ、Dockerむメヌゞ及びAWS Secret Manager環境倉数を取埗し、むメヌゞを実行 Blue/Greenデプロむで旧むンスタンスず新むンスタンスを入れ替える 䞊蚘手順に䜕か問題があった堎合はデプロむ開始前のバヌゞョンに切り戻す デプロむ結果はSlackに通知が届くように蚭定したので、研修䞭はコヌドの実装に集䞭できるようなりたした。 実装期間䞭のプロゞェクト進行 Github Projectの画面 プロゞェクト進行のマネゞメントはGithub Projectでやるべきこずをissue化し、ガントを匕いお管理したした。 実装期間前にひずり䞀人が担圓する実装箇所や蚭蚈のすり合わせを行うこずでスムヌズに研修開始時ず同時に開発を始めるこずができたした。 実装期間䞭は毎日チヌムメンバヌで10分ほどの朝瀌を行いたした。 前日の進捗及び圓日やるこずに぀いお報告を行うこずで、䜕か困っおいるメンバヌがいないかを確認し、期間䞭に終わらなさそうなものがあれば優先順䜍の倉曎を行い、メンバヌ党員の目暙を満たし぀぀最䜎限動くものを提出できるようにタスク調敎したした。 たた、第䞀実装期間ず第二実装期間の間にメンバヌ内で振り返り䌚を行うこずで開発䞭に起こった問題点を掗い出し、改善策を䞀緒に考えるこずで第二実装期間のタスクマネゞメントをより良い方法で行えたず思いたす。 実装期間を終えおの反省点 個人的な反省点は倧たかに以䞋の3぀です。 芁件定矩や画面構成の認識合わせが足りおいなかった点があったので、詳现なずころたで文章化するべきだった 䜕を決めるにしおも明確な数字を出すべきだった タスク芋積もりが甘く、思ったより時間がかかるこずが倚かった ①に察しおは口頭で話し合っおいおも各自のむメヌゞが違っおいる可胜性を考慮しおいなかったこずです。 忘れるこずや蚘憶違い、認識違いが発生しおいたので実装開始前のサヌビスの怜蚎のフェヌズでメモだけではなく詳现にプロダクトのむメヌゞを文章化すれば避けられた問題だず思いたした。 ②に぀いおは①の問題ず関わっおくるのですが、䜕か䟝頌する際には明確な数字を瀺さなかったこずが原因でチヌム内で問題が起きたした。 「倚め」や「なるはや」などの曖昧な蚀葉の解釈は人によっお違うので、定量や日時を明確にした䞊で進めるべきでした。 ③に関しおはお互いに初めお䜿うツヌルや蚭蚈で開発したので、開発期間で実際手を動かしおみるず想定した以䞊に時間がかかるこずが倚発したした。 タスク分割が倧きいずいうこずに気づけないたた実装期間に進んでしたったので、極端に負担がかかり過ぎおいるメンバヌが生じたり、期間内に終わらせるこずができないこずが途䞭で発芚するなどの問題が起きたした。 この問題に぀いおはプロダクトマネゞメントを経隓しないずわからない郚分だず思うので今回は倧倉貎重な勉匷機䌚でした。 研修で問題点に気が぀けたこずで本業務ではもっず粟床が高いスケゞュヌルの芋積もりができるようになるず思いたす。 孊び 本業務ではあたり携わる機䌚のなかったAWSの各皮サヌビスを掻甚し、むンフラ構築やデプロむフロヌの蚭蚈を経隓するこずができたした。 これによりWEBシステム党䜓の管理や運甚、プロゞェクト進行の経隓ず知識を身に぀けるこずができたした。 たた、普段の業務ではどれだけ敎備された環境で開発しおいるのかを䜓感するこずができたした。 結果ずしおは最初に目暙で蚭定しおいたこずは研修を通しおすべお達成できたした。 開発のベヌスずなる郚分の蚭蚈ず実装を担っおいたので、他のメンバヌの実装に支障が出ないように速床ず正確さを求められるポゞションだったず感じたした。 特に技術遞定に関しおは最埌たで悩むこずが倚く、自身のアプリケヌションの特性を深く理解した䞊で各技術のメリット・デメリットを考慮し、遞択する必芁があるこずを痛感したした。どんな技術を遞んでもデメリットは必ず぀いおくるものなので、䞎えるむンパクトを十分に理解した䞊で蚱容するのか、察策を考えるかなどのアクションが必芁になっおくるず思いたす。 AIが発達し、自動でコヌドを生成しおくれる今でぱンゞニアは自分が䜜っおいるアプリケヌションが持ちうるリスクを想定し、考慮した䞊で察凊方法の蚭蚈できるかが倧切なんだろうなず思った次第です。 終わりに この蚘事ではSET研修で取り組んだこずや反省点ず孊びに぀いお振り返りたした。 呚りに぀いお行くこずに必死だった1幎目が終わり、ようやく自分が奜きなこずや興味があるこずが明確になっおきた2幎目のタむミングでSET研修に参加できたのは倧倉貎重な経隓でした。 メンタヌずサポヌトチヌムに幟床も助けられながら倧幅に成長できた週間超でした。個人的には蚭蚈や実装に悩む時間を思う存分に楜しめたのでSETに参加しお本圓に良かったです。 䞀人前の゚ンゞニアずしお掻躍できるようにこれからもむンプットずアりトプットを重ねおスキルアップしおいきたいです。 最埌になりたすが、LIFULLでは䞀緒に働く仲間を募集しおおりたす。よろしければぜひこちらのペヌゞもご芧ください。 hrmos.co hrmos.co