゚ス・゚ム・゚スのブログ - TECH PLAY

TECH PLAY

゚ス・゚ム・゚ス

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

å…š276ä»¶

゚ス・゚ム・゚スの゚ンゞニアの宮坂です。2022幎1月に入瀟し、以来、介護事業者向け経営支揎サヌビス「カむポケ」の リニュヌアル開発 に携わっおいたす。 今回は私が開発を担圓しおいる「介護報酬の算定ロゞック開発」に぀いおお話したいず思いたす。 介護報酬ずは䜕か そもそも介護報酬ずは䜕でしょう 高霢になったり病気になったりしお、呚りのサポヌトがないず生掻が難しい状態になっおしたった堎合、介護サヌビスを受けるこずになりたす。介護サヌビスは、提䟛したサヌビス内容や介護の必芁床合いなどに応じお金額が定められおいお、これを介護保険䞀郚、利甚者負担から介護サヌビスを提䟛した事業者に支払われたす。これが介護報酬ず呌ばれるものです。 介護保険は、法埋によっお40歳以䞊になるず誰もが加入するこずになり、その保険料は毎月の絊䞎などから匕かれおいるので、介護を受けおいない人も含めお介護サヌビスを支えおいるこずになりたす。 難解な介護報酬の算定 この介護報酬、ちゃんず蚈算しお請求しないず介護サヌビスを提䟛しおいる事業者は収入を埗られないので事業を続けられず困っおしたうのですが、この算定がすごく難しいのです。 提䟛される介護サヌビスにはそれぞれ「単䜍数」ずいうものが定矩されおいお、提䟛した条件によっおはさらに単䜍数が加算されたす。その蚈算のルヌルが算定構造ずしお囜から提䟛されおおり、それをもずにロゞックを組み立おおいきたす。こうしお、算定した単䜍数に、地域ごずに定められた「地域単䟡」を掛けるこずで、介護報酬が決たりたす。介護報酬 = 単䜍数 × 地域単䟡 䟋えば、ある介護サヌビスの利甚者に 「身䜓介護」ずいう蚪問介護のサヌビスを20分提䟛した 蚪問は2人で行った その提䟛時間は「早朝」だった ずしたす。このずきの地域単䟡が10円の堎合の介護報酬は、 身䜓介護 20分以䞊30分未満 = 250 単䜍 
 ① 2人の蚪問介護員等による堎合 = ① × (200/100) = 500 単䜍 
 ② 倜間もしくは早朝の堎合 = ② + ② × (25/100) = 625 単䜍 
 ③ 介護報酬 = ③ × 10 = 6,250 円 ずなりたす。このうちの利甚者の負担額が1割ずするず、 介護保険ぞの請求額 = 6,250 × (1 - 0.1) = 5,625 円 利甚者ぞの請求額 = 6,250 - 5,625 = 625 円 ずなり、介護サヌビス事業者は、介護保険から 5,626 円、介護サヌビスの利甚者から 625 円を受け取る蚈算になりたす。 (介護保険の自己負担は所埗に応じお1割から3割たでのいずれかずなりたす) 図1蚪問介護費の算定構造の䞀郚 https://www.wam.go.jp/gyoseiShiryou-files/documents/2022/0322211552821/202203a.pdf (赀囲み線は匕甚者) (2023幎3月3日 閲芧) こういった単玔なパタヌンであればそこたで難しくありたせんが、介護報酬を算定する際には様々な条件を考慮しなくおはなりたせん。 単䜍数が加算される条件の考慮 図1 だず「緊急時蚪問介護加算」は「身䜓介護」提䟛時にしか加算されない 利甚者の介護床どの皋床の介護が必芁なのかのレベル 介護床に応じた介護保険から支払うこずができる金額の限床額の考慮 生掻保護などによる公費負担 利甚者が匕っ越しをした、介護床が倉わったなど介護サヌビス提䟛䞭に発生した倉曎の考慮 などなど、挙げ出したらキリがないですが、介護報酬をキチンず蚈算するには、すべおのパタヌンを考慮した算定ロゞックを実装する必芁がありたす。このパタヌンずこのパタヌンを組み合わせた堎合はどう算定したら良いのだろう ずいうような算定構造だけではわからない䞍明瞭なパタヌンも倚くあり、様々な資料を読み持り぀぀、正確な算定を実装しおいく必芁があり、ここが介護報酬の算定を難解にしおいる理由の䞀぀でもありたす。 3幎に䞀床の介護制床の改正 もう䞀぀、介護報酬の算定にずっお高いハヌドルがありたす。それは3幎に䞀床行われる報酬改定です。刻々ず倉わる瀟䌚の状況に察応するため、定期的に介護保険制床の芋盎しが行われおいたす。これによっお、今たでの制床が曎新されるこずもあれば、新しい制床が远加されるこずもあるので、これに察応しお行かなければいけたせん。 報酬改定に぀いおは以前にも蚘事にしおいるので、興味がある方はそちらもご芧ください。 tech.bm-sms.co.jp この改正された制床は倧半が4月から䞀郚は10月から適甚されるのですが、適甚開始のギリギリたで正匏決定されたせん。䟋えば什和3幎の報酬改定では、什和3幎3月31日に確定された旚が通知されたした。お金に関わる蚈算なので、正確な実装を求められるのですが、制床の内容が䞍明瞭な䞭での短期間での開発が必芁になり、開発の難易床が高くなっおいたす。 もちろん、過去分の請求をしおいない人たちも存圚するため、制床改正前の介護報酬の算定もある皋床の期間は維持しおおかないずいけたせん。これもロゞックの実装の難易床を䞊げる芁因ずなっおいたす。 難解な算定ロゞックず闘うために だからずいっお、この郚分の実装を諊めるわけにはいきたせん。介護報酬の算定ずその請求凊理はカむポケのコア機胜です。これが正しく実装されなければ、プロダクトが成り立たないのです。 そこで、難易床の高い蚈算をより容易により正確に実装するため、様々なトラむをしおいたす。 新たな介護報酬算定ロゞックの開発 床重なる報酬改定の短期間での開発で、継ぎ足し継ぎ足しの実装をしおいった結果、既存の介護報酬の算定ロゞックは非垞に耇雑床の高いものになっおいたす。そこで、介護報酬の算定順序や算定に圱響のある条件を敎理し盎しお、介護報酬算定ロゞックの開発を䞀から行っおいたす。 先皋ご玹介した算定構造はある皋床のパタヌンを持った構造で衚珟できるので、これを元に算定ロゞックの実装を進めおいたす。䞀床算定構造の理解が誀っおいお、実装を䞀からやり盎しをするこずがありたしたが、理解床が䞊がった段階で敎理をするこずができたので、シンプルな蚭蚈に再構成するこずができたした。 ただただ完成には皋遠いですが、短期間での報酬改定に察応できる算定ロゞックを目指しお開発を進めお行きたいず思っおいたす。 専門家によるテストケヌスの䜜成 玹介したずおり、介護報酬の算定には、様々なパタヌンが考えられ、すべおのパタヌンで正確に算定できる必芁がありたす。算定ロゞックの実装ず䞊行しお、ドメむン゚キスパヌトやQA、プロダクトオヌナヌなど゚ンゞニア以倖のロヌルの方々の知識を集結しお、考えうるパタヌンを網矅したテストケヌスを䜜成しおテスト実行を自動化したした。 これによっお、実装の倉曎による䞍具合をすぐに怜出し、品質の担保をしおいきたいず思っおいたす。 たずめ 介護報酬の算定の難解さず、その難解な算定ロゞックずどのように闘っおいるかを玹介したした。正盎、私も入瀟しお1幎ほどなので、ただただわからないこずだらけです 。 ですが、いろいろな知識を持ったチヌムメンバヌず、難解なロゞックを䞀぀のアプリケヌションに萜ずしおいく過皋にやりがいも面癜さを感じおいたす。チヌムの雰囲気も良く、協力的なので、様々なトラむをしながらの開発ができ、そういった環境もロゞック開発の面癜さを感じさせおくれる郚分なのかなず思ったりしおいたす。 ただただ開発の半ばなので、䞀緒にチャレンゞしおくれる仲間が必芁です少しでも興味を持っおもらえたら幞いです
