TECH PLAY

゚ス・゚ム・゚ス

゚ス・゚ム・゚ス の技術ブログ

å…š269ä»¶

Who I am みなさたはじめたしお。2025幎6月よりAnalytics&Innovation掚進郚通称A&Iに入りたした井手ず申したす。 肩曞ずしおはデヌタサむ゚ンティストずいうくくりで仕事をしおきおおりたす。統蚈分析や自然蚀語凊理にかかわる孊問領域を修めお瀟䌚に出たあず、デヌタを集めるずころから、それを加工し、分析を行いモデルにするたで幅広くデヌタ呚りに関するお仕事に関わっおきたした。過去にはECサむトの分析基盀構築ず分析業務、盎近前職では瀟内むンフラデヌタの分析基盀構築やそれを甚いたデヌタ利掻甚掚進業務、機械孊習を甚いた゚ンゞニアHR業の業務マッチングシステムの構築などに携わっおきおおりたした。 When I decided to change 前職での仕事はやりがいもあり特に倧きな䞍満もなかったのですが、関わっおいたプロゞェクトが萜ち着いたタむミングで先のこずをがんやり考えるようになりたした。私は倧孊にいた期間が長かった関係で、瀟䌚人経隓で蚀うず同幎代同䞖代の人たちず比べるずそこたで倚くないんです。ぺヌぺヌです。ぺヌぺヌなのですが、瀟䌚人経隓の長さにかかわらず皆平等に幎をずっおいきたす。私の残りの瀟䌚人人生はそこたで長くない。環境を倉えるならそろそろ最埌かなっおいう思いが、私の背䞭を抌したした。 Why I’m here Motivation 環境を倉えるずしお䜕がしたい これに぀いおは私はひず぀、い぀か医療や介護に関わる人達のための仕事に自分の胜力を圹立おおみたいずいう方向性を持っおいたした。人間歳を取っおくるず、自分や家族が医療介護のお䞖話になる機䌚が増えおきたす。私もその䟋に挏れず家族が随分ずお䞖話になる経隓がありたした。そしお私たちは倧倉幞運なこずに玠晎らしい方が担圓をしおくださり、頌もしい想いや安堵を感じたこずをよく芚えおいたす。これは、担圓しおくださった方の才胜はもちろんのこず、その職掌が珟堎においおたさに適材適所だったからこそなのだず私は思っおいたす。適材適所っおいうのは、難しい問題です。それでも、適材適所になる確率を少しでも高めるこずはできないか、そしお私たちのような想いをする人を䞀人でも倚くできるように自分の胜力を掻かせないかずいう気持ちを長らく抱いおおりたした。 看護介護の人材マッチングを柱の䞀぀ずする゚ス・゚ム・゚スは、私のチャレンゞの舞台ずしおはたさに理想的でした。 The Determinants もちろん看護介護のマッチングを提䟛する䌚瀟は他にもありたす。その䞭で、私が゚ス・゚ム・゚スを遞んだ芁因。今䞀生懞呜思い出しおみるずたくさんありたす。たくさんありたすが、垞にぱっず思い浮かぶのは以䞋の2点。どちらも党然ロゞカルではなく、すごい感芚的なのですが、たあ、意思決定なんおそんなものですよね。 ① 遞んでもらえお誇らしかった 転職をするにあたっお、もちろん候補ずなる䌁業はいろいろ調べたす。䌁業HPをみたり、転職サむトの口コミ芋たり瀟員のみなさんがやっおいるブログを読んだり。゚ス・゚ム・゚スも、私が目指したいゎヌルは十党に共感できるものの、そこに向かう、䞀緒に働く方々はどういう人達なんだろうっおいうこずも気になっおだいぶ調べたした。゚ス・゚ム・゚スの皆さん、゚ンゞニアはもちろんキャリアパヌトナヌずしお働く人もみな志が高く実力者。ああ、皆さんレベルが高いんだな私の力が通甚するかなっお少し䞍安になるほど。遞考も緊匵の連続。冷や汗だらだら。それでも無事に内定をいただき、その埌再び内郚のみなさんずお話をする機䌚にお改めお志の高さを確認。そのような方々に遞んでいただけたこずを倧倉に誇らしく思い、入瀟の決め手の䞀぀ずなりたした。 だから今も私、すごく誇らしい気持ちで働いおいたす。 ② 田蟺さん 本郚長の田蟺さん。䞀次面接を担圓しおくれたした。私、もう、めちゃくちゃ緊匵しおいたんですね。オンラむンだけどちゃんずスヌツ着お、ちゃんず3分前くらいには入宀しお蚀おうず思っおいるこずを぀っかえずに蚀えるかなっお頭の䞭で䜕床もリハヌサルしお。 そしお぀いに登堎した田蟺さん。私が事前に想像しおいた「本郚長の田蟺さん」ずは随分異なり、なんでしょう。カゞュアルずいうか。登堎するなり私の緊匵を察しおか、2、3蚀こずばをかけおいただいお。私も緊匵しおいたのであたり芚えおいないのですが、その蚀葉で肩の力が抜けた気がしお。 なんでしょうね。面接には関係のないほんのささいな蚀葉だったし、いた思い出しおもこの䌚話にどんな情報量が詰たっおいるか未だにわからないんですよ。でも、この瞬間に、あ、ここでぜったい働きたい。田蟺さんずいっしょに働きたいっお思うんだから人間っお䞍思議ですよね。本質的にはロゞカルな生物ではないんでしょうね。人間。 結局①も②も根底は䌌おいるのかな。いいなっお思った方々に遞んでいただけた。それがすごく誇らしいです。今も。 What I’m doing now いく぀かの業務を担圓させおいただいおおりたすが、メむンはキャリアパヌトナヌ向けのサヌビス改善です。キャリアパヌトナヌのみなさんが珟圚利甚しおいる、求職者ずのトランザクションを管理するシステムを、より機胜的にスケヌラブルで䜿いやすいものぞず刷新する䞭で、私は特に、求職者ず事業者のマッチング確率を蚈算しおリコメンドを生成する郚分で関わらせおもらっおいたす。 䞀般的なマッチングあるいはリコメンドの手法は蚀うに及ばず、HR領域においおも、囜内海倖を芋枡しおみるず盛んに手法が提案されおきおいたす。ただ、デヌタの持ち方や取埗できるデヌタの性質はビゞネスのスタむルによっお倧きく倉わりたす。今䞀番効果的だず謳った手法を採甚し、手元のデヌタに適甚しようずしおもさっぱりずいうこずはざらです。ずりわけ私達の堎合、マッチングに際しお間にキャリアパヌトナヌずいう人間が介圚し、キャリアパヌトナヌの情報も利甚する必芁がありたす。そうするず問題構造が、研究が盛んに行われおいる単玔なResume-Jobマッチングず倧きく異なっおきたす。既存の技術だけではどうにもならないぞ、ず少し䞍安はありたすがそれでもこのチャレンゞングな課題に倧きなやりがいを芋出しおおり、なんずかクリアしようず奮闘䞭です。 Where I want to go 「高霢瀟䌚に適した情報むンフラを構築するこずで人々の生掻の質を向䞊し、瀟䌚に貢献し続ける」が、゚ス・゚ム・゚スのミッションです。 私はこれに共感しお入瀟しおいたす。だから、私の倧きな目暙はただ䞀぀。自分が定幎になっお退職し、そしお高霢瀟䌚の䞀員になったずき、そしお瀟䌚を芋枡したずきに「あ、゚ス・゚ム・゚スで頑匵っおよかったな」っお思えるようにするずいうこずです。䞖間の報じられ方からするず、特に若幎局の人から芋るず、高霢瀟䌚ずいうのは䞀皮のディストピアのように芋えおしたっおいるかもしれたせん。倧きな重荷に芋えおいるかもしれたせん。確かにやりたいこずもできず、他人の䞖話をしなくおはいけない䞖界ずいうのは明るいずは蚀えたせん。ただ、高霢者がいお、その高霢者の呚りには個々の力が適材適所で発揮できる堎所が存圚するのだずしたら、その瀟䌚は重荷でしょうか。やりがいのある瀟䌚ずは蚀えないでしょうか。私はそういう瀟䌚になるよう貢献したいず思っおいたす。 ずはいえちょっず挠然ずしすぎた目暙なので、もうちょい自分の胜力に匕き寄せた目暙を立おるず、たずは䞊述したマッチング蚈算のアルゎリズム。未螏な郚分が倚いですが、やり遂げたいず思っおいたす。そしお過皋で埗られる様々な知芋に぀いおは、できる限り発信しおいきたいず思っおいたす。少子高霢化は、遠くはむタリア、近くはお隣韓囜など、日本以倖の様々な囜でも問題になっおきおおり䞖界の喫緊の課題です。日本のみならず䞖界の人々ず知識をシェアし、よりよい解決策を皆で怜蚎できるようになれたらず思っおおりたす。 How I’ll get there なんかえらそうなこずを延々曞いおきおしたいたしたが、私の力はただただ足りたせん。党然足りたせん。ずもするず定幎退職の圓日たで成長しなくおはいけないくらい足りないかもしれたせん。 だいぶ長く生きおきお、そうするず自分の胜力に぀いおもだいぶ把握できおくるのですが、自分は小さな頃に信じおいたほどのスヌパヌマンにはなれたせんでした。いや、ちょっずのスヌパヌマンにもなれおいたせん。誰かが1回でできるこずは、私は3回かかりたす。いた曞いおいお思いたしたが、スヌパヌマンずか持ち出したしたが本圓はどんくさいのかもしれたせん。ごめんなさい盛りたした。 ただ少なくずもスヌパヌマンではない私、3回繰り返すこずはできるんです。3回でできなくおも5回繰り返すこずはできるんです。この才胜は心から芪に感謝しおいたす。私の座右の銘は本圓に月次で陳腐だず思うのですが「継続は力」です。これは本圓。そしお私の唯䞀の歊噚です。 高く掲げた目暙、1回挑戊しおだめなら10回やりたす。い぀かきっずできたす。い぀かきっずできるんだけど、もしかしたらそれは定幎の日を超えちゃうかもしれない。間に合わないかもしれない。たあでも、やらないっお遞択肢はないですよね。誇りをもっお、進んでいきたす
こんにちは、カむポケの開発組織責任者の酒井 ( @_atsushisakai )です。 事業䌚瀟で働く゜フトりェア゚ンゞニア、特にプロダクト開発に関わる人にずっお、個人の目暙蚭定に関する悩みはよく話題に䞊がるテヌマです。「どう立おればいいのかわからない」「立おたはいいものの圢骞化しおしたう」「目暙を達成しおも思ったように評䟡されない」ずいった悩みを聞くこずが倚くありたす。 以前、私自身の目暙蚭定の考え方を瀟内でたずめたずころ反応がよかったこずもあり、改めお「目暙」ず「評䟡」の関係性を敎理し、圢骞化しにくく、成果ず成長に぀ながる目暙蚭定の考え方を玹介したいず思いたす。 目暙蚭定に関するよくある悩み これたで耇数瀟で䞻に゚ンゞニアのマネゞメントをやっおきお、目暙蚭定が難しいず感じる理由にはいく぀かの共通点があるように感じおいたす。 圢だけ立おお終わる ずりあえず䜕かを曞かないずいけないから、無難な内容にしおしたう。 達成しおも評䟡が思い通りにならない 「やったこずはやったのに、なぜ評䟡が䞊がらないんだろう」ずモダモダする。 そもそも目暙に䜕を曞けばいいかわからない 「なりたい自分像」や「理想のキャリア」がはっきりしないず、目暙が浮かばない。 こうした悩みを抱える人は少なくないず思いたす。たた、目暙を䞀緒に立おおいくマネヌゞャヌにずっおも、成熟した考え方が身に぀いおいないず、このようなメンバヌの問題を解決するのは結構難しいこずだず思いたす。 目暙ず評䟡の関係性 これたでに䜕床もメンバヌから「目暙蚭定」に関する盞談を受けおきたした。その床に、前提ずしお目暙ず評䟡の関係性をしっかりず認識しおもらうためのコミュニケヌションを取っおいたす。 目暙ず評䟡に぀いお、私の考え方を敎理するず次のようになりたす。 目暙ず評䟡は盎接玐づくものではない ゚ス・゚ム・゚スの゚ンゞニア評䟡は「成果評䟡ではなく胜力評䟡」ずいう手法をずっおいたす (詳しくは、 ゚ンゞニア採甚ペヌゞ の蚘茉をご芧ください)。この評䟡手法においお、目暙は「これを達成したから等玚UPする」「達成できなかったから評䟡が䞊がらない䞋がる」ずいうものではなく、あくたで自分がどの課題にチャレンゞするのかを衚明するものず䜍眮付けおいたす。 目暙の本質は成長のための仮説立お 目暙は評䟡のためではなく、達成するこずを通じお自己成長を実珟するためのガむドツヌルです。評䟡されるのは「どのような意味のある成果を生み、その過皋でどういう成長を遂げたのか」ずいう結果に察しおであり、目暙を達成したしなかったずいうそれ自䜓ではありたせん。 評䟡は組織ごずのマネゞメントポリシヌに䟝存する どれだけ目暙を達成し成長できおいるず蚀っおも、それが䌚瀟から期埅されおいる圹割や等玚の範囲を超えおいなければ評䟡に反映されにくいこずもありたす。それぞれの組織にはその組織のマネゞメントポリシヌに沿った評䟡軞が存圚し、その評䟡軞に照らし合わせお䞋されるものです。 ぀たり、目暙は「成果を生むためにどの課題に取り組むかを明確にするためのツヌル」ずしお掻甚し、評䟡に぀いおは評䟡の意思決定を行うマネヌゞャヌずその評䟡軞をすり合わせおおくこずが倧切だず考えおいたす。 私自身の䜓隓ず孊び 私自身も目暙蚭定にはかなり苊劎しおきたした。自分がどんな゚ンゞニアやマネヌゞャヌを目指したいのか、明確なロヌルモデルを持っおいたわけではなく、最初は「䜕を曞けばいいかわからない」ずいう感じでしたし、それゆえ目暙蚭定ずいう䜜業はずおも苊手でした今も埗意ではありたせん。 そんな䞭で気づいたのは、「なりたい自分像」から逆算しお目暙を立おるのは必ずしも必芁ではないずいうこずです。むしろ、自分が今いる環境やプロゞェクトの䞭で、 どんなゎヌルが組織やプロダクトにずっお意味があるのか そこに向かう䞭で䜕が課題になるのか その課題を解決するために、自分はどんな貢献ができそうか その貢献は自分にずっお十分チャレンゞングなものか を考える方が、珟実にフィットするし、プロダクト開発を䞻軞ずする゚ンゞニアである自分は目暙を䜜りやすいず感じたした。 ここ最近、私は目暙を立おる際はい぀も、 たずは少し先の「ゎヌル組織やプロダクトに぀いお、こうなっおいたら嬉しい状態」を考える そこに向かう䞊での課題を倚面的に掗い出す 特に重芁床が高い課題を遞ぶ その課題をどう解くか、課題を解くためにはどんなステップがありそうかを考える ずいうステップを螏んでいたす。 これを繰り返すうちに、「目暙を立おる」こず自䜓は苊手ではあるがやるべきこずだずも感じられるようになり、呚囲にも説明しやすく、評䟡にも぀ながりやすい圢に自然ずなっおいったず思いたす。 「目暙蚭定テンプレヌト」の玹介 こうした䜓隓を螏たえお「もっずシンプルに、圢骞化しにくい目暙を誰でも䜜れる圢にしたい」ず思い、今回あらためお敎理したのが、ここから玹介する「目暙蚭定テンプレヌト」です。 このテンプレヌトの倧きな特城は、「たずは事業やプロダクトのゎヌルを解釈し、そのゎヌルから逆算しお課題を芋぀け、そこに挑む䞭で成長を埗る」ずいう順序にありたす。「なりたい自分像」ありきではなく、珟実の課題から出発しおチャレンゞを蚭蚈するずいう考え方です。ただし、このテンプレヌトはプロダクト開発に関わる゚ンゞニア向けに䜜っおおり、職皮や圹割によっおは圓然合わない郚分もあるかもしれたせん。必芁に応じお、自分の圹割に合わせお調敎しお䜿っおください。 テンプレヌトの構成 テンプレヌトは倧きく次の5ステップで構成しおいたす。 ゎヌル 珟状ず課題 テヌマ ステップずチャレンゞ 目暙 (Objectives) テンプレヌトの䞭身ず意図 テンプレヌトの各項目の意図ず、どういう考え方で埋めるず良いかを簡単に説明したす。 1. ゎヌル たずは、ビゞネスやプロダクトの戊略、長期的な目暙を螏たえお目指したい状態・達成した成果を曞きたす。 2. 珟状ず課題 このゎヌルに向かう䞊で、珟圚立ちはだかっおいる問題に぀いお蚀語化しおください。チヌム、組織、プロダクト、プロセス、自分のスキルやマむンドなど倚面的に掗い出したしょう。最終的に、この期間に解決すべき特に重芁・緊急な課題は䜕かを明瀺しおくださいフォヌカスするこずを重芖したいので最倧3個皋床に絞りたしょう。 3. テヌマ 遞んだ課題に察しお、自分が取り組む際のテヌマを明確化したす。なぜこの課題解決を自分が担うこずに意味があるのか貢献・成長の芖点、その課題が解決された状態はどのようなものなのかに぀いお蚀語化しおください。 4. ステップずチャレンゞ 課題を解くために、どのようなステップが必芁だず考えおいたすかステップを螏んでいく䞭で、あなたにずっお予想されるハヌドルやチャレンゞはどんなものありたすか 5. 目暙Objectives フォヌカスするこずを重芖するので、2〜3個に絞っお蚭定しおください。定性的でもOKで、ゎヌルや成果を瀺すだけでなく、ありたい姿や取り組み方に焊点を圓おおもよいです。たた、自身の珟圚の等玚や圹割における期埅を螏たえた䞊で、「その目暙は氎準ずしお劥圓か」を芋立おる意識を持぀こずが重芁です。 この順序で敎理するず、「最終的な組織党䜓が目指す成果を生むために今期自分自身はどの課題にチャレンゞするのか」が自然ず蚀語化できるず考えおいたす。 テンプレヌト掻甚の工倫 テンプレヌトを最倧限掻かし぀぀、目暙を圢骞化させないために、いく぀か工倫を加えるず良いかもしれたせん。 䟋えば以䞋のような工倫を亀えながら目暙蚭定ずいう䜜業に向き合うず、単なる儀匏的な䜜業にならず、珟実の課題ず向き合うツヌルずしお長く掻かせるものになるはずです。 目暙蚭定䜜業を1人で抱え蟌たない 目暙は自分だけで完璧に䜜るものではありたせん。マネヌゞャヌやチヌムメンバヌずもオヌプンな䌚話ですり合わせながら、課題の優先順䜍やゎヌルの解像床を段階的に䞀緒に確認するず、より珟実に即した内容になりたす。 定量化に瞛られすぎない 目暙を党郚数字で衚そうずするず、逆に本質からズレおしたうこずもありたす。「どういう状態を目指すのか」「どんな姿勢で取り組むのか」ずいった定性的な芁玠も、成長を瀺す倧事なポむントです。 達成できなくおもOK 目暙は「やるこずの宣蚀」ではなく「こういう仮説をもっおチャレンゞする」ずいう衚明です。仮に目暙が達成できなくおも、その過皋で䜕を孊び、未達成の原因を内省・远求し、次にどう぀なげたかを蚀語化するこずができれば十分に意味のある䜜業です。 たずめ プロダクト開発を担う゜フトりェア゚ンゞニアが事業成果を起点に考える目暙蚭定をどのようなステップで行うか、その背景にある評䟡の考え方に぀いお玹介したした。目暙は「評䟡のためのコミットメント」ではなく、「今どの課題にあえお挑戊するのか」を蚀語化し、成長ず成果を結び぀けるツヌルだず私は考えおいたす。 もし、目暙が圢骞化しがちであったり、䜕を曞けばいいかわからないなどの悩みがある堎合には、ぜひ䞀床このテンプレヌトを参考にしおみおください。
はじめに こんにちは、介護/障害犏祉事業者向け経営支揎サヌビス「カむポケ」のリニュヌアルプロゞェクトでモニタリングやオブザヌバビリティ呚りを担圓しおいる加我 ( @TAKA_0411 ) です。 私が携わっおいるカむポケのリニュヌアルプロゞェクトではオブザヌバビリティのツヌルずしおDatadogを掻甚しおいたす。そしおこの床Findy様からのお声がけで、DatadogのレビュヌをFindy Toolsに寄皿したした。 findy-tools.io Findy Toolsに぀いお 「Findy Tools」は、開発ツヌルに特化したレビュヌサむトです。第䞉者の芖点で実際にツヌルの遞定を行った䌁業の生の声を集めるこずで、ツヌル遞定に関する䞍安を解消し、導入怜蚎に必芁な情報を提䟛したす。 「Findy Tools」を開発ツヌルの導入怜蚎をしおいるナヌザヌが利甚するず、実際にツヌル遞定を行った倧手䌁業やメガベンチャヌ䌁業の技術責任者や゚ンゞニアによるレビュヌを集めるこずができ、導入怜蚎がスムヌズになりたす。たた、開発ツヌルを掲茉するベンダヌには、実際の利甚䌁業の声を掻かしたコミュニティマヌケティングによる新芏顧客の獲埗や、認知向䞊をご期埅いただけたす。 findy.co.jp レビュヌの寄皿に至った経緯 以前、匊瀟の゚ンゞニアが別のツヌルに関するレビュヌをFindy Toolsに寄皿したこずがありたした。その時のご担圓者様が 私のブログ蚘事 を芋お「Datadogの掻甚ノりハりに぀いおのレビュヌを寄皿しおみたせんか」ずお声がけいただいたのがきっかけでした。 実はお声がけいただいたタむミングが非垞に良く、瀟内でも「オブザヌバビリティのツヌルの技術遞定に぀いおの意思決定をADR (Architecture Decision Record) ずしお残しおおいた方がよいのでは」ずいう議論がありたした。これにより、関連するADRを敎備し、それに沿っおレビュヌ蚘事を執筆するこずで無事に寄皿できたした。 レビュヌの泚目箇所 オブザヌバビリティのツヌルは倚く存圚したすが、利甚する組織の芏暡やプロダクトの特性によっお最適解が異なりたす。ツヌルの導入にあたり「実運甚をしっかりむメヌゞするこず」「特定の人やチヌムに属人化させないこず」「より倚くの開発者に利甚しおもらえるこず」が重芁だず私は考えおいたす。特に「より倚くの開発者に利甚しおもらえるこず」は私たちのリニュヌアルプロゞェクトでも重芁な刀断軞です。 それを螏たえお以䞋の内容をご芧いただくず、理解が深たるず思いたす。 私たちがツヌルを導入する前にどのような課題があったのか ツヌルを導入するこずでどのような状態を目指しおいたか 比范怜蚎したツヌルず比范の軞 導入の成果 特に最埌の導入の成果は私のむチオシです。オブザヌバビリティのツヌルを導入するこずでどのような問題が解決できるようになったのかずいう話は、珟堎の゚ンゞニアだけではなく導入を刀断する立堎のマネヌゞャヌにずっおも気になるポむントだず思いたす。私たちのサヌビスは開発途䞭のため、珟時点での成果が気になる方も倚いでしょう。ぜひみなさたの目で確かめおみおください。 最埌に Findy ToolsぞDatadogに関するレビュヌを寄皿した話でした。今埌オブザヌバビリティのツヌルを導入しようず考えおいる読者のみなさんはぜひ参考にしおみおください。 今回のレビュヌ寄皿にあたり、圓時からドキュメントを残し぀぀䞁寧にDatadog導入をリヌドしおくれたSREチヌムの @okazu_dm さんず小笠原さんには感謝が尜きたせん。特に小笠原さんは今回のレビュヌの寄皿を行うにあたり、過去のやり取りの取りたずめやADRの敎備を率先しお進めおいただき非垞に助かりたした。 もしレビュヌの内容に぀いお詳しく聞きたいずいう方がいたしたら䞋蚘のむベントやTwitter (X) 等で気軜にお声がけください。 datadog-jp.connpass.com
はじめに みなさん、こんにちは 株匏䌚瀟゚ス・゚ム・゚スの川名ず申したす。 私は2024幎7月に゚ス・゚ム・゚スに入瀟し、人材玹介事業の業務基盀を開発する「BPR掚進郚 キャリア暪断開発グルヌプ」でテックリヌドを務めおいたす。 この蚘事では、BPR掚進郚におけるテックリヌドのミッション、そしお日々の課題にどのように向き合いながら事業貢献に玐づけおいるのかを、具䜓的な事䟋を亀えながらご玹介したいず思いたす。 この蚘事を通しお゚ス・゚ム・゚スで働くこずのやりがいや珟圚抱えおいる課題なども共有するこずで、皆さんが圓瀟で掻躍いただくむメヌゞを持぀䞀助ずなれば幞いです。 我々の゚ンゞニア組織に぀いおは、匊瀟及川の蚘事『 Team Topologies で瀟内ナヌザ向け業務システムを開発する組織を再蚭蚈しおみた 』をご芧いただくこずで、よりむメヌゞが具䜓的になるかず思いたすので是非ご芧ください。 自己玹介 簡単に私の経歎に぀いおお䌝えさせおください。 私ぱンゞニアになる前、工業補品の生産郚門で1工皋を担圓しおいたのですが、補造にはある皋床の型があり、その基準通りに生産する事だけが成果ずなっおいる事に個人的に違和感がありたした。 生産数や品質をキヌプしながら、継続的にアりトプットし続ける仕事の倧倉さや重芁性を理解する䞀方で、どのようにすればより良いアりトプットになるのかそのための仕組み䜜りや蚭蚈に楜しさを芋出し、それが実珟できそうな゜フトりェア゚ンゞニアの道に進みたした。 ゜フトりェア゚ンゞニアずしおは、SIerのWeb゚ンゞニア、事業䌚瀟小売の情報システム担圓、SaaS䌁業のコヌポレヌト゚ンゞニアずキャリアを積んできたした。 コヌポレヌト゚ンゞニアになっおからは、経営や事業郚からの芁求を盎接ヒアリングし、芁求を技術でどう解決するかに泚力しおきたした。具䜓的には、Salesforceを䞭心ずしたCRM/SFAのカスタマむズや倖郚システム連携による業務プロセスの自動化、GCPやAWSを掻甚した連携基盀の構築、各皮SaaSの導入・運甚サポヌトによる生産性向䞊などが䞻なミッションでした。 単にシステムを導入/開発するだけでなく、それがビゞネス䟡倀にどう繋がるかを垞に意識し、最適な技術遞定やアヌキテクチャ蚭蚈、コミュニケヌション、DevOpsなどが埗意な領域です。 私が感じるコヌポレヌト゚ンゞニアの魅力 職歎の䞭でも特に゚ンゞニアずしおの楜しさがより増したのが、コヌポレヌト゚ンゞニアずしお掻動し始めた頃です。SIer時代は開発するものが抂ね決たっおいる事が倚く、本質的には「どのような型や基準を䜜るべきなのかを考える事」がほずんどハンドリング出来なかったように思いたす。 コヌポレヌト゚ンゞニアずいうロヌルの魅力ぱンゞニアリング面からビゞネスのOps改善を事業郚ず䞀緒に進められたり、より良いアヌキテクチャを自分たちで考えたりしながらビゞネスに貢献しおいける点です。 コヌポレヌト゚ンゞニアはステヌクホルダヌず近い距離でコミュニケヌションをずりながら、技術的な解ずビゞネス芁求のバランスを取る難しさず面癜さがあるず感じおいたす。 ゚ス・゚ム・゚スに入瀟した理由 䞊蚘のようにやりがいのある日々を過ごしおいたしたが、そんな䞭でも転職しようず思ったきっかけは、自分自身がただただ成長出来るず感じた事でした。 よりチャレンゞングな環境で自分を成長させながら、それを事業成長に繋げられる事が実感できればより有意矩なキャリアになるず考えたのです。 転職掻動を開始し、幞いなこずにいく぀かお声がけをいただく䞭で、最終的に゚ス・゚ム・゚スに入瀟を決めた理由は以䞋です。 瀟䌚貢献床の高い事業䞔぀業界におけるシェアが倧きい 芏暡感が倧きい+゚ンゞニア組織ぞのコミットメントから、「自身が最も成長できそうな環境」だず感じた オファヌ面談のメッセヌゞに感銘を受けた 事業芏暡に぀いおですが、゚ス・゚ム・゚スは医療介護領域の人材玹介事業においお倧きく瀟䌚に貢献しおいるプレヌダヌだず感じたした。これほどの芏暡の事業を支える゚ンゞニア組織の成長に興味があったずいうのが最初のきっかけでした。 その埌、Team Topologiesを利甚した組織構造の改倉や組織ミッションの芋盎し、アゞャむルな組織ぞの倉革を行なっおいるこずを䌺い、この芏暡であり぀぀モダンな取り組みを行なっおいる事がずおも魅力的だず感じ、結果的に自分の次の成長を実珟するフィヌルドずしお最適だず感じたのです。 所属する組織ずミッションに぀いお 圓瀟゚ス・゚ム・゚スには、党瀟の業務改善を掚進する「BPR掚進郚」がありたす。その郚内に、医療・介護業界の人材䞍足を解決する瀟内業務システムを開発する「キャリア暪断開発グルヌプ」が蚭眮されおいたす。私はその䞀員ずしお、埓事者様ず事業者様を぀なぐこずを䟡倀ずした機胜開発を担圓する、「マッチングチヌム」のテックリヌドを務めおいたす。 キャリア暪断開発におけるテックリヌドの圹割 事業郚やBAビゞネスアヌキテクトずいったロヌルのメンバヌず日々コミュニケヌションを取りながら、バックログアむテムの敎理、最適なアヌキテクチャ蚭蚈、リアヌキテクティング、レビュヌ、リリヌス調敎、運甚、堎面によっお自ら実装を行うなど、開発ラむフサむクルにおける党䜓を芋ながら掚進する圹割になりたす。BAやチヌムリヌダヌがWhat/When/Who/Whyなどに重きをおき、テックリヌドずしおはHowを䞻軞にWhat/Whyも深掘りしおいきたす。 参考たでに匊瀟のビゞネスアヌキテクトに぀いおは西田の蚘事を、チヌムリヌダヌに関しおは井䞊の蚘事をご玹介させおいただきたす。 ビゞネスアヌキテクト × Salesforce改善だけで終わらない、戊略掚進ず戊術実行を远求する BPR掚進郚の開発リヌダヌずしおの取り組み テックリヌドの具䜓的な掻動 ここからは私がチヌムの䞭で日々どのような芳点で仕事をしおいるのか、さらに課題感や今埌の展望などに぀いおシェアさせおいただければず思いたす。 私たちのチヌムではスクラムを甚いおプロダクト開発を行っおいるので、今回はスクラムのむベントプランニング、デむリヌスクラム、スプリントレビュヌ、レトロスペクティブを軞に掻動をシェアできればず思いたす。 スクラムむベントぞの関わり方 スプリントプランニング プランニングでは新たなスプリントでのゎヌル蚭定、取り組むべきバックログアむテムをチヌムで決定しおいきたす。優先順䜍に぀いおはチヌムリヌダヌやBAず䌚話をしながら調敎し、開発芖点で実珟可胜なラむンを決定しおいきたす。タスクの芏暡感に぀いおはリファむンメントずいう蚭蚈の時間を蚭けおいお、そこでアヌキテクチャなどをチヌムで共有しながら事前に算出する䜜業を行っおいたす。アヌキテクチャ怜蚎時には既存のコヌドベヌス、技術的負債やスケゞュヌルなど、トレヌドオフを考慮しながら、最終的にどこたでやるべきかを考えながら決定しおいたす。ここがずおも難しいずころではありたすが、醍醐味でもあるず感じおいたす。技術的にあるべき姿を考えながら具䜓化しおいく掻動は、゚ンゞニアにずっおずおもやりがいのあるミッションだず思っおいたす。 デむリヌスクラム 毎朝行っおいるデむリヌでは䞻に開発メンバヌから出たブロッカヌに぀いお確認するようにしおいたす。テックリヌドずいう立堎ずしおは技術的芳点で方向性に぀いお改めお議論が必芁になった堎合にスプリントゎヌルの達成に向けお各皮調敎を行なっおいきたす。私はデむリヌだけでなくタスクを進める䞊で困ったこずがないかなどをMTGの最埌などに軜く聞くなどしお発信しやすい環境づくりを心がけおいたす。そうするこずで1人だけでタスクをこなしおいるずいう感芚から、チヌムミッションずしお捉え、党員でゎヌルに向かっお動けるずメンバヌに感じお欲しいからです。 スプリントレビュヌ スプリントレビュヌではチヌム内で「受け入れ芁件」ず「完了の定矩 / Definition of Done (DoD)」の確認を行いプロダクトレビュヌ、ステヌクホルダヌのレビュヌはスクラムむベント倖で実斜しおいたす。この時、圓初の芋積もりず異なっおいた点や改善出来そうな点や疑問点などをチヌムでディスカッションしながら次のプランニングに向けお改善内容を確認しおいきたす。たたリリヌス埌に぀いおは事業郚メンバヌに利甚状況などをヒアリングする堎面もありたす。 レトロスペクティブ スプリント終了時の振り返りはKPTを利甚しおディスカッションしおいたす。たた今期からFour Keysを軞ずした開発生産性指暙のメトリクスをFindy Team+で確認する取り組みを開始したした。コミットからオヌプンたでのリヌドタむムやオヌプンからレビュヌたでのリヌドタむムなど各皮KPIをスプリント間で比范しながら、芁因の深掘りをするこずでより良い開発䜓隓を実珟するための情報収集やファシリテヌションを行なっおいたす。 䞊流での関わり方 テックリヌドずいう立堎は基本的に「How」に責務を持っおいたす。「こういうものが欲しい」ずいう芁求があっお、どう実装すべきかずいう「How」を考えお具䜓に萜ずし蟌む䜜業です。 しかしながら゚ス・゚ム・゚スでは䜕を䜜るべきなのかずいう事業郚やBAずのディスカッションにも関わるこずができる楜しさがあるず思いたす。 時間的な制玄もあるので党おの䌚話に入るこずは難しいのが珟実ですが、倧芏暡なテヌマの改善においおは開発者ずしお参加するこずができ、「゚ンゞニアだから事業の事は分からないだろう」ずいった空気感もなく、分からない事も䞁寧に教えおいただく事が出来る点がずおも助かっおいたす。これは各自が匊瀟の 理念 を倧切に思い、「情熱」「誠実」をもっお「プロフェッショナル」であるこずを远求する ずいう考え方を基本ずしおいるこずから生たれおいる文化だず思いたす。 開発生産性向䞊に向けた取り組みずその意矩 今期、私たちのチヌムおよび組織党䜓では「開発生産性の向䞊」を重芁テヌマずしお掲げ、さたざたな取り組みを進めおいたす。 私たちが担圓するモノレポは、10幎以䞊にわたり機胜远加ず改修を重ねおきた結果、珟圚では認知負荷の高さや技術的負債の蓄積が課題ずなっおいたす。こうした背景の䞭で、いかにしお継続的に䟡倀を届け続けるか、どのように開発生産性を高めお倉化に匷い開発䜓制を築くかが、私たちにずっお喫緊のチャレンゞです。 このような取り組みを通じお、 「高霢瀟䌚に適した情報むンフラを構築するこずで人々の生掻の質を向䞊し、瀟䌚に貢献し続ける」 ずいう゚ス・゚ム・゚スのミッションを、より高い次元で実珟しおいけるず確信しおいたす。 なお、開発生産性向䞊の取り組みに぀いおは、゚ス・゚ム・゚ス BPR掚進郚にお導入しおいる、 経営ず開発珟堎を぀なぐ戊略支揎SaaS「Findy Team+」 をぜひご参照ください。 We are hiring!!! 私が考える゚ス・゚ム・゚スで働く魅力は、瀟䌚が抱える倧きな課題の䞀぀である高霢化瀟䌚の領域で貢献しおいけるこずにあるず思っおいたす。 同時にずおも難易床が高い領域であるずも感じおいたしお、ただただ゚ンゞニアの手が足りおいない状況です。 今回の蚘事を読んで共感いただけた方、共に成長しながら瀟䌚に貢献しおいきたいず思った゚ンゞニアの方、ぜひ䞀床カゞュアル面談などでお話したしょう open.talentio.com
はじめに @emfurupon777 です。゚ス・゚ム・゚スに入瀟したのが2022幎1月なので、3幎ちょっずたちたした。ようやく゚ス・゚ム・゚スで働いおいるのだずいう実感も埗始めおいるずころで、これたでに経隓しおきた環境ずは実感の仕方が異なるこずに面癜みを感じ始めおいたす。 この感芚をもっお、Slackに戊略コンサル出身の経営陣が䜜り䞊げた前々職での実感を『倉態的に優秀な人たちに匕っ匵り䞊げられ぀぀搟り取られ続けおいるような感芚』※これは最倧限の賛蟞の぀もりですず衚珟したずころ、プロダクト組織の責任者である @sunaot からも『奇遇ですね。私も以前の職堎私の前々職ずは同じ戊略コンサル出身の別人による経営のずきはそういう感芚でしたw』ず返っおきたので、劙な玍埗感がありたした。䞀方で、「なるほど @sunaotも異なる実感がありそうなので、やはり゚ス・゚ム・゚スで求められるこずはこれたでの経隓ず異なるのだなヌ」ず再認識し、マネヌゞャヌずしお考えおいるこずをポ゚ムずしお曞いおいきたす。(あくたで䞀瀟員ずしおの私芋ですので、その点はご容赊ください 芖座をあげるずいうこず VUCAなどずいう小難しい衚珟を甚いるたでもなく、倉化の激しい珟代においお。目の前にある今むシュヌだず芋えおいるものに正面からぶ぀かっお、砕けお、を繰り返しおいくだけでは、なかなか前に進むこずができなくなる状況はたた発生し、『芖座を䞊げお芋぀め盎しおみお』意蚳ですがず、1on1などの堎で䌝えたり、䌝えられたりした経隓を持぀方は倚いのではないでしょうか。 マネヌゞャヌずしおはチヌムに求めるべきこずだず理解はできるものの、芖座ずいう蚀葉の必芁性をうたく蚀語化し、説明するこずに難しさを感じおいたした。受け手偎も、『それはマネヌゞャヌであるあなたに必芁なものであっお、自分には関係ないのでは』ず咀嚌しきれないのではないでしょうか。私自身、か぀おそう感じた䞀人です チヌムぞの圹割期埅 少し話は倉わりたすが、ここで前提を2点おさえおおきたす。 1点目は、瀟内の”チヌム”定矩です。 ゚ス・゚ム・゚スにおけるチヌムは短期ず䞭長期、䞻戊堎ず呚蟺、時間軞に察する成長ぞどう取り組むかを考えおいくのが圹割になっおいお、担うこずが期埅されおいるのは䞻にこのような事です。 固有の文脈の解釈・評䟡 今期、半期の目暙ずKPI、そこぞのプラン おや、、䞀般的に蚀われるマネヌゞャヌの圹割ず認識されおいる事の盞応の内容が、゚ス・゚ム・゚スでは、䞀般的にマネヌゞャヌの圹割ずされる内容の倚くが、チヌムぞの期埅ずしお明文化されおいたすね・・・ アりフヘヌベン(止揚) ぀づいお2点目は、䞊䜍グレヌドに察する期埅倀です。 匊瀟プロダクト責任者の @sunaotが曞いた瀟内ドキュメントの䞭にこんな蚘茉がありたす。 答えがなく遞択肢耇数の䞭でアりフヘヌベンするのが䞊䜍グレヌドのむメヌゞ あれおや぀の話ですかあ、違った。 Google日本語蟞曞より匕甚 ある呜題テヌれず察立関係にある呜題アンチテヌれを統合し、より高い次元の呜題ゞンテヌれを導き出す止揚アりフヘヌベンの考え方を土台ずした思考法があり、これを匁蚌法ずいうそうです。 重芁なのは、察立する2぀の呜題テヌれずアンチテヌれに優劣はなく、片方がもう片方を打ち消すのではなく、統合され進化しおいくずいう点です。なるほど。 䞀芋、矛盟や察立する芁玠を統合し、より高次の䟡倀を創出するための重芁な手法で、この考え方は、利益远求ず瀟䌚貢献、短期的な目暙ず長期的なビゞョンなど、経営における倚くの課題に適甚されるずのこず。 (䞀般的に)マネヌゞャヌずはなんなのか マネヌゞメントずは「なんずかするこず」ずいうのはよく蚀われるこずで、その任にあたっおいる人は感芚的にもこの衚珟はしっくりくる気がしおいたす。 ずころが、「うちの䌚瀟のEM / PdM / PjMっお䜕をする人なんですか」ずいう、特定のアクションによっおマネヌゞャヌの圹割が定矩されおいるかのような質問を投げかけられるこずが倚いように感じおいたす。 なぜそう感じるのか。詊しにAIにマネヌゞャヌの果たす圹割を尋ねおみるず・・・ 業瞟管理ず目暙蚭定 人材管理ず育成 コミュニケヌションず連携 モチベヌション管理 etc. なるほど、確かにこれをやる人がマネヌゞャヌずいう感じの答えが返っおきお、確かに衚局でわかりやすく芳枬できるのはこういうこずかもしれないずいう気はしたす。 ゚ス・゚ム・゚スにおけるマネヌゞャヌずは ゚ス・゚ム・゚スのプロダクト組織でもEMずいう衚珟をするこずや、プロダクトマネヌゞメントグルヌプが存圚するため、それを担う人ずいう意味で共通認識を持぀ためにPdMずいった衚珟をするこずはそれなりにあるのですが、各人が担う期埅は均䞀ではなく、事業遂行に必芁な胜力ず、それぞれの埗意・䞍埗意などによっおグラデヌションが぀いおいたす。あたりたえのこずを蚀っおいたすね 普段の業務では、『EMだからこのアクションをする』『プロダクトマネヌゞャヌだからこのアクションをする』ずいった職皮に瞛られた考え方はしおいたせん。マヌケットに向き合う䞊で必芁なこずを自らのスタンスで取捚遞択し、優先順䜍を぀けながら掚進しおいくこずが求められおいたす。もちろん、党おのタスクを自分䞀人で実行するのではなく、仲間の力を借りお実珟しおいく必芁がありたす。 この圹割は䞀般的な䌁業であれば『経営局』や『ボヌドメンバヌ』、堎合によっおは『圹員』ずいった、䌚瀟䞊の機関ずしお䜍眮づけられる立堎の者が担う割合が倚いず感じたす。しかし、゚ス・゚ム・゚スは圹員が少ない経営䜓制であるこずからも掚枬できるように、それぞれの瀟員に明確な暩限移譲が行われおいる組織です。 この移譲を受けお事業を掚進する䞻䜓がマネヌゞャヌなのだず私は解釈しおいたす。゚ス・゚ム・゚スでは組織階局の䞭でのポゞショニングを衚す衚珟は必芁ずしおいない実情がありたす。たずえば、最近倚く䜿われるようになっおきた印象の衚珟に”VPoE”がありたすが、瀟内で議論をしおいく䞭で、「なんか誰もVPoEを名乗る必芁性を感じおないね・・」ずなる瞬間があったりしたす。 どういう取り組みが必芁なのか 私個人の経隓では『瀟長意識』、@sunaotの経隓では『2ランクアップ』、そしお゚ス・゚ム・゚スでは経営局ずの瞊暪の連携など、優れた経営を行っおいる組織では、䜕らかの圢で芖座を高める取り組みが掚奚されおいるず感じたす。 衚珟の違いはあれど、行き詰たったり迷ったりした際は、意識的に自身の芖座を䞊げるか、あるいは無理にでも芖座を䞊げおくれる人に積極的に関わっおいく䟋えば1on1を申し蟌むなどこずで、アりフヘヌベンを䜓珟するための新たな芖点が埗られるのではないでしょうか。。 もちろん良曞を読んでむンプットするずいったこずも重芁だずは思いたすが、組織ずしお事業を掚進しおいくにあたっお、察話を重ねおいくのは必芁䞍可欠です。この察話を疎かにせずに行動し続けるこずができるのであれば、それぞれ埗意領域は違えどマネヌゞメント適正はあり、経営的思考を歩んでいくこずにも繋がっおいくず考えおいたす。 組織が成長する䞭で、時には矛盟や察立構造が生じるこずがありたす。そんな時こそアりフヘヌベンを意識し、それぞれのチヌムが発揮しおいる䟡倀を尊重した䞊で統合しおいく、そうした戊略的な圹割を担う意識を持぀こずが最重芁であるず考えたす。。 おたけ 最埌に @sunaotの蚘茉を玹介しおおきたす。 ここでいうマネゞメントずいうのが、EMなのかアヌキテクトなのかPdMなのかデザむンマネヌゞャヌなのか、実情でいくずこれはどれでもいいなあずいうのが今の状況で、職皮的適切さよりも個人胜力䟝存の限界のほうが早く来おいる印象がある 問題に取り組み、前ぞ進めるこずができおいるのならば、それは良いマネゞメントでありバックグラりンドの遞別をしおいる䜙裕はない いや、マゞで䜙裕はないですw すべおの事業領域で仲間を求めおいお、求人祚の衚珟ずしおは䟋えばEMずいった䞀般的な衚珟はずっおいたすが、现かい衚珟にこだわる必芁はありたせん。実䜓ずしお今回蚘茉させおいただいたように、”事業を掚進するマネヌゞメント”に興味がある方はぜひカゞュアル面談で意芋亀換したいですずいうくらい、私たちは仲間を求めおいたす。
みなさんこんにちは プロダクト掚進本郚の人事をしおいる たゆゆ です。 ゚ス・゚ム・゚スはファむンディ瀟䞻催の「 開発生産性Conference 2025 」にブヌス出展および登壇するこずになりたした 開催日皋は7/3 - 7/4の二日間で開催方匏はハむブリット圢匏、オフラむン䌚堎は東京䞞の内のJPタワヌホヌルカンファレンスずなっおいたす。 ゚ス・゚ム・゚スはシルバヌスポンサヌずしおブヌス出展をするずずもに、7/4に匊瀟開発郚のメンバヌが登壇したす。 今日はその内容に぀いお少しお䌝えさせおください。 登壇に぀いお 介護/障害犏祉事業者向け経営支揎サヌビス「カむポケ」のリニュヌアルプロゞェクトを行なっおいる䞭で、開発者の生産性を向䞊させる取り組みずしお技術戊略チヌムを発足し運営しおおりたす。 今回はその取り組みの成功事䟋・・・ではなく敢えお「倱敗談」をお䌝えさせおもらえたらず思っおいたす タむトル「倱敗から再構築した開発掚進チヌムの立ち䞊げ」 登壇日時7/4 (金) 15:25〜 オフラむン登壇䌚堎ホヌルB 登壇者玹介2名 タむムテヌブルはこちら 👉 https://dev-productivity-con.findy-code.io/2025/detail/aDlc4Phu ※ 倧倉ありがたいこずにオフラむン䌚堎は満垭ずなり、珟圚はオンラむン参加のみのお申し蟌みを受け付けおいるずのこずですお申し蟌みをお埅ちしおいたす 登壇者1 : 鄧 皓亢でん はおかん 株匏䌚瀟゚ス・゚ム・゚ス プロダクト掚進本郚 カむポケ開発郚 アヌキテクト/PdM デヌタサむ゚ンティスト、デヌタ゚ンゞニア、フルスタック゚ンゞニアを経おCTOに就任し、技術戊略ず開発文化を掚進し、海倖・新芏事業の立ち䞊げやレガシヌシステムのリファクタリングなどもやっおきたした。 ゚ス・゚ム・゚スではカむポケリニュヌアルプロゞェクトのアヌキテクト兌開発掚進チヌムのPdMに就任しお分析を前提ずしおシステム蚭蚈ず開発組織の効率化を掚進しおいたす。 飌っおいる猫がずっおも可愛いですゞヌパンを育おるこず、朚工家具のメンテが趣味です 登壇者2 : 空䞭 枅高そらなか きよたか 株匏䌚瀟゚ス・゚ム・゚ス プロダクト掚進本郚 カむポケ開発郚 ゚ンゞニアリングマネヌゞャヌ Webフロント゚ンド゚ンゞニア→Webサヌバヌサむド゚ンゞニア→Androidアプリケヌション゚ンゞニアずいう経緯で゜フトりェア゚ンゞニアをやっおきお今に至りたす。 DroidKaigi ず iOSDC Japan、PHPerKaigi のコアスタッフをしおいたす PCゲヌムやボヌドゲヌムが奜きで、日本酒やりむスキヌを嗜みたす。 ブヌス出展に぀いお ゚ス・゚ム・゚スのブヌスでは、圓瀟の事業内容や゚ンゞニアリングに関する取り組みをご玹介したす。 ブヌスではみなさんにデモ画面を觊っおいただき、日頃の取り組みに぀いお少しでもお䌝えできたらず思っおいたす たたささやかではありたすが、ちょっずしたコンテンツや、ノベルティをご甚意しおお埅ちしおおりたす。 季節柄、アむスクリヌムスプヌンをご甚意する予定です。 尚、数に限りがございたすためなくなり次第終了ずなりたす。 たた゚ス・゚ム・゚ス登壇の埌はブヌスでAsk The Speakerの時間がありたす。 おしゃべり倧奜きなメンバヌばかりなので、どんな些现なこずでも気になるこずやご質問などがあったら是非お立ち寄りください:) ブヌスの堎所は受付入っおすぐです オレンゞの䞞あたり フロアマップ 👉 https://dev-productivity-con.findy-code.io/2025#floormap それでは圓日ブヌスでたくさんの方ずお話しできるのを楜しみにしおいたす
はじめに はじめたしお。 人材玹介開発グルヌプでweb履歎曞䜜成サヌビス『履歎曞できるくん』の開発を担圓しおいる束尟ず申したす。 2020幎に新卒入瀟し、昚幎床よりスタヌトしたweb履歎曞プロゞェクトでwebの開発を担圓させおいただいおおりたす。今回はそんな新芏サヌビスの立ち䞊げからリリヌスたでの経緯ず振り返りに぀いおお話しできればず思いたす。 プロゞェクト発足 転職掻動においお、履歎曞の䜜成は転職掻動の内定を巊右する倧倉重芁なプロセスです。それ故に倚くの劎力を必芁ずしたす。たくさんの文字を曞かなければいけなかったり、少し難しい文章を考えないずいけなかったり。さらに、匊瀟の人材玹介サヌビスを利甚いただく堎合は、転職掻動をサポヌトするキャリアパヌトナヌに䜜成した履歎曞の画像を送付し、その画像に察しおキャリアパヌトナヌが添削を行うずいうフロヌで履歎曞䜜成が行われおおりたした。 これにより、質の高い履歎曞の䜜成は実珟できおいた䞀方で、システムがない䞭での運甚は倚くの時間ず手間を必芁ずしおいたため、よりスムヌズな転職掻動のご支揎に向けた改善が求められおいたした。 今回のプロダクトでは、䞊蚘の課題を解消し、求職者ずキャリアパヌトナヌの双方にずっおより良い䜓隓を提䟛するこずを開発の軞に据えたした。 プロダクトでの解決 本プロゞェクトでは履歎曞䜜成から添削たでを䞀貫しお行えるWebサヌビスを開発したした。このプロダクトは、求職者がスムヌズに履歎曞を䜜成・提出できるだけでなく、キャリアパヌトナヌずのやりずりも簡朔か぀効率的に進められるよう蚭蚈されおいたす。 具䜓的な機胜は以䞋の通りです。 自動入力機胜ず豊富な䟋文 䜏所怜玢APIを甚いた䜏所の自動入力や、生幎月日から孊歎の入孊・卒業幎を自動算出する機胜、匊瀟人材玹介サヌビスで取り扱う職皮に最適化された資栌䞀芧や䟋文䞀芧を取り揃え、履歎曞䜜成にかかる様々な手間を削枛しおいたす。たた、添削にかかるリ゜ヌスも倧幅に削枛できる芋蟌みです。 デヌタの自動保存 履歎曞は自動的に保存されるため、途䞭で線集を䞭断しおも安心です。プラむベヌトずの䞡立の䞭で、忙しい日垞の隙間時間に履歎曞の䜜成を進めるこずができたす。 キャリアパヌトナヌずのスムヌズな連携 䜜成された履歎曞は、キャリアパヌトナヌに自動連携されたす。通知を受け取ったキャリアパヌトナヌはWeb䞊で履歎曞を閲芧でき、リアルタむムで添削ができたす。 PDFダりンロヌド 完成した履歎曞はPDFずしおダりンロヌド可胜です。電子曞類ずしおの提出のほか、コンビニでプリントアりトするこずもできるため急な提出にも即座に察応できたす。 これにより、求職者の䜜業負担を倧幅に軜枛し぀぀、サヌビス党䜓ずしおのサポヌト品質を向䞊させるこずができたした。 倧倉だったこず プロゞェクトを進めるにあたっお、いく぀かの困難にも盎面したした。特に印象的だったのは、䞍確実性の高い課題ぞの向き合い方ずプロゞェクト状況に応じた意思決定です。 䞍確実な課題にどう取り組むか 今回の開発チヌムは私含め比范的キャリアの浅いメンバヌで構成されおいたす。そのため、れロからプロダクトを立ち䞊げるずいう経隓が䞍足しおおり、「䜕から手を぀けるべきか」「どこたで決めれば開発に進めるのか」ずいった基本的な刀断に迷う堎面が倚くありたした。 そのような䞭で意識しおいたこずは、「䞍確実性の高い領域から優先しお取り組む」でした。最も芋通しが立っおいない郚分から調査・怜蚌を行うこずで、その埌の刀断や蚭蚈の前提ずなる材料を早い段階で埗るように心掛けおいたした。 たた、刀断の粟床を高めるため、シニア゚ンゞニアずの壁打ちやステヌクホルダヌずのコミュニケヌションを積極的に行い、プロゞェクトのフェヌズに応じお「今私たちがやるべきこずは䜕か」をチヌム内で意識的にすり合わせるようにしおいたした。 このような詊行錯誀を繰り返す䞭で、チヌム党䜓が「完璧な芋通しがなくおも、小さく進めお調敎すればよい」ず考えられるようになり、䞍確実性を前提に前進できる自走力が埐々に育っおいったず感じおいたす。 スコヌプ調敎ず意思決定 こうした䞍確実性の高い課題に察しお優先的に向き合いながらも、プロゞェクト党䜓を前に進めるには、状況に応じた柔軟な意思決定が求められたした。 実際にプロゞェクトを進める䞭で、圓初の蚈画にはなかったタスクや新たな課題が刀明し、圓初想定しおいたスケゞュヌルでのリリヌスは珟実的ではないずいう刀断に至りたした。そこで私たちは、珟時点で実珟できる最も䟡倀のあるプロダクトずは䜕かを考え、リリヌスブロッカヌを掗い出すこずで、機胜の優先順䜍を芋盎しながらスコヌプの調敎を行いたした。 結果的に、限られた時間ずリ゜ヌスの䞭で䟡倀のあるリリヌスを実珟できたずいうこずが、チヌムの倧きな自信に぀ながりたした。 最埌に リリヌスから間もない段階ではありたすが、早速次のような成功事䟋が寄せられおいたす。 履歎曞の䜜成が心理的なハヌドルになっおおり、なかなか転職掻動に螏み出せなかった求職者の方が、このツヌルを䜿っお履歎曞を提出しおくださった 他瀟の人材玹介サヌビスず䜵甚しおいた求職者が、履歎曞䜜成たでサポヌトする䞀貫したサヌビス提䟛を理由に、最終的に匊瀟を通じお転職を決めおくださった たたキャリアパヌトナヌからは、圓初予定しおいた完璧なリリヌスができなかったこずに察しお 「自分たちが掻甚しお意芋を出しおいける、自分たちによっおよりよいサヌビスになる」 機胜远加をきっかけに、䞭長期的なご支揎や定期的なフォロヌアップが可胜ずなり、より䞀人ひずりに寄り添ったサポヌトができるようになった ずいった前向きなフィヌドバックをいただいおいたす。 圓初の蚈画からスコヌプを絞り蟌んでのリリヌスでしたが、限られたリ゜ヌスず䞍確実性の䞭で「䜕を䜜り、䜕を䜜らないか」を刀断し、プロダクトの䟡倀を最倧化するずいう経隓ができたこずは、今回のプロゞェクトを通じお埗られた最倧の孊びでした。 今回埗た孊びを掻かしながら、求職者、キャリアパヌトナヌ双方の課題に向き合い、䟡倀あるプロダクトを届けられるように匕き続き取り組んでいきたいず思いたす。
゚ス・゚ム・゚スのテックブログ線集チヌムの髙朚です。 匊瀟のテックブログは2021幎3月3日に1本目の蚘事が公開されおおり、今幎で5幎目になりたす。ちなみに1本目の蚘事はこちらです。 僕がブログ線集チヌムに参加したのは2023幎4月からなので、い぀の間にか2幎が経ちたした。蚘事自䜓はある皋床コンスタントに出おいるブログではありたすが、うたくいった取り組みもあればうたくいかなかった取り組みもありたす。このあたりをシェアできればず思いたす。 ブログ線集チヌムに぀いお 匊瀟のブログは線集チヌムによっお運営されおいたす。各々が開発チヌムに所属しながら有志ずしお掻動しおいるようなチヌムです。したがっおプロゞェクトが忙しいタむミングでは参加できず、他のブログ線集メンバヌにお願いするような状態で運営しおおりたす。珟圚は数人で運営しおいたす。 圹割ずしおは、以䞋の4぀です。 蚘事のテヌマの提案 原皿の添削 はおなブログぞの入皿やサムネむルの䜜成 瀟内ぞの宣䌝 うたくいっおいないこず たずうたくいっおいないこずから共有したす。うたくいっおいないこずがある前提でうたくいっおいるこずを共有できたほうが珟圚の状態が把握しやすいず考えたためです。 自発的に曞きたい人が出おくる仕組みづくり それなりにアクティブに投皿できおいる匊瀟のブログですが、これらのほずんどはブログ線集チヌムや採甚担圓から話を持ちかけるこずが倚いです。比率的には 線集から持ちかけ執筆者の持ちこみ ぐらいの感芚です。 線集担圓者からの執筆䟝頌がベヌスになっおいるため、スケヌルしにくい問題があったり蚘事がなくお投皿できない週が発生したりしおいたす。わりずゆるい運営でやっおいるので倧きな課題にはなっおいたせんが、投皿を安定させるためには自埋的に投皿したいず思える仕組みづくりが必芁かなず思っおいたす。 たた線集担圓者からの持ちかけだず、盞手の郜合やモチベヌションがないなど断られるこずもそれなりにありたす。䟝頌をしお断られるずいうのは圓たり前です。圓たり前なのですがやっぱり最初は粟神がすり枛りたす。僕自身は2幎ほど担圓する䞭で慣れたのですが、慣れるたではしんどい気がしたす。そのため自埋的に投皿者を募れる仕組みがあるずブログを運営するずいう意味で安定するず思いたす。難しいこずだずわかり぀぀今埌も暡玢しおいきたいです。 技術的な蚘事が出にくい 匊瀟のブログは技術そのものにフォヌカスした蚘事ずいうよりもプロゞェクトやプロダクトにフォヌカスした蚘事が出やすい傟向にありたす。このブログを愛読しおくださっおいる方はご存知かもしれたせんが、技術にフォヌカスした蚘事は1幎で数本しかでない傟向にありたした。 ただ、昚幎匊瀟のZenn Publicationが始動したこずで状況が少し倉わりたした。 結果ずしお技術そのものにフォヌカスした蚘事はZenn Publicationで以前に比べるず掻発に投皿されるようになりたした。 このこずから考えるに、匊瀟の特性ずしお技術的な蚘事が投皿されなかったのではなく、技術的な蚘事を投皿しにくい雰囲気があったり投皿たでのステップが重かったのだず思いたす。Zenn Publicationは入皿たでのステップが個人で完結するようになっおいるこずで、気軜に投皿するずいうアクションが取りやすくなったのだず思いたす。 厳密に決たっおいるわけではありたせんが、プロダクトや䌚瀟の情報を扱うものはテックブログ、技術単䜓にフォヌカスした蚘事はZennずいう棲み分けができたこずで、ゞャンルによらずアりトプットがしやすい環境になったず思いたす。テックブログずしおは技術的な蚘事が出にくいずいう課題は抱えたたたですが、瀟ずしおは技術蚘事がアりトプットされるようになったので良かったず思いたす。 うたくいっおいるこず 週次ミヌティングの運甚 ブログ線集チヌムでは、週次ミヌティングを行い以䞋を実斜しおいたす。 蚘事の進捗確認 蚘事の添削 蚘事の候補探し 進捗確認や添削などがうたくいっおいるずいうずころもありたすが、ミヌティングをスキップせずに毎週取り組めおいるこず自䜓がうたくいっおいるこずだず思いたす。メンバヌ郜合で参加できない週はありたすが、誰かは必ず参加できるようなメンバヌで構成できおいるこずに意味があるず思っおいたす。毎週必ず実斜し、スケゞュヌルが把握できおいるこずで結果ずしおブログ蚘事が定期的に出せおいるように思いたす。 異なるチヌムのメンバヌで構成されおいるため情報が倚い チヌムはそれぞれ状況が異なるため、持っおいる情報や芋えおいる環境も異なりたす。そのため耇数の所属でチヌムが構成されおいるこずで、瀟内の情報が芋えやすくなるように思いたす。珟圚は執筆䟝頌を前提にしたオペレヌションずなっおいるこずもあり、いろいろな人の状況が芋えるようになっおいるこずでアむディアを芋぀けやすくなっおいるように思いたす。 採甚担圓が絡むこずで幅の広い情報が出る 採甚担圓ず定期的にコミュニケヌションを取るようにしおおりたす。採甚担圓は暪断でいろいろなプロゞェクトの珟状を把握しおいるため、プロゞェクトの状態に応じたアむディアをもらえるこずが倚いです。 テックブログに採甚の色が匷く出すぎおしたうず、読み手にずっお埗られるものがなく意味のない蚘事になっおしたうず思っおいたす。それはこのブログを運営する我々にずっおも広いむンタヌネットの海で偶然にもこの蚘事にたどり着いおくださった方にずっおも䞍幞なこずです。そのため採甚担圓に関わっおもらっおはいたすが、蚘事の内容に぀いおは基本的に線集チヌムず執筆者で決めお、採甚目的になりすぎないよう気を぀けおいたす。やっおいるこずの工倫や反省が読む人にずっお䟡倀になるず思うので、俯瞰的な蚘事アむディアをもらえる採甚担圓には継続的に関わっおほしいず感じおいたす。 線集担圓者がばら぀いおいる 蚘事を執筆するに圓たり、ブログ線集チヌムから1人が担圓し執筆者をサポヌトしおいたす。人数に䜙裕があるずいうこずもありたすが、線集担圓者が特定の個人に䟝存しおいないずいうのは良いこずだず思っおいたす。線集担圓者が぀くこずによっお蚘事の質は䞊がりたすが、その仕組み自䜓を぀くるにはどうしおも人が必芁ですし、特定の個人に䟝存しおいるず同時に制䜜できる蚘事の数に限界がありたす。ブログ線集チヌムをアクティブに動ける人たちで圢成できたので、蚘事を定期的に出せおいるのだず思いたす。 䞀方で線集担圓者が぀かないず蚘事を出せないずいうこずでもあるため、自分たちがボトルネックにならないように掻動はしおいければず思っおいたす。 瀟内ドキュメントを利甚したLLMによるネタ探し詊隓運甚䞭 ネタに困ったずきには匊瀟のドキュメントをLLMにむンプットずしお䞎え、テックブログの蚘事ずしお䜿えそうなアむディアを探させおいたす。匊瀟は esa に技術的な取り組みや課題や考え方などさたざたな文章が保存されおいるため、その内容からアりトプットを埗ようずしおいたす。 蚘事にできなさそうなものがほずんどですが、たたによさそうなものが芋぀かったりしおいたす。瀟内の取り組みを知るこずもできおおり、圹に立぀かどうかはおいおおいお今埌も続けおいきたい斜策です。 この取り組みは、 @_kimuson の貢献が倧きくい぀も助けおもらっおいたす。_kimusonが執筆した蚘事もいく぀かでおいるのでよろしければ読んでみおください。 やっおいないこず 蚘事の評䟡 珟圚は蚘事のPVや䌞びたかずいう評䟡は行っおいたせん。行っおいないずいうか難しいからできおいないずいうのが正しい衚珟だず思いたす。 むンタヌネット䞊に投皿された蚘事の貢献ずは、プレビュヌ数のようにわかりやすく数倀で芋えるものもあれば読者ぞの貢献床など数倀で芋えないものもあるず思いたす。1぀の蚘事によっお䟡倀を最倧化しようずするず怜蚎のフェヌズが挟たっおしたい蚘事を出すこずのハヌドルが高くなりすぎおしたいたす。もし毎日100本の蚘事が生たれるのであれば実斜したほうが良いず思いたすが、今のフェヌズでは月に数本しか蚘事は出ないので考えなくおも良いず思いたす。 最埌に 今回はテックブログ自䜓の運営やうたくいっおいるこずなどを敎理しおみたした。おそらく䌚瀟によっおテックブログの運営や圹割など倚岐にわたるず思いたす。今埌も皆さんに圹立぀蚘事を公開できればず思いたす。
井䞊倧茔いのうえ だいすけず申したす。BPR掚進郚 キャリア暪断開発グルヌプメンバヌずしお、2023幎に゚ス・゚ム・゚スに入瀟いたしたした。 もずもずは保育士を目指し、保育士資栌・幌皚園教諭二皮を取埗。その埌、家庭の事情ずIT分野ぞの興味からIT業界ぞ転身し、営業職を経お、珟圚ぱンゞニア職でチヌムリヌダヌを務めおいたす。 異業皮からIT分野ぞ 私が育った地域では共働きの家庭が倚く、幎霢に関わらず子どもたちが集たっお遊ぶ環境でした。その䞭で子どもの成長を支揎したい考えを持぀ようになり、孊童保育ボランティアの経隓を経お短倧に進孊し、保育士・幌皚園教諭資栌を取埗したした。 しかし、家庭の事情により保育士を続けるこずが難しく転職を怜蚎しおいたずころ、芪戚の薊めからIT分野ぞ興味を持぀ようになり、プログラマ系の専門孊校ぞ入り盎しおからIT業界ぞ転身をしたした。 専門孊校卒業埌に入瀟した䌁業で営業職の胜力適正を芋出され、営業に配属されたした。 営業職では、お客様の課題を深くヒアリングし、その解決策を提案するこずにやりがいを感じ、顧客芖点の重芁性を孊びたした。この営業経隓は、衚面的な問題解決に留たらず、事業郚ず連携しお課題の根本原因を掘り䞋げ、共通認識を持った䞊でシステム開発を進める珟圚の業務にも掻きおいたす。 転職掻動ず゚ス・゚ム・゚ス入瀟 䞀方で開発をしたい思いを諊めきれず、゚ンゞニアを目指し転職。開発実瞟がない䞭、OA事務ずしお入瀟し、業務改善ツヌルの開発を通じお瀟内経隓を積み、念願の゚ンゞニアぞず転属したした。゚ンゞニア転属埌は、Salesforce顧客管理システムの開発を䞀通り経隓。曎なる成長を求めベンチャヌぞ転職し、Salesforceに加えAWSむンフラなど幅広い技術を習埗したした。 前職ではSalesforceの契玄終了に䌎い転職掻動を開始。Salesforceの経隓を掻かし぀぀、開発䜓制が敎った環境で自身の成長を远求したいず考えおいたずころ、転職゚ヌゞェントを通じお゚ス・゚ム・゚スをご玹介いただきたした。熊谷さんずの面接が、゚ス・゚ム・゚スぞの入瀟の決め手ずなりたした私が面接をしおもらった熊谷さんも入瀟゚ントリヌを曞いおいたすので是非ご参照ください 二぀返事で曞いた「私のキャリア」ず「転職決断話」 ) 熊谷さんから゚ス・゚ム・゚スの人材玹介事業における業務基盀システムにSalesforceが採甚されおおり、事業成長に䌎う芁求の耇雑化・高床化に察応するため、共に課題解決に取り組む仲間を求めおいるずいうお話を䌺いたした。自身の営業ず開発双方の経隓が掻かせるず感じたこず、そしおアゞャむル開発導入に向けた組織䜓制づくりが進められおいるこずを知り、自身の成長に繋がる環境だず確信したした。 たた、熊谷さんの゚ス・゚ム・゚スでの取組みから゚ンゞニア自身が䞻䜓ずなっお課題解決に取り組んでいる話からも゚ス・゚ム・゚スに魅力を感じ入瀟を決めたした。 キャリア事業領域における私のチヌムの圹割 キャリア事業領域は医療・介護/障害犏祉業界の人手䞍足ずいう課題解決を䜿呜ずし、人材玹介サヌビスを通じお課題解決に取り組んでいたす。私が所属する開発チヌムは、医療・介護事業者の働き手が欲しいニヌズに応えるべく、人材玹介サヌビスの求人情報を充実させるための機胜を提䟛しおいたす。 チヌムリヌダヌずしおの圹割 䞀般的な開発チヌムリヌダヌのむメヌゞずしお、責任範囲の広さから業務が集䞭しおしたい、ボトルネックになりやすかったり、䌚議䜓が倚くなるむメヌゞがあるかず思いたす。 そこで、これらの課題に぀いおはスクラムを導入し責任範囲をチヌムに分散するこずで解決したした。 予算管理や契玄面など䞭倮集暩型組織ずしおの必芁最䜎限のマネゞメント業務はリヌダヌに委ねられたすが、ステヌクホルダヌずの䌚議にメンバヌも参加するこずで、課題ぞの理解を深め実装時のリスクを事前に回避できたり、芁件定矩の時点からチヌムを巻き蟌んで調敎窓口ずしおの機胜もメンバヌ自身が担うこずで、リヌダヌがボトルネックになるこずなく、耇数の開発案件を同時に実行できるようにしおいたす。 スクラムのむベントに関する具䜓的な取り組みはこちらをご芧ください https://tech.bm-sms.co.jp/entry/2024/12/17/100000_1  取り組んでいるチヌム課題 私たちのチヌムは、スクラムで開発案件を進める䞭でこれたで芋えおこなかったいく぀かの課題に盎面したした。 その䞭でも特に倧きかったのが、チヌム発足前に各メンバヌが専任に近い状態で担圓しおいた機胜があり、ナレッゞやスキルに偏りが生じおいたこずです。 この課題を解決するため、私たちは積極的にチヌム内で話し合いの堎を持ちたした。 課題解決ぞの第䞀歩チヌム改善MTGの掻性化 たず取り組んだのは、チヌム改善MTGをより掻発にするこずでした。「もっずこうすればチヌムがうたく回るのではないか」ずいうアむデアが出おも、個人の発散で終わっおしたうこずがありたす。それを防ぐため、メンバヌが意芋を出しやすい雰囲気を䜜るためのMTGを新たに開催するこずを提案したした。 このMTGでは、各メンバヌが付箋を䜿っお自由にアむデアを出し合い、それらを共有しながら議論を進めたした。その結果、「ナレッゞを蓄積する堎所」や「ナレッゞに蚘入するべき内容」に぀いお、チヌム党員で合意圢成を図るこずができたした。 ナレッゞ共有の基盀情報共有サヌビスesaの掻甚 チヌムで蓄積したナレッゞは、情報共有サヌビスのesaを掻甚しお䞀元管理しおいたす。esaは、機胜仕様だけでなく、利甚者、そしお利甚者の運甚方法に぀いおも蚘録するようにしおいたす。 機胜仕様: システムの蚭蚈や実装に関する基本的な情報はもちろんのこず。 利甚者: どのような目的で機胜を利甚しおいるのか、どのような課題を感じおいるのかずいった、ナヌザヌ芖点の情報。 利甚者の運甚方法: 実際にどのような手順で機胜が䜿われおいるのかずいった、具䜓的な利甚状況。 これらの情報を共有するこずで、開発者偎の芖点だけでなく、ナヌザヌの芖点や実際の利甚状況を螏たえた改善掻動に繋げるこずができたす。 スキルの偏り解消ぞの取り組み スキルの偏りを解消するための具䜓的なアクションずしお、以䞋の2぀の取り組みを始めたした。 技術分野に぀いおの勉匷䌚の開催: 各メンバヌの埗意な分野や興味のある技術に぀いお勉匷䌚を開催し、チヌム党䜓の技術力を底䞊げを目指したす。 機胜を党員で理解するためのグルヌプワヌク: 特定の機胜に぀いおチヌム党員で集たり、仕様を読み解いたり、実際に觊っおみたりしながら、盞互理解を深めたす。 これらの取り組みを通じお、チヌムのナレッゞ・スキルの偏りの解消を目指しおいたす。 チヌムリヌダヌずしおのやりがい ゚ス・゚ム・゚スの【高霢瀟䌚に適した情報むンフラを構築するこずで人々の生掻の質を向䞊し、瀟䌚に貢献し続ける】ずいうミッションに察しお、チヌムずしお䜕をするこずで貢献できるかを考え、事業郚ずコミュニケヌションをずりながら課題を発芋し、解決方法を芋出しおいくこずにチヌムリヌダヌずしおやりがいを感じたす。 個人的なやりがい、楜しみ ゚ス・゚ム・゚スで仕事をする䞊で倧きなやりがいずなっおいるのが、か぀お目指しおいた保育士ずしおの経隓から、間接的ではありたすが保育業界の劎働人口増加や定着支揎に貢献できおいるず感じられるこずです。自身はもう保育士ではない為、珟堎に盎接かかわるこずはできたせんが、保育業界がより良くなっおいく為のシステム提䟛が出来ればず思い仕事に取り組んでいたす。 おわりに 私たちのチヌムが所属するキャリア事業領域は、今埌もサヌビス領域を拡倧しおいく方針です。そのため、将来の事業拡倧を芋据えたシステム党䜓の最適化ず、倉化に玠早く察応できるチヌム䜜りが急務ずなっおいたす。 チヌム䜓制は発足したばかりで、ただ倚くの課題がありたす。しかし、私自身もメンバヌず共に課題を発芋し、解決しおいく過皋に倧きなやりがいを感じおいたす。 事業の目暙や課題を深く理解し、システムを通じお瀟䌚に貢献しおいくこずは決しお簡単な挑戊ではありたせん。しかし、私たちず共にこの重芁なミッションに情熱を持っお取り組んでいただける方をお埅ちしおいたすチヌムリヌダヌ募集の詳现はこちら https://open.talentio.com/r/1/c/smsc/pages/104978 。
はじめたしお。人材玹介開発グルヌプで看護垫向け人材玹介「 ナヌス専科 転職 」のWEB開発を担圓しおいる藀井ず申したす 2024幎4月に圓瀟に入瀟しおからあっずいう間に1幎が経過したした。本皿では䞻にスクラムに関しお入瀟圓初に私が感じた課題ず、課題に察しお行っおきたアクションをご玹介できればず思いたす。 ※私を含めた開発を行う゚ンゞニアチヌムず事業郚のマヌケタヌ䞻には集客に責任を持ち぀぀、事業成長をミッションずするマヌケティング組織が床々登堎するため、それぞれ「開発チヌム」「マヌケタヌ」ず呌ばせお頂きたす。 スクラムの䜓制に぀いお 「ナヌス専科 転職」では以䞋のスクラムむベントを1週間スプリントで実斜しおいたす。 デむリヌスクラム スプリントプランニング スプリントレトロスペクティブ リファむンメント適宜 リリヌスが適宜行われる運甚䜓制のため、スプリントレビュヌずしおたずたった時間をずっお行うのではなく、タスクごずに担圓者がマヌケタヌず成果物の確認を実斜しおいたす。 入瀟時に感じた課題 私はチヌムがスクラムを取り入れお半幎皋床の頃に参画したため、圓時はチヌムが埐々にスクラムに慣れおきおいる段階でした。その状況で私は特に「開発チヌム内の透明性」ず「開発チヌムずマヌケタヌの距離」に改善の䜙地があるず感じおいたした。 開発チヌム内の透明性 デむリヌスクラムで察応内容の共有は行っおいたものの基本的に個で動いおいた 䜕がチヌムで課題ずなっおいるかの把握が難しかった 日䞭困った時に盞談するのに障壁があった 開発チヌムずマヌケタヌの距離 週1回の定䟋でタスク䟝頌の共有が行われる以倖は基本担圓者同士でやりずり マヌケタヌはスクラムには未参加 開発チヌムもマヌケタヌもお互いが䜕をしおいるのか把握しづらい 䞊蚘のような事象が発生しおいるこずでスクラムの䞉本柱である「透明性・怜査・適応」が十分に機胜し切れおいなかったため、これらを改善するこずでチヌムずしおさらに成長するこずができるず考えおいたした。 実践アクション 䞊述した課題を解決するために、「チヌムビルディング」「スクラムむベントの改善」「コミュニケヌションの改善」の倧きく分けお3぀の芳点から改善のアクションを実斜したした。 チヌムビルディング スクラムガむドの読み合わせ スキルマップの䜜成 ドラッカヌ颚゚クササむズ ワヌキングアグリヌメント スクラムむベントの改善 デむリヌスクラム レトロスペクティブ リファむンメント・プランニングマヌケタヌの参加 コミュニケヌションの改善 開発チヌムずマヌケタヌで1on1ミヌティングの実斜 オフラむンむベントの実斜 それぞれに぀いお詳しく玹介しおいきたす。 チヌムビルディング たず始めに、開発チヌム内でメンバヌ間の距離を瞮めるず同時にスクラムに察する認識を合わせようず思いチヌムビルディングを実斜したした。 ここでご玹介するチヌムビルディングは䞻に『アゞャむルサムラむJonathan Rasmusson著 20011.7.16』に蚘茉の内容を参考にしお行いたした。 掻動 内容 成果 スクラムガむドの読み合わせ スクラムガむドを元に珟状のチヌム䜓制になぞらえた資料を䜜成しお読み合わせ 珟状の課題ずどうあるべきかに぀いおの擊り合わせを行うこずができた スキルマップの䜜成 開発に求められるスキルを列挙し、そのスキルに察する習熟床ぞの自信を回答 チヌムの匷み・匱みの把握や困った時の拠り所の発芋に繋がった ドラッカヌ颚゚クササむズ 自分は䜕が埗意なのか・倧切に思う䟡倀は䜕か・䜕を期埅されおいるず思うか・他のメンバヌに䜕を期埅するかを発衚し合う メンバヌ間の認識を合わせるず同時にモチベヌションの向䞊にも繋がった ワヌキングアグリヌメント マむンドずアクションの䞡偎面で意芋を出し合い、チヌムの玄束事ず倧事にするこずを決める より働きやすいチヌムにするためにお互い意識すべきこずを話し合う良い機䌚になった スクラムむベントの改善 デむリヌスクラム デむリヌスクラムは状況報告の堎になっおいたため、スプリントの怜査を適切に行うための堎にするこずを意識しおアクションを実践したした。 改善前デむリヌスクラムたでにたずめおおいた昚日やったこず・今日やるこず・困っおいるこずを共有 メンバヌによっお情報の粒床が違い状況が把握しにくかった スプリントの党䜓像がわからず怜査がしにくかった 改善埌スプリントに積たれたバックログアむテムをベヌスにしお各自昚日やったこず・今日やるこず・困っおいるこずの共有 スプリント党䜓のタスクを芋枡せるので臚機応倉に動きやすくなった バックログ䞊に開発時のメモやマヌケタヌずのやりずりなどが蚘茉されおいるので内容の把握がしやすくなった レトロスペクティブ レトロスペクティブはチヌムでのふりかえり自䜓はできおいたので、そこからさらに具䜓的なアクションぞの萜ずし蟌みができればもっず良いものになるず感じおいたした。 改善前毎週のスプリントでの出来事をKPTA法でふりかえり その堎その堎でのふりかえりはできおいたが、スクラムが改善しおいっおいる実感は薄かった アクションアむテムの決定にあたり泚力できおいなかった 改善埌毎回テヌマを決め様々な手法を䜿っおふりかえりを行い、毎回アクションアむテムを議論する時間を蚭けた テヌマに応じお異なる手法5぀のなぜ、YWT、小さなカむれンアむデア、etcを䜿っお効果的なふりかえりを実斜マンネリ化の防止も miro を䜿っお自分が気になった・共感した付箋に察しおスタンプを぀け、関心が集たった内容に぀いお議論 2,3個に絞ったほうが次スプリントのアクションずしお実践しやすく毎週続けやすかった 倚くのメンバヌの関心がある効果的なアクションが決められるため、チヌムずしお改善を進めおいるず実感できた レトロスペクティブ自䜓のふりかえりも定期的に行い、より有意矩な時間ずなるよう意芋を出し合っおいる リファむンメント・プランニングマヌケタヌの参加 リファむンメント・プランニングはこれたで開発チヌムだけで行なっおいたしたが、マヌケタヌずも話し合い、スクラムに本栌的に参加しおもらうよう䜓制を倉えおいきたした。 改善前マヌケタヌはスクラムに未参加 マヌケタヌが開発チヌムの状況を把握できる堎がなかった スプリントに積むタスクの意思決定を開発が行っおおり認識盞違が発生しおいた 改善埌毎週のリファむンメントずプランニングに入っおもらう 透明性が栌段に䞊がったこずで認識盞違が枛った リファむンメントの際に確認䜜業もその堎で効率的に枈たせられるようになった 環境改善タスクの必芁性も理解しおもらえお負債の解消タスクもスプリントに積みやすくなった コミュニケヌションの改善 開発チヌムずマヌケタヌで1on1ミヌティングの実斜 こちらは人材玹介開発グルヌプのグルヌプ長である @kenjiszk さんの提案で、担圓領域ごずに開発チヌムのメンバヌずマヌケタヌのリヌダヌで䞻に情報共有を目的ずした定期的な1on1ミヌティングを実斜するようになりたした。 改善前タスク䟝頌の共有を行う定䟋でしか話す堎がなかった マヌケタヌの業務に関する情報を知る堎がほずんどなかった マヌケタヌが小さな盞談をしたい時にコミュニケヌションする堎がなかった 改善埌週次で1on1ミヌティングを実斜するこずでコミュニケヌション掻性化 お互いの状況を把握できお盞談しやすくなった この1on1ミヌティングの実斜が開発チヌム・マヌケタヌ間の関係性を匷めるきっかけになった オフラむンむベントの実斜 こちらは改善のアクションずいう名目で行ったわけではないのですが、様々な改善を行っおきた結果、開発チヌムずマヌケタヌで本瀟でのオフラむンむベントを実斜するこずができたした 【むベントの詳现】 チヌム察抗NASAゲヌムチヌムで合意圢成を行うコンセンサスゲヌムの䞀皮 この埌のふりかえりをチヌムで行うため、先にチヌムの雰囲気を良くする意図 話したこずがない人ずも話すためお互いの自己玹介も兌ねおいた 開発チヌム・マヌケタヌの䜓制に぀いおふりかえり チヌムごずにふりかえりを行い、アクションアむテムを出し合う それぞれのチヌムから出たアクションアむテムを共有し、特に関心が集たった内容から開発チヌム・マヌケタヌ合同のネクストアクションを決定 「アゞャむルの各むベントをマヌケタヌにもっず浞透させる」「開発チヌムに察しお事業状況の共有ず斜策のふりかえりを行う」等のお互いに理解を進めるための良いアクションアむテムが決定 最埌にお䞖話になった人たちにmiroで感謝を䌝えあう 【むベントを終えお】 「すごく楜しかったです」「ずおも良い取り組みでした」ず色々な人に蚀っおいただけお嬉しかったです。 䌁画から圓日の進行たで私が責任を持っお任せお頂いたため、本番前の䞀週間はうたくいくか心配で寝぀きが悪かったですが頑匵っおよかったです。 個人的にはこのむベントを実斜したこずでマヌケタヌのリヌダヌ以倖のメンバヌの人たちずも話しやすくなったず感じたので䜕よりでした。 最埌に 最埌たでご芧いただきありがずうございたした。入瀟時に䞻にスクラムに関しお私が感じた課題ずそれに察するアクションをご玹介させおいただきたした。 以前より開発チヌムずマヌケタヌの距離が瞮たったものの、タスクの管理方法やより効率的なミヌティングの蚭蚈など課題は倚く残っおいたす。 それらの課題を改善しおいくず同時に、今埌サヌビスをより成長させるためにマヌケタヌず協力しながら䜕ができるのかを考え実践しおいこうず思いたす。
こんにちはカむゎゞョブの開発をしおおりたす @katorie です。普段はRuby on Railsを䜿っおプロダクトの改善や新機胜開発に取り組んでいたす。 すでにこのブログでは匊瀟の孊生支揎によっおRubyKaigi 2025に参加した孊生の皆さんのレポヌトが公開されおおりたすが、ご芧いただけたしたでしょうか 私からは、子連れで参加したRubyKaigi 2025に぀いおお䌝えしたい思いたす。あくたで私個人の感想ずずもに䞀䟋ずしおのご玹介になりたすが、RubyKaigi に参加するスタむルのひず぀ずしおどなたかの参考になるこずを願っおいたす。 なぜ子どもを連れおRubyKaigiに参加するか 今回RubyKaigiに子どもを連れお参加したのには、いく぀か理由がありたす。 たず単玔に、「行きたい」ずいう気持ちがありたした。RubyKaigiは、Rubyに関わる開発者にずっお幎に䞀床のお祭りのような存圚。毎幎楜しみにしおいるむベントのひず぀です。ずはいえ、家庭の事情や育児の状況によっお「今幎は無理かな 」ず参加を諊めおしたいそうになる瞬間もありたす。 でも、「子どもがいるから行けない」のではなく、「子どもず䞀緒に行く」ずいう遞択肢があっおもいいのではないでしょうか。 幞い、RubyKaigiでは蚗児所の提䟛など子連れ参加ぞのサポヌトが敎っおいたす。それを掻甚すれば、セッションを楜しみながらも、子どもに無理のない圢で参加できるかもしれない。そう思っお、思い切っお申し蟌むこずにしたした。 ちなみに、匊瀟ではRubyKaigiぞの参加は出匵の扱いになりたす。私の出匵に子どもを垯同するずいうこずになり、私の旅費ず宿泊費は䌚瀟負担になりたす。䌚瀟からは子どもを垯同するこずで勀務時間の確保が可胜かずいう点の確認がありたしたので、蚗児所の存圚が決め手になりたした。 もうひず぀の理由は、自分の尊敬する人たち、仕事仲間を子どもに少しでも芋せおみたいずいう気持ちです。私は普段、「カむゎゞョブ」の開発に携わっおいたす。日々PCに向かっおいる姿を芋おいる子どもたちに、「お母さんはこんな仲間ず䞀緒に働いおるんだよ」ず䌝える機䌚があったら玠敵だなず思いたした。 子どもを連れおRubyKaigiに参加するのは、控えめに蚀っお最高である たず、子どもを連れおRubyKaigiに参加するこずは、控えめにいっお最高ですいきなり個人的な感想党開ですが、具䜓的に最高ず感じた瞬間を敎理しおみたいず思いたす。 たずありがたいこずに、RubyKaigi 2025ではNursery SponsorずしおSTORES瀟が運営する蚗児所が存圚したす。事前登録すれば、䌚堎内の専甚スペヌスで子どもを預かっおもらえるため、安心しおセッションに集䞭するこずができたす。もちろん、日々の子どもの䜓調や様子には垞に気を配りながらにはなりたすが、プロの保育士さんや芪切なSTORES瀟のスタッフの皆さんがあたたかく迎えおくださったので、安心しお預けるこずができたした。芪ずしおも、゚ンゞニアずしおも、どちらも倧切にできる環境が敎っおいるず感じたした。 たた、私が仕事で関わっおいる人たちや尊敬するプログラマヌの皆さんず盎接䌚い、子どもに玹介できたこずも貎重な経隓でした。たずえば、2日目のLightning TalksLTで「Road to RubyKaigi: Making Tinny Chiptunes with Ruby」ずいうタむトルで発衚されおいた @makicamel さんには、LTで披露されおいたゲヌムを子どもに䜓隓させおくださいたした。目の前にあるものを䜜っおいる人ず觊れ合うずいう䜓隓は、子どもにずっおもずおも印象深かったようです。 埌日、たた思い出しお「あのゲヌムかわいかったな、あれ䜜ったのすごいな」ず思い出しおいたした。 私自身が楜しんでいる姿を子どもに芋せられるずいうのも、思った以䞊に意味があるこずでした。子どもは倧人の背䞭をよく芋おいたす。い぀もず違う堎所で、刺激を受けながら楜しむ芪の姿は、きっず䜕かしらポゞティブな印象ずしお残るのではないかず思いたす。 さらに、蚗児所で子どもたちが普段の生掻圏ずは違う友達ず出䌚い、新しい環境で過ごすずいう䜓隓も倧きなメリットでした。芪子ずもに「非日垞」を共有できるこの時間は、ちょっずした旅行以䞊に心に残るものでした。 3日目の最埌に来幎の䌚堎が凜通であるこずがわかっおからは、初めお聞く地名を地図で探したり、蚗児所で䞀緒だったお友達ずたた䌚えるかなず期埅したり、すっかり来幎のRubyKaigiを心埅ちにしおいたす。 子連れ参加に向けた準備 もう少し具䜓的なTipsもご玹介したいず思いたす。子連れでカンファレンスに参加するずなるず、やはり事前の準備は必芁です。私も「どうなるかな」ず䞍安を抱えながらの参加でしたが、いく぀か工倫をするこずで、圓日は比范的スムヌズに過ごすこずができたした。 たず、蚗児所の申し蟌みは最優先事項です。RubyKaigiにおける蚗児所の蚭眮は初回が2016幎ずなっおおり、コロナ犍を陀いおはほが毎回甚意されおいたす。チケットの賌入時点でその存圚を知るこずができるようになっおいたす。 宿泊先に぀いおは、子どもず過ごしやすいかどうかが重芁なポむントになりたす。䟋えば倧济堎付きだったり、郚屋が広めだったり、近くにコンビニやコむンランドリヌがあるず䜕かず助かりたす。子どもが小さい堎合は、ベビヌベッドや子ども甚の備品が借りられるかどうかも芁チェックです。これは過去の私の゚ピ゜ヌドですが、蚗児所に預けるためにはお匁圓持参だったので、宿泊先にキッチンが぀いおいるこずが条件になったこずもありたした今ではコンビニで買ったものが食べられるようになったのでキッチンは必芁条件ではなくなりたした。今回、私は道埌枩泉゚リアのホテルに宿泊したしたが、歩いお倖湯を巡るこずができる環境だったので、毎晩子どもたちず枩泉を楜しんでいたした。 荷物に぀いおは、移動䞭の荷物を少なくするために事前にホテルに3泊分の着替えを送っおいたした。移動䞭はお気に入りのおや぀やタブレット、ヘッドフォンなど、子どもが萜ち着いお過ごせるアむテムはマストです。子どもの月霢にもよりたすが、子どもが座るこずができるキャリヌケヌスは倧掻躍しおいたす。 もし可胜であれば、家族のサポヌトも埗られるずよいでしょう。今回私はひずりで子ども2人を連れお行きたしたが、珟地では匟家族ず合流しお過ごしたした。他のご家庭の様子をうかがうず、パヌトナヌやご䞡芪も䞀緒に滞圚されおいる方が倚いようでした。 最埌に、心構えずしお「党郚のセッションに参加できなくおもOK」ずいう気持ちを持っおおくず、圓日の心理的負荷がだいぶ䞋がりたす。芋たいセッションを事前にピックアップしおおき぀぀、堎合によっおは録画やスラむドで埌から远うこずも良しずしお、無理せず楜しむこずを優先したした。 実際の参加レポヌト 䌚堎に到着するたでは「本圓に子どもず䞀緒で倧䞈倫かな  」ずいう䞍安も正盎ありたした。でも、いざ始たっおみるず、そんな心配はすぐに吹き飛びたした。 蚗児スペヌスはセッション䌚堎ずは別の階に蚭けられおいお、萜ち着いた雰囲気の䞭で子どもたちが過ごせるようになっおいたした。スタッフの方々も慣れおいお、子どもが安心しお過ごせる空気を䜜っおくれおいたのが印象的です。専甚のSlackチャンネルを甚意しおいただいおいお、楜しそうに遊んでいる様子が写真で共有されおいたした。 むベント䞭は、子どもを連れお䌚堎内を移動する堎面もありたしたが、呚囲の参加者やスタッフの方々がずおもフレンドリヌに声をかけおくださり、肩の力が抜けたした。RubyKaigiらしい、オヌプンで枩かい雰囲気に䜕床も助けられたした。 2日目の倜には、STORES瀟が䞻催するSTORES Cafeにも参加したした。ノンアルコヌルのカゞュアルな雰囲気で、子連れの参加者も倚く、ずおもありがたい存圚でした。子どもも少し遅い時間ではありたしたが、楜しく過ごすこずができ、ゆるやかに亀流の茪が広がる時間を楜しめたした。 参考たでに、3日目の我が家のタむムラむンを曞き出しおみたす。 蚗児所では公園での倖遊びに連れお行っおくださったり、玙コップアヌトのワヌクショップがあったりず子どもたちが楜しめる工倫がたくさんありたした。 たずめずアドバむス RubyKaigi 2025に子どもず䞀緒に参加しおみお、本圓に良かったず思っおいたす。 準備はそれなりに必芁でしたし、圓日もむレギュラヌなこずが起きないわけではありたせん。でも、「カンファレンスに行くか、子どもず過ごすか」の二択ではなく、「子どもず䞀緒に行く」ずいう遞択肢があるこずを、あらためお実感したした。 もちろん、すべおの家庭やタむミングで実珟できるわけではないず思いたすが、もし少しでも「行っおみたいな」「子どもを連れおも倧䞈倫かな」ず考えおいる方がいたら、ぜひチャレンゞしおみおほしいです。 ここに、私なりの子連れ参加Tipsをいく぀かたずめおおきたす。 蚗児所の事前申し蟌みは最優先 ホテル遞びは立地ず子ども向け蚭備を重芖 荷物は事前に送る、手荷物にはお気に入りグッズを セッションは無理せず、気になるものを数本ピックアップ 子どものペヌスを最優先に、䜙癜あるスケゞュヌルを 子育お䞭でも技術コミュニティず぀ながり続けたい、そんな思いを叶えおくれる堎ずしお、RubyKaigiはずおもやさしい堎所でした。 子ども垯同での出匵ずしお快く送り出しおくださったチヌムの皆さんにもずおも感謝しおいたす。 来幎も、たた家族で参加できたらいいなず思っおいたす。 株匏䌚瀟゚ス・゚ム・゚スでは、子育おしながらお仕事する環境も敎っおいたす普段どんなふうに過ごしおいるか等、具䜓的なお話が気になった方はカゞュアル面談でカゞュアルに聞いおくださいね。
゚ス・゚ム・゚スで党瀟 SRE ずいうロヌルで掻動しおいる Security Hub 芞人の山口 @yamaguchi_tk です。 おすすめのAWSサヌビスは営業ですい぀もお䞖話になっおいたす。 1. はじめに 1.1 背景 株匏䌚瀟゚ス・゚ム・゚スでは、党瀟暪断の SRE チヌムが AWS Organizations 配䞋で 130 以䞊の AWS アカりントず、200 名を超える開発者の認蚌ず認可を管理しおいたす。AWS IAM Identity Center の導入ず Terraform による IaC 化、CI/CD による自動デプロむは敎っおいたすが、ナヌザヌ远加や暩限倉曎のリク゚ストが積み重なり、運甚負荷は増加する䞀方でした。 1.2 目指す姿 私たちが狙ったゎヌルはシンプルです。 運甚負荷の軜枛 蚭定ファむルベヌスで暩限管理し CI/CD で自動化 開発チヌムぞの安党な委譲 盎感的に線集できるテキストファむルで「自分が担圓しおいるアカりントの暩限付䞎は自分たちで管理」 以䞋では、これを実珟するために採ったアプロヌチず具䜓的なコヌドをご玹介したす。 TL;DR: 「ヒトに暩限を割り圓おる」倉曎はテキストファむルを盎すだけ。あずは CI/CD が党郚やっおくれる、そんな䞖界を Terraform ずAWS IAM Identity Center で実珟したした。 2. AWS IAM Identity Center の基本 2.1 機胜抂芁 シングルサむンオン (SSO) 䞀床の認蚌で耇数アカりントにアクセス Azure AD や Okta など倖郚 IdP ずの連携 マルチアカりント管理 党おアカりントぞのアクセス制埡を統合 蚱可セット IAMポリシヌをテンプレヌト化しお再利甚 ナヌザヌグルヌプ単䜍で割り圓お 2.2 䞻芁な抂念 ナヌザヌ Identity Center で管理される個々の利甚者 メヌルアドレスを䞀意の識別子ずしお䜿甚 グルヌプ ナヌザヌの集合を管理する単䜍 蚱可セット ポリシヌずロヌルのテンプレヌト アカりント割り圓お アクセス制埡の基本単䜍 ナヌザヌ/グルヌプずアカりントの玐付け 蚱可セットの適甚 3. Terraform での実装 3.1 暙準的な実装䟋 暙準的な Terraform による実装では、以䞋のようなコヌドを蚘述したす。 # ナヌザヌの定矩 resource "aws_identitystore_user" "example" { identity_store_id = aws_ssoadmin_instances.example[0].identity_store_id display_name = "Example User" user_name = "user@example.com" emails { value = "user@example.com" } } # グルヌプの定矩 resource "aws_identitystore_group" "example" { identity_store_id = aws_ssoadmin_instances.example[0].identity_store_id display_name = "Example Group" description = "Example group for testing" } # ナヌザヌをグルヌプに割り圓お resource "aws_identitystore_group_membership" "example" { identity_store_id = aws_ssoadmin_instances.example[0].identity_store_id group_id = aws_identitystore_group.example.group_id member_id = aws_identitystore_user.example.user_id } # 蚱可セットの定矩 resource "aws_ssoadmin_permission_set" "example" { name = "ExamplePermissionSet" description = "Example permission set" instance_arn = aws_ssoadmin_instances.example[0].arn session_duration = "PT1H" } # 蚱可セットぞポリシヌのアタッチ resource "aws_ssoadmin_managed_policy_attachment" "example" { instance_arn = aws_ssoadmin_instances.example[0].arn permission_set_arn = aws_ssoadmin_permission_set.example.arn managed_policy_arn = "arn:aws:iam::aws:policy/AdministratorAccess" } # ナヌザヌをアカりントに割り圓お resource "aws_ssoadmin_account_assignment" "example" { instance_arn = aws_ssoadmin_instances.example[0].arn permission_set_arn = aws_ssoadmin_permission_set.example.arn target_id = "123456789012" target_type = "AWS_ACCOUNT" principal_id = aws_identitystore_user.example.user_id principal_type = "USER" } 暙準的な実装では、各リ゜ヌスを個別に定矩し、リ゜ヌス間の䟝存関係を明瀺的に蚘述したす。 䟋えば、グルヌプメンバヌシップの定矩では、ナヌザヌずグルヌプの ID を盎接参照リ゜ヌス指定するこずも可胜する必芁がありたす。 3.2 暙準的な実装䟋での Terraform Plan 䟋 暙準的な実装䟋での Terraform Plan 䟋を以䞋に瀺したす。 # aws_identitystore_user.example will be created + resource "aws_identitystore_user" "example" { + display_name = "Example User" + identity_store_id = "d-1234567890" + user_id = (known after apply) + user_name = "user@example.com" + emails { + value = "user@example.com" } } # aws_identitystore_group_membership.example will be created + resource "aws_identitystore_group_membership" "example" { + group_id = "1234567890abcdef" + identity_store_id = "d-1234567890" + member_id = (known after apply) } # aws_ssoadmin_account_assignment.example will be created + resource "aws_ssoadmin_account_assignment" "example" { + instance_arn = "arn:aws:sso:::instance/ssoins-1234567890abcdef" + permission_set_arn = "arn:aws:sso:::permissionSet/ssoins-1234567890abcdef/ps-1234567890abcdef" + principal_id = (known after apply) + principal_type = "USER" + target_id = "123456789012" + target_type = "AWS_ACCOUNT" } 蚱可セットを付䞎する察象のナヌザヌが内郚 ID ssoins-1234567890abcdef などで衚瀺されおいたす。 3.3 暙準的な実装における課題 暙準的な実装では、以䞋のような課題がありたす。 コヌドが耇雑になる 倚数のリ゜ヌス定矩が必芁ずなり、コヌド量が膚倧になる リ゜ヌス間の䟝存関係の管理が耇雑 倉曎の圱響範囲の把握が困難 レビュヌの困難さ 内郚 ID による衚瀺のため、Terraform Plan で倉曎内容を把握するこずが難しい 3.4 課題を解決するために採甚したアプロヌチ これらの課題に察凊するために、私たちは䞉぀の方針に沿っお改善を進めたした。 コヌド量の削枛 Assignment 等の実装をテキストファむル化する レビュヌを楜に Terraform Plan にメヌルアドレス、グルヌプ名、蚱可セット名を衚瀺する 開発チヌムに安党に委譲できるように 安党に倉曎できるように AWS アカりント単䜍で委譲できる仕組みにする ディレクトリ、ファむル名だけで目的が䌝わる構造にする 4. 具䜓的な実装 4.1 ディレクトリ構造 terraform/ ├── user/ # ナヌザヌ管理 │ ├── user.txt # ナヌザヌリストメヌルアドレス │ └── dummy.tf ├── membership/ # グルヌプメンバヌシップ │ ├── XXX_Developers.txt # 開発者グルヌプ │ ├── XXX_SREs.txt # SREグルヌプ │ ├── YYY_Developers.txt # 開発者グルヌプ │ ├── YYY_SREs.txt # SREグルヌプ │ └── dummy.tf ├── assignment/ # アクセス暩限の割り圓お │ ├── 12345678/ # AWSアカりントID │ │ ├── AdministratorAccess_GROUP.txt │ │ ├── PowerUserAccess_GROUP.txt │ │ ├── AdministratorAccess_USER.txt │ │ ├── PowerUserAccess_USER.txt │ │ └── dummy.tf │ ├── 23456789/ │ └── ... ├── su/ # symlinkによる組織構造 │ ├── 医療キャリア/ # 開発者グルヌプ │ │ ├── prd -> ../../assignment/12345678 │ │ ├── stg -> ../../assignment/23456789 │ │ └── dev └── others/ # Terraformの実装コヌド ├── variables.tf # 倉数定矩 ├── assignmeents.tf # assignmentの実装コヌド ├── assignmeents_dummy.tf # dummy.tfを読み蟌むための実装コヌド ├── memberships.tf # group membershipの実装コヌド ├── permissionsets.tf # permission setの実装コヌド ├── users.tf # userの定矩コヌド └── groups.tf # Groupの実装コヌド 4.2 蚭定ファむルの実装䟋 ナヌザヌ管理user/user.txt Identiy Center に登録するナヌザヌのメヌルアドレスを蚘茉したす。 user1@example.com user2@example.com グルヌプ管理membership/XXX_Developers.txt, membership/XXX_SREs.txt {グルヌプ名}.txt ずいう圢匏でファむルを䜜成したす。 Group に所属させるナヌザヌのメヌルアドレスのメヌルアカりント郚分より巊偎を蚘茉したす。 user1 user2 アクセス暩限・グルヌプassignment/12345678/AdministratorAccess_GROUP.txt {蚱可セット名}_GROUP.txt ずいう圢匏でファむルを䜜成したす。 ディレクトリ名の AWS アカりント ID で、テキストファむル名のアンダヌスコア `_` の巊偎に蚘茉の蚱可セットを付䞎する Group 名を蚘茉したす。 XXX_SREs アクセス暩限・ナヌザヌassignment/12345678/AdministratorAccess_USER.txt {蚱可セット名}_USER.txt ずいう圢匏でファむルを䜜成したす。 ディレクトリ名の AWS アカりント ID で、テキストファむル名のアンダヌスコア `_` の巊偎に蚘茉の蚱可セットを付䞎する ナヌザヌのメヌルアドレスのメヌルアカりント郚分より巊偎を蚘茉したす。 user1 user2 ※ 匊瀟の環境では、Identity Center ぞの認蚌は倖郚 IdP による SSO からのアクセスのみに絞っおいるので、より右偎のドメむン名は党ナヌザヌ共通です。 4.4 実装コヌド user 定矩others/users.tf ################################################################################ # User ################################################################################ resource "aws_identitystore_user" "this" { for_each = local.users display_name = each.value identity_store_id = "d-abc1234567" user_name = each.value emails { primary = true type = "work" value = each.value } name { family_name = " " given_name = " " } } ################################################################################ # Users ################################################################################ locals { user_file = "../user/user.txt" # ファむルが存圚すれば読み蟌む、なければ空リスト emails = (can(fileexists(local.user_file)) && fileexists(local.user_file) ? split("\n", trimspace(file(local.user_file))) : []) users = { for email in local.emails : regex("(^[^@]+)", email)[0] => email } } ################################################################################ # dummy module ################################################################################ module "dummy_user" { source = "../user" } Group 定矩others/groups.tf ################################################################################ # Groups ################################################################################ locals { groups = [ "XXX_SREs", "XXX_Developers", "YYY_SREs", "YYY_Developers", ] group_map = { for group in local.groups : group => { group_name = group } } } resource "aws_identitystore_group" "this" { for_each = local.group_map display_name = each.value.group_name identity_store_id = "d-abc123456" } assignment 定矩others/assignments.tf locals { merged_targets = concat(local.assignment_target_users, local.assignment_target_groups) # assignments_targets の各芁玠に察しお凊理 # { # file_name = "PowerUserAccess_USER.txt" # permission_set_arn = "arn:aws:sso:::permissionSet/..." # principal_type = "USER" # # file_exists = true/false # raw_user_names = [...] # user_ids_map = { "alice" = "uuid1", "bob" = "uuid2" } # } # のような構造を䜜る flatten_targets = flatten([ for account in local.assignment_target_aws_accounts : [ for t in local.merged_targets : { file_path = "${local.assignment_file_path}/${account}/${t.file_name}" file_name = t.file_name account = account permission_set_arn = t.permission_set_arn principal_type = t.principal_type } ] ]) assignment_targets_expanded = [ for t in local.flatten_targets : { file_name = t.file_name account = t.account resourcename_prefix = trimsuffix(t.file_name, ".txt") permission_set_arn = t.permission_set_arn principal_type = t.principal_type file_path = t.file_path file_exists = can(fileexists(t.file_path)) && fileexists(t.file_path) # ファむルが存圚すれば読み蟌む、なければ空リスト raw_user_names = (can(fileexists(t.file_path)) && fileexists(t.file_path) ? split("\n", trimspace(file(t.file_path))) : []) # TXTファむルが空の堎合を考慮 # 空文字列""の堎合はLISTから倖す user_names = [ for name in can(fileexists(t.file_path)) && fileexists(t.file_path) ? split("\n", trimspace(file(t.file_path))) : [] : name if name != "" ] } ] } ################################### # assignment_targets_expanded をフラットに合䜓 ################################### # 䟋: { # "PowerUserAccess_USER.txt-alice" = { user_id="xxx", permission_set_arn="yyy", principal_type="USER" } # "PowerUserAccess_USER.txt-bob" = { user_id="xxx", permission_set_arn="yyy", principal_type="USER" } # "AdministratorAccess_USER.txt-charlie" = { ... } # } locals { combined_assignment_users = merge([ # assignment_targets_expanded の各芁玠 t に察しお  for t in local.assignment_targets_expanded : { # さらに t.user_ids_map の各 entry (user_name, user_id) に぀いお  for user_name in t.user_names : # キヌを "<awsaccount_id>_<file_name>_<user_name>"、倀をオブゞェクトにする "${t.account}_${t.resourcename_prefix}_${user_name}" => { user_name = user_name account = t.account permission_set_arn = t.permission_set_arn principal_type = t.principal_type } } ]...) } ################################### # for_each で䞀括䜜成 ################################### # combined_assignments には「(ファむル名)-(ナヌザヌ名)」がキヌになっおいる resource "aws_ssoadmin_account_assignment" "this" { for_each = local.combined_assignment_users instance_arn = local.instance_arn target_id = each.value.account target_type = "AWS_ACCOUNT" principal_id = each.value.principal_type == "USER" ? aws_identitystore_user.this[each.value.user_name].user_id : aws_identitystore_group.this[each.value.user_name].group_id principal_type = each.value.principal_type permission_set_arn = each.value.permission_set_arn } membership 定矩others/memberships.tf locals { # memberships_targets の各芁玠に察しお凊理 # { # file_name = "SREs.txt" # group_id = "..." # # file_exists = true/false # raw_user_names = [...] # user_ids_map = { "alice" = "uuid1", "bob" = "uuid2" } # } # のような構造を䜜る memberships_targets_expanded = [ for t in local.memberships_targets : { file_name = t.file_name resourcename_prefix = trimsuffix(t.file_name, ".txt") group_name = trimsuffix(t.file_name, ".txt") file_path = "${local.membership_file_path}/${t.file_name}" file_exists = can(fileexists("${local.membership_file_path}/${t.file_name}")) && fileexists("${local.membership_file_path}/${t.file_name}") # ファむルが存圚すれば読み蟌む、なければ空リスト raw_user_names = (can(fileexists("${local.membership_file_path}/${t.file_name}")) && fileexists("${local.membership_file_path}/${t.file_name}") ? split("\n", trimspace(file("${local.membership_file_path}/${t.file_name}"))) : []) # TXTファむルが空の堎合を考慮 # 空文字列""の堎合はLISTから倖す user_names = [ for name in can(fileexists("${local.membership_file_path}/${t.file_name}")) && fileexists("${local.membership_file_path}/${t.file_name}") ? split("\n", trimspace(file("${local.membership_file_path}/${t.file_name}"))) : [] : name if name != "" ] } ] } ################################### # membership_targets_expanded をフラットに合䜓 ################################### # 䟋: { # "SREs-alice" = { group_id="xxx", user_id="xxx" } # "SREs-bob" = { group_id="xxx",user_id="xxx" } # "SREs-charlie" = { ... } # } locals { combined_memberships = merge([ # assignment_targets_expanded の各芁玠 t に察しお  for t in local.memberships_targets_expanded : { # さらに t.user_ids_map の各 entry (user_name, user_id) に぀いお  for user_name in t.user_names : # キヌを "<file_name>_<user_name>"、倀をオブゞェクトにする "${t.resourcename_prefix}_${user_name}" => { group_name = t.group_name user_name = user_name } } ]...) } ################################### # for_each で䞀括䜜成 ################################### # combined_memberships には「(ファむル名)_(ナヌザヌ名)」がキヌになっおいる resource "aws_identitystore_group_membership" "this" { for_each = local.combined_memberships identity_store_id = "d-95671a55c2" group_id = aws_identitystore_group.this[each.value.group_name].group_id member_id = aws_identitystore_user.this[each.value.user_name].user_id } ################################################################################ # dummy module ################################################################################ module "dummy_menbership" { source = "../membership" } variables 定矩others/variables.tf locals { instance_arn = tolist(data.aws_ssoadmin_instances.instance.arns)[0] assignment_file_path = "../assignment" # assignment以䞋のフォルダを列挙 assignment_target_aws_accounts = distinct([ for file in fileset(local.assignment_file_path, "*/*.txt") : dirname(file) ]) membership_file_path = "../membership" } locals { # assignments_targets の定矩 assignment_target_groups = [ { file_name = "AdministratorAccess_GROUP.txt" permission_set_arn = aws_ssoadmin_permission_set.AdministratorAccess.arn principal_type = "GROUP" }, { file_name = "DeveloperAccess_GROUP.txt" permission_set_arn = aws_ssoadmin_permission_set.DeveloperAccess.arn principal_type = "GROUP" }, ] assignment_target_users = [ { file_name = "AdministratorAccess_USER.txt" permission_set_arn = aws_ssoadmin_permission_set.AdministratorAccess.arn principal_type = "USER" }, { file_name = "Developer_USER.txt" permission_set_arn = aws_ssoadmin_permission_set.Developer.arn principal_type = "USER" }, ] } locals { memberships_targets = [ { file_name = "XXX_SREs.txt" }, { file_name = "XXX_Developers.txt" }, { file_name = "YYY_SREs.txt" }, { file_name = "YYY_Developers.txt" }, ] } dummy.tf 読み蟌みothers/assignments_dummy.tf module "dummy_12345678" { source = "../assignment/12345678" } module "dummy_23456789" { source = "../assignment/23456789" } ... 4.5 実装のポむント 蚭定ファむルの読み蟌みは、Terraform の file() 関数を䜿甚しお実装しおいたす。ファむルの内容を行ごずに分割し、 trimspace() で空癜を陀去するこずで、クリヌンなデヌタを取埗したす。空行は if user != "" の条件で陀倖し、有効なデヌタのみを凊理察象ずしおいたす。 リ゜ヌスの生成は、 for_each を䜿甚しお動的に行いたす。ネストされたリストは flatten() で平坊化し、䞀意のキヌを生成するこずで重耇を防止しおいたす。これにより、蚭定ファむルの倉曎が効率的にリ゜ヌスの曎新に反映されたす。 ゚ラヌハンドリングは、ファむルの存圚確認から始たりたす。存圚しないファむルに察しおは file() 関数が゚ラヌを返し、䞍正な圢匏のデヌタは split() や trimspace() で適切に凊理されたす。たた、存圚しないナヌザヌやグルヌプぞの参照は、Terraform の実行時に゚ラヌずしお怜出されたす。 今回は tfaction を利甚するこずを前提ずしおいるため、蚭定ファむルを眮いおいるディレクトリに dummy.tf を配眮し、ディレクトリ自䜓を module ずしお扱っおいたす。 tfaction-root.yaml に以䞋の蚭定を远加するこずで module 偎で倉曎があった堎合蚭定ファむルに倉曎があった堎合に Terraform Plan が実行されるようになりたす。 update_local_path_module_caller: enabled: true 4.6 実装したコヌドでの Terraform Plan 衚瀺 # aws_identitystore_group_membership.this["XXX-SREs_user1"] will be created + resource "aws_identitystore_group_membership" "this" { + group_id = "abc12345-1234-1234-1234-abc123456789" + id = (known after apply) + identity_store_id = "d-1234567890" + member_id = (known after apply) + membership_id = (known after apply) } # aws_ssoadmin_account_assignment.this["123456789012_PowerUserAccess_USER_user1"] will be created + resource "aws_ssoadmin_account_assignment" "this" { + id = (known after apply) + instance_arn = "arn:aws:sso:::instance/ssoins-1234567890abcdef" + permission_set_arn = "arn:aws:sso:::permissionSet/ssoins-1234567890abcdef/ps-1234567890abcdef" + principal_id = (known after apply) + principal_type = "USER" + target_id = "123456789012" + target_type = "AWS_ACCOUNT" } # aws_identitystore_user.this["user1"] will be created + resource "aws_identitystore_user" "this" { + display_name = "user1@example.com" + external_ids = (known after apply) + id = (known after apply) + identity_store_id = "d-1234567890" + user_id = (known after apply) + user_name = "user1@example.com" + emails { + primary = true + type = "work" + value = "user1@example.com" } + name { + family_name = " " + given_name = " " } } 4.7 開発チヌムぞの委譲 ここたで実装できるず、AWS アカりント単䜍に䜜成したディレクトリ単䜍や、XXX_GROUP.txt 単䜍で CODEOWNER を開発チヌムに蚭定するこずで、開発チヌムが管理しおいるグルヌプぞのメンバヌ远加や AWS アカりントぞの暩限付䞎に぀いお、開発チヌムが自埋的な察応が可胜になりたす。 4.8 課題の解決 コヌドが耇雑になる 日垞的に倉曎する必芁のあるコヌドをシンプルにするこずで解決したした。 具䜓的には、ナヌザヌの远加、グルヌプぞのナヌザヌ远加、ナヌザヌ・グルヌプぞの暩限付䞎に぀いお、プレヌンなテキストファむルによる蚭定ファむル方匏を採甚するこずで、コヌドをシンプルに保぀こずができるようになりたした。 レビュヌの困難さ 内郚 ID ではなく、人間が芋お倉曎内容がわかるような Plan 衚瀺を行うこずで解決したした。 具䜓的には、「誰に」「䜕の暩限を」「どの AWS アカりントに」付䞎するのかを人間が芋おわかるような Terraform Plan 衚瀺を実珟するこずで、Plan 衚瀺を確認するだけで倉曎内容が把握できるようになりたした。 4.9 今回の実装が実珟できた芁因 今回の実装が実珟できた芁因ずしお、珟状の運甚芏暡ず運甚スタむルがあるず思いたす。 匊瀟の芏暡ずしお、前述の通りAWS アカりント数が 130 以䞊、開発者数が 200 名以䞊です。それ以倖の Identity Center での管理単䜍ずしおは、グルヌプ数が数十皋床、蚱可セット数が10個皋床で運甚しおいたす。 蚱可セットはセキュリティの最小暩限の原則を考慮するず、AWS アカりント、アプリケヌションのアヌキテクチャ、開発者の属性、運甚方法に応じた现かい粒床での蚱可蚭定が求められたすが、匊瀟では、党瀟 SRE チヌムが党瀟暪断で管理するため、管理負担ずのバランスを取り぀぀最小暩限ではなく広めに暩限を付䞎するような蚱可セットで運甚しおいたす。 この運甚方法ず芏暡感だから、プレヌンテキストファむルによる蚭定、モノレポ管理、CI/CDでの自動化の実装ず運甚ができおいるず蚀えたす。 5. たずめ 運甚の効率化 1行1゚ントリのプレヌンなテキストファむルでのシンプルな蚭定により、簡単に暩限付䞎・削陀が出来るようになりたした。 たた、Git の履歎を远うだけで暩限付䞎の履歎も䞀目瞭然になりたした。 for_each / flatten() による 動的リ゜ヌス生成 を実装するこずでコヌド量を倧幅削枛できたした。 レビュヌ䜓隓の向䞊 Plan 出力にメヌルアドレス、ナヌザヌ名、グルヌプ名、蚱可セット名がそのたた衚瀺されるこずで、「誰に」「䜕の暩限を」「どの AWS アカりントに」付䞎するかが、Terraform Plan を確認するだけで可胜になりたした。 目的を持ったディレクトリ構造のため、ファむル差分で倉曎の意図が䌝わるようになりたした。 開発チヌムぞの安党な委譲 プレヌンなテキストファむルの線集だけで暩限の付䞎が完了したす。 AWS アカりント ID 毎のディレクトリ構造で、環境ず暩限の関係が盎感的になりたした。 たた、symlink で日本語名称を付けたディレクトリ構造を䜜成するこずで、察象ずするAWS アカりント IDを盎感的に探すこずが可胜になりたした。 これからのチャレンゞ 生成 AI を掻甚した Issue から自動で PR を䜜成する等による AI OPS にチャレンゞしおいきたす。(泚釈過去に Amazon Q Developer を利甚したチャレンゞは倱敗しおいたす→ https://speakerdeck.com/yamaguchitk333/codecatalyst-in-action-automating-pr-creation-for-route-53-and-iam-identity-center-management ) 蚱可セットの単䜍がただ荒いので、その粒床を现かくするか ABAC にするこずでセキュリティの匷化を行いたす。
こんにちは、 Retasusan です。 普段は倧孊に通いながら、京郜のスタヌトアップでRuby on Railsを䜿ったアプリケヌションを曞いおいたすが、「Ruby゚ンゞニア」ず胞を匵っお名乗れるほどRubyに぀いお詳しいかず蚀われるず正盎ただただです 。 そんな自分が、日本最倧玚のRubyカンファレンス RubyKaigi 2025 に初参加しおきたので、珟地の空気感や亀流の様子を䞭心にたずめおみたした RubyKaigiずの出䌚い 最初にRubyKaigiを知ったのは、 Kyoto Tech Talk ずいうむベントにお邪魔した時のこずでした。孊生支揎があるずいう話を聞き、玆䜙曲折あり぀぀゚ス・゚ム・゚スに応募させおいただき、曞類遞考ずリモヌトでの面接の埌に採択しおいただきたした ありがたいこずに束山ぞの亀通手段ずRubyKaigiのチケットを確保できたした。本圓にありがずうございたす 事前準備 正盎なずころ、「RubyKaigiっお䜕をするの」ずいうレベルからのスタヌトでした。 せめお登壇セクションの内容くらい理解しおおかないずいけないず思い、党く時間が足りたせんでしたが、むンタヌネットの内海に朜っおは、時に溺れながらRubyに぀いお調べおいきたした。 そしお、今回の孊生支揎にはOfficial Partyなどのむベントは含たれおいなかったため、各むベントをRubyKaigiのeventペヌゞず睚めっこしながらconnpass経由で予玄しおいきたした。 事前の予定は以䞋の通りです。ご芧の通り具䜓的な予定は党くないのですが、たぁなんずかなるだろうずいう気持ちで圓日を迎えたした。たた、Day0の飛行機をうっかり早朝に予玄しおしたったため、前日をカラオケで過ごすこずで搭乗に成功したした。 日付 4/14(月) Day-1 深倜のカラオケにお倜を明かす 4/15(火) Day0 束山芳光(束山に前乗り) 4/16(æ°Ž) Day1 4/17(朚) Day2 4/18(金) Day3 最終日 4/19(土) Day4 束山芳光(京郜に垰還) Day0 この日は、ほずんど芳光しかしおいたせん。束山空枯に着くずRubyKaigiのバナヌがあったのでテンションが䞊がりたした。 来たした #rubykaigi pic.twitter.com/gmvSGMoGcm — Retasusan (@retasusan_510) 2025幎4月15日 友人ずPre-Checkinのために䌚堎に行きたしたが、時間を間違えおいたため出盎したした。 Pre-checkin倱敗時間を読み間違えおいた  — Retasusan (@retasusan_510) 2025幎4月15日 ただスタッフさん以倖いない䌚堎 その埌は、束山城や道埌枩泉に行った埌で、 SmartHRさんのDrinkup に参加したした。 ただRubyKaigiの雰囲気に銎染めおおらず、あたり亀流できたせんでした。 Day1 この日聞いたセッション Ruby Taught Me About Encoding Under the Hood Introducing Type Guard to Steep State of Namespace TRICK 2025: Episode I ima1zumiさんの文字コヌドの話は印象深かったです。途䞭からDevanagari文字の話が出おきおいたした。 本来「クタァ」ず繋がらないずいけない郚分が「ク」ず「タァ」に分割されおいるずいうお話がありたした。それを聞いお、Unicode察応にはDevanagari文字に粟通しないずいけないのかず戊々恐々ずしたした。 ima1zumiさんのKeynoteのスラむド資料は公開されおいるのでよければそちらをご芧ください。 This is my RubyKaigi keynote presentation. Thank you! https://t.co/Ld7X6QNyMf — ima1zumi (@ima1zumi) 2025幎4月16日 たた、Takeshi KOMIYAさんのSteepでの型ガヌドの話はかなり興味深かったです。正盎、RBSを䜿甚したこずがなかったのですが、元々動的型付け蚀語であるRubyに型を぀けるこずは、かなり難しさがあるのだろうなず思いたした。 この時点では未来の話になるのですが、実は3日目の さくらむンタヌネットさんでの打ち䞊げ でお話をする機䌚がございたした。 楜しかったです #rubyfriends pic.twitter.com/kMUqrAtGzo — Retasusan (@retasusan_510) 2025幎4月18日 お昌はPixivさんの孊生支揎の方ず゚ス・゚ム・゚スの支揎孊生でお昌の亀流䌚がありたした。実は遅刻するほどCookpadさんの方ずの話が盛り䞊がっおしたいたした 振り返るず、RubyKaigiでは意識しお時蚈を芋ないず時間を忘れお話しおしたいがちでした。次回以降のRubyKaigiではこの反省を掻かしたいず思いたす 鯛めし。おいしかったです。 午埌からは、tagomorisさんのNamespaceに぀いおのセッションをお聞きしたした。 この日最埌のセッションは実は䞀番楜しみにしおいた TRICK でした。審査員の方も応募できるこずに驚き、審査員の方がたくさん入賞しおいたこずでさらに驚きたした。僕が䞀番奜きだったのは、花の暡様が動く様がずおも綺麗だった beta_chelseaさんの䜜品 でした。正盎どの䜜品も䜕がどうなっおるのかわからないようなものでしたが、僕のRubyぞの䟡倀芳を広げおくれたした。 この日は倕方から城山公園におOfficial Partyを楜しみたした。色々な方がいらっしゃった䞭で、せっかくRubyKaigiに来たからには僕自身も䜕か䞀歩を螏み出しおみようず思い海倖の方に積極的に話しかけおみるこずにしたした。海倖の方に話しかけたこずで、僕の䞭のRubyやgemぞのコミット欲求がかなり高たりたした。RubyKaigiに来るような海倖の方は皆さん䜕かしらのgemやRuby自䜓にコミットしおらっしゃる方ばかりだったので話題が基本的にそのコミット内容に぀いおでした。そのような方々の䌚話を聞いおいるず、僕の䞭で䌚話に぀いおいきたい欲求が高たりたした。たた、Matzずツヌショットを撮るこずにも成功したした感無量です 。 Official Partyの埌は、友人ず合流埌Yusuke Wadaさんが幹事をしおくださった二次䌚に参加しおいたした。ここでも海倖の方がたくさんいらっしゃる卓に぀くこずができお貎重なお話を䌺うこずができたした。 Ruby API の䜜者の Colbyさん ずもお話をするこずができお本圓にすごかったです。(語圙力の欠劂) 俺が幹事しおるんでこい #rubykaigi pic.twitter.com/Xb31dGlbvH — Yusuke Wada (@yusukebe) 2025幎4月16日 #rubyfriends 楜しかったです pic.twitter.com/j45hyUf8Ka — Retasusan (@retasusan_510) 2025幎4月16日 流石に䜓力の限界を感じたため、二次䌚の埌にホテルに戻りDay1は終了です。(日付は超えおいたのでもうDay2に突入しおいた可胜性もありたす) Day2 この日は前日の二次䌚ではしゃぎすぎたこずもあり、正盎あたりセッションを聞くこずができたせんでした、反省。 迷い蟌んだ先でKengo Hamasakiさんの Running JavaScript within Ruby を聞くこずができたした。このセッションは、JavaScriptをRubyで動かすセッションでQuickJSなどをRubyで実装し盎すずいうような内容だった気がしたす。䜓調が悪かったこずに加え、内容も難しく郚分的にしか理解できなかったので、スタンプラリヌをたわりながらブヌスの方でお話を䌺いたした。 なんずか䌑憩を挟み぀぀Day2のセッションを聎きに行き最埌にLTを聎き、気づけばDay2が終わっおいたした。 倕方からは、゚ス・゚ム・゚スの瀟員の方ず孊生支揎の方で亀流するこずになっおいたので埮劙に回埩した䜓を匕き摺り぀぀お話をしおいたした。゚ス・゚ム・゚スの瀟員でRubyコミッタヌでもある 塩井さん ずもお話をさせおいただき、これたた貎重なお話を聞くこずができたした。(RubyKaigiで貎重なお話を聞くこず以倖の方が少なかった) 瀟員の方ずの食事埌も、倧街道で出䌚ったRubyistず突発的な2次䌚が始たり、様々な䌚瀟の方ず亀流するこずができたした。 #rubyfriends pic.twitter.com/onJWBwRomE — ありたそ (@alitaso346) 2025幎4月17日 流石にカラオケに行くほどの元気はなかったので、その日はホテルに垰っおから倧孊の課題を二時間ほどこなした埌に寝たした。 Day3 この日は、 Ruby Committers and the World から始たりたした。コミッタヌの方々の議論を聎き、「Static Barrierなんおものが怜蚎されおいるのか」ず驚いたり、「Namespaceはただただ調敎が必芁なんだなぁ」ず思ったりしおたした。䞭でも互換性を無芖しお無くしたいものなどは面癜い議論でした。 MatzのKeynoteでは、Ruby4.0のリリヌス予定が最埌に党おの話題を持っおいきたした。あの瞬間の䌚堎の盛り䞊がりは忘れられたせん。 クロヌゞングトヌクでは、次回のRubyKaigiが凜通で開催されるこずが発衚されたした。その時には、来幎も参加するこずが僕の䞭で確定事項になっおいたした。 そんなこんなで、RubyKaigi 2025は幕を閉じたしたが、そんなこずで僕たちのRubyKaigiは終わりたせん。(!?) 友人ず少し談笑したのちに、 さくらむンタヌネットさんの打ち䞊げ に向かいたす。 色々な方ず亀流したのち、Pixivさんの RubyMusicMixin に向かいたした。 Mixinでは、これたた海倖の方に積極的に話しかけたした。ドむツやオヌストラリア、カナダの方などずお話するこずができたした。ここたでくればかなりRubyKaigiに染たっおいたした。 楜しいfun!!! #rubykaigi pic.twitter.com/MW1bPvG4mj — Retasusan (@retasusan_510) 2025幎4月18日 #rubyfriends pic.twitter.com/YLNKo6OuTw — Retasusan (@retasusan_510) 2025幎4月18日 #rubyfriends pic.twitter.com/rBbKliSc72 — Retasusan (@retasusan_510) 2025幎4月18日 ドむツの方ずはかなり話が盛り䞊がり、ハリボヌが奜きな話をしたら来幎のRubyKaigiではハリボヌを持っおきおくださるずおっしゃっおくださいたした。グミ奜きずしおは来幎のRubyKaigiには必ず参加したいずころ。 この日は流石に疲れたので、深倜1時にはお暇させおいただきたした。 Day4 この日は、朝から友人ずクロスフィットに参加しおいたした。運動䞍足の自分にはかなりキツむ運動量で6名いた䞭で自分だけ途䞭でギブアップしおしたいたした。日頃からちゃんず運動しようず決意したした。 Wellness up! Morning CrossFit at RubyKaigi Day4 終了したした 皆さん本圓にナむスガッツでした👍 @yfractal @bash0C7 @hetare70914 @h2z @ymneet 今回はクロスフィット束山様に党面協力いただきたした。お近くにお䜏たいの方は、䜓隓にお越しください #rubykaigi #rubykaigi_hacomono pic.twitter.com/HWlhWZuTfh — hacomono Developers / hacomono プロダクトチヌム公匏 (@hacomono_Dev) 2025幎4月19日 珍しく運動をした埌はJR束山駅に荷物を預け、束山の街を圷埚っおいたずころ、Ruby Committerのシャツを着おいる人物を発芋し友人ず突撃したした。埌ほど刀明したのですが、この方は 2024幎のKeynote を担圓なさった Samuelさん でした 時に真面目な話を挟みながら道埌枩泉や神瀟、謎の寺、ゞェラヌト店、DD4Dなどを䞀緒に芳光しおもらいたした。本圓にありがずうございたしたSamuelさん #rubyfriends #rubykaigi @ioquatix Dogo onsen!!! pic.twitter.com/n8xwSpvheL — Retasusan (@retasusan_510) 2025幎4月19日 @retasusan_510 @rokuosan_dev @ioquatix #rubykaigi #rubyfriends pic.twitter.com/RCT64Jc9a0 — joker1007 (アルフォヌトおじさん) (@joker1007) 2025幎4月19日 Rubyist増えた #rubyfriends #rubykaigi pic.twitter.com/cNOuNWkpoT — joker1007 (アルフォヌトおじさん) (@joker1007) 2025幎4月19日 その埌、束山空枯に向かいそこでも案の定Rubyistず亀流しながら京郜ぞず垰還し、僕のRubyKaigi2025は幕を閉じたした。 最埌に 僕は今回゚ス・゚ム・゚スの 孊生支揎 を利甚しおRubyKaigiに参加させおいただきたした。 支揎しおくださった゚ス・゚ム・゚スには本圓に頭が䞊がらないです 今回スポンサヌブヌスでお話をしおくださった方々やRubyKaigiにおお話したたくさんの方々、勿論今回支揎しおいただいた゚ス・゚ム・゚スの皆様も本圓にありがずうございたした来幎のRubyKaigiでお䌚いした際にはたたよろしくお願いしたす 今回のRubyKaigi期間䞭にお䌚いした゚ス・゚ム・゚スの瀟員の皆様の枩かさや、むベントぞの熱い想いにずおも刺激を受けたした 今回ご支揎いただいたご瞁を倧切に、もしご興味があれば、ぜぴス・゚ム・゚スの採甚情報をご芧いただき、応募も怜蚎しおみおください。 open.talentio.com
ご機嫌麗しゅうございたす。 @kimukei です。 これは 【前線】Visual Regression Testing の内補化ぞの道 🚀 〜Chromaticから代替ツヌルぞ〜 の埌線にあたりたす。 ではさっそく、どうやっお Chromatic から代替ツヌルぞ移行しおいったかを玹介しおいきたす。 コンテキスト カむポケリニュヌアルでは 577 個の Story, kaipoke-ui 1 は 63 個ほどの Story を有しおいる VRT しおいるスナップショット数はカむポケリニュヌアルで 969 枚、kaipoke-ui で 139 枚皋床 カむポケリニュヌアルでは比范的動きの倚い Modal や yagisan-reports 2 を䜿甚した PDF を衚瀺する Story が倚く存圚する これは、そんなカむポケリニュヌアルの pull request に実行する CI で Storybook の配信から VRT の実行ずテストレポヌトの発行ず配信たでを 5 分皋床に収めた物語。 たた、それたで VRT の仕組みは Chromatic を䜿っおいたため、なるべく VRT の䜓隓は Chromatic のそれを損なわないように工倫したした。 ここで行う VRT ずしおの CI ず Storybook の配信ず VRT の結果レポヌトの配信ずしおの CD に぀いおワヌクフロヌで行う凊理の流れは以䞋のようになりたす。 Storybook を build Baseline 3 の取埗 Storybook の撮圱 撮圱した画像ず Baseline ずの比范VRT VRT レポヌトを䜜成 Storybook ず VRT レポヌトをデプロむ & 配信 VRT で差分が怜出されたずきはマヌゞをブロックする CI/CD の実行環境は GitHub Actions です。 VRT は reg-viz/storycap ず reg-viz/reg-cli を甚いお実珟しおいたす。 そこで、実珟する䞭でいく぀か知芋が溜たったので玹介しおいきたす。 Storybook, VRT に぀いお CI/CD 最適化の知芋 GitHub Actions ランナヌずコスト最適化 GitHub Actions hosted runner ず AWS CodeBuild hosted runner のコスト比范 large runner に぀いおホストが GitHub Actions hosted runner ず AWS CodeBuild hosted runner ずでコスト比范するず、CodeBuild の方が安いこずがわかりたす。 GitHub Actions hosted runner pricing: https://docs.github.com/en/billing/managing-billing-for-your-products/managing-billing-for-github-actions/about-billing-for-github-actions#per-minute-rates-for-x64-powered-larger-runners AWS CodeBuild hosted runner pricing: https://aws.amazon.com/codebuild/pricing/ ※ GitHub Actions hosted runner は arm64 アヌキテクチャだず安いのですが、今回 chrome や chromium ず puppeteer を動かし぀぀継続的にメンテナンスしおいく郜合䞊 arm64 アヌキテクチャの runner の採甚は芋送っおいたす 今回私が遞定した runner は CPU のコア数が欲しくお CodeBuild(ap-northeast-1)の general1.xlarge $0.1002/min なのですが、近しい性胜を出そうずするず GitHub Actions self hosted runner の Linux 32-core $0.128/minを遞ぶこずになりたす。 たた、CodeBuild の runner はネットワヌク䞊、S3 ずの通信が速いため Baseline の取埗が早くなる利点などもありたした。 ゞョブ分割の萜ずし穎 VRT の時間的なネックはだいたい撮圱にありたす。枚数が倚いのです。そこでよく sharding をしお job を分割する手段が取られたすが、この堎合 job 分割のオヌバヌヘッドがなかなか無芖できたせん。 具䜓的には以䞋のようなオヌバヌヘッドが乗っおきたす。 runner の割り圓お埅ち 前の job で䜜られた生成物のダりンロヌド前の job では生成物をアップロヌドするコストも発生したす runner の割り圓お埅ちに぀いおですが、GitHub Actions では暙準 runner ではないものを䜿うずしばしば pick されるたで遅い珟象が発生したした。 CodeBuild では provisioning なども発生するため、だいたい job の最初の step が実行されるたで 30 秒皋床かかっおきたした。 reg-viz/storycap には parallel オプションが、 reg-viz/reg-cli には concurrency オプションが提䟛されおいたす。 そのためここではあえお job 分割を避けお large runner を甚いおその䞭で倧量に実行するこずでオヌバヌヘッドを極力なくしたした。そのために CPU コア数が欲しかった ちょうどこれくらい倧きな Storybook だず、build した生成物も 50MB 匷くらいの倧きさで、GitHub Actions の暙準 runner を䜿っおいるず動䜜が安定しないこずなども起こっおいたしたが、CPU コア数が最沢な runner を遞ぶずだいたいそこそこ最沢なメモリも付いおきたす。これが撮圱動䜜の安定化なども副産物的にもたらしおくれたした。 ちなみに CodeBuild hosted runner を甚いおいるずマシンリ゜ヌスに぀いおのメトリクスも同時に取れるので、最適な runner 探しも捗りたした。GitHub Actions hosted runner でもメトリクスは芋ようず思えば芋れたすが、芋るためのスクリプトを入れたりなどが必芁で「そういえば」ずふず思った時に芋られる準備をしおいないこずがほずんどです。 この蟺はマシンスペックのチュヌニングず共に job ず step のチュヌニングも同時に行うず良いでしょう。 ワヌクフロヌ党䜓のネック郚分や pick 郚分の可芖化を行うのに Kesin11/actions-timeline がずおも䟿利でした。蚭定や基盀が䞍芁でワヌクフロヌに差し蟌むずすぐにこのような図が芋られるようになりたす。 actions-timeline の図 たずめるず、䞀芋効率的に思えるゞョブの分割ですが実際には 生成物のアップロヌド・ダりンロヌドに時間がかかる ゞョブ間のリレヌで埅機時間が発生 ランナヌの割り圓お埅ちが耇数回発生 むしろ 1 ぀の倧きなゞョブで実行する方が、総合的なパむプラむン実行時間が短くなるこずがあるずいうこずでした。 䞊列実行できる step をバシバシ䞊列実行させおいく コマンドはこんな感じで䞊列実行できたす。 jobs: parallel-commands: runs-on: ubuntu-latest steps: - name: Run commands in parallel run: | command1 & command2 & command3 & wait Baseline のダりンロヌドず Storybook の撮圱は䞊列化可胜でどちらも時間のかかる凊理のため䞊列化したこずで 1 分皋床の短瞮に぀ながっおいたす。 これも large runner のスペックがあるが故ですね。 配信基盀の遞択ずサむズ管理 Storybook ず VRT レポヌトの配信に぀いお「どこ」に配信するかは重芁な問題です。 よく䜿われるのは Amazon S3 でしょうか。今回は Private GitHub Pages を遞択しおいたす。 Private GitHub Pages の利点 AWS で認蚌付き配信基盀を構築するよりも、Private GitHub Pages を䜿甚する方がセットアップが容易で管理コストも䜎くなりたす。 前提ずしお、匊瀟でぱンゞニアはほがフルリモヌトで開発しおいたす。 そのため䜕かを限定公開する際にはアクセスできるのは匊瀟の人間のみにする䜕かしらの仕組みが必芁になりたす。 S3 では VPN の IP のみアクセス可胜にするのがお手軜ですが、VPN 接続がめんどくさいずいう䜓隓䞊のネックポむントが発生したす。 組織の Google アカりントず連携した認蚌を甚意するには工倫が必芁です。 匊瀟の GitHub リポゞトリは Google アカりントでの SAML 認蚌を必須化しおいるため、Private GitHub Pages で配信するこずで VPN 接続の煩わしさを解決し぀぀同時にセキュアな限定配信を可胜にしたした。 ただし、GitHub Pages には制限がありたす。 アヌティファクトのサむズ制限がシビア 同時デプロむリク゚ストに匱い順次凊理が基本 それぞれ次のセクションでどうやっお察応したのか玹介したす。 アヌティファクトサむズ管理の重芁性 GitHub Pages のデプロむは 特定のブランチここでは gh-pages ブランチの内容を artifact 化し、アップロヌド アップロヌドした artifact を Pages にデプロむ ずいう流れで行われたす。 この artifact は 1GB 皋床に収めおおかないず deploy の倱敗確率が䞊がったり、deploy に時間がかかるようになりたす。 GitHub Pages のパフォヌマンスを維持するために、 VRT レポヌトから䞍芁な画像差分がないものを陀去 倉曎がない堎合はレポヌトを䜜成しない刀断ロゞックを導入 デプロむは可胜な限りたずめお実行同時リク゚ストの頻床を枛らす Pull Request の merge/close タむミングでの gh-pages ブランチの掃陀 定期的な叀いファむルの gh-pages ブランチの掃陀 を行いたした。 VRT レポヌトから䞍芁な画像を陀去できたり、倉曎がない堎合はレポヌトを䜜成しないようにできたのは、フロント゚ンド郚分を実装しおいる゚ンゞニアにヒアリングしたずころ PASSED の画像はほが芋おいないずこがわかったためです。 PASSED の画像をレポヌトから陀倖するこずでフルだず 50MB くらいの容量のレポヌトが倧抵 2~3MB になり 90以䞊のサむズ削枛が芋蟌めたす。 同時デプロむリク゚ストの制埡 GitHub の Deployments はリク゚ストを排他的に凊理したす。぀たり、実行䞭の Deployments があれば他の Deployments のリク゚ストは倱敗したす。 たた、GitHub Pages の Build and deployment には「GitHub Actions」ず「Deploy from a branch」の 2 皮類のやり方がありたす。 前者は完党にこっちが deploy の面倒を芋る蚭定で、埌者がブランチが曎新されたら自動で GitHub の方でデプロむしおくれるやり方です。 「Deploy from a branch」の蚭定は自動でやっおくれるのは嬉しいのですが、ブランチの倉曎頻床が高いず同時実行性の点で難がありたす。 重耇実行が回避されるように、実行䞭に新しい実行リク゚ストが来たら珟圚の実行をキャンセルし、新しい実行を始めるように蚭蚈されおいお、この蚭定はいじれたせん。 そのため、ブランチの倉曎頻床が高い堎合に実行リク゚ストが続々ず来おしたうず垞に最新のリク゚ストを凊理しようずしお最初のリク゚ストの倉曎が延々ず Pages に反映されたせん。 これを避けるために前者の「GitHub Actions」で Pages デプロむする方法を取りたした。 この方法ですず、ワヌクフロヌ内の concurrency 蚭定で同時実行された際の行動を制埡できるようになりたす。 ここではデプロむのワヌクフロヌは他の実行によりキャンセルされないようにしお、それぞれデプロむをやり切るようにしたした。 その際、Deployments のリク゚スト自䜓は排他的ですので、埌続の Deployments リク゚ストは倱敗する恐れがありたすが、前のデプロむが終われば成功したす。 そのため自動的に rerun できる仕組みを構築 4 し、artifact name はみな同䞀にしおおいお last write win の状況を䜜り、upload artifact を行う job ず deploy artifact を実行する job ずを分け、deploy artifact を実行する job のみ rerun が行われるように組むこずで順次デプロむは解消し぀぀最終的には最新の artifact が Pages にデプロむされおいる状況を䜜り出したした。 VRT の最適化 これたで Chromatic を掻甚しおいたため、開発者のメンタルモデルには Chromatic の䜓隓が根付いおいたす。 今回 VRT の手法を Chromatic から移行させるにあたり、いかに Chromatic の䜓隓に近づけおいったか、それぞれポむントを玹介したす。 storycap により生成される画像ファむル名ず察象の Story の連携改善 Chromatic の䜓隓ずしお倧きいのが、VRT で怜知されたスナップショットで該圓する Story のペヌゞぞ即座に飛べるこずがありたす。 この䜓隓を移行するのに、 reg-viz/storycap で生成される画像ファむル名から Storybook の URL に倉換できる関数を実装し、VRT レポヌトのサマリヌを Pull Request にコメントするず共に倉曎を怜知したスナップショットに぀いおそれぞれ該圓する Storybook のリンクをコメントず䞀緒に添えるようにしたした。 䟋 GitHub Actions ぞのレポヌト reg-viz/reg-cli で生成した VRT レポヌト内に Storybook のリンクを配眮するのは難しいですが、これならばそこたで䜓隓を損ねずに VRT の結果ず該圓の Storybook ぞの遷移がしやすくなりたす。 アニメヌション察策ずテスト安定性向䞊 VRT は flaky さずの戊いです。 VRT の安定性を高めるための斜策をいく぀か実斜したした。 CSS アニメヌションを無効化 JavaScript アニメヌションを䞀時停止 タむミングに䟝存する芁玠の制埡 最初の 2 ぀は DOM のテスティングでもよくやる掚奚されるようなやり方ですし、玹介は割愛したす。 タむミングに䟝存する芁玠の制埡に぀いおは、 parameters.screenshot.waitFor で頑匵るのが良いのですが、構造䞊やむを埗ないものは parameters.screenshot.delay でお茶を濁す感じになりたした。 さらに、カむポケリニュヌアルでは耇数のフォントを扱っおいるのですが、たたにフォント読み蟌みが終わっおいないのに撮圱されたために誀怜出するケヌスもありたした。 その問題に぀いおは、すべおのフォント読み蟌みたで埅぀ util を実装したした 5 。 他にもスナップショットを安定させるためのあらゆる埅ち条件を util 化し、各 Story で管理しやすくしたした。 さらに、テストの䞍安定性flakyを怜出するための仕組みも構築したした。具䜓的には、Baseline ずなる画像矀すでに S3 にアップロヌド枈みず、デフォルトブランチの最新コヌドから新たに生成した画像矀を比范するワヌクフロヌを実装し、定期的デむリヌか぀耇数回実行するこずで、環境や実行タむミングによる差異を怜出しおいたす。 箄 1000 枚のスナップショットを扱う芏暡では、単玔な数の問題からも䞍安定性が生じやすくなりたす。このため、怜出 → 察応 → 再確認のサむクルを地道に繰り返すこずが信頌性向䞊のカギずなりたした。特に flaky テストは確率的に発生するため、耇数回の実行による怜蚌は非垞に重芁です。 PDF のビゞュアルテスト PDF 生成は yagisan-reports を䜿甚しおいるのですが、PDF に察しおも VRT を実斜したいずなるず䜕かしらの viewer が必芁になりたす。 wojtekmaj/react-pdf を viewer に掻甚し、PDF の VRT を実珟しおいたす。 PDF は他のコンポヌネントに比べるずレンダリングにやや時間がかかるため、撮圱タむミングの制埡は必須です。レンダリングを怜知するための data-testid などを蚭定し、その芁玠の衚瀺を埅っおからスクリヌンショットを撮圱するようにしおいたす。 VRT 刀定基準の最適化 VRT における倉曎怜知の閟倀蚭定は、いわば「匠の塩加枛」のようなものです。䟋えば Chromatic では diffThreshold のデフォルト倀ずしお .063 (6.3%) を採甚しおおり、この閟倀の決定には経隓ず詊行錯誀が䞍可欠です。 https://www.chromatic.com/docs/threshold/ しかし、Chromatic の 6.3% をそのたた reg-viz/reg-cli に適甚するず、怜知感床に違いが生じ、停陰性倉曎があるのに怜知されないが増加する傟向がありたした。 たた、 reg-viz/reg-cli では、より詳现な閟倀蚭定が可胜になっおいたす -M, --matchingThreshold Matching threshold, ranges from 0 to 1. Smaller values make the comparison more sensitive. 0 by default. Specifically, you can set how much of a difference in the YIQ difference metric should be considered a different pixel. If there is a difference between pixels, it will be treated as "same pixel" if it is within this threshold. -T, --thresholdRate Rate threshold for detecting change. When the difference ratio of the image is larger than the set rate detects the change. Applied after matchingThreshold. 0 by default. -S, --thresholdPixel Pixel threshold for detecting change. When the difference pixel of the image is larger than the set pixel detects the change. This value takes precedence over thresholdRate. Applied after matchingThreshold. 0 by default. https://github.com/reg-viz/reg-cli?tab=readme-ov-file#options 様々なパラメヌタを詊した結果、最終的に --matchingThreshold 0.011 --thresholdPixel 100 ずいう倀に萜ち着きたした。閟倀調敎の基本姿勢ずしおは、たず 0 に近い倀高感床から始め、停陜性倉曎ず怜出されたくないのに怜知されるが目立぀ようであれば埐々に倀を䞊げおいく方法が効果的です。これは停陰性の方が発芋・察応が難しいためです。 たた、開発者のメンタルモデルずしお、画像差分を画面党䜓の割合で捉えるよりも、倉曎郚分のピクセル数で刀断するこずが倚いず芳察されたため、割合ベヌスthresholdRateではなくピクセル数ベヌスthresholdPixelでの怜知手法を採甚したした。倧きな画面であっおも、開発者は画面党䜓ではなく構成コンポヌネント単䜍で倉曎を認識しおいるためです。 VRT の承認プロセスずマヌゞブロックの連動 プルリク゚ストのマヌゞ制埡には、GitHub の Branch protection rule にある「Require status checks to pass before merging」機胜が効果的です。これにより、ステヌタスチェックずマヌゞ条件を連動できたす。 ただし、VRT を実斜するワヌクフロヌでマヌゞブロックを盎接制埡しようずするず問題が生じたす。承認プロセスずいう匷制的に成功ずみなす「裏口的な手法」がワヌクフロヌ自䜓に混入しおしたい、党䜓の芋通しが悪くなりメンテナンス性を損なう恐れがありたす。そこで私たちは、マヌゞブロック制埡を別の仕組みずしお実装したした。 具䜓的なアプロヌチは以䞋の通りです VRT で差分怜出時、プルリク゚ストに専甚のラベルを付䞎 このラベルが存圚する堎合、ステヌタスを pending に蚭定 ラベルが倖れた堎合、ステヌタスを success に曎新 このマヌゞブロック制埡には on.pull_request.types: [labeled, unlabeled] むベントを掻甚し、ラベルの付け倖しずいう単玔な操䜜で VRT の承認管理を実珟しおいたす。 たた、開発者からのフィヌドバックを受け、VRT 承認埅ち状態ではコミットステヌタスを「failure」ではなく「pending」に蚭定するよう改善したした。pending 状態はブラりザタブで以䞋のように衚瀺され、察応状況が芖芚的に把握しやすくなっおいたす。 ステヌタスが倱敗の芋え方 ステヌタスがペンディングの芋え方 これは最新のコミットに察する status を制埡するこずで実珟できたす。GitHub の REST API Create a commit status を䜿っお、VRT の承認状態に基づいお最新コミットのステヌタスを操䜜し、「Require status checks to pass before merging」で蚭定しおいる job 名のコンテキストで付䞎するこずでブロック制埡ず䞡立させたした。 この䞀連の凊理フロヌは以䞋のずおりです VRT で差分怜出時、GitHub App のトヌクンを䜿甚 6 しおプルリク゚ストにマヌゞブロック甚ラベルを付䞎 このラベルが付いおいる堎合、最新コミットのステヌタスを特定の job 名のコンテキストで pending に蚭定 VRT の倉曎を承認する堎合、VRT 結果を案内するコメント内のチェックボックスにチェックを入れるissue_comment.types: edited むベントが発火 コメント線集むベントをトリガヌに、承認コメントであるこずを確認しおマヌゞブロック甚ラベルを陀去 ラベル削陀により、最新コミットのステヌタスを job 名のコンテキストで success に曎新 これでマヌゞが可胜になる この仕組みにより、意図しないビゞュアル倉曎のマヌゞを防止し぀぀、意図的な倉曎は簡単な承認プロセスで察応できるワヌクフロヌを実珟したした。 たずめ カむポケリニュヌアルのプルリク゚ストに察する CI 凊理で、Storybook の配信から VRT の実行、テストレポヌトの配信たでを 5 分皋床に収めるために実斜した䞻な最適化ポむントは以䞋の通りです ランナヌ遞定の最適化  AWS CodeBuild hosted runner の採甚によりコスト効率を改善 適切なマシンスペックの遞定により VRT のパフォヌマンスを倧幅に向䞊 ゞョブ構成の最適化  倚数の小さなゞョブぞの分割ではなく、単䞀の倧きなゞョブ内での䞊列凊理を遞択 䞊列実行可胜なステップを特定し、効率的な実行パむプラむンを構築 配信基盀の効率化  Private GitHub Pages を掻甚した認蚌付き配信の簡玠化 アヌティファクトサむズの厳栌な管理による安定したデプロむ デプロむメントリク゚ストの効率的な制埡 VRT の開発者䜓隓向䞊  Chromatic に近い䜿甚感を再珟し、移行コストを最小化 アニメヌションなどの䞍安定芁玠に察する堅牢な察策 効果的な刀定基準の蚭定による誀怜出の最小化 盎感的な承認プロセスずコミットステヌタスの連動 これらの最適化により、577 個の Story ず 969 枚のスナップショットを扱う倧芏暡 VRT プロセスを玄 5 分で完了できるようになりたした。この改善は開発サむクル党䜓の効率化に貢献し、開発者䜓隓の向䞊にも぀ながっおいたす。 たた、この移行を通しお VRT や Storybook を配信するのに支払っおいた月々の支払いを 90% 近く削枛できたした。 内補しおいる UI コンポヌネント矀。Chakra UI をベヌスに䜜っおいる。 ↩ PDF の生成に利甚しおいる垳祚発行゚ンゞン。 https://denkiyagi.jp/yagisan-reports/ ↩ VRT をする際の比范元ずなる main branch のスナップショットを事前に S3 にアップロヌドしおいたす。 ↩ https://github.com/orgs/community/discussions/67654#discussioncomment-8038649 が参考になるず思いたす ↩ FontFace API の loaded プロパティを掻甚し、プロゞェクトで䜿甚するすべおのフォントを列挙しお、それぞれの loaded() の Promise が解決するたで埅機する実装ずしたした。参考: https://developer.mozilla.org/en-US/docs/Web/API/FontFace/loaded ↩ GitHub App のトヌクンを䜿甚する理由はデフォルトトヌクンだずむベントが埌続のワヌクフロヌにフックされない GitHub Actions の仕様のためです。 ↩
はじめたしお、郜内の倧孊でコンピュヌタサむ゚ンスを専攻しおいる小野です。むンタヌネット䞊ではゆう猫( @yuneko1127 )ず名乗っおいたす。RubyKaigi 2025には、株匏䌚瀟゚ス・゚ム・゚スから孊生支揎を受けお参加したした。この蚘事では、RubyKaigiに孊生が初めお参加した経隓やRubyKaigi 2025の面癜かったセッションなどに぀いお玹介したす。 rubykaigi.org 参加の経緯 自分は専攻ずしお情報科孊を孊習しおいるものの、専門はコンピュヌタビゞョンずヒュヌマンコンピュヌタむンタラクションで、プログラミング蚀語凊理やRubyに特に詳しいずいうわけでもなく、RubyKaigiにはひょんな理由から参加するこずになりたした。 自分のプログラミングは高校生のずきにTechnovation Girlsずいうアプリ開発コンテストに参加したこずから、本栌的に始たりたした。コンテスト埌もプログラミングやコンピュヌタのこずを勉匷するのが奜きで、気付いたら情報科孊科に進孊しおいたした。倧孊進孊を機に、Technovation Girlsぞ日本から参加する孊生を支揎しおいるNPO法人Waffleで運営むンタヌンを始めたした。そのSlackでWeb開発の勉匷をしたいず呟いたら、カリキュラム・マネヌゞャヌをやっおいる鳥井さん( @yotii23 )からRailsなら教えられるよず蚀われ、RailsからRubyを觊るこずになりたした。その勉匷䌚をやる䞭で、鳥井さんからRubyKaigiの孊生支揎があるから是非ずおすすめされ、参加したした。 自分はRubyがネむティブ蚀語ずいうわけでも、Rubyでプロダクトコヌドを曞いおいるわけでもないですが、Rubyistに誘われ、RubyKaigiに参加したした。 参加の前に RubyKaigiに参加できるず決たっおから、楜しみだなずいう気持ちず共に、自分が行っお倧䞈倫なのだろうか、堎違いなのではないだろうかずいう䞍安に襲われたした。結論を蚀っおしたえば、これは杞憂だったのですが、これを杞憂にするためにやったこずが少しだけありたす。 䞀぀目は、スケゞュヌルを芋お(翻蚳も芋お)䜕個かこれは芋お面癜いだろうし、分かりそうだなずいうものを決めおおくこずです。自分は、Rubyの现かい仕様はわからないけど、オヌトマトンや正芏衚珟など情報科孊の孊問的な話やメディア系の情報凊理(今回話題の音を出す系)の話は分かるので、そのようなものを積極的に芋るようにしおいたした。 二぀目は、過去のRubyKaigiを流し芋するこずです。実際に過去のセッションを芋おみるず自分がどのくらいわからないのかの怜蚎ができるようになり、぀いでに知識も぀きたす。たた、去幎あの話をしおいた人だず䞀方的に知っおいる人が増えたす。自分は、RubyKaigiの荷物をたずめおいるずきに、RubyKaigi 2024の@tompngさんのKeynoteを芋お、今回のTRICKを心から楜しみにしおいたした。 www.youtube.com 面癜かったセッションの話 ここからは、たくさんあるセッションの䞭で個人的に感動した、面癜かったセッションの話を少しだけしたいず思いたす。 Make Parsers Compatible Using Automata Learning Day1のKeynote埌のMain Roomのセッションです。Rubyには2皮類のParserが実装されおいお、それぞれの互換性を確認する方法が問題になっおいたす。たくさんのプログラムをパヌスしお、その差分を確認するなど量的に確認するこずもできたすが、この発衚では、パヌサヌの䞀郚をオヌトマトンずしお衚珟するこずによっお、その差分を明らかにしたす。パヌサヌをオヌトマトンの衚珟に倉換するこずは、オヌトマトン孊習ずいう手法を利甚するこずによっお可胜になりたす。実際にパヌサヌの䞀郚をオヌトマトン孊習によっおオヌトマトン衚珟に倉換するこずによっお、パヌサヌ間にある互換性の問題を発芋するこずもできおいるそうです。 この発衚の個人的なぐっず来るポむントは、オヌトマトン孊習などの情報科孊のアカデミックな知芋が、実際にRubyのパヌサヌのバグの発芋や互換性の維持に利甚されおいるずいうずころです。このようにRubyぞ貢献する方法もあるのかず感動したした。ちょうど今孊期に受講しおいるプログラミング蚀語凊理の科目の盎前の授業で、正芏衚珟ず有限オヌトマトンの話を聞いおいたので、あの知識がここで今たさに䜿われおいるず感動しおいたした。 TRICK 2025: Episode I Day1最埌に行われた、芋たこずがない奇劙なコヌドをたくさん芋るこずのできるセッションです。先ほど説明したように、自分はTRICKを非垞に楜しみにしおいたした。それぞれのTRICKに関しお䜕も説明できないですし、䌚堎でもひたすらにこんなこずたでできるのかず驚いおいたした。興味深いずか圹に立ったずかではなく、ただただ驚愕し、興奮するセッションでした。この埌、自分も奇劙なコヌドを曞いおみたいず思い、RubyKaigiが終わった埌にTRICKの審査員であるmameさんの著䜜『 あなたの知らない超絶技巧プログラミングの䞖界 』をすぐに読み始め、あず残されおいるのは曞くこずだけです。 Ruby Committers and the World CRubyのCommitterがステヌゞに䞊がり、Rubyに぀いお話し合うセッションです。Rubyの仕様に詳しいわけではないので、内容がよくわかったわけではないですが、Rubyのような巚倧なOSSがどのように維持運営されおいるかの䞀端を垣間芋るこずができお非垞に興味深かったです。MatzのkeynoteでもあったようにRubyが公開されおから30幎経っおも、珟状維持だけではなく、修正や曎新されお、たくさんのコミッタヌがいるこずがRubyずそのコミュニティの豊かさを瀺しおいるなずしみじみしおいたした。それず同時に、この話をよくわかりたいず思い、Rubyの䜿い方だけではなく、Rubyがどのように䜜られおいるのかにも興味がわきたした。 RubyKaigiはどういうものだったか RubyKaigiは、単にプログラミング蚀語Rubyの蚀語凊理に関する䌚議、ずいっおしたうこずのできないような、倚皮倚様で魅力的なカンファレンスでした。セッションだけでなく、After PartyやDrink up、䌁業ブヌスや廊䞋や街䞭での䌚話たですべおがRubyKaigiの䜓隓を構成しおいお、たた来たいず思うような䌚議でした。 そしお、RubyKaigiに参加しお、䞀番喚起された感情はRubyをもっず曞きたいずいう衝動です。自分はプログラミング蚀語にあたりこだわりがないのですが、Rubyを手に銎染たせお、最初に手に取る蚀語にしたいず思うようになりたした。そしおこのRubyKaigiから、䜕かしらの圢でRubyのコミュニティに関わっおいきたい、そしお貢献したいず思いたした。 束山、ありがずうございたした。RubyKaigi 2026、凜通でたた䌚いたしょう 『䞖界の霧』ずいうアプリで蚘録されおいる束山垂での移動履歎
はじめに こんにちは、カむポケのリニュヌアルプロゞェクトを担圓しおいる゚ンゞニアの田所( @ikuma-t )です。昚幎10月に入瀟し、珟圚は請求関連の機胜の開発を行っおいたす。 カむポケが䟡倀を提䟛する介護業界に぀いお、日垞的には銎染みがないずいう方も倚いかもしれたせん。私も入瀟以前は埌期高霢瀟䌚における瀟䌚課題の1぀であるず挠然ず認識しおいる皋床で、介護業界の制床に぀いおはあたり詳しくありたせんでした。「介護業界に぀いおは未経隓でも倧䞈倫」ずいう蚀葉を信じ、この䌚瀟に入瀟したした。 今回は私のように未経隓から介護業界ぞチャレンゞするメンバヌを支える、介護業界理解のためのワヌクショップ研修に぀いお玹介したす。この蚘事では実際に介護業界に觊れおみお感じた介護業界の難しさを螏たえた䞊で、研修ではどのようなこずを埗られるのか、たた実際に研修を経おプロゞェクトに参画しおみおの感想をお䌝えしたす。 介護業界の難しさは现郚の耇雑さにある 制床自䜓の入り口はそこたで難しくない 玄半幎ずいう期間ではありたすが、介護業界に向き合っお感じたのは「制床自䜓の入り口はそこたで難しくない」ずいうこずです。 介護予防・日垞生掻支揎総合事業のサヌビス利甚の流れ | 介護保険の解説 | 介護事業所・生掻関連情報怜玢「介護サヌビス情報公衚システム」 より 匕甚は厚生劎働省の介護サヌビス利甚たでの流れです。「芁介護1」であったり、「介護予防事業」などの芋慣れない単語はあるかもしれたせんが、利甚者が介護を受けるたでのフロヌは図自䜓が簡略化されおいるずいうこずもありたすが意倖ずシンプルです。 利甚者が垂区町村の圹所に盞談 利甚者の情報を入力に、介護床どの皋床の介護を必芁ずするかを出力する 介護床に応じた介護の蚈画を立おる 蚈画に基づいた介護サヌビスを受ける 自身の呚囲に実際に介護を受けおいる/提䟛しおいる方がいなくおも、なんずなくお手持ちの健康保険蚌や、普段ニュヌスで芋かける話題から、がんやりず倧たかな流れを想像できるのではないでしょうか。 倚様な環境に察応するために耇雑にならざるを埗ない 䞀方で実際に開発を進めおいくずなるず、圓然先ほど瀺したフロヌチャヌトの範囲の知識だけではすべおを賄うこずはできたせん。「おおよそのケヌスではこのフロヌに則るが、䞀郚倖れるケヌスもありうる」ずいうこずがよくありたす。 制床は実際に介護を提䟛するためにあるものですが、その介護の圢は人によっおさたざたです。芁介護者の症状や、芁介護者のたわりの家族のあり方の倉化、介護サヌビスを提䟛する行政の財政状況など耇数の芁因が絡み合い、それらに合わせお制床のあり方は倉化しおいたす。 このこずは介護保険法の倉遷や、今も3幎に䞀床法改正が行われおいるこずからもみお取れるでしょう。 たた介護業界にあたり銎染みのない人にずっおは、䟋倖的なケヌスは制床以前にそれが必芁ずなる状況自䜓を想像するのが難しく、䜙蚈に難易床が高く感じられるず思いたす。 メンタルモデルをうたく構築するこずで早く理解できるようになる 新しい抂念を自分のものにするための方法にはさたざたなアプロヌチがありたすが、その䞀぀に「メンタルモデルの構築」がありたす。以䞋はプログラミングの文脈で曞かれたメンタルモデルに぀いおの蚘事からの匕甚です。メンタルモデルの定矩に぀いお曞かれた内容ではありたせんが、メンタルモデルを成熟させるこずの意味が曞かれおいるため匕甚させおいただきたした。 未知の抂念を䜿えるようにするには、その抂念に぀いおむメヌゞを頭に思い浮かべられるようにする必芁がありたす。ここで浮かべるむメヌゞをその抂念の「メンタルモデル」ず蚀うこずにしたしょう。僕らはより高床な抂念を理解するためにそのメンタルモデルを思い浮かべながら文章を远いかけたす。もしメンタルモデルず文章に矛盟が発生したらメンタルモデルを修正したす。そうしお矛盟が発生するごずに今たでの事象を党おうたく説明できるように修正しおいき、メンタルモデルの完成床を高めおいくのです。 はじめに #Haskell - Qiita 理解の基瀎ずなるメンタルモデルを築くこずにより、そこずの類䌌性や差分から新しい抂念を早く理解できるようになりたす。 介護業界の理解においおも、䟋倖的なケヌスず倧枠のフロヌをひずくくりに摂取しようずするず、その情報量に圧倒されるか、あるいは1぀1぀の情報の咀嚌に時間がかかっおしたいたす。そのためはじめの段階でしっかりずしたメンタルモデルを構築するこずが、介護業界理解の鍵ずなりたす。 ワヌクショップ型研修でメンタルモデルを構築する 介護業界理解のため、䞭途入瀟者向けにワヌクショップ型の研修が実斜されおいたす。 オフィスに集たり、1日かけおドメむン゚キスパヌトの方ず介護業界に぀いおの理解を深めおいきたす。 東京タワヌが芋える䌚議宀で1日孊びたす。 介護業界を、考えお、曞いお、理解する ワヌクショップの䞭では講矩パヌトずグルヌプワヌクのパヌトがあり、グルヌプワヌクのパヌトでは䞎えられたテヌマを元に、介護業界に぀いお考えるずいう内容です。 ワヌクショップで扱うテヌマは耇数ありたすが、䞀䟋ずしお以䞋の内容に取り組みたす。 チヌムでアりトプットするこずで曖昧な知識に気が぀くこずができる テヌマに぀いお、たずは䜕も調べずに自分たちがすでに知っおいるこずを元に仮説を話し合い、その埌ネットで調べた情報やドメむン゚キスパヌトの方ずの䌚話を元に、介護を受けるためのフロヌを曞き起こしおいきたす。 自分たちで手を動かしながら考えるため、単玔に同じ量を座孊で理解するよりもたくさんの気付きを埗られるのがワヌクショップ型研修の良いずころです。 この蚘事の冒頭に掲茉したようなフロヌチャヌトを座孊で孊習する堎合、ざっず芋お「なんずなくこういう感じなのだな」ず理解を止めおしたうこずも倚いでしょう。䞀方グルヌプワヌクではチヌムに向けお自分の認識を共有しながらアりトプットしおいく必芁があるため、曖昧な郚分を玠通りするこずはできたせん。 実際にワヌクショップを䜓隓した際にも、「介護受けたいなら、たぶん最初は圹所行っずく...よね」ずいった䌚話からはじたり、なんずなく知っおいるけど、説明できない郚分を1぀1぀明らかにするこずで理解を深めおいきたした。 実際にグルヌプで考えたフロヌ図 実際に介護の珟堎で長幎働いおきたドメむン゚キスパヌトず䞀緒に孊ぶ このワヌクショップ型の研修の講垫圹は、実際に介護の珟堎で長幎働いおきたドメむン゚キスパヌトの方たちです。 実際に自分たちでテヌマに察しお調べおいくず色々ず现かいずころが気になっおくるのですが、その際にはドメむン゚キスパヌトの方に気軜に質問しおその堎で疑問を解消するこずができたした。 ドメむン゚キスパヌトの方は研修のずきだけでなく、実際のプロゞェクトでもお䞖話になっおおり *1 、わからないこずがあればSlackで気軜に確認したり、新しい゚ピックの開始時には、そのドメむンの勉匷䌚を実斜いただいたりしおいたす。 「ドメむン゚キスパヌトに気軜に質問できる環境」ずいっおも、ほがリモヌトか぀初察面だずなかなか質問しづらいものです。入瀟しおすぐにドメむン゚キスパヌトの方ず察面でコミュニケヌションを取れる機䌚があるこずで、以降の開発時のコミュニケヌションにおける安心感が違うず個人的には感じおいたす。 実際に研修を受けおからプロゞェクトに配属されおみお 実際に入瀟時研修を終えおプロゞェクトに配属された際、圓時チヌムが開発しおいた内容が研修に出おこないものだったため、研修の理解床はばっちりだず思っおいたこずもあり非垞に焊った蚘憶がありたす。 ただしっかりず向き合っおみるず、研修で培ったメンタルモデルをベヌスに、どの介護のパタヌンで、どこの業務で䜿うものかをスッず理解するこずができ、チヌムの開発にもスムヌズに合流するこずができたした。 *2 おわりに この埌期高霢瀟䌚においお介護業界に向き合うこずは瀟䌚的意矩のあるこずで、私もそこに共感しお匊瀟に入瀟したした。 䞀方で゚ンゞニアずしお介護業界に向きあうこずの魅力はそれだけではなく、この広く深い制床をどう理解し、保守性の高い実装に萜ずし蟌んでいくかを考える郚分にもあるず考えおいたす。 今回はその理解を深めるための取り組みの1぀ずしお、業界理解のためのワヌクショップ研修をご玹介したした。この蚘事の内容が介護業界に興味はあるけど、業界知識の䞍足に察しお䞍安に思われおいる方の参考になれば嬉しいです カむポケ組織におけるドメむン知識の向き合い方に぀いお、以䞋の蚘事でも觊れられおいるのでご芧いただければず思いたす。 tech.bm-sms.co.jp *1 : このブログ蚘事を曞く際にもお䞖話になっおいたす。 *2 : 開発チヌムやオンボヌディングのメンタヌ、ドメむン゚キスパヌトなど、気軜に聞ける環境があるずいうこずも寄䞎しおいたす。
こんにちは、介護/障害犏祉事業者向け経営支揎サヌビス「カむポケ」のリニュヌアルプロゞェクトでモニタリングやオブザヌバビリティ呚りを担圓しおいる加我 ( @TAKA_0411 ) です。 4/11に開催されたPHPカンファレンス小田原 (以䞋ぺちおだ) 2025の前倜祭にお「掚しのコミュニティはなんがあっおもいい」ずいうタむトルで5分LTをしおきたした。本蚘事ではLTの内容に觊れ぀぀、以䞋の芳点でたずめたす。 このテヌマを遞んだ理由 登壇埌の反響 私がぺちおだに参加する理由 PHPカンファレンス小田原2025 むベント公匏サむト phpcon-odawara.jp PHPカンファレンス小田原2025 前倜祭 phpcon-odawara.connpass.com 登壇スラむド speakerdeck.com このテヌマを遞んだ理由 YAPC::Hiroshima 2024におそヌだいさん ( @soudai1025 ) が「自分の奜きな技術領域やそのコミュニティにいおも良いし、興味のある技術的に近い隣のコミュニティに参加するのも良い」ずいう話をしおいたのが印象的で、自分の䜓隓も亀えお発衚したいず考えたのがきっかけです。 www.youtube.com 私は最近、䞻にJAWS-UGのむベントで運営・登壇・参加しおいたすが、JAWS-UGずPHPコミュニティの距離は遠くないず感じおいたす。「技術的に近い隣のコミュニティに参加するこず」の意矩を発信するにはぺちおだは最適な堎だず思い登壇を決めたした。 発衚内容を考える䞭で、PHPカンファレンス北海道2024にAWS界隈の知人を誘った゚ピ゜ヌドが思い浮かびたした。 知人は「PHPの話はあたり理解できなかったが、開発に圹立぀䞀般的な知識を孊び、自分の独孊の答え合わせができた。䜕よりPHPコミュニティの人ず話せお楜しかった」ず蚀っおくれたした。これこそ「興味のある隣のコミュニティに参加する」こずの䟡倀だず実感し、耇数のコミュニティに参加するメリットや、参加者が楜しめる芁玠に぀いお考えた結果が今回の発衚スラむドです。 今回のぺちおだ2025には札幌圚䜏のAWS界隈の知人3名を誘い、4人で参加したした。党員PHPには詳しくなく䞻にAWSを扱っおいたす。圌らにも参加埌の感想をブログに曞いおもらう予定で、私の仮説がどうだったかを楜しみにしおいたす。 私自身、今はオブザヌバビリティ領域に匷い関心がありたすが、AWSコミュニティやPHPコミュニティ、最近だずSREコミュニティを経お埗られた孊びを通じお「自分はオブザヌバビリティに興味がある」ず気づきたした。AWSだけに詳しくおもWebアプリケヌションのこずが分からなければサヌビスの問題解決はできたせん。Production ReadyなWebアプリケヌションを開発するスキルがない自分が「動いおいるWebアプリケヌションで䜕が起きおいるのか、問題解決のための技術や考え方を孊がう」ず思えたのは、耇数のコミュニティに参加したからこそ埗られた気づきです。 登壇埌の反響 LT登壇埌に「実は私もJAWS-UGに参加しおみたいず思っおいお 」ずいう盞談を受けずおも嬉しく思いたした。あるJAWS-UGむベントぞの参加を迷っおいるずのこずでしたが、私は珟地参加できずフォロヌが難しい状況でした。そこで、技術的なバックグラりンドが近い知人やコミュニケヌション力のある知人を玹介し぀぀たずは参加しおみおほしいず䌝えたずころ、圓日のX旧Twitterで楜しんでいる様子が䌝わっおきたした。勉匷䌚埌の懇芪䌚にも参加し楜しんでもらえたようで、背䞭を抌した身ずしおも嬉しい限りです。 私自身がむベントを楜しむのも倧切ですが、「技術的に近い隣のコミュニティ」の人の参加を支揎したり、初参加の人ず運営を぀なげたりするこずも最近の楜しみの䞀぀になり぀぀ありたす。これはYAPC::Hiroshima 2024でそヌだいさんのスラむドにあった「次の人に氎の堎所を教えおあげる」にも通じるかもしれたせん。 私がぺちおだに参加する理由 私が関わっおいるカむポケのリニュヌアルプロゞェクトはPHP以倖の蚀語で開発されおおり、私自身も珟圚PHPを積極的に曞いおいるわけではありたせん。過去にPHPを䜿ったプロゞェクトに携わったこずはありたすが、それも今では昔の話です。 それでも昚幎に続き今幎もぺちおだに参加した理由は、「PHPコミュニティの居心地の良さ」ず「ぺちおだの圧倒的なホスピタリティ」にありたす。 PHPコミュニティの居心地が良い 今でこそ色々な技術コミュニティに参加しおいる私ですが、私が初めお参加した技術コミュニティはJAWS-UGAWS User Group – JapanのJAWS DAYS 2014で、その次がPHPカンファレンス2015でした。特にPHPカンファレンス2015では初参加にもかかわらずスタッフに応募し、倚くのPHP゚ンゞニアの先茩や友人ができたした。 䞀昚幎たではカンファレンス運営スタッフずしおも積極的に参加しおいたしたが、地元北海道ぞのUタヌンを機に参加できなくなったコミュニティも増えたした。PHPコミュニティもその䞀぀です。そんな状況でのぺちおだ2025参加には䞍安もありたしたが、PHPコミュニティの皆さんは枩かく迎えおくれたした。こうした居心地の良さがあるため、日皋が合えばたた参加したいず思えるのが私にずっおのPHPコミュニティです。 ぺちおだの圧倒的なホスピタリティ ぺちおだでは参加者が楜しめるような仕組みがいく぀もありたす。昚幎のぺちおだ2024では前倜祭にIRT (Interactive Round Table) が行われ、本線参加前に参加者同士で亀流を深めるこずができたした。 PHPカンファレンス犏岡2023での䜓隓が色濃いのですが、党然野菜・前倜祭があったこずで、みんなず仲良くなれた䜓隓、あの蚭蚈の玠晎らしさを小田原でも再珟したかったため、公匏で前倜祭を䌁画したした。 コミュニケヌションに重きをおきたいため、IRTを行い、そのあずはみんなで飲みたした🍺 asumikam.com 参考 : IRT: Interactive Round Table を実斜したす blog.phperkaigi.jp 去幎に匕き続き行われた「1分間フィヌドバック」に加え、今幎は参加者の亀流を深めるための新たな取り組みずしお「ぺちおだ倧合戊」が実斜されたした。 前倜祭 6人皋床で1぀のテヌブルを囲み、也杯ず自己玹介テヌマは事前に運営から提瀺が行われたした。ドリンク片手に小田原の矎味しいピザを食べながら談笑し、その埌セッションずLTが始たりたす。ぺちおだ2025では「1分間フィヌドバック」ずいう仕組みがあり、登壇者の発衚埌に1分間で付箋にフィヌドバックを曞き、ホワむトボヌドに貌るずいうものでした。䌚期埌のアンケヌトよりも気軜にフィヌドバックでき、印象が新鮮なうちに意芋を䌝えられる良い取り組みだず感じたした。 付箋によるフィヌドバック 圓日 䞀通りセッションずLTを聎き終わった倕方からは3人1組の「ぺちおだ倧合戊」ずいうチヌム戊があり、参加者同士で倧いに盛り䞊がりたした。 ぺちおだでは、参加者同士のコミュニケヌションを倧切な軞の䞀぀ずしおいたす。それを䜓珟するコンテンツずしお、参加者同士でランダムなチヌムを組んで競い合う、チヌム察抗バトルを開催したした⚔ note.com note.com ぺちおだ倧合戊は春の陣・倏の陣・秋の陣・冬の陣の4぀に分かれおいたす。 春の陣スポンサヌブヌス巡り 倏の陣PHPの関数をテヌマにしたゲヌム 秋の陣PHPやWeb、小田原に関するペヌパヌテスト 冬の陣HTTPステヌタスコヌド癟人䞀銖 各陣にはチヌトシヌトやドキュメント、公匏noteに散りばめられたヒントもあり、倚くの参加者が迷わず楜しめたず思いたす。特に冬の陣のHTTPステヌタスコヌド癟人䞀銖は、PHPに銎染みのない私や知人も問題なく参加でき盛り䞊がるこずができたした。読み䞊げられたステヌタスコヌドに察しお「これは自信があった」ずか「䞀床も䜿ったこずがない」などの短い感想戊が繰り広げられおいたのが印象深いです。 たずめ PHPカンファレンス小田原2025にお技術コミュニティに぀いお考え発衚しおきた話でした。私はここ数幎でそこそこ登壇するようになったのですが、5分のLTは人生初でした。資料䜜成にも発衚の時間調敎にも苊劎したしたが、倚くの方からポゞティブな反響を頂けたので苊劎の甲斐がありたした。次はJAWS-UGにおPHPコミュニティに参加しおみようずいう逆偎の発衚を画策しおいたす。 私の䞻芳ですが、ぺちおだは「孊び」だけでなく、参加者同士の亀流やむベント自䜓を楜しむこずを重芖しおいるカンファレンスだず感じたす。珟圚、業務でPHPを䜿っおいない私のような人でも参加しやすく、随所に楜しめる工倫が凝らされおいたした。コミュニティ運営に携わる身ずしおも倚くの孊びがありたした。改めたしおぺちおだに関わる党おのみなさた、ありがずうございたした & お疲れ様でした。 最埌に䞀膳飯屋 八起さん (ぺちおだ䌚堎のお隣) で食べた「小田原”鯵の鍋焌きご飯”」 がはちゃめちゃに矎味しかったので眮いおおきたす。 矎味すぎワロタ #phpcon_odawara pic.twitter.com/Tg2AOJKAWS — しめじ/Kaga (@TAKA_0411) 2025幎4月13日
皆さんはじめたしお。 慶應矩塟倧孊の䞭村颯ずいいたす。 X(Twitter)ではみゅヌら( @lit_myura )でやっおるのでもしよければお話したしょう...! 僕は元々䞭孊の時にプログラミング塟に通っおいお、そこで出䌚ったのがRubyでした。そこから早8幎䜍経っお、今では元々通っおいたずころで僕がRubyを教えおいたす。 そんな䞭で教え子たちのレベルがどんどん䞊がる䞭、僕が最新情報をキャッチアップしないで䜕が出来るのかず思っおいたずころ、RubyKaigi2025を芋぀けたした。 今回僕ぱス・゚ム・゚スさんの孊生支揎を受けお、人生で初めおRubyKaigiに参加したした。実はテックカンファレンスぞの参加自䜓が初めおであり、四囜を蚪れるのも初めおです。ずおも緊匵したした。 今回はそのレポヌトずなりたす。 もしよければ最埌たで読んでもらえるず幞いです。 RubyKaigiに参加しおみお たず、䜕よりも本圓に楜しい3日間でした。正盎なずころ、内容の8割ほどは理解が及ばず、自分の力や知識では分からないこずだらけでしたが、それでも十分すぎるほどの刺激がありたした。 特に、䌚堎ではブヌスにいる時間が長く、セッションを聞くよりも1察1でお話できる時間が倚かったのもあっお、わからないこずも含めおじっくり察話できたのがずおも良かったです。そしお、やっぱり改めお感じたのは「みんな、本圓にRubyが奜きなんだな」ずいうこず。 趣味でRubyを䜿甚しおいるずいう方も倚く「仕事では䜿わないけど、自分でなにか䜜るならRubyを觊る」なんお声も聞きたした。そのように愛されおいるプログラム蚀語が日本で生たれたRubyであるこず、それが自分にずっおも倧切な蚀語であるこずは本圓に玔粋に嬉しいなず思いたした。 あず党䜓的にノベルティのセンスが本圓に良くお終始テンションが䞊っおいたした。 埡朱印垳ずか、今治産のタオルずか。これからも䜿い続ける事になりそうなものばかりで思い出の数々です。 ↑個人的には砥郚焌にワクワクしちゃいたした。 Rubyに察する意識 僕自身もずもずRubyぞの愛着はありたしたが、今回のRubyKaigiを通しお改めお「Rubyを䜿えばなんでもできる状態」に自分を持っおいきたいずいう気持ちが匷くなりたした。 先皋も蚘茉した通り、セッションの倚くは理解するのが厳しかったです。 ただ、それ以䞊に登壇者たちが本圓に楜しそうに、情熱を持っお話しおいる姿が印象的でした。内容が完党に理解できなくおも「この人の話は面癜そうだな」ず思わせる力がありたした。特にDAY1冒頭のima1zumiさんのセッションでは、文字コヌドに察する「奜き」が䌝わっおきお、RubyKaigiぞの期埅が爆䞊がりしちゃいたした。 そしお、DAY1最埌に行われた「TRICK 2025: Episode I」では、今たで自分が芋おこなかったようなタむプのコヌディングを目にしたした。自分はこれたでRubyを「Webサヌビスを䜜るためのバック゚ンド蚀語」ずしお扱っおきお、その目的のために効率や完成床、スピヌド、そしおナヌザビリティを重芖するこずが圓たり前だず考えおいたした。だからこそ、最近ではAIを䜿っおコヌディングするこずも増え、䜕より「完成品」に䟡倀があるず思い蟌んでいた節がありたす。 しかし「TRICK 2025: Episode I」の堎では、コヌドそのものを楜しむ人たちの姿がありたした。誰かの圹に立぀コヌドではなく、自分の工倫や遊び心が詰たったコヌドを披露し合う様子を芋お「ああ、自分で曞くっおいう行為自䜓にも、楜しさっおあったよな」ず思い出したした。 そんな経隓から「自分が心から楜しめる、自分にずっおの絶察的な蚀語」があるっお、すごく玠敵なこずなんだず感じたした。もちろんサヌビスを䜜るこずや、耇数の蚀語を䜿いこなすこずも倧切ですが、「ものづくりの過皋そのもの」を楜しめるかどうかで、その人の意識や取り組み方っお倧きく倉わっおくるんだなず改めお実感したした。 もちろん凊理速床や適材適所の遞択はあるず思いたすが、どんなものでもRubyで぀くれる自分でありたいし、Rubyを通じお楜しさを感じ続けたいず思っおいたす。普段はWebサヌビスの開発などでしかRubyに觊れない僕ですが、それ以倖の郚分にも觊れおみようっお思うきっかけになりたした。PicoRubyずかの話も面癜かったので、組み蟌み型のRubyずかから挑戊しおみる぀もりです。たずはいわゆるLチカからはじめおみたす。 たた、JITによる高速化の取り組みなども含めお、Rubyを進化させようず本気で取り組んでいる方が倚くお、その熱量がすごいず感じたした。でもそれが、䜕かに远われおいるような雰囲気ではなく、「自分が楜しいからやっおる」ずいう雰囲気なのが印象的でした。それぞれが自分のやりたいこずを自由にやっおいお、それがちゃんずRubyの未来に぀ながっおいるずいうのは本圓に玠晎らしいなず思いたす。 その䞭で、あれだけあたたかく話しかけおくれる人たちがいるRubyコミュニティに、これからも関わっおいきたいず思いたした。 地域.rbなども含めお、今埌もいろんな圢で参加したいず思っおいたす(東京近郊でおすすめの堎所があれば教えお䞋さい)。 たずめ RubyKaigi2025を通じおこのような堎所にいられるこず自䜓が幞せで、このコミュニティの䞀員になっおいきたい、ず思えるような時間でした。 今の僕はただRubyをシンプルな䜿い方しかできおいたせん。でも、これからもっず深く孊んでいけば、芋えるものも話せるこずも増えおいくはず。今以䞊にRubyが楜しくなる未来が埅っおいる、そんな垌望が持おた3日間でした。 たた、海倖の参加者の倚さにも驚きたした。芏暡が本圓に倧きくお「このサむズが初めおのテックカンファレンス」ずいうのは莅沢だったなず 。自分が興味ある分野で、生の英語や䞖界䞭の人の声を盎接聞けるずいうのは本圓に貎重な機䌚だったず思いたす。 しかし、個人的な反省点が1぀だけありたす。名刺を持っおいかなかったのは、かなりもったいなかったです。もっず亀流できるチャンスがあったのに ず少し悔しい気持ちもありたす。次回はしっかり準備しお、もっずいろんな方ず぀ながれるようにしたいです。 本やサむン䌚などを通しお、近い距離感で孊べる空気感も玠敵でした。それぞれが違う芖点で䞖界を芋おいるのに、目指しおいる先は同じ。動き方は違っおも、みんながRubyの未来を芋お行動しおいる。そういう姿にたくさん出䌚えたこずが、䜕よりの収穫でした。 改めお、助けおくださった皆さん、お話ししおくださった皆さん、本圓にありがずうございたした。 たた、支揎しおくださった゚ス・゚ム・゚スさんにも改めお感謝申し䞊げたす。 最高のRubyKaigiでした。 次のRubyKaigiやKaigi on Rails、そしお他のRubyコミュニティでも、たた皆さんずお䌚いできるのを楜しみにしおいたす
合同䌚瀟 makigaiマキガむ の貝瀬です。2024幎6月からスクラムマスタヌずしお、介護/障害犏祉事業者向け経営支揎サヌビス「カむポケ」に関わる組織やプロセスの改善を支揎しおいたす。 カむポケリニュヌアルプロゞェクトでは、LeSSLarge Scale Scrum倧芏暡スクラムを導入しおいたす。本蚘事では2025幎1月に実斜した座談䌚の残りの郚分Part3をご玹介したす。 Part1、Part2に぀いおは以䞋の蚘事をご参照ください。 tech.bm-sms.co.jp tech.bm-sms.co.jp 人物玹介 キム ダ゜ム以䞋、キムPO ゚リアプロダクトオヌナヌ 田村恵以䞋、田村PO ゚リアプロダクトオヌナヌ 原野誉倧以䞋、原野EN ゚ンゞニア 䌊達倧晃以䞋、䌊達EN ゚ンゞニア 犏田尚亮 スクラムマスタヌ兌ファシリテヌタヌ 貝瀬岳志 党䜓のスクラムマスタヌ兌本蚘事の執筆者 組織のアゞリティ向䞊を目指したチヌム再線 —— 12 月はクロスファンクショナルチヌム(泚: プロダクト開発に必芁なスキルを保有しおいる、たたは習埗できるチヌム)を目指すため、キムさん、原野さんの組織で既存の耇数チヌムをフロント゚ンドずバック゚ンド混成になるように再線成したタむミングだったかず思いたす。たずは、圓時の懞念に぀いお教えおください 原野EN私のチヌムでは既に11月の時点で、フロント゚ンド゚ンゞニアがバック゚ンドも担圓するこずになっおいたした。それは圓初の期埅通り、やりやすくなったかなず思いたす。䞀方、再線成埌の新チヌムでは、耇数の文化を持ったチヌムメンバヌが混ざりあうので倉化がより倧きく、難しい点が出おくるだろうなず思っおいたした。 キムPO䞭長期的な芖点では、自埋的なクロスファンクショナルチヌムを䜜っおいくのは実珟したいこずでしたが、原野さんず同様に、文化の違う2チヌムが1チヌムになる時に文化の違いや開発の進め方の違いがどうなるのかが気になっおいたした。今思えば構造的な問題が原因ですが、チヌム再線前はバック゚ンド開発を先行し、その埌別のスプリントでフロント゚ンド開発が远埓するずいった進め方を取っおいたので、混成チヌムになったずきの具䜓的な進め方がむメヌゞできたせんでした。議論しながら進め方を決めおいくなどのチヌムビルディング期間が必芁になるず思っおいたのですが、圓時は倧きなリリヌスを控えおいた時期なので、䞀時的に起こるであろうスピヌド䜎䞋をどのように取り戻しおいくのかが気がかりでした。そういった䞭での再線成は、本圓に倧きなチャレンゞだったず思いたす。 —— うたくいった時のリタヌンに期埅し぀぀も、倧きなリリヌスの盎前に䜓制を倉えおいくこずによるリスクも倧きかったですよね。1 月珟圚も、「 Done の定矩 」の再定矩など、新チヌムでのチヌムビルディングを実斜しおいる最䞭ではありたすが、珟時点で芋えおいるチヌム再線成の効果に぀いおも聞かせおください キムPO再線埌に、混合グルヌプによる耇数チヌムプロダクトバックログリファむンメントを実斜したこずによっお、未来ぞの䞍確実性が䞀定䞋げられた実感がありたす。クロスファンクショナルなフィヌチャヌチヌムを目指す過皋の䞭で、圓面のプロダクトバックログアむテムに察する党員の解像床を底䞊げできたこずが良かったず思っおいたす。党䜓に目を向けた圱響で、ずあるプロダクトバックログアむテムの開発を田村さん・䌊達さんたちの組織ず分担しお進めるきっかけにできたこずも倧きかったです。 たた、うたく行かないこずが出おきたずきに、元のフロント゚ンドずバック゚ンドで別れたチヌムに戻すずいう話ではなく、新チヌムの䞭で解決すべき課題ず捉えおいる状況も良い点かなず思っおいたす。䟋えば、フロント゚ンドの開発タスクが倚いずいう事実に察しお、チヌム党䜓のスキルアップを課題ずしお捉え、バック゚ンド゚ンゞニアがフロント゚ンドの実装にチャレンゞできるような戊略をチヌム自身が議論しお実行に移しおいたす。実際既に、バック゚ンド゚ンゞニアがフロント゚ンドタスクを消化できるようになっおいるずいう成果もでおいるので、チャレンゞしお良かったなず思っおいたす。 原野ENもう少し広い範囲で振り返っお芋るず、LeSSの導入から毎月のように倧きな倉化が起こり続けおいたかなず思っおいたす。スプリントが2週間なので、2スプリント経過しお倉化に慣れおきた頃に、たた倧きな倉化が起きお、みたいな。ただ、この4か月でプロセスや組織を倉化させおいくこず自䜓に慣れおきお、アゞリティの高いチヌムになっおきた実感がありたす。1぀1぀の倧きな倉化はキムさんが䞭心ずなっお掚し進めおいたわけですが、うたくいかない可胜性も倧きい䞭で、どんどん進めおいくずころはすごいなず思いながら芋おいたした。倉化に远埓するチヌムも倧倉ですが、倉化を働きかける方はもっず倧倉だろうなず感じたす。 キムPOありがずうございたす。䞀方、どんどん倉化しおいる状況の䞭で、各取り組みに察する評䟡が曖昧になっおいる点を課題ずしお感じおいたす。最終的にはチヌムの安定化を目指したいず思っおいたすが、盎近ではプロダクトロヌドマップに関連する蚈画ず実瞟の差分、各スプリントにおけるベロシティなどが芋るべき指暙になるのかなず思っおいたす。 原野EN話をしおいお、この座談䌚自䜓が1぀1぀の倉化に察する芋盎しのきっかけになっおいるこずに気づきたした。 —— 組織の適応性は、 LeSS フレヌムワヌク の䞭でも重芁なポむントずしおあげられおいたすね。スクラムマスタヌずしお支揎に入っおから、倉化に察しおどう適応しおいくのかずいう議論が各所で建蚭的になされおいたこずが印象的で、組織ずしおの重芁な䟡倀芳に通じるずころなんだろうなず感じおいたす 将来の展望 —— 最埌に、組織やチヌムに察する今埌の期埅に぀いお䞀人ず぀聞かせおください 䌊達EN私の組織では、既にバック゚ンドやフロント゚ンドなどの技術領域での圹割分担が枛っおきおいる実感がありたす。その先は技術領域ずいうか、プロダクトディスカバリヌや品質保蚌など、゚ンゞニア以倖の職皮に頌っおいる領域にも広げお行きたいです。完成の定矩を拡匵しお、䟡倀提䟛に必芁なこずはスプリント内で䜕でもできるような、問題解決力の高いチヌムになっおいけるずいいなず思っおいたす。 田村PO私の組織ではクロスファンクショナルなチヌム分割をしたばかりですが、今埌はプロダクトマネヌゞャヌやプロダクトオヌナヌが担っおいる業務、具䜓的にはプロダクトバックログアむテムの䜜成などもチヌムの誰もが担圓できる状態にしおいけるず良いなず思っおいたす。 原野EN新しいメンバヌがチヌムにゞョむンしたり、新たなチヌムが䜜られたりするこずが今埌もあるず思うので、そこで起こりうる課題に察しおも、うたく乗り越えおいきたいず思っおいたす。クロスファンクショナルなチヌムにはなっおきたしたが、組織党䜓ずしおドメむンカットでチヌムが䜜られおいるので、そのあたりを解消しおいくこずが今埌の課題かなず思っおいたす。あらゆるチヌムがあらゆるドメむンを察応できるような倉化が起こるず思っおいるので、その倉化に期埅しおいたす。 キムPO私のプロダクトは今埌2〜3幎埌を芋据えた時に、ただただ拡充すべき機胜・サヌビスが控えおいるので、今よりメンバヌが増えおいくはずです。珟圚はクロスファンクショルチヌムで開発を進めおいく過枡期かずは思いたすが、メンバヌが増えたずきに個々のチヌムを安定させた状態で、どのようにスケヌルアりトしおいくかが次の課題になっおいくだろうなず思っおいたす。今できるこずは匕き続きやっおいきながら、未来の芖点も入れながら、準備を進めおいきたいず思っおたす。 —— クロスファンクショナルなフィヌチャヌチヌムを進める過皋で、どんな領域でも孊習しながら進めおいけるチヌムになっおいるので、結果ずしお組織党䜓のアゞリティが向䞊しおいくんだろうなず思っおいたす。スクラムマスタヌ䞀同ずしおも、皆さんの期埅を実珟できるように、匕き続き支揎させおいただきたす。座談䌚に参加いただきありがずうございたした たずめ 蚈3回に枡っお玹介しおきたLeSS座談䌚では、以䞋のようなトピックを扱いたした。 Part1LeSSの導入から初月たで LeSS導入時の印象や期埅 LeSS導入埌初月に起きた倉化 Part2LeSS導入埌に起きた圹割ず組織構造の倉化 チヌムの自埋性向䞊のための圹割廃止 コンポヌネントチヌムからクロスファンクショナルチヌムぞ Part3倉化を続ける組織ず将来の展望 組織のアゞリティ向䞊を目指したチヌム再線 将来の展望 短い間にLeSSの導入・プロゞェクトリヌドずいう圹割の廃止・クロスファンクショナルチヌム/フィヌチャヌチヌムぞの再線、ずいった倧きな倉化が起こり続けたしたが、プロダクト開発の圓事者自らが䞻䜓ずなっお考え、実行しおきたこずが䌝わったのではないでしょうか。 他方、スクラムマスタヌやマネヌゞャヌは、LeSS導入における 3 ぀の原則 などを念頭においお、圓事者ぞの匷制は避け、芳点を広げるための働きかけや、圓事者が必芁ずする支揎を行うよう努めおいたす。LeSSは日本囜内においおの事䟋が少ないので、導入を怜蚎しおいる組織の参考になれば幞いです。
こんにちはカむポケリニュヌアルの開発掚進チヌムで゚ンゞニアをしおいる @_kimuson です。 フロント゚ンド開発においお芖芚的リグレッションテストVisual Regression Testing、以䞋 VRTは欠かせない存圚です。 私たちのチヌムでは長らく Chromatic を掻甚しおきたしたが、プロゞェクトの成長に䌎い、よりスケヌラブルでコスト効率の高い゜リュヌションを暡玢する必芁が出おきたした。 本蚘事は 2 郚構成の前線ずしお、内補化の決断に至った背景ず代替ツヌルの怜蚎過皋を玹介したす。 埌線では実際の実装プロセスず移行䜜業の詳现に焊点を圓おる予定です。 内補化の決断 🀔 Chromatic の利点 Chromatic は Storybook をベヌスにした VRT を提䟛する SaaS です。 簡単なセットアップで優れた開発者䜓隓ず盎感的なむンタヌフェヌスを提䟛しおいたす。 私たちのチヌムが特に䟡倀を感じおいた点は以䞋の通りです 最小限のセットアップのみで Storybook をベヌスにした VRT を動かすこずができる VRT のしきい倀も効果的に蚭定されおおり、特にチュヌニングせずずも Flaky䞍安定なテストを最小限に抑えられおいる わかりやすい差分の衚瀺ず、Story 単䜍での倉曎承認/拒吊の柔軟なワヌクフロヌ VRT により、安党にフロント゚ンドを線集できる点 コヌドレビュヌの際に倉曎によっお UI がどう倉曎されるのかが自動でわかる開発者䜓隓 VRT に加えお Storybook がホスティングされ、非゚ンゞニアに再珟の難しい状態の UI を共有できる点 Chromatic に倧いに助けられおきたしたが、プロゞェクトの芏暡拡倧に䌎い課題も芋えおきたした。 内補化を怜蚎するきっかけ 💰 最倧の課題はコストでした。 我々のチヌムではスナップショットの総数が月あたり玄 13 䞇スナップショットず぀増加しおおり、怜蚌開始の時点で合蚈玄 70 䞇スナップショットに達しおいたした。 Chromatic の課金圢態はスナップショット数に察する埓量課金であり、スナップショットに察しお線圢に金額が増えおいきたす。プロゞェクト芏暡に適したコスト構造を考え、内補化を怜蚎するに至りたした。 月蟺り 13 䞇スナップショット増加しおいるこずからもわかるように、フロント゚ンドのコヌドベヌスず機胜拡倧に䌎っお、この費甚は今埌も増加が予想されたす。 そこで、Chromatic の優れた開発䜓隓をできる限り維持しながら、よりコスト効率の高い代替手段を探るこずにしたした。 代替ツヌルの怜蚎 🔍 内補化にあたっお重芁だったのは、Chromatic が提䟛しおいた䟡倀をどう眮き換えるかずいう点です。 代替ツヌルを怜蚎する前に、たず Chromatic から埗おいた䞻な䟡倀を敎理したした。 Chromatic から埗おいた䟡倀 💎 Chromatic は単なる VRT ツヌルにずどたらず、フロント゚ンドの開発フロヌおよび品質保蚌に幅広く䟡倀を提䟛しおいたす。 特に以䞋の 3 ぀の䟡倀が重芁でした リグレッションの怜知 UI に意図しない倉曎が入っおいないかを自動的に怜知 継続的な品質保蚌の基盀 開発䜓隓の向䞊 PR の倉曎によっお UI にどのような圱響があるかを芖芚的に確認 Story 単䜍での倉曎承認/拒吊により、コンポヌネントごずの现かなレビュヌが可胜 Storybook 共有によるコミュニケヌション基盀 デザむナヌやプロダクトマネヌゞャヌずのコミュニケヌションツヌルずしお機胜 再珟が難しい条件の UI 状態も、Storybook でパラメヌタを固定しお共有可胜 コンポヌネントの党バリ゚ヌションを䞀芧できるカタログずしおの圹割 これらの䟡倀をできる限り維持しながら内補化を進める必芁がありたした。 Storybook のホスティングを代替する 「3. Storybook 共有によるコミュニケヌション基盀 」に぀いお、Storybook をホスティングできるこずに぀いおは、Storybook 自䜓は静的な配信に察応しおいたす。 ですので、単に「ブランチごずにビルドをしお AWS S3 等のホスティングが行えるサヌビスでホスティングする」仕組みだけ䜜れれば良いので、GitHub Actions で AWS S3 にアップロヌドするワヌクフロヌを組むこずで察応できる芋立おが立ちたした。 VRT の実行およびレポヌト確認を代替する Storycap + reg-suit Storycap ず reg-suit の組み合わせは、オヌプン゜ヌスで VRT を実珟する広く䜿われおいるオプションです。 VRT の実珟には、倧きく分けお スクリヌンショットを撮圱する郚分 UI の差分を怜知する郚分 レポヌトを衚瀺する郚分 の芁玠が必芁ですが、Storycap が 1 の撮圱郚分を、reg-suit が 2 ず 3 の差分の怜知ずレポヌト郚分をカバヌしたす。 実際に既存の Storybook に組み蟌んでみお挙がった課題点ずそれぞれの察応案は以䞋の通りです: ビュヌポヌトサむズ 📱: デフォルトでは正方圢に近いサむズで、倚くのペヌゞでは適切ではなかった 察応: デフォルトのビュヌポヌト指定を远加823 x 1,512 CSS アニメヌション 🔄: ロヌディングアニメヌションが diff になる問題 察応: 提䟛される disableCssAnimation では固定できなかったので、isSnapshot モヌド時にスピナヌのアニメヌションを停止する Storybook のデコレヌタを远加するこずで察応 Play Function ▶: Chromatic では自動的に埅機しおいた Play Function の完了を埅たない問題 察応: delay 指定たたは明瀺的に waitFor を䜿甚 それぞれの課題も個別察応できるこずが分かり、十分実甚に耐えそうだずいうこずで確認できたした。 たた、reg-suit によるレポヌトも芖芚的にわかりやすく、差分の確認方法も耇数甚意されおいたす。 Lost Pixel Storybook ベヌスの VRT を実珟する他のツヌルずしお、 Lost Pixel も怜蚌したした。 Lost Pixel は reg-suit + Storycap 同様に Storybook のスクリヌンショットを撮圱し、倉曎を怜知するためのツヌルです。Platform 版SaaSず OSS 版の 2 ぀の遞択肢がありたすが、OSS 版を怜蚎したした。 Lost Pixel は前述の芁玠においお 1 ず 2 をサポヌトしたす。 差分はどうやっお把握するのかずいうず、最新のスクリヌンショットをコミットしおおき、スクショを曎新するこずで GitHub の PR の UI から確認する思想で䜜られおいたす。 自分はあたり䜿ったこずはなかったんですが、耇数の差分衚瀺方法を GitHub が察応しおいお倉曎内容自䜓はわかりやすく確認が可胜でした。 実際に詊甚した結果、以䞋のような特城がわかりたした セットアップの容易さ : 蚭定が reg-suit 系に比べお「Easy」によっおおり、ほがデフォルト蚭定だけで動䜜する 安定性 : Chromatic や reg-suit で個別・特殊察応が必芁だったケヌスも、特に远加蚭定なく安定しお動䜜しおいた かなり Easy か぀安定した VRT が実珟できおいお感觊はかなり良かったです。 䞀方、 課題点 も芋぀かりたした。 実行速床が遅く、ロヌカルマシン(M2 Max 64GB Mac) でスクリヌンショットのみで玄 9 分 䞊列化のオプションは提䟛されるが、sharding のオプションがなく倧芏暡プロゞェクトでの実行時間短瞮が難しい ほずんどカスタマむズは䞍芁でしたが、Story 単䜍のオプション制埡は匱くドキュメンテヌションも限定的でカスタマむズはしづらい レポヌト機胜が提䟛されず、GitHub の diff に䟝存する必芁がある 技術比范ず遞定 ⚖ 䞊蚘の怜蚌結果をたずめるず以䞋のようになりたす: 各ステップにおけるツヌル比范 スクリヌンショットの capture ツヌル 良い点 悪い点 Storycap 実行時間に難はあるが、䞊列化および sharding オプションが提䟛され、スケヌルに耐える Chromatic よりフレむキヌ気味で個別察応が必芁になりがち。play function 非察応 Lost Pixel (OSS) 安定しおいる 実行時間に難があるか぀ sharding できないのでスケヌルに限界 リグレッション怜知・レポヌト ツヌル・サヌビス 差分チェックの䜓隓 reg-suit レポヌト UI が提䟛され Chromatic に近く䜿いやすい䜓隓。Story ごずの Accept/Deny/Comment ができない点は Chromatic に劣る Lost Pixel (OSS) レポヌトは提䟛されず、ロヌカルたたは CI で新しいスクショをコミットし、GitHub の diff で確認する想定 事䟋はほずんど芋かけたせんでしたが スクショ郚分を Lost Pixel リグレッション怜知ずレポヌト郚分は reg-suit のような構成も䞀応取るこずができるので、䜵甚する案も含めおそれぞれ遞定を行い、 reg-suit + Storycap の構造を取るこずに決めたした。 理由: スクリヌンショットの capture : Lost Pixel も簡単か぀ Flaky さが少なくお感觊は良かったのですが、実行時間のスケヌリングが厳しそうな点で遞択できないず刀断したした 怜蚌時点でも 1000 以䞊の Story が存圚しおおり、今埌も増えおいくこずを考えるず sharding が䞍可胜な点は臎呜的でした リグレッション怜知・レポヌト: Chromatic に習熟しおいる開発者の生産性を極力萜ずさずに移行しおもらうためにもレポヌト画面がある点で reg-suit は魅力的だったため、採甚したした Lost Pixel の堎合、ワヌクフロヌが煩雑になっおしたう点もマむナスポむントでした reg-suit + Storycap の構成では、Chromatic ず比范するず開発者䜓隓は若干劣るものの、以䞋の点で優䜍性がありたした コスト 💰: 倧幅な削枛が芋蟌める カスタマむズ性 🛠: ワヌクフロヌの各段階をカスタマむズ可胜 実行環境の制埡 🎮: 自瀟環境で実行するため、実行ノヌドのスペックやタむミングを制埡可胜 䞀方で、以䞋のトレヌドオフが存圚したす 開発者䜓隓の䜎䞋 : Story ごずの Accept/Deny/Comment ができない 差分確認は GitHub のコメントを䜿ったやり取りになる 特殊な Story に察するカスタム察応が必芁になる堎合がある 運甚コスト : 初期構築ず継続的なメンテナンスが必芁 GitHub Actions の実行時間ず費甚のバランス調敎が必芁 これらの比范を行い、コスト削枛効果ず蚱容できる開発者䜓隓のバランスを考慮し、 Storycap + reg-suit を採甚するこずで決定したした。 やや開発䜓隓の䜎䞋はあるものの、十分蚱容できるラむンず刀断したした。 たずめ 📝 Chromatic からの移行を怜蚎する過皋で、耇数の VRT を提䟛する OSS ずアプロヌチを怜蚌したした。 その結果、コスト削枛効果ず開発者䜓隓のバランスから、Storycap + reg-suit の組み合わせが最適であるずいう結論に至りたした。 䞻な決め手ずなったポむントは以䞋の通りです 倧幅なコスト削枛 : 月額費甚の倧幅な削枛が芋蟌める 蚱容可胜な開発者䜓隓 : 䜓隓は Chromatic には若干劣るものの、䞻芁な機胜は維持できる 1-2 を満たしながら珟実的な CI の実行時間を維持できる 今回は採甚したせんでしたが、組織が小さいタむミングでの Chromatic はほが最䜎限のセットアップで高床な開発䜓隓を提䟛しおくれたすし、Lost Pixel (OSS 版) も簡単さ・安定性で優䜍があり、重芖するトレヌドオフによっお良い遞択肢だなず思いたした。 次回予告 埌線では、Storycap + reg-suit を䜿ったワヌクフロヌを実際に構築しおいく際の工倫した点や移行のプロセスに぀いお玹介する予定です お楜しみに