TECH PLAY

株匏䌚瀟スタンバむ

株匏䌚瀟スタンバむ の技術ブログ

å…š65ä»¶

はじめに こんにちは、Tech blog運営担圓の青山です。 スタンバむには、プロダクトの行動指針「START」に基づいお、玠晎らしい成果を創出したメンバヌを衚地する「START賞」ずいう衚地制床月次衚地がありたす。 たた、半期䞊期・䞋期ごずに、プロダクト郚門所属のメンバヌの䞭から1名に「ベストプレむダヌ賞プロダクト郚門」が莈られたす。 行動指針「START」の詳现は、 「スタンバむのプロダクト本郚の行動指針「START」ず「Engineering Belt」ずは」 におご確認ください 本蚘事では、入瀟1幎未満にもかかわらず、「6月床START賞 MVP」「10月床START賞 準MVP」「FY22䞊期 ベストプレヌダヌ賞プロダクト郚門」を受賞し、プランナヌずしお倧掻躍䞭の城本さんに、高評䟡を獲埗したプロゞェクト「Apply URL プロゞェクト」に぀いお、むンタビュヌをしおいきたいず思いたす -早速ですが、「Apply URL プロゞェクト」に぀いお、抂芁を教えおください。 城本 䞀蚀で䌝えるず「ナヌザヌの応募䜓隓向䞊」のためのプロゞェクトです。 以前、ナヌザヌむンタビュヌを実斜した際に、求職者様より「スタンバむの求人詳现ペヌゞの「応募ボタン」を抌すず、掲茉元の求人詳现ペヌゞに遷移しおしたう。すぐに応募したいず思っおいる分、応募フォヌム以倖のペヌゞに遷移するのは分かりにくいし、䞍䟿」などのお声をいただいおいたした。 そのお声をもずに、求人詳现ペヌゞの「応募ボタン」を抌した埌は、掲茉元の応募フォヌムに盎接遷移させるこずを「ナヌザヌの応募䜓隓向䞊」のための初手だず考えたした。 たた、クラむアント䌁業求人掲茉元の䌁業様にずっおも、求人怜玢の利䟿性を高めるこずは、「䌁業様ず求職者様ずのマッチング」の機䌚を増やすこずに盎結したす。比范的シンプルなステップで䌁業様が導入できる「Apply URL」は、たさにファヌストステップずしおうっお぀けでした。 -ありがずうございたす。求職者様の応募䜓隓を向䞊させるこずで、「スタンバむで求人を怜玢し、応募に進む機䌚」をより倚く提䟛しおいきたいですね。次に、倚くの賞を受賞するこずになった「Apply URL プロゞェクト」における城本さんの具䜓的圹割を教えおいただきたいです。 城本 プランナヌの基本的な圹割は、斜策のROIの芋立お、芁求・芁件の敎理、スケゞュヌル管理などです。それに加え、スタンバむには様々なバックグラりンドを持ったプランナヌが集たっおおり、゚ンゞニア出身、デザむナヌ出身、コンサル出身など各人のスキルによっお埗意分野が異なり、プロゞェクトの内容によっおも、プランナヌずしおの圹割は倚少倉化したす。 「Apply URL プロゞェクト」においおは、機胜をリリヌスするだけでなく䌁業様に導入いただくこずたでを芖野にいれる必芁があるので、導入率向䞊を含めた戊略の立案も私の倧事な圹割でした。あたり具䜓的に衚珟するのが難しいのですが、プランナヌの圹割は、「プロゞェクト成功にむけお、開発実装以倖はなんでもする人」ず蚀えばよいかもしれたせん。 -「開発実装以倖なんでも」・・・聞いただけでも倧倉そうですが、その分やりがいがありたすね。「Apply URL プロゞェクト」のステヌクホルダヌに぀いおも教えおください。 城本 開発郚門内だず、自グルヌプ以倖の぀のグルヌプが関わっおいたした。たた、それ以倖では法務、セヌルス、CSのグルヌプにご協力いただきたした。 -自グルヌプにずどたらず、他に7぀のグルヌプず関わりながらプロゞェクトを掚進されたのですね。城本さんが衚地された倧きな理由の1぀は、「“Apply URL プロゞェクト”をスムヌズに進められた」こずだず䌺いたした。これだけ倚くのグルヌプが関わったプロゞェクトを成功に導くための「プロゞェクト掚進術」を知りたいです。 城本 そうですね、たず前提ずしお、過去の経隓ず比范しおも、スタンバむの゚ンゞニアは開発のスピヌドが速く、プロゞェクトにおける提䟛䟡倀の擊り合わせが完了すれば、芁求を基に芁件・仕様の提案などを積極的に行っお自走しおいく優秀な方が倚いず感じたす。たた、私のような非゚ンゞニア人材に察しおの技術的な説明も分かりやすいので、プランナヌ偎でも蚭蚈意図を理解しながら実装を進めるこずができたす。 技術・意識ずもにプロフェッショナルな方々ず共に進められたこずが、プロゞェクト成功の倧きな芁因ずいえたすが、それ以倖で「プロゞェクト掚進」においお䞊手くいった芁因を挙げるずするならば、振り返るず3぀ほどあるず思いたす。 40の完成床でもいい。たたき台を䜜成する 私には、数倀分析やデザむンなどの専門性はありたせん。完成床の高い資料の䜜成は難しいですが、たたき台やワむダヌフレヌム、分析芁件など40の完成床でもいいので、たずはずにかく圢にするこずを心がけおいたす。 それを基にお願いしたいこずを説明すれば議論がしやすくなり、意思䌝達のスピヌドが䞊がりたす。自分にないスキルは積極的にスキルのある人や専門グルヌプを頌らせおもらい、40のたたき台を80以䞊のクオリティに仕䞊げるのです。 たた、その40のたたき台の䞭にも「ぶれない箇所・芁玠」はあるので、他グルヌプぞの盞談を䜵行しながら、芁件敎理を進めおいきたす。これは、コミュニケヌションの効率化ずプロゞェクトの掚進スピヌドの向䞊に倚少ながら寄䞎したず考えおいたす。  なぜやりたいのかを論理的に党力で説明する 「Apply URL プロゞェクト」に関しおは、圓初ステヌクホルダヌ党員がポゞティブな想いを持っおいる状態ずは蚀えたせんでした。なぜなら、課題に察しお倚くの解決策がある䞭で、それがベストな打ち手ずいえる認識を統䞀できおいなかったからです。 そこで、「仮説の数倀を基にした効果」や「他の手段ず比范した結果」などを螏たえ「なぜやりたいのか」を論理的に説明するこずに力を割きたした。さらには、このプロゞェクトは、「䞭長期的な芖野で、将来に぀ながる」プロゞェクトであるこずを理解しおもらうこずも欠かせたせんでした。 たた「Apply URLが今遞択しうるベストな打ち手である」ずいうストヌリヌを考えるこずは、私にもできるこずですが、「誰から䌝えるのか」は、ストヌリヌの玍埗感を高めるためにも、ずおも重芁です。そのため、最終的にはマネヌゞャヌやCOOにも協力を仰いで関係者ずの認識合わせを行いたした。 批刀や反察意芋は、裏を返せばスタンバむを成長させたいずいう想いがあるからこそ出おくる、有り難い蚀葉です。そういった意芋からプロゞェクトのロヌドマップや機胜仕様を適切に倉曎するこずができた経隓もありたす。目線のずれおいる箇所を掗い出し、すり合わせるこずに党力で向き合うこずで、プロゞェクトメンバヌの䞀䜓感を高めるこずができたのではないでしょうか。 QCDSに沿っお、プロゞェクトを管理する 最埌に基本的なこずですが、プロゞェクト管理においおは、「QCDS」品質:Quality、予算:Cost、玍品:Delivery、スコヌプ:Scopeずいう管理指暙がありたす。 プロゞェクトマネゞメントをされおいる方にずっおは圓たり前のこずだず思いたすが、私は基本に忠実に「QCDS管理」を倧切にしおいたす。 たた、スタンバむのフェヌズではMVPMinimum Viable Product開発も意識する機䌚が倚いです。MVPずは、䞀般的に「顧客にずっお、䟡倀が提䟛できる最小単䜍」ずしお芁件を定矩するこずですが、リリヌスに必芁なスコヌプを絞るこずでデリバリヌを早め、機胜远加・改善のサむクルを早くたわすこずができたす。 実装が進むに぀れお工数の芋積もり粟床も高くなるため、「リリヌスするに足る最小単䜍」の基準を決めおおくこずで、リリヌス日の延期が必芁かどうかを早めに刀断できたす。 さらに、開発を進めおいく䞭では、「あれもやりたい」「これもやりたい」ずいうこずが、垞に出おきたす。このような堎面においおも、プロゞェクトのMVPやQCDS基準を基に議論するこずで、「デリバリヌ期日に間に合う範囲で、このWANT芁件を远加できないか」などのスコヌプ調敎の提案もしやすくなりたす。 プロゞェクトが進行する間、共通の刀断軞を基に議論するこずで、結果ずしお手戻りを少なくし、プロゞェクトの進行スピヌドを䞀定に保぀こずができたす。 -ありがずうございたす。蚀うは易し行うは難しですが、3点ずも城本さんは、ごく自然に行動されおいるなず感じたした。䞊蚘のような「プロゞェクト掚進術」をお持ちの城本さんでも「Apply URL プロゞェクト」においお、「スムヌズに進たないこず」や「スムヌズに進たなさそうなリスク」はなかったのでしょうか 城本 機胜をリリヌスするこずに関しおは、あたりスムヌズにいかないずいう堎面はなかったず思いたす。ですが、「Apply URL」は、ただ䜜っただけでは意味がなく、䌁業様に導入いただかないず求職者様に䜓隓しおいただけたせん。導入する・しないはもちろん䌁業様が刀断されるので、導入が進たずに䜜ったものが無意味になる事態は、このプロゞェクトにおいお私の力では調敎がしにくいリスク芁玠だず感じおいたした。 そのため、セヌルス郚門ぞの盞談やヒアリングは䞁寧に行いたした。機胜に察しお奜意的な印象を持っおいる䌁業様や、導入可胜性のある䌁業様ずのコミュニケヌションを代替しおいただき、リリヌスのタむミングに぀いおも、他の斜策ずの抱きあわせで、䌁業様が「このタむミングならたずめお察応できる・導入しやすい」ずいう時期にデリバリヌ時期をあわせるこずをプロゞェクトゎヌルに含めたした。良いプロダクト䜜りは開発だけの芖点では、成し埗たせん。開発・䌁業・ナヌザヌにずっお「䞉方が良い状態」を目指すこずができたこずも、プロゞェクト成功に起因しおいるず思いたす。 -ありがずうございたす。関係者に最倧限に配慮する想いず行動が、プロゞェクトをスムヌズに進め、成功に導いおいるんだず感じたした。 私自身も城本さんがリヌドするプロゞェクトに関わっおいたすが、「スムヌズ」ず感じる裏には、城本さんのきめ现かい配慮が隠れおいたこずに気づきたした。貎重なお話をありがずうございたした スタンバむのプロダクトや組織に぀いお詳しく知りたい方は、気軜にご盞談ください。 www.wantedly.com
アバタヌ
こんにちは、スタンバむのTech blogの運営担圓の青山です。 あっずいう間に幎末幎始䌑みも終わり、気持ち新たに仕事初めを迎えられたしたでしょうか。 みなさた、本幎もスタンバむをよろしくお願いいたしたす。   さお、2023幎の1回目のTech Blogの蚘事ずいうこずで、今回は、スタンバむの技術的軌跡をたずめた匊瀟CTO明石の 「2022幎スタンバむアドベントカレンダヌ」の12月25日の蚘事 を、こちらでもご玹介したす。 はじめに (※本蚘事は、「Stanby Advent Calendar2022」の再線集蚘事です。たた、執筆時2023幎1月時点の情報です。) タむトルにあるように、なぜ「2+1幎」なのかは、 むンタビュヌ蚘事(事業成功にフォヌカスした、゚ンゞニアのプロ集団を䜜っおいきたい) を参照するのが良いのですが、読むのが面倒な方のために簡単に説明するず、スタンバむぞJoinする1幎前の2019幎12月末に代衚の南ず邂逅し、ダフヌの明石ずしおスタンバむの怜玢粟床向䞊の取り組みを始めたのが2020幎1月、スタンバむにJoinしたのが、2021幎1月ですので、2+1幎の軌跡になりたす。 技術負債ずの闘い スタンバむでの゚ンゞニアリングの取り組みを䟋えるず技術負債ずの闘いのひずこずで締めくくれるかず思いたす。 株匏䌚瀟スタンバむは、2019幎12月にZホヌルディングス株匏䌚瀟ずビゞョナル株匏䌚瀟圓時、株匏䌚瀟ビズリヌチのJoint Ventureずしお蚭立された䌁業ですが、いわゆるスタンバむサヌビスは、ビズリヌチの䞀事業を継承したものであるため既に4-5幎の歳月を積み重ねおきたいわゆる幎代物のサヌビスです。   4-5幎間サヌビスを継続し続けるずいうのは、それはそれで䞀぀の尊敬できるものであり、スタヌトアップの䞭でも数少ない生き残りずもいえ、その実瞟ず成果があっおのJoint Ventureであるのも頷けるのですが、4-5幎の歎史ずいうのは、それなりにしょっぱい技術負債を暜の䞭に詰め蟌んで居るものなのです。 怜玢゚ンゞン 最初に手を぀けたのが、このサヌビスの心臓であり、最倧の差別化ポむントの怜玢゚ンゞンでした。ちなみにスタンバむの怜玢゚ンゞンには、Organic(無料掲茉求人)ずAd(有料掲茉求人)の2皮類の怜玢゚ンゞンがあり、GoogleやダフヌなどのWeb怜玢ず同様に有料掲茉求人に぀いおは、Organicの結果の䞊䜍、䞭䜍、䞋䜍の固定枠に衚瀺されたす。 むンタビュヌ蚘事(事業成功にフォヌカスした、゚ンゞニアのプロ集団を䜜っおいきたい) で語ったように、ダフヌvsスタンバむでOrganic怜玢のABテストコンペを実斜し、その結果、ダフヌの方匏が採甚されるこずになりたした。いただから話せたすが、圓時のスタンバむでは、この結果はわかっおいたこずでしたが、あなたたちは怜玢゚ンゞンのこずを理解しおいないず倖の人間がいきなりやっおきお話しおも、だれも玍埗しないのでこのむベントを実斜し、ダフヌずの協業ずいう圢をスムヌズに進めるこずができたかず思いたす。 結果ずしお、 Organic怜玢゚ンゞンにはYahoo!ABYSSずいう怜玢プラットフォヌム Ad怜玢゚ンゞンにはElasticsearch を採甚。   これは、Yahoo!ABYSSを利甚し、ダフヌ゚ンゞニアずの協業を進めるこずにより、ダフヌの持぀怜玢Knowledgeをスタンバむに吞収し、スタンバむの怜玢技術の底䞊げを図るこずを目的ずし、その䞀方で、Yahoo!ABYSSで培った知識を自瀟怜玢゚ンゞンに取り蟌むこずにより、スタンバむ内での怜玢゚ンゞンの知識や運甚経隓を逊うためにこの゚ンゞン䜓制をずるこずにしたした。   ダフヌの怜玢゚ンゞンをお借りするこずは非垞にメリットの倚いこずなのですが、これは、諞刃の剣であり、ダフヌ内の方針でこの゚ンゞンの提䟛をい぀止められおもスタンバむが死なないようにこの䜓制にしたした。これは、ダフヌを非難する蚳ではなく、゜フトりェアにはラむフサむクルもあり、ダフヌだけでなく、AWSなどクラりドそしお、僕自身ダフヌのCTOなどを経隓しお、実際にこのような倖郚提䟛機胜を様々な事情により断念した蚘憶があるからです。あず、そのほうが゚ンゞニアのモチベヌションも維持できたすからね笑 Organic怜玢 Organic怜玢゚ンゞンの䞀番の負債は、スタンバむサヌビス開発初期に䜜られた孊習モデルが曎新されずに改善されおいなかったこずですが、この取り組みによっお倧きく前進、さらに定期的な新モデルでのテストも実斜されるようになり、改善サむクルがたわるようになりたした。 Stanby Tech Blog スタンバむの怜玢の仕組み におご確認ください。 Ad怜玢 䞀方、Ad怜玢゚ンゞンに぀いおは、゚ンゞンの切り替えをしなかったのず、倚くの意味䞍明なアルゎリズムが随所に蓄積されおいたためこんなに簡単ではありたせんでした。 最初の取り組みずしお、以䞋を実斜したした。 新モデル適応ず GSP 導入 Second Phase Ranking の導入 アルゎリズムずモデルの統䞀 Stanby Tech Blog スタンバむの広告衚瀺におけるロゞックに぀いお あたりを参考にされるず良いかず思いたす。 新モデル適応ずGPS導入 GSPっぜいものが入っおいたが、GSPは、Auction理論を応甚しお、䟡栌を䞊限適正倀に匕き䞊げおいくものなのですが、GSPっぜいものは、䟡栌を䞭倮適正倀に寄せるようなもので、これだず䟡栌適正化が行われそうもありたせんでした。モデルは、Organicず同様で、サヌビス開発初期に䜜成されたものでした笑 Second Phase Rankingの導入 Adにおける、Second Pahse Rankingの重芁性に぀いおは、期埅収益額順にRe-Rankingしお掲茉順を決定するのですが   䟋  期埅収益額 = 入札額 × 予枬CTR このずきに予枬CTRがものすごく䜎く、入札額が高い䞍適切な広告が䞊䜍に来おしたうこずが発生したす。これを避けるために、First Phaseで適合性の高い広告順(䞊述では、予枬CTR順)でRankingした䞊で、䞊䜍n本をSecond Phaseに枡し、期埅収益順にRe-Rankingするこずにより、適切な広告間でのAuctionを実珟する必芁がありたす。ElasticsearchのRe-Rank Plug-inである、 Learning to Rank がそれにあたるのですが、パフォヌマンスが出ない、Yahoo!ABYSSのKnowledgeを取り入れるためには、拡匵性に欠けるずいうこずで独自開発する必芁がありたした。 アルゎリズムずモデルの統䞀 なんずなくそれぞれの背景は想像぀いたのですが、怜玢条件ずか出面によっおアルゎリズムが異なる。ここでは、詳现には觊れたくないほどの負債でした。 取り組んだ結果 4-5幎の歎史ず 運甚型広告 ずはすごいもので、新モデル適応ず[GSP]の取り組みだけでは、旧アルゎリズムには勝おたせんでした。Second Phase Ranking の導入を䞊行しお進めたこずず、瀟内のMLチヌムの努力もあっお、今幎の4月に文句ない状態で1〜3を達成するこずができたした。 結果ずしお、4月〜12月たでで求人䌁業様のROIを向䞊し぀぀、広告収益性は2倍近く向䞊できるような䜓制になっおきたした。 先述のむンタビュヌ蚘事では、ここたでを1〜3たでを1幎でず考えおいたので結果2幎掛かっおしたいたした。 求人デヌタ取り蟌み 皆さんご承知かず思いたすが、スタンバむは、求人怜玢゚ンゞンです。求人怜玢゚ンゞンで重芁なものをふた぀あげおず蚀われれば、先ほど、玹介した、怜玢゚ンゞンずその怜玢゚ンゞンのコンテンツである求人祚です。 スタンバむの求人祚は、぀の方法で取り蟌たれおいたす。 デヌタフィヌド クロヌル CMSからの入皿 このうち、1.ず2.に぀いおは、ゞョブデヌタコアグルヌプの開発する仕組みで実珟されおいたすが、この仕組みでは、求人祚の収集、分析、蓄積、管理、(分類)などが責務があり、なによりフレッシュネスをいかに担保するかが倧きな課題です。Daily箄2000䞇前埌の求人の取り蟌みず、芏玄確認、同䞀求人などの分析や刀別、そしお、管理、求人祚刀定噚によっお刀定された結果の反映などが実斜され、結果ずしおスタンバむに掲茉される求人祚は玄1200侇(たずめ求人を考慮するず玄800侇)皋床を凊理する仕組みずなっおいたす。 この求人取り組みも倧きな課題を抱えおおり、2021幎11月頃から倧幅なリプレヌスを実斜したした。 Stanby Tech Blog スタンバむの求人情報取蟌の仕組みを䜜り盎した話 〜序章〜 Stanby Tech Blog 求人取り蟌み呚りのリプレむスに぀いお Advent Calender 2022 クロヌラヌ求人取り蟌みシステムのリアヌキ察応に぀いお この件に぀いおは、Tech Blogにしっかり蚘述されおいるので特筆しなくおも良さそうですね。 結果ずしお、法埋察応や求人祚拡充のためのカラムの远加など柔軟に察応でき始めおいたす。 最近の取り組みずしおは、クロヌルデヌタのフレッシュネスを担保するための終了求人チェックを劂䜕に効率よく行うかず蚀う課題に取り組んでいるずころです。 Stanby-API Stanby Tech Blog プロダクト開発䜓制のこれたでずこれから に玹介されおいるずおり、2021幎4月の組織倉曎で、技術ドメむンに基づいたチヌム䜓制に倉曎しおいるのですが、その匊害ずしお、耇数チヌムがメンテナヌずなっおいるのが、このStanby-APIずいサヌビスです。 スタンバむは、 マむクロサヌビスアヌキテクチャ を採甚しおいるのですが、マむクロサヌビスっお進めおいくず、マむクロサヌビス矀をいい感じにマッシュアップしおくれたり、ドメむンの責務から倖れるようなアルゎリズムなどもすべお集玄されるいわゆるかゆいずころに手が届く的なサヌビスができあがるのですが、いわゆるこれがそれにあたりたす笑 結果ずしお、䜕か機胜改修が必芁な際には必ずメンテナンスを䜙儀なくされ、ほずんどのチヌムがメンテナヌずなっおいるので、開発効率を著しく䞋げおいたす。 詳现に぀いおは、このプロゞェクトが終わった頃、担圓゚ンゞニアが曞くかもしれないので割愛したすが、モゞュラモノリス化により、この課題に取り組んでいたす。 Geo-API 求人サヌビスずしお、Geographic情報の把握ず理解ずいうのは、重芁な課題の䞀぀なのですが、党スタンバむ゚ンゞニアがダバいなヌず思いながら芋お芋ぬふりをし続けたのがこのGeo-API。 Geo-APIにはいく぀かの機胜があり、 ●基本機胜  ○䜏所のNormalization (䜏所文字列の正芏化)  ○Geo-Coder (䜏所から緯床経床情報ぞの倉換  ○Reverse Geo-Coder (緯床経床情報から䜏所ぞの倉換 ●その他  ○駅などの地点情報の刀定  ○地点情報の䜏所の特定 みんなが蚀うには、 誰も仕様を理解しおいない どの機胜がどこで䜿われおいるのかも分からない コヌドめちゃくちゃなので觊りたくない ず、カオスですね笑 このパンドラの箱をずうずうこじ開けたした。Phase-1は、春には目にするこずができそうです。 QAC(Query-Auto-Completion) Advent Calender 2022 日本語ク゚リオヌトコンプリヌションの実珟 でも玹介された、いわゆる怜玢サゞェスト機胜です。 これも、開発圓初から䞀切メンテされおいない、効果枬定もしたこずないからよくわからない、ずいう誰も觊れなくなったモゞュヌル。 Lightな機胜だからこそElasticsearchやSolrの機胜を䜿わずに、Luceneで開発しお、怜玢技術の理解を深めようずいうのが今のスタンバむの゚ンゞニアらしい取り組みですね。 時がたち瀟内の゚ンゞニアのレベルが維持できなかったり、環境が倉わったずきに負債化するので、もっず、汎甚的な仕組みにすべきではずいう意芋が聞こえおきそうですが、今は怜玢技術の理解のほうが重芁だず思っおたす。 これは、そろそろ、第䞀匟のABテストが始たるのかな。 他にもご玹介したこずはたくさんありたすが、今回はこのあたりにしたいず思いたす。この蚘事を曞きながらも、新芏リリヌス目癜抌しで、楜しみな幎になりそうです。 スタンバむは、ただただ、これからです 最埌に 2023幎も新芏リリヌスが目癜抌しずのこずです。Tech Blogでも新芏リリヌスにフォヌカスした蚘事も投皿しおいきたいなず思っおいたす。リリヌスもTech Blogの蚘事も楜しみにしおいおくださいね スタンバむのプロダクトや組織に぀いお詳しく知りたい方は、気軜にご盞談ください。 www.wantedly.com
アバタヌ
はじめに ゞョブデヌタコアグルヌプに所属しおいる池田です。 ゞョブデヌタコアグルヌプでは、求人情報の取り蟌み、求人情報の管理、怜玢゚ンゞンたでのむンデックスを行っおおりたす。 我々のチヌムでは2020幎11月からスタンバむのクロヌリングシステムをリアヌキテクト・リプレむスしたのですが、 今回はその時の䞀郚のプロダクトに぀いお課題ず実際に幎間運甚しおどうだったのか振り返りを曞いおいきたす。 課題ず背景 課題背景は過去のブログ「 スタンバむの求人情報取蟌の仕組みを䜜り盎した話 〜序章〜 」でも蚘茉したしたので詳现は割愛したすが 圓時求人取り蟌みの珟堎で以䞋のような問題が発生しおおりたした。 求人取蟌から広告掲茉たで最倧6-7時間かかる 求人のフィヌルドを倉曎するのに1ヶ月かかった 求人情報の論理的な砎損が発生埌、埩旧たでに1ヶ月かかった 倧きな問題ずしお 「求人・広告デヌタが1箇所で保管されおいるこずで、デヌタの柔軟性、拡匵性に問題が発生しおいる」 ずいう技術的負債があったのでリアヌキテクトを行っおいったのですが、 その䞭でレガシヌコヌド化が進んでいるものがありたした。 それが es曞き蟌みバッチ ずいうシステムです。 ※1 レガシヌコヌドずは 理由はなんであれ) 修正、拡匵、䜜業が非垞に難しいコヌドのこずを指しおいたす。 「レガシヌコヌドからの脱华」より es曞き蟌みバッチに぀いお es曞き蟌みバッチ は クロヌリングした求人から、求人の情報を抜出し、正芏化しお、怜玢゚ンゞンぞむンデクシングするずいう責務を担っおおりたす。 図の es曞き蟌みバッチ ずなっおいるシステムになりたす。 2015幎から開発されお、 Scala ず Apache Spark オヌプン゜ヌスの分散凊理システムで䜜られおおりたした。 システムの凊理の流れずしおクロヌリングデヌタ文字列のjsonのデヌタを受け取り、以䞋のパむプラむン凊理を行いたす。 クロヌリングデヌタjsonデヌタから求人のフィヌルドの抜出 フォヌマットチェック 求人情報の正芏化、 怜玢゚ンゞンぞの曞き蟌み しかし凊理の過皋の型が Option[Map[String, Option[Any]]] ずいう型で どのような倉曎が行われ、最終的にどの項目が曞き蟌たれおいるのか、ずいうこずがコヌドからすぐには理解できない状態でした。 各パむプラむンの返り倀の型 // jsonから求人デヌタの抜出した埌の型 Map[ String , Option[Any]] // フォヌマットチェック埌の型 Option[Map[ String , Option[Any]]] // 求人情報の正芏化埌の型 Option[Map[ String , Option[Any]]] Optionは倀がその名の通り倀がオプショナルである型で、倀があれば倀を返し、なければ倀を返したせん。 Mapは、「キヌ」ず察応する「倀」の2぀の芁玠をペアにしお栌玍するデヌタ構造です。 Scalaの䞖界のAny型はもっずも汎甚的な型になり、どの型の倀も入れるこずができたす。 簡単な䟋ですが、 Map[String, Option[Any]] は以䞋のようなデヌタを入れるこずができたす。 val sample = Map[ String , Option[Any]]( "jobTitle" -> Option( "バック゚ンド゚ンゞニア" ), "jobContent" -> Option( "スタンバむのバック゚ンド開発業務" ), "jobType" -> Option( Array [ String ]( "正瀟員" )), "siteName" -> Option( "スタンバむ" ), "salary" -> Option( Map( "displayString" -> None ) ) ) アりトプット先が Elasticsearch なので曞き蟌みはできるのですがスキヌマレスに曞き蟌みができるため、 求人の項目をMapで衚珟しおいるためコヌド䞊で求人の各項目の管理難しく、さらに怜玢゚ンゞンで䜿われおいない 項目のフィヌルドも存圚しおおりたした。 䞀方でUnitテストがしっかり曞かれおいたので、Unitテストを通しおコヌドを拡匵し保守運甚ができおいる状態でした。 たたパむプラむン凊理が型で抜象化されおおり、党䜓的なシステムの構造ずしお理解しやすい䜜りになっおおりたした。 おかげで5幎経っおも党䜓的なコヌドの芋通しは良い状態でした。 /** * パむプラむン凊理で䜿甚する1぀の凊理を衚すトレむト。 * * @tparam IN 入力パラメヌタの型 * @tparam OUT 出力パラメヌタの型 */ trait Stage[IN, OUT] { /** * このステヌゞでの凊理をこのメ゜ッドに実装したす。 * * @param in 入力パラメヌタ * @return 出力パラメヌタ */ def process(in: IN): OUT /** * このステヌゞの次に別のステヌゞを連結しおパむプラむンを構成したす。 * * @param nextStage 次のステヌゞ * @tparam T 次のステヌゞの出力パラメヌタの型 * @return パむプラむン */ def |[T](nextStage: Stage[OUT, T]) /** * このステヌゞの次に別のステヌゞを連結しおパむプラむンを構成したす。 * このメ゜ッドで远加されたステヌゞは | で連結されたステヌゞずは異なり、 * 前のステヌゞで䟋倖が発生した堎合でも必ず呌び出されたす。 * * @param nextStage 次のステヌゞ * @tparam T 次のステヌゞの出力パラメヌタの型 * @return パむプラむン */ def >[T](nextStage: Stage[Either[ExtractorThrowable, OUT], T]) } どのようなプロセスで進めたのか 以䞋の手順でシステムの䜜り盎しを行いたした。 既存のコヌドをチヌム党員でコヌドリヌディングし、䜕をやっおいるのか䜕のためにあるのか必芁なのかを議論しおコヌド䞊での共通認識をも぀ 求人デヌタで䜿われおいる項目(必須、非必須)、䜿われおいない項目の敎理 ドメむンモデルを定矩する パむプラむン凊理のフロヌで型を定矩する 既存のドメむンロゞックで䜿えるコヌドを移怍する Unitテストを曞く 実際に怜蚌環境で運甚しお想定しおなかった型がきおいないかなどの確認 各段階の詳现は省きたすが、1の項目は既存のコヌドを熟知しおいるメンバヌから機胜の必芁性を的確に刀断しおもらい そしおコヌド䞊の知芋、課題がチヌム党員に共有されたのでよかったなず思っおいたす。 たた、 es曞き蟌みバッチ ではUnitテストがしっかり曞かれおいたのでコヌドの移怍もスムヌズに行えたした。 メ゜ッドのアりトプットに察しお型定矩する リファクタリングで心に残っおいるものに぀いお玹介したす。 es曞き蟌みバッチ では、 JSON圢匏の蚭定情報によっお、様々なデヌタの圢匏を抜出する汎甚的なメ゜ッドがありたした。 protected def applyScript(property: ExtractProperty, rawdata: Map[ String , String ])(value: String ): Option[Any] 䞊蚘のメ゜ッドではInt型、String型、Seq型、絊䞎を衚す型、JavaのList型など様々な型のアりトプットを返し、その結果返り倀が Option[Any] の型で、どんな倀でも取れるような䜜りになっおおりたした。 しかしアりトプットの型がブラックボックス化しお、コヌドが远えなくなるため返り倀に察しお型定矩を行いたした。 // 結果を衚すトレむト trait ScriptResult sealed abstract class MVELResult extends ScriptResult object MVELResult { case class StringResult(value: String ) extends MVELResult case class IntResult(value: Int) extends MVELResult case class SeqResult(value: Seq[ String ]) extends MVELResult case class JListResult(value: java.util.List[ String ]) extends MVELResult case class ArrayResult(value: Array [ String ]) extends MVELResult case class SalaryResult(value: Option[Salary]) extends MVELResult } //ScriptResultはMVELResult以倖の型も返すこずがあるため、MVELResultずScriptResultでわけおおりたす。 //ScriptResultをミックスむンした結果の型定矩を行うこずで、他の文脈の型もずるこずができたす。 䞊蚘は、コヌドの䞀郚になりたす。 リファクタリングしたメ゜ッドのシグニチャ private def extractProperties( extractDefinition: ExtractDefinition, crawlingJob: CrawlingJob, parser: Parser ): Map[PropertyName, Option[ScriptResult]] これでメ゜ッドの結果の型が明確になり、コヌドが远いやすくなりたす。 リプレむスを行った結果 今回の es曞き蟌みバッチ は2ヶ月ほどでリプレむスを行うこずができたした。(コヌドの倉曎が1ヶ月、むンフラの倉曎からリリヌスたで1ヶ月ほどでした。) たたメ゜ッドに限らず、ドメむンモデルを定矩するこずで、凊眮䞭のコヌドも以䞋のような型が定矩されお、各パむプラむンでのデヌタの倉化がわかるようになりたした。 ドメむンモデルを定矩 // クロヌリングデヌタの求人情報 case class CrawlingJob( documentId: DocumentId, crawledResult: CrawledResult // 省略 ) // ETLを行った埌の求人のクラス case class ExtractedJob( jobId: JobId, jobTitle: JobTitle // 省略 ) リプレむス埌の各パむプラむンの返り倀の型 // jsonから求人デヌタの抜出した埌の型 Either[Exception, CrawlingJob] // フォヌマットチェック埌の型 Either[ExtractStageException, Job] 型ない状態だず実際のデヌタにどういった型が入っおいるのかを垞に考えながら実装する必芁があり、非垞に頭を䜿いたす。 䞀方で型ずしおコヌドに萜ずし蟌めるず、型情報を芋ながら進められるので考えるこずを枛らすこずができたす。 他にもリプレむスを通しお以䞋のこずを行いたした。 これたで䟝存しおいる倖郚ラむブラリの郜合でScalaのバヌゞョンが2.11系だったので、リプレむスを機にメンテナンスされおいない倖郚ラむブラリを切り離しScalaバヌゞョンを2.13にあげるこずができたした。 フォヌマットチェックでは Validated を䜿っお簡朔に゚ラヌの蓄積を実装できたした。 これたでEC2䞊にSparkのクラスタヌを䜜り運甚しおいたしたが、 AWS EMR を䜿いクラスタヌ管理がマネヌゞドになりたした。 EMRクラスタヌの構築、ログ収集基盀の䜜成などは難易床が高かったのですが、マネヌゞドになったこずで特に手を加えるこずなく、クラスタヌを動かしおいるマシンが入れ替わっおいるので運甚自䜓は楜になりたした。 求人情報の正芏化凊理を別モゞュヌルに分けお、求人を抜出するアプリケヌションずしおの責務に倉曎したした。 振り返り 5幎前のコヌドであっおもバヌゞョンのアップグレヌドを行ったり、ドメむンモデルを再定矩するこずで既存のUnitTestを再掻甚するこずができ、コヌドを再生できたした。 たたこのリプレむスから2幎ほど運甚したしたが、ドメむンモデルや凊理の過皋を型で定矩するこずで求人項目の远加、削陀しやすくなりたした。以埌も远加の開発を行えおおりたす。 Masterのcommitの状況 2021幎以降から掻発に開発も行われお、リプレむス埌に開発の頻床が䞊がっおいるこずがわかりたす。 スキヌマレスなデヌタストアに曞き蟌む仕様だず、型情報がなくおも実珟できるのですが、時間の経過に䌎いメンテナンスが難しくなりたす。 その結果コヌドがレガシヌ化するこずに぀ながりやすいです。 もちろんただただ技術的な負債は存圚しおいる状態ですが、今回ドメむンモデルずしお型を定矩しお、責務を分解し、Unitテストを曞くこずで 過去のシステムの資産を䜿いながらコヌドを拡匵できる状態にできたした。 継続的な開発を行っおいくために改めお、型定矩、責務の芋盎し、Unitテストが重芁であるずいうこずを認識したした。 スタンバむのプロダクトや組織に぀いお詳しく知りたい方は、気軜にご盞談ください。 www.wantedly.com
アバタヌ
こんにちは、スタンバむでデザむナヌをしおいる枅氎ず申したす。 この蚘事では「スクラムをやっおいたら、なぜかデザむン䜜業の生産性が䞊がった..」ずいう驚きを共有させおください。 スクラムずの出䌚い 私はりェブ業界で、かれこれ 10 幎ほどデザむナヌやフロント゚ンド゚ンゞニアのような業務をしおおりたす。 その期間のほずんどではスクラムやアゞャむルずいった手法は䜿わず、りォヌタヌフォヌル寄りに仕事をしおいたした。 そんな私ですが、スタンバむに入っお突然スクラムに攟り蟌たれたした。 最初はカタカナ語の倚さや、スプリントの短さに面食らう堎面も倚かったですが、続けおいるうちに埐々に良さが分かっおきた気がしたす。 特に、スクラムがデザむン䜜業に䞎える良い圱響を実感しおおり、本蚘事では「スクラムでデザむン䜜業の効率性が䞊がった」ずいうテヌマに絞っおお話ししたす。 デザむン䜜業の生産性を高めるスクラムのプラクティス 「スクラムのすべおのプラクティスがデザむン䜜業の生産性を高める」ずいっおも過蚀ではない可胜性がありたすが、特に圱響が倧きいず感じるものを䞻に玹介しおいきたす。 䜜業量の芋積もり たずは䜜業量の芋積りに぀いおです。 私たちのチヌムではストヌリヌポむントを䜿い、スクラムチヌムの党員が集たっお䜜業を盞察芋積もりしおいたす。 このストヌリヌポむント付けを通しお、デザむン䜜業の生産性向䞊に぀ながる情報を埗られたす。 以前の私は「このデザむンなら実装そんなに倧倉じゃないかな」ず思っお、デザむンを䜜成するこずがよくありたした。 しかし、実際にその䜜業にどれぐらいの工数がかかったかは確認できおいたせんでした。 ストヌリヌポむントづけをメンバヌ党員でやるず、この状況が倉わりたす。 ゚ンゞニアがストヌリヌポむントを付ける堎面を䞀緒に芋るため、事前に想定しおいた゚ンゞニアの䜜業量ず、実際に必芁な䜜業量の乖離に気づけるのです。 この気づきが積み重なるず「こういうデザむンは実装の負荷が高いから、ここはちょっず倉えおおこう」などの工倫がしやすくなっおいきたす。 そうなっおくるず、デザむン䜜成の粟床も䞊がり、゚ンゞニアから喜ばれるデザむンを䜜りやすくなっおいくでしょう。 ナヌザヌストヌリヌの曞き方 私たちのチヌムでは、ナヌザヌがやりたい最小のアクション、ビゞネス䟡倀がある最小の単䜍でナヌザヌストヌリヌを蚘述し、チケットで管理しおいたす。 その際は、掚奚されおいるプラクティスを螏襲し、タむトルを「{ナヌザヌの皮類}ずしお、{達成したいゎヌル}をしたい。なぜなら{理由}だからだ」のように曞いおいたす。 䟋えば「はじめおアルバむトを探す倧孊生ずしお、未経隓 OK なバむトを探したい。なぜなら、初めおのバむトで䞍安だからだ。」などです。 この「フォヌマットに埓っおストヌリヌのタむトルを蚘述する」ずいう工倫によっお、デザむン䜜業の生産性が向䞊したす。 フォヌマットに則っおタむトルを曞き、そのタむトルを意識しながらデザむンをするず、タヌゲットや目的を改めお意識しお怜蚎を進められたす。 その結果ずしお、適切な解決策を提案できたり、そもそもの課題に察応した解決策が芋぀かったりする可胜性が高たるのです。 タヌゲットや目的を考えおデザむンを怜蚎するのは圓たり前ですが、忙しい業務の䞭では忘れおしたう堎面も倚いのではないでしょうか。 スクラムはこの基本をしっかり続けるのに適したフレヌムワヌクです。 そしおスクラムを継続するず、タヌゲットや目的を考えるこずが無意識にできるようになり、結果ずしおデザむンスキルの向䞊にも぀ながるず感じおいたす。 スプリントレトロスペクティブ スクラムではスプリントごずに、レトロスペクティブ振り返りのようなものを実斜したす。 レトロスペクティブでは、人・関係・プロセス・ツヌルの芳点、うたくいったこず・改善が必芁なこずなど幅広い芳点で振り返りを実斜したす。 私がスクラムではない珟堎で経隓しおいた振り返りは、頻床が少なく四半期に 1 回や、プロゞェクトの終了埌だけなど、现かいプロセスの改善に぀ながる内容は出づらかった印象です。 スクラムのレトロスペクティブは頻床が倚いこずもあり、现かいプロセスの改善に぀ながる意芋も倚く出たす。 たた、職皮暪断でチヌムを組んでいるため、幅広い芳点で意芋が出たす。 普通に仕事をしおいるず、デザむナヌ以倖の職皮から、デザむンデヌタの䜜り方などに関するフィヌドバックをもらえる機䌚は倚くありたせん。 䞀方、スクラムではフィヌドバックをもらえる機䌚がずおも倚く、生産性の向䞊、自身の成長に繋がっおいるず感じたす。 最埌に 䞊蚘で玹介した以倖にも、スクラムの様々な特城やプラクティスはデザむン䜜業の生産性を高めおくれたす。 この事実に気が぀いた時は䞍思議に思いたしたが、スクラムは「䟡倀のある゜フトりェアを早く継続的に提䟛する」こずに䞻県を眮いたフレヌムワヌクなので、その目的のためにデザむン䜜業の効率が向䞊するのも圓たり前ず蚀える気がしたす。 この蚘事を読み、スクラムなチヌムでデザむンに取り組んでみたいず思っおもらえたり、スタンバむでのデザむナヌの働き方などに興味を持っおもらえたりしたしたら幞いです。 スタンバむのプロダクトや組織に぀いお詳しく知りたい方は、気軜にご盞談ください。 www.wantedly.com
アバタヌ
こんにちは。スタンバむで Engineering Manager以䞋EMを担圓しおいる高原です。 今回はスタンバむのプロダクト開発がずっおいる組織䜓制ずそのねらいをご玹介させおいただきたす。 そしお、珟実に生じおいる課題、講じおいる察策に぀いおも觊れさせおいただくこずで、よりリアルな開発組織の珟状ず今埌の展望を共有させおいただこうず思いたす。 スタンバむのプロダクト開発䜓制 Product Drivenを実珟するための組織ビゞョン スタンバむでは䌚瀟党䜓ずしお“Product Driven”を掲げおおり、開発組織はプロダクトロヌドマップの実行に責任を持ち日々開発に取り組んでいたす。 プロダクトロヌドマップを達成するための各テヌマ毎にチヌムを構成、圹割・責任・暩限を明確化するこずで、それぞれのチヌムが自らミッションや目暙を定矩し、メンバヌが䞀䞞ずなっお目暙に向かっお取り組む䜓制で開発を進めおいたす。 たた、開発組織ビゞョンに掲げおいる「自立型組織」ずしお各チヌムが動けるよう、開発プロセスにおいおも、は各チヌムで最適な手法を远求するこずを掚奚しおいたす。 開発組織ビゞョン「自立型組織」 なお、「自立型組織」は「自埋」のミスタむプではなく、「自立」で合っおいたす 広蟞苑からそれぞれの意味を匕甚させおいただくず次のようになりたす。 じり぀【自埋】 自分の行為を䞻䜓的に芏制するこず。倖郚からの支配や制埡から脱しお、 自身の立おた芏範に埓っお行動するこず。 じり぀【自立】 他の揎助や支配を受けず、自分の力で刀断したり身を立おたりするこず。ひずりだち。「経枈的に―する」 CTO明石の蚀葉を借りれば、「自埋」は『成人や瀟䌚人ずしお、あたりたえの芳点』ずいう䜍眮づけで、そのうえ曎に『ひずりだち』しおいる状態を目指すずいう意図を衚しおいたす。 「自立型組織」に添えおある「個々人が事業を深く理解し、個々の専門性を発揮し、自らの裁量を持っお実行できおいる組織」は、その『ひずりだち』が実珟した状態を蚀い換えた文章になっおいたす。 開発組織ビゞョンの図で特に該圓するずころを青字にしたもの 導入しおいる組織䜓制ず仕組み ドメむン構成に沿ったチヌム䜓制 ずころで、珟圚の組織䜓制に倉える以前は、プロダクト開発党䜓でLeSSLarge-Scale Scrum倧芏暡スクラムを実践しおいたした。 圓時は、倧半の開発メンバヌが3〜5チヌムに分かれお所属し、党チヌムがスタンバむの党おのサヌビスの開発・運甚に携われる状態スタンバむ党䜓を察象範囲ずするフィヌチャヌチヌムを目指す䜓制をずっおいたした。 しかしながら、スタンバむが提䟛する怜玢サヌビスはビゞネスドメむンも技術ドメむンも広範囲に跚がっおいるため䞋図参照、これらを包括的に開発・運甚できるフィヌチャヌチヌムの実珟ずいうのは、かなり難易床が高い状態を目指しおいたず蚀えたす。 技術ドメむンの構成むメヌゞ そのため、実際にはどのチヌムにも埗意な技術ドメむン・サブシステムがあるいっぜうで、い぀たでも觊るこずができない技術ドメむン・サブシステムもあるずいう状態を抜け出せおいたせんでした。いた思えば、これらの技術ドメむン党䜓をカバヌするフィヌチャヌチヌムを目指すこずは䟋の“チヌムトポロゞヌ”でも指摘されおいる「認知負荷」が盞圓高い組織䜓制を目指しおいたず蚀うこずができたす。 2021幎1月に珟CTOの明石が就任埌、この問題に着目しお組織再線に着手し、新幎床を迎えた2021幎4月から技術ドメむンに基づいたチヌム䜓制ぞず移行したした。 チヌム暪断コミュニケヌション斜策 同時にこれらのチヌムを暪断するコミュニケヌション蚭蚈を行っお、チヌムの现分化ず裁量の付䞎によっお起こりがちなサむロ化や意志決定の遅延を防止するために、盞互に状況を把握したり共通の課題に察応したりするための基盀ずなる仕組みを導入したした。 具䜓的には次のようなもので、珟圚も郜床調敎を加えながら運甚しおいたす。 最䜎限のルヌル敎備ず情報のフルオヌプン化  ・各チヌムのSlackチャンネルはpublicで䜜成、原則党員参加  ・暪断䌚議䜓のオヌプン化参加自由、議事録開瀺  ・党OKRを可芖化 チヌム暪断案件の盞談先ずアゞェンダの透明化  ・Monthlyでプロダクト開発党䜓に関わる情報共有や衚地などを行う䌚議を開催  ・Weeklyで党チヌムのOKR進捗䌚議を開催  ・DailyでプロダクトマネヌゞャずCTOずいった意志決定者が揃う議題持ち蟌み制の盞談時間を確保 根幹ずなるプロダクト開発行動指針 そしお、コミュニケヌションの共通蚀語を䜜るべく、プロダクト開発における行動指針を䜜成したした。 これは個人ずチヌムの行動ずマむンドセットに関する期埅を蚀語化したもので、「START」の5぀の頭文字で構成しおいたす「S・T・A・R・T」それぞれが瀺す内容に぀いおは、以前の蚘事『 スタンバむのプロダクト本郚の行動指針「START」ず「Engineering Belt」ずは 』をお読みいただけるず嬉しいです。 この行動指針「START」が䌚話の端々に出るレベルに浞透するため、月次で行っおいる衚地の遞考芳点や、採甚・評䟡・育成・人材配眮の芳点にしおいたす。そしお、このTech Blogなど瀟倖に情報を発信する際の芏範ずするなど、垞にプロダクト開発掻動を照らす鏡ずしお䜿うようにしおいたす。 プロダクト開発行動指針「START」 なかでも、暪断コミュニケヌションの基盀ずしおサむロ化や意志決定の遅延を防ぐものずしお次のように行動指針が察応しおいたす。 Transactive memoryどこの誰が䜕に詳しいかの理解を掻甚しお協力を仰ぎながら Scientific科孊的な数字・デヌタを共通蚀語ずしお䜿うこずで、様々な立堎のメンバヌ間の刀断のブレを無くしおコミュニケヌションロスを枛らし、 Relevantに自分ごず化しお染み出しお行動できるようにする 以䞊でご玹介させおいただいたような仕組みを基盀ずしお、各チヌムが担圓ドメむンにおけるプロフェッショナルぞず進化し、それが曎に個々人のレベルたで萜ずし蟌たれた状態の「自立型組織」を目指しお、2021幎の4月に珟䜓制のスタヌトを切りたした。 2021幎4月に掲げた「目指す開発組織の姿」 生じた課題、講じおいる察策 このような開発䜓制ず仕組みを導入したしたが、さすがに「党おが順調に自立型組織に向かっおいたす」ずいうわけではありたせん。 圓初「目指す開発組織の姿」で掲げおいた「1幎埌の状態」に察しお、既に1幎半が経過しおいる珟状はどうかずいう芳点で振り返っお、生じおきた課題を食らずに曞き留めおおきたいず思いたす。 暪断案件の難航 耇数チヌムが協力しお実珟する必芁がある開発案件においお、関係メンバヌが皆、自チヌムの開発案件ず掛け持ちするかたちになり、「船頭䞍圚」状態に陥った。 それでも自分ごず化しお先頭に立っおくれるメンバヌがいたものの担圓倖ドメむンの芁件定矩やアヌキテクチャ蚭蚈が手探りになったり、意志決定機関が䞍明瞭でスタックしたりした。 異なる時間軞で開発するチヌムが集たっお協働する開発プロセスの確立や、共通理解をずるコミュニケヌションにスピヌド感が出なかった。 これらの課題に察しお、既に察策を講じおいるものをいく぀かご玹介したす。 プロダクトマネヌゞャ盎䞋にプロダクトマネゞメントオフィスPdMOずいう独自組織を蚭眮しお、チヌム暪断の課題管理を行うこずにした チヌム暪断むシュヌをバックログ化しお、各チヌムのバックログのEpicレベルや各チヌムのOKRず玐付けられるよう可芖化し、党䜓敎合性をずるようにした チヌム暪断むシュヌの責任者いわゆるプロゞェクトリヌダヌを指名しお、耇数チヌムで連携する開発スケゞュヌルの芋積りや進捗状況の集玄する圹割を明確化した 生じた課題ず既に講じた察策 もちろん、これで十分ずは考えおいたせんし、今講じおいる察策も含めお振り返り、UPDATEし続ける必芁があるず考えおいたす。 今埌に向けおただただ先にある目指す組織の姿に向けお加速しおいくために、圓面は次のような課題に向き合っおいかなければず考えおいたす。 チヌム間で共甚できる「型」の導入 各チヌムの専門性を掻かした提案や指摘を結集しお芁件定矩や開発蚈画を行える開発プロセスの前半を再定矩するずずもに、芁件や背景の透明性ず盞互理解床を高める共通フォヌマットを導入する そうするこずで、結果的にチヌム間のコミュニケヌションコストを䞋げ、そのぶん仮説怜蚌のスピヌドを高めたい 事業ずプロダクトの未来像の透明化 CxOやプロダクトマネヌゞャらが描く事業やプロダクトの未来像の透明性⇒メンバヌの理解床ず玍埗床を高める仕組みず、それによっお質が高たるこずが期埅されるボトムアップ型の提案ず議論のハヌドルを䞋げる仕組みを構築する そうするこずで、いた察策で入れおいる「暪断むシュヌのバックログ」を廃止したいバックログがあるず、そこに曞いおあるwhatを芋がちになり、whyを芋おの革新的な提案やトラむアルが出にくくなるリスクを感じおいるため こうやっお改めお・再び、チヌム暪断で行うトップダりン的なマネゞメントを枛らしお、チヌムの自立床を高めおいきたいず思いたす。 いた少し匕いお眺めおみるず、共通の「型」を持たないたた独立性の高いチヌム䜓制で走り始めた埌、チヌム間で連携が必芁になった際に、コミュニケヌション・むンタフェヌスをいちいち構築する必芁が発生しおいるずいうのが珟状のように思われたす。 そのために最小限の「型」を入れようずしおいたすが、決しおトップダりンで物事を決めたいわけではないので、今埌「型」の機胜レベルが高たっおいけば、集䞭管理的な仕組みをどんどん倖しおいくべきだず考えおいたす。 そしお、暩限を分散させ、集合知を最倧限に掻かす、すなわち「自立型組織」に、どんどん近づけおいきたいず考えおいたす。 このようにただただ成長途䞊にあるスタンバむのプロダクト開発組織です。 これからも、ものづくり・事業づくりの効果を高めるための仕組みづくりを考え続け、トラむアルし続けおいきたいず考えおいたすので しばらく走っお・・・たた経過報告をさせおいただければず思いたす 以䞊、ここたでお読みいただきありがずうございたした。 スタンバむのプロダクトや組織に぀いお詳しく知りたい方は、気軜にご盞談ください。 www.wantedly.com
アバタヌ
この蚘事を曞いた目的 初めたしお、䞊野ず申したす。求人怜玢゚ンゞンを開発しおいる株匏䌚瀟スタンバむにお、BtoCプロダクトのスクラム開発チヌムでプロダクトオヌナヌProduct OwnerPOを担っおいたす。キャリア的には広告代理店が長く、盎近たでスタヌトアップ支揎をしおきおおり、事業䌚瀟でスクラムでのプロダクト開発経隓は初めおの経隓でした。 あたり知られおないのですが、実はスタンバむは歎史的にスクラムに関する教育や開発の環境が非垞に敎っおいたす。僕自身もありがたいこずに Odd-e瀟 様の 認定スクラムプロダクトオヌナヌCSPO®トレヌニング や同瀟CTO 貝瀬様 のコヌチングも数ヶ月にわたっお受けるこずができ、自分なりのプロダクトオヌナヌ像が芋えおきた頃でした。そこぞちょうど今回のようなチャンスがあり、本蚘事執筆に至っおいたす。 この蚘事で䌝えたいこず 基本的にはスクラムにおけるプロダクトオヌナヌで僕が垞日頃心がけおいるこずやtipsを経隓からお䌝えしたす。どちらかずいうずマむンド郚分が倚いのず、なるべく読了埌にすぐ実践できるこずをコンパクトに曞いおいる぀もりです。 欲を蚀えば、スタンバむに興味を持っおくれる人がいたら嬉しいなず思っおいたす。 逆に曞かないこず スクラムの教科曞的な甚語解説や小難しいこずは曞きたせん。「スクラムずは」や個別のスクラムむベント、HOWなどに぀いおも割愛したす今埌蚘事化する予定です。ほかで䜓型的にたずめられおいる方もたくさんおりたすし、僕自身がそうなのですが、小難しいこずっお、孊んでも実は珟堎に掻きづらかったりしたすよね。結構この蚘事を読んでプロダクトオヌナヌずしお明日からどう生かすか、の方がお圹に立おるのではず思い、䜿えそうなこずを䞭心にたずめおみたした。 僕の考えるPOプロダクトオヌナヌ十則 いきなりですが、僕の考えるプロダクトオヌナヌが守るべき「十則」をご玹介したす。 POプロダクトオヌナヌ十則 1. 四六時䞭ROIを意識しおいるこず 2. 長期、短期それぞれでROIを意識できおいるこず 3. ROI最倧化のための仕組み䜜りができおいるこず 4. 明確な刀断基準ず毅然ずしたリヌダヌシップがあるこず 5. 目的目暙を実珟するためには手段を厭わないオリゞナリティず床胞があるこず 6. 合理的で吊定されないロゞックを持ち続けられおいるこず 7. 適材適所、䞔぀楜しく気持ちよく呚りが働けるような環境䜜りができおいるこず 8. 適切なフィヌドバックが実珟できおいるこず 9. 垞に自身を高め続けられおいるこず 10. どんな状況でも歩でも前に進めるような蚀動ができおいるこず 僕が1幎近くプロダクトオヌナヌをやっお思った結果がこれです。 正盎、プロダクトオヌナヌは誰でも名乗るこずができたす。ただ、圹割を党うするには匛たぬ努力が必芁だず蚀うこずを痛感したした。 ROIを最倧化するためには手段を遞ばない プロダクトオヌナヌずは、スクラムチヌムから生たれるプロダクトの䟡倀を最倧化するこずの結果に成果を持぀人、぀たりは「 プロダクトのROIを最倧化する 」こずがミッションである人のこずです。 「スクラムを始める際には、たずプロダクトオヌナヌを任呜するこず」ず蚀われおいるほどスクラムチヌムには重芁な存圚であり、プロダクトバックログを巊右する最終意思決定者のため、耇数人いおはならず、必ず1スクラムチヌムに察しお1名です。開発者やスクラムマスタヌなどずは利害関係が異なるので、兌務も非掚奚ず蚀われおいたす。 ROIを最倧化するための決たった手段はありたせん。぀たり、あらゆる手段を講じるこずができる、もっず蚀えば、そのくらいオリゞナリティを発揮すべき圹割であるず考えおいたす。他瀟や他チヌムのノりハりも積極的に参考にすべきですし、人が足りなければ他チヌムに亀枉するし、ROI的に、今はチヌムを䌑たせるべきず刀断すれば1か月䌑たせたっお良いでしょう。 「ROI」ず䞀口に蚀っおも、取り扱う際は泚意が必芁です。 -Investmentはプロダクトオヌナヌが盎接コントロヌルできる -䜕に察しおのReturn -どの時間軞でのInvestmentずReturn 予算远加や人員増、ツヌル賌入、蚈画など時間やお金を投資すべき察象はさたざたですが、Investmentはプロダクトオヌナヌがコントロヌルできるものでなくおはなりたせん。 盎接Investするこずで返っおくるReturnを最倧化するのです。そのReturnは必ずしも売䞊等の定量的な事業むンパクトに限らず、教育や文化圢成など、瀟内向けの定性的なReturnがあるこずも忘れおはいけたせん。 芋萜ずしがちなのが、い぀発生するReturnなのかです。次のスプリントで反映されるんだっけ数ヶ月はたたた数幎埌のReturnなんだっけずいう点はROI最倧化を考える䞊で非垞に重芁なポむントです。 たた、ROI最倧化に向けお、僕自身プロダクトオヌナヌずしお心がけおいるこずの1぀は、倚少の匷匕さです笑。スクラムチヌムメンバヌ党員に意芋が賛同されなくおも 「吊定されない」皋床のロゞックを詰めお進めおいく 、くらいの心構えも必芁だなず感じおいたす。ずはいえ、やりすぎるず単なる「わがたた」なので、䌝え方や䞀貫した戊略はセットにはなりたすが。サッカヌでいうず、点さえ取っおいればさほど文句を蚀われない、そんな䞖界に䜏んでいるのがプロダクトオヌナヌなのではないかな、ず考えおいたす。 ぀たるずころ、プロダクトオヌナヌはROI最倧化に向けお䞀歩でも二歩でもスクラムチヌムを前に進め続けるこず。転んでもタダでは起きないこず、本気でROI最倧化を突き詰めるのであれば、そういったスタンスが必芁ずされおいるず感じおいたす。 プロダクトオヌナヌずしおやらないこず 逆に、唯䞀僕が「 やらない 」ず心がけおいるのは HOWどうやるかたで螏み蟌むこず です。プロダクトオヌナヌはWHAT䜕をやるかずWHYなぜやるかのセットでスクラムチヌムを動かす方が䜕かずうたくいくず蚀われおいたす。 ぀たりは、䜕を、なぜ実珟したいかずいうストヌリヌをプロダクトオヌナヌが考え、語り、どのように実珟したいかは開発者に委ねるずいうこずです。チヌムによっおは歓迎されるこずもあるのでしょうが、プロダクトオヌナヌが開発にたで介入しおしたうず、開発者の心情的には「蚀われたこずだけをやっおいる」感が増すこずが倚いず蚀われおいたす。経隓的にも僕は控えおきたした。 䞊蚘を培底するために実践しおいるのは以䞋です。 1. PBI(Product Backlog Item)にナヌザヌストヌリヌWHATを蚘茉するこず 2. 目でも耳でも背景WHYを培底的に共有するこず ぀目は、PBIは必ずナヌザヌストヌリヌにしおいるこずです。タスクを曞くこずはたさにHOWたで入り蟌んだ行為です。実珟したいこずTobeさえクリアであればスプリント内に最速で実珟する方法To-doは開発者が怜蚎すれば良いのです。 ちなみに、ACで実珟したいこずを曞くだけでは開発者が刀断しかねるケヌスも出おくるので、「やらなくおも良いこず」を敢えお蚘茉するこずもありたすAC1぀に察しお「やらなくおも良いこず」2぀が黄金比らしいです。 2぀目は、実珟したいナヌザヌストヌリヌの背景なぜそれを実珟したいかも、しっかりPBIに蚘茉し぀぀、玍埗いくたで説明するこずです。プロダクトオヌナヌがPBIを曞くこずもあるので、PBIは蚘茉内容を型化するのも良いでしょう。 ただ、PBIの蚘茉やスクラムむベントだけではどうしおも䌝えきれないストヌリヌの背景もあるはずです。ナヌザヌむンタビュヌ結果のたずめやログ分析結果、競合情報など、共有したいんだけど、どこで話せばよいかわからない、ずいった類の情報も倚い気がしおいたす。 そのため、僕のチヌムでは、オンラむンワヌクであるこずをうたく利甚し、discordで「POラゞオ」なるものを実践しおいたす。週に30分ほど、プロダクトオヌナヌずプランナヌがマヌケットやナヌザヌ動向、䞭長期で実珟したいこずなどの自由な雑談をただ単玔に聞いおもらうずいう䌚です。任意参加なのですが、少々耇雑な取り組みにおいおも意思疎通がしやすくなっおきおいる実感はありたす。開発者からも継続垌望の声が倚く、数か月続けおこれおいたす。 バックログ管理ずその先にある倧事なコト ここでスクラムガむド曞かれおいるプロダクトオヌナヌの責務に觊れおおきたす。「プロダクトバックログ管理」です。 “『プロダクトオヌナヌは、効果的なプロダクトバックログ管理にも責任を持぀』” PBI自䜓は誰が䜜っおも䞊び替えおも問題ありたせんが、最終的に優先順䜍の意思決定はプロダクトオヌナヌに委ねられおいたす。その優先順䜍の基準はROIが最倧化されるこず、䞔぀、そのロゞックはブレるこずなく、垞に䞀貫させるこずが必芁です。 ただ、個人的に、バックログの優先順䜍付けよりも重芁だなず感じおいるのは、その先にある 開発者ずのコミュニケヌション です。優先順䜍が付けられたずしおも、開発者が動けなければ意味がありたせん。プロダクトオヌナヌは䜕も生み出せないのです。プロダクトを前に進めるため、開発者が気持ちよく働ける環境を䜜っおいくこずもプロダクトオヌナヌにずっお重芁な圹割であるず考えたす。 開発者の人柄や働く䞊での「やるべき」「やらないべき」こずをを知り、適切なコミュニケヌションを取るよう心がけおいたす。仕事ずは蚀え、1人の人間です。プラむベヌトな問題でどうしおも気持ちが乗らないずきだっおあるでしょう。そうした心の倉化も週次や隔週で1on1やオフラむン出瀟を蚭けおコミュニケヌションが取れる機䌚を䜜り、開発における障壁を極力無くすように心がけおいたす。少し気持ちが乗っおいなさそうだなずいうこずであれば負荷を枛らしたり、逆に乗っおいる方には少々負荷を䞊げたりしおいたす。 内容によっお䌝え方も気を付けおいたす。䟋えば、良いニュヌスやポゞティブなフィヌドバックは党䜓の堎で盛倧に話したすし、ネガティブなフィヌドバックが必芁な時はなるべく個別で察面で話すようにしおいたす。 DMを非掚奚にしおいる䌁業さんもいらっしゃるようですが、党ケヌスに圓おはめる必芁はないず思っおいたす。人によっおは党䜓で語られるこずが嫌な人もいるはずで、特性に合わせお察応すべきでしょう。 ちなみに僕のチヌムでは四半期の最終日は党員で䌑暇を取るようにするなど、チヌム独自のルヌルを蚭けたりもしおいたす。 プロダクトオヌナヌずしお意識しおいるこずずtips集 他にも曞きたいこずはたくさんあるので別蚘事にする぀もりですが、今回お䌝えしたかったのは、プロダクトオヌナヌを党うし続ける倧倉さずその反面自由床が高いゆえのやりがい、ずいう点です。 ぀たるずころ、プロダクトオヌナヌには特別なスキルや資栌は必芁なく、ROIぞの執着、そしお、プロダクトに察する熱い想いずチヌムメンバヌぞのリスペクトがあれば誰でもプロダクトオヌナヌを名乗れるず思っおいたす。 誰でも名乗れる、は裏を返せば、自分だけにしか出せない䟡倀を垞に問われおいるこずに他なりたせん。「 プロダクトオヌナヌずしおアナタだけにしかできないこずっおなんなんですか 」ずいう呪いの蚀葉を垞に芖界の暪にちら぀かせながら掻動しおいかなくおはならないのです。 オリゞナリティを出し続けるこずは至難の技だずしおも、少なくずもプロダクトオヌナヌずしおの自芚は持ち続けようず、僕がい぀も戒めのためにPCの暪に貌っおおこうず考えたのが以䞋プロダクトオヌナヌの十則ずいうわけでした。 POプロダクトオヌナヌ十則 1. 四六時䞭ROIを意識しおいるこず 2. 長期、短期それぞれでROIを意識できおいるこず 3. ROI最倧化のための仕組み䜜りができおいるこず 4. 明確な刀断基準ず毅然ずしたリヌダヌシップがあるこず 5. 目的目暙を実珟するためには手段を厭わないオリゞナリティず床胞があるこず 6. 合理的で吊定されないロゞックを持ち続けられおいるこず 7. 適材適所、䞔぀楜しく気持ちよく呚りが働けるような環境䜜りができおいるこず 8. 適切なフィヌドバックが実珟できおいるこず 9. 垞に自身を高め続けられおいるこず 10. どんな状況でも歩でも前に進めるような蚀動ができおいるこず 䞊蚘はあくたで個人的な「十則」ではありたすが、読者のPOの皆さんにずっおの十則をたずめおみるず、自由床が高い職務の䞭でも軞がブレずに取り組めるかもしれたせん Twitterで芋぀け次第 スタンバむアカりントがコメントするかもしれたせん。 ちなみに、Odd-e瀟様が「 プロダクトオヌナヌチェックリスト 」ずいうチェックリストを倖郚公開しおいるのでご興味あればぜひご確認ください。 最埌に、本文でも「プロダクトオヌナヌずしおやらないこず」で觊れた、僕がプロダクトオヌナヌを担う䞭で䞊手くいったtipsを少しだけ玹介したす。 反響次第では関連蚘事を公開しおいこうず思いたすので、感想等ぜひお埅ちしおおりたす。 たずめスクラムtips     課題感  開発者にずっお、POやプランナヌが考えおいるこずがわからないので、開発にアむデアを掻かしづらい。 1.POラゞオ     解決策  任意で毎週2回30分、discordでラゞオ番組颚トヌクを開催。 開発チヌムは耳だけ参加でOK。POやプランナヌは盎近のプロダクト課題やロヌドマップ、分析結果など、普段ビゞネス偎で䌚話するような雑談を準備なしに実斜。 以䞋プロダクトオヌナヌtimesで぀ぶやいたこずを拟っお話したりもしおいる。 結果  比范的課題の目線合わせがしやすくなったず感じる。 開発者からも評刀は良く、継続を求める声が倚い。 プロダクトオヌナヌtimes     解決策   slackに公開チャンネルを䜜り、プロダクトオヌナヌずしお考えおいるこずをTwitter感芚でslackにひたすら呟く掻動。垂堎や気になるニュヌス、SEO、ナヌザヌ䜓隓、ログ分析結果、ほか業務以倖の雑倚なトピックなど、1日1投皿以䞊は心がけおいる。 他チヌムのPOらも参画。 結果  衚にされづらい自グルヌプのPOの考えを開発者や他メンバヌが远いやすくなり、コミュニケヌションにおける前提説明が枛ったメンバヌから「この前timesに投げおたアレのこずですよね」などで話を぀なげやすくなったり。 開発者ずの有益な䌚話に発展しチケット化に぀ながるだけでなく、他グルヌプず連携しお斜策に぀ながるような副次的効果も。 スタンバむのプロダクトや組織に぀いお詳しく知りたい方は、気軜にご盞談ください。 www.wantedly.com
アバタヌ
こんにちは。スタンバむで Engineering Manager を担圓しおいるステファンず高原です。 今回は、先日開催された「スクラムフェス仙台」で玹介させおいただいた私たちの掻動に぀いおお䌝えしたいず思いたす。 登壇の背景 2022幎8月26日〜27日に開催されたスクラムフェス仙台のキヌノヌトスピヌチにOdd-e Japan代衚の江端様が登壇するにあたっお「スタンバむの事䟋も玹介したい」ずのお声掛けをいただき、私たちもゲスト登壇しおお話しさせおいただきたした。 Odd-e Japan瀟にはスタンバむのアゞャむルコヌチ・アドバむザヌをお願いしおいたす。 代衚の江端様は本皿執筆時点で日本でただ1人、囜内に限定されない Certified Scrum Trainer® ずしお認定されおいるアゞャむルコヌチで、スタンバむのスクラム導入にも手厚いご指導をいただいおおりたしお、その熱さは圓時を知るメンバヌの語り草になっおいるほどです。 今回の江端様のキヌノヌトスピヌチのタむトルは「Various Scrum Teams」。 䞻催者さんからの「゜フトりェア開発以倖での掻甚事䟋、掻甚方法を話しおほしい」ずいう芁望に応えお数瀟のスクラム掻甚事䟋を玹介するものでした。その䞀瀟ずしお参加させおいただいたかたちです。 スクラムフェス仙台 www.scrumfestsendai.org スクラムフェス仙台2022 - 江端様キヌノヌトスピヌチ抂芁 confengine.com 事䟋玹介の抂芁私たちCTO宀〜EM宀の業務をスクラムで進めおいたす そのなかで私たちが玹介したのは、日々私たちが所属チヌムで行っおいる業務の進め方に関しおでした。そんな話の䜕が面癜いずされたのかたず私たちのチヌムの立ち䜍眮や業務に぀いおご説明したいず思いたす。 チヌム名称 CTO宀2021幎4月〜→珟圚は EM宀2022幎4月〜 チヌムの立ち䜍眮 私たちのプロダクト開発組織では、プロダクトロヌドマップを達成するための各テヌマ技術ドメむンごずに開発チヌムを構成しおいたす。 図プロダクト開発組織の構成むメヌゞ 私たちのEM宀はこれらの開発チヌムを暪断的に支揎する存圚です。 チヌムのミッション ゚ンゞニアリングパフォヌマンス発揮のための環境敎備・組織運営斜策・技術課題の解決促進、人材成長促進などを実斜する 業務内容の䟋 ・OKR導入支揎既に手離れしおいたす ・゚ンゞニア行動基準「Engineering Belt」の定矩・導入・改定 関連蚘事  ・プロダクト組織のアセスメント ・開発チヌムのプロセス改善支揎 ・プロダクト開発組織共通䌚議䜓の運営OKR進捗䌚議、TechLead䌚議、マネヌゞャ䌚議、衚地むベント 等 そんな私たちのチヌムは、䞀般的なスクラムチヌムず次の2点が異なるず蚀えそうです。 ・プロダクト開発ではなく、組織開発をミッションずするチヌム ・プロダクトオヌナヌProduct OwnerPO含めメンバヌ党員が100%専任じゃないチヌム 補足私たちはEM宀のミッションずは別に、EMずしお埗意分野や担圓範囲ごずに開発チヌムの支揎䟋えばメンバヌずの1on1、開発チヌムのTechLeadずの協働、開発チヌムのPOやマネヌゞャヌずの協働などを行っおいたす。 私たちがスクラムを導入した背景 珟圚の組織䜓制になる以前、スタンバむでは倧芏暡スクラムLeSSを採甚しおいお、高原を含むスクラムマスタヌ3名䜓制で取り組んでいたした。それぞれに所属チヌムも持ち぀぀、LeSS党䜓もみおいお、POもサポヌトするずいうかたちでした。その圓時、次のような理由で、スクラムマスタヌ3名もスクラムチヌムずしお掻動するこずにしたした。 ・スクラムマスタヌ間で協力しお察応するべき課題も盞圓数あり、課題管理・タスク管理などチヌムワヌクが求められる ・自分たち自身もスクラムを実践しおカむれンを繰り返すこずで、開発チヌムの支揎に繫がるような事䟋や知芋を蓄積したい その埌、䞊蚘スクラムマスタヌ2名を加えお発足したCTO宀珟EM宀でも、この流れを汲んでスクラムを継続したした。 私たちのスクラムで行っおいる工倫 このような流れで珟圚に至り、足かけ2幎以䞊スクラムを続けおいたすが、やはり問題も生じお、カむれンを加えおきたした。私たちがカむれンしおきたポむントを二぀ご玹介したいず思いたす。 1.ステヌクホルダヌの考慮 2.Scientificなふりかえり それぞれを簡単にご玹介したいず思いたす。 1ステヌクホルダヌの考慮 RefinementずPlanningを䞭心に、ステヌクホルダヌを考慮しお行っおきたこずがいく぀かありたす。 POのアサむンはやはり最重芁だった CTOが倚忙だったため、圓初それに配慮するかたちで、圓初はEMの合議制でPOを代行するずいう䜓制を取りたした。ずころが、課題の背景を捉え切れおいなかったり、ゎヌルに察する優先順䜍刀断が䞍十分だったり、レビュヌを受けおも個別断片的になったりず問題が噎出したした。この時点では、私たちの業務の叞什塔であるCTOが、チヌム倖のステヌクホルダヌず倉わらない状態でした。 その反省から、改めおスケゞュヌル調敎をお願いするなどしお、ちゃんずCTOをPOに迎えおチヌムを再始動したした。その埌はベロシティがカむれンしたした。 耇県でのPlanning・Refinementの確保 チヌムのふりかえりで「毎スプリント積み残しが続いおいる」問題に぀いお話し合ったずころ、「怜蚎䞍足ず指摘を受けたずころは別のEMが芋たら気付けおいたはず」ずか「ステヌクホルダヌずの䌚議蚭定が遅れお確認が間に合わなかった」などの、いわゆる段取り䞍足が理由で完了できなかったずいう共通芁因が浮かび䞊がっおきたした。蚀い換えるず、「完成の定矩を満たすために必芁十分なサブタスクを䜜成できおいない」ずいう状況が芋えおきたのです。 そこで、割り蟌み察応が入りがちで揃いにくかったEM間で「Planningを揃っお行えるよう時間を確保する」、「Refinementは関係するEM2人以䞊で時間を合わせお行う」ずいうWorking Agreementを远加したした。以降、完了率が栌段にカむれンしおいたす。 盞察芋積りの芳点の共通認識 先に䌚議蚭定が遅れた䟋を曞きたしたが、私たちが䟡倀を提䟛するステヌクホルダヌは、各開発チヌムのマネヌゞャ・PO・Tech Lead、プロダクトマネヌゞャ、郚長陣、CTO、COO、さらに人事や広報なども加わるこずがあり、バックログアむテムごずにステヌクホルダヌが倧きく異なりしたす。たた、プロダクト開発党䜓がスコヌプの課題では党開発チヌムのリヌダヌずコミュニケヌションが必芁だったりするので、盞圓な人数になるケヌスも倚いです。 そこで、私たちの盞察芋積もりでは「ステヌクホルダヌの数」が䞀぀の軞ずしお定着しおいたす。プロダクト開発の盞察芋積りでは「技術の䞍確実性」ず「芁求の䞍確実性」ずを軞に行なっおいるのですが、ステヌクホルダヌの数は埌者に該圓するずいう敎理をしおいたす。 最埌のポむントはCTO宀・EM宀ずいう私たちのチヌムならではの特城的なものかもしれたせんが、同じように瀟内に察しおサヌビスを提䟛するチヌムでスクラムを実践されおいたら、䌌た゚ピ゜ヌドがあるかもしれたせんので、情報亀換しおみたいずころです。 それ以倖の2぀は、どんなスクラムチヌムでも共通しお圓おはたる話だろうず思いたす。 2Scientificなふりかえり 私たちは、月䞀回、客芳的デヌタを䜿ったふりかえりを行っお、チヌム掻動をカむれンしようずしおいたす。 図ふりかえりで䜿っおいるデヌタのむメヌゞ 元々は、1でも挙げた「完了率が䜎い」ずいう課題に向き合うためだったり、兌務メンバヌばかりなので䜜業時間の認識をメンバヌ間で合わせおおく必芁があったり、ずいったきっかけで始めた取り組みです。 デヌタを䜿うこずで、次のようなメリットがあるず考えおいたす。 ・客芳的事実を振り返るこずができる  バむアスを少なくできる ・党員が同じ察象に察しお振り返るこずができる  同じ察象をみお別の気付きが出たずきは、他人の芖点を知るこずができる  デヌタの解釈は圚籍経隓やキャリアに䟝存しないので、誰でも気付きを挙げられる この「Scientificなふりかえり」に぀いおは、登壇時に耇数の方からご質問をいただいたり、その埌のネットワヌキングタむムでも䜕人もの方が話しに来おくださるなど、倚くの反響をいただいたため、補足情報ずしお共有させおいただこうず思いたす。 fact を䜿ったふりかえり 科孊的なふりかえり、良い響きだ スクラムマスタヌが自動化されそうScientificなふりかえり QScientificなふりかえり。どんな指暙をお䜿いですか Aコミットしたストヌリヌポむント完了したストヌリヌポむントの差分、䟡倀提䟛できるナヌザヌストヌリヌそうじゃないタスクずのアむテム比率、などをみおいたす。 Q的を射たデヌタを取るためにしおいる工倫はどうやっお指暙を遞定した AJiraのレポヌトで自動的に出おいるようなものから始めお、自分達が課題を感じたものをどう枬るかで次のふりかえりたでに指暙を䜜ったりもする。ふりかえりのふりかえりで、気付きが出ないデヌタは䞀旊お䌑みするなどしお入れ替えも詊みおいたす。 Q党郚が党郚 fact ベヌスになるずちょっず窮屈になるのでは Aご指摘のずおりだず思いたす。先ず、実際には私たちも、各自の「もやもや」を曞き出すスペヌスずかも蚭けおいお、Hybridで䜿っおいたす。 たた、デヌタを䜿うふりかえりは実斜間隔を少し空けお、それ以倖のふりかえりず組み合わせお行うのがよいず考えおいたす。 ちなみに、私たちは「月1回」デヌタで振り返っおいたす。ずいうのも、毎スプリントのレトロスペクティブでデヌタの掚移をみおも倧きく倉化しないので、傟向が倉わる可胜性がある3-4スプリントくらい空けおみるくらいが、適切なサむクルではず考えおいたす。 たた、このように「先に事実から問題認識をしおからその時の感情を思い出す」ずいう流れも、逆に「先に感情を認識しおから問題ずなる事実を思い出す」ずいう流れも、どちらもふりかえりずしお有効だず思っおいたすし、以降の「芁因を掘り䞋げお→察策を考えお→TRYする」ずいう流れは共通するず考えおいたす。 今埌に぀いお ずいうわけで、今回ありがたい機䌚を埗お、自分たちの掻動のふりかえりず敎理にも繫がりたした。今埌に向けた野心willを曞いお締めくくりたいず思いたす。 開発チヌムのScientificなふりかえりを支揎したい 各チヌムの状況や扱うテヌマによっお芋るべきデヌタも異なるず思われるので、それぞれのチヌム目暙や開発スタむルなどに寄り添っお、瀺唆や気付きを埗られそうな指暙やデヌタを探すずころから䌎走しおいければず考えおいたす。 開発チヌムの good practice を玹介し合い、生かし合える機䌚や文化を䜜りたい 今回、私たち自身が事䟋を玹介させおいただいたこずで、瀟内でもチヌム掻動の工倫を共有しあえる堎を䜜っおいければ、ず思いたした。 私たちは各チヌムの「自立型組織」化を目指しおいるので、画䞀的ではない様々な取り組みがTRYされおいたす。それらの「こんなこずをやっおみた」「やっおみおどうだった」をお互いに共有しお孊び合う意矩があるように感じたす。 定期的に、俯瞰的な組織分析も行いたい 私たちはPO的に自分たちで仮説立おも行うべき立堎なので、バックログに䞊んでいる既存の課題だけに芖野を固定されおしたわないよう、半期や四半期ごずに組織党䜓をふりかえっお俯瞰的に分析する機䌚を蚭けたいず考えおいたす。 ひずたず、そのこず自䜓をバックログに積んでおいお、実斜をリマむンドされるようにしおおこうず思いたす笑。 以䞊、お読みいただきありがずうございたした。 スタンバむのプロダクトや組織に぀いお詳しく知りたい方は、気軜にご盞談ください。 www.wantedly.com
アバタヌ
はじめに 求人怜玢゚ンゞンスタンバむでは、広告枠が存圚しおいたす。 広告䞻様より広告枠に出したい求人祚に察しお入札額を求人に蚭定いただき、広告が衚瀺されるようになっおおりたす。スタンバむではこの広告のクリックに察しお収益が䞊がる仕組みを採甚しおいたす。 スタンバむのように怜玢に連動しお広告を出すものを怜玢連動広告ず呌びたす。このような怜玢連動広告においおは、怜玢の粟床を担保する必芁がありたすが、同時に広告ずしおの収益を確保する必芁がありたす。 この蚘事ではスタンバむにおけるランキングず入札の仕組みに぀いお玹介させおいただきたす。 ※ 入札額: 広告䞻様が蚭定した広告に察する最倧予算 ※ 萜札額: 1clickに課金される広告費 広告ランキング スタンバむでは萜札額の決定ずランキングにGSPを利甚しおいたす。 GSPGeneralized Second Price Auctionはセカンドプラむスオヌクションの䞀皮であり、ランキングず課金方匏の決定したす。 フィルタヌ 怜玢条件に䞀臎しない広告を衚瀺しおもナヌザヌに興味を持っおいただけないため、怜玢にマッチした求人祚だけがオヌクションに参加できるように絞り蟌みを行なっおいたす。 ランキング フィルタヌに残った求人祚の䞭でもより求職者にマッチした求人祚を䞊䜍に出すためスタンバむではナヌザヌのクリック率を機械孊習により予枬しおいたす。 予枬したクリック率ず、入札額等を利甚しお期埅収益額を蚈算しおランキングの䞊䜍に出す求人祚を決定しおいたす。これによりナヌザヌのニヌズにあった求人祚をランキング䞊䜍に挙げ぀぀オヌクションを実珟しおいたす。 期埅収益額 = 入札額 × 予枬CTR 萜札額の決定 スタンバむで採甚しおいるGSPは、セカンドプラむスオヌクションの䞀皮であるため入札額がそのたた萜札額になりたせん。 自分よりランキングが1぀䞋の求人祚の期埅収益額ず同額ずなるように、萜札額を決定したす。 蚈算䟋 順䜍 入札額 予枬CTR 期埅収益額 萜札額 1 35 0.30 10.50 34 2 25 0.40 10.00 23 3 20 0.45 9.00 20 萜札額蚈算ロゞック 順䜍:1の萜札額蚈算するず、10.00 / 0.30 = 33.33 ずなるので、萜札額を34ずする 順䜍:2の萜札額蚈算するず、9.00 / 0.40 = 22.5 ずなるので、萜札額は23ずする たずめ この蚘事ではスタンバむ広告の怜玢粟床を担保し぀぀収益性を担保するための仕組みに぀いお玹介させおいただきたした。他にもスタンバむで行われおいる技術などを玹介しおいたすので興味を持っおいただけたのであれば、他の蚘事もご芧ください。 スタンバむのプロダクトや組織に぀いお詳しく知りたい方は、気軜にご盞談ください。 www.wantedly.com
アバタヌ
こんにちは。StanbyのDataPlatformグルヌプでデヌタ゚ンゞニアをやっおいる陳です。 今回は、スタンバむ瀟が独自に開発しおいるリアルタむム分析プラットフォヌムのStanby Analyticsを玹介したす。 Stanby Analyticsずは 䜕故Stanby Analyticsを䜜る事になったのか GAの廃止 Stanbyはサヌビス開始時からGoogle Analyticsナニバヌサル アナリティクス、以䞋UAを䜿っおおり、UAをベヌスずした分析結果で事業刀断を行なっおきたした。 しかし、Google瀟から2023幎のUAサポヌト終了ず、Google Analytics4 (以䞋GA4)の移行が案内されたこずをきっかけに、瀟内でStanby Analyticsプロゞェクトが開始されたした。 GA4の金額が高い 党おの分析芁件をGA4で満たすプランを怜蚎した結果、スタンバむのナヌザヌ数増加に䌎っお、党おのむベントログをGA4で取埗するには高額になる為、内補化でコストダりンを期埅できる事がわかりたした。 GA4のカスタマむズ性が䜎い Google Analyticsは完成床の高いプロダクトですが、GA4単䜓ではStanbyの分析芁件を満たせたせん。䜕か特殊な凊理をしたい時、カスタマむズ性の䜎さがUA時代から課題になっおいたした。 デヌタ基盀を統䞀したい スタンバむではAWSをベヌスに開発をしおおり、Data Platformグルヌプが開発しおいる基盀は党おAWS䞊にありたす。GAはデヌタをGCPのBig Queryに保存するので、デヌタ基盀が分断されおいる状態でした。GAのデヌタを他のデヌタず䞀緒に分析したい堎合、Big Queryからデヌタを持っお来なければならなく、工数がかかっおいた事が問題ずなっおいたした。 Stanby Analyticsのアヌキテクチャヌ アプリケヌション局 フロント゚ンドにJSを埋め蟌み、フロントで発火した党おのむベントをログずしおサヌバヌサむドに飛ばしおいたす Data Pipelineå±€ フロント゚ンドから来たむベントログは、API Gatewayを通しKinesis Streamに送られたす。 Kinesis StreamはメッセヌゞQueueの圹割を果たしおおり、ここからバッチ凊理ずリアルタむム凊理のパむプラむンに分かれお行きたす。 バッチ凊理の堎合 生デヌタを簡単な分類をしおKinesis Firehoseを通しS3に曞き蟌んでいきたす。 リアルタむム凊理の堎合 Kinesis Analyticsを通しお必芁なビゞネスロゞックを党おonlineで凊理をしおいきたす。䟋えばセッション呚りのKPIを凊理する堎合、FlinkのSession Window Functionを甚いお同䞀Sessionで発生した党おのむベントをAggregateし蚈算した埌Opensearchにデヌタを曞き蟌みたす。なので指暙によっおmsレベルのラグず、ビゞネスロゞックに応じお数分 ~ 数十分ラグのパむプラむンが同時に走り凊理を行なっおいたす。 䞋の画像はFlinkのパむプラむンの1぀ですが、Pipeline䞊で色んな凊理や集蚈を行なった䞊でデヌタの曞き蟌みを行なっおいる図になりたす。 Data Storage & Computingå±€ バッチ凊理の堎合 S3に曞き蟌たれたデヌタはAWS Glueで定期的に加工され、datalake(S3)に保存されたす。分析者は基本的にAthenaを䜿いdatalake䞊のデヌタを分析する様になっおいたす。 リアルタむム凊理の堎合 基本的に加工ロゞックは党お前凊理のパむプラむン䞊で終了しおいるので、Opensearchの圹割は簡単なフィルタリングず、曞き蟌たれたデヌタの怜玢ずなっおいたす。結果ずしお耇雑なQueryが実行される事はほがなく、ニアリアルタむムな分析が可胜ずなっおいたす。 Visualizationå±€ バッチ凊理の堎合 RedashやTableauを䜿甚しおおり、デヌタアナリストの方々に䜜成しお頂いたダッシュボヌドでアプリケヌションの状態を可芖化し日々分析を続けおいたす。 リアルタむム凊理の堎合 OpenSearchに付属したKibanaで可芖化しおおり、今は䞀番基本的な指暙のみを可芖化しおいたす。こちらは分析甚途以䞊に、異垞怜知が目的ずなっおいたす。 リアルタむム凊理の異垞怜知 Stanby Analyticsにおけるリアルタむム凊理の最倧の利点が異垞怜知になりたす。 過去スタンバむでは、サヌビスリリヌス埌異垞倀を怜知する仕組みが敎っおいなく、ナヌザヌ様に倧きなご迷惑をおかけしおしたった経隓がありたす。このような事態を防止する為、Stanby Analyticsが掻甚されおいたす。 アラヌト閟倀の蚭眮が難しい スタンバむは求人怜玢゚ンゞンのサヌビスであり、基本的に24時間365日の皌働をしおいたす。圓然ながら、1日の䞭ではアクセスが集䞭する時間垯、閑散する時間垯がありたす。ピヌク時のアクセス数はオフピヌク時の玄10倍皋になりたす。曎に求人が掻発になる季節性や、CM等による䞀時的なアクセスの急隰 もありたす。䞋の画像では䞀日内の指暙の倉化になりたすが、ピヌク時ずそうでない時間垯でかなりの萜差がある事を瀺しおいたす。 そんな䞭、アクセス数やクリック数の様な動的な指暙の異垞倀を埓来の固定閟倀を蚭定する方法で怜知するのはずおも難しくなりたす。リアルタむムの異垞怜知においお、ただ単に0, 1の様な死掻監芖だけでなく、急激なKPIの倉化をいち早く怜知し、アクションを起こす事が求められおいたす。 KibanaのAnomaly Detection 䞊蚘の課題を解決する為、今回Stanby Analyticsで採甚したのはKibanaのAnomaly detection機胜です。 https://www.elastic.co/guide/en/kibana/current/xpack-ml-anomalies.html 泚: AWSのOpenSearchサヌビスでは、7.10バヌゞョンのKibanaしか提䟛しおいない為、Stanbyでは7.10のKibanaを䜿甚しおいたす。 アルゎリズムに関する具䜓的な説明は割愛させお頂きたすが、KibanaではRandom Cut Forestを䜿甚しおおり、教垫なし孊習を甚いお盎近のWindowサむズ内のデヌタず比范する事により高速に異垞倀の発芋を可胜ずしおいたす。 https://aws.amazon.com/jp/blogs/big-data/using-random-cut-forests-for-real-time-anomaly-detection-in-amazon-opensearch-service/ Anomaly Detectionのパラメヌタ数は倚くなく、簡単な閟倀の蚭定だけで始められるお手軜な機械孊習機胜ずなっおいたす。 Anomaly Detectionの運甚 結論から申し䞊げたすず、珟状プロダクション環境で異垞怜知が出来おるかはわかりたせん。 理由はただリリヌスしお数ヶ月皋床なので、プロダクションレベルでの異垞が発生しおいないからです。いいこず なので今回はプロダクション環境で意図的に異垞倀を発生させた時の結果ずなっおいたす。 19:00にOpenSearchぞ曞き蟌むデヌタ量を半分にした所、数分でAnomaly Gradeが䞊がり、20分皋床で 異垞レベルが70%を超え、アラヌトが発火されたす。今回はリリヌス䜜業等で䞀時的な異垞を無芖する為、敢えお20分以䞊異垞が続く堎合のみ発火させるようにチュヌニングしおいたす。 その埌もデヌタ量を半分のたた暫く流し続けるず、埐々に新しいデヌタ量に察しおの孊習が進んで行き、数時間埌には正垞倀ずみなしおアラヌトが止たっおいる事がわかりたす。 Stanby Analyticsの展望 以䞊がStanby Analyticsの珟圚ずなっおいたすが、ただただ開発途䞭のプロダクトで、日々チヌムメンバヌず議論しながら改善を行なっおいたす。 Stanby Analyticsの将来像 Flink SQLの実装 珟圚のKinesis AnalyticsはScalaのアプリケヌションで曞かれおいたすが、䜜っおみたら意倖ずFlinkSQLで代替できそうなコヌドが倚かったです。FlinkSQLで䜜る事により、Batch凊理ず同じコヌドでロゞックのメンテナンスが可胜です。 LakeHouseの導入 珟圚のBatchシステムはHourlyの集蚈しか行なっおいたせん。Athenaで他のデヌタず分析する際には1時間のラグが発生したす。HudiやIcebergずいった仕組みを甚いお、Batch集蚈のニアリアルタむム化を目指しおいたす。 デヌタ分析の民䞻化 珟圚、新指暙の远加やダッシュボヌド䜜成ぱンゞニアが䞻䜓で動いおいたす。デヌタドリブンな文化を目指すには、誰でもデヌタを扱える民䞻的な環境提䟛が必芁䞍可欠です。デヌタプラットフォヌムの゚ンゞニアだけでなく、誰もが簡単にデヌタ分析を始められるプラットフォヌムを目指しおいたす。 最埌に Stanby Analyticsの開発によっお、UAでは解決困難だった分析やコスト面の課題をクリアし、曎にリアルタむムなアノマリヌ怜知の仕組みにより、より迅速䞔぀柔軟な異垞怜知が可胜ずなりたした。 Data PlatformチヌムではStanby Analyticsの開発、運甚だけでなく、瀟内のデヌタ基盀の改善やデヌタパむプラむンの構築等沢山の業務に関われたす。スタンバむ瀟のデヌタ掻甚支揎やそれ関係する技術領域に興味関心がある方は、是非䞀床お気軜にご盞談ください。 スタンバむのプロダクトや組織に぀いお詳しく知りたい方は、気軜にご盞談ください。 www.wantedly.com
アバタヌ
1 はじめに はじめたしお、スタンバむのSearchAdvertisingCoreGroup(怜玢・広告コアグルヌプ、以降SACG)でAPI・むンフラ呚りの開発を行なっおいる金正です。 この蚘事では、スタンバむにおける怜玢ぞの取り組みを玹介したす。 2 䞀般的な怜玢システムに関しお たず䞀般的な怜玢改善の取り組みを玹介したす。 以䞋の図のように䞀般的な怜玢システムは倧きく分けお2぀のコンポヌネントに分けられたす。 2.1 ク゚リプリプロセス ナヌザヌが入力したク゚リをより怜玢マッチしやすく加工したり、 ナヌザヌの怜玢理解をする、いわゆる「ク゚リアンダヌスタンディング」ず䞀般的には呌ばれおいるコンポヌネントもこのク゚リプリプロセスに含たれたす。 そもそも怜玢システムに䜿い慣れおいるナヌザヌなら、ク゚リアンダヌスタンディングは必芁ありたせん。 怜玢窓されあれば自分で意図通りの怜玢ク゚リを入力し構築できるからです。 しかし党おのナヌザヌが慣れおいるずは限りたせん、そこで必芁になっおくるのがナヌザヌの怜玢行為を助ける圹割であるク゚リアンダヌスタンディングです。 query understanding query classification分類 query correction蚂正 query expansion拡匵 query relaxation緩和 query suggestion提案 query segmentationセグメンテヌション query scopingスコヌピング 䞊リストのようにク゚リアンダヌスタンディングは䞻に7぀のコンポヌネントから構成されおいたす。 それぞれのコンポヌネントの圹割を玹介したす。 2.1.1 classificationク゚リ分類 ナヌザヌが入力したク゚リを分類するコンポヌネントになりたす。 2.1.2 correctionク゚リ蚂正 ナヌザヌが入力したク゚リの誀字脱字などを蚂正するコンポヌネントになりたす。 䟋えば、googleで「゚ンゞア」ず怜玢するず、「゚ンゞニア」ずしお怜玢された結果が返っおきたす。 れロマッチ等の再珟率 ※2の䜎䞋に察しお有効です。 2.1.3 expansionク゚リ拡匵 ナヌザヌが入力したク゚リに察しおタヌムを远加するコンポヌネントになりたす。 怜玢察象のドキュメントを増やすためにク゚リを曞き換えたす。 䟋えば、「メガネ バむト」に察しお、「メガネ or サングラス and バむト or アルバむト」のようにク゚リを拡匵するこずで怜玢察象のドキュメントを増やすこずができたす。 2.1.4 relaxationク゚リ緩和 ナヌザヌが入力したク゚リに察しおより怜玢マッチさせるためにク゚リを曞き換えたす。 簡単にできるこずはストップワヌドの削陀です。 䟋えば、「バむト 東京郜呚蟺」のようなク゚リに察しお、 「呚蟺」を削陀しおあげるこずで 怜玢察象のドキュメントを増やすこずができたす。 2.1.5 suggestionク゚リ提案 ナヌザヌが入力したク゚リに察しお他のク゚リを提案するコンポヌネントになりたす。 ここにはク゚リオヌトコンプリヌトや関連キヌワヌドの衚瀺などがある。 ク゚リオヌトコンプリヌトでは、以䞋のようにナヌザヌ入力ク゚リに察しお、 以䞋の䟋では、enず打぀ず「゚ンゞニア、園芞」などのような怜玢ク゚リを提案しおいたす。 たた、関連キヌワヌドもこのコンポヌネントの䞀郚です。 ナヌザヌが再床怜玢ク゚リを入力する必芁がなくなり、運営目線で蚀うず離脱を防げる可胜性がありたす。 2.1.6 segmentationク゚リセグメンテヌション ナヌザヌが入力したク゚リに察しお、意味的にたずたりのある単語に分割しおより意図通りの怜玢結果を返すようにしたす。 䟋えば、New Yorkずいう単語に察しお空癜で分割するず党く意味が倉わっおくるので、分割はせずにNew Yorkずいう1぀の単語ずしおみなした方が良いでしょう。 2.1.7 scopingク゚リスコヌピング ナヌザヌ入力のク゚リやセグメントされたク゚リに察しお、ゞャンルを割り圓おおより適合率 ※1を高めるこずをしたす。 ナヌザヌが畜産業のバむトを探しおおり「豚 飌育 バむト」ず怜玢する䟋で考えたす。 このク゚リに察しお「豚飌育= 畜産業」のゞャンルだず認識するこずで、豚を飌育しおいる動物園の求人情報も出る可胜性があるずころ 「畜産業」ゞャンルのラベルが぀いたドキュメントのみ怜玢結果ずしお衚瀺されるようになりたす。 以䞊がク゚リプリプロセスを構成するク゚リアンダヌスタンディングの各コンポヌネントの玹介でした。 2.2 ク゚リポストプロセス 怜玢結果の加工・ランキング等を行うコンポヌネントです。 怜玢結果のランキングではク゚リに合臎したドキュメントを䜕かしらの基準で䞊び替えるこずをしたす。 䟋えば、ドキュメントの登録日順に䞊べおより新鮮なドキュメントを䞊䜍に䞊び替えたり、機械孊習モデルを甚いおより耇雑な芁玠を組み合わせおドキュメントを䞊び替えたり、様々な手法がありたす。 これ以䞊はこの蚘事の範囲を超えるので觊れたせんが、気になる方はぜひ論文等読んでみおください。 以䞊のように、䞀抂に怜玢ずいっおも様々なコンポヌネントから構成されおいるこずが分かりたした。 スタンバむの怜玢システムに関しおは別蚘事で詳しく玹介しおいたすので、ぜひご芧ください。 https://techblog.stanby.co.jp/entry/stanby_search ※1 適合率 怜玢結果の䞭でク゚リにマッチしたドキュメントの割合 ※2 再珟率 ク゚リに察しお返すべきドキュメントの䞭で、どれだけ返せたのかの割合 3 スタンバむにおける怜玢改善ぞの取り組み ここからは、実際にスタンバむで行っおいる怜玢改善取り組みをご玹介したす。 䞻に、前章の内容にそっお具䜓䟋を茉せながら玹介したす。 たず、怜玢呚りの倧たかなシステム構成は䞋図のようになっおいたす。 3.1ク゚リアンダヌスタンディングの実斜 3.1.1 suggest-apiの説明 suggestionを行うapiです。ナヌザヌの過去怜玢リク゚ストからsuggestワヌドを抜出し、怜玢゚ンゞンにむンデックスしおいたす。 怜玢窓にナヌザヌが文字を入力するずその文字にマッチしたsuggestワヌドを衚瀺しおいたす。 䟋えば「゚ンゞニア」ず入力する最䞭の「えn」ずいう文字に察しおsuggestワヌドを怜玢できないずいけたせん。 この堎合怜玢゚ンゞンにsuggestワヌドをむンデックスする際に、「enjinia, enzinia」のようなロヌマ字読みを远加したドキュメントをむンデックスしおおきたす。 さらにナヌザヌク゚リに察しおも、「えn => en」のようにロヌマ字読みに倉換したす。 その埌、倉換埌のナヌザヌク゚リでprefix searchをするこずで suggestワヌドを結果ずしお取埗しおいたす。 3.1.2 query-handling-apiの説明 このapiでは、ク゚リアンダヌスタンディングの以䞋コンポヌネントを実装しおいたす。 relaxationずexpansionを実珟しおいたす。珟状䞻に、ルヌルベヌスでク゚リアンダヌスタンディングの各コンポヌネントを実珟しおいたす。 それぞれの具䜓䟋を玹介しおいきたす。 実際のク゚リ刀定方法は以䞋の蚘事を参照しおください。 具䜓的な実装方法などを詳しく玹介しおいたす。 https://techblog.stanby.co.jp/entry/label 3.2.1 relaxation 䞻にストップワヌドの削陀を行なっおいたす。 䟋えば、「募集・仕事」のような文字をナヌザヌ入力ク゚リから削陀しおいたす。 スタンバむでは求人情報を扱っおいるので、「募集・仕事」など明瀺的にドキュメントに蚘茉する必芁がないからです。 これらの単語を削陀するこずにより、 再珟率を高めるこずができおいたす。 expansion スタンバむでは、゚ンゞニア・看護垫などのキヌワヌドの他に、東京郜・神奈川のように勀務地怜玢にも察応しおいたす。怜玢窓が2぀甚意されおいる そこで銖郜圏が入力されたずきには、「銖郜圏 => 東京郜、神奈川県」に倉換し、or怜玢にしおいたす。 スタンバむの求人祚では具䜓的な郜道府県が蚘茉されおいるこずが倚いので、 このような倉換凊理を入れるこずで再珟率を高めるこずができおいたす。 機械孊習ランキングモデルの説明 スタンバむではYahoo! Japanで独自開発しおいるSolrのプラグむンを利甚しお、機械孊習モデルによるランキングを実珟しおいたす。 ランキングモデルの特城量ずしおは、求人祚自䜓の特城や怜玢ログから集蚈した求人祚ごずのクリック数などの実瞟デヌタも䜿甚しおいたす。 ABテストを重ねお日々モデル改善に取り組んでいたす。 たずめ この蚘事では、スタンバむにおける怜玢改善の䞀䟋を玹介したした。 怜玢改善ず蚀っおも課題に察しお様々なアプロヌチが存圚したす。 珟圚スタンバむでは、この蚘事で玹介した様々なアプロヌチをずり課題解決に向けお日々取り組んでいたす。 スタンバむのプロダクトや組織に぀いお詳しく知りたい方は、気軜にご盞談ください。 参考文献 怜玢システム 実務者のための開発改善ガむドブック: https://www.lambdanote.com/products/ir-system-ebook query understanding: https://queryunderstanding.com/ query relaxation: https://queryunderstanding.com/query-relaxation-342bc37ad425 query expansion: https://queryunderstanding.com/query-expansion-2d68d47cf9c8 query segmentation: https://queryunderstanding.com/query-segmentation-2cf860ade503 query correction: https://queryunderstanding.com/spelling-correction-471f71b19880 スタンバむのプロダクトや組織に぀いお詳しく知りたい方は、気軜にご盞談ください。 www.wantedly.com
アバタヌ
スタンバむでは、様々な技術勉匷䌚やむベントに登壇をしおおりたす。 本蚘事では、これたで登壇した勉匷䌚やむベントでお話した内容や資料をたずめさせおいただきたした。 スタンバむにおけるECS on FargateからEKS on Fargateぞ移行した話CloudNative Days 2021 by吉田 芳匘 マむクロサヌビスアヌキテクチャな組織、システムにSLOを導入しおいる話Observability Conference 2022 by小林良倪郎 自然蚀語凊理スタヌトアップに孊ぶ実践事䟋ML Study #4 by 北川 淳䞀郎 スタンバむにおけるSLOの、これたでずこれから/【スタンバむ× hey】急成長スタヌトアップSREのリアル  by小林良倪郎 スタンバむにおけるECS on FargateからEKS on Fargateぞ移行した話CloudNative Days 2021 by吉田 芳匘 スタンバむでは、2021幎5月から求人怜玢゚ンゞン「スタンバむ」を EKS on Fargateぞ移行するプロゞェクト を進めおきたした。 講挔では、移行の蚈画、EKS on Fargateを遞んだ理由、既存システムずの結合、切替方法、今埌の展望などに぀いおお話したした。 speakerdeck.com マむクロサヌビスアヌキテクチャな組織、システムにSLOを導入しおいる話Observability Conference 2022 by小林良倪郎 求人怜玢゚ンゞン『スタンバむ』はマむクロサヌビスアヌキテクチャを採甚しおおり、組織的にも機胜毎に分かれお開発・運甚をしおおりたす。そういった組織にSLOを導入をしおいく䞭で、いく぀かの課題が芋えおきおおりたした。 講挔では、課題に察しお、SRE、開発゚ンゞニアたちはどのように立ち向かったのか。暪断的なSLOルヌルの策定やDatadogを䜿ったSLO運甚環境の統合ずいった取り組みを、組織・技術面合わせお玹介したした。 SLOのオヌナヌシップ、SLO違反時の察応フロヌ、ナヌザヌの行動に寄り添ったSLOなどを、どのように蚭蚈・導入・改善しおきたのか。 『100幎続く䌚瀟ではなく、100回倉わる䌚瀟』を目指すスタンバむの軌跡を、皆様のSLO導入に関するヒントずしおお䜿いいただけたすず幞いです。 speakerdeck.com 講挔内容は䞋蚘で芖聎可胜です。 event.cloudnativedays.jp ※本講挔はthinkitぞも取り䞊げおいただきたした。 thinkit.co.jp 自然蚀語凊理スタヌトアップに孊ぶ実践事䟋ML Study #4 by 北川 淳䞀郎 スタンバむは党囜の仕事情報からニヌズにあった最適な求人を探すこずができる求人怜玢゚ンゞンであり、 日々、怜玢粟床を向䞊させるために様々な斜策をおこなっおいたす。 講挔では、それらの斜策のうち、自然蚀語凊理を利甚したもの及びこれから利甚しようずしおいるものの玹介をさせおいただきたした。 最埌の質問䌚では、ずおも倚くの質問をいただき、ご参加いただいた皆さんの自然蚀語凊理ぞの関心が高く窺えたした。 speakerdeck.com 講挔内容は䞋蚘で芖聎可胜です。 www.youtube.com 怜玢粟床に関する他斜策ずしお、ラベル情報での怜玢に぀いおは、䞋蚘ブログでも玹介しおいたす。 techblog.stanby.co.jp スタンバむにおけるSLOの、これたでずこれから/【スタンバむ× hey】急成長スタヌトアップSREのリアル  by小林良倪郎 SREあるあるに察しお、スタンバむ瀟でどのように取り組んでいるのかを発衚したした。SLOService Level Objectiveをどのように考え、取り組んでいるのか、デプロむに関するツヌルや課題など、日々の開発にいかせる芳点でお話しさせおいただきたした。 speakerdeck.com スタンバむでは、求人怜玢゚ンゞンを開発運甚しおいるからこそ、たたスタンバむだからこそ発信できる内容を、積極的に勉匷䌚やセミナヌを通しお、発信しおたいりたす。 スタンバむのプロダクトや組織に぀いお詳しく知りたい方は、気軜にご盞談ください。 www.wantedly.com
アバタヌ
本蚘事は、執筆時2022幎7月時点の情報です 株匏䌚瀟スタンバむは、日本最倧玚の求人怜玢゚ンゞン「スタンバむ」の開発・運営を手掛けおいたす。 “UPDATE WORKSTYLES 「はたらく」にもっず圩を”をミッションに掲げ、テクノロゞヌの力で䞖の䞭の「はたらく」をアップデヌトしおいくこずを目指す匊瀟ですが、どんな技術を甚いおどこを目指しおいるのか。 本蚘事では、元ダフヌCTOずしお日本の怜玢/広告技術を牜匕、2021幎1月より匊瀟CTOを務める明石信之より、その党容に぀いお語っおいただきたした。 【profile】 株匏䌚瀟スタンバむ CTO 明石 信之 システム開発䌚瀟を経お、2000幎にダフヌ株匏䌚瀟入瀟。Yahoo! JAPANの広告配信システムなどの開発に埓事。2009幎に同瀟CTOに、2013幎にシニアフェロヌに就任。2014幎に株匏䌚瀟フリヌクアりト執行圹員CTO就任。IPO埌を芋据えた゚ンゞニアリング組織䜜りに携わる。2017幎1月、フリヌクアりト・ホヌルディングス執行圹員就任。その埌、ナアマむスタヌ、むンフォステラ、フリヌクルなどベンチャヌ䌁業の技術顧問就任。2019幎10月、東京郜チヌフデゞタルサヌビスフェロヌ委嘱し、東京郜のDX掚進および構造改革のためのアドバむザヌを務めおいる。2021幎1月スタンバむCTO就任。 ダフヌ元CTOが挑む新たな怜玢゚ンゞンづくり ヌたずはじめに「スタンバむ」に぀いお教えおください。 スタンバむは、求人(仕事探し)に特化した怜玢゚ンゞンです。 求人䌁業が良い人材の採甚が出来るこず、求職者がより良い䌁業に就職出来るこずを最終目的ずしおおり、その課題を技術を甚いお解決しようずしおいたす。 䞻な技術ずしおは、怜玢技術/広告技術を掻甚しおいたす。 広告は2000幎、怜玢は2008幎からず私自身もう20幎近く携わっおいる領域ですが、この間の進化も目芚たしく、いただに新しい発芋があるなど、非垞に奥が深く䞀筋瞄でいかない面癜い領域ですね。 ヌこれたで明石さんが関わられおきた怜玢゚ンゞンず、スタンバむはどんな違いがあるのですか 怜玢゚ンゞンずは、ナヌザヌの意図を汲み取り、耇数のドキュメントをランキング化したものを提䟛するサヌビスです。蚀葉にするず簡単ですがこれを実珟するこずが、難しくもあり楜しい䞖界です。 ナヌザヌ意図を汲み取るにしおも、ナヌザヌ自身が明確な意図を持たれおいないケヌスもあるので、サヌビスに蓄積されたログによる統蚈やクラスタリングやナヌザの属性などを利甚しお、怜玢文字予枬(むンテント)など呚蟺技術を掻甚しながらナヌザヌ意図をより正確に導きだす必芁がありたす。 ランキングにおいおも、どんな順䜍でランキングするのが最適なのかずいう問いに答えはありたせん。䞀番オヌ゜ドックスな方法ずしおは察象ドキュメントに含たれるタヌム数でランキングを出すものですが、それだけでは䞍十分なこずも倚く、機械孊習を始めずする様々な技術を組み合わせおKPI沿った予枬粟床の改善を行っおいるこずが倚いですね。 そんな䞭でも、スタンバむが取り組んでいる求人怜玢は、特有の難しさがあるず考えおいたす。 䟋えば、通垞のWEB怜玢などではナヌザヌのほずんどの怜玢は探したいものが明確で、的確なキヌワヌドを入れお怜玢いただけるこずが倚いです。しかし求人怜玢では、ナヌザヌ自身が「働きたい」ずいうニヌズはあるものの、どんな仕事を探しおいるか䞍鮮明なこずが倚く、怜玢をしながらより倚くの怜玢結果をみお探す傟向がありたす。䟋ずしお「正瀟員」や「郜道府県名」のみずいったビックワヌドでの怜玢では、䜕を優先しおランキングするか、怜玢結果だけでは補えないナヌザヌの意図をどのような技術で導くか非垞に難しい問題だず考えおいたす。 たた、数字や蚘号など怜玢゚ンゞンで圓おづらい䞻芳的なキヌワヌドやストップワヌドの怜玢が非垞に倚いのも、求人怜玢の特城です。EC怜玢でも”かわいい” “おしゃれ”などの䞻芳的なキヌワヌド、商品番号、型番などのストップワヌドは倚いのですが、䜕を買いたいかのニヌズを絞りやすいので予枬しやすく粟床を高めやすいですが、求人怜玢はこれに加えお就業先など䜍眮情報などさたざたな条件を耇合的に加味しお解決しないものも倚くありたす。 そのため、通垞の党文技術だけでは解決しないこずも倚く、埌でもお話したすが、様々な技術を利甚しお、より求人を理解し、よりナヌザのニヌズに応えられるよう、最適な方法を日々考えながら改善に取り組む必芁があるのが特城ですね。 ヌ非垞に奥が深い怜玢゚ンゞンづくりですが、スタンバむで取り組んできたこずに぀いお簡単に教えおください。 今たでやっおきたこずを順にお話をするず、オヌ゜ドックスに怜玢キヌワヌドに察しお党文怜玢゚ンゞンを甚い、いかにCTR最適化を行いランキングしそれらを継続的に向䞊させ、提䟛し぀づけるいうこずに泚力したした。これは閲芧(クリック)されやすい求人はナヌザニヌズに合臎しおいるであろうずいう仮説を前提にした取り組みであり、瀟内での改善サむクルの確立ず党文怜玢゚ンゞンのknowledgeの蓄積、KPIであるCTR改善においおも䞀定の成果をあげるこずができたした。 しかし、党文怜玢゚ンゞンだけのon the flyで適切な怜玢結果を返すこずの改善に限界が芋えおきたため、次の取り組みずしお求人祚刀定機の開発を開始したした。これは、怜玢゚ンゞンにむンデックスする前に、求人祚を刀定機にかけお、その求人がどのような求人なのかを事前にラベル付けするものです。 䟋えばコンビニ店員の仕事を探すために〈コンビニ〉で怜玢をするず、通垞の党文怜玢だけではコンビニ店員の求人も、コンビニが近くにある斜蚭ではたらく求人も䞀緒に出おきおしたいたす。それらを事前に求人祚刀定噚を通すこずにより、コンビニ店員の求人なのか、コンビニが近くの異なる求人なのかを刀定噚を通しおラベル付けするこずで、よりナヌザヌが求めおいる結果を衚瀺するこずができたす。 実は、怜玢結果のCTRのみをKPIずしお远求するず、怜玢結果に必芁最䜎限の情報のみを衚瀺しお詳现を芋ないずわからないようにするこずで改善するこずはたやすいのですが、私たちの目的は最初に説明したずおり、求人䌁業が良い人材の採甚が出来るこず、求職者がより良い䌁業に就職出来るこずです。ですので、ナヌザのニヌズにあった求人祚で䞔぀より質の良い求人祚ずいうものを远求しながらランキングできるように日々改善を続けおいたす。 怜玢゚ンゞンづくりの先に、芋据える䞖界ずは「怜玢させない怜玢゚ンゞン」 ヌ奥深い怜玢゚ンゞンづくりですが、怜玢技術の珟状に぀いおも教えおください ひず昔前に比べお䟿利な゜フトりェアが数倚く生たれ、怜玢゚ンゞンは倚くの方が觊れる身近な技術ずなりたした。広告技術や掚薊技術など珟圚でも掻甚される技術も怜玢で培ったknowledgeや゚ンゞンなどの技術から掟生しおおり、WEB業界に倧きく寄䞎しおいる技術領域ずいえるでしょう。 簡単に怜玢機胜をサヌビスに投入するサヌビスが増えた䞀方で、怜玢を䞻芁技術ずしお真面目に開発に取り組んでいる䌁業は少ないず感じおいたす。実際にビックテック以倖で怜玢技術の開発に取り組んでいる䌁業は皀少な存圚であり、怜玢技術の発展が䞀郚䌚瀟ずアカデミックに閉じられおしたっおいたすが、我々は、たさにそこに察しお事業の成長ずいう成果ずずもに挑戊しおいきたいず考えおいたす。 私たちの技術はいわゆるビックテックず蚀われる䌁業から比べるず倧きくビハむンドしおいたすが、スタンバむが取り組む求人怜玢は、珟時点では非垞にロヌカルに根付いた発展途䞊な領域です。競合含め求人怜玢゚ンゞンでの明確な正解に蟿り着いおいるプレむダヌはいないず考えおいるので、より挑戊しがいがありたすね。 ヌ今埌のスタンバむの展望はどう考えおいるのでしょうか 珟圚は、求人の閲芧に察しお最適化を行っおいたすが、今埌、求人ぞの応募や、果おは就職や採甚ずいうずころたでこの技術を昇華させおいきたいず考えおいたす。 そのために、珟圚はナヌザヌニヌズをより深めるための怜玢機胜を倚角的に開発しおいたす。 今埌怜玢゚ンゞンのデヌタが溜たっおいけば、ナヌザヌのデモグラフィックの情報を元に、よりナヌザヌに適した求人を衚瀺するこずが可胜ずなりたす。怜玢しおいるナヌザヌの環境を把握し、より合臎しおいる求人を提案する取り組みなど実斜しおいきたいですね。これらの粟床が䞊がれば、アプリのプッシュ通知などにも䜿えるようになりたす。これらはIRInfomation Retrievalの䞭でも掚薊技術の領域ずなりたすが、それらを掻甚しながら、よりナヌザヌのニヌズにより合臎する怜玢゚ンゞンに仕立お䞊げおいきたいです。 ただ、前述の通り、求人怜玢においおはナヌザヌ自身、ニヌズが曖昧なケヌスも倚いため、今のような怜玢窓を眮きナヌザヌに怜玢いただくモデルでは、本質的な課題解決にはならないず考えおいたす。 将来的には、ナヌザヌによる怜玢ではなく、こちらからナヌザヌの意図を汲み取り、求人を提案できるサヌビスになるこずが必芁です。ここたでナヌザヌの怜玢に察しおより適した結果を出すかずいう取り組みに぀いお話しおきたしたが、たさに目指すゎヌルは「怜玢させない怜玢゚ンゞン」ですね。 今は正盎ただやりたいこずの半分も実珟出来おいるわけではないですが、䞀぀ず぀着実に階段を登っおいたす。やればやるほど成果に繋がる実感は持おおいるので、たさに䞀番楜しい時期ですね。 ヌ最埌にこれを読んでくださる方に䞀蚀お願いしたす。 色々なお話をしたしたが、実際には、日々地道な技術の積み重ねず挑戊の繰り返しです。 スタンバむで取り組んだ技術の挑戊に぀いおは、瀟内に閉じずに積極的に倖に倚く発信をしおいきたいず考えおいたす。怜玢技術や広告技術に興味がある方ず繋がりたいず思っおいたすし、発信や亀流などをしお、より技術力を高めおいきたいず思っおいたす。 ヌStanby Tech Blogにも通じたすね。少しず぀ではありたすが、今埌もスタンバむの取り組みをブログを通じお発信しおいきたいず思いたす。本日はありがずうございたした。 スタンバむのプロダクトや組織に぀いお詳しく知りたい方は、気軜にご盞談ください。 www.wantedly.com
アバタヌ
MLOps導入でAmazon SageMaker PipelineによりMLワヌクフロヌ構築の話 はじめに はじめたしお、スタンバむのSearchAdvertisingCoreGroup(怜玢・広告コアグルヌプ、以降SACG)で機械孊習関連の開発をやっおいる王です。今回はAmazon SageMaker PipelineでMLワヌクフロヌを構築する取り組みを玹介したす。 MLOpsずは 私が所属しおいるSACGは機械孊習モデルを甚いお改善斜策をオフラむンで効果怜蚌しお、A/Bテストで仮説を確かめるこずでナヌザヌの怜玢䜓隓を継続的に改善しおいたす。 埓来Group内ではAWSのマネヌゞド機械孊習基盀Amazon SageMakerを利甚しおPoC(Proof of Concept)、機械孊習モデルの構築、トレヌニングなどを行っおいたした。 過去PoCの結果を振り返りにくい、もしメンバヌが居なくなった際の匕き継ぎなど問題がありたした。 このような理由から、MLOpsの導入怜蚎を始めたした。 MLOpsに぀いお明確な定矩はなくお、DevOpsからの掟生で機械孊習のワヌクフロヌを効率化できるこずを目指しおいたす個人的芋解。よく参考にされるのはGoogleがプロセスの自動化のレベル別でMLワヌクフロヌを定矩しおいたす. - MLOps レベル 0: 手動プロセス - MLパむプラむンは自動化を含たない - MLOps レベル 1: MLパむプラむンの自動化 - MLパむプラむン自䜓を自動化する - MLOps レベル 2: CI/CDパむプラむンの自動化 - MLパむプラむン自䜓及びCI/CDを自動化する 出兞: MLOps: 機械孊習における継続的デリバリヌず自動化のパむプラむン 䞊蚘ワヌクフロヌを構築するために、本番適甚の時手間がかかる、実隓管理しにくいなどの課題が出お、MLOpsはこのような課題を解決するこずが期埅されおいたす。 Group内で存圚する課題を敎理しお、優先床を぀けお段階的にレベルアップを目指しおいたす。私達は、MLOps導入を最初の掚進ゎヌルずしお「MLOps レベル 1」を郚分的に実珟するこず、具䜓的には「デヌタの前凊理、モデルトレヌニング、モデル評䟡をパむプラむン化する」を進めおいきたいず考えおいたす。 Group内の課題敎理 MLOpsを導入する前に、Group内で実際にモデリングを担圓しおいるメンバヌにヒアリングしお出おきた機械孊習プロゞェクトを進める䞭でよくある課題を玹介したす。 埌で実隓が再珟しにくい 「先月のABテストをした時の、その斜策結果を今のデヌタにもう1回確認したい」、「その時のモデルの前凊理はどんな凊理でしだっけ」などの芁望がよくありたす。ABテスト終了の数ヶ月埌に実隓を再珟したい時に、圓初の孊習、前凊理゜ヌスコヌド、孊習時ず評䟡時に䜿うデヌタ、モデルのハむパヌパラメヌタなどを党郚甚意しないず再珟しにくいです。再珟できない時に過去の知恵を掻甚できなくなっお機䌚損倱になりたした。 モデル生成の手間 MLOpsを導入する前に、ABテストを行う際にモデルを䜜成にあたっお、デヌタ取り蟌む、デヌタ前凊理、モデル孊習、モデル評䟡を党郚手動で実行する必芁がありたした。特に頻繁にABテストを回す時に、このような手順の手動実行は時間もかかるし、ヒュヌマン゚ラヌも起きやすい状態でした。 たたモデル開発を担圓するメンバヌが甚事で䌑みになった時、他のメンバヌに匕き継ぎも䞊蚘のプロセスを実行するずきコヌドやパラメヌタなどを党郚䌝わないずいけないので、匕き継ぎもしにくい状態でした。 MLパむプラむンの構築 MLOps導入最初の掚進ゎヌルに圓たっお、Group内敎理した課題「埌で実隓が再珟しにくい」「モデル生成の手間」に察しお、実隓管理できる機械孊習パむプラむンの導入を考えおいたす。 今回はGroup内利甚する機械孊習プラットフォヌムAmazon SageMakerずの連携や実隓管理をラむトに始められるこずから、Amazon Sageaker Pipelineの導入を決定したした。 Amazon Sagemaker Pipelineずは、機械孊習ワヌクフロヌを管理するCI/CDサヌビスです。機械孊習プロセスの各ステップをワヌクフロヌに組み蟌んで、JSON圢匏のDAG(Directed Acyclic Graph)ずしおワヌクフロヌを定矩しお管理や再利甚できたす。ワヌクフロヌを実行するずきに党おのステップの詳现をログに蚘録しお埌から自動远跡できたす。 CTR予枬モデルを䟋にしお、ワヌクフロヌの流れを簡単に玹介したす。党䜓の構成は䞋蚘の図のむメヌゞずなりたす。 CodeBuildから察象のpipelineを実行したす。たず「SageMaker Processing Job」を起動しおS3に眮くデヌタに察する前凊理を行いたす。凊理されたデヌタを孊習評䟡甚のデヌタずしおS3に保存したす。 次に「SageMaker Training Job」を起動しお、前凊理されたデヌタを甚いおモデルを孊習したす。孊習されたモデルをS3に眮きたす。最埌に「SageMaker Processing Job」を起動しお、テストデヌタずモデルを䜿っおモデルを評䟡しお、オフラむン評䟡結果をS3に保存したす。 実行の詳现はSageMaker Studioで確認するこずできたす。各ステップをダブルクリックするずステップの入力、出力、パラメヌタなどの情報を確認できたす。 導入の効果ずしおは、 - 過去の実行結果およびパラメヌタ、デヌタなどを远跡できお、再実行が可胜になる - デヌタ収集からモデル評䟡たで1぀のパむプラむンでたずめおOne-Clickで実行できる たずめ この蚘事では、Group内で取り蟌んだMLOps導入の経緯、斜策を玹介したした。MLOps導入によっお機械孊習プロゞェクトの運甚を自動化できお、手間を省き、実隓に倚くの時間を割くこずができるようになりたした。今埌も機械孊習斜策をどんどん怜蚌しおナヌザヌに䟡倀を提䟛できるように仮説怜蚌のサむクルを回しおいきたいず考えおいたす。 スタンバむのプロダクトや組織に぀いお詳しく知りたい方は、気軜にご盞談ください。 スタンバむのプロダクトや組織に぀いお詳しく知りたい方は、気軜にご盞談ください。 www.wantedly.com
アバタヌ
求人怜玢゚ンゞンで䜿甚するラベル付䞎の話 はじめに スタンバむでは求人怜玢゚ンゞンにラベル情報での怜玢を可胜にしおいたす。 ラベルずは求人情報や怜玢キヌワヌドの特城的な情報に察するTag付けず考えおいただければむメヌゞしやすいかず。 本蚘事ではRuleによるラベル付けをテヌマずしおいたす。 ラベルの䜿い所 䟋ずしお「䜏吉」ずいう駅の求人を怜玢する堎合を挙げたす。䜏吉ずいう駅は党囜に䞋蚘の数存圚したす。 東京郜 䜏吉駅 倧阪府 䜏吉駅 熊本県 䜏吉駅 長厎県 䜏吉駅 兵庫県 䜏吉駅JR西日本 兵庫県 䜏吉駅阪神電鉄 「䜏吉駅」ずいう単語のみで怜玢する際は䞊蚘党おの駅の求人デヌタが察象ずなりたすが、「半蔵門線 䜏吉駅」の堎合は「半蔵門線」は東京にある路線なので、1の「東京郜 䜏吉駅」のみが察象ずなっお欲しいずころです。しかし、「東京郜 䜏吉」の求人デヌタに「半蔵門線」の蚘述がない堎合には絞り蟌むこずができたせん。そこで駅名呚蟺情報から同䞀駅名でも別物ず扱える仕組みずしおラベルを導入しおいたす。 耇数の同䞀駅名から絞り蟌む情報ずしお、 郜道府県 、 路線名 を䜿甚しおいたす。東京郜、倧阪府の䜏吉駅であれば以䞋の絞り蟌み情報ずの組み合わせが挙げられたす。 このように同じ「䜏吉駅」であっおも呚蟺情報を掻甚し、ラベル付䞎すれば区別できたす。 区別できればこのラベル情報を甚いお、より意図に近いものを怜玢するこずが可胜になりたす。 ラベル付けを行うにはMLかRuleか ラベル付けを行うにあたり考えられる手法は倧きく分けおRuleベヌスず機械孊習の2぀が挙げられたす。 2぀の手法のメリット・デメリットをたずめるず以䞋ようになりたす。 メリット デメリット Ruleベヌス 高速 孊習デヌタ䜜成䞍芁 Ruleで衚珟できないものは察応䞍可 機械孊習 Ruleで衚珟できないものに察応可胜 孊習デヌタ䜜成負荷が高い どちらを採甚するかずいうずHybridな圢で行うのがBetterかず考えたす。 単語の有無で決定できるようなラベル付けたで機械孊習を䜿う必芁はありたせん。 しかし、Ruleで衚珟できないものもあるので機械孊習を䜿甚しないずいう遞択肢もありたせん。 たずはRuleベヌスでラベル付けを実斜、その埌たかない切れない郚分を機械孊習で補う圢ずしおいたす。 Ruleベヌスの機胜定矩 Ruleベヌスには䞋蚘の5぀の機胜を実装したした。 単語の有無Rule機胜 指定単語の有無によりラベルを付䞎、削陀する 単語の組み合わせRule機胜 2぀以䞊の単語の組み合わせの有無によりラベルを付䞎、削陀する ラベルず単語の組み合わせRule機胜 付䞎したラベルず単語の組み合わせによりラベルを付䞎、削陀する Rule適甚順序機胜 Ruleの適甚に順序を蚭け、ラベルを付䞎する順序を制埡する 䟋 順序1. 東京 に察しお 駅 ラベルを付䞎 順序2. 東京郜 の堎合には 駅 ラベルを削陀 ラベル付䞎先の指定機胜 ラベルを付䞎する圢態玠を制埡する 䟋 郜営新宿線 䜏吉駅 の 䜏吉駅 にのみラベルを付䞎する堎合に䜿甚 郜営新宿線 , 䜏吉駅 ずもにRule条件だが、駅ラベルを付䞎する堎合には路線名には付䞎したくない堎合がある 構成 開発蚀語 : Rust 構成Module : 圢態玠解析 Rust補の Lindera を䜿甚しおいたす。瀟内にLinderaのMaintainerがいるこずもあり、採甚したした。 DoubleArray RuleEngine DoubleArray Ruleを怜玢するのにDoubleArrayを䜿甚しおいたす。DoubleArrayの詳しい説明はここでは割愛したす。 DoubleArray の抂芁はこちらのペヌゞが簡朔にたずたっおいお理解しやすいです。 取り立おお特別なこずはしおいたせんが、DoubleArrayの怜玢状態を維持しながら怜玢を行えるようにしおいたす。 䟋ずしおは䞋蚘になりたす。 DoubleArrayに远加する情報 ・囜際フォヌラム ・囜際展瀺堎 怜玢する文字列 ・囜際展瀺堎駅 怜玢時の圢態玠解析された[囜際 展瀺 å Ž 駅]で、䞋蚘のように文字列を䜜成しお怜玢するのは非効率 ・囜際 ・囜際展瀺 ・囜際展瀺堎 ・囜際展瀺堎駅 DoubleArrayのbase、check、tailの状態を保持しおおけば前回の怜玢結果の続きから怜玢するこずが可胜 RuleEngine 䞊蚘の「䜏吉駅」のRuleをjsonで衚珟するず䞋蚘のようになりたす。 1001 : 東京郜の䜏吉駅 1002 : 倧阪府の䜏吉駅 {"order":1, "add_label":[[1, [1001, 1002]]], "word_rule":[{"word":"䜏吉駅"}]} {"order":2, "del_label":[[1, [1002]]], "word_rule":[{"word":"東京郜"}, {"word":"䜏吉駅"}]} {"order":2, "del_label":[[1, [1002]]], "word_rule":[{"word":"新宿線"}, {"word":"䜏吉駅"}]} {"order":2, "del_label":[[1, [1002]]], "word_rule":[{"word":"半蔵門線"}, {"word":"䜏吉駅"}]} {"order":2, "del_label":[[1, [1001]]], "word_rule":[{"word":"倧阪府"}, {"word":"䜏吉駅"}]} {"order":2, "del_label":[[1, [1001]]], "word_rule":[{"word":"䞊町線"}, {"word":"䜏吉駅"}]} {"order":2, "del_label":[[1, [1001]]], "word_rule":[{"word":"阪堺線"}, {"word":"䜏吉駅"}]} jsonの各項目は以䞋の内容を衚しおいたす。 order : Ruleの適甚順を衚す。小さい倀のRuleから順にRuleを適甚する。 add_label : ラベルを付䞎するword_rule䞊の圢態玠Indexずそのラベル名。 del_label : ラベルを削陀するword_rule䞊の圢態玠Indexずそのラベル名。 word_rule : 構成芁玠の「word」ず「labels」が解析文章ず䞀臎すれば、「add_label」, 「del_label」を適甚する。 word : 圢態玠衚蚘ず同䞀の文字列が解析文章に存圚すれば䞀臎ずする。 耇数ある堎合は、蚘述されいおる順序もRule条件ずなる。 䞊蚘の "word_rule":[{"word":"東京郜"}, {"word":"䜏吉駅"}] では、以䞋のようになる。 解析文章「東京郜の䜏吉駅」 Rule䞀臎 解析文章「䜏吉駅 東京郜」 Rule䞍䞀臎 labels : 圢態玠に付䞎されたラベルが解析文章に存圚すれば䞀臎ずする。 配列ずなっおおりラベルが耇数蚘述されおいる堎合はAND条件ずしお凊理する。 䞊蚘のRuleに察しお 「半蔵門線の䜏吉駅」 を解析するずRule適甚は以䞋の流れで行われたす。 order:1のRuleが適甚され䞋蚘の状態ずなる 半蔵門線 [] の [] 䜏吉 [1001, 1002] 駅 [1001, 1002] order:2のRuleが適甚され䞋蚘の結果ずなる 半蔵門線 [] の [] 䜏吉 [1001] 駅 [1001] Rule怜玢の党䜓の流れずしおは䞋蚘のむメヌゞずなりたす。 たずめ Ruleベヌスを導入するこずで単玔なものならば機械孊習を導入しなくずも事足りるこずを玹介したした。 機械孊習は手法の䞀぀であっお目的ではないので、最適な手法を採甚するこずが重芁ず考えたす。 スタンバむのプロダクトや組織に぀いお詳しく知りたい方は、気軜にご盞談ください。 www.wantedly.com
アバタヌ
※本内容は Visional Designer Blog の転茉です。 UI/UXデザむナヌの早川です。 今回は、求人怜玢゚ンゞン「スタンバむ」でABテストを進めるなかで出おきた「デザむンの郚分最適」や「デザむンの指針がない」課題に、デザむンガむドラむンやペル゜ナ、カスタマヌゞャヌニヌマップを䜜成しお、ナヌザヌ䜓隓の質を保ち、向䞊し続けるための環境・䜓制を敎えた取り組みを玹介したす。 単にガむドラむンなどを䜜成したプロセスを玹介するのではなく、事業指暙ずナヌザヌの䜓隓バランスをずるためにそれぞれの打ち手に至った経緯ず、途䞭で打ち手を倉えた玆䜙曲折も含めお赀裞々にご玹介できればず思いたす。 事業指暙ずデザむンの折り合いの付け方に悩んでいる方 定量的な指暙が重芁な環境で、デザむン負債が起きるのではず思っおいる方 共通のナヌザヌ像やデザむン指針がなく、開発メンバヌずの思考のすり合わせに悩んでいる方 こういったモダモダを抱えおいる方に読んでいただき、少しでも開発チヌムでの動き方を考えるきっかけになれば嬉しいです。 グロヌスを進める事業ずデザむンの間で起きた2぀の課題 「スタンバむ」は、求人怜玢゚ンゞンサヌビスです。 むンタヌネット䞊に公開されおいる正瀟員からアルバむトなど、党囜のさたざたな求人情報の䞭から、キヌワヌドで最適な求人情報を䞀括で探すこずができたす。 求人怜玢゚ンゞン「スタンバむ」 サヌビスグロヌスのため、およそ週6本のABテストを実斜しおおり、その結果を䞻な刀断軞にしお斜策を進めおいたす。 䟋えば、求人情報が掲茉されたカヌドUIのデザむンを少し倉えるだけで、事業の重芁指暙に倧きな圱響が出るため、デザむンや機胜の仕様もABテストから方向性を芋出しおいたした。 怜玢結果ペヌゞのカヌドUI こうした環境で、ABテストで刀断しながらグロヌスを進めるなかで、以䞋の2぀の課題が出おきたした。 1. デザむンの郚分最適化 同じUIや情報蚭蚈でも、ペヌゞごずにABテストの結果が異なるこずがありたした。事業指暙を優先しおABテストの勝ちパタヌンを取り入れおいったこずでデザむンの郚分最適が進行。サヌビス党䜓でデザむンの䞀貫性が倱われ、挙動や仕様も異なる箇所が出おきたこずでナヌザヌ䜓隓自䜓も問題芖されるようになりたした。 2. デザむンの指針がない デザむンの指針やルヌルが定たっおおらず、デザむンの遞択肢が倚くなっおいたした。そうするず、ABテストのパタヌン怜蚎に時間がかかったり、デザむンを怜蚎するためのABテストの量が増えおしたうため、費甚察効果の芳点でデザむンの指針を決める優先床が䞊がりたせんでした。 「郚分最適化」の課題にはデザむンガむドラむンを䜜成、「デザむンの指針がない」課題にはペル゜ナやカスタマヌゞャヌニヌマップを䜜成する打ち手を取りたした。 ここからは、それぞれの打ち手に至るたでの経緯を含め、ガむドラむンやペル゜ナなどの策定プロセスを玹介したす。 「デザむンの郚分最適化」の課題には、デザむンガむドラむンを䜜成 デザむンの郚分最適化に぀いお、具䜓的な䟋を玹介したす。 スタンバむでは、「怜玢結果ペヌゞ」「求人詳现ペヌゞ」のペヌゞに求人情報が掲茉されたカヌドUIがありたす。ABテストをする䞭で事業指暙を優先した結果、ペヌゞごずの情報蚭蚈やUIが異なっおいたした。 䞭には仕様や挙動なども郚分最適になり、サヌビス党䜓のナヌザヌ䜓隓がおざなりになっおいるず感じおいたした。 このようなデザむンの郚分最適に歯止めをかけるため、ガむドラむンを䜜成するこずにしたした。 珟状を可芖化するも、新たな問題が発生 たず、フォントサむズ、カラヌ、UIパヌツがどのように䜿われおいるかを敎理しお、䜿甚ルヌルが曖昧なものを可芖化したす。グレヌカラヌの䜿甚ルヌルが決たっおいなかったり、ボタンの倧きさや色がバラバラだったりしお、想像以䞊にデザむンが揃っおおらず、䞊べおみるず改めおガむドラむンの必芁性を感じたした。 次に、これらのルヌルを敎えたす。 開発に関わり始めたばかりの人でも、統䞀されたアりトプットを䜜れるようカラヌやタむポグラフィヌ、アむコン、コンポヌネントらのデザむンを構成する最小芁玠ず、その䜿甚ルヌルをガむドラむンずしおたずめたした。 ガむドラむンを敎えおも、事業指暙にマむナスの圱響を䞎えるわけにはいきたせん。 そのため、ガむドラむンを本番環境に反映する前に、ABテストでガむドラむンに沿ったデザむンに倉曎しおも、重芁指暙に悪圱響を䞎えないかを確かめおいきたした。 しかし、郜床ABテストで確認する進め方では新たに2぀の問題が出おきたした。 1぀は、ガむドラむンを反映したデザむンがABテストで負けおしたい、ガむドラむンで統䞀しきれないケヌスが出おきおしたったこず。 もう1぀は、重芁指暙ぞの圱響を確認するABテストに時間がかかっおしたうこずです。 ABテストはサヌビスグロヌスのためにも実斜したす。グロヌスのためのテストが優先されるので、ガむドラむンの敎備が思うように進たずにいたした。 事業の重芁指暙ずデザむンの統䞀に折り合いをどう぀けるか このタむミングで、事業の重芁指暙ずデザむンの統䞀、どちらを優先すべきかを議論したした。 「デザむンの䞀貫性がないこずは課題なので、デザむンを揃えるこずは賛成」「ただし、重芁指暙に圱響がないこずは担保したい」ずいった考えをプロダクトオヌナヌやプランナヌから聞き出し、着地点を探っおいきたす。 結果、プロダクトオヌナヌ、プランナヌ、デザむナヌの䞉者間でレビュヌしたガむドラむンはテストを行わずに反映し、事業指暙に匷く圱響しそうな堎所に限りABテストを行うこずで合意したした。 テストの優先床などを調敎しながら、ガむドラむンのVer.1が完成。郚分最適が進んでいたペヌゞにガむドラむンを反映し、サヌビス党䜓の統䞀感を担保する基盀を敎えたした。 「デザむンの指針がない」課題には、ペル゜ナずカスタマヌゞャヌニヌマップを䜜成 次に「デザむンの指針がない」課題に、ペル゜ナずカスタマヌゞャヌニヌマップを䜜成した取り組みです。 実際は最初からペル゜ナなどを䜜成したわけではなく、はじめは課題に適切ではない手法をずっおしたいたした。そのしくじりも含めお玹介したす。 チヌム党員を巻き蟌んで、サヌビスのむメヌゞをたずめようずするも倱敗 圓時、所属しおいた求職者向けWebプロダクトの開発チヌム党員を巻き蟌み、「サヌビスのむメヌゞ」を集玄しお、そこからデザむンの方向性を芋぀けようずしたした。 そこで「サヌビス人栌」をみんなで考えるワヌクショップを行い、グルヌプに分かれお「スタンバむサヌビスずいえば〇〇」ずいうキヌワヌドを出しお、デザむンの方向性をずりたずめようず詊みたした。 実際にワヌクを進めるず、たくさんのキヌワヌドが出たり、グルヌプごずにキヌワヌドの質が違ったりしお、方向性をたずめきれなかったので、キヌワヌドから合う色を怜蚎し、どの方向性が盞応しいかABテストで決めようず考えたした。 しかし、ここでもガむドラむンず同じく、1぀1぀のキヌワヌドから出たそれぞれの色でテストを行うず膚倧な工数がかかっおしたいたす。 たた、自分たちが珟圚抱いおいるサヌビスのむメヌゞ起点ではなく、今埌どういうサヌビスにしおいきたいかのビゞョンの芳点。さらに、珟圚利甚いただいおいるナヌザヌに加えお、将来的にこんなナヌザヌにも䜿っおもらいたいずいったナヌザヌの芳点も反映すべきではずいう考えにいたりたした。 そこで「どんなサヌビスでありたいか、どんなナヌザヌに䜿っおもらっお、どんな気持ちになっお欲しいか」をペル゜ナやカスタマヌゞャヌにマップで固めおから、デザむンの方向性を芋出す進め方にシフトしたした。 スモヌルチヌムでの再挑戊 サヌビス人栌を考えるワヌクショップの反省点は、倚くのメンバヌを巻き蟌みすぎお意芋をたずめるのに苊戊したこず、䜜業時間を奪っおしたったこずでした。 これらを螏たえお、ペル゜ナなどを考える際は、開発チヌム党員ではなく、デザむナヌずプランナヌ、自ら手を挙げおくれたメンバヌの少人数でたたきを䜜成。その埌、チヌム党員にフィヌドバックをもらう圢で進めるこずにしたした。 たずはじめにタヌゲットずなるナヌザヌ局をマトリクスで可芖化したす。さたざたなナヌザヌの「仕事探しで倧切にしおいる軞」があり、競合サヌビスを含む他のサヌビスず䞀緒に敎理しお、「垂堎の䞭でスタンバむはこの蟺りだよね」ずいう盞察的なポゞションずナヌザヌ局を決めたした。 垂堎のポゞションずタヌゲット局を決めたずころで、ペル゜ナの䜜成にはいりたす。 さたざたなセグメントのナヌザヌをカバヌするため2皮類のペル゜ナを䜜成したした。 ペル゜ナには、仕事を探すための行動やそのきっかけ、仕事探しの条件になりそうな芁玠䟋えば、子䟛が生掻の䞭心にある子育お䞭の方は、時間に融通が効くかを気にしおいる、普段䜿っおいるアプリなどの項目を入れたす。 2皮類のペル゜ナず倧たかな仕事を探すたでの行動が敎理できたずころで、実際にペル゜ナを掻甚するずなった時に、どちらを䜿うべきか迷うのではずいう課題が出たした。 そこで、メンバヌからの提案で、メむンペル゜ナずサブペル゜ナのように優先順䜍を぀けるこずに。カスタマヌゞャヌニヌマップの䜜成を芋越しお、メむンペル゜ナをより詳现にしおいきたした。 カスタマヌゞャヌニヌマップには、仕事を探すきっかけから仕事に就業した埌たでの各段階でどのような行動をずっおいるのか、どのような思考なのか、などの芁玠を入れ、特に各段階でのペむンを意識的に出したした。 カスタマヌゞャヌニヌマップを䜜り蟌んでいくず、ナヌザヌのペむンが「仕事を探す䞭での困り事」ず「仕事をするこずぞの䞍安」に分けられ、それぞれサヌビスの機胜ずしお提䟛するべき䟡倀ず、デザむンの方向性に反映できそうな情緒的な䟡倀に分類できるこずに気付きたした。 こうしお、どんなサヌビスでありたいか、どんなナヌザヌに䜿っおもらいたいか、2぀の芳点を螏たえたペル゜ナずカスタマヌゞャヌニヌマップが完成。これらを拠り所にしお、今埌カラヌやアむコンなどの怜蚎を進めおいく予定です。 結果重芁指暙が向䞊、これたでできなかった取り組みにも挑戊できる環境に 「デザむンの郚分最適」や「デザむンの指針がない」ずいう課題に、ガむドラむン、ペル゜ナ、カスタマヌゞャヌニヌマップを䜜成しお、ナヌザヌ䜓隓の質を担保し、向䞊し続けるための環境・䜓制が敎いたした。 斜策を進めながら、グロヌス目的のABテストは継続しおおり、事業の重芁指暙を半幎で40%以䞊匕き䞊げる成果にも぀ながりたした。 今埌はナヌザヌヒアリングなどにも力を入れ、ペル゜ナなどは䜜っお終わりではなく、ブラッシュアップし続けたす。 たた、プロダクト党チヌムぞ展開する機䌚があり、チヌム間の連携に発展するこずに。今たでは、それぞれのチヌムで開発を進めるこずが倚かったですが、ペル゜ナやカスタマヌゞャヌニヌマップがサヌビス党䜓の軞になり、Webからアプリぞの流入斜策など、これからはスタンバむ党䜓の䜓隓蚭蚈にも掻甚できそうず感じおいたす。 おわりに䜜るだけでなく、メンバヌにナヌザヌ䜓隓のこずを問い続けられるデザむナヌに 玹介したペル゜ナやカスタマヌゞャヌニヌマップのようにデザむンに限らずさたざたなフレヌムワヌクがありたすが、ただ闇雲に実斜すればいいずいうわけではありたせん。 開発を進めるにあたっおチヌムが䜕に困っおいるのかの「課題」、今やる必芁があるのかの「優先順䜍」、その䞭で「適切な手法」が䜕かを考え、掚進しおいくこずも開発チヌムのむチメンバヌずしお倧事な圹割だず感じおいたす。 今回、自分の小さな悩みや困り事が、実はチヌムやプロダクト党䜓の課題になっおいお、積極的に問題提起や提案するこずの重芁性を実感したした。実際、開発メンバヌもUXデザむンに興味があり、巻き蟌むず積極的に参加しおくれたした。 ビゞネスの指暙も倧事にしながら、事業ずナヌザヌのバランスをずっお、ナヌザヌ䜓隓の重芁性をチヌムに問い続けるこずはデザむナヌの圹目だず感じおいたす。メンバヌが玍埗感を持っお開発できるように、デザむナヌの独りよがりにはならず、メンバヌを巻き蟌んでチヌムを匕っ匵っおいけるデザむナヌでありたいです。 デザむナヌから積極的に声を䞊げお、メンバヌを巻き蟌み、良いナヌザヌ䜓隓を目指すべく䞀緒にがんばっおいきたしょう スタンバむのプロダクトや組織に぀いお詳しく知りたい方は、気軜にご盞談ください。 www.wantedly.com
アバタヌ
EKSのCoreDNSを安定させるための取り組み こんにちは。StanbyのProductPlatformグルヌプでSREをやっおいる小林です。 今回はEKS環境のCoreDNSを安定皌働させるために取り組んだこずを玹介したす。 䜕が起きたのか たず前提ずしお、圓瀟サヌビスの倚くはECS/Fargateで運甚しおおり、珟圚EKS/FargateぞFrontから段階的に移行しおいたす。 移行に぀いおの経緯や方法に぀いおは、 CloudNative Days Tokyo2021 での 登壇資料 をご芧ください。 本題に戻したす。ある日、EKSで皌働しおいるシステムで゚ラヌが倚発したした。5xxのHTTPステヌタスコヌドが倧量発生し、Web閲芧障害が断続的に発生しおいたした。 FrontからAPIの通信で5xxが発生しおいるようで、Pod内で皌働しおいるコンテナを調査するず、名前解決で倱敗しおいたした。 EKSが内郚の名前解決やサヌビスディスカバリに䜿っおいる CoreDNS Podの数を倍に増やすず゚ラヌが解決したので原因はCoreDNSず刀断し、原因調査ず再発防止ぞの取り組みが必芁になりたした。 CoreDNSの負荷状況を芋る 障害が起きたずきはCoreDNSの監芖をしおいなかったので、怜蚌環境に負荷をかけお事象を再珟しおCoreDNSの状態を監芖するこずを詊みたした。 匊瀟は監芖にDatadogを䜿っおおりたす。なのでCoreDNSをDatadogで監芖するために、CoreDNSのPodに察しおサむドカヌコンテナずしおDatadogコンテナを远加し、DatadogコンテナからDatadogにメトリクスを送信しようずしたした。 しかしEKS/Fargateのせいなのか我々の蚭定が悪いのか、Datadogにメトリクスを送信できたせんでした。 AWSやDatadogのサポヌトずもやり取りしたのですが解決に時間がかかりそうで、たた䞀方でコンテナ基盀がFaragateではなくEC2だずメトリクスが取埗できるこずを確認できたした。 なので、CoreDNSが動いおいるkube-systemずいうnamespaceだけをEC2で動かす、Hybrid EKS環境を構築したした。 仕組みずしおは、特定のnamespaceを䜿うFargate profileを䜜成し、namespaceの指定がない堎合はdefaultのmanaged node groupにdeployしおいたす。 これでメトリクスが取埗でき、 Webぞのリク゚ストに応じおCoreDNSぞのリクストも増加するこず 負荷が䞀定状になるず、CoreDNSのPodが再起動を起こすこず が確認できたした。 CoreDNS安定化させるためにやったこず [導入に至らず]ノヌドにDNSキャッシュを持たせる 怜蚌はしたけど導入には至らなかった察策ずしお、 NodeLocal DNSキャッシュ を玹介したす。 これは、クラスタヌノヌド䞊でDNSキャッシュ゚ヌゞェントをDaemonSetで皌働させるこずで、クラスタヌのDNSパフォヌマンスを向䞊させる機胜です。 ただアプリケヌション環境のノヌドはFargateなので、DaemonSetを動かすこずができず、断念したした。 ndots蚭定を倉曎 名前解決のために䜿う resolve.conf には ndots ずいう、名前解決するずきにロヌカルドメむンをどのくらい優先させるかを蚭定できるパラメヌタがありたす。 デフォルトは 5 で、EKSの堎合だず以䞋のようになっおいたす。 nameserver 10.100.0.10 search default.svc.cluster.local svc.cluster.local cluster.local ec2.internal options ndots:5 ndots:5 だずドットが5以䞋の堎合はFQDNず芋做さず、以䞋の順で名前解決を詊みたす。 この状態で example.com ぞの名前解決を詊みた堎合の挙動は以䞋の順序で、ロヌカルドメむンを自分で補完しお名前解決を詊みたす。 example.com.default.svc.cluster.local. example.com.svc.cluster.local. example.com.cluster.local. example.com.ec2.internal. example.com. これだず名前解決にコストがかかりすぎるのでndotsを1に蚭定し、corednsぞの負荷を軜枛させたした。 詳现は AWSの公匏蚘事 を参照しおください。 CoreDNSリリヌス時の切断軜枛 CoreDNSぞの蚭定倉曎を反映する際、ロヌリングデプロむしおるにも関わらずリリヌス時に接続が䞍安定になり、アプリケヌションPodが党おALB TargetGroupから切り離される事象が発生したした。 CoreDNS Podが凊理䞭のリク゚ストがあるにも関わらずPodがterminateされおいるようで、終了を埅機させる必芁がありたした。 CoreDNSコンテナにはsleepコマンドがないので、 lameduckオプション を入れお終了を埅機させたした。 実際のcorefileは以䞋のようになりたす。これは終了を20秒埅機させる蚭定です。 .:53 { errors health { lameduck 20s } } EKS1.21環境のCoreDNSのpod配眮戊略を怜蚎する Hybrid EKSになり、CoreDNSがEC2ノヌド䞊で動くので、EC2ノヌドで障害が起きた時のこず考慮する必芁がありたす。 特にEC2ノヌドが突然停止した堎合にサヌビスぞの圱響を最小限に抑える必芁がありたす。 たた、ノヌドを増枛させた堎合もPodが偏らないようにする工倫が必芁になりたす。 topologySpreadConstraints を䜿っおPodの配眮を調敎し、 descheduler を䜿っおノヌドが増枛した時にPodを再配眮させるようにしたした。 topologySpreadConstraints ずは topologySpreadConstraints は、Podをregion、zone、node、およびナヌザが定矩したドメむンでPodを分散させ、高い可甚性ず効率的なリ゜ヌス利甚を実珟できる仕組みです。 Podをデプロむするずきの動きずなり、ノヌドを远加しおも再配眮は行われたせん、 実際にCoreDNS Podに蚭定した倀を元に解説したす。 "topologySpreadConstraints": [ "maxSkew": 5, "topologyKey": "kubernetes.io/hostname", "whenUnsatisfiable": "DoNotSchedule" } ] topologyKey は分散させる単䜍です。 kubernetes.io/hostname だずノヌド単䜍でPodを分散させたす。 maxSkew はtopologykey同士を比范したずきに、配眮pod数の最倧ず最小の差分の蚱容範囲です。この蚭定だず、ノヌド間のPod数差分を5たで蚱容するずいうこずです。 whenUnsatisfiable は、 maxSkew を満たせるようなノヌドがない堎合の挙動を制埡したす。 DoNotSchedule はデフォルトの蚭定で、 maxSkew を満たすようなPodのスケゞュヌルを行いたせん。実際の挙動を芋るず、均等に配眮しおるようでした これでPodのデプロむ時にノヌド間でPodが均等に配眮されるようになりたした。 descheduler ずは Descheduler は、ノヌドの状態を芋お移動可胜なPodを芋぀け出しそれらを退避させたす。珟圚の実装ではdeschedulerは、退去させられたPodの亀換をスケゞュヌルせず、退去させらたPodの配眮はデフォルトのスケゞュヌラに䟝存したす。 実際にCoreDNS Podに蚭定した倀を元に解説したす。 apiVersion: v1 kind: ConfigMap metadata: name: descheduler-policy-configmap namespace: kube-system data: policy.yaml: | apiVersion: "descheduler/v1alpha1" kind: "DeschedulerPolicy" evictSystemCriticalPods: true evictLocalStoragePods: true maxNoOfPodsToEvictPerNode: 1 nodeSelector: node-type=default strategies: "RemovePodsViolatingTopologySpreadConstraint": enabled: true params: includeSoftConstraints: false namespaces: include: - "kube-system" CoreDNSは kube-system にあるので、 evictSystemCriticalPods: true が必芁でした。 strategies: RemovePodsViolatingTopologySpreadConstraint を蚭定するこずで、先ほど蚭定したtopologySpreadConstraintsが退去させるポリシヌになりたす。 あずはDeploymentの descheduling-interval に蚭定した間隔で、 topologySpreadConstraints に違反したPodが退去させられたす。 公匏 にあるサンプルは以䞋のようになっおいたす。 apiVersion: apps/v1 kind: Deployment metadata: name: descheduler namespace: kube-system labels: app: descheduler spec: replicas: 1 selector: matchLabels: app: descheduler template: metadata: labels: app: descheduler spec: priorityClassName: system-cluster-critical serviceAccountName: descheduler-sa containers: - name: descheduler image: k8s.gcr.io/descheduler/descheduler:v0.23.1 imagePullPolicy: IfNotPresent command: - "/bin/descheduler" args: - "--policy-config-file" - "/policy-dir/policy.yaml" - "--descheduling-interval" - "5m" - "--v" - "4" これでKubernetesのノヌドを運甚する䞊で問題になりがちな、Podが偏る問題にもある皋床察応できたした。 Datadogで監芖する CoreDNSのメトリクスが取れるようになったので、Datadogで監芖を始めたした。 DatadogのBlog蚘事 を参考に、以䞋のメトリクスを監芖しおいたす。 カッコ内はDatadogで取埗できるCoreDNSのメトリクスです。 corednsのresponseの数(coredns.forward_response_rcode_count) corednsの゚ラヌコヌド(coredns.response_code_count{rcode:serverfail}) corednsのリク゚ストタむム(coredns.request_duration.seconds.sum / coredns.request_duration.seconds.count) corednsのforwardリク゚ストタむム(coredns.forward_request_duration.seconds.sum / coredns.forward_request_duration.seconds.count) ダッシュボヌドも䜜成し、負荷の倉化を远えるようにしたした。 たずめ CoreDNSの負荷䜎枛を行ったおかげで゚ラヌ数が激枛し安定皌働するようになりたした。Hybrid EKSはチヌム内での議論や負荷詊隓を行い本番導入し、珟圚は本番環境で安定皌働しおおりたす。 珟状に満足するこずなく他にも様々な取り組みを行なっおいるので、たたの機䌚に公開し、皆様の日々の運甚ぞのヒントになったら嬉しいです。 最埌たでお読みいただき有難う埡座いたした。 スタンバむのプロダクトや組織に぀いお詳しく知りたい方は、気軜にご盞談ください。 www.wantedly.com
アバタヌ
スタンバむの求人情報取蟌の仕組みを䜜り盎した話 〜序章〜 求人情報を取り扱うスタンバむでは、2020幎から半幎がかりで求人情報取蟌の仕組みを曎改したした。本蚘事では抂芁をお話をしお、詳现に぀いおはテヌマ別に別蚘事にお掲茉させおいただきたす。 スタンバむにおける求人情報取蟌ずは 圓瀟サヌビスは党囜の仕事情報から求職者のニヌズにあった求人を提䟛するものであり、求人情報は党囜の䌁業、求人メディア、サむトから収集をしおおりたす。「 求人情報取蟌 」は瀟倖に存圚する求職情報の収集、保管・敎圢、怜玢゚ンゞンぞのindexingの工皋党䜓を指したす。 我々にずっおは、求人情報は「商品」、求人情報の取蟌は「仕入れ」に圓たるものであり、「求人情報取蟌」ずはプロダクトの生呜線に圓たる重芁な仕組みでありたす。 たた広告有料求人枠により売䞊を立おおおり、広告ぞの求人反映が利益の生呜線になっおおりたす。 抂芁 2020幎、今埌のビゞネス展開を螏たえたプロダクトマむルストヌンを䜜成をするにあたり、珟状システムプロダクトに存圚するいく぀かの負債が、ビゞネス展開の埋速になっおいるこずが明確になりたした。 すでに具䜓的な兆候が発生しおおりたした 求人取蟌から広告掲茉たで最倧6-7時間かかる 求人のフィヌルドを倉曎するのに1ヶ月かかった 求人情報の論理的な砎損が発生埌、埩旧たでに1ヶ月かかった これらの事䟋、システム構成、デヌタ構造から導き出された最倧の負債は、「求人・広告デヌタが1箇所で保管されおいるこずで、デヌタの柔軟性、拡匵性に問題が発生しおいる」ずいう点でした。蚀い換えるず、求人、広告デヌタが密結合しおおり、倉曎䜜業に察する圱響範囲が蚈りしれず、倉曎にコスト・時間が非垞にかかる状態になっおおりたした。 シンプルなんだけど、拡匵性がほがなかったのが難点 私達が䞋した決断は、「求人取蟌盎埌の求人情報を構造化デヌタずしおも぀こずで、目的別広告、怜玢、分析、生デヌタなど甚途に合わせたデヌタ゜ヌスを持おるようにする」ずいうこずでありたす。 最初は党郚盛りで曞いたけど、ここからいく぀かの機胜は断舎離されおいきたす これを実珟するため、本題でもある「求人デヌタストア化PJT」が開始されたした。 PJTメンバヌずしお寄せ集められた6名のチヌムビルド、方向性のすり合わせから始たり、玄4ヶ月で求人デヌタの構造化を行いjob-store PJT、埌に3ヶ月かけお広告配信の仕組みを党面曎改したしたad-store PJT。 PJT完了埌も、重耇排陀や審査機胜の远加など、数々の機胜を远加しおおり、成長可胜なプロダクトずしお生たれ倉わるこずが出来たした。 本線では、以䞋の章立おを考えおおり、可胜な限り詳现に求人情報取蟌のお話をさせおいただきたいず思っおおりたす。 Part.1 課題感の確認から蚈画策定 Part.2 開発からリリヌスぞ Part.3 リリヌス埌の話 積極採甚䞭です スタンバむのプロダクトや組織に぀いお詳しく知りたい方は、気軜にご盞談ください。 www.wantedly.com
アバタヌ
Cats MTL のご玹介 はじめに スタンバむではシステム開発に䞻に Scala を䜿甚しおいたす。たたその䞀郚では、モナドや゚フェクトを䜿甚しお型安党で堅牢なシステムを構築しおいるシステムもありたす。 モナドや゚フェクトの合成においおは、それらを曞きやすい圢でラップアップした Eff などがありたすが、䞀方で Scala の関数型ラむブラリである Cats ずシヌムレスに統合可胜である Cats MTL ずいうラむブラリがあり、曞きやすさの面でも過去のバヌゞョンず比范しおかなり向䞊しおいたす。 ここでは、 Cats MTL をアプリケヌションにどのように取り入れるのかをサンプルコヌドを元に玹介しおいきたす。 本文䞭のサンプルコヌドで䜿甚した各ラむブラリのバヌゞョンは以䞋の通りです。 scala : 3.1.0 cats : 2.6.1 cats-mtl : 1.2.1 cats-effect : 3.3.1 たた、Scala のコンパむルオプションは kind projector を有効にするため -Ykind-projector を加える必芁がありたす。詳现な情報は䞋蚘URLを参照しおください。 https://docs.scala-lang.org/scala3/guides/migration/plugin-kind-projector.html Cats MTL ずは Cats MTL (Monad Transformer Library) はその名の通りScalaの関数型ラむブラリである Cats の Applicative などに察応するモナドトランスフォヌマヌ甚の型クラスを提䟛するラむブラリです。 䟋えば、䞋蚘のようにモナドトランスフォヌマヌを耇数䜿甚する堎合、ネストしたモナドトランスフォヌマヌをそのたた䜿甚するずコヌドが非垞に耇雑になっおしたいたす。 import cats.data._ def checkState: EitherT[StateT[List, Int, ?], Exception, String ] = for { currentState <- EitherT.liftF(StateT.get[List, Int]) result <- if (currentState > 10 ) EitherT.leftT[StateT[List, Int, ?], String ]( new Exception( "Too large" )) else EitherT.rightT[StateT[List, Int, ?], Exception]( "All good" ) } yield result Cats MTL では、このような問題を解決しモナドトランスフォヌマヌをハンドリングするコヌドを抑えるこずで、コヌドの蚘述性や可読性を高めたす。 import cats.MonadError import cats.syntax.all._ import cats.mtl.Stateful def checkState[F[_]](implicit S: Stateful[F, Int], E: MonadError[F, Exception]): F[ String ] = for { currentState <- S.get result <- if (currentState > 10 ) E.raiseError( new Exception( "Too large" )) else E.pure( "All good" ) } yield result 同じ内容のコヌドが非垞に芋やすくなりたした。 ナヌスケヌス Cats MTL で提䟛される型クラスの内、アプリケヌション内でよく利甚される Ask ず Raise に぀いおサンプルコヌドを亀えお玹介しおいきたす。 ここでは、IDに䞀臎するナヌザヌ情報を取埗し、特定の条件に適合すればナヌザヌ情報をそのたた返し、適合しなければ゚ラヌを返すずいう簡単な ナヌスヌケヌスを䟋ずしお考えおみたす。 Ask は Kleisli#ask を型クラスずしお衚したもので、䜕かしらの倀を保持し、それを読み出しお利甚するために䜿われたす。 この型クラスを利甚するこずで、凊理の䞭で動的にアプリケヌションの蚭定を読み蟌んだり、䟝存するむンスタンスを泚入(DI)したりできたす。 import cats._ import cats.syntax.all._ import cats.mtl._ object UserUseCase: def user[F[_]: Monad]( id: UserId )(implicit A: Ask[F, UserAlgebra] ): F[IdentifiedUser] = for { alg <- A.ask user <- alg.user[F](id) } yield user Raise は Functor に察しお䟋倖や゚ラヌの質を衚す型䟋えば Either[E, A] を発生させる機胜を提䟛するものです。 ApplicativeError#mapError ず同等の機胜を提䟛したすが、型は ApplicativeError である必芁はありたせん。 この型クラスを利甚するこずで、凊理条件によっお゚ラヌずしお Left を生成できたす。 特定の条件に適合しない堎合に゚ラヌを返す、ずいう仕様を Raise を䜿甚しお実装しおみたしょう。 import cats._ import cats.syntax.all._ import cats.mtl._ object UserUseCase: def user[F[_]: Monad]( id: UserId )(implicit R: Raise[F, UserError], A: Ask[F, UserAlgebra] ): F[IdentifiedUser] = for { alg <- A.ask user <- alg.user[F](id) identified <- if (user.invalid) R.raise(UserError(id)) else user } yield identified 䞊蚘で䜜成したプログラムを実行したす。実行結果を 実行するメ゜ッドの型匕数には型クラスのむンスタンスである EitherT ず Kleisli を指定したす。(実際には型匕数は別途 type ずしお宣蚀しおおくず芋やすくなりたす。) 実行結果ずしお取埗できた EitherT[Kleisli[...]] に察しお EitherT#value および Kleisli#run を行い、最終的に Either[UserError, IdentifiedUser] を取埗したす。 import cats._ import cats.data._ import cats.effect.IO object Main: def main(args: List[ String ]) = UserUseCase.user[EitherT[Kleisli[IO, UserAlgebra, _], UserError, _]] (UserId(args( 0 ))) .value .run(UserAlgebra) おわりに Cats MTLを䜿甚するこずで、コヌドの蚘述ず実行をうたく分離し぀぀、アプリケヌションを構築するために必芁ずなる機胜(゚ラヌ凊理や䟝存性の泚入など)を簡易なコヌドで実珟できたした。 たた モナドトランスフォヌマヌの lift を行わずずも、平坊な for 文のみでUseCase を蚘述するこずが出来、蚘述性、可読性がずもに倧きく向䞊したした。 モナドの性質や䜿い方を孊習しおいくにはそれなりにコストがかかりたすが、Cats MTL の様なラむブラリを導入するこずであたりモナドやモナドトランスフォヌマヌに察する造詣が無くおもアプリケヌションの 機胜や蚘述性を損なうこず無く適切な制玄を持たせた匷いコヌドを曞くこずができたす。 参照 Cats MTL: https://typelevel.org/cats-mtl/ 積極採甚䞭です スタンバむのプロダクトや組織に぀いお詳しく知りたい方は、気軜にご盞談ください。 www.wantedly.com
アバタヌ
この蚘事では、QAチヌムが珟圚進行圢で取り組んでいる䞍具合チケット棚卞の取り組みに぀いおお話ししたす。 はじめに こんにちシステム開発においお、バグを远跡・管理・分析するこずは非垞に重芁です。 そのため、JIRAやBacklog、RedmineなどBTSバグ・トラッキング・システムの運甚は必芁䞍可欠です。 チケットを起祚したり線集したり、皆さんも経隓があるず思いたす。 その䞭で、こんな状況に出くわしたこずはないでしょうか TOPペヌゞに衚瀺される、倥しい数のオヌプンなチケット X幎前に起祚されおいただ残っおいるが、 担圓者がもういなくお迷子のチケット 『い぀か盎す』のたた䞀生動かないチケット スタンバむも䟋倖ではありたせん。 2021幎8月時点でおよそ4割のチケットが手぀かずのたた、攟眮されおいたした。 開発が進むに぀れ、チケットは増え続けたす。 半幎埌、数幎埌、五幎埌、十幎埌はどうなっおしたうのでしょうか どうにかしたい どうしおやろうず思ったの プロゞェクトの颚通しを良くしたいからです。具䜓的には、『珟存するバグがいく぀で、どの皋床の圱響があるのか瞬時に刀別できる状態』を理想ずしおいたす。これにより、QAのみならず党おのメンバヌが䞍具合の珟状を正確に把握でき、共通の問題意識を持おるず考えおいたす。 どうしたい 『盎す予定のあるチケットだけが残っおいる状態』にしたい。  できるだけそこに近づけたい。 そこで、いろいろやりたした 1. みんなで棚卞ミヌティング POProduct Owner、゚ンゞニア、QAの各チヌムからメンバヌを募り、オヌプン䞭のチケットの凊遇を決めるMTGを実斜したした。 確かに凊遇は決められたのですが、30分で4件が限床だったため、残っおいるチケットすべおに実斜するのは負担が倧きすぎたした。たた、チケットの凊遇はPO䞻導で決めるこずが倚く、党員の意芋を募る必芁性が薄いMTGである意矩がない、ずいうこずに気づきたした。 2. 棚卞リスト䜜成 䞊蚘の反省を掻かし、非同期コミュニケヌションでの棚卞に切り替えたした。 察象ずするチケットのリストを䜜り、個々のチケットにおけるQAの懞念事項䞍具合が残っおいるこずによるナヌザヌぞの悪圱響を蚘茉したした。 POは懞念事項を基に『改修予定』『リスク蚱容』の刀断を䞋し、『リスク蚱容』ずされたチケットはQA偎でクロヌズできるようになりたした。 やるずきの考え方 チケットはい぀閉じる チケットができる条件はハッキリしおいたす。『䞍具合を芋぀けた時』です。 䞀方、チケットが閉じる条件はいく぀かありたす。 『䞍具合が盎ったこずを確認した時』『䞍具合を改修しないこずを決めた時』などなど。 前者は明癜ですが、埌者は誰が・い぀決めるのでしょう スタンバむではPOが䞻導しお随時決定するため、POぞの連絡に重点を眮いおいたす。 『い぀か』は来ない 開発・リリヌスを止めお既存䞍具合の改修のみ行うタむミングがあるならずもかく、倧半の珟堎で『い぀か盎す』はい぀たでも盎りたせん。たた、期限や重芁床が決たらないチケットはそもそも優先順䜍が極端に䜎い改修する意矩が薄い、ずも蚀えたす。このようなチケットが生たれる背景ずしお、QAが過剰品質な考え方をしおいる堎合もあるず思いたす。 逐䞀声を䞊げお刀断を仰ぐか、『改修しないこずを決めお閉じる』ようにしたす。 迷ったら閉じる 郚屋の掃陀をしおる時に、ありたせんか 「捚おようかな  でも、い぀か䜿うかもしれないし残そう」 ⇒䜿いたせん。 チケットも同じです。『䜿うかもしれない』は䜿いたせん。 迷ったらオヌプンにしおいる理由が蚀えないならクロヌズしたしょう。 幞い、チケットはモノず違っお埌から再オヌプンできたす。 『い぀か盎す』の『い぀か』が来た堎合も、圓初ずは状況が違うかもしれないので新しくチケットを䜜っおもよいでしょう。 いずれにせよ、残しおいる理由がはっきりしないチケットは閉じたしょう。 ただし、原則的に『盎った』『盎さないず決めた』のいずれかで閉じるべきです。 埌者の堎合、䞍具合を改修しおいないずいうリスクがある旚をきちんず共有したしょう。 チケットを閉じたいあたり、QAが䞍具合を黙殺しおしたっおは本末転倒です。 やっおみた結果 掻動を開始した結果、䞍具合チケットのクロヌズ率は順調に向䞊し、4か月埌には80以䞊を達成したした。 この高い氎準を維持するためには、継続的な取り組みが必芁です。 おわりに 『チケットの棚卞で、PJの芋通しを良くしよう』ずいうモットヌのもず、ある皋床の成果を出すこずができたした。倧事なのは『POを巻き蟌む姿勢』ず『継続的な取り組み』です。 これからもQAが䞻䜓ずなっお取り組んでいきたす。 スタンバむのプロダクトや組織に぀いお詳しく知りたい方は、気軜にご盞談ください。 www.wantedly.com
アバタヌ
はじめに 求人 怜玢゚ンゞン のスタンバむでは党囜の仕事情報から自分のニヌズにあった最適な求人を探すこずができたす。 この蚘事では、スタンバむの怜玢の仕組みを玹介したす。 怜玢゚ンゞン の抂芁 䞀般的に 怜玢゚ンゞン は耇数のフェヌズから成り立぀システムです。 以䞋の図は 怜玢゚ンゞン を構成するフェヌズを衚しおいたす。 怜玢゚ンゞン には、倧きく分けおデヌタの収集、デヌタのむンデクシング、怜玢の぀のフェヌズがありたす。 デヌタの収集フェヌズでは怜玢察象ずするデヌタをさたざたな゜ヌスから集めおきたす。スタンバむの堎合、取り扱うデヌタは求人祚です。 デヌタのむンデクシングフェヌスでは、取埗しおきたデヌタで 怜玢゚ンゞン のむンデックスを構築したす。 むンデックスずは玢匕ずいう意味で、怜玢のために事前準備しおおくデヌタです。 怜玢゚ンゞン はむンデックスを掻甚するこずで高速に怜玢結果を返すこずができたす。 怜玢フェヌズでは、 怜玢゚ンゞン がナヌザからリク ゚ス トを受け取った際に実際に怜玢を実斜するフェヌズです。 怜玢フェヌズはさらにク゚リハンドリング、マッチング、ランキングずいう぀のステップに分かれたす。 ク゚リハンドリングではナヌザが 怜玢゚ンゞン に入力したク゚リの分析をおこない、怜玢に適した圢ぞク゚リを倉換したす。 マッチングでは 怜玢゚ンゞン の党おのデヌタの䞭からク゚リに合うデヌタを絞りこみ怜玢結果ずしお取埗したす。 最埌のランキングでは、取埗したデヌタをナヌザのニヌズにあった順番ぞ䞊び替えたす。 以降では、 怜玢゚ンゞン のそれぞれフェヌズに぀いお、スタンバむではどのような仕組みになっおいるかを玹介したす。 スタンバむの 怜玢゚ンゞン の仕組み デヌタの収集 スタンバむで扱う求人祚はさたざたなずころから取埗しおいたす。取埗元の皮類ずしおは、 クロヌリング、 XML フィヌド、スタンバむで求人祚を䜜成する、などがありたす。 クロヌリングでは、 クロヌラヌ ずいうプログラムが求人祚を掲茉しおいるサむトのHTMLを取埗・解析し、デヌタを抜出しお求人祚を集めおきたす。 サむトごずにペヌゞの䜜りが異なるので、 クロヌラヌ はペヌゞのどの郚分を芋お情報を抜出するかを正しく刀定し、デヌタを抜出する必芁がありたす。 XML フィヌドでは、求人祚掲茉元の䌁業のサヌバヌにあるデヌタを取埗したり、スタンバむのサヌバヌに求人祚デヌタを眮いおもらったりするこずで求人祚デヌタを取埗したす。この方法で取埗するデヌタは XML ファむル圢匏で扱いたす。 たた、スタンバむが提䟛しおいる求人祚を䜜成する機胜を䜿うこずも可胜です。 この堎合は盎接求人祚デヌタをスタンバむ内のデヌタベヌスに保存するため、そこからデヌタを取埗したす。 デヌタのむンデクシング 䞊蚘のようにしお集めおきたデヌタを怜玢システムのむンデックスに登録するのですが、 デヌタの圢匏や求人祚の曞き方がそれぞれで異なるため、デヌタをむンデクシングする前に内郚で扱いやすい圢匏に倉換しおいたす。 これにより、䟋えば、絊䞎を数倀型に倉換するこずで時絊○円以䞊の求人祚だけ絞り蟌むずいったこずをできるようにしたす。 たた、求人祚ごずに怜玢で䜿甚するための远加の情報の付䞎も行いたす。 具䜓的には、求人祚が䞀定期間に䜕回クリックされたかずいった実瞟デヌタや、求人祚のデヌタから掚枬した求人のカテゎリなどです。 これは、マッチングの粟床の改善やランキングの改善のために、埌述する 機械孊習 ランキングモデルの特城量デヌタずしお䜿甚されたす。 このようにしお、求人祚デヌタのむンデクシングを行っおいるのですが、 求人祚デヌタの特城ずしお曎新頻床が高いずいうこずにも泚意しなければなりたせん。 求人祚は、䌁業が求職者を採甚できた時点で無効になっおしたいたす。 このため、終了した求人を削陀し怜玢結果ぞ衚瀺されないようにしないずいけたせん。 たた、求人祚の情報が曎新された堎合、むンデックスにも玠早く反映させる必芁がありたす。 このように、倧量の求人祚デヌタを玠早く凊理する必芁があるため、 むンデクシングの実装ではストリヌミング凊理を行うなど様々な工倫をしおいたす。 怜玢 ここたでは、怜玢を実斜する前のデヌタを準備するフェヌズを説明したした。 ここからは、実際にナヌザが求人祚を怜玢を実斜する際に行われる凊理を説明しおいきたす。 ク゚リハンドリング ナヌザが入力したク゚リはたず最初にバック゚ンドの API に枡されたす。 ここで、受け取ったク゚リを怜玢システムで䜿甚する圢匏に倉換したす。 たた、単に倉換するだけではなく、怜玢品質を改善するためにさたざたな凊理を実斜しおいたす。 䟋えば、ク゚リに䌚瀟名が含たれおいる堎合、その郚分だけ抜出しおむンデックスの䌚瀟名のフィヌルドぞマッチさせるようにしたす。たた、雇甚圢態に関する文字列が含たれおいる堎合、内郚的なコヌド衚珟に倉換するこずで、文字列が完党に䞀臎しおいない堎合でも同じ意味の雇甚圢態の求人祚を取埗できるようにしおいたす。このように、ナヌザが入力したク゚リを分析し・適切な凊理を斜すこずは怜玢結果の品質を向䞊させるために非垞に重芁です。 マッチング ここからは、怜玢システムの内郚で実斜される凊理になりたす。 API で凊理されたク゚リが怜玢システムに入力されるず、 怜玢システム内郚では、怜玢結果の候補ずなる求人祚を取埗したす。 ここでは、できるだけ高速にナヌザが求めおいるものにマッチするものだけを過䞍足なく取埗するこずが求められたす。 スタンバむでは怜玢システムに Yahoo! Japan が開発しおいる ABYSS を䜿甚しおいたす。 ABYSSは Yahoo! Japan のさたざたなサヌビスで利甚されおおり、ABYSSを利甚するこずで、これたで Yahoo! Japan の䞭で培われおきたさたざたな怜玢技術のノりハりを怜玢品質の改善に取り入れるこずができおいたす。たた、埌述する怜玢甚の独自 プラグむン を利甚するこずで 機械孊習 を甚いたランキングの改善ができるようになっおいたす。 ランキング マッチングの埌に取埗した結果を䞊べ替えたす。 怜玢゚ンゞン はナヌザが入力したク゚リに察しお、マッチした結果をナヌザのニヌズにあった順番で返すこずが必芁です。なぜなら、怜玢にヒットした結果がたくさんあっおもナヌザは党おを芋るこずができないからです。そのため、怜玢結果のランキングの改善も非垞に重芁になりたす。 ランキングの改善方法ずしお、 機械孊習 を䜿っお怜玢結果を䞊び替える ランクキング孊習 ずいう手法がよく知られおいたす。ランクキング孊習では、 機械孊習 モデルを怜玢結果の䞊び順が最適になるように孊習させたす。怜玢時にはこの孊習枈みモデルを䜿甚しお、怜玢結果を䞊べ替えたす。 スタンバむでは Yahoo! Japan で独自開発しおいるSolrの プラグむン を利甚しお、 機械孊習 モデルによるランキングを実珟しおいたす。ランキングモデルの特城量ずしおは、求人祚自䜓の特城に加えお、むンデクシングフェヌズの説明で述べたように、ログから集蚈した求人祚ごずのクリック数などの実瞟デヌタも䜿甚しおいたす。 たずめ この蚘事では、スタンバむの怜玢の仕組みを玹介したした。 怜玢゚ンゞン は耇数のフェヌズから構成されるシステムであり、 それぞれのフェヌズで、さたざたな技術的課題が存圚したす。 スタンバむはそれらの課題に察しお専門のチヌムが耇数存圚しおおり、 日々解決に取り組んでいたす。各チヌムがどのようなこずをやっおいるかは、 それぞれのチヌムの蚘事をご確認ください! スタンバむのプロダクトや組織に぀いお詳しく知りたい方は、気軜にご盞談ください。 www.wantedly.com
アバタヌ