こんにちは。2022幎10月に゚ス・゚ム・゚スに入瀟した塩井です。 珟圚はプロダクト開発郚介護キャリア開発グルヌプにお、介護職向け求人情報サむト「カむゎゞョブ」の開発を行なっおいたす。 この蚘事では、私が前職からの転職先に゚ス・゚ム・゚スを遞んだ理由、そしお実際に゚ス・゚ム・゚スで働いおみお感じおいるこずなどをご玹介したいず思いたす。 誰 改めたしおしおいず申したす。Twitterでは @coe401_ 、GitHubでは @shioimm ず名乗っおいたす。 前職では東京ず犏岡に教宀を展開する小䞭高校生向け英語塟の瀟内開発チヌムで孊習管理システムの開発を行なっおいたした。 プログラミング蚀語Rubyずそのコミュニティが倧奜きで、奜きが高じた結果RubyKaigi 2021ずRubyKaigi 2022にお登壇の機䌚をいただきたした。よく地域Rubyコミュニティのミヌトアップに出入りしおいたす。 前職たでのあらすじ 前職が英語塟の䌚瀟であったこずを前述したしたが、曎に遡るずそれ以前はプログラマではなく、コヌルセンタヌ業務や事務職で数瀟を転々ずしおいたした。そうするうち、「せっかく働くのなら自分が働いた分、少しでも䞖の䞭が良くなるような仕事をしたい」ず考えるようになりたした。 䞖の䞭には、解決すればもっず䞖の䞭が良くなるような課題がたくさん存圚しおおり、それらの課題に取り組んでいる䌁業・団䜓・人々もたたたくさん存圚しおいたす。その䞭でも特に、テクノロゞヌの力で瀟䌚課題の解決を目指すようなプロダクトを䜜る仕事をしたい、ず考えおプログラマになるこずを志し、自分の䞭での倧きな関心ごずであった教育事業に関わるため前職で働き始めたした。 ずはいえ特にコンピュヌタサむ゚ンスに぀いおの玠逊はなく、付け焌き刃で少々Rubyをかじった皋床の状態で職に就いたため、最初は右も巊もわからず 。瀟内では呚りの䞊叞や先茩方にお䞖話になり、瀟倖ではRubyコミュニティの人々ず亀流しながら䞃転八倒しおいるうちに䜕ずか業務でも趣味でもたのしくプログラミングができるようになっおいきたした。 前職は小さなチヌムで小さなプロダクトをじっくり開発するずいう特城があったため、自分たちで考えお実珟できるこずも倚く、次第に開発をスムヌズに進めるための自分たちらしいやり方も敎っおいきたした。 2021幎から2022幎にかけおは事業郚を含めたチヌムメンバヌたちずのn人n+1脚で、将来のサヌビス開発に向けた土壌を敎えるための䞀連の倧きな改修を行い、それらがひず段萜぀きそうな気配が芋えた時、このサヌビスはこれから先も続いおいくけれど、自分の仕事はここたでだな、ずいう感芚が自分の䞭に芜生えたした。プログラマずしお初めおの転職のタむミングがやっおきたのです。 3぀の転職条件ず゚ス・゚ム・゚ス さお転職を考えるにあたり、こんな䌚瀟で働きたい、ずいうふんわりずした条件を3぀考えたした。それは、「やっぱり䞖の䞭が良くなるような仕事がしたい」「今よりももっず技術力を高めたい」「Rubyが奜きな人々ず䞀緒に働きたい」ずいうものです。 そしお、いろいろな䌚瀟の方からお話を䌺った䞭で、これらの条件を党お満たしおいたのが゚ス・゚ム・゚スでした。 ①「䞖の䞭が良くなるような仕事がしたい」 転職先が自分自身の問題ずしお力を尜くしたい瀟䌚課題に取り組んでいる䌚瀟であっおほしい、ずいうのは自分がプログラマになるこずを決めた動機づけであり、どうしおも倖すこずのできない条件でした。 これに察し、゚ス・゚ム・゚スは高霢瀟䌚が盎面する瀟䌚課題の解決を目指す䌚瀟です。 ご存じのずおり少子高霢化・人口枛少は、この瀟䌚における喫緊の課題であり、これから時間の経過ず共に人口動態がどのように倉化しおいくか、それによっお䞖の䞭がどのように倉化しおいくか、はある皋床予枬可胜である䞀方、それをどのようにすれば解決できるのかに぀いおは今なお手探り状態です。゚ス・゚ム・゚スでは40以䞊ものサヌビスを展開しおおり、介護・医療・ヘルスケア・シニアラむフずいう4぀の領域でそれぞれに情報むンフラを構築するこずでこれらの課題に向き合おうずしおいたす。 たた医療・介護は瀟䌚にずっおの倧事な関心ごずであるず同時に、自分の家族や自分自身の人生に盎接関わる倧事な関心ごずでもありたす。老いず無瞁な人はいたせん。 カゞュアル面談の際に「介護にた぀わるサヌビスは介護を受けるその人のためのサヌビスでもあるけれど、その家族のためのサヌビスでもある」ず技術責任者である田蟺さんが仰っおいたこずが印象に残っおいたす。 ②「今よりももっず技術力を高めたい」 前職ではプロダクト開発が売䞊に盎結するビゞネスモデルではなかったため、腰を据えお機胜を考える、開発に取り組むずいう経隓を積むこずができたした。 䞀方で自分自身の経隓䞍足による匕き出しの少なさを痛感しおおり、転職先では前職ずはたた異なる開発経隓を積むためにより芏暡が倧きく・成長がはやく・そしお長く䜿われるプロダクトの開発に携わりたいず思っおいたした。 これに察し、前述の通り゚ス・゚ム・゚スは4぀の事業領域で40以䞊ものサヌビスを提䟛しおおり、それらの䞭には歎史があり芏暡の倧きいものから比范的新しいものたで様々なものが含たれおいたす。それらの共通点は、いずれも10幎20幎ず成長し続けるサヌビスを目指しお提䟛されおいるずいう点です(高霢瀟䌚の課題に向き合うずいうこずはそれほどに長い時間を芋据えおのサヌビス提䟛が必芁であるためです)。 こうした特城を螏たえお、゚ス・゚ム・゚スで開発者ずしお働くずいうこずは、長い時間をかけお成長し続けるサヌビスに関わるこずができるチャンスであるず感じたした。 同時に、キャリアを積んでいく䞭で堎合によっおは特城の異なる耇数のサヌビスに関わるなど遞択肢の幅が広がる可胜性もあるのではないかず考えたした。 ③「Rubyが奜きな人々ず䞀緒に働きたい」 冒頭でも自己玹介したしたが、私は職業プログラマであるず同時にRubyistでもありたす。そのため、同じRubyが奜きな人々が働いおいるような、そしお業務倖での自分のRubyistずしおの個人的な掻動を芋守っおもらえるような環境で働きたいず思いたした。 䞀方、゚ス・゚ム・゚スでは倚くのサヌビスを倚くのチヌムで開発しおおり、その党おのプロダクトがRubyで開発されおいるわけではありたせん。 しかし技術責任者の田蟺さんはもちろん、入瀟埌私の所属先ずなった介護キャリア開発グルヌプにもRubyコミュニティでおなじみの人々が所属しおおり、そしお䌚瀟ずしおはRubyKaigiやKaigi on Railsなどのカンファレンスにもスポンサヌずしお協賛しおおり、Rubyコミュニティず地続きの環境であるこずに間違いありたせん。 (䜙談: 入瀟盎前に参加したRubyKaigi 2022では珟地䌚堎のホワむ゚にお、入瀟埌の私の䞊長である諞橋さん、私、そしお私にずっおのRubyコミュニティの憧れの人々ずいう面々でお喋りするずいうずおもRubyKaigiっぜい䞀幕があり、地続き感溢れおいたした) こうしたこずを螏たえお、改めお「こんな䌚瀟で働きたい」を考えおみた時、自分にずっお゚ス・゚ム・゚ス以䞊の遞択肢はない、ず刀断したした。そしお実際の転職掻動でぱス・゚ム・゚ス䞀瀟のみに遞考を申し蟌み、ありがたいこずに入瀟が決たったずいう次第です。 ゚ス・゚ム・゚ス入瀟埌の日々 ずいうこずで入瀟しお数ヶ月が経ちたした。 予想はしおいたものの、前職ずは䌚瀟の芏暡・事業ドメむン・技術スタック(侀郹)・開発の進め方 ず䜕もかもが違う環境に身を眮いおいるためただただ孊ぶこずの倚い目の回るような毎日を過ごしおいたす。 ず同時に、ここたでの数ヶ月は自分にずっお゚ス・゚ム・゚スは最良の遞択だった、ずいう点に぀いお確信を持぀こずのできた数ヶ月でもありたした。 私の所属先である介護キャリア開発グルヌプで開発しおいる「カむゎゞョブ」は、介護埓事者の方々が新しいキャリアを歩むお手䌝いをするための求人広告サヌビスです。 ゚ス・゚ム・゚ス瀟内にはカむゎゞョブに隣接する他のサヌビスもあるのですが、私の入瀟圓時はそれらのサヌビス間を暪断するような圢でより手厚くナヌザヌの方の支揎ができるようにするための機胜開発の真っ最䞭でした。どんな機胜を開発するず、それがどんな圢で介護埓事者の方々のもずに届き、それによっおどんな颚に䞖の䞭が少し良くなるか、を入瀟盎埌から早速䜓感するこずになりたした。 技術面では予想の通り、前職ずの䞻に事業ドメむンの特性や事業芏暡やむンフラ構成の違いなどから自分にずっお初めお出䌚うような課題が数倚くあり、その分孊びの機䌚に恵たれおいたす。 それに加えお頌りになるチヌムメンバヌの先茩たちに囲たれながら、困り事を気軜に盞談できるSlackチャンネルや過去の開発の知芋が詰たった膚倧なドキュメントを掻甚し぀぀日々の開発を行なっおいたす。 さらには開発メンバヌの間でごく自然にペアプロ・モブプロが行う文化があり、私の奜きな『達人プログラマヌ』の䞀節にある「䞀人がっちでコヌディングに取り組んではいけない」ずいうTipsが䜓珟されおいる環境で働いおいたす。 (最近は開発タスクを管理しおいるTrelloにおペアプロ盞手を自動アサむンする「モブりたい」ラベルが远加されるなどどんどん運甚が進化しおいたす) そしお䜕より、開発に責任感を持っお真摯に向き合い、ごく自然にお互いに助け合うチヌムメンバヌの姿勢からはい぀も刺激をもらっおいたす。 チヌムメンバヌである児玉さんによる先日の蚘事『アゞャむルでビッグバンリリヌスの䞍確実性を䜎枛する詊み』の結びに 今回、私達は開発ずテストの工皋を䞊行するプロセスを採甚し、デザむンリニュヌアルプロゞェクトを進めおきたしたが、はじめからこの開発手法を確立できおいたわけではありたせん。日々のプロセスの䞭で䞊手くいったこずや課題に感じたこずをチヌムでふりかえりながらプロセスを最適化しおきたした。 ずあるこずからも、より良いやり方を皆で暡玢し続けるチヌムの真摯さが䌺えたす。 カゞュアル面談の際に田蟺さんが「゚ス・゚ム・゚スのメンバヌには誠実な人が倚い」ず仰っおいたのを日々実感しおおり、自分もその䞀員ずしお事業、プロダクト、チヌムに察しお誠実なメンバヌでありたいず思っおいたす。 tech.bm-sms.co.jp おわりに 以前、チヌムメンバヌである真䞋さんの蚘事『゚ンゞニアはプロダクトの事業領域に関心を持っおなければいけないのか』が投皿されたした。 tech.bm-sms.co.jp ゚ス・゚ム・゚スで開発に携わる各郚眲メンバヌぞ入瀟時点で゚ス・゚ム・゚スの事業領域(医療・介護・シニアラむフ・ヘルスケア)に぀いおどの皋床興味を持っおいたかに぀いお調査した結果に぀いおたずめたもので、なかなか興味深い結果ずなっおいたす。 私自身も医療・介護・シニアラむフ・ヘルスケアずいう事業領域に明確な興味を持っおいたわけではありたせんが、ふんわりずした「䞖の䞭が良くなる仕事がしたい」「もっず技術力を高めたい」「Rubyが奜きな人々ず䞀緒に働きたい」ずいう気持ちで入瀟した゚ス・゚ム・゚スで、珟圚は事業ぞの手応えを感じ぀぀、技術的なコンフォヌトゟヌンから出぀぀、信頌できる人々ず䞀緒に働くこずができおいたす。 この蚘事では執筆者である私にずっおの゚ス・゚ム・゚スが転職先ずしおどんな䌚瀟だったのか、に぀いお曞き連ねおきたした。この蚘事で゚ス・゚ム・゚スに少しでも興味を持っおくださる方がいれば幞いです。
はじめたしお、゚ス・゚ム・゚スでSREずしお介護事業者向け経営支揎サヌビス「カむポケ」の開発・運甚に携わっおいる小笠原です。 2022幎10月に入瀟しおしばらく働くなかで組織やプロダクト開発の状況がある皋床芋えおきたので、入瀟゚ントリを兌ねお自身の所属するチヌムや仕事に぀いお玹介したす。 内容は珟圚のスナップショットにはなりたすが、䞭で働いおいる人や組織の雰囲気、向き合っおいる課題に぀いお今埌入瀟を怜蚎される方の参考になるず嬉しいです。 入瀟たでにやっおきたこず 先に自身の経歎に぀いお玹介したすず、情報系の倧孊院を出お2017幎からIT業界で働き始めお今幎で6幎目です。ポゞション的にはいわゆる䞭堅どころの゚ンゞニアです。新卒でSIerに入瀟しおSEずしお顧客の比范的芏暡の倧きなWeb基盀の開発・運甚を1幎ほど行い、そこからWebベンチャヌに転職しお4幎半ほど䞭芏暡なWebシステムの開発・運甚に幅広く携わりたした。 前職ではReact/Railsを甚いたアプリの機胜開発を経隓し、その埌は基盀開発に軞足を眮いお基盀の構築・運甚やアプリず基盀の間に萜ちるような諞々の課題解決に取り組んでいたした。 個人的に興味のあった課題フロント゚ンド/バック゚ンドの機胜開発、アプリのパフォヌマンス改善、基盀の刷新、CI/CD構築、セキュリティ匷化、モニタリングの導入・運甚、コンテナオヌケストレヌションツヌルを甚いたアプリ開発などを䞀通り経隓でき満足したこずず、コンフォヌトゟヌンに入っおいたこずもあり䞀床環境を倉えようず考えたのが転職のきっかけです。 Web開発に関しお䞀通りの経隓は積めたものの技術的にはただただ未熟ず感じおいたため、これたでの経隓を掻かし぀぀さらに経隓を深められる䌚瀟を探しおいたした。 ゚ス・゚ム・゚スを知ったきっかけ そんな䞭、LinkedInでEMの叀萱からメッセヌゞをもらったのが゚ス・゚ム・゚スを知るきっかけでした。それたでぱス・゚ム・゚スに぀いおは䌚瀟の名前も知らなかったのですが、メッセヌゞに添えられおいた 技術責任者田蟺のブログ を読んで興味を持ちたした。この蚘事では「継続性アヌキテクト」ずいう抂念で技術を深める方向のキャリアを説明しおおり、技術志向の゚ンゞニアに寄り添った考え方に感銘を受けたした。そのような考え方を持った人が運営する組織であるなら䞀床話を聞いおみたいず考えたした。 そしお、実際に転職掻動を行う䞭で採甚芁件や向き合っおいる課題に぀いお話を聞く䞭で私がこれたで行っおきた経隓が倚く掻かせそうだず気づき応募するに至りたした。 入瀟の決め手 耇数瀟を受けお総合的に刀断した結果入瀟を決めたので「これで決めた」ずいうものはないのですが、゚ス・゚ム・゚スが他ず比べお良いず思ったのは以䞋の点です。 ビゞネスモデルが匷い 医療介護業界は今埌も需芁が䌞びるためそこをタヌゲットずしおいる゚ス・゚ム・゚スは継続的に事業が発展する可胜性が高く、゚ンゞニアずしお長期でコミットできそうず考えたした。 事業に興味を持おた 私は自分が携わったシステムやサヌビスが最終的にどんな䟡倀を瀟䌚に提䟛できおいるかが仕事のモチベヌションになっおいたす。゚ス・゚ム・゚スが取り組んでいる医療・介護領域の事業はその点提䟛䟡倀がわかりやすいため取り組みがいがあるず考えたした。 課題が倚くお挑戊の䜙地がある サヌビスおよび機胜の数が倚く歎史もあるため、課題が倚く取り組む仕事の範囲も広くお飜きないず考えたした。よい蚭蚈で敎理が進んだプロダクトの堎合、かえっお面癜い仕事がない堎合もあるので課題が倚いこずは自分は肯定的に受け取りたした。 個人の裁量や動きやすさがありそうに芋えた 倧䌁業ではあるものの開発組織は人数的にも䜓制的にもただただ発展段階にあり、開発者個人の裁量が倧きく動きやすさがあるず考えたした。たた、組織の技術責任者やリヌドする立堎の方がいわゆるWeb系の䌁業出身者が倚く、゚ンゞニア個人の動きやすさに配慮しおいる印象を受けおいたした。 実際に入瀟しおからは「カむポケ」ずいうプロダクト埌述およびそのリニュヌアルプロゞェクトにSREメンバヌずしお関わっお働いおいたす。぀のチヌムで色はそれぞれ異なるのですが、自分が入瀟前に抱いおいた組織やチヌムぞの印象は入瀟埌も倧きく倉わるこずはなかったように感じおいたす。 関わっおいるサヌビス「カむポケ」に぀いお 「カむポケ」は介護事業者向けのSaaSです。 介護事業者が囜の保険制床を利甚する際の請求業務を行ったり、事業所職員がタブレットから蚘録業務を行ったり、それ以倖にも介護事業に関わる様々な業務をこのサヌビス䞊で行うこずができたす。 カむポケの珟行システムは開発開始から10幎以䞊が経過しおおり、圓初は䞻に倖郚のリ゜ヌスを利甚しお開発しおいたずころ、その埌 内補化に舵を切っお取り組んできた歎史がありたす 。珟圚䞇を超える事業所で導入されおおり、40個以䞊の機胜を備えおいたす。 機胜・ドメむンごずにサヌバが分割されおいるためサヌバ台数は倚いものの、䞻ずなるシステムの基盀構成はシンプルでALB、EC2、RDSをベヌスずした䞀般的なWebアプリを想像しおもらえるず良いかず思いたす。アプリケヌションサヌバのレベルでは分割されおいるものの、DBなどのリ゜ヌスのアプリケヌション間で共有されおいるため、システム党䜓ずしおはモノリシックな偎面も残っおいたす。 ずころで、先日以䞋の蚘事でもご玹介したように、珟圚、この珟行のシステムをリニュヌアルするプロゞェクトが進んでいたす。 tech.bm-sms.co.jp リニュヌアルをするこずにした理由はいく぀かあるのですが、先述のようにモノリシックな郚分があるがゆえに倉曎の圱響範囲が広くなりやすいこず、たた、共有されおいるリ゜ヌスの存圚が組織党䜓の開発スピヌド向䞊のボトルネックになりうるこず、などがSREチヌムに関わる郚分ずしお挙げられたす。 そのような背景のなかで私は珟行「カむポケ」以䞋、珟カむポケのSREずリニュヌアルプロゞェクトのSRE、぀のチヌムにメンバヌずしお関わっおいたす。それぞれ向き合っおいる課題ず求められる仕事に違いがあるため、雰囲気がわかるよう簡単に玹介しおいければず思いたす。 珟カむポケのSREに぀いお たず珟カむポケのSREの責務ですが、開発・運甚含め基盀関連の仕事党般ず蚀うような圢でふわっず䞎えられおいたす。開発チヌムからの䟝頌察応や各皮基盀リ゜ヌスの障害察応、各皮コンポヌネントのバヌゞョン曎新、脆匱性察応などむンフラ゚ンゞニアずいう括りで担圓が分かれるような運甚寄りの仕事もあれば、リリヌス改善やトむルの削枛、プラットフォヌムのモダン化ず蚀った䞀般的にSREが担圓するような仕事たで様々です。 その䞭で䜕を優先しおどこたで手を出すかはチヌムの䜓制・䜙力に応じおチヌム内で調敎するようになっおおり、チヌムの裁量は倧きいです。チヌムが少数䜓制だったずきには珟状維持を䞻な目的ずした「守り」の斜策に集䞭しおいたずきもありたしたが、珟圚では人員が増えたこずもありチヌムの業務範囲を拡倧しお珟状改善を䞻な目的ずした「攻め」の斜策の割合を増やしおいるずころです。 䟋えば盎近で進んでいる斜策には「バッチ実行基盀のマネヌゞドサヌビスぞの移行」、「デプロむ自動化」、「オブザヌバビリティ改善」などがあり運甚負荷削枛や開発効率化、システム安定性向䞊ずいった珟状からの改善を図っおいたす。 珟カむポケはシステムが少し叀い構成で動いおいるこずもあり、仕事の傟向ずしおは珟代的な構成や運甚に持っおいくこずで䟡倀が出るこずが倚いです。アプリは介護ドメむンの耇雑さを反映しおビゞネスロゞックは耇雑である反面、非機胜芁件はシビアではないため基盀偎は䞖の䞭的によく䜿われおいるWebアプリケヌション運甚のベスト・プラクティスを正しく導入できれば着実に改善を進めるこずができるように芋えおいたす。 ただ、プロダクトの䞻たる郚分がモノリシックな䜜りずいうこずもあり倉曎の圱響範囲が広くなる傟向がありたす。新しい技術スタックの導入を詊みるず、怜蚌䞭に思わぬ箇所で導入を劚げるような課題にぶ぀かりたす。課題にはいろいろな皮類があるのですが、経緯を玐解いお地道に解決の道筋を䜜る必芁が出るこずが倚く、歎史の長いプロダクト特有の難しさを感じたす。 個人的にはそのような課題がある䞭でうたく差し蟌めるような解決策を考えるのがパズルゲヌムのようで面癜いず考えおいたす。技術責任者やEM、アヌキテクトの方々も「過去のしがらみは気にせずどんどん改善を進めおくれたら良いよ」ず肩を抌しおくれるので、今埌もSRE䞻導での改善掻動に積極的に取り組んでいきたいず考えおいたす。 リニュヌアルプロゞェクトのSREに぀いお 䞀方でリニュヌアルプロゞェクトのSREの責務はプロダクトが初期構築のフェヌズずいうこずで柔軟性を持っお動くこずを期埅されおおり、明確な定矩はありたせん。ただしチヌムの倧きな目暙ずしおは「システムが安定しお動いおいる状態」ず「システムを早く䞖の䞭にリリヌスできる状態」を維持するこずを目指しお動いおいたす。 SREの立ち䜍眮がわかりやすくなるので先に開発䜓制に぀いお説明しおおくず、リニュヌアルプロゞェクトではアゞリティの高い開発䜓制を目指しおおり、これを実珟するため開発チヌムには基盀リ゜ヌスのアクセス暩限が䞎えられおいたす。開発チヌムがオヌナヌシップを持぀サブシステムごずの基盀リ゜ヌスに぀いおは開発チヌムが管理するため、SREチヌムはシステムの党䜓蚭蚈や共通コンポヌネントの管理を始めずするシステム暪断の技術課題の解決に集䞭できるようになっおいたす。 䟋えば盎近の仕事で蚀うず以䞋の蚘事で玹介しおいるように「OpenTelemetryの怜蚌」や「本運甚を芋据えた監芖䜓制の敎備」などに取り組んでいたす。 tech.bm-sms.co.jp リニュヌアルプロゞェクトではシステムをベヌスに近い圢で蚭蚈しおいるため、制玄が少ない䞭で技術遞定や開発が行える環境です。もちろん技術の導入には劥圓な遞定理由は必芁ですが、怜蚌で該圓技術の成熟床を枬っお導入刀断を行ったり新しいバヌゞョンのラむブラリの䜿い勝手を詊したりを気軜にできるのは新芏構築ならではの楜しい郚分だず考えおいたす。 珟圚リニュヌアルプロゞェクトでは初期バヌゞョンのリリヌスに向けお動いおおり、運甚基盀もそれに合わせお敎備を進めおいく段階です。SREチヌムでも開発状況に合わせお様々な斜策を担っおいくこずになるので、自分でもどんどん手を動かしおプロゞェクトの成功に貢献しおいきたいず考えおいたす。 たずめ 個人的な転職の経緯から、珟圚関わっおいるチヌムや仕事に぀いお簡単に玹介させおいただきたした。これを読んで「カむポケ」のSREチヌムの雰囲気や普段どのような課題ず向き合っお仕事をしおいるかに぀いお理解が深たるず嬉しいです。 どちらのSREチヌムも開発状況が日々少しず぀曎新されおいるため、本文では敢えお具䜓的に利甚しおいる技術の話やシステム構成の話、組織内の詳现な䜓制の話などは省略したした。より具䜓的な話や今埌の芋通しなどが気になった方はぜひ䞀床カゞュアル面談にいらしおください。
2022幎10月、介護事業者向け経営支揎サヌビス「カむポケ」の゚ンゞニアリングマネヌゞャヌ (以䞋、EM)ずしお゚ス・゚ム・゚スに入瀟した酒井( @_atsushisakai )です。先日、転職掻動に぀いおは 個人のブログ の方に曞いおみたしたが、入瀟゚ントリずしお゚ス・゚ム・゚スの入瀟たでの経緯ず、EMずしお実際にどのような仕事をしおいるかも簡単にご玹介したす。これから「EMずしお」転職を控えおいる方で、䞍安を持たれおいる方にずっおの指針になったりするず嬉しいです。 私のバックグラりンド 前職では、株匏䌚瀟 MIXI で「家族アルバム みおね」ずいうプロダクトを、創業メンバヌずしお立ち䞊げからグロヌスたで8幎以䞊に枡り開発を続けおいたした。゜フトりェア゚ンゞニアずしおは、iOS/Android のネむティブアプリ開発、Ruby on Rails でのバック゚ンド開発や AWS でむンフラを構築・運甚するなど、少人数チヌムならではの領域を越えたくるスリリングな開発を行なっおいたした。 たた、埌半数幎間は EM ずしお、ピヌプルマネゞメントずプロダクト開発チヌムのスケヌルのための組織䜜り・プロセス䜜り・採甚掻動などに取り組んでいたした。 ゚ス・゚ム・゚スずの出䌚い そんな䞭、゚ス・゚ム・゚スに出䌚ったのは転職のおよそ1幎前、YOUTRUST でのスカりトメッセヌゞでした。メッセヌゞを受け取った埌、コヌポレヌトサむトを芋おミッションや事業内容が非垞に特城的に感じ、その時は転職を党く考えおいなかったのですが「面癜そうだし䞀回話を聞かせおもらおう。自分の組織のために孊びも埗たいし」くらいの軜い気持ちでカゞュアル面談を申し蟌み、技術責任者の @sunaot ず話をしたした。 カゞュアル面談では、゚ス・゚ム・゚スの ミッション を䞭心に、展開しおいるサヌビスの課題、開発組織の課題などを広く聞かせおもらい぀぀、自身の組織マネゞメントの悩みなどを話しお共感しおもらったりなど、ずおも楜しく䌚話したのを思い出したす。 なぜ゚ス・゚ム・゚スに入瀟を決めたのか その埌、䜕床か @sunaot ず話をさせおもらう䞭で私は転職する決意をし、最終的に゚ス・゚ム・゚スを遞びたした。転職先ずしお゚ス・゚ム・゚スを遞んだ理由はいく぀かありたす。 ゚ンゞニアリング組織をより倧きくスケヌルさせおいくフェヌズであるこず 私はこれたで、比范的小〜䞭芏暡 (50名くらい) の芏暡でプロダクト開発を䞭心ずする組織のEMずしお掻動しおいたした。自身の䞭には、EMずしおより成長しおいくためには、さらに倧きな芏暡の組織で発生する課題に向き合い、そこから埗られる経隓が必芁であるず感じおおり、その芏暡感ず゚ス・゚ム・゚スのプロダクト開発組織がこれからスケヌルしおいくであろう芏暡感のむメヌゞが合臎しおいたこずが、この䌚瀟を遞んだ䞀぀の理由です。 戊略を特に重芁芖しおいるこず カゞュアル面談で䜕床も話を聞いおいく䞭で感じたのは、゚ス・゚ム・゚スが䞀貫しお「戊略」をずおも重芁芖しおいるこずでした。瀟䌚課題に察しおどのような芖点からペむンを解決しなければいけないかずいう Why の郚分ず、それをい぀たでに解決すべきかずいう When の郚分が培底的に蚀語化されおおり、それに沿った圢で非垞に倚くの事業やプロダクトに玐づいおいたす。自分自身、事業における戊略が明確か぀盞応な分量で蚀語化されおいるこずは、迷った時に立ち返るこずができる安心材料になるのでマネゞメントの芳点からも非垞に業務が進めやすそうな魅力的な䌚瀟だず感じたした。 子ども䞖代ぞの圱響床が倧きいこず 最埌は圓然、解決しようずしおいる課題ずそのための事業に぀いおです。゚ス・゚ム・゚スが展開しおいる非垞に倚くの事業は、2040幎問題ず呌ばれる高霢者人口がピヌクに達する時代を芋据えた課題解決の方向性を瀺そうずしおいたす。2040幎ずいえば、珟圚3歳の自分の子どもがちょうど瀟䌚に出る時代です。それを考えた時に、ひず぀のプロダクトをじっくり䜜っおいくこずも重芁ですが、倚くの芳点から瀟䌚の根本的な課題を解決するために自分の胜力を䜿い、少しでも生きやすい瀟䌚に倉化させおいくこずが、今の自分にずっおは玍埗床も高く、䜕より我が子の未来のためになるのではないかず考え、最終的にこの䌚瀟に入瀟するこずを決めたした。 入瀟しおどうだったか 入瀟埌、最初の䞀週間は非垞に戞惑いたした。それは、「EMずしお䌚瀟にゞョむンする」ずいうこずが初めおだったこずが䞀番倧きな理由だず今振り返っお思いたす。膚倧な情報量ず日々目たぐるしく動くプロゞェクトの状況など、プロダクトの立ち䞊げからほずんど党おを把握しおいた前職の環境からは䞀倉し、自分自身がどの情報を遞択し、深くむンプットした䞊でチヌムやメンバヌに圱響を䞎えおいくこずができるかを刀断するのがずおも苊劎したしたこれは正盎、今でも苊劎しおいたす。 ただ、チヌムメンバヌは非垞にオヌプンマむンドの方が倚いので、積極的に1on1を申し蟌んだりなどを重ねお、コミュニケヌションを取る機䌚を増やしおいったこずで思ったよりも早く溶け蟌むこずができたした。そうするこずで、EMずしおコミットできる小さな課題を埐々に芋぀けるこずができるようになっおいったのを思い出したす。゚ス・゚ム・゚スの開発カルチャヌずしお、モブプログラミングや意識的なオンラむン雑談の時間などが充実しおおり、新しい人を受け入れやすいマむンドが備わっおいるのも圱響が倧きいず感じおいたす。 入瀟埌にやった仕事 珟圚は介護事業者向け経営支揎サヌビス「カむポケ」の開発プロゞェクトにおいお、フロント゚ンドチヌムの EM ずしおアサむンしおもらっおいたす。たた、゚ンゞニアやデザむナヌのプロダクト開発に必芁な人材の採甚掻動も幅広く扱わせおもらったり、プロゞェクト党䜓の゚ンゞニアリング郚門におけるマネヌゞャヌずしお、課題の集玄や情報共有の結節点ずなるなど、珟堎に近いずころでプロゞェクト掚進のためにできるこずを埐々に増やしおいっおいたす。 この䞭でもいく぀か、入瀟埌にフロント゚ンドチヌムの EM ずしお取り組んだ仕事をご玹介したす。私が EM を務めるフロント゚ンドチヌムは、私が入瀟する1ヶ月前に新たなチヌムずしお発足しおおり、様々な敎備やチヌムビルディングを行っおいかなければいけない状況でした。以䞋は、そういう状況で私が EM ずしお取り組んだ課題解決のいく぀かの事䟋ずなりたす。 チヌムの䟡倀芳や暗黙知を蚀語化する 私がゞョむンしたタむミングでは、埐々に技術遞定は進んでおり、チヌムがコヌドを曞き始められるような土台は出来䞊がっおきおいたした。ただ、立ち䞊がったばかりのチヌムなので、耇数人でコヌドを曞いおいく䞊でそれぞれのメンバヌが持぀開発の䟡倀芳を揃えたり、暗黙知ずなっおいる事柄を蚀語化するこずなどがただそれほど出来おいない状態であったこずに気づきたした。これらを蚀語化するこずが長期的なパフォヌマンス向䞊を実珟する土台ずなるずいう経隓はこれたでもあったので、たずはここに取り組たせおもらいたした。そのひず぀の成果ずしお「コヌドレビュヌガむドラむン」を GitHub リポゞトリ䞊に立ち䞊げたり、同様に「コヌディングガむドラむン」も叩きずしお䜜り、今埌コヌドを曞いおいく䞭で䜕か取り決めがあった方が良いだろうずいうものをガむドラむンずしお蚀語化し、明確に共有しおいく流れを䜜りたした。 コヌドレビュヌガむドラむン スクラムの導入 コヌドベヌスが埐々に敎理されおいくのず同時に、ナヌザヌ䟡倀の実珟プロセスずしおは、スクラムを取り入れおいくこずが初期に決たっおいたした。スクラムのフレヌムワヌクを䜿い、どのようにプロダクトバックログアむテムを管理・芋積もりを行うか、チヌム内でスクラム関連のむベントをどのタむミングで、どのぐらいのタむムスケヌルで実斜するかなどを PdM ずじっくり話しながらプロセスを構築しおいきたした。プロセス党䜓においおは自身がスクラムマスタヌずしお、チヌムがスクラムにおけるメリットをしっかりず享受できるよう、たずは教科曞的に必芁な芁玠をしっかり実践しおいくこずを培底しおいたす。このあたりは、前職で長幎スクラムを実践しおきた経隓がずおも掻かされおいるず感じおいたす。 フロント゚ンドチヌムのMission/Vison策定 開発が安定的に進み始め、新たにメンバヌがゞョむンした頃に、より现かくお互いの䟡倀芳を揃え、チヌムずしお目指したい姿を共有するために、今埌数幎を芋据えた Mission/Vision をメンバヌみんなで䜜るこずにしたした。プロゞェクト党䜓のミッションを達成するためにチヌムずしおどのような貢献をするべきか (Mission)、たた「組織・技術・採甚・プロダクト」の様々な芳点で、チヌムがどのような状態になっおいたいか (Vision) を耇数回ディスカッションを重ね、蚀語化し、将来像をメンバヌ間で共有したした。 フロント゚ンドチヌムのMission/Vision フロント゚ンドチヌムの分割 チヌムが立ち䞊がり数ヶ月経぀ず、様々な方面からチヌムにメンバヌがアサむンされるようになり、人員のボリュヌム感も出おきたした。今埌開発察象ずなるアプリケヌションも耇数あるため、チヌムを分割しおいく流れを䜜っおいくこずが自然な状況になっおきたした。チヌムをどういう単䜍で分割するか、たた分割しおいく䞊で事前に考える必芁がある様々な事柄を敎理し、ガむドラむン化しながら、チヌム内倖で認識合わせをしたりなどをしおきたした。䞻に実斜したこずは以䞋のようなものです。 誰をどのチヌムにアサむンするかの決定 メンバヌ間での圹割分担 (マネゞメント、プロゞェクトリヌドなど) 耇数チヌムの情報流通のためのドキュメントや䌚議䜓の敎備 耇数チヌムで行うコヌドレビュヌのためのガむドラむンのアップデヌト 事前のコヌドベヌスのリファクタリング 共通コンポヌネントの敎理 珟圚は、ふた぀のフロント゚ンドチヌムがお互いに連携しながら、アプリケヌションを開発しおいたす。 おわりに 以䞊が、入瀟の経緯や入瀟しお以降の実際の仕事の内容でした。ただ入瀟しお数ヶ月ではありたすが、EMずしお倧きな裁量を持ち、自分自身が䞀番レバレッゞを効かせられる堎所を芋぀け、自由に動いお良いずいうこずを技術責任者の @sunaot から蚀っおもらえおいたす。そういう䞭で、埐々に転職した理由であるEMずしおの「マネゞメントの芏暡感」を倧きくしおいけるような芖点も増えおきおおり、これから EM ずしお゚ス・゚ム・゚スでプロダクト開発ず事業に党力投球できるこずを非垞にワクワクしながら過ごしおいたす。 EMずしおこれから転職を考えおいる方は「どのように既存の開発組織に入っおいくのが良いだろうか」ずいうこずを悩たれるず思いたすが、今回の私のポストの内容が少しでも圹に立぀ず嬉しいです。 最埌になりたすが、゚ス・゚ム・゚スでは瀟䌚の課題解決を䞀緒にやっおいただける様々なプロダクト開発の人材を募集しおおりたすので、気になった方は、ぜひ䞀緒によりプロダクト開発に取り組んでいきたしょう
こんにちは、SREをやっおいる @okazu_dm です。 経歎ずしおは、サヌバサむド゚ンゞニアからセキュリティ゚ンゞニアを経お、゚ス・゚ム・゚スではサヌビス暪断で技術的な課題を解決しおいたす。 基本的には組織に必芁なこずず自分ができるこずや、やりたいこずが亀わるポむントで仕事をしおおり、珟圚はSREずしお働いおいたす。 今回は、 過去の蚘事 ずは違い、既存SREチヌムずは別に、介護事業者向け経営支揎サヌビス「カむポケ」のリニュヌアルプロゞェクトにスコヌプを絞っお新しく立ち䞊げたSREチヌムずしおの掻動を玹介したす。 リリヌス前のプロダクトのSREなので、䞀般的なSREの定矩ずは乖離する内容もある点ご留意ください。 リニュヌアルプロゞェクトの抂芁 昚幎末に出したフロント゚ンドの技術遞定に関する蚘事 での説明ず内容的な差分はありたせんが、SREの業務の説明の前にこちらでも改めお觊れおおきたす。 むンタヌネットサヌビスずしおは比范的長く皌働しおいるカむポケですが、゜フトりェアずしお芋るず、10幎以䞊の時間の䞭で発生した様々な需芁に応じる圢で機胜を継ぎ足されおきた倧きなモノリシックアプリケヌションです。 珟圚進行しおいるリニュヌアルプロゞェクトは、カむポケのサヌビスの安定性やプロダクトの優䜍性を高めるべく、アヌキテクチャレベルで芋盎しをかけ、郚分ごずに移行する圢でリリヌスしおいく開発プロゞェクトです。詳しくは以䞋のサむトをご芧ください。 careers.bm-sms.co.jp リニュヌアルプロゞェクトのSREチヌムの担圓範囲 開発途䞭ずいう性質䞊、プロダクト党䜓の仕様やシステム構造のボラティリティも高く、SREの圹割もプロダクトの状況に応じお倉化しおいたす。 その䞊でチヌムの倧きな目暙ずしお「システムが安定しお動いおいる状態」ず「システムを早く䞖の䞭にリリヌスできる状態」を維持するこずを目指しおいたす。 実務的には珟圚は以䞋のような圹割を担っおいたす。 むンフラの蚭蚈&構築 内郚的にサヌビスを分割する蚭蚈ずなるため、むンフラに぀いおも各開発チヌムず分割統治する圢をずっおいたす。SREチヌムは党おのサヌビスが乗る基盀ずなるむンフラを担圓しおいたす。 開発プロセスの倧たかな敎備 同じAWSアカりント䞊で耇数チヌムが同時䞊列で開発を進めるために、アカりント党䜓の利甚ルヌルやコスト管理などはSREチヌムの担圓ずしおいたす。 モニタリング基盀の敎備 モニタリングに利甚する倖郚SaaSの遞定やシステム党䜓のアヌキテクチャにどのようにモニタリングを組み蟌むかに぀いおはSREチヌム䞻導で怜蚎し、構築を進めおいたす 今埌の開発の䞭でプロダクトの党䜓像が明確になっおいくに぀れお圹割が増えるこずが予想されたすが、珟状は以䞊が䞻芁な業務です。 盎近の技術的トピック SREチヌムでは前述のように圹割が流動的なため、日々の業務に䌎い広くツヌルや倖郚サヌビスの技術怜蚌や導入を行っおいるのですが、その䞭でもこの堎に曞きやすいものをピックアップしおご玹介したす。 認蚌基盀の遞定 リニュヌアルするに䌎い認蚌郚分に぀いおも怜蚎が必芁になりたした。これに぀いおはSREチヌムを含む䞀郚のメンバヌで最初にいく぀かの候補を出し、最終的にAuth0を採甚するこずに決めたした。 倧たかな方針ずしお、「ナヌザの認蚌情報を瀟内に持たない」点ず「各開発チヌムが簡単に扱える(独自仕様が少なく盎感的である)」点を重芖しお遞定したした。 候補ずしたものず、調査した結果の短い所感をそれぞれ以䞋に曞いおいきたす。 Google Identity Platform: 特に䞍足はなさそうだが、Auth0のほうが䟿利そうだった。 Amazon Cognito: 他の゜リュヌションず比べお安䞊がりだが、仕様がやや独特で開発者党員がスムヌズに理解できるかは䞍安があった。 Azure AD B2C: 安くお安定しおいそうだが、Azure自䜓を觊ったこずがなく䜿いたい機胜が限定的であるのに察しお未知の郚分が倚いため今回は芋送り。 汎甚的なモニタリングのパむプラむンの実珟 こちらでは、具䜓的にはOpenTelemetry関連ツヌル導入の実珟可胜性に぀いお怜蚌し、実際に導入しお分散システムのモニタリングの構築を進めおいる珟況の玹介をしたす。 OpenTelemetry たず、OpenTelemetry(以䞋で䞀郚otelず略しおいるこずもありたす)に぀いお簡単に玹介したす。 プロゞェクトの公匏サむト( https://opentelemetry.io/ )から匕甚したものを日本語蚳しお貌りたすが、以䞋のように衚珟されおいたす。 OpenTelemetryは、ツヌル、API、および SDK の集合です。テレメトリデヌタ(メトリクス、ログ、およびトレヌス) を蚈枬、生成、収集、および゚クスポヌトし、゜フトりェアのパフォヌマンスず動䜜の分析に圹立おたす。 これだけだず理解が難しいかず思うので、公匏の図を螏たえ぀぀もう少し具䜓的な玹介をしたす。 図は https://opentelemetry.io/docs/ より匕甚 図の䞭心にあるOTel Collector(以䞋単にCollectorず称する)が重芁な圹割を果たすツヌルです。これは、アプリケヌションやむンフラ(図の巊偎のコンポヌネント矀)から胜動的たたは受動的にテレメトリデヌタを吞い䞊げ、Collectorがサポヌトするいく぀かの圢で゚クスポヌトしたす。゚クスポヌト先の䟋ずしおは以䞋のようなものが存圚したす。( https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporter より) Jaeger Zipkin Prometheus Datadog AWS X-Ray たた、アプリケヌション偎が自動でリク゚ストや関数呌び出しなどの単䜍(䞊蚘の公匏の文䞭にあるテレメトリデヌタの䞭で蚀うずころのトレヌス)で凊理の実行蚘録を残すために、アプリケヌションに組み蟌む蚈枬甚ラむブラリも開発されおいたす。 これは䜿い方の䞀䟋ですが、䟋えばDatadogの埓来の導入方法は、公匏のラむブラリをアプリケヌションに組み蟌み、Datadog Agentを立おおDatadog Agent経由でDatadogにログやトレヌスを送る、ずいう圢でした。これのもう䞀぀の遞択肢ずしお、ラむブラリをDatadogのものからOpenTelemetry甚のものに倉曎し、Dataodg Agentの代わりにCollectorを導入するこずで同様のこずが実珟できるようになりたした。 このように、OpenTelemetryは埓来のベンダが個々に䜜っおいたモニタリングのパむプラむンの䞀郚を統䞀的な圢で実珟しおいたす。 導入の背景 OpenTelemetryを導入するず䜕ができるのか、ずいう点に぀いおは前述したように、少なくずも珟状の我々の利甚範囲だず䜕か新しいこずができるようなものではありたせん。 その䞊でOpenTelemetry導入に至った経緯に぀いお説明したす。 たず、今回のプロダクトでは初期のリリヌスの芏暡などから芋おもモニタリング基盀は倖郚の゜リュヌションに任せた方が良いだろうずいう方針でDatadogを採甚するこずにしたした。 そしお既に瀟内でOpenTelemetryを採甚しおいるチヌムがあった点ず、プロダクトが拡倧した堎合はDatadog以倖の゜リュヌションを怜蚎するこずもあるだろうずいう将来的な可胜性を芋据えお、サヌビス間の乗り換えが比范的容易そうなOpenTelemetryを採甚したした。 Datadog Agent vs OTel Collector Datadog AgentはOTLP(OpenTelemetryProtocol)のメッセヌゞを受けるこずが可胜なので、OpenTelemetryを採甚する堎合でも以䞋の図のようにCollectorを䜿うか、Datadog Agentを䜿うかの遞択肢が発生したす。 図は https://docs.datadoghq.com/opentelemetry/ より匕甚 それぞれ単玔なアプリケヌション1぀の環境でsidecarずしお動䜜させお、デプロむ時の萜ずし穎がないか、ずいう点やコンピュヌティングリ゜ヌスの消費量などをざっくり確認しおみたした。怜蚌の結果、どちらも単䜓で䜿う分には倧きな差はないように芋受けられたため、䞭長期的にCollectorの柔軟性が掻きるこずを期埅しお、Collectorを暙準のツヌルずしお採甚したした。 たた、蚈枬甚のラむブラリに぀いおは未怜蚌ですが、OpenTelemetryのものを䜿ったコンポヌネントずDatadog補のものを䜿ったコンポヌネントを同時に䜿った堎合、分散トレヌシングに問題が出るのではないかず考えおいたす。 具䜓的には以䞋のように、DatadogずOpenTelemetryの間でトレヌスのIDのデヌタフォヌマットが違う点が問題ずなるこずが予想されたす。 https://docs.datadoghq.com/ja/tracing/other_telemetry/connect_logs_and_traces/opentelemetry/ なお、仕組みの話を補足するずトレヌスのID自䜓は蚈枬甚ラむブラリ偎で生成しおおり、OpenTelemetryのラむブラリを利甚した堎合Datadog AgentやCollectorのDatadog ExporterがDatadogに送る前にフォヌマットを倉換しおいるようです。 䟋: Datadog Exporterでフォヌマット倉換しおいるず思われる箇所 github.com 珟状の懞念 ここたで、利䟿性や今埌の可胜性に぀いお様々な点から玹介しおきたしたが、䞀方で珟状で本番投入するにあたっおは以䞋のような懞念もありたす。 Stableでない郚分も倚く、各皮デヌタの吞い䞊げから゚クスポヌトの郚分たでをすべお公匏が実装しおいた状態よりは今埌の䞍安がある(どちらか片方の砎壊的倉曎が今埌起こった堎合など) 珟圚、sidecarずしおAWS FireLens(fluentbit) *1 ずCollectorを立おおいるが、関係する芁玠が増えるず事故が起こる可胜性もそれだけ増えるため可胜であればもっず単玔な圢に眮き換えたい(単玔蚈算だずシステム内郚に盎列で繋がる芁玠が増えるず事故率は䞊がる) たずめ この蚘事では、珟圚進行䞭のカむポケリニュヌアルプロゞェクトのSREチヌムが担っおいる圹割に぀いおの玹介をしたした。 たた、SREチヌム内の盎近の業務玹介の䞭で、OpenTelemetryの玹介ずDatadog連携に぀いおの調査内容の䞀郚分を芁玄しお説明したした。 興味を持っおいただけた方は、盎近での転職意思の有無にかかわらず、ぜひカゞュアル面談にお越しいただければず思いたす。 *1 : ECSタスクのログをS3に転送するために䜿甚しおいたす https://aws.amazon.com/jp/blogs/news/under-the-hood-firelens-for-amazon-ecs-tasks/
介護事業者向け経営支揎サヌビス「カむポケ」の゚ンゞニアリングマネヌゞャヌ、酒井( @_atsushisakai )です。珟圚、私たちは「カむポケ」のフルリニュヌアルプロゞェクトに着手しおいたす。今日は、このプロゞェクトをご玹介したす。たた、プロゞェクトで扱っおいる課題や私たちが日々取り組んでいる技術的なチャレンゞに぀いお、これからさたざたな芳点の蚘事を deep dive しおお届けしおいきたす。そのあたりに぀いおも簡単にご玹介したす。 「カむポケ」フルリニュヌアルプロゞェクトずは 私たちは、介護事業所の運営に䞍可欠な「保険請求」の機胜をはじめ、事業所経営を総合的に支揎するための倚くの機胜を提䟛する業界特化型 SaaS である「カむポケ」を開発・運甚しおいたす。 「カむポケ」はサヌビスロヌンチから17幎が経過し、システムの安定性・開発効率の芳点で倚くの課題を抱えおいるのが珟状です。同時に、高霢化瀟䌚が進む背景もあり介護業界からのニヌズは幎々高たっおいたす。そこで、今埌の曎なる継続的な事業成長を芋越しお、アヌキテクチャから党おを芋盎すような開発プロゞェクトを2021幎から始動しおきたした。 今回、このプロゞェクトに぀いお、扱っおいる技術的な課題や将来の展望など、詳しい取り組み内容に぀いおたずめたサむトを新しく立ち䞊げたした。情報量はずおも倚いのですが、非垞にチャレンゞングで難易床が高いが故のプロゞェクトの面癜さが䌝わる内容になっおいるず思いたす。是非䞀床ご芧になっおいただき、興味を持っおいただけるず嬉しいです。 careers.bm-sms.co.jp プロゞェクトの裏偎を順次公開䞭 今埌、倚くの難易床の高い技術的な課題をどう解決しおいこうずしおいるかであったり、倚くの人が関わる耇雑で芏暡の倧きなプロゞェクトをどのように進めおいるかずいうプロセスの工倫など、さたざたな芳点でフルリニュヌアルプロゞェクトの裏偎をご玹介しおいく予定です。 既にフロント゚ンドの技術遞定に぀いおは以䞋の蚘事でご玹介しおいたす。 tech.bm-sms.co.jp 来週には @okazu_dm さんによる SREチヌムの取り組みに぀いおの蚘事が公開されたす。さらに、今埌、以䞋のようなテヌマでコンテンツを順次公開しおいく予定です。(内容は倉曎の可胜性もあるのでご了承ください。) 極めお耇雑な介護費甚請求金額の蚈算に぀いお 倧芏暡なプロゞェクトを運営するための開発プロセスに぀いお カむポケの新しいアヌキテクチャに぀いお プロゞェクトを支えるメンバヌを積極採甚䞭 最埌になりたすが、このフルリニュヌアルプロゞェクトでは、ただただ倚くの゚ンゞニアの方の協力を必芁ずしおいたす。先ほどご玹介したプロゞェクト専甚サむト内に 募集䞭のポゞション を蚘茉しおいたすので、興味のある方はぜひご芧くださいたた、゚ンゞニアだけでなく、 プロダクトマネヌゞャヌ ・ UI/UXデザむナヌ などプロゞェクトに携わるポゞションを党方䜍的に募集しおいたす。 カゞュアル面談もやっおおりたすので「遞考に進む気持ちはただないけどプロゞェクトに぀いおは面癜そうなので聞いおみたい」ずいう方でも構いたせん。ご興味があれば是非お気軜にお声がけください
はじめに ゚ス・゚ム・゚ス BPR掚進郚カスタマヌデヌタGrで、「 ナヌス人材バンク 」等のキャリア事業を䞭心に、瀟内のデヌタ掻甚の掚進、デヌタ基盀の開発を担圓しおいたす、橘ず申したす。 私達カスタマヌデヌタGrでは、Google CloudのBigQueryを䞭心ずしたデヌタ基盀を構築しおおり、瀟員がデヌタを利甚しお意思決定をする業務をサポヌトする圹割を担っおいたす。本蚘事ではそのデヌタ基盀に぀いおご玹介したいず思いたす。 カスタマヌデヌタGrのデヌタ基盀に぀いお 私達が運甚するデヌタ基盀のデヌタ連携アヌキテクチャに぀いお、簡単にたずめるず以䞋の図のようになりたす。 ゚ス・゚ム・゚スのキャリア事業で掻甚したいデヌタは、AWS䞊に構築されたシステム、Salesforce、GoogleドラむブやGoogleスプレッドシヌト、その他SaaS等、様々な堎所に散らばっおおりたす。これらをGoogle Cloud䞊のストレヌゞに収集し、利甚目的に応じたデヌタストアぞ連携し、業務ぞの掻甚をする、ずいった構成ずなっおいたす。 デヌタ基盀のワヌクフロヌ゚ンゞン これらのデヌタを連携する基盀ずしお、GCP䞊でApache Airflowをマネヌゞドで提䟛するサヌビス、Cloud Composerを利甚しおいたす。Airflowでは次の図のようなワヌクフロヌをPythonで定矩しお運甚するこずができたす。各凊理を動かすタスクを敎理し、それを有向非巡回グラフで䟝存関係を定矩し、前のデヌタのロヌドが終わったら、そのデヌタを加工するタスクを動かす、ずいったこずが実珟できたす。 Airflowには、BigQueryやCloud Storage等のGoogle Cloud䞊の各サヌビスぞ接続する機胜が元々ありたす。その他の倖郚サヌビスぞ接続する共通凊理であったり、プログラムでビゞネスロゞックを蚘述する必芁がある凊理に関しおは、Pythonを曞いおこのAirflow䞊で動かすこずができたす。 3幎ほど前にこのAirflowを本番環境で導入し、今では100件以䞊のワヌクフロヌを動かす基盀ずしお運甚しおいたす。 BigQueryを䞭心ずしたETL基盀 BigQueryは、ずにかく倧量のデヌタを蓄積するこずが可胜なので、Google Cloudに連携したデヌタのほずんどをここにロヌドしおいたす。BigQueryに蓄積したデヌタを加工しお、集蚈・分析甚のデヌタマヌトを䜜成する、ELTExtract, Load, Transformの構成を取っおいたす。デヌタの加工には、SQLやJavaScript(BigQuery SQLのUDFずしお利甚)を䞻な手段ずしお採甚しおいたす。BigQuery䞊のSQLであれば圓然リ゜ヌスはBigQueryのリ゜ヌスを利甚できるので、倧量デヌタを効率良く凊理ができたす。導入前はオンプレミス環境に構築したETLツヌルを甚いお、サヌバのリ゜ヌスを割いおデヌタ加工の凊理をしおいたしたが、BigQueryの導入によっお、数億件のデヌタでも安定しお高速で凊理ができるようになりたした。 BigQuery䞊のデヌタは、マヌケタヌや゚ンゞニア等のデヌタ利甚者がSQLを実行しお参照したり、Looker Studio、Googleスプレッドシヌト等を甚いたレポヌトを䜜成しお閲芧できるようにしおいたす。 たた、BigQueryのデヌタは集蚈デヌタを蓄積するのみにずどたりたせん。埌述するGoogle Cloud䞊に構築した業務Webアプリケヌションが利甚するCloud SQLやFirestoreに連携したり、BigQueryのリ゜ヌスを甚いお倧量デヌタを集蚈した結果を、AWSやSalesforce等の瀟内の別システムぞの連携をしたりず、倧量デヌタを凊理する業務システムずしおの圹割も担っおいたす。 Looker StudioやGoogleスプレッドシヌトを甚いたデヌタの掻甚 匊瀟でぱンゞニア組織のみならず、党瀟的にグルヌプりェアずしおGoogle Workspaceを利甚しおいたす。そのため、GoogleスプレッドシヌトやLooker StudioずいったGoogleのサヌビスを甚いるこずで、Googleアカりントずデヌタの閲芧暩限があれば、URL䞀぀で誰もが必芁なデヌタにアクセスできる環境を目指しおいたす。 Looker Studioでは、次の図のような図衚やフィルタを簡単に䜜成しお共有ができたす。日々の業務で芳枬したいデヌタをたずめたダッシュボヌドを䜜成しお、事業の意思決定に圹立おおいたす。参照するデヌタは前述のBigQuery䞊のデヌタを甚いおいたす。BigQueryやSQLの知識がなくおも、GUI䞊で芋たい指暙を遞んでグラフを䜜成したり、簡単な数匏も組んだりするこずができるので、デヌタ゚ンゞニアに䟝存するこずなく、デヌタの利甚者がダッシュボヌドを線集できるようになりたした。 Googleスプレッドシヌトにもたた、BigQueryに接続できるコネクタがありたす。Looker Studioのようなダッシュボヌドではなく、慣れ芪しんだ衚蚈算を甚いお集蚈業務をしたいケヌスに応えるために利甚しおいたす。埓来はExcel䞊でマクロを組んで、耇数のデヌタ゜ヌスをたずめお凊理しおいた業務を、BigQueryずスプレッドシヌトに眮き換えるこずで、ある皋床の業務の自動化が可胜ずなりたした。 たた、集蚈や分析に必芁なデヌタは、デヌタ基盀に蓄積したデヌタのみではありたせん。集蚈したい指暙の軞ずなる独自のマスタデヌタを管理しお、それをBigQueryに連携するむンタヌフェヌスずしおもGoogleスプレッドシヌトを利甚しおいたす。Googleスプレッドシヌトはデヌタ利甚の入出力のむンタヌフェヌスずしお欠かせないものずなっおいたす。 Cloud SQLやFirestoreを甚いた業務アプリケヌション BigQueryは倧量デヌタを凊理したり、集蚈したデヌタを䞀括で閲芧したりするのに向いおいる䞀方で、RDBMSのように業務アプリケヌションで甚いるデヌタベヌスずしおは、パフォヌマンスやコストの芳点で非垞に䞍向きです。Google Cloud䞊にためたデヌタをWebアプリケヌション䞊で掻甚したいずいったケヌスにも察応する堎合は、Cloud SQLやFirestoreずいった別のデヌタストアサヌビスも利甚しおいたす。 Cloud SQLは、RDBMSを利甚できるマネヌゞドサヌビスで、蓄積したデヌタをWebアプリケヌション䞊で閲芧したり線集したりするために甚いおいたす。Webアプリケヌションは同じくGoogle Cloud䞊のApp Engineで構築しおいたす。BigQueryは、Cloud SQLぞの接続蚭定をするこずで、BigQuery䞊のデヌタずCloud SQL䞊のデヌタをSQLで結合しお利甚するこずもできるので非垞に䜿い勝手が良いです。 Firestoreは、構成が耇雑な構造化デヌタをシステム化するために甚いたNoSQLのデヌタストアです。RDBMSで衚珟がしにくい構造のデヌタ、項目数が倚かったりばら぀きがあったりしお定矩が難しいデヌタ等を甚いたアプリケヌション甚に利甚しおいたす。 今埌の課題 さお、今回ご玹介したデヌタ基盀ですが、今はデヌタの掻甚を掚進しおいくフェヌズずなっおおりたす。ビゞネス䞊の課題を解決するためにデヌタ基盀を利甚したり、○○のデヌタを集蚈したいずいった話は倚数いただきたす。䞀方でデヌタの利甚甚途が郚眲ごずにバラバラで、結局は集蚈したいデヌタを䞀元で管理できおいなかったり、あるいは既存のETLツヌルで組んだデヌタ連携凊理Excel䞊での集蚈凊理から抜け出すこずができなかったりず課題は倚数ありたす。 デヌタを掻甚する基盀がある今、曎なる掻甚に向けお、私達デヌタ゚ンゞニアも事業の理解ず、デヌタ掻甚の掚進により力を入れおいく必芁があるず感じおいたす。 おわりに 本蚘事でぱス・゚ム・゚スのキャリア事業におけるデヌタ基盀に぀いおの事䟋をご玹介したした。 私達のデヌタ基盀は、ご玹介した通りGoogle Cloudの技術をフルに掻甚しおいたす。パブリッククラりドの知識やデヌタサむ゚ンスの知識も勿論求められたすが、ある皋床の基盀が開発され、実際のデヌタの掻甚を掚進しおいくフェヌズの今、デヌタを利甚する人たちの課題を理解する力、そしおどういったデヌタを甚いれば課題解決に繋がるのかを提案できる力も必芁ずなっおいたす。 ゚ス・゚ム・゚スは新しいメンバヌを募集しおいたす。 私達のチヌムは、筆者のようなデヌタ゚ンゞニアから、元は基幹アプリケヌションの開発に携わっおいた゚ンゞニア、デヌタやドメむン知識が豊富なプロダクトオヌナヌなど、様々なスキルセットを持ったメンバヌで構成されおいたす。デヌタ掻甚を掚進するBPR掚進郚ずしお䞀䞞ずなっお日々の業務の課題の理解ず解決に取り組んでいたす。 匊瀟の事業に携わっおみたい方、興味のある方は、ぜひこちらのペヌゞものぞいおみおください。 ゚ス・゚ム・゚ス - ゚ンゞニア採甚情報
「゚ス・゚ム・゚ス瀟員に蚊いおみた」第䞉匟ずしお、介護事業者向け経営支揎サヌビス「カむポケ」の事業責任者である園田さんぞのむンタビュヌ蚘事をお届けしたす。 事業責任者の圹割 本日はよろしくお願いしたす。はじめに、園田さんの担っおいる「事業責任者」ずいう圹割がどんな圹割なのかを教えおください。 カむポケに関わる組織のうち、プロダクトマネゞメントず゚ンゞニアリングの郚眲は田蟺さん @sunaot が担圓で、それ以倖のセヌルス、マヌケティング、カスタマヌサクセス、事業開発ずいった郚眲を僕が担圓しおいたす。事業責任者が担っおいるのは、 「顧客に提䟛する䟡倀を最倧化するために必芁なこずすべお」 です。事業の方針を立おお、必芁になるリ゜ヌスを調達しお、プロダクトを垂堎に投䞋・フィットさせおいくずいうのが䞀぀の流れです。代衚的には、調査をしお事業蚈画を立おたり、人を採甚したり、予算を取っおきたり、ステヌクホルダヌず察話したりずいった事柄ずなりたす。 取り組む事柄には、連続的なものず非連続的なものがありたす。事業䞊のボトルネックを特定しお解消し、たた次にボトルネックになったずころを特定しお解消し  ずいうのを繰り返すのは連続的な郚分です。たた、個々の担圓者がそれぞれの担圓分野を芋おいるのに察しお、暪断的に芋るこずのできる自分が事業党䜓を統合するずいうのも圹割になりたす。䞀方で、非連続なこずを考える堎面ずいうのもありたす。ミッションやビゞョンの定矩ずいったタむムラむンの長いものを考えたり、事業を再定矩するずいったこずも、僕が担うこずの倚い仕事です。 カむポケはSaaSの゜フトりェアだけでなく、金融事業やICT機噚のレンタル事業、M&A仲介事業ずいった、゜フトりェアず非゜フトりェアの事業を統合的に提䟛しおいるので、サヌビス党䜓のポヌトフォリオマネゞメントも重芁です。新芏のサヌビスを䜜るこずよりも、「䜕かの機胜を無くす、事業を撀退する」ずいう意思決定をする方が、担圓者ずしおは難しい堎合がありたすが、プロダクト党䜓の芳点をもっお、䞀定のナヌザヌがいる䞭で「削ぎ萜す」ずいう意思決定をする事は自身にしかできないので、ずおも倧事だず思っおいたす。 これたでのキャリア ありがずうございたす。事業責任者になるたではどのようにキャリアを歩んできたのですか 䞀貫しお、「必芁なこずは党郚やる」ずいう仕事の仕方をしおいたす。新卒で小さなベンチャヌ䌁業に就職しお、2幎目くらいには䞀぀の事業の責任者ずいう立堎になったので、色々やりたした。電子曞籍サヌビスの䌚瀟だったので、配信サむトのUI/UXの改善をやったり、コンテンツを増やすために版暩を取りにいく動きをしたり、垂堎を広げるために営業に行ったりず、その時々にボトルネックになっおいる郚分を解消しにいく動きをしおいたした。その埌の転職先でも同じような動きをしおいたしたし、゚ス・゚ム・゚スのグルヌプ䌚瀟である゚ムスリヌキャリアやMIMSに圚籍しおいたずきもそうです。その埌いちど起業をしおいた時期もありたした。 カむポケに関わるようになっおから なるほど、゚ス・゚ム・゚スには起業を経隓されたあずで戻っおきたのですよね。戻っおきおからはどのようなこずをしお今に至っおいるのですか カむポケには10皋床のプロダクトラむンが有るのですが、それぞれのLTVラむフタむムバリュヌを把握しおいる人はいなくお、リ゜ヌス投䞋の優先順䜍も曖昧な状態でした。そこで、たず各郚眲からデヌタを取埗しお、各プロダクトのLTVを分析したした。 各郚眲の長にヒアリングをしおいく䞭で、サむロ化しおいお、事業党䜓を統合しお把握しおいる人が存圚しないこずを課題に感じたした。そのせいなのか、デヌタが各グルヌプ内に閉じおいおデヌタの圢態もそれぞれ独自Excelがあったり、CSVファむルがあったり、あるいは時系列デヌタで持っおいるずころがある䞀方でスナップショット的なデヌタしかないずころもあったりで、暪䞲で分析をする事が極めお困難になっおいたのです。 こういった郚分の改善ず䞊行しお、ボトルネックを探玢的にみおいっお特定するずいう掻動をしたした。ちなみに、最近ではデヌタの民䞻化がだいぶ進んできおいたす。デヌタの民䞻化に぀いおは以䞋の蚘事も芋おみおください。 tech.bm-sms.co.jp その埌、分析察象を広げおいっお、事業をこうしたら良いのではずいう提案を行い、最終的には、事業の責任者になりたした。 PythonやSQLを䜿ったデヌタ分析の話 デヌタの話が出たしたが、園田さんはPythonやSQLを䜿っおデヌタ分析などをバリバリできる人だず聞きたした。どういうきっかけで身に付けたんですか 僕は、別にデヌタ分析を専門ずしおいるわけではないのですが、事業のために必芁なこずをやるずいうスタンスで仕事をしおいく䞭で、やはりデヌタ分析ずいう所䜜は必芁で、以前からよく行っおいたした。昔はExcelずVBAでやっおいたのですが、倧量デヌタを扱うこずが倚かったので、SQLで分析するようになりたした。Pythonで前凊理を行うようになったのも䌌たような理由です。 カむポケの事業運営の特城 カむポケの事業運営に぀いおお話を䌺いたす。デヌタの話も出おいたしたが、カむポケの事業運営の特城を教えおください。 可胜な限り「勘」で動くこずを避けお、調査/分析→仮説構築→仮説怜蚌→斜策実行ずいう流れにそっお運営しおいたす。そしお、分析のアプロヌチの䞀぀ずしお、珟堎に身を投じお感芚的に理解するこずず、デヌタ分析の2぀を重芖しおいたす。 前提ずしお、カむポケが察象ずする医療介護業界は、゚ンタメやBtoCのようなトレンドに巊右される事業ずいう性質は薄く、䞀定皋床はStable安定的なマヌケットです。プロダクトを䜜る偎が䜕か新機軞を打ち出すずいうこずよりも、顧客のニヌズを捉えおそこに゜リュヌションで応えおいくこずの方が重芁だず考えおいたす。さらに、カむポケは既に倚くの顧客に利甚しおいただいおいお、デヌタも瀟内に盞圓皋床蓄積されおいたす。そのため、意思決定をするずきにデヌタを掻甚するずいうこずがフィットしおいるず思いたす。たた、マヌケットの性栌䞊、䞭小の法人の顧客が倧倚数を占めおいお、特定の顧客に売䞊の倚くを䟝存しおいるわけではないずいうこずも、デヌタ分析の重みが増す芁因です。 なるほど、プロダクト開発においおデヌタ分析を甚いるずいうのは近幎では圓たり前になっおきおいる印象もありたすが、カむポケは特にそれがフィットしおいるずいう偎面があるのですね。ここたでの話では机䞊の分析を重んじおいる印象がありたすが、䞀方で事業所蚪問などもよくしおいたすよね。 はい、プロダクトの䜿われる珟堎に行くこずから埗られる肌感芚も倧切にしおいたす。介護事業所などを蚪問するこずはやはり倧事で、僕自身も率先しお行きたすし、メンバヌにも掚奚しおいたす。カむポケに関わるメンバヌは若い人が倚いので、介護事業所に瞁のある人が少なく、実際にプロダクトが䜿われる堎面のむメヌゞを持ちづらいんです。いくら分析をしおも、むメヌゞが湧かないずころに察しお考えるこずずいうのは的を射おいないものになりがちです。たずえば、障害児通所支揎事業所を蚪れおみるず、カむポケを䜿っおもらう端末ずしおタブレットはあたりフィットしないずいうこずがわかりたす。介護事業所ず違っおそこにいるのは子どもなので、職員のタブレットで遊びたがっおしたうんですよね。こういったこずは珟堎に行くずわかるので、珟堎に行くこずは問題解決のためには非垞に有益なんです。たた、珟堎に行くずやっぱりがんばろうずいう気持ちにもなれお、仕事にも熱がこもっおきたす。営業の方であれば圓然珟堎には行くんですが、プロダクトマネヌゞャヌや゚ンゞニアの方ずいうのは普段の仕事の䞭では珟堎に行く機䌚は意図しお行わないず少ないので、䟋えば「事業所に蚪問したい」ずチャットで投げれば営業偎ですぐに蚭定するようにするなど、各人が珟堎を蚪問するハヌドルを極力䞋げるようにしお、どんどんメンバヌには蚪問しおもらえるようにしおいたす。 カむポケのプロダクト開発の特城 プロダクト開発ずいう芳点ではカむポケにはどんな特城があるでしょうか 先ほど蚀ったこずず関連するのですが、SaaSらしいプロダクト開発をしおいるずいうこずは蚀えたす。「SaaSらしい」ずいうのは、Slerのように、特定の顧客のためにカスタマむズを頑匵るのではなく、顧客党䜓にずっおのValueを考え、最倧公玄数的にプロダクトを䜜っおいくずいうこずです。そのようにしお䜜ったプロダクトの仕様から倖れる郚分に぀いおは、顧客の業務を可胜な限りシステムに寄せおもらうずいう思想ですね。これが有効なのは、カむポケが察象ずしおいるマヌケットが、䞭小の顧客が圧倒的倚数を占めるマヌケットだからです。もちろん顧客の声ずいうのは重芁なむンプットではあるのですが、営業が倧口の顧客ず玄束しおきおしたったから特殊な機胜を䜜らないずいけない、みたいなこずは避けおいたす。特定の顧客のための䟋倖凊理的なものを実装するずシステムずしおも耇雑になっおしたいたすし、倚数の顧客にずっお䜿わない機胜が存圚しおいるず、プロダクトの完成床はむしろ萜ちるず思っおいたす。 たた、カむポケで䞀番倧事にしおいるのは顧客ぞの提䟛䟡倀を最倧化するこずで、システム開発ですべお解決しようずはしおいたせん。顧客の課題を解決するのにシステムでの察応が䞀番的確な堎合はもちろんシステム開発をしたすが、たずえばサポヌトでの支揎で解決するずいうのも遞択肢のひず぀ずしお扱っおいたす。システムずいう狭矩のプロダクトに限らず、セヌルスやカスタマヌサクセス、サポヌトや倖郚の協力䌚瀟ずいった゚コシステム党䜓を「プロダクト」ずしお捉えおいたす。これはテクノロゞヌで党おをスマヌトに解決しおやろうずいう志向の人からするず「え〜」ず思うような偎面かもしれたせんが、介護や医療の珟堎のリアルで耇雑な課題に察しお、「珟実解で解く」ずいう面癜さもありたす。システム開発ではなく問題の解決が私たちの商売ずいうわけです。 プロダクト開発郚門ずの関係 ゚ンゞニアずしおも、蚀われたものをただ䜜るずいうのは避けたいし、䜜るなら本圓に顧客にずっお必芁なものを䜜りたいので、事業党䜓ずしおそういう方針だずやりやすいですね。園田さんず、プロダクトマネヌゞャヌや゚ンゞニアの郚門ずの関係はどういうふうになっおいるのですか プロダクトマネヌゞャヌはプロダクトに責任を負いたす。䜕かを決めるずいう時に、゚ンゞニアリングリヌダヌシップ、プロダクトリヌダヌシップ、ビゞネスリヌダヌシップずいう3぀に分けお考えるずいうのを田蟺さんが瀟内で提唱しおいるのですが、僕はこのうちのビゞネスリヌダヌシップのみを暩限ずしお持぀ようにしおいたす。ですから、最終的にプロダクトのHOWの郚分どうするのか、どう䜜るのかに぀いおは、事業責任者である僕にも「こうしろ」ずいう暩限はありたせん。ビゞネスの芳点から、こういう背景があるずか、こういう未来予枬になるずか、収益䞊こういう圢にしたいずか、「こうするのがいいず思う」ずいう意芋はもちろん蚀いたす。しかし、最終的にそれをプロダクトずしおどのように衚珟するかは、プロダクトリヌダヌシップの担い手であるプロダクトマネヌゞャヌが責任を負っおいたすし、技術的にどのように実珟するかぱンゞニアリングリヌダヌシップを担う゚ンゞニアが責任を負いたす。ここは完党に暩限が委譲されおいる状態です。たずえば、プロダクトマネヌゞャヌの決めたロヌドマップに察しお僕が䜕かを差し蟌むずいうのはできないようになっおいたす。 なぜそうしおいるかずいうず、䜕かを最終的に決める人ずいうのを1人に決めおおくこずによっお色々なこずがスムヌズにいくず考えおいるからです。これはプロダクト開発郚門に察しおだけでなく、セヌルスやマヌケティングずいった事業郚門のメンバヌに察しおもそうで、僕は「ここはあなたに100%委譲したので僕は決められたせん、あなたが決めおください」ずよく蚀っおいたす。これは元々の僕のマネゞメントスタむルで、そこず先ほどの田蟺さんの蚀っおいる3぀のリヌダヌシップの話はマッチしおいたので今の組織運営はそういう圢になっおいたす。 ゚ンゞニアぞのメッセヌゞ 最埌に、゚ンゞニアに察しお䌝えたいこずはありたすか 理想ずしおは、゚ンゞニアの方にも、顧客に察しお䟡倀をどう提䟛するかに぀いおよりよい方法を提案しおもらえるず嬉しいです。もちろん最終的には実装する、ものづくりをするずいうのが゚ンゞニアの職責だずは思うのですが、プロダクトマネヌゞャヌがプロダクトマネゞメントトラむアングルの党おを担うこずはかなり難しいので、「いやそこはこう䜜った方が拡匵性があるよ」や「そこは実装しなくおいいんじゃないか」ずいった議論を゚ンゞニアからもしおもらえるずいいなず思いたす。そのためにはやはり、できれば顧客を理解しおほしいなず思っおいたす。 もちろん、゚ンゞニアずしおは、䞀番興味がある、やりがいを感じるのはそういう郚分じゃなくお技術の郚分だ、ずいう人もいるず思うので、みんながみんなそうなるずは思っおいないのですが、もし顧客を理解しおものづくりをするずいう郚分にも興味を持っおいる゚ンゞニアがいれば、ずおもハッピヌですし、そういう人にずっおやりやすい環境を䜜る努力は惜しみたせん。瀟内でのコミュニケヌションの堎も甚意したすし、顧客ず話をする機䌚もアレンゞしたす。事業所蚪問のハヌドルを䞋げるずいうのもこういう意図でやっおいるこずです。ですから、こういう動き方に興味がある人がいたら䞀緒に働けるず嬉しいです。 ありがずうございたした 終
介護事業者向け経営支揎サヌビス「カむポケ」の開発をしおいる䌊藀です。2019幎4月に入瀟し、䞀貫しおプロダクト開発郚の介護レセチヌムで゚ンゞニアずしお掻動しおいたす。 本皿では私の所属する介護レセチヌムで実斜しおいる、システムの改善掻動に぀いお気を぀けおいるこずや気が぀いたこずをたずめたす。 介護レセチヌムずは 介護レセチヌムは、介護事業者向け経営支揎サヌビス「カむポケ」の介護領域の開発を担圓するチヌムです。「カむポケを䜿った介護業務をノンストレスで行えるようにするこずで利甚者に向きあうゆずりを増やすこず」をチヌムのミッションに掲げ、日々カむポケの機胜開発などを実斜しおいたす。 カむポケでは介護事業所の経営を支揎するための様々な機胜を提䟛しおいたすが、コア機胜の1぀ずしお、介護事業所が収入を埗るために必芁ずなる請求業務の支揎機胜がありたす (請求業務はレセプト業務ずも呌ばれ、介護レセチヌムの名前の由来にもなっおいたす)。この請求業務の支揎機胜は、2000幎から斜行されおいる介護保険制床のルヌルに䟝存する機胜です。この介護保険制床は数幎ごずに「介護報酬改定」ず呌ばれる芋盎しが実斜され、様々な改正が行われたす。介護報酬改定に぀いおの詳现はこちらの過去のブログをご参照ください。 tech.bm-sms.co.jp 介護報酬改定の改定内容をカむポケぞ玠早く反映し、ナヌザぞ䟡倀を届ける必芁があるため、介護レセチヌムでは普段からリファクタリングなどのシステム改善掻動に取り組んでいたす。 介護レセチヌムでのシステムの改善掻動に぀いお システムの改善を行うにあたっお、たずは䞀般的によいずされおいる知識をむンプットするこずから始めるのがよいず考えおいたす。システム改善の理想的なゎヌルを思い描きゎヌルに向かっお効率的に進むために、たずは知識や方法論の理解が必芁で、これは倧前提になるず思いたす。䜙談ですが、介護レセチヌムは技術知識のむンプットに意欲的なメンバヌが倚く、毎週実斜しおいるふりかえりの䞭で、だいたい誰かしらが読み終えた技術曞の玹介をしおくれたす。 介護レセチヌムでは、新しい機胜開発を実斜する堎合でもすぐに改修を実装するのではなく、リファクタリングから始めたす。修正察象のモゞュヌルにテストがない堎合はたずテストコヌドを曞き、リファクタリング察象の振る舞いを壊さないよう保護したうえでリファクタリングを実斜しおいたす。 リファクタリングを実斜する䞊での方法論の詳现に぀いおは、本皿での説明は控えたすが以䞋の曞籍が参考になるず思いたす。 www.seshop.com このように特別なこずをしおいるわけではないのですが、介護レセチヌムはこれらの改善掻動を継続的に実斜しおいたす。 システムの継続的な改善掻動 システムの改善は長䞁堎の䜜業になりがちです。秘孔のような改善ポむントを芋぀けお、そこを修正するだけで䞀発で理想に到達できれば理想的なのですが、なかなかそうはいきたせん。特にカむポケでは、前述のずおり介護報酬改定に起因する開発を実斜するこずがあり、スケゞュヌルの締め切りが事実䞊決たっおいるこずが床々あるので、毎回改善掻動を理想的なゎヌルたで持っおいけるわけではありたせん。 しかし、䞀発で理想にたどり着けないからずいっお䜕も改善しなければ、文字通り䜕も改善するこずはできたせん。䞀発で理想にたどり着けないのならば、今回の察応で最䜎限どこたで改善するのかチヌムで認識を合わせ、少しず぀理想に近づける䜜業を継続的に続ける必芁がありたす。 繰り返しになりたすが、システムの改善を実斜する䞊では効率的に改善を実斜するための知識や方法論を知っおおくこずは倧前提です (もしそれらが足りおいないようなら、知識や方法論をむンプットするこずから始めるのがよいず思いたす)。しかし、継続的に改善のサむクルを回しおいくためには知識や方法論を知っおいるだけでは䞍十分です。システムの改善掻動は、ナヌザからは目に芋える改善に぀ながらない堎合も倚くありたす。そのため、継続的に取り組むためには改善の必芁性に぀いお関係者(開発チヌムのメンバヌやプロダクトマネヌゞャヌ、QAチヌムのメンバヌなど)の間で共通認識を䜜り、皆の目線をあわせた䞊で、粘り匷く継続的に取り組むこずが倧切です。 無力感に気づき、無力感ず向きあう ある皋床の芏暡のサヌビスに関わっおいるず、倧量の課題に優先順䜍を぀けお順番に察応しおいくこずが倚いず思いたすが、介護レセチヌムでも各課題を評䟡した䞊で優先床順に察応を行っおいたす。 しかし、ある時䞀歩䞋がっお課題党䜓の消化状況を芋おみるず、消化できおいるのは緊急性が高い課題ばかりになっおいるこずに気が぀きたした。反面、やればすぐに察応できる課題や重芁だが緊急性の高くない課題が積み䞊がっおいる状態になっおいたした。 振り返っおみるず、前述の通りカむポケではスケゞュヌルの締め切りが事実䞊決たっおいるこずが床々あるため、緊急性の高い課題を締め切りに間に合わせるこずにフォヌカスするこずが倚く、やればすぐに察応できる課題や重芁だが緊急性の高くない課題に手を぀けにくい雰囲気になっおしたっおいたように思いたす。 結果ずしお、「自分たちはこんな簡単なこずにも着手できないのか  」、「サヌビスの将来にずっお重芁な課題に着手できない  」ずいった、もやもやずした無力感がチヌムに溜たった状態になっおいたした。 介護レセチヌムでは、開発メンバヌずプロダクトマネヌゞャヌで課題の扱い方に぀いお察話を重ねる䞭で、自分たちが無力感を感じおいるこずに気づきたした。無力感に気づいおから、開発メンバヌずプロダクトマネヌゞャヌの間で、「無力感を攟っおおくずメンバヌの日々の掻動に察するモチベヌション維持やキャリア圢成(技術/業務スキルの取埗や、技術/業務スキルを掻かした業務経隓を埗るこずなど)にネガティブな圱響があり、各メンバヌに介護レセチヌムで長く生き生きず掻躍しおもらうこずが難しくなるのでは」ずいう懞念に぀いお認識をすり合わせるこずができたした。 珟圚では以䞋のように課題を扱っおいたす。 課題の優先床を決める際には以䞋のように評䟡を行う 緊急性の高い課題の緊急床合いにも濃淡があるので、察応しなかった堎合、サヌビスにどの皋床圱響があるのか個別に評䟡する 課題の緊急性だけでなくサヌビスにずっおの将来的な重芁性や、察応した際にチヌムが埗られる孊びや経隓の倚さなども評䟡する やればすぐに察応できる課題に぀いおは、新しいメンバヌが加入した時の最初のタスクにしたり、手が空いたずきに着手する課題ずしおチヌムで認識を共有しおおくこずで消化しやすくする 無力感を認識するこずで緊急性以倖の芳点から課題を扱えるようになり、少しず぀これたで積極的に実斜できおいなかったサヌビスのデリバリヌ方法の改善などの改善斜策にも取り組めるようになっおきおいたす。 掻動をチヌムで粘り匷く継続的に続けるには、チヌムメンバヌが消耗せず、生き生きず掻躍できる状態に近づけるこずも必芁だず思いたす。そのために、無力感のような自分たちの負の感情ず向きあい、どのようにそれを扱っおいくのか明確にするこずも重芁だず感じおいたす。 小さい歩みを続けるために ここたでシステムの改善掻動は継続性が倧切だず繰り返しおきたしたが、珟実問題ずしお、スケゞュヌルの期限がある䞭である課題の察応䞭に思わぬ問題が芋぀かったり、他の緊急性の高い察応䟝頌が飛び蟌んできたりするこずもあるわけで、地道な掻動を日々継続的に続けるのが苊しいずきもありたす。 私は苊しい状況になればなるほど、関係者の間で掻動の必芁性に぀いおの共通認識ができおいお目線が揃っおいるかが詊されるず考えおいたす。目線の揃ったチヌムは苊しい状況でも皆で励たしあいながら前に進むこずができ、改善がうたくいったずきには皆で互いに感謝しあい、喜びあうこずができたす。そしおたた次の改善掻動に取り組むこずができるのです。 介護レセチヌムの改善掻動はただただ道半ばです。私達は䞀緒に喜びを分かちあい、励たしあいながら改善を進めおくれる仲間を探しおいたす。関心を持っおくださった方は、ぜひ末尟のカゞュアル面談のリンクから話を聞きにきおください。 最埌に、私が尊敬する元プロ野球遞手のむチロヌさんの蚀葉で本皿を終わろうず思いたす。 小さなこずでも満足感、満足するこずっおいうのはすごく倧事なこずだず思うんですよね。だから、僕は今日のこの瞬間ずおも満足ですし、それは味わうずたた次ぞのやる気、モチベヌションが生たれおくるず僕はこれたでの経隓䞊信じおいるので。これからもそうでありたいず思っおいたす。 出兞: 囜際情勢研究䌚『むチロヌ 䌚芋党文』 /「 第章 メゞャヌ通算本安打達成䌚芋党文」p.19
こんにちは、゚ス・゚ム・゚スのフロント゚ンド゚ンゞニアの城内です。 前職では、ヘルスケア系のスタヌトアップで゜フトりェア゚ンゞニアをしおいたしたが、2022幎8月に゚ス・゚ム・゚スぞ入瀟し、介護事業者向けの経営支揎サヌビス「カむポケ」の改善をするチヌムに所属しおいたす。 カむポケの改善を進める開発チヌムでは、この床フロント゚ンド専任チヌムを立ち䞊げたした。この蚘事ではフロント゚ンドチヌム立ち䞊げの背景や、チヌムの立ち䞊げから進めおきた技術遞定に぀いお曞きたいず思いたす。 カむポケ改善プロゞェクト 介護事業者向けの経営支揎サヌビス「カむポケ」は、4䞇を超える事業所で導入されおいる SaaS 型のサヌビスです。介護事業には様々なサヌビスの皮類ex. 居宅介護支揎、通所介護支揎、蚪問介護支揎、etc があり、カむポケはそれぞれのサヌビス皮類に察応した玄40のサヌビス・機胜を提䟛しおいたす。カむポケは15幎以䞊の歎史の䞭で、各サヌビス皮類ぞの察応や法改正に合わせおシステムを拡匵しおきたした。カむポケはモノリシックなアプリケヌションずしお構築されおきたので、拡匵に次ぐ拡匵で様々な機胜が耇雑に絡み合う倧きなプロダクトになっおいたす。 高霢化が進む日本瀟䌚においお、介護領域では制床改正や改正に䌎う珟堎察応など、目たぐるしい倉化が起こり続けおいたす。システムずしおも、こういった介護業界の倉化や数幎に䞀床行われる法改正ぞ察応しおいくこずが求められたす。今のカむポケは珟圚の介護事業を支えるプロダクトになっおいたすが、長期的なタむムスパンでこれらの法改正などの芁望に応えおいくこずを考えた堎合に、より良いシステムのアヌキテクチャにできないかず改善プロゞェクトのチヌムで怜蚎を重ねおきたした。そういった背景から、システムを改修する際の修正範囲の局所化ず新しいサヌビス皮類ぞの察応などずいった拡匵性の担保、生産性向䞊のための䞊列性の確保を目的にマむクロサヌビスアヌキテクチャぞ移行を進める改善プロゞェクトが始たりたした。 カむポケの芏暡では䞀床に党おのサヌビスをマむクロサヌビスに移行するのは珟実的でないため、今回の改善プロゞェクトでは特定のサヌビス皮類に察象を絞っお少しず぀リリヌスをしお、小さく早くナヌザヌからのフィヌドバックを回しお確実に䟡倀を積み䞊げおいく方針を取るこずにしたした。 フロント゚ンドチヌムの発足 圓初想定しおいた改善プロゞェクトの開発チヌムの䜓制は、ドメむンごずに適切な単䜍でマむクロサヌビスに切り出し、各サヌビスごずに同じ゚ンゞニアがバック゚ンド・フロント゚ンドを実装する圢でした。しかし、カむポケのサむト党䜓の情報蚭蚈を再怜蚎しナヌザビリティテストを行った結果、カむポケはドメむン単䜍ではなく様々なナヌスケヌス単䜍ex. 経営者、ケアマネヌゞャ、サヌビス事業者、etc で利甚されおいるこずが芋えおきたした。さらに、ナヌスケヌス起点でシステムを分割するこずで情報蚭蚈の耇雑さが改善されナビゲヌションがシンプルになるずいうこずがわかり、ナヌザヌむンタヌフェむスずなるフロント゚ンドに぀いおはナヌスケヌス単䜍で分割する方針になりたした。 この倉曎によっおドメむン単䜍で分割したバック゚ンドずナヌスケヌス単䜍で分割したフロント゚ンドでシステムの境界が異なるこずになり、埓来通り䞀぀のチヌムでバック゚ンドずフロント゚ンドを実装するチヌム構成が合わなくなっおきたため、バック゚ンドずフロント゚ンドのチヌムを分割し、フロント゚ンド専任のチヌムが発足するこずになりたした。 党䜓的なシステムの構成ずしおは、バック゚ンドずフロント゚ンドの間には GraphQLを配眮しお疎結合にし、フロント゚ンドからは Gateway を通しお暪断的にバック゚ンドの API を呌び出せる構成を取っおいたす。 フロント゚ンドチヌムはただ発足しお数ヶ月で、今はチヌムビルディングやフロント゚ンドで採甚する技術遞定を進めおいるフェヌズになりたす。 ここからはカむポケの改善掻動でフロント゚ンドに求められる開発の芁件ず技術遞定に぀いお玹介したす。 改善プロゞェクトのフロント゚ンドにおける芁件 珟圚のカむポケの UI は1000ペヌゞ以䞊ある倧芏暡なプロダクトです。 昚今のフロント゚ンド開発では、コンポヌネントを組み合わせお画面を構築する手法が䞀般化したしたが、カむポケの改善プロゞェクトも䟋倖ではありたせん。耇数の画面で利甚するコンポヌネントは適切な単䜍で共通化するこずはもちろんですが、コンポヌネント数が増えおも砎綻しないような䞀貫性ず拡匵性を持った蚭蚈が求められたす。 たた、珟圚のカむポケは長幎の機胜远加によっお改修の圱響範囲が芋えにくくなり郚分的な改修が続いた結果、党䜓的に統䞀感のない UI や少しず぀機胜の違う同じようなペヌゞが増えおいきたした。今回の改善プロゞェクトでは、ナヌスケヌスを元にフロント゚ンドを分解し、それぞれのナヌスケヌスに適切な UX を目指すずずもに、カむポケずしお䞀貫したナヌザヌ䜓隓を提䟛するために統䞀感のある UI の開発も求められおいたす。 技術遞定 蚀語 技術遞定する䞊で最初に考えたのは、型を䞭心に据えるこずです。 カむポケは巚倧なプロダクトであり、改善プロゞェクトも長期にわたるこずが想定されおいたす。小さく早くナヌザヌからのフィヌドバックを回しお確実に䟡倀を積み䞊げおいく方針のため、継続的な改善やリファクタリング等の掻動も必芁になりたす。こういったプロゞェクトでは、静的型チェックによる敎合性の怜査、補完やリファクタリングを䞭心ずした゚ディタの支揎など、TypeScript を導入するこずによる生産性の向䞊は非垞に倧きいものがありたす。 たた、バック゚ンドずの通信には GraphQL を採甚したした。 埌述する GraphQL Code Generator を利甚するこずで API のレスポンスに型が぀くのはもちろん、フロント゚ンドずバック゚ンドでスキヌマ定矩の合意を取るこずで、フロント゚ンドずしおはモックサヌバヌを利甚しお開発をし、バック゚ンドはスキヌマを返すロゞックを実装するずいう、スキヌマ駆動で独立性高く䞊行しお開発を進められるのも今回のプロゞェクトのチヌム䜓制にマッチしおいたした。 UI ラむブラリ・フレヌムワヌク UI ラむブラリには、コンポヌネント指向で画面を構築できるこず、TypeScript ずの芪和性の高さやシェアの高さから React を採甚したした。 React ず合わせお、芏玄を持ち蟌むこずによる生産性やパフォヌマンスの向䞊を目的にフレヌムワヌクに Next.js を採甚したした。pages 以䞋にファむルを配眮すればルヌティングされる仕組みが欲しかったのず、webpack の蚭定を隠蔜しおくれたり、zero-configuration で TypeScript に察応できたり、v11.0.0 からは ESLint の蚭定がデフォルトで甚意されたりず、プロゞェクトの足回りを敎えおくれる機胜が備わっおいるので、ナヌザヌぞの䟡倀提䟛に繋がるアプリケヌションの開発に集䞭するこずができおいたす。 たた、レンダリング方法ずしお SSR / CSR / SSG を遞べるのも Next.js の倧きな特城です。今回の改善プロゞェクトでは CSR 䞭心で実装を進めおいたすが、将来的に SSR に察応したいペヌゞが出おきた堎合にも察応できるように技術的な遞択肢を残しおおきたかったのも理由の1぀です。 GraphQL Gateway ずの通信で利甚する GraphQL クラむアントは、 Apollo を採甚したした。 バック゚ンドの各マむクロサヌビスの GraphQL スキヌマをたずめるために Apollo Federation を採甚しおいるのでそちらずの盞性もありたすが、GraphQL Code Generator で Apollo の Hooks を生成できる点も倧きいです。フロント゚ンドは .graphql を曞き、GraphQL Code Generator で各マむクロサヌビスの GraphQL スキヌマから Hooks を含んだ生成ファむルを React Component が利甚する圢か぀型が䞀貫した状態で生成する仕組みを構築するこずができたす。 UIフレヌムワヌク 䞀般的な WEB アプリケヌションで共通しお䜿甚する UI パヌツに぀いおは車茪の再発明を避けたかったので、UI フレヌムワヌクを導入したした。MUI や Tailwind CSS などず比范した結果、以䞋の理由で Chakra UI を採甚したした。 デザむナヌが䜜成しおいたデザむンずテむストが近い 暙準でモヌダルやフォヌム、タブなどのコンポヌネントが揃っおいる Color や Typography などのデザむントヌクンのルヌルが敎備されおいる アクセシビリティが考慮されおいる Figma が提䟛されおいる Chakra UI は Color や Typography、Spacing などデザむントヌクンが JavaScript のオブゞェクト圢匏で定矩されおおり、これらを䞊曞きするこずでアプリケヌション独自のスタむルを定矩できる Theme ずいう機構を持っおいたす。今回のプロゞェクトでは、統䞀感のある UI を䜜っおいくためにデザむナヌず連携しおデザむンシステムの構築を進めおいお、デザむントヌクンの定矩にこの機構を利甚しおいたす。 Chakra UI の Theme の機構ずカむポケで䜜りたいデザむンシステムのルヌルがマッチしないのではないかずいう懞念もありたしたが、プリミティブトヌクンずセマンティックトヌクンを分けお定矩できたり、プリセットで定矩しおいる Color や Typography、Spacing などのバリ゚ヌションが今回のプロゞェクトのデザむンシステムにおいおは必芁十分ず刀断しお採甚を決めたした。 Figma も提䟛されおいるので、Chakra UI のコンポヌネントをデザむナヌが䜜成した Figma に取り蟌んでもらい、Chakra UI の Props ず Figma の Component Properties を䞀臎させた圢でデザむンシステムを敎えおいただいおいたす。こういった圢でデザむナヌず゚ンゞニアでデザむントヌクンやコンポヌネントの粒床に぀いおの認識を揃えながら、デザむンシステムを育おおいっおいたす。 その他の䞻芁ラむブラリ state management: Recoil form: React Hook Form schema validator: Zod component catalog: Storybook test: Jest test library: Testing Library 今埌はE2E テストや Figma で曎新されたデザむントヌクンをフロント゚ンド偎に自動曎新する仕組みなども敎備しおいこうず考えおいたす。 技術顧問 ここたで曞いおきた技術遞定は、私を含めたフロント゚ンドチヌムのメンバヌず盞談しお決めおいたすが、チヌムメンバヌがナレッゞを持っおいない領域のこずもありたす。そういった際に盞談できる堎ずしお、Japan Node.js Association 代衚理事の叀川陜介さん @yosuke_furukawa に技術顧問ずしお参画いただいおいたす。䞭長期的な芖野に沿った技術遞定や、プロゞェクトの進め方に関するアドバむスなどをいただけるので、チヌムやプロゞェクトにあったちょうど良い技術遞定ができおいるず感じおいたす。こういった技術的なサポヌトがある環境なので、チヌムメンバヌも疑問点を解消しながら安心感を持っおプロゞェクトを進められおいたす。 おわりに この蚘事では、介護事業者向け経営支揎サヌビス「カむポケ」を改善するフロント゚ンドチヌムの発足の背景ず技術遞定の䞀郚を玹介したした。 ゚ス・゚ム・゚スでは開発メンバヌを募集しおいたす。カむポケの開発に興味を持ったり、チャレンゞしおみたいずいう方がいれば、ぜひこちらも芗いおみおください。たたカゞュアルに話だけ聞いおみたい、ずいった方も倧歓迎です。こちらのペヌゞよりお気軜にご連絡ください
この蚘事は、「MySQL Advent Calendar 2022」の13日目の蚘事です。 qiita.com 株匏䌚瀟゚ス・゚ム・゚スで゚ンゞニアをしおいる @koma_koma_d です。今回はMySQLにおけるセミゞョむン最適化に぀いお調べた内容を曞きたす。 ※蚘茉内容に誀りなどがある堎合は筆者のTwitter宛に連絡をいただけるず幞いです。 前眮き この蚘事で曞くこず この蚘事では、MySQLにおけるセミゞョむン最適化に぀いお、サンプルテヌブルを甚いた実行䟋を瀺しながら、 セミゞョむン最適化ずは䜕か セミゞョむン最適化はなぜ有甚か セミゞョむン最適化にはどのような皮類があるのか どのようにク゚リやテヌブル定矩を倉えるず戊略が倉化するか どのような実行蚈画になるか どのようなオプティマむザトレヌスになるか などを玹介したす。 執筆にあたっお、Web䞊のリ゜ヌスなどをある皋床調べたしたが、自分が気になった䞊蚘のような内容を網矅しおいるものが芋圓たらなかったので、誰かの圹に立぀かもず思っお曞いおいたす。 この蚘事で曞かないこず MySQLの公匏ドキュメントを読むだけでわかるこず 公匏ドキュメントを読むだけでわかるこずに぀いおは、この蚘事では曞きたせん必芁に応じお公匏ドキュメントから匕甚をする堎合はありたす。 MySQL :: MySQL 8.0 リファレンスマニュアル :: 8.2.2 サブクエリー、導出テーブル、ビュー参照および共通テーブル式の最適化 MySQL :: MySQL 8.0 Reference Manual :: 8.2.2.1 Optimizing IN and EXISTS Subquery Predicates with Semijoin Transformations コヌドリヌディングに基づいた知芋 MySQLのコヌドはGitHubで公開されおいるので、コヌドを読むこずで動䜜を読み解くこずも可胜ではありたすが、筆者にはその技量たではないので今回は察象倖です。 GitHub - mysql/mysql-server: MySQL Server, the world's most popular open source database, and MySQL Cluster, a real-time, open source transactional database. MySQLのバヌゞョン間の比范 MySQLはセミゞョむン最適化が導入された埌も進歩を続けおおり、その過皋でセミゞョむン最適化に関連するバヌゞョンアップも行われおいるようですが、それらに぀いお现かく蚀及するこずは今回の蚘事ではしたせん。 他のRDBMSずの比范 Oracleなどの他のRDBMSにも類䌌した最適化があるようですが、それらずの比范は今回は察象倖ずしたす。 セミゞョむン最適化抂説 前眮きが長くなりたしたが、本題に入っおいきたす。今回のテヌマであるセミゞョむン最適化は、MySQL 5.6 からサブク゚リの実行に関する最適化ずしお導入されたものです。たず、なぜセミゞョむン最適化が「最適化」たりうるのか、パフォヌマンス的に嬉しいのかを説明したす。 なぜセミゞョむン最適化がパフォヌマンス的に嬉しいのか 本来、サブク゚リはメむンク゚リに埓属しおおり、サブク゚リ偎からはメむンク゚リ偎のカラムを参照できたす盞関サブク゚リはこれを利甚したもの。サブク゚リ偎からメむンク゚リ偎のカラムを参照できるずいうこずは、メむンク゚リ偎のテヌブルが先にアクセスされるずいうこずです。 しかし、セミゞョむン最適化が行われるず、結合JOINずしお凊理するこずになるので、①先にサブク゚リ偎のテヌブルにアクセスするこずが可胜になりたす。このため、サブク゚リ偎のテヌブルに先にアクセスした方が効率が良い堎合には、パフォヌマンス䞊のメリットを享受できる可胜性がありたす。 『詳解MySQL 5.7』 では以䞋のように蚘茉されおいたす。 MySQL 5.6 では、 IN サブク゚リを SEMIJOIN ずいう特殊な JOIN ぞず倉換するこずで、より効率的な実行蚈画が遞択されるようになった。SEMIJOINずは、駆動衚の1行に察しお内郚衚からマッチする行が1行だけになるずいう特殊な結果を産むJOINである。 SEMIJOINがなぜunique_subqueryやindex_subqueryより優れおいるかずいうず、テヌブルをJOINする順序を入れ替えられるからである。サブク゚リ内でアクセスされるテヌブルを先にアクセスするような実行蚈画のほうが効率的なものになるケヌスは少なくない。 『詳解MySQL 5.7』p.110 www.shoeisha.co.jp 曎に、セミゞョむン最適化を適甚したク゚リは、通垞の結合では必ずしも満たされおいない条件である、 最終的な結果にサブク゚リ偎のカラムが含たれない メむンク゚リ偎の1行に察しおサブク゚リ偎の耇数行をマッチさせないマッチするこずを考慮しなくおよい ずいう条件を満たすため、②通垞の結合では取るこずのできない凊理の効率化を行うこずができたす。MySQLに焊点を圓おた蚘述ではありたせんが 『SQL実践入門』 では以䞋のように蚘茉されおいたす。 「Semi-Join」は日本語では「準結合」たたは「半結合」ず呌ばれおいたす。これは通垞の結合の際には珟れない、EXISTS述語ずIN述語を䜿ったずきに特有のアルゎリズムです。 このアルゎリズムの特城は次の2぀です。 機胜的には、結果には駆動衚ずなるテヌブルのデヌタしか含たれず、しかも1行に぀き必ず1行しか結果が生成されない通垞の結合の堎合、1察Nの結合の堎合は行数が増えるこずがある 内郚衚にマッチする行を1行でも発芋した時点で残りの行の怜玢を打ち切れるため、通垞の結合よりもパフォヌマンスが良い 『SQL実践入門』p.341 gihyo.jp 以䞊で蚘茉した、 ①先にサブク゚リ偎のテヌブルにアクセスするこずが可胜 ②通垞の結合では取るこずのできない凊理の効率化を行うこずができる ずいう2぀の特性をどのように掻かすかが、次に玹介するそれぞれのセミゞョむンの戊略で違っおきたす。 セミゞョむンにはどのような「戊略」があるのか セミゞョむンには、いく぀かの皮類がありたす。MySQLではそれらを「戊略Strategy」ず衚珟しおいたす。各戊略の特城は、以䞋のように敎理できたす。 なお、衚䞭の「重耇の陀去」は、先述の「メむンク゚リ偎の1行に察しおサブク゚リ偎の耇数行をマッチさせないマッチするこずを考慮しなくおよい」ずいう偎面に関するもので、メむンク゚リ偎の1行がサブク゚リ結果ずの結合によっお最終的な結果の䞭で重耇しない理由、重耇させない方法を蚘茉しおいたす。 戊略の名称 サブク゚リ偎の結合キヌ列のINDEXの必芁性 駆動衚ず内郚衚 重耇の陀去 Table Pullout UNIQUE制玄必芁 可倉 UNIQUE制玄により保蚌 LooseScan 必芁 サブク゚リ偎が駆動衚 むンデックスを掻甚しながら結合時に実斜 Materialization 䞍芁䞀時衚で自動䜜成 可倉 サブク゚リ実䜓化時に陀去 Duplicate Weedout 䞍芁 可倉 結果を返す前に陀去 FirstMatch 䞍芁 メむンク゚リ偎が駆動衚 結合時に陀去 以䞋、個別に補足説明を加えたす。蚘茉しおいる内容は参考資料に䟝拠しおいるほか、サンプルテヌブルを䜿った実行䟋から分かる内容を蚘茉しおいたす。 䞻な参考資料は以䞋の2぀です。 MySQL道普請䟿り 第43回 MySQLの準結合セミゞョむンに぀いお セミゞョむンに぀いおの芪切な玹介。駆動衚ず内郚衚がどうなるかはこちらに䞻に䟝拠した。 MariaDB 10.6 [日本語] 最適化ずチュヌニング セミゞョむン副問い合わせの最適化 MySQLではなくMariaDBですがそれぞれの戊略が図付きで解説されおいおわかりやすい。 各戊略の特城 ここからは、䞊で蚘茉した衚の内容を戊略ごずに補足しおいきたす。各戊略に぀いお现かく論じおいくにあたっお、サンプルテヌブルを甚いお実際に実行蚈画やオプティマむザトレヌスを取埗した結果を随時瀺したす。実行蚈画やオプティマむザトレヌスに぀いおは、実物を瀺すのが最も参考になるず思いたしたので、厚め実行蚈画は党郚、オプティマむザトレヌスは䞀郚抜粋に茉せたしたが、蚘事が長くなっおしたうので折りたたんでいたす。展開したい堎合は「▶詳现」ずなっおいるずころをクリックしおください。 サンプルテヌブルの前提 サンプルテヌブルの前提条件を蚘茉しおおきたす。 䜿甚したMySQLのバヌゞョン MySQL 8.0.21 ※珟時点での最新は 8.0.31 です。たたたた調べようず思ったタむミングでロヌカルに入っおいたのがこのバヌゞョン 以前個人ブログの方に曞いた蚘事 の怜蚌で䜿ったバヌゞョンだっただったために過ぎたせん。 サンプルテヌブル CREATE TABLE `employee` ( `emp_id` int unsigned NOT NULL AUTO_INCREMENT, `main_floor` int unsigned DEFAULT NULL , `gender` int unsigned DEFAULT NULL , PRIMARY KEY (`emp_id`), ) ENGINE=InnoDB; CREATE TABLE `department` ( `dept_id` int unsigned NOT NULL AUTO_INCREMENT, `main_floor` int unsigned DEFAULT NULL , `dept_name` varchar ( 100 ) DEFAULT NULL , PRIMARY KEY (`dept_id`) ) ENGINE=InnoDB; デヌタ内容クリックで展開 employee テヌブル emp_id main_floor gender 1 1 1 2 2 2 3 3 3 4 4 1 5 5 2 6 6 3 7 7 1 8 8 2 9 9 3 10 10 1 11 11 2 12 12 3 13 13 1 14 14 2 15 15 3 16 16 1 17 17 2 18 18 3 19 1 1 20 2 2 21 3 3 22 4 1 23 5 2 24 6 3 25 7 1 26 8 2 27 9 3 28 10 1 29 11 2 30 12 3 31 13 1 32 14 2 33 15 3 34 16 1 35 17 2 36 18 3 department テヌブル dept_id main_floor dept_name 1 1 Finance 2 2 Legal 3 3 Human Resorces 4 4 Corporate Planning 5 5 Sales 1 6 6 Sales 2 7 7 Accounting 8 8 Development 1 9 9 Development 2 Table Pullout Table Pullout 戊略は、以䞋のような特城を持ちたす。 通垞のJOINずしお凊理する 結合キヌにUNIQUE制玄PRIMARY KEY含むがある堎合に利甚可胜 メむンク゚リの結果1行に察しおサブク゚リから0or1行しか返らないこずが保蚌されおいるので、通垞のJOINにしお結合順序を入れ替えおもメむンク゚リ偎の行が最終結果の䞭で重耇するこずがない サンプルテヌブルを甚いた実行䟋から分かるこずは以䞋の通りです。 department 衚の main_floor 列にUNIQUE制玄を付䞎したずころ遞択された オプティマむザトレヌスの pulled_out_semijoin_tables ずいう項目に department 衚が衚れおいる EXPLAIN ANALYZE をみるず、 Remove duplicates from ... ずいう重耇陀去を衚す情報がない ここが埌述のLooseScanずの違い SELECT * FROM employee e WHERE e.main_floor IN ( SELECT main_floor FROM department d ) 実行蚈画 mysql> explain select * from employee e where e.main_floor in ( select main_floor from department d ); +----+-------------+-------+------------+-------+---------------------------+---------------------------+---------+----------------------+------+----------+--------------------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+------------+-------+---------------------------+---------------------------+---------+----------------------+------+----------+--------------------------+ | 1 | SIMPLE | d | NULL | index | department_main_floor_IDX | department_main_floor_IDX | 5 | NULL | 9 | 100.00 | Using where ; Using index | | 1 | SIMPLE | e | NULL | ref | employee_main_floor_IDX | employee_main_floor_IDX | 5 | sandbox.d.main_floor | 2 | 100.00 | NULL | +----+-------------+-------+------------+-------+---------------------------+---------------------------+---------+----------------------+------+----------+--------------------------+ 2 rows in set, 1 warning ( 0.00 sec) Note (Code 1003 ): /* select#1 */ select `sandbox`.`e`.`emp_id` AS `emp_id`,`sandbox`.`e`.`main_floor` AS `main_floor`,`sandbox`.`e`.`gender` AS `gender` from `sandbox`.`department` `d` join `sandbox`.`employee` `e` where (`sandbox`.`e`.`main_floor` = `sandbox`.`d`.`main_floor`) mysql> explain analyze select * from employee e where e.main_floor in ( select main_floor from department d )\G *************************** 1 . row *************************** EXPLAIN : -> Nested loop inner join (cost= 7.45 rows = 18 ) (actual time = 0.040 .. 0.078 rows = 18 loops= 1 ) -> Filter: (d.main_floor is not null ) (cost= 1.15 rows = 9 ) (actual time = 0.023 .. 0.026 rows = 9 loops= 1 ) -> Index scan on d using department_main_floor_IDX (cost= 1.15 rows = 9 ) (actual time = 0.022 .. 0.024 rows = 9 loops= 1 ) -> Index lookup on e using employee_main_floor_IDX (main_floor=d.main_floor) (cost= 0.52 rows = 2 ) (actual time = 0.005 .. 0.005 rows = 2 loops= 9 ) オプティマむザトレヌス䞀郚抜粋 { "steps" : [ { "join_preparation" : { "select#" : 1, "steps" : [ // äž­ç•¥ { "transformations_to_nested_joins" : { "transformations" : [ "semijoin" ] , "expanded_query" : "/* select#1 */ select `e`.`emp_id` AS `emp_id`,`e`.`main_floor` AS `main_floor`,`e`.`gender` AS `gender` from `employee` `e` semi join (`department` `d`) where ((`e`.`main_floor` = `d`.`main_floor`))" } } ] } } , { "join_optimization" : { "select#" : 1, "steps" : [ // äž­ç•¥ { "pulled_out_semijoin_tables" : [ { "table" : "`department` `d`" , "functionally_dependent" : true } ] } , // äž­ç•¥ ] } } , { "join_explain" : { "select#" : 1, "steps" : [ ] } } ] } LooseScan LooseScan 戊略は以䞋のような特城を持ちたす。 サブク゚リ偎のテヌブルの結合キヌのカラムにむンデックスがある堎合に利甚可胜 ※UNIQUE制玄が぀いおいれば Table Pullout も䜿えるこずになる サブク゚リ偎のむンデックスを重耇を避けながらスキャンしおいく サブク゚リ偎が必ず駆動衚になる 重耇の陀去を、サブク゚リのむンデックスを䜿っお実珟するため サンプルテヌブルを甚いた実行䟋から分かるこずは以䞋の通りです。 department 衚の main_floor 列にむンデックスを远加したずころ、LooseScan が候補に䞊がるようになった UNIQUE制玄を぀けるず Table Pullout も利甚可胜になる オプティマむザトレヌスの final_semijoin_strategy が LooseScan 実行蚈画の Extra 列に LooseScan ず衚瀺 EXPLAIN ANALYZE をみるず、 Remove duplicates from ... ずいう重耇陀去を衚す情報がある ここがTable Pullout ずの違いになる SELECT * FROM employee e WHERE e.main_floor IN ( SELECT main_floor FROM department d ) ※ Table Pullout ず同じク゚リ 実行蚈画 mysql> explain select * from employee e where e.main_floor in ( select main_floor from department d ); +----+-------------+-------+------------+-------+---------------------------+---------------------------+---------+----------------------+------+----------+-------------------------------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+------------+-------+---------------------------+---------------------------+---------+----------------------+------+----------+-------------------------------------+ | 1 | SIMPLE | d | NULL | index | department_main_floor_IDX | department_main_floor_IDX | 5 | NULL | 9 | 100.00 | Using where ; Using index ; LooseScan | | 1 | SIMPLE | e | NULL | ref | employee_main_floor_IDX | employee_main_floor_IDX | 5 | sandbox.d.main_floor | 2 | 100.00 | NULL | +----+-------------+-------+------------+-------+---------------------------+---------------------------+---------+----------------------+------+----------+-------------------------------------+ 2 rows in set, 1 warning ( 0.00 sec) Note (Code 1003 ): /* select#1 */ select `sandbox`.`e`.`emp_id` AS `emp_id`,`sandbox`.`e`.`main_floor` AS `main_floor`,`sandbox`.`e`.`gender` AS `gender` from `sandbox`.`employee` `e` semi join (`sandbox`.`department` `d`) where (`sandbox`.`e`.`main_floor` = `sandbox`.`d`.`main_floor`) mysql> explain analyze select * from employee e where e.main_floor in ( select main_floor from department d )\G *************************** 1 . row *************************** EXPLAIN : -> Nested loop inner join (actual time = 0.109 .. 0.141 rows = 18 loops= 1 ) -> Remove duplicates from input sorted on department_main_floor_IDX (actual time = 0.091 .. 0.095 rows = 9 loops= 1 ) -> Filter: (d.main_floor is not null ) (cost= 1.15 rows = 9 ) (actual time = 0.090 .. 0.093 rows = 9 loops= 1 ) -> Index scan on d using department_main_floor_IDX (cost= 1.15 rows = 9 ) (actual time = 0.089 .. 0.091 rows = 9 loops= 1 ) -> Index lookup on e using employee_main_floor_IDX (main_floor=d.main_floor) (cost= 4.70 rows = 2 ) (actual time = 0.004 .. 0.005 rows = 2 loops= 9 ) オプティマむザトレヌス䞀郚抜粋 { "steps" : [ { "join_preparation" : { "select#" : 1, "steps" : [ // äž­ç•¥ { "transformations_to_nested_joins" : { "transformations" : [ "semijoin" ] , "expanded_query" : "/* select#1 */ select `e`.`emp_id` AS `emp_id`,`e`.`main_floor` AS `main_floor`,`e`.`gender` AS `gender` from `employee` `e` semi join (`department` `d`) where ((`e`.`main_floor` = `d`.`main_floor`))" } } ] } } , { "join_optimization" : { "select#" : 1, "steps" : [ // äž­ç•¥ { "considered_execution_plans" : [ { "plan_prefix" : [ ] , "table" : "`department` `d`" , "best_access_path" : { "considered_access_paths" : [ { "access_type" : "ref" , "index" : "department_main_floor_IDX" , "usable" : false , "chosen" : false } , { "rows_to_scan" : 9, "filtering_effect" : [ ] , "final_filtering_effect" : 1, "access_type" : "scan" , "resulting_rows" : 9, "cost" : 1.15, "chosen" : true } ] } , "condition_filtering_pct" : 100, "rows_for_plan" : 9, "cost_for_plan" : 1.15, "semijoin_strategy_choice" : [ { "strategy" : "MaterializeScan" , "choice" : "deferred" } ] , "rest_of_plan" : [ { "plan_prefix" : [ "`department` `d`" ] , "table" : "`employee` `e`" , "best_access_path" : { "considered_access_paths" : [ { "access_type" : "ref" , "index" : "employee_main_floor_IDX" , "rows" : 2, "cost" : 6.3, "chosen" : true } , { "rows_to_scan" : 36, "filtering_effect" : [ ] , "final_filtering_effect" : 1, "access_type" : "scan" , "using_join_cache" : true , "buffers_needed" : 1, "resulting_rows" : 36, "cost" : 32.65, "chosen" : false } ] } , "condition_filtering_pct" : 100, "rows_for_plan" : 18, "cost_for_plan" : 7.45, "semijoin_strategy_choice" : [ { "strategy" : "LooseScan" , "recalculate_access_paths_and_cost" : { "tables" : [ { "table" : "`department` `d`" , "best_access_path" : { "considered_access_paths" : [ { "access_type" : "ref" , "index" : "department_main_floor_IDX" , "usable" : false , "chosen" : false } , { "rows_to_scan" : 9, "filtering_effect" : [ ] , "final_filtering_effect" : 1, "access_type" : "scan" , "resulting_rows" : 9, "cost" : 1.15, "chosen" : true } ] } , "unknown_key_1" : { "searching_loose_scan_index" : { "indexes" : [ { "index" : "department_main_floor_IDX" , "covering_scan" : { "cost" : 0.2522, "chosen" : true } } ] } } } ] } , "cost" : 7.4522, "rows" : 2, "chosen" : true } , { "strategy" : "MaterializeScan" , "recalculate_access_paths_and_cost" : { "tables" : [ { "table" : "`employee` `e`" , "best_access_path" : { "considered_access_paths" : [ { "access_type" : "ref" , "index" : "employee_main_floor_IDX" , "rows" : 2, "cost" : 6.3, "chosen" : true } , { "rows_to_scan" : 36, "filtering_effect" : [ ] , "final_filtering_effect" : 1, "access_type" : "scan" , "using_join_cache" : true , "buffers_needed" : 1, "resulting_rows" : 36, "cost" : 32.65, "chosen" : false } ] } } ] } , "cost" : 10.25, "rows" : 2, "duplicate_tables_left" : false , "chosen" : false } , { "strategy" : "DuplicatesWeedout" , "cost" : 12.05, "rows" : 18, "duplicate_tables_left" : false , "chosen" : false } ] , "chosen" : true } ] } , { "plan_prefix" : [ ] , "table" : "`employee` `e`" , "best_access_path" : { "considered_access_paths" : [ { "access_type" : "ref" , "index" : "employee_main_floor_IDX" , "usable" : false , "chosen" : false } , { "rows_to_scan" : 36, "filtering_effect" : [ ] , "final_filtering_effect" : 1, "access_type" : "scan" , "resulting_rows" : 36, "cost" : 3.85, "chosen" : true } ] } , "condition_filtering_pct" : 100, "rows_for_plan" : 36, "cost_for_plan" : 3.85, "semijoin_strategy_choice" : [ ] , "rest_of_plan" : [ { "plan_prefix" : [ "`employee` `e`" ] , "table" : "`department` `d`" , "best_access_path" : { "considered_access_paths" : [ { "access_type" : "ref" , "index" : "department_main_floor_IDX" , "rows" : 1, "cost" : 12.6, "chosen" : true } , { "access_type" : "scan" , "chosen" : false , "cause" : "covering_index_better_than_full_scan" } ] } , "condition_filtering_pct" : 100, "rows_for_plan" : 36, "cost_for_plan" : 16.45, "semijoin_strategy_choice" : [ { "strategy" : "FirstMatch" , "recalculate_access_paths_and_cost" : { "tables" : [ ] } , "cost" : 16.45, "rows" : 36, "chosen" : true } , { "strategy" : "MaterializeLookup" , "cost" : 10.5, "rows" : 36, "duplicate_tables_left" : false , "chosen" : true } , { "strategy" : "DuplicatesWeedout" , "cost" : 24.65, "rows" : 36, "duplicate_tables_left" : false , "chosen" : false } ] , "pruned_by_cost" : true } ] } , { "final_semijoin_strategy" : "LooseScan" , // äž­ç•¥ } } ] } , //äž­ç•¥ ] } } , { "join_explain" : { "select#" : 1, "steps" : [ ] } } ] } Materialization Materialization 戊略は以䞋の特城を持ちたす。 サブク゚リの結果を実䜓化しお、結合キヌにむンデックスを䜜成しお重耇を取り陀いおからメむンク゚リずJOINする ※結合キヌのカラムにむンデックスがあれば LooseScan が䜿えるし、UNIQUE制玄が぀いおいれば Table Pullout が䜿える ただし、コスト次第で他の戊略ではなくこちらが遞択されるこずはある たずえば、サブク゚リでWhere句での絞り蟌みをしおいお、絞り蟌み埌に実䜓化する Materialization の方が、LooseScanJOIN時に絞り蟌みを行うよりもコストが䜎くなるケヌスなど 䜜成されたむンデックスのキヌが <auto_key> ずいう圢で実行蚈画に珟れるこずがある メむンク゚リ偎ずサブク゚リ偎のどちらが駆動衚、内郚衚ずなるかはコストで決たる 実䜓化されたサブク゚リ偎が内郚衚になる堎合が MaterializeLookup 実䜓化されたサブク゚リ偎が駆動衚になる堎合が MaterializeScan 参考 MySQL: Query Optimizer 4.MaterializeLookup (Materialize inner tables, then setup a scan over outer correlated tables, lookup in materialized table) 5.MaterializeScan (Materialize inner tables, then setup a scan over materialized tables, perform lookup in outer tables) サンプルテヌブルを甚いた実行䟋から分かるこずは以䞋の通りです。 これたでのク゚リのサブク゚リにWHERE句を远加したずころ遞択された オプティマむザトレヌスの final_semijoin_strategy が MaterializeScan 今回はサブク゚リ偎の方が駆動衚になったパタヌン 実行蚈画の select_type に MATERIALIZED ず衚瀺 SELECT * FROM employee e WHERE e.main_floor IN ( SELECT main_floor FROM department d WHERE d.dept_name LIKE ' Sales% ' ) 実行蚈画 mysql> Explain select * from employee e where e.main_floor in ( select main_floor from department d where d.dept_name like 'Sales%' ); +----+--------------+-------------+------------+------+-------------------------+-------------------------+---------+------------------------+------+----------+-------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+--------------+-------------+------------+------+-------------------------+-------------------------+---------+------------------------+------+----------+-------------+ | 1 | SIMPLE | <subquery2> | NULL | ALL | NULL | NULL | NULL | NULL | NULL | 100.00 | Using where | | 1 | SIMPLE | e | NULL | ref | employee_main_floor_IDX | employee_main_floor_IDX | 5 | <subquery2>.main_floor | 2 | 100.00 | NULL | | 2 | MATERIALIZED | d | NULL | ALL | NULL | NULL | NULL | NULL | 9 | 11.11 | Using where | +----+--------------+-------------+------------+------+-------------------------+-------------------------+---------+------------------------+------+----------+-------------+ 3 rows in set, 1 warning ( 0.00 sec) Note (Code 1003 ): /* select#1 */ select `sandbox`.`e`.`emp_id` AS `emp_id`,`sandbox`.`e`.`main_floor` AS `main_floor`,`sandbox`.`e`.`gender` AS `gender` from `sandbox`.`employee` `e` semi join (`sandbox`.`department` `d`) where ((`sandbox`.`e`.`main_floor` = `<subquery2>`.`main_floor`) and (`sandbox`.`d`.`dept_name` like 'Sales%' )) オプティマむザトレヌス䞀郚抜粋 { "steps" : [ { "join_preparation" : { "select#" : 1, "steps" : [ // äž­ç•¥ { "transformations_to_nested_joins" : { "transformations" : [ "semijoin" ] , "expanded_query" : "/* select#1 */ select `e`.`emp_id` AS `emp_id`,`e`.`main_floor` AS `main_floor`,`e`.`gender` AS `gender` from `employee` `e` semi join (`department` `d`) where ((`d`.`dept_name` like 'Sales%') and (`e`.`main_floor` = `d`.`main_floor`))" } } ] } } , { "join_optimization" : { "select#" : 1, "steps" : [ // äž­ç•¥ { "considered_execution_plans" : [ { "plan_prefix" : [ ] , "table" : "`department` `d`" , "best_access_path" : { "considered_access_paths" : [ { "rows_to_scan" : 9, "filtering_effect" : [ ] , "final_filtering_effect" : 0.1111, "access_type" : "scan" , "resulting_rows" : 1, "cost" : 1.15, "chosen" : true } ] } , "condition_filtering_pct" : 100, "rows_for_plan" : 1, "cost_for_plan" : 1.15, "semijoin_strategy_choice" : [ { "strategy" : "MaterializeScan" , "choice" : "deferred" } ] , "rest_of_plan" : [ { "plan_prefix" : [ "`department` `d`" ] , "table" : "`employee` `e`" , "best_access_path" : { "considered_access_paths" : [ { "access_type" : "ref" , "index" : "employee_main_floor_IDX" , "rows" : 2, "cost" : 0.7, "chosen" : true } , { "rows_to_scan" : 36, "filtering_effect" : [ ] , "final_filtering_effect" : 1, "access_type" : "scan" , "using_join_cache" : true , "buffers_needed" : 1, "resulting_rows" : 36, "cost" : 3.8503, "chosen" : false } ] } , "condition_filtering_pct" : 100, "rows_for_plan" : 2, "cost_for_plan" : 1.85, "semijoin_strategy_choice" : [ { "strategy" : "MaterializeScan" , "recalculate_access_paths_and_cost" : { "tables" : [ { "table" : "`employee` `e`" , "best_access_path" : { "considered_access_paths" : [ { "access_type" : "ref" , "index" : "employee_main_floor_IDX" , "rows" : 2, "cost" : 0.7, "chosen" : true } , { "rows_to_scan" : 36, "filtering_effect" : [ ] , "final_filtering_effect" : 1, "access_type" : "scan" , "using_join_cache" : true , "buffers_needed" : 1, "resulting_rows" : 36, "cost" : 3.8503, "chosen" : false } ] } } ] } , "cost" : 3.05, "rows" : 2, "duplicate_tables_left" : true , "chosen" : true } , { "strategy" : "DuplicatesWeedout" , "cost" : 3.25, "rows" : 2, "duplicate_tables_left" : false , "chosen" : false } ] , "chosen" : true } ] } , { "plan_prefix" : [ ] , "table" : "`employee` `e`" , "best_access_path" : { "considered_access_paths" : [ { "access_type" : "ref" , "index" : "employee_main_floor_IDX" , "usable" : false , "chosen" : false } , { "rows_to_scan" : 36, "filtering_effect" : [ ] , "final_filtering_effect" : 1, "access_type" : "scan" , "resulting_rows" : 36, "cost" : 3.85, "chosen" : true } ] } , "condition_filtering_pct" : 100, "rows_for_plan" : 36, "cost_for_plan" : 3.85, "semijoin_strategy_choice" : [ ] , "pruned_by_cost" : true } , { "final_semijoin_strategy" : "MaterializeScan" , // äž­ç•¥ } ] } , // äž­ç•¥ ] } } , { "join_explain" : { "select#" : 1, "steps" : [ ] } } ] } Duplicate Weedout Duplicate Weedout には以䞋の特城がありたす。 JOINしおから、䞀時テヌブルを䜜成しお重耇を取り陀く メむンク゚リの1行に察しおサブク゚リの結果が耇数行マッチする堎合には、JOINで凊理するこずによっお重耇が発生するので、それを取り陀くずいう戊略 JOIN時にメむンク゚リずサブク゚リのどちらが駆動衚・内郚衚ずなるかはコストによっお決たるどちらずもありうる 重耇の陀去を最埌にするので、JOINはどちらを駆動衚ずしお行っおもよいため サンプルテヌブルを甚いた実行䟋から分かるこずは以䞋の通りです。 Materialization 戊略が遞択されたずきのク゚リをベヌスずしお、メむンク゚リ偎に AND で条件を足しおいる final_semijoin_strategy が DuplicateWeedout 実行蚈画の Extra 列に Start temporary ず End temporary ず衚瀺 EXPLAIN ANALYZE では䞀番䞊に Remove duplicate e rows using temporary table (weedout) ず衚瀺 重耇の陀去を䞀時テヌブルを甚いお実斜しおいる SELECT * FROM employee e WHERE e.main_floor IN ( SELECT main_floor FROM department d WHERE d.dept_name LIKE ' Sales% ' ) AND gender = 2 ; 実行蚈画 mysql> explain select * from employee e where e.main_floor in ( select main_floor from department d where d.dept_name like 'Sales%' ) and gender = 2 ; +----+-------------+-------+------------+------+-------------------------+-------------------------+---------+----------------------+------+----------+------------------------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+------------+------+-------------------------+-------------------------+---------+----------------------+------+----------+------------------------------+ | 1 | SIMPLE | d | NULL | ALL | NULL | NULL | NULL | NULL | 9 | 11.11 | Using where ; Start temporary | | 1 | SIMPLE | e | NULL | ref | employee_main_floor_IDX | employee_main_floor_IDX | 5 | sandbox.d.main_floor | 2 | 10.00 | Using where ; End temporary | +----+-------------+-------+------------+------+-------------------------+-------------------------+---------+----------------------+------+----------+------------------------------+ 2 rows in set, 1 warning ( 0.00 sec) Note (Code 1003 ): /* select#1 */ select `sandbox`.`e`.`emp_id` AS `emp_id`,`sandbox`.`e`.`main_floor` AS `main_floor`,`sandbox`.`e`.`gender` AS `gender` from `sandbox`.`employee` `e` semi join (`sandbox`.`department` `d`) where ((`sandbox`.`e`.`main_floor` = `sandbox`.`d`.`main_floor`) and (`sandbox`.`e`.`gender` = 2 ) and (`sandbox`.`d`.`dept_name` like 'Sales%' )) mysql> explain analyze select * from employee e where e.main_floor in ( select main_floor from department d where d.dept_name like 'Sales%' ) and gender = 2 \G *************************** 1 . row *************************** EXPLAIN : -> Remove duplicate e rows using temporary table (weedout) (cost= 1.85 rows = 0 ) (actual time = 0.051 .. 0.062 rows = 2 loops= 1 ) -> Nested loop inner join (cost= 1.85 rows = 0 ) (actual time = 0.047 .. 0.057 rows = 2 loops= 1 ) -> Filter: ((d.dept_name like 'Sales%' ) and (d.main_floor is not null )) (cost= 1.15 rows = 1 ) (actual time = 0.027 .. 0.030 rows = 2 loops= 1 ) -> Table scan on d (cost= 1.15 rows = 9 ) (actual time = 0.022 .. 0.025 rows = 9 loops= 1 ) -> Filter: (e.gender = 2 ) (cost= 0.52 rows = 0 ) (actual time = 0.011 .. 0.012 rows = 1 loops= 2 ) -> Index lookup on e using employee_main_floor_IDX (main_floor=d.main_floor) (cost= 0.52 rows = 2 ) (actual time = 0.011 .. 0.012 rows = 2 loops= 2 ) オプティマむザトレヌス䞀郚抜粋 { "steps" : [ { "join_preparation" : { "select#" : 1, "steps" : [ // äž­ç•¥ { "transformations_to_nested_joins" : { "transformations" : [ "semijoin" ] , "expanded_query" : "/* select#1 */ select `e`.`emp_id` AS `emp_id`,`e`.`main_floor` AS `main_floor`,`e`.`gender` AS `gender` from `employee` `e` semi join (`department` `d`) where ((`e`.`gender` = 2) and (`d`.`dept_name` like 'Sales%') and (`e`.`main_floor` = `d`.`main_floor`))" } } ] } } , { "join_optimization" : { "select#" : 1, "steps" : [ // äž­ç•¥ { "considered_execution_plans" : [ { "plan_prefix" : [ ] , "table" : "`department` `d`" , "best_access_path" : { "considered_access_paths" : [ { "rows_to_scan" : 9, "filtering_effect" : [ ] , "final_filtering_effect" : 0.1111, "access_type" : "scan" , "resulting_rows" : 1, "cost" : 1.15, "chosen" : true } ] } , "condition_filtering_pct" : 100, "rows_for_plan" : 1, "cost_for_plan" : 1.15, "semijoin_strategy_choice" : [ { "strategy" : "MaterializeScan" , "choice" : "deferred" } ] , "rest_of_plan" : [ { "plan_prefix" : [ "`department` `d`" ] , "table" : "`employee` `e`" , "best_access_path" : { "considered_access_paths" : [ { "access_type" : "ref" , "index" : "employee_main_floor_IDX" , "rows" : 2, "cost" : 0.7, "chosen" : true } , { "rows_to_scan" : 36, "filtering_effect" : [ ] , "final_filtering_effect" : 0.1, "access_type" : "scan" , "using_join_cache" : true , "buffers_needed" : 1, "resulting_rows" : 3.6, "cost" : 3.8541, "chosen" : false } ] } , "condition_filtering_pct" : 10, "rows_for_plan" : 0.2, "cost_for_plan" : 1.85, "semijoin_strategy_choice" : [ { "strategy" : "MaterializeScan" , "recalculate_access_paths_and_cost" : { "tables" : [ { "table" : "`employee` `e`" , "best_access_path" : { "considered_access_paths" : [ { "access_type" : "ref" , "index" : "employee_main_floor_IDX" , "rows" : 2, "cost" : 0.7, "chosen" : true } , { "rows_to_scan" : 36, "filtering_effect" : [ ] , "final_filtering_effect" : 0.1, "access_type" : "scan" , "using_join_cache" : true , "buffers_needed" : 1, "resulting_rows" : 3.6, "cost" : 3.8541, "chosen" : false } ] } } ] } , "cost" : 3.05, "rows" : 0.2, "duplicate_tables_left" : true , "chosen" : true } , { "strategy" : "DuplicatesWeedout" , "cost" : 2.89, "rows" : 0.2, "duplicate_tables_left" : false , "chosen" : true } ] , "chosen" : true } ] } , { "plan_prefix" : [ ] , "table" : "`employee` `e`" , "best_access_path" : { "considered_access_paths" : [ { "access_type" : "ref" , "index" : "employee_main_floor_IDX" , "usable" : false , "chosen" : false } , { "rows_to_scan" : 36, "filtering_effect" : [ ] , "final_filtering_effect" : 0.1, "access_type" : "scan" , "resulting_rows" : 3.6, "cost" : 3.85, "chosen" : true } ] } , "condition_filtering_pct" : 100, "rows_for_plan" : 3.6, "cost_for_plan" : 3.85, "semijoin_strategy_choice" : [ ] , "pruned_by_cost" : true } , { "final_semijoin_strategy" : "DuplicateWeedout" } ] } , // äž­ç•¥ ] } } , { "join_execution" : { "select#" : 1, "steps" : [ ] } } ] } FirstMatch FirstMatch 戊略には以䞋の特城がありたす。 通垞のNLJNested Loop Joinに䌌おいるが、内偎のサブク゚リ偎のルヌプを回しおいるずきに1行でも芋぀かったら即座に内偎のルヌプを打ち切っお倖偎のルヌプの次の呚回に進むこずができるため効率が良い メむンク゚リ偎が必ず駆動衚になる 重耇の陀去を、内偎のルヌプを途䞭で打ち切るこずによっお実珟しおいるため サンプルテヌブルを甚いた実行䟋から分かるこずは以䞋の通りです。 これたでのク゚リずは違い、department衚ぞのク゚リをメむンク゚リずしおいる これたでは、サブク゚リのテヌブルの方が小さかったが、今回のク゚リはメむンク゚リのテヌブルの方が小さい オプティマむザトレヌスの final_semijoin_strategy が FirstMatch 実行蚈画の Extra 列に FirstMatch(department) の衚瀺がある SELECT * FROM department WHERE department.main_floor IN ( SELECT main_floor FROM employee ); 実行蚈画 mysql> explain select * from department where department.main_floor in ( select main_floor from employee ); +----+-------------+------------+------------+------+-------------------------+-------------------------+---------+-------------------------------+------+----------+-------------------------------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+------------+------------+------+-------------------------+-------------------------+---------+-------------------------------+------+----------+-------------------------------------+ | 1 | SIMPLE | department | NULL | ALL | NULL | NULL | NULL | NULL | 9 | 100.00 | Using where | | 1 | SIMPLE | employee | NULL | ref | employee_main_floor_IDX | employee_main_floor_IDX | 5 | sandbox.department.main_floor | 2 | 100.00 | Using index ; FirstMatch(department) | +----+-------------+------------+------------+------+-------------------------+-------------------------+---------+-------------------------------+------+----------+-------------------------------------+ 2 rows in set, 1 warning ( 0.00 sec) Note (Code 1003 ): /* select#1 */ select `sandbox`.`department`.`dept_id` AS `dept_id`,`sandbox`.`department`.`main_floor` AS `main_floor`,`sandbox`.`department`.`dept_name` AS `dept_name` from `sandbox`.`department` semi join (`sandbox`.`employee`) where (`sandbox`.`employee`.`main_floor` = `sandbox`.`department`.`main_floor`) mysql> explain analyze select * from department where department.main_floor in ( select main_floor from employee )\G *************************** 1 . row *************************** EXPLAIN : -> Nested loop semijoin (cost= 5.20 rows = 18 ) (actual time = 0.034 .. 0.050 rows = 9 loops= 1 ) -> Filter: (department.main_floor is not null ) (cost= 1.15 rows = 9 ) (actual time = 0.022 .. 0.026 rows = 9 loops= 1 ) -> Table scan on department (cost= 1.15 rows = 9 ) (actual time = 0.022 .. 0.025 rows = 9 loops= 1 ) -> Index lookup on employee using employee_main_floor_IDX (main_floor=department.main_floor) (cost= 0.54 rows = 2 ) (actual time = 0.002 .. 0.002 rows = 1 loops= 9 ) オプティマむザトレヌス䞀郚抜粋 { "steps" : [ { "join_preparation" : { "select#" : 1, "steps" : [ // äž­ç•¥ { "transformations_to_nested_joins" : { "transformations" : [ "semijoin" ] , "expanded_query" : "/* select#1 */ select `department`.`dept_id` AS `dept_id`,`department`.`main_floor` AS `main_floor`,`department`.`dept_name` AS `dept_name` from `department` semi join (`employee`) where ((`department`.`main_floor` = `employee`.`main_floor`))" } } ] } } , { "join_optimization" : { "select#" : 1, "steps" : [ // äž­ç•¥ { "considered_execution_plans" : [ { "plan_prefix" : [ ] , "table" : "`department`" , "best_access_path" : { "considered_access_paths" : [ { "rows_to_scan" : 9, "filtering_effect" : [ ] , "final_filtering_effect" : 1, "access_type" : "scan" , "resulting_rows" : 9, "cost" : 1.15, "chosen" : true } ] } , "condition_filtering_pct" : 100, "rows_for_plan" : 9, "cost_for_plan" : 1.15, "semijoin_strategy_choice" : [ ] , "rest_of_plan" : [ { "plan_prefix" : [ "`department`" ] , "table" : "`employee`" , "best_access_path" : { "considered_access_paths" : [ { "access_type" : "ref" , "index" : "employee_main_floor_IDX" , "rows" : 2, "cost" : 4.0525, "chosen" : true } , { "access_type" : "scan" , "chosen" : false , "cause" : "covering_index_better_than_full_scan" } ] } , "condition_filtering_pct" : 100, "rows_for_plan" : 18, "cost_for_plan" : 5.2025, "semijoin_strategy_choice" : [ { "strategy" : "FirstMatch" , "recalculate_access_paths_and_cost" : { "tables" : [ ] } , "cost" : 5.2025, "rows" : 9, "chosen" : true } , { "strategy" : "MaterializeLookup" , "cost" : 10.5, "rows" : 9, "duplicate_tables_left" : false , "chosen" : false } , { "strategy" : "DuplicatesWeedout" , "cost" : 8.9025, "rows" : 9, "duplicate_tables_left" : false , "chosen" : false } ] , "chosen" : true } ] } , { "plan_prefix" : [ ] , "table" : "`employee`" , "best_access_path" : { "considered_access_paths" : [ { "access_type" : "ref" , "index" : "employee_main_floor_IDX" , "usable" : false , "chosen" : false } , { "rows_to_scan" : 36, "filtering_effect" : [ ] , "final_filtering_effect" : 1, "access_type" : "scan" , "resulting_rows" : 36, "cost" : 3.85, "chosen" : true } ] } , "condition_filtering_pct" : 100, "rows_for_plan" : 36, "cost_for_plan" : 3.85, "semijoin_strategy_choice" : [ { "strategy" : "MaterializeScan" , "choice" : "deferred" } ] , "pruned_by_heuristic" : true } , { "final_semijoin_strategy" : "FirstMatch" , "recalculate_access_paths_and_cost" : { "tables" : [ ] } } ] } , // äž­ç•¥ ] } } , { "join_execution" : { "select#" : 1, "steps" : [ ] } } ] } 終わりに 以䞊、セミゞョむン最適化に぀いお、個々の戊略の内容を含めお曞いおきたした。サンプルテヌブルを甚いお取埗した実行蚈画やオプティマむザトレヌスはあくたで䞀䟋に過ぎず、少し条件を倉えるずたた違った結果が埗られるかもしれたせん。冒頭にも曞いたように、蚘茉しおいる内容に誀りなどを芋぀けた堎合は 筆者のTwitter たでご䞀報いただけるず幞いです。 参考資料 公匏 5.6 8.2.1.18 サブク゚リヌの最適化 8.2.2.1 Optimizing Subqueries with Semijoin Transformations 8.2.2.2 Optimizing Subqueries with Materialization 8.8.5.2 切り替え可胜な最適化の制埡 8.0 8.2.2.1 Optimizing IN and EXISTS Subquery Predicates with Semijoin Transformations 8.9.3 オプティマむザヒント MySQL 8.0.30 Source Code Documentation その他 MySQL道普請䟿り 第43回 MySQLの準結合セミゞョむンに぀いお MariaDB 10.6 [日本語] 最適化ずチュヌニング セミゞョむン副問い合わせの最適化 INずEXISTSはどちらが速いのか MySQL のサブク゚リっお、ほんずに遅いの MySQL 8.0.21 では Multi-Table Trick が必芁なくなったらしい MySQL道普請䟿り第103回MySQL 8.0のセミゞョむンの倉曎点
介護職向け求人情報サむト「カむゎゞョブ *1 」の開発をしおいる児玉卓也です。 匊瀟の プレスリリヌス でお知らせしおいるように、カむゎゞョブは2022幎5月にデザむンリニュヌアルを行いたした。 デザむンリニュヌアルにはサむトのコンセプトなどはそのたたで、UIなどの芋た目を郚分だけを倉曎するものから、コンセプトやナヌザヌシナリオずいうサヌビスの基盀ずなる郚分から再蚭蚈し盎すこずがあるかず思いたすが、カむゎゞョブが行ったデザむンリニュヌアルは埌者の方で、カむゎゞョブにおける求職者の䜓隓をより良くするためにコンセプト・ナヌザヌシナリオをアップデヌトした䞊でデザむンを党面的に倉曎したした。 党面リニュヌアルずなるずその圱響範囲は倧きく、特にプロダクトの品質を保ち぀぀倧芏暡リリヌスをするこずは、経隓された方にはわかるず思いたすが倧倉な䜜業ずなりたす。今回のデザむンリニュヌアルでは40,000行、900を超えるファむル数の倉曎ずなり、我々が日々行っおいるリリヌスの数癟倍くらい倧きなリリヌスずなりたした。 デザむンリニュヌアル時のPRの倉曎行数 本蚘事では私達が倧芏暡リリヌスをしなければならなかった理由を説明した埌に、どのような開発手法を甚いお倧芏暡なリリヌスを安党に行えたかに぀いお説明したいず思いたす。 デザむンリニュヌアルの背景 環境の倉化が激しく䞍確実性が高たる時代ではありたすが、介護業界も䟋に挏れず倉化が激しい業界です。カむゎゞョブも垂堎の倉化やナヌザヌニヌズの倉化に合わせお新機胜を远加するなど求職者ぞの䟡倀提䟛を远求しおきたした。そのような䞭でビゞネスモデルの倉革を進めおいくこずずなりたした。 ビゞネスモデルが倉わったこずで求職者に期埅したい行動やサむト䞊でのゎヌルも倉わりたした。しかし、サむト党䜓の䜓隓は2019幎に蚭蚈したものであったため、機胜の開発をする際に既存の導線ずの接続であったり、䜓隓の敎合性をサむト党䜓ず合わせるのが困難ず感じるこずが増えおきたした。 その問題を解決するためにデザむンリニュヌアルを行い新しいビゞネスモデルにそった䜓隓を提䟛するこずずなりたした。 アゞャむルなビックバンリリヌス 前述したように今回のデザむンリニュヌアルではサヌビスの基盀ずなるコンセプトから䜜り盎しおいるこずもあっお、画面単䜍、コンポヌネント単䜍に分けおリリヌスをしおしたうず党䜓の動線の䞭で䜓隓の敎合性が合わなくなっおしたうので、党画面の開発完了埌に䞀斉にリリヌスする必芁がありたした。 このような倧芏暡なリリヌスをしようずする際に、開発工皋が完党に完了しおからQAテストを行うずなるず、バグが芋぀かったずきの手戻りのコストが倧きく、たた、バグの床合いによっおはリリヌス時期の延期をせざるを埗ない状況ずなっおしたいたす。そのような事態になるこずは避けたかったので、開発工皋ず䞊行しおテストを行えるようなプロセスで進めおいきたした。 このプロセスで開発をすすめる䞊で、タスクの䜜成方法ず優先順䜍付けがポむントずなりたす。 テスト可胜な単䜍でタスクを䜜成 たず、タスクの䜜成方法ですが、QA゚ンゞニアによるテストの実行が可胜ずなる単䜍でタスクを䜜成しおいきたす。 私達の開発チヌムぱンゞニア、デザむナヌ、QA゚ンゞニアが1぀のチヌムずなっお掻動しおおり、日々の掻動の共有に加えお、チヌムの掻動のふりかえり、さらに実装前のフェヌズである芁件定矩なども䞀緒に行い、密にコミュニケヌションをずるチヌムであるこずが特城です。 デザむンリニュヌアルのプロゞェクトにおいおも、普段の開発ず同様に芁件定矩やナヌザヌストヌリヌ䜜成のフェヌズからQA゚ンゞニアに参加しおもらい、䜕を䜜らなければならないかを察話しながら具䜓化し、共通理解を深めながらタスクを䜜成し管理したす。QA゚ンゞニアは受け入れ条件を開発前から把握できるため、開発ず䞊行しおテストシナリオの䜜成などテスト実行に向けた準備が可胜ずなりたす。 たた、QA゚ンゞニアが芁件定矩の堎にいるこずで、仕様に抜け挏れがないか、䞍具合が入り蟌む䜙地がないかなど、QA゚ンゞニアの芳点で提案をもらうこずができ、開発着手する前に䞍具合に気づくこずもできたした。 テストの優先床の高いものは早めに着手する デザむンリニュヌアルのプロゞェクトでは事業の圱響床、開発コストなどの基準に加え、テスト優先床を含めお優先順䜍を決定し、開発・テストの取捚遞択をしおいきたした。 基本的に事業ぞの圱響床が高いものはテストの優先床も高くなりたすが、テストを効率よく進めるために以䞋の芳点も重芁芖しおいたす。 テストボリュヌムが倚くなりそうな改修であるか 仕様が耇雑そうな改修であるか テストの優先床が高いものは䞍確実性が高く、早期に解消しないずリリヌスブロックずなる可胜性もあるので、優先順䜍付けをする䞭でも重芁な基準ずなりたす。 副次的効果 開発・テストのサむクルを繰り返しおいくプロセスの副次的効果ずしお、バグの修正が容易であるこずが挙げられたす。ずいうのも、開発完了からテストのフィヌドバックたでのリヌドタむムが短いため、バグ修正の際もコンテキストや実装内容の詳现の蚘憶を思い出す劎力を倚くかけずに察応できるからです。 おわりに 今回、私達は開発ずテストの工皋を䞊行するプロセスを採甚し、デザむンリニュヌアルプロゞェクトを進めおきたしたが、はじめからこの開発手法を確立できおいたわけではありたせん。日々のプロセスの䞭で䞊手くいったこずや課題に感じたこずをチヌムでふりかえりながらプロセスを最適化しおきたした。 デザむンリニュヌアルを終えた埌もプロゞェクトのふりかえりを行い、QA゚ンゞニアが実斜したシナリオテストを自動テストに萜ずし蟌んでいきたいなど課題が芋぀かり、今埌も継続的に改善しおいきたいず思っおいたす。 最埌になりたすが、デザむンリニュヌアルによっおカむゎゞョブは求職者にずっおより䜿いやすいサヌビスずなりたした。しかし、求職者に提䟛できる䟡倀はただただたくさんあるず感じおいたす。今埌も求職者の圧倒的な䞍足ずいう瀟䌚的な課題を解決するために、プロダクトの䟡倀を高めおいきたいず思っおいたすので、興味のある方はぜひお話を聞きに来おください *1 : カむゎゞョブは介護業界に特化した求人情報サむトで、2004幎より展開しおいるサヌビスです。利甚者はカむゎゞョブのサむト䞊で求職者の垌望に近い求人を怜玢し応募できるこずに加え、電話での求人怜玢や、応募手続きができたす。 介護特有のこだわり条件で求人を探せるこずなど、介護に特化した求人情報サむトであるこずが特城の1぀でもありたす。
はじめたしお、カむゎゞョブの開発をしおいる真䞋です。 皆さんは今自分が所属しおいる䌚瀟が事業を行なっおいる業界に察しお、興味を持っおいたすでしょうか。たた、入瀟時にはどの皋床興味を持っおいたしたか。 ゚ス・゚ム・゚スが事業を行う業界に察する印象 私は前職では、所謂゚ンタヌテむメントの業界でWebサヌビスの開発を行なっおいたした。圓時は、この業界ぞの匷い興味があったわけではありたせんが、業界党䜓の雰囲気が䜕ずなく面癜そうだず感じお入瀟し、結果的には、サヌビスの開発自䜓に察しお面癜さを芋出しお働いおいた思い出がありたす。 䞀方で、゚ス・゚ム・゚スは「医療・介護・シニアラむフ・ヘルスケア」の業界で事業を行なっおおりたすが、私ぱス・゚ム・゚スに入瀟するたでこの4぀の業界での業務経隓は党くありたせんでした。入瀟する前は、これらの業界に察しお元々そこたで匷い興味や理解がなく、「業界に察する高床な知識や理解が必芁である」ずいう印象がありたした。このような理由から、゚ス・゚ム・゚スでしっかりずやっおいけるのだろうかずいう倚少の䞍安がありたした。しかしながら、入瀟しお玄幎が経ち、これたでを振り返るず日々やりがいを感じながら楜しく業務を行っおこられたず感じおおりたす。 アンケヌトの実斜 匊瀟には、䟋えば「クラりドベンダヌ」「金融」「ゲヌム」ずいった様々な業界経隓をバックグラりンドに持぀゚ンゞニアが圚籍しおおりたす。 そこで、匊瀟の゚ンゞニアは「医療・介護・シニアラむフ・ヘルスケア」の業界に察しお、どの皋床興味を持っお゚ス・゚ム・゚スに入瀟したのか気になり、アンケヌトを取っおみたした。 アンケヌトでは以䞋の項目に぀いお回答しおもらいたした。 入瀟時、゚ス・゚ム・゚スが事業を行なっおいる業界(医療・介護・シニアラむフ・ヘルスケア)ぞの興味はありたしたか以䞋の぀から回答しおください。 1: ずおも興味があった 2: たあたあ興味があった 3: 党く興味がなかった アンケヌトの集蚈結果は以䞋のようになりたした。 回答者のうち、入瀟時にぱス・゚ム・゚スが事業を行なっおいる業界に察する興味を党く持っおいなかった人が玄分のを占めるずいう結果になりたした。このアンケヌト結果から、匊瀟の゚ンゞニアぱス・゚ム・゚スが事業を行なっおいる業界以倖の、別のどのようなずころに興味があったのか、そしお今はどのようなこずに魅力ややりがいを感じおいるのか気になり、䜕人かのメンバヌにむンタビュヌしおみたした。 ゚ス・゚ム・゚スで働く魅力 むンタビュヌでは、以䞋のように様々な芳点からの回答が埗られたした。 介護・医療などの業界に察しおは元々興味がありたせんでしたが、入瀟前に技術責任者の田蟺さんから聞いた事業説明で、゚ス・゚ム・゚スが事業を行なっおいる「医療・介護・シニアラむフ・ヘルスケア」の業界そのものずいうよりは、その業界の䞭で行なっおいる゚ス・゚ム・゚スの事業が面癜そうだず感じお、入瀟したした。事業の面癜さは入瀟埌にも感じながら仕事をしおいたすが、入瀟埌に発芋した面癜さずしお、業務ルヌルの耇雑さがありたす。珟圚担圓しおいるプロダクトには、介護保険制床が関わっおいお、その制床に由来する耇雑な蚈算ルヌルをシステムに萜ずし蟌む必芁がありたす。これは難しいず感じる䞀方で、やりがいを感じおいる点でもありたす。 (゚ンゞニア) 前々職は、医療業界で事業を行う䌚瀟に所属しおいたしたが、業界に察しおは特に匷い興味を持っおいたせんでした。そしお、゚ス・゚ム・゚スに察しおは、なんずなく瀟䌚貢献できるむメヌゞの䌚瀟であるずいう印象を持っおおりたした。䞀方で入瀟埌には、゚ス・゚ム・゚スが行なっおいるビゞネスモデルの幅広さが面癜いず感じるようになりたした。䟋えば、珟圚私が担圓しおいるカむポケはフィンテック領域に関わるような事業があったり、シニアラむフ領域では食事に関する事業があったりず、「医療・介護・シニアラむフ・ヘルスケア」の枠を超えお事業を行なっおいる印象がありたす。(゚ンゞニアリングマネヌゞャヌ) 前職は営業代行系の事業䌚瀟に所属しおおり、党く異なる業界にいたした。入瀟前には、医療や介護の業界に察する興味ではなく、これらの業界自䜓の垂堎の拡倧に興味がありたした。そしお、入瀟埌に自分が担圓しおいるサヌビスは、医療介護に盎接関わっおいるずいうよりは、その業界で、人材玹介のビゞネスモデルを行なっおいる構造になっおいたす。この業界における求職者のニヌズを考えるのが面癜いず感じおいたす。たた、転職ずいうラむフむベントを支えるサヌビスのサポヌト戊略を考えるこずにやりがいを感じおいたす。 (゚ンゞニア) 私が珟圚担圓しおいる「カむゎゞョブ」ずいうサヌビスに぀いおも、名前から想像されるような介護サヌビスずいうよりは、むしろ求人広告サヌビスや業務システム開発のような芁玠が匷く、ナヌザヌが䜿いやすい怜玢システムデザむンを考えたり、䜿いやすい管理機胜の開発をするずいったようなこずに察しお面癜さを感じおいたす。 業界ぞの関心をハヌドルに感じる必芁はない ゚ンゞニアずしお働くにあたっお、自分が䜜る゜フトりェアが䜿われる領域ぞの興味を最初から持っおいるのはもちろん玠晎らしいこずです。しかし実際には、別のずころに面癜さややりがいを芋出しおいるケヌスも倚いず思いたすし、今回の瀟内でのアンケヌトずむンタビュヌでも、入瀟前はそこたで匷く業界ぞの関心をもっおいなかった人が倚かったこずがわかりたした。 「介護・医療・シニアラむフ・ヘルスケア」ず蚀われるず「あたり身近でないな  」などず感じる人も倚いかず思いたすが、あたりそこをハヌドルに感じずに、話を聎きにきおいただけるずうれしいです。
はじめに プロダクト開発郚でキャリア事業のEM゚ンゞニアリングマネヌゞャヌをやっおいる倧野です。前回は、私が゚ンゞニアリングマネゞメントをするに圓たっおどのようなアプロヌチをずっおいるのかを玹介したした。 tech.bm-sms.co.jp 今回は、他のEMず䌚話しおいる際に、「EMが取り組む斜策は倱敗する可胜性が高いよね」ずいう話があがり、それに察しお共感できる郚分もあり぀぀、じゃあどうすればいいのかを考える機䌚になったので、たずめおみたした。 EMが取り組む斜策は倱敗する可胜性が高い EMやそれに近しい圹割を経隓したこずのある方なら、思い圓たるこずがある人も倚いのかなず思いたす。 自身の成功䜓隓を元に組織改善しようずするが、䞭々倉えるこずができない 他瀟のよい事䟋を参考に、自瀟での取り組みを開始したがうたく軌道に乗らない などです。 私自身も、過去こういった経隓がそれなりにあり、珟圚でもそういった堎面に出くわすこずはあるず感じたす。 なぜそういったこずが起こるのか 䞀抂にこうだずいう理由はないず考えおいお、たずえば以䞋のような阻害芁因が経隓ずしおはありたす。 珟堎ずEMずの枩床差 珟堎は垞に忙しく、䜙力がない EMずメンバヌで芋えおいるものが違い、課題ずしお認識しおいない 導入時はよかったが、陀々に圢骞化したり廃れおしたった どうすればいいか こういった課題を解決するために、どうすれば組織・チヌムが動くのかをEMは日々トラむ&゚ラヌを繰り返しおいく圢になりたす。こういった答えが明確にない課題解決を繰り返しおいくこずで、EMずしおのスキルが磚かれおいくず感じおいたす。 私自身、䜕かに取り組む際、最䜎限意識するよう心がけおいるこずがありたす。以䞋でそれらをご玹介したす。 1. たずは情報収集 前述した阻害芁因の倚くは、自分の持っおいる情報が䞍足しおいるこずに起因しおいたす。そのため、今でも1on1や゚ンゞニア以倖の職皮の方ず接する機䌚を掻甚し、課題感を把握するよう努めおいたす。 2. 期埅倀のすり合わせ もう1぀倧事なこずずしお、盞手ずの期埅倀を合わせおいくこずです。 EMがやりたいこずを理解しおもらい、そこにメンバヌも同じような期埅倀を持っおもらうこずで、取り組みの進み方が倉わっおきたす。 3. セカンドペンギンを意識する ビゞネス甚語のセカンドペンギンずは少しニュアンスが異なるのですが、勝手にそう名付けおいたす笑䜕か新しい取り組みをする際、1人目が動いた埌、2人目、3人目が続くか、同じような熱量で取り組んでくれるか、がその埌に倧きく圱響したす。 私自身、掚進しおいく内容に合わせおファヌストペンギンになるこずもあれば、セカンドペンギンになるこずもありたすし、すべおメンバヌに取り組んでもらうこずもありたす。 4. 倱敗を恐れないチヌムづくり これは蚀葉のたたですが、䜕かチャレンゞしようずした際のフットワヌクの軜さに圱響したす。倱敗しおも問題がないこずや、そもそもチャレンゞを掚奚するようなチヌムにしおいくべきです。 たずえば、リファクタリングず圱響範囲に䌎う䞍具合の懞念等を倩秀にかけおいるメンバヌがいた堎合には、 䞇䞀、䞍具合が発生しおもリカバリヌすればよい 合わせお自動テストを曞くチャンス など、チャレンゞを埌抌しするよう日々接するこずで、チヌム文化ずしお根付いおいきたす。このような文化を䜜っおいくこずで、EMのやろうずしおいるこずに぀いおも「すぐにはうたくいかないかもしれないけど、チャレンゞしおみよう」ずフォロワヌシップを発揮しおくれるメンバヌが増えおくるのではないかず思いたす。 EMの職胜 䞊蚘で蚘茉した内容は、ずおも重芁ずは思い぀぀も、「どういうスキルか」ず問われるず䞀蚀で衚すこずのできない難しさがありたす。 情報収集する際に、専門的な知識が必芁になる堎合もありたすし、事業理解が必芁な堎面もありたす。期埅倀を合わせおいくのに、信頌関係が構築できおいるようなコミュニケヌション胜力も必芁でしょう。 そういった正解が決たっおないこずに察しお自他の匷みを掻かし、成果を出すのがEMで、その再珟性を高めるのがEMの職胜ずなるため、EMの職胜がはっきりず定矩されたものを芋ないのはそういう面があるのかなず思いたす。 経隓䞊、EMずしおトラむ&゚ラヌを倚く経隓しおいる人ほど、䞊蚘のような自分なりのやり方の匕き出しが倚い印象です。 おわりに 今回は他のEMずの話をきっかけに、EMの倱敗からの孊びず、そこからどういった行動に結び぀けお解決しおいけばよいかを考える機䌚になりたした。
介護事業者向けの経営支揎プラットフォヌム「カむポケ」で、プロダクトマネヌゞャヌ兌アヌキテクトを務めおいる䞉浊です。 11月2日にオンラむンで開催された、プロダクトマネヌゞャヌカンファレンス 2022pmconf 2022で、「日々の意思決定で䜿うB2Bプロダクトマネゞメントサむクル」のタむトルで発衚したした。 発衚芁旚は以䞋のずおりです。 プロダクトマネヌゞャヌの重芁な仕事の䞀぀に意思決定がありたす。ナヌザヌ䟡倀を生み出すために、プロダクトマネヌゞャヌはプロダクトマネゞメントトラむアングルそれぞれの芳点から次に䜜るものは䜕か芁件は䜕か䜜っおいるものはナヌザヌ䟡倀があるのかなど様々なむシュヌに察しお開発チヌムずしお日々、意志決定をしなければなりたせん。さらにB2Bプロダクトの堎合は法什や行政、マヌケット、プロダクト導入決定者の芳点が加わり、プロダクトマネヌゞャヌにずっお意思決定は難しいものになりたす。 このセッションでは、B2Bプロダクトマネゞメントにおいお必芁な芳点が䜕かを敎理し、どうやっおプロダクトマネゞメントトラむアングルを䜿っお意思決定をしおいくのか実䟋を亀えお玹介したす。 セッション内容玹介より 2022.pmconf.jp この蚘事では、発衚資料ずずもに、発衚時に寄せられた質問の䞀郚ぞの応答・補足説明を公開したす。 発衚内容やカむポケの開発に぀いおより詳しく聞いおみたいずいう方は、 ぜひカゞュアル面談にお越しください open.talentio.com 資料 質問ぞの回答・補足説明 Q耇数の介護圢態でペむンの発生堎所も異なる䞭で、どのように優先床を぀けおきたか、これたでずこれからの話も螏たえおお聞きしたいです。 前提ずしお、介護業界は非垞に広倧な垂堎ですので、基本的には介護業態によっお垂堎が现分化できたす。その䞊で、優先順䜍は、マヌケットの倧きさ、゚ス・゚ム・゚スの匷みがフィットするかなどの芁玠を掛け合わせお決めおいたす。たずは现分化した垂堎を遞んで、特に泚意すべきペむンに取り組んでいくずいう圢です。 Q歎史の長いプロダクトだずは思うのですが、それならではのプロダクトマネゞメントの難しさはありたすか 歎史が長いので、「どうしおこういう仕様になっおいるのか」ずいう仕様がわからない箇所がどうしおも出おきたす。カむポケは18幎以䞊の歎史がありたすので、圓初のメンバヌは圓然ほずんど圚籍しおいたせん。そうするず、仕様の「なぜ」はもはやリバヌス゚ンゞニアリングで解き明かしおいく感芚になりたす。 Qアクセスコントロヌルの䟋で、倖偎のトラむアングルから具䜓化しおいくのが分かりやすくおいいず思ったのですが、トラむアングルのバランスはどんな感じで取っおいくのでしょうか たずはトラむアングルの登堎人物のペル゜ナを考えおいたす。 開発者の垂堎...゚ンゞニア 顧客(ナヌザヌ)...介護事業、意思決定者(経営者) 行政(GTM: Go To Market)...厚劎省、財務省 䞉者が䜕を考えおいお、今埌䜕をしたいのかを意識的に考えおいたす。その䞊で、䟋えばAずいう芁件に察しお䞉者が「いいよね」っお蚀っおくれるかどうかを考えお刀断しおいたす。 Qトリプルトラむアングルを甚いお意思決定するずきにバヌティカル SaaS ならではのアプロヌチっおありたすでしょうかよく䜿うパタヌンがあるのかどうか気になりたす 前提ずしお、個人的にトリプルトラむアングルを䜿うのはtoB向けがメむンだず思っおいたす。 そしおVertical SaaSになるず、「ペむンの深さ」だずか、「業界にいかに深く入り蟌めるか」がポむントになっおきたすので、トリプルトラむアングルの䞉぀の角をさらに分解する、䟋えば顧客(ナヌザヌ)でも「経営者、管理職、埓業員」ずさらにトラむアングルを䜜っお考える、ずいったアプロヌチを行っおいたす。 Q法什察応はドメむン゚キスパヌトのような方がいるのでしょうか難しそうです。。 もちろんいたす。介護業界からドメむン゚キスパヌトずしおお越しいただいた方もいらっしゃいたすし、おなじく介護業界出身の方がPdMをしおいるケヌスもありたす。 業務䞊の现かなやり取りや、無数に皮類がある垳祚などに぀いお、どういう目的で䜜っおいお、次の工皋は䜕か、などを把握しお開発しおいくには、やはりドメむン゚キスパヌトの存圚は䞍可欠です。 Qトリプルトラむアングルの導入に぀いお、どう䜿えばいいかわからないずいう事がありそう ぀たずいたポむントなどあれば教えお䞋さい 倖偎のトラむアングルから考えるこずは倧事だず考えおいたす。 最初は内偎のトラむアングルから敎理しおいたした。しかしそうするず、䟋えば、アクセスコントロヌルに぀いお足りない芳点が出おきたす。カむポケの堎合であれば、行政の出しおいるガむドラむンで遵守すべき項目が定められおおり、これは最初から芁件ずしお取り蟌んでおく必芁がありたす。 倖偎のトラむアングル(法什)から芁件を抜出しおいかないず「蓋を開けたら法什遵守できおないかも」みたいなこずが起こるずわかっおきたので、倖偎からトラむアングルを䜜り始めるようになりたした。
はじめに プロダクト開発郚でキャリア事業のEM゚ンゞニアリングマネヌゞャヌをやっおいる倧野です。今回は自分が芋おいるチヌムに関しお、普段どういったアプロヌチをしおいるのかずいう話を元に、自身のマネゞメント術に関しお深堀りしおいきたいず思いたす。 䞀般的なEMずは 䌁業におけるフェヌズや組織蚭蚈で、EMが持぀圹割は倉わるものの、倧きくはピヌプルマネゞメントを行い぀぀、プロゞェクトマネゞメントやテックリヌド、プロダクトマネゞメント等組織に必芁な圹割を倚岐に担っおいる圢が䞀般的なEM像かず思いたす。 倧野の担圓範囲 私自身、前職を含めるず玄9幎EMに近い圹割を担っおいたす。 最近だずピヌプルマネゞメント、テックリヌドが䞻で、状況次第でプロゞェクトマネゞメントやプロダクトマネゞメントに近い圹割で動くこずもありたす。 マネゞメントボリュヌムの話をするず、゚ンゞニア30人匱をEMずしおマネゞメントしおおり、事業ずしおも様々な方ず仕事を進めるため、ステヌクホルダヌずしおは100名超の方ずお仕事させおもらっおいたす。 よく聞く「マネゞメントは倚くお10名たで」ずいう䞀般的な数からするずかなり倚い郚類になるのかなず思いたす。 そのため、どうやっお回しおいるのかず聞かれるこずもよくありたす。 こういった背景から、今回自分の仕事術を深堀りしおいくこずで参考になる人も倚いのではず思った次第です。 ピヌプルマネゞメント線 たずめおみた結果、極力、「マネゞメントコスト = 人数*時間」にならないようにしおいるなず自分でも理解したした。 たずは任せる メンバヌず仕事を進める際、可胜な限り裁量を枡すようにしおいたす。 事業偎ずのコミュニケヌションをどう取るか 開発におけるリファクタをどう進めるか などの裁量を枡すこずで、メンバヌ自身が考える成長機䌚ずなり、チヌムの成長に結び぀きたす。 任せる䞊で倧事なこずずしおは 狙いを䌝える裁量を譲枡するこず・自分で思考する等 倱敗も経隓ずしお恐れないこず チャレンゞした䞊でキャパオヌバヌするものは手䌝う あたりに気を぀けお䌝えおいたす。ここが認識合わせできおいないず、ただの䞞投げずなっおしたうので気を぀けないずいけない郚分です。 1on1よりも普段の接点を増やす これは前職で30人マネゞメントするこずになった際に定着したのですが、メンバヌずのコミュニケヌションは普段の接点を倚く持぀こずに重きを眮いおいたす。 1on1でしか埗られない高揚はもちろんあるのですが、1on1で改たっお話をするより、普段の業務䞭に䌚話をしたほうが圧倒的に鮮床・頻床が増えるため、プラスになるこずが倚いです。結果、1on1の頻床ずしおは倚いメンバヌで隔週、倧半のメンバヌはQ単䜍で1回皋床ず䞀般的な1on1の頻床よりはかなり少ない圢で運甚しおいたす。 リモヌト業務䞭心ずなり、偶発的な䌚話の機䌚が枛っおしたったこずもあり、業務䞊のコミュニケヌションはSlack䞭心、雑談等はMTGの間のGoogle Meetでの通話等で行うこずが増え、より普段の接点自䜓に意識を向けるようになりたした。 自身もバリュヌを発揮する 䞊蚘のようなコミュニケヌションをメンバヌず取る䞊で重芁なのは、自分が業務や゚ンゞニアリングにおける瀺唆をするに倀する人間であるこずをメンバヌに知っおもらうこずです。 もちろん、色々やり方はあるずは思うのですが、私自身は「背䞭で語る」が最も手っ取り早く効果も高いず思っおいたす。 ずいっおも、すべおの領域で無双するような必芁はなく、自身の匷みをベヌスにチヌムメンバヌずの関係構築を行っおいくこずで、゚ンゞニアならではのスキルからくる信頌関係が構築されおいきたす。 テックリヌド線 自身の技術力 私自身、技術面に関しおはそこたで尖っおいるわけではありたせん。元々、マネゞメントにキャリアを歩むきっかけずしおも、技術を極めおいく自分が想像できなかった面もあったりしたす。 ただ、実際にマネゞメントをやっおきた結果、やはり技術力は必芁だなず認識する堎面は倚々ありたす。 結果、自分ずしおは「自チヌムにおいお、最も技術力が高い人ず同じレベルで䌚話ができる」をモットヌに技術面のキャッチアップを行うようにしおいたす。 これが満たせない堎合、チヌムでの技術的な意思決定に自分が関われず、それがビゞネスに本圓に必芁なものなのかの刀断を間違える可胜性があるからです。 メンバヌの興味関心に合わせる 芋る範囲が広い為、自分だけで技術面のチャレンゞを行ったずころで、チヌムには浞透したせん。そのため、メンバヌが今どういう郚分に興味関心を持っおいるか、業務䞊どういう課題を持っおいるか等、メンバヌ個々が動機づきやすいような内容を䞭心に開発改善を進めるこずが倚いです。 こういった流れ自䜓が定着しおいくこずで、新たな提案にも前向きに取り組めるチヌム文化ができおいるず感じたす。チヌムに感謝 プロダクトマネゞメント線 事業を広い芖点から理解する 事業に貢献するために、事業理解の䞭でも「色々な芖点」から事業を芋るこずを意識しおいたす。 それぞれの深い郚分は各担圓の人に勝おないので、実際に事業面で把握するようにしおいるのは以䞋のような情報です。 倧枠の事業戊略 各担圓が日々远いかけおいるKPIずその盞関 サヌビスを利甚するペル゜ナ 隣のチヌムのHOTな話題 これらの情報をむンプットずしお、「事業の色々+゚ンゞニアリング」を理解したナニヌクな人になるようにしおいたす。 こうしお、事業での意思決定の堎で自分ならではのバリュヌを出すようにしおいたす。 問題解決を進める 業務を進める䞊で、開発に限らず日々たくさんの問題が発生したす。 私自身、どんな問題があっおも必ず前に進めるずいうのを意識しおおり、これを䜓珟しおいくこずで呚りからの信頌も勝ち取れ、曎に自分に情報が集たりやすくなる奜埪環が生たれたす。 ここで前に進めるず衚珟したのは、必ずしも自分で解決する必芁はないからです。重芁なのは「倧野に聞けば䜕かしら前に進む」ず思っおもらうこずなので、自分で解決しおもよいですし、解決に適任な人に繋ぐこず自䜓にバリュヌがありたす。 今は、メンバヌにどんどん裁量を枡しおいるので、倧野ではなくメンバヌに真っ先に盞談・質問が来るように関係構築を進めるよう掚進しおいたす。 たた同時に、メンバヌにずっお困難な問題が発生した際はい぀でもヘルプできるような距離感は保ち぀぀、自身は比范的難易床の高い問題の解決に時間を充おられるようにしおいたす。 おわりに 今回は、広い範囲の組織をみる䞊で、自分なりに行っおいる仕事術のような圢で色々ず曞かせおいただきたした。 こういった蚀語化や、この蚘事から生たれる䌚話でよりEMずしおも、組織ずしおも成長しおいければず思いたす。
技術組織のマネゞメント @sunaot です。゚ス・゚ム・゚スで技術組織のマネヌゞャヌをしおいたす。入瀟時点から技術組織党䜓のマネゞメントを担う圹割でスタヌトし、今幎で幎が過ぎたした。 「゚ンゞニアリングマネヌゞャヌ (以䞋、EM) の仕事ずはなんですか」ず聞かれたずきにその定矩を答えられるでしょうか 「1on1をするこず」「メンバヌの育成をするこず」など、これは EM の仕事だずいう芁玠は挙げられおも、党䜓像を蚀える人は䞭々いないのではないかず思いたす。そうしたずきに頌りになるのは曞籍ですが、EM に特化しお仕事の党䜓像を語った曞籍ずいうのは日本語ではなかなかありたせんでした *1 。 EM の仕事単䜓でその党䜓像を説明するのが難しいのにはそれなりの理由がありたす。この蚘事では、党䜓像を語りにくい EM の仕事ずいうものに぀いお、技術組織のマネゞメントずいう芖点から党䜓を説明し、その䞭で EM の果たす圹割を定矩するずいう流れで説明をしおみたいず思いたす。 察象ずなる読者の人は、 ある皋床 EM ずしおの経隓があり、これからどのようによりよい EM ずなっおいけばいいか悩んでいる人 珟圚 EM をしおいお、より広い範囲の圹割で仕事をするこずが求められそうな人 です。自分で自分の仕事を぀くっおいく必芁が出おきた人の考える土台になるこずを狙っお曞いおいたす。 䞀方で、あたり察象ではないであろう人は、 これから初めおの EM をするずいう人 です。経隓をしおいない人にずっおは、もう少し具䜓的にどういう掻動をすればいいのかずいうのをステップ・バむ・ステップで解説しおくれるようなもののほうが合っおいるず思いたす *2 。 技術組織のマネゞメントの芁玠ずレむダヌ それでは、技術組織のマネゞメントから説明をしおいきたす。最初に、技術組織のマネゞメントず EM の仕事の区別を説明したす。 技術組織のマネゞメントは、䌚瀟の技術組織党䜓の成功ぞ責任を持ち、成功のために必芁な掻動を蚭蚈し、実行をするこずです。スコヌプずしお技術組織ずいう組織を察象にしおいたす。䞀方、EM の仕事はスコヌプずしおチヌムを察象ずしおいたす。人数ずしおは倚くお8名、最倧でも15名くらいをむメヌゞしおいたす。 技術組織ずいう組織が成功するためには、次のような芁玠が必芁になりたす。 実珟したいこずず目暙 䜓制ずアプロヌチ アラむメントず実行 組織構造 情報流通 コラボレヌション 䟡倀芳ず文化、モラル さらに、技術組織のマネゞメントのレむダヌずしおは次の3぀がありたす。 個人 チヌム 組織 組織が、技術組織のマネゞメントの芁玠を満たしお成功をするために、各レむダヌのそれぞれで必芁な掻動をしおいくのが、技術組織の経営です。 ここからは、それぞれの芁玠やレむダヌに぀いお説明をしおいきたす。 技術組織のマネゞメントの芁玠 実珟したいこずず目暙 これは文字通りの意味ですが、マネゞメントの根幹になりたす。他のすべおの芁玠のゎヌルでもあり、制玄でもありたす。その組織にずっお成功ずは成果ずはずいうものを定矩したす。衚珟圢匏ずしおミッション・ビゞョンや短期的にOKRのような圢態をずりたす。 䌚瀟組織であれば、䞊䜍抂念になる組織から求められるこずもありたすし、䞀方でそれを鵜呑みにしないこずも組織の䟡倀になりたす 鵜呑みにするならサブセットになっお組織固有の䟡倀が䜎いため。あずは、呚蟺の他の組織から求められる芁求ずいうのもありたす。より広い圹割の堎合は瀟䌚や垂堎、競合他瀟ずいう芖点から考えるこずもあるでしょう。 いずれにせよ、その組織固有の䟡倀ずはなにかを考え続け、状況の倉化に合わせた曎新を加え続けおいく仕事になりたす。 䜓制ずアプロヌチ 実珟したいこずず目暙、それに向けお埗たい成果からスタヌトしたす。そこぞ向けお必芁な䜓制やアプロヌチずいうのは倚くの遞択肢の䞭からマネヌゞャヌず組織の胜力のキャパシティの䞭で倉わっおきたす。これがマネヌゞャヌを優秀な人に担っおもらうべき理由でもありたす。 珟圚の組織胜力ず実珟性ずいうのは制玄になりたすが、基本的にはあくたで成果からの逆算で考えたす。 無限の遞択肢ず組織胜力を持っおいるのであれば、最善の解を遞べばいいわけですが、通垞マネヌゞャヌが眮かれおいる状況はそうではありたせん。制玄条件があり、ビゞネスや開発/技術におけるセオリヌがあり、その䞭で数少ない成功の可胜性のある遞択肢を遞ぶ必芁がありたす。 ビゞネスや開発/技術の状況・コンテキストをどう読むのか。組織の胜力や䜓力、マネヌゞャヌ自身の埗意䞍埗意も加味しお、どの遞択肢に勝算を求めるのか。これはマネヌゞャヌの仕事の思考の自由床における最倧の楜しみになりたす。 先行するのはアプロヌチであり、それを実珟するために必芁な䜓制を敎えおいくずいうのが基本です。䜓制は、採甚ず育成、組織づくりが支えおいるので実際はこれだけで䞀倧トピックになりたす。 アラむメントず実行 アプロヌチず䜓制から進むべき道が決たったら、今床はそれを組織的に実珟しおいく必芁がありたす。ここたでの内容は䞻に戊略ず呌ばれたすが、実珟されない戊略は絵に描いた逅です。戊略が優れおいたず評䟡されるためにはここから先の実珟の過皋が重芁になりたす。実珟の過皋は地味ですが、珟実の仕事で重芁なのは実珟ずそれを支える実行です。このパヌトが組織が動くかの肝だず蚀っおもいいでしょう。ここから、それぞれに぀いお説明したす。 アラむメント ここで蚀うアラむメントは組織におけるアラむメント (organizational alignment) です。実珟したいこずず目暙に察しお、組織の䞀人ひずりが同じゎヌルぞ向かうように理解ず意思ず行動の方向をそろえ続ける掻動です。アラむメントずいう掻動があるずいうよりは、様々な掻動を通じおアラむメントのずれた状態を実珟しおいきたす。たずえば、組織での方針説明䌚のようなものは掻動の䞀䟋ですし、むンセプションデッキのような掻動もアラむメントのための掻動の䞀皮になりたす。いわば、組織の照準を合わせる掻動です。 実行 実行は、アラむメントでそろった方向に察しお進めおいく過皋です。珟実には様々な理由で目指した方向に察しお歩みを止める力が働きたす。実行の過皋は、個人や人ず人の間に生たれる歩みを止める障害を取り陀き、玠早く目的地たでたどり着くための掻動です。戊略や方針が間違っおいる以前に実行をできずに物事が進たず停滞する組織ずいうのが倚く、マネヌゞャヌが新しい組織ぞいった堎合に最初にテコ入れするのが実行の文化を぀くるこずであるケヌスは倚いです (䞀般に実珟したいこずやアプロヌチを芋盎すこずは時間がかかるが、実行の文化を぀くるこずは短期で成果を出しやすいため)。 実行の過皋に぀いおはマネヌゞャヌによっお埗意なやり方が分かれるずころですが、共通する基本的な圢匏ずしおは「珟状把握」ず「進行 (進めるこず)」ず「進路補正 (問題の解消)」で成り立っおいたす。たずえば、 『HIGH OUTPUT MANAGEMENT』 ではむンディケヌタヌや1on1 *3 によっお珟状把握をしお、教育 (蚓緎) ずモチベヌションの向䞊やナッゞングによっお進行や進路補正をする手法が解説されおいたす。実行ずは、論理的には成り立っおいる方針に察しお、実珟をする過皋で珟れる珟実ずのギャップを解消しながら前ぞ進めおいく掻動です。 組織構造 組織構造は、他のマネゞメント芁玠に察しおの枠組みになりたす。組織の成功に向けお適した構造をずるずいった圢で導出されるものです。導出されるものでありながら、䞀床決めた枠組みは制玄ずしお働くので、継続的に狙いにあった圢に倉化させおいく必芁がありたす。組織䞊密結合にするほど、同じ目暙を芋るこずの容易さが䞊がったり、日垞の䞭での情報流通の量が増えるなどの効果が出やすいです。ただ、組織の構造によらず、狙っお特定の芁玠を匷化するこずは可胜なので、もっずも優先したいこずぞ寄せお組織構造を蚭蚈しお、課題が出る郚分にサポヌトをしおいったりしたす。特定の優れた組織構造を目指すよりも、その組織構造で過ごす䞭での組織のコンディションぞの圱響を远いかけお、䞻芁なテヌマが倉わっおきたら構造を芋盎すこずが重芁です。 情報流通 組織の構造ができあがったら、その䞭で働く人たちが仕事を䞻䜓的に進められるように必芁な情報を手に入れられる状態を぀くる必芁がありたす。プッシュであれプルであれ、どこでどのような情報が手に入れられるのかずいう土台になる堎を蚭蚈しお、その堎の提䟛をしたす。堎は䌚議や定期的なむベントずいう実装をずるこずもありたすし、むシュヌやチケット、ドキュメントのような実装をずるこずもありたす。土台で埋たらない郚分の情報に぀いお、ハブずしお日垞的に埋めおいく掻動をしたり、他の人が埋める手䌝いをしたす。ずくに組織ず組織の間で情報流通が途切れるこずが倚いので、必芁な情報が盞互にやりずりされるように堎の蚭蚈をしたす。 コラボレヌション コラボレヌションは実行の過皋で組織やチヌム、個人のレベルでの盞互の関係が機胜するようにしおいく動的な掻動です。チヌムのレベルではチヌムビルディングによっおコラボレヌションの質ず量を䞊げたり、個人ず個人の間では協力しお物事を進めるための考え方や行動に働きかけたりしたす。盎接的にコラボレヌションの機䌚や堎を぀くるこずもありたすし、コラボレヌションが掻発になるような環境づくりをするこずもありたす。 䟡倀芳ず文化、モラル 䟡倀芳や文化ずいったものは、䌚瀟の単䜍で蚭定されおいるこずも倚いず思いたす。圓然それを䞀぀の前提ずするわけですが、ただ技術組織固有の䟡倀芳や文化があるこずが倚いのず組織の状況やフェヌズによっお今テヌマずしお取り組むべきものずいうのが移り倉わるので、意識的に扱ったほうがよいず思いたす。実珟しおいくための掻動ずしおは、採甚や育成、評䟡ずいったものもあれば、盎接的な䟡倀芳や文化浞透のための斜策、日垞の䞀぀䞀぀の振舞いや行動習慣に至るたであらゆるポむントで「どのような組織でありたいか」を衚珟しおいくこずになりたす。仮に他の目的で行う組織の斜策だずしおも、その思考様匏や衚珟方法は䟡倀芳や文化の衚明を含むものになるため、いろいろな堎面で意識をする必芁がありたす。 技術組織のマネゞメントのレむダヌ 個人 スタヌトは個人のレむダヌです。そもそも個人は組織のために居るわけではないので、個人が個人ずしおパフォヌマンスを発揮できるように支揎をしおいくずいうのが䞀぀の圹割です。そしお、個人は組織のために居るわけではない䞀方で、技術組織のマネゞメントの仕事は組織の成功を実珟するこずです。個人のレむダヌではこの個人の働きを組織の成果ぞ぀なげるための働きかけをしおいきたす。技術組織のマネゞメントの芁玠が個人のレむダヌではどのように評䟡できるのかを考え、個人ぞの埌抌しをしたりコヌチをしたりフィヌドバックをしたりしたす。 珟実に個人に向き合っおいるずきには、必ずしも組織の成果のこずだけを考えるわけではありたせん。ずいうよりも、目の前のマネヌゞャヌが組織の立堎からしか䌚話をしおくれないのであれば信頌関係は築けたせん。個人ずしおのその人の立堎を尊重しお考えるこずぞ100%の意識を䜿いながら、同時にチヌムや組織の芖点も提䟛できるのがマネヌゞャヌの付加䟡倀になりたす。 チヌム チヌムは珟代のサヌビス開発の基本単䜍です。そのため、技術組織のマネゞメントの芁玠はどれもチヌムのレむダヌで機胜をしおいる必芁がありたすし、考えるずきにもチヌムを䞻䜓ずしお考えたずきにどのようにそれぞれの芁玠を機胜させるかずいう芖点で考えるこずが倚いです。たた、䞀芋するず個人のものに芋える課題を解決するずきにも、あえお「チヌムのレむダヌでその課題を解決するずしたら」ずいう芖点の眮換をするこずも倚いです。個人に課題が出おいるずきは、その䞀぀䞊のチヌムのレむダヌでなにかの課題を抱えおいる結果であるこずが倚いからです。 組織 組織のレむダヌで考える堎合も、基本はチヌムを䞭心に考えたす。物事が成し遂げられる基本単䜍がチヌムだからです。䞀方、チヌムはそれぞれに状況や成熟床合いが違いたす。耇数のチヌムに察しお䞀定の土台ずなる仕組みや質、成熟床合いを぀くっおいくには組織ずいうレむダヌでのサポヌトが必芁になりたす。チヌムが気持ちよく働き成果を出すこずぞ集䞭できるようにするには組織がどうあればよいかを考えおいくのが組織のレむダヌです。 ここたでで、技術組織のマネゞメントに必芁な぀の芁玠ず぀のレむダヌに぀いお説明をしおきたした。次回は、この芁玠ずレむダヌに察しお゚ンゞニアリングマネヌゞャヌはどういった仕事を担っおいるのかを説明したす。 *1 : 『゚ンゞニアリングマネヌゞャヌのしごず』 ずいう翻蚳曞が8月に出版されたした。 *2 : この点、『゚ンゞニアリングマネヌゞャヌのしごず』は期埅に応えおくれる堎合が倚そうです。 *3 : 曞籍では「ワン・オン・ワン」ずしお玹介されおいたす。
はじめに はじめたしお。゚ス・゚ム・゚スで介護事業者向け経営支揎サヌビス「カむポケ」の開発をしおいる叀川です。今回ぱス・゚ム・゚ス内で行っおいた『プロダクト・レッド・オヌガニれヌション』読曞䌚の取り組みを玹介したす。 ゚ス・゚ム・゚スでの読曞䌚 ゚ス・゚ム・゚スでは読曞䌚が数倚く行われおいたす。チヌム内で実斜しおいるものもあれば、チヌムを跚いだ有志での䌚もありたす。カむポケの開発チヌムは珟圚リモヌト䞭心で業務を行っおいるので、読曞䌚もリモヌトで行っおいたす。本蚘事でご玹介する読曞䌚もリモヌトワヌクが䞻䜓になっおから生たれた読曞䌚です。 『プロダクト・レッド・オヌガニれヌション』ずは 読曞䌚の話に入る前に、『プロダクト・レッド・オヌガニれヌション』以䞋、本曞に぀いお簡単に内容を玹介したす。 pub.jmam.co.jp 本曞はPendoの共同創業者兌CEOであるトッド・オル゜ン氏の著曞で、原著は2020幎、日本語の翻蚳曞は2021幎10月に発売されたした。本曞ではプロダクトを通しお顧客の獲埗ず維持、拡倧を行う組織をプロダクト䞻導型組織ず呌び、そのような組織がどのようにプロダクトからデヌタを収集し、意思決定を行っおいるかに぀いお解説をしおいたす。 私の所属するカむポケの開発チヌム内で、ロヌドマップの䜜成や優先順䜍づけにあたっお、利甚デヌタをこれたで以䞊に重芖しようずいう意識が高たっおいたこずもあり、この曞籍に興味を持ちたした。 『プロダクト・レッド・オヌガニれヌション』を読曞䌚で読むこずになった経緯 本蚘事でご玹介する読曞䌚は、2021幎4月頃から珟圚の圢匏で掻動をしおいたす。゚ンゞニアだけでなく、プロダクトマネヌゞャヌなども参加しお䞀緒に本を読んでいるのが特城です。 読曞䌚で読む本はそれぞれが候補をいく぀か挙げ、最終的には参加者党員の話し合いによっお決めおいたす。明確な遞定基準はないのですが、技術䞀蟺倒の本よりも、゚ンゞニアずプロダクトマネヌゞャヌがそれぞれの立堎で読むこずができ、みんなで色んな話をするきっかけになるような本を遞んでいたす。 そのような経緯で、これたでにこの読曞䌚で読んできた本は以䞋のずおりです。 『プロダクトマネゞメント』 『゚リック・゚ノァンスのドメむン駆動蚭蚈』 䞀郚 『プロダクト・レッド・オヌガニれヌション』 『プロダクトリサヌチ・ルヌルズ』 珟圚読曞䞭 プロダクト系の読曞䌚ず銘打っおいるわけではないのですが、䞊べおみるずプロダクトに関する曞籍が倚いこずに気づきたす。 読曞䌚の進め方 Slack䞊で通話をしながら行っおいたす。進め方は以䞋の通りで、これを1時間ひたすら繰り返したす。 読む範囲数ペヌゞ皋床を決める それぞれが黙々ず読む 読んでいる間に生たれた疑問点や感想をesaに曞き出す それぞれが読み終わったずころで、出おきた疑問点や感想に぀いお議論する すべお話したら次の読む範囲を決める 実際に行われた議論の䟋 以䞊のような進め方で本曞を読んでいる䞭で、実際に行われた議論の䟋を玹介したす。 『プロダクト・レッド・オヌガニれヌション』は、さたざたな芖点から幅広いプロセスに぀いお、非垞に具䜓的に蚘述しおいるため、「自分たちのプロダクトで考えるずどうなるだろう」ずいう問いが生たれやすかったです。 䟋えば無料トラむアルの効果的な事䟋ずしお、ガむド付きのセルフサヌビス䜓隓が玹介されおいたす。トラむアルの䞭でプロダクトの䟡倀を最倧限に感じおもらうため、そこに至る準備や蚭定を省略し、架空のテストデヌタずりォヌクスルヌのプログラムを甚意するこずで、より短い時間で効果を感じおもらえるようになったずいう事䟋が玹介されおいたした。 この事䟋玹介を読んだあず、自分たちのプロダクトであるカむポケのトラむアルに぀いおの議論が生たれたした。介護サヌビスの提䟛は1ヶ月単䜍で行われたす。そのため絊付管理業務がカむポケでどこたで効率的になるのかを実感しおいただくためには、最䜎でも1ヶ月ずいう期間が必芁になりたす。カむポケではこの1ヶ月単䜍で行われる業務が円滑に行えるように蚭蚈をしおいたす。 しかし、前述のりォヌクスルヌの䟋を読んで、カむポケ内で有効性を十分に䌝えられおいないのではないかずいう疑問が生たれたした。そこで、カむポケであればどのようなりォヌクスルヌが考えられるかに぀いお議論したした。 1ヶ月の流れを掎めるようなりォヌクスルヌはどのようなものが考えられるのか。 そのために準備しおおくデヌタは䜕か。 䜿い始めのナヌザヌが぀たずきやすいポむントはどこなのか。 これらを実珟するためにはどのような環境が必芁か。 珟状の仕組みで実珟するためにはどのような蚭蚈が考えられるか。 このような論点に加えお、実際の利甚状況のデヌタ等も参照しながら、゚ンゞニアずプロダクトマネヌゞャヌが立堎を跚いで議論するこずができたした。 読曞䌚を終えおの感想 読曞䌚を通じお、本曞で出おくるアむデアを自分たちのプロダクトだったらどのように適甚できるだろうかず考える機䌚が床々ありたした。 たた、デヌタ分析やメトリクスに基づく意思決定の重芁性が繰り返し説明されおいたこずも印象に残りたした。業務の䞭でもメトリクスの敎備や振り返りを進めおいたずころだったので背䞭を抌しおもらえたような気がしたす。 以䞋では、私の感想だけでなく、読曞䌚の他の参加者の感想も玹介したす。 プロダクトマネヌゞャヌの感想 「正しいもの」を䜜るためにデヌタを掻甚するこず、プロダクトチヌムずカスタマヌサクセスチヌムの連携、䟡倀の無い機胜は捚おるなど、党䜓的に取り組み始めたこずや今埌やりたいず思っおいるこずに関連した内容が倚く刺さる本だった。 顧客の獲埗からプロダクトの改善、戊略の立案からプロダクトオプスの郚分たで幅広い芳点で曞かれおいたので、今埌のガむド的に䜿っおいけるず思った。 ゚ンゞニアの感想 顧客満足床やNPSずいったよく目にする指暙に぀いお、それを利甚する文脈・目的を含めお説明されおいお、圹に立った。 プロダクトを改善しおいくための仕組みをプロダクト自䜓に色々ず組み蟌んでいくのがよいずいう話が倚々あり、そのようなこずを行おうずしおいくず、システム開発の仕方にも倉化が出おくるのではないかず感じた。 終わりに 珟圚読曞䌚では『プロダクトリサヌチ・ルヌルズ』を読んでいたす。読曞䌚のesaやSlackから興味を持っおもらい、新しいメンバヌも加わりたした。単玔に参加者が増えただけでなく、カむポケではないプロダクトを担圓しおる゚ンゞニアや別チヌムのプロダクトマネヌゞャヌが参加しおくれるようになりたした。 このような読曞䌚だけでなく、゚ス・゚ム・゚スでは普段からプロダクトマネヌゞャヌず゚ンゞニアが近い距離で働いおいたす。圹割によっお壁を䜜るこずなく、共に取り組みながらより良いプロダクトを提䟛できるよう努力しおいきたす。
医療・介護・ヘルスケア・シニアラむフの4぀の領域で高霢瀟䌚に適した情報むンフラを構築しおいる株匏䌚瀟゚ス・゚ム・゚スのAnalytics&Innovation掚進郚 以䞋、A&I掚進郚でデヌタ分析基盀開発を担圓しおいる長谷川です。 A&I掚進郚ぱス・゚ム・゚ス瀟内のデヌタを暪断的に収集し、デヌタの分析や加工から、デヌタに基づく斜策たでを行う郚門で、珟圚は介護事業者向け経営支揎サヌビスである「カむポケ」や、介護職向け求人情報サヌビスである「カむゎゞョブ」のデヌタ分析やレコメンドシステムの開発を行っおいたす。 ゚ス・゚ム・゚スは倚くのサヌビスでAWSを採甚しおおり、A&I掚進郚においおもAWSのマネヌゞドな機胜を掻甚しおデヌタ分析やサヌビス開発を行っおいたす。 A&I掚進郚ずは ゚ス・゚ム・゚スは䞻に医療・介護領域を事業のドメむンずしおいたすが、それらのうち特に介護領域は劎働集玄型の事業が倚く、産業デヌタ掻甚があたり進んでいないのが珟状です。 ここ数幎で介護絊付費は10兆円を超え、囜家予算のおよそ1/10を占めるほどにたで膚らんでいたすが、日本の少子高霢化は今埌も進んでゆく可胜性が非垞に高く、 2065幎には65歳以䞊の高霢者が党人口の4割近くになるずも予想されおいたす。 高霢化に䌎い医療や介護の需芁が増倧する䞀方で、生産幎霢人口の枛少により、これらのサヌビスを支える医療・介護埓事者の䞍足が深刻な課題ずなっおいたす。これにより、今埌質の高い医療・介護サヌビスの提䟛が難しくなるず予想されたす。 ゚ス・゚ム・゚スは、解決すべき重芁な瀟䌚課題の1぀ずしお「質の高い医療・介護サヌビスの提䟛が困難になる」ずいう問題を捉えおおり、A&I掚進郚はその䞭でデヌタ分析を利甚した介護領域ぞの貢献を掚し進めるために立ち䞊げられた事業郚です。 暪断デヌタ分析するための環境づくり ゚ス・゚ム・゚スには介護・医療領域の埓業者ず事業所ずのマッチングを業務領域ずするキャリア事業郚や、SaaS型の「カむポケ」など、介護・医療領域のデヌタが倚く蓄積されおいたすが、個々のサヌビスごずにデヌタが分断されおおり、蓄積されたデヌタが最倧限に掻甚されおいるずは蚀い難い状態でした。 A&I掚進郚ぱス・゚ム・゚スでのデヌタ掻甚を抌し進めるべく、各サヌビスのデヌタを暪断的に収集、安党にアクセスできる仕組みず、個人情報を匿名化したうえで配垃できるデヌタ分析環境をAWS䞊に構築したした。 この仕組みはA&Iが䞻ずしおデヌタ分析を行い぀぀、゚ス・゚ム・゚スの瀟員が垌望すれば分析環境にアクセスできる仕組みも同時に提䟛しおきたしたが、なかなか掻甚が進みたせんでした。 「デヌタの民䞻化」の誀解 デヌタ掻甚が進たなかった理由ずしお、「デヌタ民䞻化」ずいう蚀葉ぞの誀解があったず思いたす。 我々は「事業暪断でデヌタを集めお䞀元管理するこず」ができ「垌望すれば誰もが分析環境にアクセスできる仕組み」を提䟛できれば、デヌタ゚ンゞニアやアナリスト以倖の瀟員が自䞻的にデヌタにアクセスしお分析するようになるず考え、それを称しお「デヌタの民䞻化」ず捉えおいたした。 しかしながらこれは完党に誀った解釈で、デヌタの管理や環境を甚意するのはあくたで手段であり、本来は「誰もが容易に集めたデヌタにアクセスし、分析や意思決定を行える文化を醞成するこず」だったのですが、この芖点が完党に抜け挏れおいたのです。 デヌタ掻甚が捗らなかった理由 私ぱス・゚ム・゚スに入瀟するたではWEB゚ンゞニアずしおビッグデヌタ゜リュヌションの開発・運甚に携わっおきたした。 そのためマヌケタヌやアナリスト業務に぀いお深い理解を持っおおらず、逆にSQLやビッグデヌタ基盀などの知識・経隓を有しおいたした。これが誀解を生む芁因の䞀぀でした。 SQLはWEB゚ンゞニアのほが共通蚀語のようなものなので、欲しいデヌタの入っおるテヌブルをいく぀かJOINしおデヌタを集蚈するこずが圓たり前でしたが、開発以倖の業務ではSQLを䜿わないこずのほうが倚く、SQLクラむアントに接続するこずの障壁が高く、さらにそのうえでSQLを曞くずいうこずはかなり難しいこずでした。 䟋えば毎日所定のフォルダにバッチ凊理でDBのデヌタを集蚈したデむリヌサマリを出力しおいるずしたす。 このサマリを時間別に集蚈したいずなった堎合、バッチ凊理で利甚しおいるテヌブルを特定し、集蚈軞を倉えお正しく動くク゚リを曞く、ずいうこずをからやれず蚀われたら゚ンゞニアでも難しいですが、それをマヌケタヌやアナリストが自分でやるずいうのはかなり難易床が高い業務になりたす。 たた、分析そのものの難しさもデヌタ掻甚が進たなかった理由です。 分析を䟝頌する堎合、䟝頌元も䜕をどう可芖化したいのか、どこのデヌタを䜿えばやりたい分析ができるのかがわからないこずのほうが倧半で「時系列でマヌケットシェアを出したいんです」のような䟝頌が来た堎合、盎近12か月に絞ったシェア率なのか、月次・週次は平均倀なのか、その堎合は移動平均なのか、などのむメヌゞを予め固めたうえでないず可芖化するこずは難しいです。 しかしながら、倧抵の堎合は「おそらくこういったデヌタがあれば䜕かが芋えおくるはず」ずいう䞻芳的なむメヌゞが起点ずなるので、手さぐり状態で可芖化や分析を始め、「デヌタを探す→抜出する→分析しお可芖化する」を繰り返す必芁があり、A&Iの分析環境ではこのサむクルを繰り返すこずに非垞に倚くのコストがかかっおいたした。 課題解決に向けお 課題が芋えおきたので、分析したいこずはあるが解像床を䞊げるこずが難しい事業偎に察し、より高速にデヌタを可芖化し、そのうえでそのうえで倚皮倚様な軞で分析を繰り返すにはどうすればよいかを考えたした。 A&I掚進郚はDWHにRedshiftを採甚しおいるのですが、これたではRedshiftで集蚈したデヌタを䞀床S3に出力し、S3から各事業郚のBIツヌルごずに異なる出力先ぞ出力、必芁に応じおTableauなどのダッシュボヌド曎新を手動で行っおいたした。 これでは最新のデヌタに曎新するにも手動で再取り蟌みが必芁ですし、BIツヌルのビゞュアル曎新にも時間がかかり、最新の状態でKPIを芋盎すこずができたせん。 そこで、各事業郚で利甚しおいるBIツヌルに぀いおはCSVデヌタを提䟛するに留め、新しい分析䟝頌に぀いおは可芖化をすべおQuickSightに集玄するこずに方針を倉曎したした。 QuickSightはAWS䞊のマネヌゞドサヌビスS3、Athena、Redshift、RDSなどをデヌタ゜ヌスずしおWEBブラりザベヌスで可芖化できるBIツヌルで、他のBIツヌルに比べおも閲芧者が最倧$5/月、䜜成者も$24/月幎間契玄なら$18/月ずいう リヌズナブルなコストで利甚できるBIツヌル です。 QuickSightはデヌタ゜ヌスずいう単䜍で可芖化するデヌタを管理しおおり、 ほずんどのAWSのマネヌゞドなリレヌショナルデヌタベヌスに接続可胜 です。 A&I掚進郚では事業デヌタを集蚈しおサマリデヌタを䜜る郚分を共通バッチ化しおいるため、Redshiftには加工されたサマリデヌタの最新版が垞に栌玍されおおり、QuickSightから最新のサマリデヌタに盎接接続できるため、この仕組みを䜿えば可芖化におけるアりトプット速床を最倧化できるこずがわかりたした。 しかしながらプロダクトずしお採甚するためには、A&I分析環境のルヌルに沿ったセキュリティ芁件をクリアする必芁がありたした。 A&Iの分析環境はセキュリティの芳点から特定のIPからのみ接続を蚱可しおおり、䞀般ナヌザヌにはAWSコン゜ヌルも開攟しおいたせん。䞀方でQuickSightはグロヌバルなサヌビスのためAWSコン゜ヌルからログむンする必芁があり、アクセス元IPによる接続制限をかけるこずができたせんでした。 これを解決するためにたずAWS SSOによるIP認蚌を詊みたのですが、AWS SSOを通すず接続元IPがAWSのIPずなっおしたい、正しい接続元IPを取埗するこずができずこの方法も利甚できたせんでした。 そこでフロントにIP制限を蚭けたKeycloakを配眮し、認蚌をkeycloak経由ずするこずで接続元IPに絞ったうえでQuickSightにアクセスする手法を採甚したした。 QuickSight導入により、Redshift䞊の最新のデヌタ゜ヌスに即座にアクセスしブラりザで最新のKPIを確認出来るようになりたした。 たたダッシュボヌドを芋ながら「この軞を深掘りしたい」「別の軞で集蚈したい」ずいう垌望に察しおその堎で曎新しその結果を共有できるようになり、䞀番の課題であった「倚様な軞をすぐに可芖化しお分析」するこずができるようになりたした。 QuickSight導入埌 QuickSight導入埌、可芖化案件の質が倧きく向䞊したした。 䟋えばコヌルセンタヌの可芖化案件では、これたではダッシュボヌド曎新の煩雑さからダッシュボヌドの元デヌタをExcelで盎接集蚈し、ダッシュボヌド曎新が行われない問題がありたしたが、今ではQuickSight䞊で日々のKPIを远うようになっおいたす。 たたQuickSightはSPICEずいうむンメモリDBを利甚しおいるためデヌタ集蚈速床が向䞊し、Excel集蚈では限界だったデヌタの可芖化なども可胜になりたした。 すべおがAWSのマネヌゞドな環境に収たった結果、今たではデヌタ゚ンゞニアがデヌタ集蚈し、デヌタアナリストが可芖化を行うずいうように、暗黙的に業務が分担されおいたしたが、デヌタ゚ンゞニアがデヌタ集蚈からボヌド䜜成たで行うようになり、メンバヌの業務スキルの幅が広がるずいう、圓初想定しおいなかった良いフィヌドバックも生たれたした。 昚幎9月に本栌導入した埌、これたでに60以䞊の可芖化を行い、うち40以䞊のダッシュボヌドが今でも掻甚されおいたす。 今埌の課題 QuickSight導入により分析・可芖化の速床を栌段に改善でき、A&I事業郚ず事業担圓者双方が、デヌタの解像床を揃えながら分析を繰り返すこずができるようになったこずは「デヌタ民䞻化」の倧きな䞀歩だずいえたす。 ただしこれらのダッシュボヌド䜜成はデヌタ゚ンゞニア、デヌタアナリストが行うこずがただただ倚く、本来のデヌタ民䞻化である「瀟員誰もが独自に分析を行い、意思決定できる文化の醞成」たで及んでいたせん。 しかしながら今回QuickSightを導入したこずで「䟿利そうだからやっおみたい」ずいう土壌ができ、このムヌドを維持しながらデヌタ分析に参加しおもらうこずが今埌の課題ず考えおいたす。 たた技術的には、QuickSightには異垞怜知や未来予枬などのむンサむト機胜であったり、SageMakerで䜜成した独自モデルず統合できるなどML機胜が豊富に備わっおいたすが、これらの機胜に぀いおも十分に掻甚できおいないため、ゆくゆくはAI機胜を掻甚したダッシュボヌド開発も進めおいきたいず思いたす。
゚ス・゚ム・゚ス テックブログ運営の小林ず暜本です。今回の蚘事は 技術掚進グルヌプ長に聞いおみた・前線 「党瀟暪断の技術アドバむザヌ」 の埌線ずなりたす。 光宗朋宏 Tomohiro Mitsumune -技術掚進グルヌプ グルヌプ長 Ex. DeNA 面接においおどういうこずを意識されおいるのでしょうか 四぀目の質問です。光宗さんぱンゞニアの方の技術面接を担圓されるこずが倚いず思いたすが、面接の際にどんなこずを意識しおいるのか教えおください。 自分も面接時に、光宗さんに技術面接を担圓いただいたのですが、今たでの仕事に぀いお突っ蟌んで聞かれた芚えがありたす...(笑)。 もちろん先方の経歎は事前に拝芋しおいるのですが、「話を組み立おる胜力」は特に重芖しおおり、そこをチェックできるような面接を心がけおいたす。 具䜓的には、ご自身の経歎を自由䜜文圢匏で喋っおいただくようにしおいたす。 僕がいっぱい喋っおしたうずなんだか誘導尋問のようになっおしたうので、䟋えば「今たでキャリアの䞭で䞀番倧倉だった仕事はなんですか」ず投げかけおみお、聞かれたこずに察しおどうやっお話を組み立おおいくのかなずいう点を芋おいたす。 ゚ンゞニアっお「難しい課題に察しおロゞックを組んで解決するスキル」ず同じくらい「組み立おたロゞックを他人に説明するスキル」が倧事だず僕は思っおいたす。 なので、自分は面接䞭になるべく喋らないこずを目暙にしたりしお、その蟺りのスキルを芋るようにしおいたすね。 ずなるず、光宗さんが面接でいっぱい喋っおしたう時は候補者さんがうたく話を組み立おられなかったりで、お芋送りずなっおしたうパタヌンが倚いのでしょうか ゚ンゞニア3〜4幎目のいわゆるポテンシャル枠の方に察しおは、話しおいる䞭でヒントを出したりするこずもありたすが、゚ンゞニア15幎目のベテランの方にはそれ盞応の期埅倀があるので、そういったヒントを出すこずはあたりしないですね。なので、僕がいっぱい喋ったこずがお芋送りの基準になるかどうかは、先方に察する期埅倀によっお倉わっおきたすね。 なるほど、こちらの問いかけに察するアりトプットの質でレベル感だったりを枬っおいるのですね。 はい。これたでの面接官の経隓ずしお、䞀時間ずいう時間の䞭で盞手のこずをより深く知るには「盞手に倚く喋っおもらう」方針は間違っおいないず思っおいたす。 面接時に意識しおいるこずずしおは、「盞手に倚く喋っおもらうこず」ずいうこずになるんですね。 ゚ンゞニアずしおステップアップしおきた方法は 最埌の質問です。ベタですが、今たで゚ンゞニアずしお働かれおきた䞭で、どうやっお様々な壁や修矅堎を乗り越えおステップアップしおきたのかずいうずころをお聞きしたいです。 どうやっおステップアップしお来たかず蚀われるず、自分で狙っおキャリアを築いおきたわけではないので偶然なずころがありたす。 過去に3回転職しおきた䞭では、結局今たで自分がやっおきたこずの延長戊だず面癜くないので「自分の手に負えないこずをやりたい」ずか、「明らかにレベルの高そうなずころに行きたい」「ハヌドルがあるずころに行きたい」などのマむンドを持぀ようにしおいたした。そうするず壁ずいうかチャレンゞみたいなこずが自然ずいっぱい出おくるので、それをその時々で乗り越えられるように努力しおきたしたね。 転職歎的なずころでいうず、䞀瀟目がメヌカヌ系で二瀟目が倧手toCのWeb䌁業でした。その時の瀟内の颚朮ずしお、新芏事業を立おたり別の䌚瀟を子䌚瀟化したりするものがありたしお、その流れで新芏事業ずしお立ち䞊げるWebサむトの開発を垌望しお入ったんですね。 チヌムにぱンゞニアが僕䞀人、デザむナヌが䞀人、そしおPMずしお起案者が䞀人いたしお、起案者のやりたいこず、実珟したいこずをヒアリングした䞊で圓時の競合サヌビスを片っ端から調べたした。 人気だった他瀟サヌビスのデザむンをベヌスにしようずいうこずになり、デザむン面はデザむナヌず協力しお考え、それ以倖のサヌビスの立ち䞊げからは僕䞀人でやっおいたした。サヌバヌの知識は倧孊〜倧孊院時代に研究宀のLinuxサヌバヌの管理者を奜きでやっおいたり、圓時は自宅サヌバヌが流行っおいた時代でその流行に乗っかっおいたりしたので、わりかしそこら蟺は埗意だったので進められたした。 その時゚ンゞニア1人でやり遂げられたのは、自分が持っおいた趣味嗜奜ず仕事がたたたたフィットしおうたくいっただけなので、狙っおやったかず蚀われるず党く狙っおいなかったです。 「手に負えないこずをやりたい」ず思っお進んでみたら、良い方に進んだようです。なのでステップアップずいうか、自分を成長させるためにあえお「手に負えない」珟堎や環境に飛び蟌んできたず思いたす。 かなりストむックですね...。自分のできるこず/できないこずの線匕きをした䞊で、できないこずをできるようになりたいずいう姿勢ですよね。 できるようになりたい、はちょっずかっこよく蚀い過ぎですね(笑)。 単に飜き性なんだず思いたす。同じこずをやり続けるず飜きるだけです。 倧䜓䜕幎くらいで飜きが来るのですか 倧䜓3-5幎ですね。䞀般的な゚ンゞニアの転職サむクルず䞀緒です。 なるほど...(笑)。 新芏事業立ち䞊げのWebサむト開発を垌望し入瀟され、そこからどのようなキャリアを進んで行ったのでしょうか 新芏事業のサヌビスは無事にロヌンチされお、瀟内の評刀もよかったです。瀟内的な知名床ず評䟡はこれがきっかけで生たれたんじゃないかなず思いたす。 ロヌンチ埌の二幎半くらいはそのサヌビスの開発ず運甚を諞々、サヌバヌ監芖以倖は基本䞀人でやっおいたした。 その二幎くらいの実瞟を評䟡しおくれる人から、子䌚瀟の開発郚長やらないみたいな話をいただいお、二幎以䞊やっおいお流石にやるこずがなくなっおきおいたので、匕き継ぎ資料を䜜っお子䌚瀟に開発郚長ずしお移籍したした。 その時が初めおのマネヌゞャヌ職だったのでしょうか そうですね、初めおです。 なるほど。初めおマネヌゞャヌをご経隓される䞭で、倚くの゚ンゞニアが悩みがちな満足のいく゚ンゞニアリングずマネゞメントの䞡立はできおいたのでしょうか できおいたず思いたす。䞀応郚長ずしお、営業だったりデザむンだったりの他郚眲の偉い人が集たる䌚議に出おいたんですが、そこで僕が喋るこずは「こういうこずやりたいです」でした。 結局マネゞメント圹でそういう堎所に出るず、ある皋床の裁量があるのでやりたいこずを自分で決められるんですね。もちろんやりたくないこずもあるんですが。 自分のやりたいこずができるような流れを䜜っおいたので、満足に゚ンゞニアリングができおいたした。 ただ、忙しいっちゃ忙しかったですね...。 確かにお話を聞いおいるず゚ンゞニアの数が足りおいなさそうな感じはしおいたした。 マネゞメントする゚ンゞニアの数は4-5人ず倚くなかったので、マネゞメントで忙しい蚳ではなかったです。 タむミングずか巡り合わせもあるず思うのですが、元々マネゞメント志向はあったのでしょうか 1ミリもなかったです。 ただ、その䌚瀟で働いおいくうちに「この䌚瀟ではマネゞメントスキルがないず、絊料も䞊がらないしやりたいこずができないな」ずいうこずはわかっおきおいたので、マネゞメントをやりたいかやりたくないかは眮いおおいお、やった方が埗になるなず考えたした。 長い目で芋おも、コヌドも曞けおマネゞメントもできる方が人ずしお匷いんじゃないかず考えおたした。実際楜しくないしあたりやりたくはなかったですが、やっおおいた方がいいず思っおやっおたしたね。 なるほど...。お話を聞く限り゚ンゞニアリングずマネゞメントの䞡立もできおいたように思えるのですが、そのたたそのマネヌゞャ職を続けるずいう遞択はしなかったんですか その䌚瀟に5幎いたんですけど、開発郚長ずしおマネゞメントをやるのに飜きたので転職したのが前職の倧手゜ヌシャルゲヌム䌁業なんです。 飜きるっおいうず蚀葉が悪いですが、向こう3、5幎同じ環境に居続けた堎合ず、違う環境に移動した堎合で䌞び幅がどれだけ違うかずか、モチベヌションを保おるのか、ずかが倧きな理由ですね。 あずは圓時の倧手゜ヌシャルゲヌム䌁業は、どこも有名他瀟ず採甚合戊をやり合っおお、できる゚ンゞニアはそこら蟺のどこかに行くみたいなのが颚朮ずしおあったんですよ。なので、できる゚ンゞニアに囲たれるこずで自分のレベルがどのくらいなのか客芳的にわかるかな、ず期埅しおいたのも倧きいですね。 やっぱりお話を聞いおいるずストむックなずころが垣間芋えるのですが、そんなこずないんですかね...。 うヌん、自分の実力っお他人に評䟡しおもらわないずわからない郚分もあるじゃないですか。そしお、同じ環境に居続けるず、「どう立ち振る舞えば高い評䟡を埗られるのか」がわかっおきおしたいたすし、それは評䟡を受ける䞊でフェアじゃないず思っおいたす。それがストむックなのかはわかりたせん(笑)。 感芚的には、お金を皌いでる䌚瀟がネヌムバリュヌある人をいっぱい採甚する環境っおメゞャヌリヌグっぜくお、そういう憧れみたいなのもありたした。 倧手゜ヌシャルゲヌム䌁業の時に田蟺さんず䞀緒にお仕事されおたんでしたっけ そうです。3幎半ぐらいいお、最初の䞀幎ぐらい田蟺さんず同じチヌムで働いおお、仕事内容ずしおぱス・゚ム・゚スにおける技術掚進グルヌプみたいなずころで、僕ず田蟺さんは暪䞲で開発効率改善のようなこずをしおいたした。 前職から既に暪断的にご掻躍されおきたんですね。゚ス・゚ム・゚スに入っおこられたのは田蟺さんが゚ス・゚ム・゚スに入られおからなんですか 田蟺さんが゚ス・゚ム・゚スに転職しおから、1幎半埌ぐらいに入瀟しおたす。ずっず誘われおはいたしたが、少し時間が空いおたすね。その時は、゚ス・゚ム・゚スも䞀぀の遞択肢ずしお考えおいお、他にもいろんな䌚瀟の話を聞き぀぀転職掻動をしおいお、最終的に゚ス・゚ム・゚スに決めたした。 その時ぱス・゚ム・゚ス䞀本ではなくお、別の䌚瀟の話も聞いおいたんですね。 ですね、いろんな䌚瀟の話を聞いおたした。 そろそろお時間になりたした。本日はありがずうございたした。むンタビュヌずいう名目でしたが、色々ずスケヌルの倧きい話が聞けお為になる時間を過ごさせおもらいたした キャリアの話は意図しおこのキャリアに進んだわけではないので、あんたり参考にならないかもしれたせん。ただ、迷ったら面癜そうな道を遞んできたのでそれが吉ず出おいるかも。遞択をミスっおも死なないですし、売り手垂堎なのでなんずでもなるでしょう、ずいう気持ちでキャリアを遞択しおみお良いず思いたす。 (完) tech.bm-sms.co.jp