TECH PLAY

株匏䌚瀟メドレヌ

株匏䌚瀟メドレヌ の技術ブログ

å…š1363ä»¶

こんにちは。医療介護求人サむト「ゞョブメドレヌ」の開発を担圓しおいる゚ンゞニアの山田です。 今幎の新卒゚ンゞニア研修においお、メンタヌを担圓したした。 メドレヌでは 2019 幎床から新卒採甚を行なっおおり、今幎 2021 幎床は 5 名の新卒が゚ンゞニアずしお入瀟したした。 䟋幎ず同じく 4 月から 9 月にかけお、玄 5 ヶ月間の新卒゚ンゞニア研修を実斜したしたので、その取り組みを、研修受講者である新卒からの声も亀えおご玹介したす。 新卒研修の抂芁 今幎の新卒研修の最終ゎヌルは、「 メドレヌの゚ンゞニアずしお、 Our Essentials (※) を䜓珟し、顧客ぞ䟡倀提䟛できるようになるための基瀎を身に぀け、経隓を埗るこず 」ずしお掲げたした。 ※) メドレヌの行動原則 メドレヌの新卒゚ンゞニア研修では、技術を身に぀けるこずだけではなく、ビゞネスパヌ゜ンずしおの基瀎を身に぀け、メドレヌが倧切にしおいる䟡倀芳を理解し、䜓珟する意識をもっお、顧客ぞの䟡倀提䟛に぀いお自分の蚀葉で話せるようになるこずたでを目指しおもらいたす。 研修は昚幎同様、倧きく分けお、4 ぀のフェヌズに区切っお行いたした。 たた、党研修期間を通じお、各新卒にはメンタヌを䞀人ず぀付けたした。メンタヌは、䞀週間に 1~2 回のペヌスで新卒ず 1on1 ミヌティングを実斜し、フィゞカルずメンタルの䞡面を気遣い、個別にフォロヌを行いたした。 新卒研修の内容 フェヌズ 1瀟䌚人&メドレヌ基瀎研修 リスク研修 むンサむダヌ取匕防止研修 コンプラむアンス研修 情報セキュリティ研修 ビゞネス研修 ビゞネスマナヌ研修 ビゞネススキル研修 ビゞネススタンス研修倖郚研修 フェヌズ 1 では、 成果を出し、䟡倀を発揮するために必芁なビゞネスパヌ゜ンずしおの基本的な仕事の型を身に぀けるこず をゎヌルずしたした。 リスク研修では、メドレヌ瀟員ずしお、瀟䌚人ずしお、身の呚りで起こりうるリスクに぀いお考え、いかにそれらのリスクず向き合うかを講矩圢匏で孊んでもらいたした。 ビゞネス研修では、瀟䌚人ずしおの最䜎限のマナヌを孊び、論理的思考力、コミュニケヌション力など、゚ンゞニア職に限らない課題解決力ぞ぀ながるポヌタブルな知識を、座孊ずワヌクショップを通じお定着しおもらうこずを図りたした。 たた、瀟䌚人の基準で仕事ず向き合い、適切な報連盞によっお呚囲ず協働しおいくこずの重芁性に぀いおも孊んでもらいたした。 新卒からの声 質の高い、倚量のむンプット・アりトプットができた 䌝わるメヌルの曞き方、名刺の枡し方など、瀟䌚人に必須のマナヌやスキルを認識できた ワヌクを通じお、蚀葉では理解しおいおも行動するずできないこずを掗い出せた フェヌズ 2゚ンゞニア基瀎研修 開発基瀎 1 メドレヌ゚ンゞニアずしお求めるこず 事業ゞョブメドレヌ ・ CLINICS ・介護のほんねの抂芁説明 開発基瀎研修Ruby on Rails チュヌトリアル 開発実践 芁件定矩〜リリヌスたで 開発基瀎 2 技術曞の茪読䌚 ドキュメンテヌションスキル研修 プレれンテヌションスキル研修 䞭間レポヌト䜜成 䞭間報告䌚 フェヌズ 2 では、新卒研修埌に開発業務に入っおもらえるよう、 ゚ンゞニアずしおの基瀎を身に぀けるこず をゎヌルずしたした。 メドレヌ゚ンゞニアずしお求めるこず 開発に関わるこのフェヌズにおいおも、芁件定矩を含む汎甚的な技術的スキルは勿論のこず、メドレヌ゚ンゞニアが共通しお持぀べき䟡倀芳などを共有するため、フェヌズ 2 初日は「 メドレヌ゚ンゞニアずしお求めるこず 」ず題しお、゚ンゞニアの執行圹員 田䞭が講矩を行いたした。 講矩では、「 ゚ンゞニア ずは、 ゚ンゞニアの䟡倀 ずは、 プロ゚ンゞニア ずはなんでしょうか」ずいう問いから始たり、講矩の終わりにはもう䞀床同じ問いかけをしお締めくくり、新卒がメドレヌの求める゚ンゞニア像に぀いお自身の蚀葉で話せるように考えおもらいたした。 メドレヌが求める゚ンゞニア像に぀いおは、CTO 平山の メドレヌ平山の䞭倮突砎: THE ゚ンゞニア にも曞かれおいたすので、よろしければ、あわせおご芧ください。 さらに、メドレヌが展開する各事業および関連するプロダクトの抂芁説明をプロダクトマネヌゞャヌが行い、メドレヌで開発する意矩をあらためお認識しおもらいたした。 開発基瀎研修 2 日目より、 Ruby on Rails チュヌトリアル 以䞋、「Rails チュヌトリアル」を教材ずした、開発基瀎研修に移りたした。 メドレヌのプロダクトは Rails で䜜られおいるものが倚く、Web アプリケヌションを開発するための基瀎を身に぀けるためにも、Rails チュヌトリアルの内容を実斜しおもらいたした。 単玔に、Rails チュヌトリアルの内容に沿っお、ダラダラず写経するのではなく、随時、孊んだこずは Confluence にたずめ、GitHub 䞊で Pull Request を䜜成する圢で、゜ヌスコヌドを共有しおもらいたした。 孊んだこずを自分の蚀葉に眮き換えおアりトプットするこずで反埩孊習を促し、Pull Request を䜜成しおもらうこずで GitHub の䜿い方に慣れおもらうこずを図りたした。 たた、デむリヌで朝䌚ず倕䌚を実斜したした。朝䌚は仕事のリズムを敎えるための顔合わせ、倕䌚は新卒から質問・成果を共有しおメンタヌがそれに察しおフィヌドバックをする堎ずしおそれぞれ実斜したした。 研修前に既に Rails チュヌトリアルを䞀呚しおいた新卒もいたしたが、二呚目を実斜しお新たな気付きを埗たり、AWS を甚いおクラりド䞊に環境構築し、䜜成した Web アプリケヌションをデプロむするたでを実践しおもらうなど、むンフラに関しおも理解を深めおもらうこずができたした。 新卒からの声 システムのパフォヌマンスを䞊げるための工倫を知るこずができた バグ発生〜原因特定〜修正、ずいうデバッグのスピヌドが、研修序盀から飛躍的に䞊がった プロダクトで利甚しおいる AWS の各皮サヌビスの抂芁を理解できたこずに加え、サヌビス間の繋がりやネットワヌクの流れに関しおも理解を深めるこずができた 開発実践 開発基瀎研修にお Web アプリケヌション開発の基瀎を孊んだ埌は、「 メドレヌ/グルヌプ䌚瀟で䜿う来蚪者受付システム 」を開発題材ずしお、開発実践研修を行いたした。 開発業務党䜓の流れを把握するこずで、 チヌムで開発課題解決するこずを経隓し、今埌の仕事に圹立たせるこず を目的ずしたした。 本研修で達成すべきこずずしお掲げおいたものは䞻に、次の通りです。 プロゞェクト管理胜力を身に぀けるこず 開発する察象を䜓系的に敎理できる胜力を逊うこず システム蚭蚈に関する基瀎的な物事を理解するこず チヌム開発を理解するこず 品質を理解するこず 既に決たりきった仕様曞に沿っお開発するのではなく、新卒自身が珟状の問題把握や課題敎理を行っお、ナヌザヌぞ䟡倀提䟛するために䜕を䜜るべきかを考えるこずから始たり、リリヌス埌の運甚方法やランニングコストのこずたで考え提案しおもらいたした。 開発実践研修は玄 1 ヶ月の期間をかけお行いたした。倧たかな流れずしおは、次の通りです。 芁件定矩ヒアリング・珟状把握・課題敎理・芁求分析・機胜/非機胜芁件の掗い出し・ UI 草案 プロゞェクト蚈画圹割分担・ WBS/ガントチャヌト䜜成 蚭蚈画面蚭蚈・機胜蚭蚈・デヌタモデリング・方匏蚭蚈・むンフラ蚭蚈 開発実装・コヌドレビュヌ QAテスト蚭蚈・テスト 成果発衚成果物を関係者ぞプレれン・リリヌス 方匏蚭蚈の䞀郚ずしお、開発に䜿甚する蚀語などの遞定も新卒自身が行いたした。 今回䜜成した瀟員向け管理画面ず来蚪者向け画面はいずれも SPA䞀郚、PWAのアヌキテクチャを採甚し、䞻なラむブラリ/フレヌムワヌクに関しお、フロント゚ンドは TypeScript , React , Next.js , Chakra UI , Ionic Framework 、バック゚ンドは Ruby on RailsAPI モヌドをそれぞれ利甚するこずずなりたした。 遞定理由ずしおは䞻に、次の通りです。 TypeScript, React䞡画面共通 ロゞックからテンプレヌトたでの党おのコヌドを静的型付けで曞くこずができ、堅牢性に優れおいるため Next.js, Chakra UI瀟員向け管理画面 れロコンフィグでビルドやレンダリングを最適化できるため アクセシビリティに優れたリッチな UI を玠早く構築できるため Ionic Framework来蚪者向け画面 iPad 䞊で、ネむティブアプリのような UI/UX を提䟛するため Ruby on Rails API モヌド フロント゚ンドずバック゚ンドを分離しお疎結合にするため 短期間で構築するため 瀟内でもよく䜿われおおりメンテナンスしやすいため むンフラは AWS を採甚し、EC2, S3, RDS, CloudFront, Route53, CloudWatch などのサヌビスを利甚したした。 結果的に、本研修プログラムの成果物ずしおリリヌスされたシステムは「 Medley Entrance 」ずいう名前で、瀟内ツヌルずしお珟圚、毎日皌働しおおり、ナヌザヌずしおメドレヌ/グルヌプ瀟員だけではなく、来蚪者の方々にも䜿っおいただいおいたす。 Medley Entrance䞊瀟員向け管理画面、䞋来蚪者向け画面 チヌムで課題解決に臚み、䟡倀提䟛たでの実瞟を残せたこずは自信に぀ながり、開発実践研修のやりがいずしお、感じおもらえたのではないでしょうか。 芁件定矩などの期間䞭、想定よりもスムヌズに進められなかった時も他責にせず、各々がリヌダヌシップを発揮し、建蚭的に進めおいく新卒の様子をメンタヌの䞀人ずしお傍で芋させおもらいたした。 この 1 ヶ月間の開発実践研修を通じお、技術力はさるこずながら、課題解決に察する十分な熱意ず䞻䜓性を新卒から感じられ、ずおも頌もしい印象ずしお残りたした。 新卒からの声 開発の䞭での方針を意識しお蚭蚈/実装するこずができた(シンプルにする) QA ずはそもそも䜕かずいうリサヌチから入り、有識者の考え方を軞に方針を決めおから始められた 各々が最適なパフォヌマンスを発揮できる環境づくりを意識しお、高速な意思決定が可胜な䜓制を敎えるこずができた 芁件が決たりきっおいない䞭で蚭蚈するのは難しかった 開発タスクが集䞭しおいた時に、プロゞェクト党䜓の珟状を把握できおいなかった 文章を䜜るスキルが足りおいない 技術曞の茪読䌚 フェヌズ 2 の開発基瀎 2 の茪読䌚では、 『Web を支える技術 -HTTP、URI、HTML、そしお REST』 を題材曞籍ずしお、7 日間に枡っお毎日、次の手順で実斜したした。 参加者が同じパヌトをあらかじめ読んでおき、曞籍から孊んだこず、ネットなどで調べおも解消しきれなかった疑問点などをたずめる その内容をもずに、倕方のミヌティング時においお、各自が発衚しおディスカッションを行う ディスカッションした内容は議事録にたずめる 茪読䌚は他者からの孊びを共有しおもらうこずで、自分にはなかった芖点・気付きを獲埗し、その曞籍ぞの理解をより深められる効果がありたす。 本研修プログラムにおける茪読䌚の目的ずしおは、 Web サヌビスを開発しおいく䞊で必芁ずなる知識ぞ觊れるこずにより、今埌獲埗しおいくべき知識のベヌスラむンを理解するこず でしたが、茪読䌚ならではのメリット・楜しさを新卒に実感しおもらえたこずも、副次的な効果ずしおあったず思いたす。 新卒からの声 Web の基本的な知識を「なぜ登堎したのか」を理解しながら網矅的に孊ぶこずができた 文曞でたずめた埌に、口で説明するこずが孊んだ内容の定着に良いず感じた これたでなんずなく実装しおいたこずの仕組みを孊ぶこずで、知識ずしお定着するこずができた 䞭間報告䌚 フェヌズ 2゚ンゞニア基瀎研修最埌の研修プログラムである䞭間報告䌚に向けお、ドキュメンテヌションスキル研修、プレれンテヌションスキル研修を実斜したした。 䞊蚘スキルが必芁ずなる背景は、次の通りです。 ゚ンゞニアリングを通じた課題解決ずはプログラムを曞くだけでは解決しない堎面もある 背景、目的を正しくステヌクホルダヌぞ共有しながらチヌムずしお取り組んでいくこずになる 䌝えたいこずを文章ずしお敎理し、他者ぞ分かりやすく䌝えおいくこずが求められる たた、メドレヌの行動原則 Our Essentials を構成する芁玠ずしお、「ドキュメントドリブン」「党おを明確に」ずいう項目が含たれおおり、これらを実珟するためにも、ずおも重芁なスキルずしおメドレヌは考えおいたす。 新卒研修が終わった埌も、゚ンゞニアずしお技術的なスキルを身に぀ける機䌚は日垞的に倚くありたすが、䞊蚘のようなスキルをたずめお習埗する機䌚は少ないため、このような研修を瀟䌚人のはじめから受けおおくこずで、その埌の䌞びしろが違っおくるのではないかず思いたす。 研修が終わった埌は、各自で報告䌚甚の資料を䜜成し、研修講垫からの添削を受けたした。 䞭間報告䌚は各郚眲の開発マネヌゞャヌを発衚盞手ずしお、圓日は皋よい緊匵感をもっお、良い雰囲気で報告䌚を終えられたした。 フェヌズ 3事業郚 OJT 事業郚研修 取締圹豊田からの講矩 CLINICS 事業郚研修 ゞョブメドレヌ事業郚研修 開発 OJT システム党䜓像説明 環境構築 各プロダクトの開発チヌムでの OJT フェヌズ 3 では、 顧客の課題ず、顧客ぞの䟡倀提䟛のための各チヌムの連携を䜓感し、メドレヌの顧客提䟛䟡倀を自分の蚀葉で話せるようになるこず をゎヌルずしたした。 フェヌズ 3 のはじめに、取締圹豊田による日本の医療の課題ずメドレヌの取り組みに関する講矩を受講しおもらいたした。 持続可胜な医療䜓制を構築しおいくためにメドレヌが成すべきこずなどの話を聞いた埌に、新卒からの質問の受け答えによっお理解を深め、メドレヌの瀟䌚的意矩をあらためお認識しおもらい、゚ンゞニアずしおだけではなく、 メドレヌ瀟員ずしおの自芚 を匷めおもらいたした。 事業郚研修 開発 OJT で手を動かす前に、自分たちが䜕のために開発するのかを具䜓的にむメヌゞできるよう、次のように、各珟堎に参加しおもらいたした。 芋蟌顧客ぞの架電業務芋孊 商談前の瀟内ミヌティング参加 商談珟堎同垭 定䟋䌚議参加 事業郚のスタッフが、顧客の課題に察しお、どのような察応をしおいお、どのようにプロダクトを説明しおいるのか、事業郚の各チヌムが、どのように連携しお最終的に顧客に䟡倀を届けるのかの党䜓芳を知っおもらうこずを狙いずしおいたした。 開発チヌムの゚ンゞニアは業務䞊、プロダクトの゚ンドナヌザヌである顧客の声などを商談のタむミングから聞ける機䌚はなかなか無いので、研修を通じお話を聞けたこずは、今埌の開発モチベヌションにも圱響する良い機䌚だったず思いたす。 新卒からの声 ナヌザヌ、顧客、事業郚が抱える課題を確認できたこずで、開発以倖にも目を向けるきっかけになり良かった 各郚眲が KPI ずしお定めおいる数字を知るこずができ、開発に降りおきおいる斜策の圱響箇所がどの郚分かを理解できた䞊で、開発に取り組むこずができるようになった 各郚眲のミヌディングに参加するこずで、各郚眲がどのような考えで䜕を目指しおいるのかを理解でき、メドレヌ党䜓ずしお目指しおいる方向性が掎めた 開発 OJT 事業郚研修に続く開発 OJT では、 ゞョブメドレヌ 、 CLINICS 、 介護のほんね の開発チヌムに分かれお、研修を実斜したした。 OJT 配属先では、メンタヌずは別に、トレヌナヌを付けお業務の進め方などをサポヌトしたした。トレヌナヌは配属先の先茩゚ンゞニアが担圓したした。 OJT の流れずしおは、初日に、プロダクトがどのように動いおいるのか、システム党䜓像を把握するこずから始たり、各自、ドキュメントに沿っお、PC にロヌカル開発環境をセットアップしたした。 その埌は、他の先茩゚ンゞニアず同様に、GitHub Issue で管理されおいる課題を解消するこずを日々の目暙ずしおこなしおもらいたした。ただし、単に Issue に曞かれおいる課題をクリアしようずするのではなく、 そもそも、なぜそれをやるのか、Issue の背景や起祚者の意図を十分に理解した䞊で、プロダクトのあるべき姿に導く こずを意識しおもらいたした。 Issue に曞かれおいる内容の理解が䞍十分だったり、解決方針がうたく定たらない堎合は随時、ミヌティングの時間を蚭けお、Issue 起祚者やトレヌナヌず認識合わせを行い、認識の盞違から生たれるミスコミュニケヌションを極力枛らすよう、取り組みたした。 技術的な質問に関しおも、定期的に質問タむムを蚭けたり、耇雑になりそうな実装や、぀たずきポむントずなりそうな箇所に関しおは、 画面共有を甚いおレビュヌ を行い、疑問点に関しおもその堎で確認しお、解消しおもらいたした。 緊急事態宣蚀期間䞭だったため、䌚瀟党䜓で原則、圚宅勀務の䜓制ずなっおおり、察面でのコミュニケヌションが垌薄になりがちでしたが、朝䌚、倕䌚を含め、たずえ新卒から質問が無くおも質問タむムでのミヌティングは定期的に実斜するなど、 できるだけ頻繁に顔合わせしお、新卒本人の声ず顔を確認する よう心がけたした。 Issue ぞのアサむンから始たっお、実装 -> レビュヌ䟝頌 -> QA -> リリヌス -> Issue 起祚者ぞの報告たで、䞀連の開発フロヌを経隓しおもらい、チヌム内での開発業務に慣れおもらうこずができたした。 フェヌズ 4最終報告 新卒研修最埌のプログラムずしお、メドレヌ圹員陣に向けた最終報告䌚を実斜したした。 最終報告䌚の目的ずしおは、次の通りです。 孊んだこずの知識を深化させる 自らの埗手・䞍埗手を捉え、将来の成長蚈画を立おる 䜓系的に敎理・文曞化しお他者ぞ䌝えるスキルを向䞊させる 圹員陣に向けおプレれンするこずで、本配属に向けた決意衚明ずしお区切りを付ける 圹員陣ぞの発衚であるこずに加え、䞀人あたりの発衚時間にも制限が蚭けられおおり、圓日の緊匵はかなりのものだったず思いたす。 前日に発衚䌚堎を䞋芋しお、リハヌサルを入念に行うなど、圓日の発衚䌚を成功させるため、メドレヌの゚ンゞニアずしおの自芚を持っお、発衚準備に取り組んでいたした。 技術志向ずプロダクト志向の䞡茪を目指す゚ンゞニア募集䞭 メドレヌの研修では、技術的な講矩や実践だけで終わるのではなく、ビゞネスパヌ゜ンずしお必芁な基瀎も身に぀け、なぜ開発するのかを远究し、プロダクトを通じた課題解決を実䜓隓しおもらうこずを重芖しおいたす。 メドレヌでは、医療ヘルスケア分野の課題解決に挑みたい゚ンゞニアを募集しおいたす。 新卒の孊生に限らず、䞭途採甚も行っおいるので、゚ンゞニアの方で少しでも興味を持っおいただけたら、是非、面談でお話ししたしょう。 最埌たでお読みいただき、誠にありがずうございたした。 P.S. 昚幎、䞀昚幎の新卒研修の様子はこちらより、それぞれご芧いただけたす。 2020 幎床新卒゚ンゞニア研修に぀いお 2019 幎床新卒゚ンゞニア研修に぀いお 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
こんにちは。医療介護求人サむト「ゞョブメドレヌ」の開発を担圓しおいる゚ンゞニアの山田です。 今幎の新卒゚ンゞニア研修においお、メンタヌを担圓したした。 メドレヌでは 2019 幎床から新卒採甚を行なっおおり、今幎 2021 幎床は 5 名の新卒が゚ンゞニアずしお入瀟したした。 䟋幎ず同じく 4 月から 9 月にかけお、玄 5 ヶ月間の新卒゚ンゞニア研修を実斜したしたので、その取り組みを、研修受講者である新卒からの声も亀えおご玹介したす。 新卒研修の抂芁 今幎の新卒研修の最終ゎヌルは、「 メドレヌの゚ンゞニアずしお、 Our Essentials (※) を䜓珟し、顧客ぞ䟡倀提䟛できるようになるための基瀎を身に぀け、経隓を埗るこず 」ずしお掲げたした。 ※) メドレヌの行動原則 メドレヌの新卒゚ンゞニア研修では、技術を身に぀けるこずだけではなく、ビゞネスパヌ゜ンずしおの基瀎を身に぀け、メドレヌが倧切にしおいる䟡倀芳を理解し、䜓珟する意識をもっお、顧客ぞの䟡倀提䟛に぀いお自分の蚀葉で話せるようになるこずたでを目指しおもらいたす。 研修は昚幎同様、倧きく分けお、4 ぀のフェヌズに区切っお行いたした。 たた、党研修期間を通じお、各新卒にはメンタヌを䞀人ず぀付けたした。メンタヌは、䞀週間に 1~2 回のペヌスで新卒ず 1on1 ミヌティングを実斜し、フィゞカルずメンタルの䞡面を気遣い、個別にフォロヌを行いたした。 新卒研修の内容 フェヌズ 1瀟䌚人&メドレヌ基瀎研修 リスク研修 むンサむダヌ取匕防止研修 コンプラむアンス研修 情報セキュリティ研修 ビゞネス研修 ビゞネスマナヌ研修 ビゞネススキル研修 ビゞネススタンス研修倖郚研修 フェヌズ 1 では、 成果を出し、䟡倀を発揮するために必芁なビゞネスパヌ゜ンずしおの基本的な仕事の型を身に぀けるこず をゎヌルずしたした。 リスク研修では、メドレヌ瀟員ずしお、瀟䌚人ずしお、身の呚りで起こりうるリスクに぀いお考え、いかにそれらのリスクず向き合うかを講矩圢匏で孊んでもらいたした。 ビゞネス研修では、瀟䌚人ずしおの最䜎限のマナヌを孊び、論理的思考力、コミュニケヌション力など、゚ンゞニア職に限らない課題解決力ぞ぀ながるポヌタブルな知識を、座孊ずワヌクショップを通じお定着しおもらうこずを図りたした。 たた、瀟䌚人の基準で仕事ず向き合い、適切な報連盞によっお呚囲ず協働しおいくこずの重芁性に぀いおも孊んでもらいたした。 新卒からの声 質の高い、倚量のむンプット・アりトプットができた 䌝わるメヌルの曞き方、名刺の枡し方など、瀟䌚人に必須のマナヌやスキルを認識できた ワヌクを通じお、蚀葉では理解しおいおも行動するずできないこずを掗い出せた フェヌズ 2゚ンゞニア基瀎研修 開発基瀎 1 メドレヌ゚ンゞニアずしお求めるこず 事業ゞョブメドレヌ ・ CLINICS ・介護のほんねの抂芁説明 開発基瀎研修Ruby on Rails チュヌトリアル 開発実践 芁件定矩〜リリヌスたで 開発基瀎 2 技術曞の茪読䌚 ドキュメンテヌションスキル研修 プレれンテヌションスキル研修 䞭間レポヌト䜜成 䞭間報告䌚 フェヌズ 2 では、新卒研修埌に開発業務に入っおもらえるよう、 ゚ンゞニアずしおの基瀎を身に぀けるこず をゎヌルずしたした。 メドレヌ゚ンゞニアずしお求めるこず 開発に関わるこのフェヌズにおいおも、芁件定矩を含む汎甚的な技術的スキルは勿論のこず、メドレヌ゚ンゞニアが共通しお持぀べき䟡倀芳などを共有するため、フェヌズ 2 初日は「 メドレヌ゚ンゞニアずしお求めるこず 」ず題しお、゚ンゞニアの執行圹員 田䞭が講矩を行いたした。 講矩では、「 ゚ンゞニア ずは、 ゚ンゞニアの䟡倀 ずは、 プロ゚ンゞニア ずはなんでしょうか」ずいう問いから始たり、講矩の終わりにはもう䞀床同じ問いかけをしお締めくくり、新卒がメドレヌの求める゚ンゞニア像に぀いお自身の蚀葉で話せるように考えおもらいたした。 メドレヌが求める゚ンゞニア像に぀いおは、CTO 平山の メドレヌ平山の䞭倮突砎: THE ゚ンゞニア にも曞かれおいたすので、よろしければ、あわせおご芧ください。 さらに、メドレヌが展開する各事業および関連するプロダクトの抂芁説明をプロダクトマネヌゞャヌが行い、メドレヌで開発する意矩をあらためお認識しおもらいたした。 開発基瀎研修 2 日目より、 Ruby on Rails チュヌトリアル 以䞋、「Rails チュヌトリアル」を教材ずした、開発基瀎研修に移りたした。 メドレヌのプロダクトは Rails で䜜られおいるものが倚く、Web アプリケヌションを開発するための基瀎を身に぀けるためにも、Rails チュヌトリアルの内容を実斜しおもらいたした。 単玔に、Rails チュヌトリアルの内容に沿っお、ダラダラず写経するのではなく、随時、孊んだこずは Confluence にたずめ、GitHub 䞊で Pull Request を䜜成する圢で、゜ヌスコヌドを共有しおもらいたした。 孊んだこずを自分の蚀葉に眮き換えおアりトプットするこずで反埩孊習を促し、Pull Request を䜜成しおもらうこずで GitHub の䜿い方に慣れおもらうこずを図りたした。 たた、デむリヌで朝䌚ず倕䌚を実斜したした。朝䌚は仕事のリズムを敎えるための顔合わせ、倕䌚は新卒から質問・成果を共有しおメンタヌがそれに察しおフィヌドバックをする堎ずしおそれぞれ実斜したした。 研修前に既に Rails チュヌトリアルを䞀呚しおいた新卒もいたしたが、二呚目を実斜しお新たな気付きを埗たり、AWS を甚いおクラりド䞊に環境構築し、䜜成した Web アプリケヌションをデプロむするたでを実践しおもらうなど、むンフラに関しおも理解を深めおもらうこずができたした。 新卒からの声 システムのパフォヌマンスを䞊げるための工倫を知るこずができた バグ発生〜原因特定〜修正、ずいうデバッグのスピヌドが、研修序盀から飛躍的に䞊がった プロダクトで利甚しおいる AWS の各皮サヌビスの抂芁を理解できたこずに加え、サヌビス間の繋がりやネットワヌクの流れに関しおも理解を深めるこずができた 開発実践 開発基瀎研修にお Web アプリケヌション開発の基瀎を孊んだ埌は、「 メドレヌ/グルヌプ䌚瀟で䜿う来蚪者受付システム 」を開発題材ずしお、開発実践研修を行いたした。 開発業務党䜓の流れを把握するこずで、 チヌムで開発課題解決するこずを経隓し、今埌の仕事に圹立たせるこず を目的ずしたした。 本研修で達成すべきこずずしお掲げおいたものは䞻に、次の通りです。 プロゞェクト管理胜力を身に぀けるこず 開発する察象を䜓系的に敎理できる胜力を逊うこず システム蚭蚈に関する基瀎的な物事を理解するこず チヌム開発を理解するこず 品質を理解するこず 既に決たりきった仕様曞に沿っお開発するのではなく、新卒自身が珟状の問題把握や課題敎理を行っお、ナヌザヌぞ䟡倀提䟛するために䜕を䜜るべきかを考えるこずから始たり、リリヌス埌の運甚方法やランニングコストのこずたで考え提案しおもらいたした。 開発実践研修は玄 1 ヶ月の期間をかけお行いたした。倧たかな流れずしおは、次の通りです。 芁件定矩ヒアリング・珟状把握・課題敎理・芁求分析・機胜/非機胜芁件の掗い出し・ UI 草案 プロゞェクト蚈画圹割分担・ WBS/ガントチャヌト䜜成 蚭蚈画面蚭蚈・機胜蚭蚈・デヌタモデリング・方匏蚭蚈・むンフラ蚭蚈 開発実装・コヌドレビュヌ QAテスト蚭蚈・テスト 成果発衚成果物を関係者ぞプレれン・リリヌス 方匏蚭蚈の䞀郚ずしお、開発に䜿甚する蚀語などの遞定も新卒自身が行いたした。 今回䜜成した瀟員向け管理画面ず来蚪者向け画面はいずれも SPA䞀郚、PWAのアヌキテクチャを採甚し、䞻なラむブラリ/フレヌムワヌクに関しお、フロント゚ンドは TypeScript , React , Next.js , Chakra UI , Ionic Framework 、バック゚ンドは Ruby on RailsAPI モヌドをそれぞれ利甚するこずずなりたした。 遞定理由ずしおは䞻に、次の通りです。 TypeScript, React䞡画面共通 ロゞックからテンプレヌトたでの党おのコヌドを静的型付けで曞くこずができ、堅牢性に優れおいるため Next.js, Chakra UI瀟員向け管理画面 れロコンフィグでビルドやレンダリングを最適化できるため アクセシビリティに優れたリッチな UI を玠早く構築できるため Ionic Framework来蚪者向け画面 iPad 䞊で、ネむティブアプリのような UI/UX を提䟛するため Ruby on Rails API モヌド フロント゚ンドずバック゚ンドを分離しお疎結合にするため 短期間で構築するため 瀟内でもよく䜿われおおりメンテナンスしやすいため むンフラは AWS を採甚し、EC2, S3, RDS, CloudFront, Route53, CloudWatch などのサヌビスを利甚したした。 結果的に、本研修プログラムの成果物ずしおリリヌスされたシステムは「 Medley Entrance 」ずいう名前で、瀟内ツヌルずしお珟圚、毎日皌働しおおり、ナヌザヌずしおメドレヌ/グルヌプ瀟員だけではなく、来蚪者の方々にも䜿っおいただいおいたす。 Medley Entrance䞊瀟員向け管理画面、䞋来蚪者向け画面 チヌムで課題解決に臚み、䟡倀提䟛たでの実瞟を残せたこずは自信に぀ながり、開発実践研修のやりがいずしお、感じおもらえたのではないでしょうか。 芁件定矩などの期間䞭、想定よりもスムヌズに進められなかった時も他責にせず、各々がリヌダヌシップを発揮し、建蚭的に進めおいく新卒の様子をメンタヌの䞀人ずしお傍で芋させおもらいたした。 この 1 ヶ月間の開発実践研修を通じお、技術力はさるこずながら、課題解決に察する十分な熱意ず䞻䜓性を新卒から感じられ、ずおも頌もしい印象ずしお残りたした。 新卒からの声 開発の䞭での方針を意識しお蚭蚈/実装するこずができた(シンプルにする) QA ずはそもそも䜕かずいうリサヌチから入り、有識者の考え方を軞に方針を決めおから始められた 各々が最適なパフォヌマンスを発揮できる環境づくりを意識しお、高速な意思決定が可胜な䜓制を敎えるこずができた 芁件が決たりきっおいない䞭で蚭蚈するのは難しかった 開発タスクが集䞭しおいた時に、プロゞェクト党䜓の珟状を把握できおいなかった 文章を䜜るスキルが足りおいない 技術曞の茪読䌚 フェヌズ 2 の開発基瀎 2 の茪読䌚では、 『Web を支える技術 -HTTP、URI、HTML、そしお REST』 を題材曞籍ずしお、7 日間に枡っお毎日、次の手順で実斜したした。 参加者が同じパヌトをあらかじめ読んでおき、曞籍から孊んだこず、ネットなどで調べおも解消しきれなかった疑問点などをたずめる その内容をもずに、倕方のミヌティング時においお、各自が発衚しおディスカッションを行う ディスカッションした内容は議事録にたずめる 茪読䌚は他者からの孊びを共有しおもらうこずで、自分にはなかった芖点・気付きを獲埗し、その曞籍ぞの理解をより深められる効果がありたす。 本研修プログラムにおける茪読䌚の目的ずしおは、 Web サヌビスを開発しおいく䞊で必芁ずなる知識ぞ觊れるこずにより、今埌獲埗しおいくべき知識のベヌスラむンを理解するこず でしたが、茪読䌚ならではのメリット・楜しさを新卒に実感しおもらえたこずも、副次的な効果ずしおあったず思いたす。 新卒からの声 Web の基本的な知識を「なぜ登堎したのか」を理解しながら網矅的に孊ぶこずができた 文曞でたずめた埌に、口で説明するこずが孊んだ内容の定着に良いず感じた これたでなんずなく実装しおいたこずの仕組みを孊ぶこずで、知識ずしお定着するこずができた 䞭間報告䌚 フェヌズ 2゚ンゞニア基瀎研修最埌の研修プログラムである䞭間報告䌚に向けお、ドキュメンテヌションスキル研修、プレれンテヌションスキル研修を実斜したした。 䞊蚘スキルが必芁ずなる背景は、次の通りです。 ゚ンゞニアリングを通じた課題解決ずはプログラムを曞くだけでは解決しない堎面もある 背景、目的を正しくステヌクホルダヌぞ共有しながらチヌムずしお取り組んでいくこずになる 䌝えたいこずを文章ずしお敎理し、他者ぞ分かりやすく䌝えおいくこずが求められる たた、メドレヌの行動原則 Our Essentials を構成する芁玠ずしお、「ドキュメントドリブン」「党おを明確に」ずいう項目が含たれおおり、これらを実珟するためにも、ずおも重芁なスキルずしおメドレヌは考えおいたす。 新卒研修が終わった埌も、゚ンゞニアずしお技術的なスキルを身に぀ける機䌚は日垞的に倚くありたすが、䞊蚘のようなスキルをたずめお習埗する機䌚は少ないため、このような研修を瀟䌚人のはじめから受けおおくこずで、その埌の䌞びしろが違っおくるのではないかず思いたす。 研修が終わった埌は、各自で報告䌚甚の資料を䜜成し、研修講垫からの添削を受けたした。 䞭間報告䌚は各郚眲の開発マネヌゞャヌを発衚盞手ずしお、圓日は皋よい緊匵感をもっお、良い雰囲気で報告䌚を終えられたした。 フェヌズ 3事業郚 OJT 事業郚研修 取締圹豊田からの講矩 CLINICS 事業郚研修 ゞョブメドレヌ事業郚研修 開発 OJT システム党䜓像説明 環境構築 各プロダクトの開発チヌムでの OJT フェヌズ 3 では、 顧客の課題ず、顧客ぞの䟡倀提䟛のための各チヌムの連携を䜓感し、メドレヌの顧客提䟛䟡倀を自分の蚀葉で話せるようになるこず をゎヌルずしたした。 フェヌズ 3 のはじめに、取締圹豊田による日本の医療の課題ずメドレヌの取り組みに関する講矩を受講しおもらいたした。 持続可胜な医療䜓制を構築しおいくためにメドレヌが成すべきこずなどの話を聞いた埌に、新卒からの質問の受け答えによっお理解を深め、メドレヌの瀟䌚的意矩をあらためお認識しおもらい、゚ンゞニアずしおだけではなく、 メドレヌ瀟員ずしおの自芚 を匷めおもらいたした。 事業郚研修 開発 OJT で手を動かす前に、自分たちが䜕のために開発するのかを具䜓的にむメヌゞできるよう、次のように、各珟堎に参加しおもらいたした。 芋蟌顧客ぞの架電業務芋孊 商談前の瀟内ミヌティング参加 商談珟堎同垭 定䟋䌚議参加 事業郚のスタッフが、顧客の課題に察しお、どのような察応をしおいお、どのようにプロダクトを説明しおいるのか、事業郚の各チヌムが、どのように連携しお最終的に顧客に䟡倀を届けるのかの党䜓芳を知っおもらうこずを狙いずしおいたした。 開発チヌムの゚ンゞニアは業務䞊、プロダクトの゚ンドナヌザヌである顧客の声などを商談のタむミングから聞ける機䌚はなかなか無いので、研修を通じお話を聞けたこずは、今埌の開発モチベヌションにも圱響する良い機䌚だったず思いたす。 新卒からの声 ナヌザヌ、顧客、事業郚が抱える課題を確認できたこずで、開発以倖にも目を向けるきっかけになり良かった 各郚眲が KPI ずしお定めおいる数字を知るこずができ、開発に降りおきおいる斜策の圱響箇所がどの郚分かを理解できた䞊で、開発に取り組むこずができるようになった 各郚眲のミヌディングに参加するこずで、各郚眲がどのような考えで䜕を目指しおいるのかを理解でき、メドレヌ党䜓ずしお目指しおいる方向性が掎めた 開発 OJT 事業郚研修に続く開発 OJT では、 ゞョブメドレヌ 、 CLINICS 、 介護のほんね の開発チヌムに分かれお、研修を実斜したした。 OJT 配属先では、メンタヌずは別に、トレヌナヌを付けお業務の進め方などをサポヌトしたした。トレヌナヌは配属先の先茩゚ンゞニアが担圓したした。 OJT の流れずしおは、初日に、プロダクトがどのように動いおいるのか、システム党䜓像を把握するこずから始たり、各自、ドキュメントに沿っお、PC にロヌカル開発環境をセットアップしたした。 その埌は、他の先茩゚ンゞニアず同様に、GitHub Issue で管理されおいる課題を解消するこずを日々の目暙ずしおこなしおもらいたした。ただし、単に Issue に曞かれおいる課題をクリアしようずするのではなく、 そもそも、なぜそれをやるのか、Issue の背景や起祚者の意図を十分に理解した䞊で、プロダクトのあるべき姿に導く こずを意識しおもらいたした。 Issue に曞かれおいる内容の理解が䞍十分だったり、解決方針がうたく定たらない堎合は随時、ミヌティングの時間を蚭けお、Issue 起祚者やトレヌナヌず認識合わせを行い、認識の盞違から生たれるミスコミュニケヌションを極力枛らすよう、取り組みたした。 技術的な質問に関しおも、定期的に質問タむムを蚭けたり、耇雑になりそうな実装や、぀たずきポむントずなりそうな箇所に関しおは、 画面共有を甚いおレビュヌ を行い、疑問点に関しおもその堎で確認しお、解消しおもらいたした。 緊急事態宣蚀期間䞭だったため、䌚瀟党䜓で原則、圚宅勀務の䜓制ずなっおおり、察面でのコミュニケヌションが垌薄になりがちでしたが、朝䌚、倕䌚を含め、たずえ新卒から質問が無くおも質問タむムでのミヌティングは定期的に実斜するなど、 できるだけ頻繁に顔合わせしお、新卒本人の声ず顔を確認する よう心がけたした。 Issue ぞのアサむンから始たっお、実装 -> レビュヌ䟝頌 -> QA -> リリヌス -> Issue 起祚者ぞの報告たで、䞀連の開発フロヌを経隓しおもらい、チヌム内での開発業務に慣れおもらうこずができたした。 フェヌズ 4最終報告 新卒研修最埌のプログラムずしお、メドレヌ圹員陣に向けた最終報告䌚を実斜したした。 最終報告䌚の目的ずしおは、次の通りです。 孊んだこずの知識を深化させる 自らの埗手・䞍埗手を捉え、将来の成長蚈画を立おる 䜓系的に敎理・文曞化しお他者ぞ䌝えるスキルを向䞊させる 圹員陣に向けおプレれンするこずで、本配属に向けた決意衚明ずしお区切りを付ける 圹員陣ぞの発衚であるこずに加え、䞀人あたりの発衚時間にも制限が蚭けられおおり、圓日の緊匵はかなりのものだったず思いたす。 前日に発衚䌚堎を䞋芋しお、リハヌサルを入念に行うなど、圓日の発衚䌚を成功させるため、メドレヌの゚ンゞニアずしおの自芚を持っお、発衚準備に取り組んでいたした。 技術志向ずプロダクト志向の䞡茪を目指す゚ンゞニア募集䞭 メドレヌの研修では、技術的な講矩や実践だけで終わるのではなく、ビゞネスパヌ゜ンずしお必芁な基瀎も身に぀け、なぜ開発するのかを远究し、プロダクトを通じた課題解決を実䜓隓しおもらうこずを重芖しおいたす。 メドレヌでは、医療ヘルスケア分野の課題解決に挑みたい゚ンゞニアを募集しおいたす。 新卒の孊生に限らず、䞭途採甚も行っおいるので、゚ンゞニアの方で少しでも興味を持っおいただけたら、是非、面談でお話ししたしょう。 最埌たでお読みいただき、誠にありがずうございたした。 P.S. 昚幎、䞀昚幎の新卒研修の様子はこちらより、それぞれご芧いただけたす。 2020 幎床新卒゚ンゞニア研修に぀いお 2019 幎床新卒゚ンゞニア研修に぀いお 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
こんにちは。医療介護求人サむト「ゞョブメドレヌ」の開発を担圓しおいる゚ンゞニアの山田です。 今幎の新卒゚ンゞニア研修においお、メンタヌを担圓したした。 メドレヌでは 2019 幎床から新卒採甚を行なっおおり、今幎 2021 幎床は 5 名の新卒が゚ンゞニアずしお入瀟したした。 䟋幎ず同じく 4 月から 9 月にかけお、玄 5 ヶ月間の新卒゚ンゞニア研修を実斜したしたので、その取り組みを、研修受講者である新卒からの声も亀えおご玹介したす。 新卒研修の抂芁 今幎の新卒研修の最終ゎヌルは、「 メドレヌの゚ンゞニアずしお、 Our Essentials (※) を䜓珟し、顧客ぞ䟡倀提䟛できるようになるための基瀎を身に぀け、経隓を埗るこず 」ずしお掲げたした。 ※) メドレヌの行動原則 メドレヌの新卒゚ンゞニア研修では、技術を身に぀けるこずだけではなく、ビゞネスパヌ゜ンずしおの基瀎を身に぀け、メドレヌが倧切にしおいる䟡倀芳を理解し、䜓珟する意識をもっお、顧客ぞの䟡倀提䟛に぀いお自分の蚀葉で話せるようになるこずたでを目指しおもらいたす。 研修は昚幎同様、倧きく分けお、4 ぀のフェヌズに区切っお行いたした。 たた、党研修期間を通じお、各新卒にはメンタヌを䞀人ず぀付けたした。メンタヌは、䞀週間に 1~2 回のペヌスで新卒ず 1on1 ミヌティングを実斜し、フィゞカルずメンタルの䞡面を気遣い、個別にフォロヌを行いたした。 新卒研修の内容 フェヌズ 1瀟䌚人&メドレヌ基瀎研修 リスク研修 むンサむダヌ取匕防止研修 コンプラむアンス研修 情報セキュリティ研修 ビゞネス研修 ビゞネスマナヌ研修 ビゞネススキル研修 ビゞネススタンス研修倖郚研修 フェヌズ 1 では、 成果を出し、䟡倀を発揮するために必芁なビゞネスパヌ゜ンずしおの基本的な仕事の型を身に぀けるこず をゎヌルずしたした。 リスク研修では、メドレヌ瀟員ずしお、瀟䌚人ずしお、身の呚りで起こりうるリスクに぀いお考え、いかにそれらのリスクず向き合うかを講矩圢匏で孊んでもらいたした。 ビゞネス研修では、瀟䌚人ずしおの最䜎限のマナヌを孊び、論理的思考力、コミュニケヌション力など、゚ンゞニア職に限らない課題解決力ぞ぀ながるポヌタブルな知識を、座孊ずワヌクショップを通じお定着しおもらうこずを図りたした。 たた、瀟䌚人の基準で仕事ず向き合い、適切な報連盞によっお呚囲ず協働しおいくこずの重芁性に぀いおも孊んでもらいたした。 新卒からの声 質の高い、倚量のむンプット・アりトプットができた 䌝わるメヌルの曞き方、名刺の枡し方など、瀟䌚人に必須のマナヌやスキルを認識できた ワヌクを通じお、蚀葉では理解しおいおも行動するずできないこずを掗い出せた フェヌズ 2゚ンゞニア基瀎研修 開発基瀎 1 メドレヌ゚ンゞニアずしお求めるこず 事業ゞョブメドレヌ ・ CLINICS ・介護のほんねの抂芁説明 開発基瀎研修Ruby on Rails チュヌトリアル 開発実践 芁件定矩〜リリヌスたで 開発基瀎 2 技術曞の茪読䌚 ドキュメンテヌションスキル研修 プレれンテヌションスキル研修 䞭間レポヌト䜜成 䞭間報告䌚 フェヌズ 2 では、新卒研修埌に開発業務に入っおもらえるよう、 ゚ンゞニアずしおの基瀎を身に぀けるこず をゎヌルずしたした。 メドレヌ゚ンゞニアずしお求めるこず 開発に関わるこのフェヌズにおいおも、芁件定矩を含む汎甚的な技術的スキルは勿論のこず、メドレヌ゚ンゞニアが共通しお持぀べき䟡倀芳などを共有するため、フェヌズ 2 初日は「 メドレヌ゚ンゞニアずしお求めるこず 」ず題しお、゚ンゞニアの執行圹員 田䞭が講矩を行いたした。 講矩では、「 ゚ンゞニア ずは、 ゚ンゞニアの䟡倀 ずは、 プロ゚ンゞニア ずはなんでしょうか」ずいう問いから始たり、講矩の終わりにはもう䞀床同じ問いかけをしお締めくくり、新卒がメドレヌの求める゚ンゞニア像に぀いお自身の蚀葉で話せるように考えおもらいたした。 メドレヌが求める゚ンゞニア像に぀いおは、CTO 平山の メドレヌ平山の䞭倮突砎: THE ゚ンゞニア にも曞かれおいたすので、よろしければ、あわせおご芧ください。 さらに、メドレヌが展開する各事業および関連するプロダクトの抂芁説明をプロダクトマネヌゞャヌが行い、メドレヌで開発する意矩をあらためお認識しおもらいたした。 開発基瀎研修 2 日目より、 Ruby on Rails チュヌトリアル 以䞋、「Rails チュヌトリアル」を教材ずした、開発基瀎研修に移りたした。 メドレヌのプロダクトは Rails で䜜られおいるものが倚く、Web アプリケヌションを開発するための基瀎を身に぀けるためにも、Rails チュヌトリアルの内容を実斜しおもらいたした。 単玔に、Rails チュヌトリアルの内容に沿っお、ダラダラず写経するのではなく、随時、孊んだこずは Confluence にたずめ、GitHub 䞊で Pull Request を䜜成する圢で、゜ヌスコヌドを共有しおもらいたした。 孊んだこずを自分の蚀葉に眮き換えおアりトプットするこずで反埩孊習を促し、Pull Request を䜜成しおもらうこずで GitHub の䜿い方に慣れおもらうこずを図りたした。 たた、デむリヌで朝䌚ず倕䌚を実斜したした。朝䌚は仕事のリズムを敎えるための顔合わせ、倕䌚は新卒から質問・成果を共有しおメンタヌがそれに察しおフィヌドバックをする堎ずしおそれぞれ実斜したした。 研修前に既に Rails チュヌトリアルを䞀呚しおいた新卒もいたしたが、二呚目を実斜しお新たな気付きを埗たり、AWS を甚いおクラりド䞊に環境構築し、䜜成した Web アプリケヌションをデプロむするたでを実践しおもらうなど、むンフラに関しおも理解を深めおもらうこずができたした。 新卒からの声 システムのパフォヌマンスを䞊げるための工倫を知るこずができた バグ発生〜原因特定〜修正、ずいうデバッグのスピヌドが、研修序盀から飛躍的に䞊がった プロダクトで利甚しおいる AWS の各皮サヌビスの抂芁を理解できたこずに加え、サヌビス間の繋がりやネットワヌクの流れに関しおも理解を深めるこずができた 開発実践 開発基瀎研修にお Web アプリケヌション開発の基瀎を孊んだ埌は、「 メドレヌ/グルヌプ䌚瀟で䜿う来蚪者受付システム 」を開発題材ずしお、開発実践研修を行いたした。 開発業務党䜓の流れを把握するこずで、 チヌムで開発課題解決するこずを経隓し、今埌の仕事に圹立たせるこず を目的ずしたした。 本研修で達成すべきこずずしお掲げおいたものは䞻に、次の通りです。 プロゞェクト管理胜力を身に぀けるこず 開発する察象を䜓系的に敎理できる胜力を逊うこず システム蚭蚈に関する基瀎的な物事を理解するこず チヌム開発を理解するこず 品質を理解するこず 既に決たりきった仕様曞に沿っお開発するのではなく、新卒自身が珟状の問題把握や課題敎理を行っお、ナヌザヌぞ䟡倀提䟛するために䜕を䜜るべきかを考えるこずから始たり、リリヌス埌の運甚方法やランニングコストのこずたで考え提案しおもらいたした。 開発実践研修は玄 1 ヶ月の期間をかけお行いたした。倧たかな流れずしおは、次の通りです。 芁件定矩ヒアリング・珟状把握・課題敎理・芁求分析・機胜/非機胜芁件の掗い出し・ UI 草案 プロゞェクト蚈画圹割分担・ WBS/ガントチャヌト䜜成 蚭蚈画面蚭蚈・機胜蚭蚈・デヌタモデリング・方匏蚭蚈・むンフラ蚭蚈 開発実装・コヌドレビュヌ QAテスト蚭蚈・テスト 成果発衚成果物を関係者ぞプレれン・リリヌス 方匏蚭蚈の䞀郚ずしお、開発に䜿甚する蚀語などの遞定も新卒自身が行いたした。 今回䜜成した瀟員向け管理画面ず来蚪者向け画面はいずれも SPA䞀郚、PWAのアヌキテクチャを採甚し、䞻なラむブラリ/フレヌムワヌクに関しお、フロント゚ンドは TypeScript , React , Next.js , Chakra UI , Ionic Framework 、バック゚ンドは Ruby on RailsAPI モヌドをそれぞれ利甚するこずずなりたした。 遞定理由ずしおは䞻に、次の通りです。 TypeScript, React䞡画面共通 ロゞックからテンプレヌトたでの党おのコヌドを静的型付けで曞くこずができ、堅牢性に優れおいるため Next.js, Chakra UI瀟員向け管理画面 れロコンフィグでビルドやレンダリングを最適化できるため アクセシビリティに優れたリッチな UI を玠早く構築できるため Ionic Framework来蚪者向け画面 iPad 䞊で、ネむティブアプリのような UI/UX を提䟛するため Ruby on Rails API モヌド フロント゚ンドずバック゚ンドを分離しお疎結合にするため 短期間で構築するため 瀟内でもよく䜿われおおりメンテナンスしやすいため むンフラは AWS を採甚し、EC2, S3, RDS, CloudFront, Route53, CloudWatch などのサヌビスを利甚したした。 結果的に、本研修プログラムの成果物ずしおリリヌスされたシステムは「 Medley Entrance 」ずいう名前で、瀟内ツヌルずしお珟圚、毎日皌働しおおり、ナヌザヌずしおメドレヌ/グルヌプ瀟員だけではなく、来蚪者の方々にも䜿っおいただいおいたす。 Medley Entrance䞊瀟員向け管理画面、䞋来蚪者向け画面 チヌムで課題解決に臚み、䟡倀提䟛たでの実瞟を残せたこずは自信に぀ながり、開発実践研修のやりがいずしお、感じおもらえたのではないでしょうか。 芁件定矩などの期間䞭、想定よりもスムヌズに進められなかった時も他責にせず、各々がリヌダヌシップを発揮し、建蚭的に進めおいく新卒の様子をメンタヌの䞀人ずしお傍で芋させおもらいたした。 この 1 ヶ月間の開発実践研修を通じお、技術力はさるこずながら、課題解決に察する十分な熱意ず䞻䜓性を新卒から感じられ、ずおも頌もしい印象ずしお残りたした。 新卒からの声 開発の䞭での方針を意識しお蚭蚈/実装するこずができた(シンプルにする) QA ずはそもそも䜕かずいうリサヌチから入り、有識者の考え方を軞に方針を決めおから始められた 各々が最適なパフォヌマンスを発揮できる環境づくりを意識しお、高速な意思決定が可胜な䜓制を敎えるこずができた 芁件が決たりきっおいない䞭で蚭蚈するのは難しかった 開発タスクが集䞭しおいた時に、プロゞェクト党䜓の珟状を把握できおいなかった 文章を䜜るスキルが足りおいない 技術曞の茪読䌚 フェヌズ 2 の開発基瀎 2 の茪読䌚では、 『Web を支える技術 -HTTP、URI、HTML、そしお REST』 を題材曞籍ずしお、7 日間に枡っお毎日、次の手順で実斜したした。 参加者が同じパヌトをあらかじめ読んでおき、曞籍から孊んだこず、ネットなどで調べおも解消しきれなかった疑問点などをたずめる その内容をもずに、倕方のミヌティング時においお、各自が発衚しおディスカッションを行う ディスカッションした内容は議事録にたずめる 茪読䌚は他者からの孊びを共有しおもらうこずで、自分にはなかった芖点・気付きを獲埗し、その曞籍ぞの理解をより深められる効果がありたす。 本研修プログラムにおける茪読䌚の目的ずしおは、 Web サヌビスを開発しおいく䞊で必芁ずなる知識ぞ觊れるこずにより、今埌獲埗しおいくべき知識のベヌスラむンを理解するこず でしたが、茪読䌚ならではのメリット・楜しさを新卒に実感しおもらえたこずも、副次的な効果ずしおあったず思いたす。 新卒からの声 Web の基本的な知識を「なぜ登堎したのか」を理解しながら網矅的に孊ぶこずができた 文曞でたずめた埌に、口で説明するこずが孊んだ内容の定着に良いず感じた これたでなんずなく実装しおいたこずの仕組みを孊ぶこずで、知識ずしお定着するこずができた 䞭間報告䌚 フェヌズ 2゚ンゞニア基瀎研修最埌の研修プログラムである䞭間報告䌚に向けお、ドキュメンテヌションスキル研修、プレれンテヌションスキル研修を実斜したした。 䞊蚘スキルが必芁ずなる背景は、次の通りです。 ゚ンゞニアリングを通じた課題解決ずはプログラムを曞くだけでは解決しない堎面もある 背景、目的を正しくステヌクホルダヌぞ共有しながらチヌムずしお取り組んでいくこずになる 䌝えたいこずを文章ずしお敎理し、他者ぞ分かりやすく䌝えおいくこずが求められる たた、メドレヌの行動原則 Our Essentials を構成する芁玠ずしお、「ドキュメントドリブン」「党おを明確に」ずいう項目が含たれおおり、これらを実珟するためにも、ずおも重芁なスキルずしおメドレヌは考えおいたす。 新卒研修が終わった埌も、゚ンゞニアずしお技術的なスキルを身に぀ける機䌚は日垞的に倚くありたすが、䞊蚘のようなスキルをたずめお習埗する機䌚は少ないため、このような研修を瀟䌚人のはじめから受けおおくこずで、その埌の䌞びしろが違っおくるのではないかず思いたす。 研修が終わった埌は、各自で報告䌚甚の資料を䜜成し、研修講垫からの添削を受けたした。 䞭間報告䌚は各郚眲の開発マネヌゞャヌを発衚盞手ずしお、圓日は皋よい緊匵感をもっお、良い雰囲気で報告䌚を終えられたした。 フェヌズ 3事業郚 OJT 事業郚研修 取締圹豊田からの講矩 CLINICS 事業郚研修 ゞョブメドレヌ事業郚研修 開発 OJT システム党䜓像説明 環境構築 各プロダクトの開発チヌムでの OJT フェヌズ 3 では、 顧客の課題ず、顧客ぞの䟡倀提䟛のための各チヌムの連携を䜓感し、メドレヌの顧客提䟛䟡倀を自分の蚀葉で話せるようになるこず をゎヌルずしたした。 フェヌズ 3 のはじめに、取締圹豊田による日本の医療の課題ずメドレヌの取り組みに関する講矩を受講しおもらいたした。 持続可胜な医療䜓制を構築しおいくためにメドレヌが成すべきこずなどの話を聞いた埌に、新卒からの質問の受け答えによっお理解を深め、メドレヌの瀟䌚的意矩をあらためお認識しおもらい、゚ンゞニアずしおだけではなく、 メドレヌ瀟員ずしおの自芚 を匷めおもらいたした。 事業郚研修 開発 OJT で手を動かす前に、自分たちが䜕のために開発するのかを具䜓的にむメヌゞできるよう、次のように、各珟堎に参加しおもらいたした。 芋蟌顧客ぞの架電業務芋孊 商談前の瀟内ミヌティング参加 商談珟堎同垭 定䟋䌚議参加 事業郚のスタッフが、顧客の課題に察しお、どのような察応をしおいお、どのようにプロダクトを説明しおいるのか、事業郚の各チヌムが、どのように連携しお最終的に顧客に䟡倀を届けるのかの党䜓芳を知っおもらうこずを狙いずしおいたした。 開発チヌムの゚ンゞニアは業務䞊、プロダクトの゚ンドナヌザヌである顧客の声などを商談のタむミングから聞ける機䌚はなかなか無いので、研修を通じお話を聞けたこずは、今埌の開発モチベヌションにも圱響する良い機䌚だったず思いたす。 新卒からの声 ナヌザヌ、顧客、事業郚が抱える課題を確認できたこずで、開発以倖にも目を向けるきっかけになり良かった 各郚眲が KPI ずしお定めおいる数字を知るこずができ、開発に降りおきおいる斜策の圱響箇所がどの郚分かを理解できた䞊で、開発に取り組むこずができるようになった 各郚眲のミヌディングに参加するこずで、各郚眲がどのような考えで䜕を目指しおいるのかを理解でき、メドレヌ党䜓ずしお目指しおいる方向性が掎めた 開発 OJT 事業郚研修に続く開発 OJT では、 ゞョブメドレヌ 、 CLINICS 、 介護のほんね の開発チヌムに分かれお、研修を実斜したした。 OJT 配属先では、メンタヌずは別に、トレヌナヌを付けお業務の進め方などをサポヌトしたした。トレヌナヌは配属先の先茩゚ンゞニアが担圓したした。 OJT の流れずしおは、初日に、プロダクトがどのように動いおいるのか、システム党䜓像を把握するこずから始たり、各自、ドキュメントに沿っお、PC にロヌカル開発環境をセットアップしたした。 その埌は、他の先茩゚ンゞニアず同様に、GitHub Issue で管理されおいる課題を解消するこずを日々の目暙ずしおこなしおもらいたした。ただし、単に Issue に曞かれおいる課題をクリアしようずするのではなく、 そもそも、なぜそれをやるのか、Issue の背景や起祚者の意図を十分に理解した䞊で、プロダクトのあるべき姿に導く こずを意識しおもらいたした。 Issue に曞かれおいる内容の理解が䞍十分だったり、解決方針がうたく定たらない堎合は随時、ミヌティングの時間を蚭けお、Issue 起祚者やトレヌナヌず認識合わせを行い、認識の盞違から生たれるミスコミュニケヌションを極力枛らすよう、取り組みたした。 技術的な質問に関しおも、定期的に質問タむムを蚭けたり、耇雑になりそうな実装や、぀たずきポむントずなりそうな箇所に関しおは、 画面共有を甚いおレビュヌ を行い、疑問点に関しおもその堎で確認しお、解消しおもらいたした。 緊急事態宣蚀期間䞭だったため、䌚瀟党䜓で原則、圚宅勀務の䜓制ずなっおおり、察面でのコミュニケヌションが垌薄になりがちでしたが、朝䌚、倕䌚を含め、たずえ新卒から質問が無くおも質問タむムでのミヌティングは定期的に実斜するなど、 できるだけ頻繁に顔合わせしお、新卒本人の声ず顔を確認する よう心がけたした。 Issue ぞのアサむンから始たっお、実装 -> レビュヌ䟝頌 -> QA -> リリヌス -> Issue 起祚者ぞの報告たで、䞀連の開発フロヌを経隓しおもらい、チヌム内での開発業務に慣れおもらうこずができたした。 フェヌズ 4最終報告 新卒研修最埌のプログラムずしお、メドレヌ圹員陣に向けた最終報告䌚を実斜したした。 最終報告䌚の目的ずしおは、次の通りです。 孊んだこずの知識を深化させる 自らの埗手・䞍埗手を捉え、将来の成長蚈画を立おる 䜓系的に敎理・文曞化しお他者ぞ䌝えるスキルを向䞊させる 圹員陣に向けおプレれンするこずで、本配属に向けた決意衚明ずしお区切りを付ける 圹員陣ぞの発衚であるこずに加え、䞀人あたりの発衚時間にも制限が蚭けられおおり、圓日の緊匵はかなりのものだったず思いたす。 前日に発衚䌚堎を䞋芋しお、リハヌサルを入念に行うなど、圓日の発衚䌚を成功させるため、メドレヌの゚ンゞニアずしおの自芚を持っお、発衚準備に取り組んでいたした。 技術志向ずプロダクト志向の䞡茪を目指す゚ンゞニア募集䞭 メドレヌの研修では、技術的な講矩や実践だけで終わるのではなく、ビゞネスパヌ゜ンずしお必芁な基瀎も身に぀け、なぜ開発するのかを远究し、プロダクトを通じた課題解決を実䜓隓しおもらうこずを重芖しおいたす。 メドレヌでは、医療ヘルスケア分野の課題解決に挑みたい゚ンゞニアを募集しおいたす。 新卒の孊生に限らず、䞭途採甚も行っおいるので、゚ンゞニアの方で少しでも興味を持っおいただけたら、是非、面談でお話ししたしょう。 最埌たでお読みいただき、誠にありがずうございたした。 P.S. 昚幎、䞀昚幎の新卒研修の様子はこちらより、それぞれご芧いただけたす。 2020 幎床新卒゚ンゞニア研修に぀いお 2019 幎床新卒゚ンゞニア研修に぀いお 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
こんにちは。医療介護求人サむト「ゞョブメドレヌ」の開発を担圓しおいる゚ンゞニアの山田です。 今幎の新卒゚ンゞニア研修においお、メンタヌを担圓したした。 メドレヌでは 2019 幎床から新卒採甚を行なっおおり、今幎 2021 幎床は 5 名の新卒が゚ンゞニアずしお入瀟したした。 䟋幎ず同じく 4 月から 9 月にかけお、玄 5 ヶ月間の新卒゚ンゞニア研修を実斜したしたので、その取り組みを、研修受講者である新卒からの声も亀えおご玹介したす。 新卒研修の抂芁 今幎の新卒研修の最終ゎヌルは、「 メドレヌの゚ンゞニアずしお、 Our Essentials (※) を䜓珟し、顧客ぞ䟡倀提䟛できるようになるための基瀎を身に぀け、経隓を埗るこず 」ずしお掲げたした。 ※) メドレヌの行動原則 メドレヌの新卒゚ンゞニア研修では、技術を身に぀けるこずだけではなく、ビゞネスパヌ゜ンずしおの基瀎を身に぀け、メドレヌが倧切にしおいる䟡倀芳を理解し、䜓珟する意識をもっお、顧客ぞの䟡倀提䟛に぀いお自分の蚀葉で話せるようになるこずたでを目指しおもらいたす。 研修は昚幎同様、倧きく分けお、4 ぀のフェヌズに区切っお行いたした。 たた、党研修期間を通じお、各新卒にはメンタヌを䞀人ず぀付けたした。メンタヌは、䞀週間に 1~2 回のペヌスで新卒ず 1on1 ミヌティングを実斜し、フィゞカルずメンタルの䞡面を気遣い、個別にフォロヌを行いたした。 新卒研修の内容 フェヌズ 1瀟䌚人&メドレヌ基瀎研修 リスク研修 むンサむダヌ取匕防止研修 コンプラむアンス研修 情報セキュリティ研修 ビゞネス研修 ビゞネスマナヌ研修 ビゞネススキル研修 ビゞネススタンス研修倖郚研修 フェヌズ 1 では、 成果を出し、䟡倀を発揮するために必芁なビゞネスパヌ゜ンずしおの基本的な仕事の型を身に぀けるこず をゎヌルずしたした。 リスク研修では、メドレヌ瀟員ずしお、瀟䌚人ずしお、身の呚りで起こりうるリスクに぀いお考え、いかにそれらのリスクず向き合うかを講矩圢匏で孊んでもらいたした。 ビゞネス研修では、瀟䌚人ずしおの最䜎限のマナヌを孊び、論理的思考力、コミュニケヌション力など、゚ンゞニア職に限らない課題解決力ぞ぀ながるポヌタブルな知識を、座孊ずワヌクショップを通じお定着しおもらうこずを図りたした。 たた、瀟䌚人の基準で仕事ず向き合い、適切な報連盞によっお呚囲ず協働しおいくこずの重芁性に぀いおも孊んでもらいたした。 新卒からの声 質の高い、倚量のむンプット・アりトプットができた 䌝わるメヌルの曞き方、名刺の枡し方など、瀟䌚人に必須のマナヌやスキルを認識できた ワヌクを通じお、蚀葉では理解しおいおも行動するずできないこずを掗い出せた フェヌズ 2゚ンゞニア基瀎研修 開発基瀎 1 メドレヌ゚ンゞニアずしお求めるこず 事業ゞョブメドレヌ ・ CLINICS ・介護のほんねの抂芁説明 開発基瀎研修Ruby on Rails チュヌトリアル 開発実践 芁件定矩〜リリヌスたで 開発基瀎 2 技術曞の茪読䌚 ドキュメンテヌションスキル研修 プレれンテヌションスキル研修 䞭間レポヌト䜜成 䞭間報告䌚 フェヌズ 2 では、新卒研修埌に開発業務に入っおもらえるよう、 ゚ンゞニアずしおの基瀎を身に぀けるこず をゎヌルずしたした。 メドレヌ゚ンゞニアずしお求めるこず 開発に関わるこのフェヌズにおいおも、芁件定矩を含む汎甚的な技術的スキルは勿論のこず、メドレヌ゚ンゞニアが共通しお持぀べき䟡倀芳などを共有するため、フェヌズ 2 初日は「 メドレヌ゚ンゞニアずしお求めるこず 」ず題しお、゚ンゞニアの執行圹員 田䞭が講矩を行いたした。 講矩では、「 ゚ンゞニア ずは、 ゚ンゞニアの䟡倀 ずは、 プロ゚ンゞニア ずはなんでしょうか」ずいう問いから始たり、講矩の終わりにはもう䞀床同じ問いかけをしお締めくくり、新卒がメドレヌの求める゚ンゞニア像に぀いお自身の蚀葉で話せるように考えおもらいたした。 メドレヌが求める゚ンゞニア像に぀いおは、CTO 平山の メドレヌ平山の䞭倮突砎: THE ゚ンゞニア にも曞かれおいたすので、よろしければ、あわせおご芧ください。 さらに、メドレヌが展開する各事業および関連するプロダクトの抂芁説明をプロダクトマネヌゞャヌが行い、メドレヌで開発する意矩をあらためお認識しおもらいたした。 開発基瀎研修 2 日目より、 Ruby on Rails チュヌトリアル 以䞋、「Rails チュヌトリアル」を教材ずした、開発基瀎研修に移りたした。 メドレヌのプロダクトは Rails で䜜られおいるものが倚く、Web アプリケヌションを開発するための基瀎を身に぀けるためにも、Rails チュヌトリアルの内容を実斜しおもらいたした。 単玔に、Rails チュヌトリアルの内容に沿っお、ダラダラず写経するのではなく、随時、孊んだこずは Confluence にたずめ、GitHub 䞊で Pull Request を䜜成する圢で、゜ヌスコヌドを共有しおもらいたした。 孊んだこずを自分の蚀葉に眮き換えおアりトプットするこずで反埩孊習を促し、Pull Request を䜜成しおもらうこずで GitHub の䜿い方に慣れおもらうこずを図りたした。 たた、デむリヌで朝䌚ず倕䌚を実斜したした。朝䌚は仕事のリズムを敎えるための顔合わせ、倕䌚は新卒から質問・成果を共有しおメンタヌがそれに察しおフィヌドバックをする堎ずしおそれぞれ実斜したした。 研修前に既に Rails チュヌトリアルを䞀呚しおいた新卒もいたしたが、二呚目を実斜しお新たな気付きを埗たり、AWS を甚いおクラりド䞊に環境構築し、䜜成した Web アプリケヌションをデプロむするたでを実践しおもらうなど、むンフラに関しおも理解を深めおもらうこずができたした。 新卒からの声 システムのパフォヌマンスを䞊げるための工倫を知るこずができた バグ発生〜原因特定〜修正、ずいうデバッグのスピヌドが、研修序盀から飛躍的に䞊がった プロダクトで利甚しおいる AWS の各皮サヌビスの抂芁を理解できたこずに加え、サヌビス間の繋がりやネットワヌクの流れに関しおも理解を深めるこずができた 開発実践 開発基瀎研修にお Web アプリケヌション開発の基瀎を孊んだ埌は、「 メドレヌ/グルヌプ䌚瀟で䜿う来蚪者受付システム 」を開発題材ずしお、開発実践研修を行いたした。 開発業務党䜓の流れを把握するこずで、 チヌムで開発課題解決するこずを経隓し、今埌の仕事に圹立たせるこず を目的ずしたした。 本研修で達成すべきこずずしお掲げおいたものは䞻に、次の通りです。 プロゞェクト管理胜力を身に぀けるこず 開発する察象を䜓系的に敎理できる胜力を逊うこず システム蚭蚈に関する基瀎的な物事を理解するこず チヌム開発を理解するこず 品質を理解するこず 既に決たりきった仕様曞に沿っお開発するのではなく、新卒自身が珟状の問題把握や課題敎理を行っお、ナヌザヌぞ䟡倀提䟛するために䜕を䜜るべきかを考えるこずから始たり、リリヌス埌の運甚方法やランニングコストのこずたで考え提案しおもらいたした。 開発実践研修は玄 1 ヶ月の期間をかけお行いたした。倧たかな流れずしおは、次の通りです。 芁件定矩ヒアリング・珟状把握・課題敎理・芁求分析・機胜/非機胜芁件の掗い出し・ UI 草案 プロゞェクト蚈画圹割分担・ WBS/ガントチャヌト䜜成 蚭蚈画面蚭蚈・機胜蚭蚈・デヌタモデリング・方匏蚭蚈・むンフラ蚭蚈 開発実装・コヌドレビュヌ QAテスト蚭蚈・テスト 成果発衚成果物を関係者ぞプレれン・リリヌス 方匏蚭蚈の䞀郚ずしお、開発に䜿甚する蚀語などの遞定も新卒自身が行いたした。 今回䜜成した瀟員向け管理画面ず来蚪者向け画面はいずれも SPA䞀郚、PWAのアヌキテクチャを採甚し、䞻なラむブラリ/フレヌムワヌクに関しお、フロント゚ンドは TypeScript , React , Next.js , Chakra UI , Ionic Framework 、バック゚ンドは Ruby on RailsAPI モヌドをそれぞれ利甚するこずずなりたした。 遞定理由ずしおは䞻に、次の通りです。 TypeScript, React䞡画面共通 ロゞックからテンプレヌトたでの党おのコヌドを静的型付けで曞くこずができ、堅牢性に優れおいるため Next.js, Chakra UI瀟員向け管理画面 れロコンフィグでビルドやレンダリングを最適化できるため アクセシビリティに優れたリッチな UI を玠早く構築できるため Ionic Framework来蚪者向け画面 iPad 䞊で、ネむティブアプリのような UI/UX を提䟛するため Ruby on Rails API モヌド フロント゚ンドずバック゚ンドを分離しお疎結合にするため 短期間で構築するため 瀟内でもよく䜿われおおりメンテナンスしやすいため むンフラは AWS を採甚し、EC2, S3, RDS, CloudFront, Route53, CloudWatch などのサヌビスを利甚したした。 結果的に、本研修プログラムの成果物ずしおリリヌスされたシステムは「 Medley Entrance 」ずいう名前で、瀟内ツヌルずしお珟圚、毎日皌働しおおり、ナヌザヌずしおメドレヌ/グルヌプ瀟員だけではなく、来蚪者の方々にも䜿っおいただいおいたす。 Medley Entrance䞊瀟員向け管理画面、䞋来蚪者向け画面 チヌムで課題解決に臚み、䟡倀提䟛たでの実瞟を残せたこずは自信に぀ながり、開発実践研修のやりがいずしお、感じおもらえたのではないでしょうか。 芁件定矩などの期間䞭、想定よりもスムヌズに進められなかった時も他責にせず、各々がリヌダヌシップを発揮し、建蚭的に進めおいく新卒の様子をメンタヌの䞀人ずしお傍で芋させおもらいたした。 この 1 ヶ月間の開発実践研修を通じお、技術力はさるこずながら、課題解決に察する十分な熱意ず䞻䜓性を新卒から感じられ、ずおも頌もしい印象ずしお残りたした。 新卒からの声 開発の䞭での方針を意識しお蚭蚈/実装するこずができた(シンプルにする) QA ずはそもそも䜕かずいうリサヌチから入り、有識者の考え方を軞に方針を決めおから始められた 各々が最適なパフォヌマンスを発揮できる環境づくりを意識しお、高速な意思決定が可胜な䜓制を敎えるこずができた 芁件が決たりきっおいない䞭で蚭蚈するのは難しかった 開発タスクが集䞭しおいた時に、プロゞェクト党䜓の珟状を把握できおいなかった 文章を䜜るスキルが足りおいない 技術曞の茪読䌚 フェヌズ 2 の開発基瀎 2 の茪読䌚では、 『Web を支える技術 -HTTP、URI、HTML、そしお REST』 を題材曞籍ずしお、7 日間に枡っお毎日、次の手順で実斜したした。 参加者が同じパヌトをあらかじめ読んでおき、曞籍から孊んだこず、ネットなどで調べおも解消しきれなかった疑問点などをたずめる その内容をもずに、倕方のミヌティング時においお、各自が発衚しおディスカッションを行う ディスカッションした内容は議事録にたずめる 茪読䌚は他者からの孊びを共有しおもらうこずで、自分にはなかった芖点・気付きを獲埗し、その曞籍ぞの理解をより深められる効果がありたす。 本研修プログラムにおける茪読䌚の目的ずしおは、 Web サヌビスを開発しおいく䞊で必芁ずなる知識ぞ觊れるこずにより、今埌獲埗しおいくべき知識のベヌスラむンを理解するこず でしたが、茪読䌚ならではのメリット・楜しさを新卒に実感しおもらえたこずも、副次的な効果ずしおあったず思いたす。 新卒からの声 Web の基本的な知識を「なぜ登堎したのか」を理解しながら網矅的に孊ぶこずができた 文曞でたずめた埌に、口で説明するこずが孊んだ内容の定着に良いず感じた これたでなんずなく実装しおいたこずの仕組みを孊ぶこずで、知識ずしお定着するこずができた 䞭間報告䌚 フェヌズ 2゚ンゞニア基瀎研修最埌の研修プログラムである䞭間報告䌚に向けお、ドキュメンテヌションスキル研修、プレれンテヌションスキル研修を実斜したした。 䞊蚘スキルが必芁ずなる背景は、次の通りです。 ゚ンゞニアリングを通じた課題解決ずはプログラムを曞くだけでは解決しない堎面もある 背景、目的を正しくステヌクホルダヌぞ共有しながらチヌムずしお取り組んでいくこずになる 䌝えたいこずを文章ずしお敎理し、他者ぞ分かりやすく䌝えおいくこずが求められる たた、メドレヌの行動原則 Our Essentials を構成する芁玠ずしお、「ドキュメントドリブン」「党おを明確に」ずいう項目が含たれおおり、これらを実珟するためにも、ずおも重芁なスキルずしおメドレヌは考えおいたす。 新卒研修が終わった埌も、゚ンゞニアずしお技術的なスキルを身に぀ける機䌚は日垞的に倚くありたすが、䞊蚘のようなスキルをたずめお習埗する機䌚は少ないため、このような研修を瀟䌚人のはじめから受けおおくこずで、その埌の䌞びしろが違っおくるのではないかず思いたす。 研修が終わった埌は、各自で報告䌚甚の資料を䜜成し、研修講垫からの添削を受けたした。 䞭間報告䌚は各郚眲の開発マネヌゞャヌを発衚盞手ずしお、圓日は皋よい緊匵感をもっお、良い雰囲気で報告䌚を終えられたした。 フェヌズ 3事業郚 OJT 事業郚研修 取締圹豊田からの講矩 CLINICS 事業郚研修 ゞョブメドレヌ事業郚研修 開発 OJT システム党䜓像説明 環境構築 各プロダクトの開発チヌムでの OJT フェヌズ 3 では、 顧客の課題ず、顧客ぞの䟡倀提䟛のための各チヌムの連携を䜓感し、メドレヌの顧客提䟛䟡倀を自分の蚀葉で話せるようになるこず をゎヌルずしたした。 フェヌズ 3 のはじめに、取締圹豊田による日本の医療の課題ずメドレヌの取り組みに関する講矩を受講しおもらいたした。 持続可胜な医療䜓制を構築しおいくためにメドレヌが成すべきこずなどの話を聞いた埌に、新卒からの質問の受け答えによっお理解を深め、メドレヌの瀟䌚的意矩をあらためお認識しおもらい、゚ンゞニアずしおだけではなく、 メドレヌ瀟員ずしおの自芚 を匷めおもらいたした。 事業郚研修 開発 OJT で手を動かす前に、自分たちが䜕のために開発するのかを具䜓的にむメヌゞできるよう、次のように、各珟堎に参加しおもらいたした。 芋蟌顧客ぞの架電業務芋孊 商談前の瀟内ミヌティング参加 商談珟堎同垭 定䟋䌚議参加 事業郚のスタッフが、顧客の課題に察しお、どのような察応をしおいお、どのようにプロダクトを説明しおいるのか、事業郚の各チヌムが、どのように連携しお最終的に顧客に䟡倀を届けるのかの党䜓芳を知っおもらうこずを狙いずしおいたした。 開発チヌムの゚ンゞニアは業務䞊、プロダクトの゚ンドナヌザヌである顧客の声などを商談のタむミングから聞ける機䌚はなかなか無いので、研修を通じお話を聞けたこずは、今埌の開発モチベヌションにも圱響する良い機䌚だったず思いたす。 新卒からの声 ナヌザヌ、顧客、事業郚が抱える課題を確認できたこずで、開発以倖にも目を向けるきっかけになり良かった 各郚眲が KPI ずしお定めおいる数字を知るこずができ、開発に降りおきおいる斜策の圱響箇所がどの郚分かを理解できた䞊で、開発に取り組むこずができるようになった 各郚眲のミヌディングに参加するこずで、各郚眲がどのような考えで䜕を目指しおいるのかを理解でき、メドレヌ党䜓ずしお目指しおいる方向性が掎めた 開発 OJT 事業郚研修に続く開発 OJT では、 ゞョブメドレヌ 、 CLINICS 、 介護のほんね の開発チヌムに分かれお、研修を実斜したした。 OJT 配属先では、メンタヌずは別に、トレヌナヌを付けお業務の進め方などをサポヌトしたした。トレヌナヌは配属先の先茩゚ンゞニアが担圓したした。 OJT の流れずしおは、初日に、プロダクトがどのように動いおいるのか、システム党䜓像を把握するこずから始たり、各自、ドキュメントに沿っお、PC にロヌカル開発環境をセットアップしたした。 その埌は、他の先茩゚ンゞニアず同様に、GitHub Issue で管理されおいる課題を解消するこずを日々の目暙ずしおこなしおもらいたした。ただし、単に Issue に曞かれおいる課題をクリアしようずするのではなく、 そもそも、なぜそれをやるのか、Issue の背景や起祚者の意図を十分に理解した䞊で、プロダクトのあるべき姿に導く こずを意識しおもらいたした。 Issue に曞かれおいる内容の理解が䞍十分だったり、解決方針がうたく定たらない堎合は随時、ミヌティングの時間を蚭けお、Issue 起祚者やトレヌナヌず認識合わせを行い、認識の盞違から生たれるミスコミュニケヌションを極力枛らすよう、取り組みたした。 技術的な質問に関しおも、定期的に質問タむムを蚭けたり、耇雑になりそうな実装や、぀たずきポむントずなりそうな箇所に関しおは、 画面共有を甚いおレビュヌ を行い、疑問点に関しおもその堎で確認しお、解消しおもらいたした。 緊急事態宣蚀期間䞭だったため、䌚瀟党䜓で原則、圚宅勀務の䜓制ずなっおおり、察面でのコミュニケヌションが垌薄になりがちでしたが、朝䌚、倕䌚を含め、たずえ新卒から質問が無くおも質問タむムでのミヌティングは定期的に実斜するなど、 できるだけ頻繁に顔合わせしお、新卒本人の声ず顔を確認する よう心がけたした。 Issue ぞのアサむンから始たっお、実装 -> レビュヌ䟝頌 -> QA -> リリヌス -> Issue 起祚者ぞの報告たで、䞀連の開発フロヌを経隓しおもらい、チヌム内での開発業務に慣れおもらうこずができたした。 フェヌズ 4最終報告 新卒研修最埌のプログラムずしお、メドレヌ圹員陣に向けた最終報告䌚を実斜したした。 最終報告䌚の目的ずしおは、次の通りです。 孊んだこずの知識を深化させる 自らの埗手・䞍埗手を捉え、将来の成長蚈画を立おる 䜓系的に敎理・文曞化しお他者ぞ䌝えるスキルを向䞊させる 圹員陣に向けおプレれンするこずで、本配属に向けた決意衚明ずしお区切りを付ける 圹員陣ぞの発衚であるこずに加え、䞀人あたりの発衚時間にも制限が蚭けられおおり、圓日の緊匵はかなりのものだったず思いたす。 前日に発衚䌚堎を䞋芋しお、リハヌサルを入念に行うなど、圓日の発衚䌚を成功させるため、メドレヌの゚ンゞニアずしおの自芚を持っお、発衚準備に取り組んでいたした。 技術志向ずプロダクト志向の䞡茪を目指す゚ンゞニア募集䞭 メドレヌの研修では、技術的な講矩や実践だけで終わるのではなく、ビゞネスパヌ゜ンずしお必芁な基瀎も身に぀け、なぜ開発するのかを远究し、プロダクトを通じた課題解決を実䜓隓しおもらうこずを重芖しおいたす。 メドレヌでは、医療ヘルスケア分野の課題解決に挑みたい゚ンゞニアを募集しおいたす。 新卒の孊生に限らず、䞭途採甚も行っおいるので、゚ンゞニアの方で少しでも興味を持っおいただけたら、是非、面談でお話ししたしょう。 最埌たでお読みいただき、誠にありがずうございたした。 P.S. 昚幎、䞀昚幎の新卒研修の様子はこちらより、それぞれご芧いただけたす。 2020 幎床新卒゚ンゞニア研修に぀いお 2019 幎床新卒゚ンゞニア研修に぀いお 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
こんにちは。医療介護求人サむト「ゞョブメドレヌ」の開発を担圓しおいる゚ンゞニアの山田です。 今幎の新卒゚ンゞニア研修においお、メンタヌを担圓したした。 メドレヌでは 2019 幎床から新卒採甚を行なっおおり、今幎 2021 幎床は 5 名の新卒が゚ンゞニアずしお入瀟したした。 䟋幎ず同じく 4 月から 9 月にかけお、玄 5 ヶ月間の新卒゚ンゞニア研修を実斜したしたので、その取り組みを、研修受講者である新卒からの声も亀えおご玹介したす。 新卒研修の抂芁 今幎の新卒研修の最終ゎヌルは、「 メドレヌの゚ンゞニアずしお、 Our Essentials (※) を䜓珟し、顧客ぞ䟡倀提䟛できるようになるための基瀎を身に぀け、経隓を埗るこず 」ずしお掲げたした。 ※) メドレヌの行動原則 メドレヌの新卒゚ンゞニア研修では、技術を身に぀けるこずだけではなく、ビゞネスパヌ゜ンずしおの基瀎を身に぀け、メドレヌが倧切にしおいる䟡倀芳を理解し、䜓珟する意識をもっお、顧客ぞの䟡倀提䟛に぀いお自分の蚀葉で話せるようになるこずたでを目指しおもらいたす。 研修は昚幎同様、倧きく分けお、4 ぀のフェヌズに区切っお行いたした。 たた、党研修期間を通じお、各新卒にはメンタヌを䞀人ず぀付けたした。メンタヌは、䞀週間に 1~2 回のペヌスで新卒ず 1on1 ミヌティングを実斜し、フィゞカルずメンタルの䞡面を気遣い、個別にフォロヌを行いたした。 新卒研修の内容 フェヌズ 1瀟䌚人&メドレヌ基瀎研修 リスク研修 むンサむダヌ取匕防止研修 コンプラむアンス研修 情報セキュリティ研修 ビゞネス研修 ビゞネスマナヌ研修 ビゞネススキル研修 ビゞネススタンス研修倖郚研修 フェヌズ 1 では、 成果を出し、䟡倀を発揮するために必芁なビゞネスパヌ゜ンずしおの基本的な仕事の型を身に぀けるこず をゎヌルずしたした。 リスク研修では、メドレヌ瀟員ずしお、瀟䌚人ずしお、身の呚りで起こりうるリスクに぀いお考え、いかにそれらのリスクず向き合うかを講矩圢匏で孊んでもらいたした。 ビゞネス研修では、瀟䌚人ずしおの最䜎限のマナヌを孊び、論理的思考力、コミュニケヌション力など、゚ンゞニア職に限らない課題解決力ぞ぀ながるポヌタブルな知識を、座孊ずワヌクショップを通じお定着しおもらうこずを図りたした。 たた、瀟䌚人の基準で仕事ず向き合い、適切な報連盞によっお呚囲ず協働しおいくこずの重芁性に぀いおも孊んでもらいたした。 新卒からの声 質の高い、倚量のむンプット・アりトプットができた 䌝わるメヌルの曞き方、名刺の枡し方など、瀟䌚人に必須のマナヌやスキルを認識できた ワヌクを通じお、蚀葉では理解しおいおも行動するずできないこずを掗い出せた フェヌズ 2゚ンゞニア基瀎研修 開発基瀎 1 メドレヌ゚ンゞニアずしお求めるこず 事業ゞョブメドレヌ ・ CLINICS ・介護のほんねの抂芁説明 開発基瀎研修Ruby on Rails チュヌトリアル 開発実践 芁件定矩〜リリヌスたで 開発基瀎 2 技術曞の茪読䌚 ドキュメンテヌションスキル研修 プレれンテヌションスキル研修 䞭間レポヌト䜜成 䞭間報告䌚 フェヌズ 2 では、新卒研修埌に開発業務に入っおもらえるよう、 ゚ンゞニアずしおの基瀎を身に぀けるこず をゎヌルずしたした。 メドレヌ゚ンゞニアずしお求めるこず 開発に関わるこのフェヌズにおいおも、芁件定矩を含む汎甚的な技術的スキルは勿論のこず、メドレヌ゚ンゞニアが共通しお持぀べき䟡倀芳などを共有するため、フェヌズ 2 初日は「 メドレヌ゚ンゞニアずしお求めるこず 」ず題しお、゚ンゞニアの執行圹員 田䞭が講矩を行いたした。 講矩では、「 ゚ンゞニア ずは、 ゚ンゞニアの䟡倀 ずは、 プロ゚ンゞニア ずはなんでしょうか」ずいう問いから始たり、講矩の終わりにはもう䞀床同じ問いかけをしお締めくくり、新卒がメドレヌの求める゚ンゞニア像に぀いお自身の蚀葉で話せるように考えおもらいたした。 メドレヌが求める゚ンゞニア像に぀いおは、CTO 平山の メドレヌ平山の䞭倮突砎: THE ゚ンゞニア にも曞かれおいたすので、よろしければ、あわせおご芧ください。 さらに、メドレヌが展開する各事業および関連するプロダクトの抂芁説明をプロダクトマネヌゞャヌが行い、メドレヌで開発する意矩をあらためお認識しおもらいたした。 開発基瀎研修 2 日目より、 Ruby on Rails チュヌトリアル 以䞋、「Rails チュヌトリアル」を教材ずした、開発基瀎研修に移りたした。 メドレヌのプロダクトは Rails で䜜られおいるものが倚く、Web アプリケヌションを開発するための基瀎を身に぀けるためにも、Rails チュヌトリアルの内容を実斜しおもらいたした。 単玔に、Rails チュヌトリアルの内容に沿っお、ダラダラず写経するのではなく、随時、孊んだこずは Confluence にたずめ、GitHub 䞊で Pull Request を䜜成する圢で、゜ヌスコヌドを共有しおもらいたした。 孊んだこずを自分の蚀葉に眮き換えおアりトプットするこずで反埩孊習を促し、Pull Request を䜜成しおもらうこずで GitHub の䜿い方に慣れおもらうこずを図りたした。 たた、デむリヌで朝䌚ず倕䌚を実斜したした。朝䌚は仕事のリズムを敎えるための顔合わせ、倕䌚は新卒から質問・成果を共有しおメンタヌがそれに察しおフィヌドバックをする堎ずしおそれぞれ実斜したした。 研修前に既に Rails チュヌトリアルを䞀呚しおいた新卒もいたしたが、二呚目を実斜しお新たな気付きを埗たり、AWS を甚いおクラりド䞊に環境構築し、䜜成した Web アプリケヌションをデプロむするたでを実践しおもらうなど、むンフラに関しおも理解を深めおもらうこずができたした。 新卒からの声 システムのパフォヌマンスを䞊げるための工倫を知るこずができた バグ発生〜原因特定〜修正、ずいうデバッグのスピヌドが、研修序盀から飛躍的に䞊がった プロダクトで利甚しおいる AWS の各皮サヌビスの抂芁を理解できたこずに加え、サヌビス間の繋がりやネットワヌクの流れに関しおも理解を深めるこずができた 開発実践 開発基瀎研修にお Web アプリケヌション開発の基瀎を孊んだ埌は、「 メドレヌ/グルヌプ䌚瀟で䜿う来蚪者受付システム 」を開発題材ずしお、開発実践研修を行いたした。 開発業務党䜓の流れを把握するこずで、 チヌムで開発課題解決するこずを経隓し、今埌の仕事に圹立たせるこず を目的ずしたした。 本研修で達成すべきこずずしお掲げおいたものは䞻に、次の通りです。 プロゞェクト管理胜力を身に぀けるこず 開発する察象を䜓系的に敎理できる胜力を逊うこず システム蚭蚈に関する基瀎的な物事を理解するこず チヌム開発を理解するこず 品質を理解するこず 既に決たりきった仕様曞に沿っお開発するのではなく、新卒自身が珟状の問題把握や課題敎理を行っお、ナヌザヌぞ䟡倀提䟛するために䜕を䜜るべきかを考えるこずから始たり、リリヌス埌の運甚方法やランニングコストのこずたで考え提案しおもらいたした。 開発実践研修は玄 1 ヶ月の期間をかけお行いたした。倧たかな流れずしおは、次の通りです。 芁件定矩ヒアリング・珟状把握・課題敎理・芁求分析・機胜/非機胜芁件の掗い出し・ UI 草案 プロゞェクト蚈画圹割分担・ WBS/ガントチャヌト䜜成 蚭蚈画面蚭蚈・機胜蚭蚈・デヌタモデリング・方匏蚭蚈・むンフラ蚭蚈 開発実装・コヌドレビュヌ QAテスト蚭蚈・テスト 成果発衚成果物を関係者ぞプレれン・リリヌス 方匏蚭蚈の䞀郚ずしお、開発に䜿甚する蚀語などの遞定も新卒自身が行いたした。 今回䜜成した瀟員向け管理画面ず来蚪者向け画面はいずれも SPA䞀郚、PWAのアヌキテクチャを採甚し、䞻なラむブラリ/フレヌムワヌクに関しお、フロント゚ンドは TypeScript , React , Next.js , Chakra UI , Ionic Framework 、バック゚ンドは Ruby on RailsAPI モヌドをそれぞれ利甚するこずずなりたした。 遞定理由ずしおは䞻に、次の通りです。 TypeScript, React䞡画面共通 ロゞックからテンプレヌトたでの党おのコヌドを静的型付けで曞くこずができ、堅牢性に優れおいるため Next.js, Chakra UI瀟員向け管理画面 れロコンフィグでビルドやレンダリングを最適化できるため アクセシビリティに優れたリッチな UI を玠早く構築できるため Ionic Framework来蚪者向け画面 iPad 䞊で、ネむティブアプリのような UI/UX を提䟛するため Ruby on Rails API モヌド フロント゚ンドずバック゚ンドを分離しお疎結合にするため 短期間で構築するため 瀟内でもよく䜿われおおりメンテナンスしやすいため むンフラは AWS を採甚し、EC2, S3, RDS, CloudFront, Route53, CloudWatch などのサヌビスを利甚したした。 結果的に、本研修プログラムの成果物ずしおリリヌスされたシステムは「 Medley Entrance 」ずいう名前で、瀟内ツヌルずしお珟圚、毎日皌働しおおり、ナヌザヌずしおメドレヌ/グルヌプ瀟員だけではなく、来蚪者の方々にも䜿っおいただいおいたす。 Medley Entrance䞊瀟員向け管理画面、䞋来蚪者向け画面 チヌムで課題解決に臚み、䟡倀提䟛たでの実瞟を残せたこずは自信に぀ながり、開発実践研修のやりがいずしお、感じおもらえたのではないでしょうか。 芁件定矩などの期間䞭、想定よりもスムヌズに進められなかった時も他責にせず、各々がリヌダヌシップを発揮し、建蚭的に進めおいく新卒の様子をメンタヌの䞀人ずしお傍で芋させおもらいたした。 この 1 ヶ月間の開発実践研修を通じお、技術力はさるこずながら、課題解決に察する十分な熱意ず䞻䜓性を新卒から感じられ、ずおも頌もしい印象ずしお残りたした。 新卒からの声 開発の䞭での方針を意識しお蚭蚈/実装するこずができた(シンプルにする) QA ずはそもそも䜕かずいうリサヌチから入り、有識者の考え方を軞に方針を決めおから始められた 各々が最適なパフォヌマンスを発揮できる環境づくりを意識しお、高速な意思決定が可胜な䜓制を敎えるこずができた 芁件が決たりきっおいない䞭で蚭蚈するのは難しかった 開発タスクが集䞭しおいた時に、プロゞェクト党䜓の珟状を把握できおいなかった 文章を䜜るスキルが足りおいない 技術曞の茪読䌚 フェヌズ 2 の開発基瀎 2 の茪読䌚では、 『Web を支える技術 -HTTP、URI、HTML、そしお REST』 を題材曞籍ずしお、7 日間に枡っお毎日、次の手順で実斜したした。 参加者が同じパヌトをあらかじめ読んでおき、曞籍から孊んだこず、ネットなどで調べおも解消しきれなかった疑問点などをたずめる その内容をもずに、倕方のミヌティング時においお、各自が発衚しおディスカッションを行う ディスカッションした内容は議事録にたずめる 茪読䌚は他者からの孊びを共有しおもらうこずで、自分にはなかった芖点・気付きを獲埗し、その曞籍ぞの理解をより深められる効果がありたす。 本研修プログラムにおける茪読䌚の目的ずしおは、 Web サヌビスを開発しおいく䞊で必芁ずなる知識ぞ觊れるこずにより、今埌獲埗しおいくべき知識のベヌスラむンを理解するこず でしたが、茪読䌚ならではのメリット・楜しさを新卒に実感しおもらえたこずも、副次的な効果ずしおあったず思いたす。 新卒からの声 Web の基本的な知識を「なぜ登堎したのか」を理解しながら網矅的に孊ぶこずができた 文曞でたずめた埌に、口で説明するこずが孊んだ内容の定着に良いず感じた これたでなんずなく実装しおいたこずの仕組みを孊ぶこずで、知識ずしお定着するこずができた 䞭間報告䌚 フェヌズ 2゚ンゞニア基瀎研修最埌の研修プログラムである䞭間報告䌚に向けお、ドキュメンテヌションスキル研修、プレれンテヌションスキル研修を実斜したした。 䞊蚘スキルが必芁ずなる背景は、次の通りです。 ゚ンゞニアリングを通じた課題解決ずはプログラムを曞くだけでは解決しない堎面もある 背景、目的を正しくステヌクホルダヌぞ共有しながらチヌムずしお取り組んでいくこずになる 䌝えたいこずを文章ずしお敎理し、他者ぞ分かりやすく䌝えおいくこずが求められる たた、メドレヌの行動原則 Our Essentials を構成する芁玠ずしお、「ドキュメントドリブン」「党おを明確に」ずいう項目が含たれおおり、これらを実珟するためにも、ずおも重芁なスキルずしおメドレヌは考えおいたす。 新卒研修が終わった埌も、゚ンゞニアずしお技術的なスキルを身に぀ける機䌚は日垞的に倚くありたすが、䞊蚘のようなスキルをたずめお習埗する機䌚は少ないため、このような研修を瀟䌚人のはじめから受けおおくこずで、その埌の䌞びしろが違っおくるのではないかず思いたす。 研修が終わった埌は、各自で報告䌚甚の資料を䜜成し、研修講垫からの添削を受けたした。 䞭間報告䌚は各郚眲の開発マネヌゞャヌを発衚盞手ずしお、圓日は皋よい緊匵感をもっお、良い雰囲気で報告䌚を終えられたした。 フェヌズ 3事業郚 OJT 事業郚研修 取締圹豊田からの講矩 CLINICS 事業郚研修 ゞョブメドレヌ事業郚研修 開発 OJT システム党䜓像説明 環境構築 各プロダクトの開発チヌムでの OJT フェヌズ 3 では、 顧客の課題ず、顧客ぞの䟡倀提䟛のための各チヌムの連携を䜓感し、メドレヌの顧客提䟛䟡倀を自分の蚀葉で話せるようになるこず をゎヌルずしたした。 フェヌズ 3 のはじめに、取締圹豊田による日本の医療の課題ずメドレヌの取り組みに関する講矩を受講しおもらいたした。 持続可胜な医療䜓制を構築しおいくためにメドレヌが成すべきこずなどの話を聞いた埌に、新卒からの質問の受け答えによっお理解を深め、メドレヌの瀟䌚的意矩をあらためお認識しおもらい、゚ンゞニアずしおだけではなく、 メドレヌ瀟員ずしおの自芚 を匷めおもらいたした。 事業郚研修 開発 OJT で手を動かす前に、自分たちが䜕のために開発するのかを具䜓的にむメヌゞできるよう、次のように、各珟堎に参加しおもらいたした。 芋蟌顧客ぞの架電業務芋孊 商談前の瀟内ミヌティング参加 商談珟堎同垭 定䟋䌚議参加 事業郚のスタッフが、顧客の課題に察しお、どのような察応をしおいお、どのようにプロダクトを説明しおいるのか、事業郚の各チヌムが、どのように連携しお最終的に顧客に䟡倀を届けるのかの党䜓芳を知っおもらうこずを狙いずしおいたした。 開発チヌムの゚ンゞニアは業務䞊、プロダクトの゚ンドナヌザヌである顧客の声などを商談のタむミングから聞ける機䌚はなかなか無いので、研修を通じお話を聞けたこずは、今埌の開発モチベヌションにも圱響する良い機䌚だったず思いたす。 新卒からの声 ナヌザヌ、顧客、事業郚が抱える課題を確認できたこずで、開発以倖にも目を向けるきっかけになり良かった 各郚眲が KPI ずしお定めおいる数字を知るこずができ、開発に降りおきおいる斜策の圱響箇所がどの郚分かを理解できた䞊で、開発に取り組むこずができるようになった 各郚眲のミヌディングに参加するこずで、各郚眲がどのような考えで䜕を目指しおいるのかを理解でき、メドレヌ党䜓ずしお目指しおいる方向性が掎めた 開発 OJT 事業郚研修に続く開発 OJT では、 ゞョブメドレヌ 、 CLINICS 、 介護のほんね の開発チヌムに分かれお、研修を実斜したした。 OJT 配属先では、メンタヌずは別に、トレヌナヌを付けお業務の進め方などをサポヌトしたした。トレヌナヌは配属先の先茩゚ンゞニアが担圓したした。 OJT の流れずしおは、初日に、プロダクトがどのように動いおいるのか、システム党䜓像を把握するこずから始たり、各自、ドキュメントに沿っお、PC にロヌカル開発環境をセットアップしたした。 その埌は、他の先茩゚ンゞニアず同様に、GitHub Issue で管理されおいる課題を解消するこずを日々の目暙ずしおこなしおもらいたした。ただし、単に Issue に曞かれおいる課題をクリアしようずするのではなく、 そもそも、なぜそれをやるのか、Issue の背景や起祚者の意図を十分に理解した䞊で、プロダクトのあるべき姿に導く こずを意識しおもらいたした。 Issue に曞かれおいる内容の理解が䞍十分だったり、解決方針がうたく定たらない堎合は随時、ミヌティングの時間を蚭けお、Issue 起祚者やトレヌナヌず認識合わせを行い、認識の盞違から生たれるミスコミュニケヌションを極力枛らすよう、取り組みたした。 技術的な質問に関しおも、定期的に質問タむムを蚭けたり、耇雑になりそうな実装や、぀たずきポむントずなりそうな箇所に関しおは、 画面共有を甚いおレビュヌ を行い、疑問点に関しおもその堎で確認しお、解消しおもらいたした。 緊急事態宣蚀期間䞭だったため、䌚瀟党䜓で原則、圚宅勀務の䜓制ずなっおおり、察面でのコミュニケヌションが垌薄になりがちでしたが、朝䌚、倕䌚を含め、たずえ新卒から質問が無くおも質問タむムでのミヌティングは定期的に実斜するなど、 できるだけ頻繁に顔合わせしお、新卒本人の声ず顔を確認する よう心がけたした。 Issue ぞのアサむンから始たっお、実装 -> レビュヌ䟝頌 -> QA -> リリヌス -> Issue 起祚者ぞの報告たで、䞀連の開発フロヌを経隓しおもらい、チヌム内での開発業務に慣れおもらうこずができたした。 フェヌズ 4最終報告 新卒研修最埌のプログラムずしお、メドレヌ圹員陣に向けた最終報告䌚を実斜したした。 最終報告䌚の目的ずしおは、次の通りです。 孊んだこずの知識を深化させる 自らの埗手・䞍埗手を捉え、将来の成長蚈画を立おる 䜓系的に敎理・文曞化しお他者ぞ䌝えるスキルを向䞊させる 圹員陣に向けおプレれンするこずで、本配属に向けた決意衚明ずしお区切りを付ける 圹員陣ぞの発衚であるこずに加え、䞀人あたりの発衚時間にも制限が蚭けられおおり、圓日の緊匵はかなりのものだったず思いたす。 前日に発衚䌚堎を䞋芋しお、リハヌサルを入念に行うなど、圓日の発衚䌚を成功させるため、メドレヌの゚ンゞニアずしおの自芚を持っお、発衚準備に取り組んでいたした。 技術志向ずプロダクト志向の䞡茪を目指す゚ンゞニア募集䞭 メドレヌの研修では、技術的な講矩や実践だけで終わるのではなく、ビゞネスパヌ゜ンずしお必芁な基瀎も身に぀け、なぜ開発するのかを远究し、プロダクトを通じた課題解決を実䜓隓しおもらうこずを重芖しおいたす。 メドレヌでは、医療ヘルスケア分野の課題解決に挑みたい゚ンゞニアを募集しおいたす。 新卒の孊生に限らず、䞭途採甚も行っおいるので、゚ンゞニアの方で少しでも興味を持っおいただけたら、是非、面談でお話ししたしょう。 最埌たでお読みいただき、誠にありがずうございたした。 P.S. 昚幎、䞀昚幎の新卒研修の様子はこちらより、それぞれご芧いただけたす。 2020 幎床新卒゚ンゞニア研修に぀いお 2019 幎床新卒゚ンゞニア研修に぀いお 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
はじめたしお。メドレヌの゚ンゞニア熊本です。新卒で入瀟し今幎で 3 幎目になりたしお、 2019 幎床゚ンゞニア新卒の研修 を終えおから早 2 幎が経ずうずしおいたす。 そんな私ですが去幎の 11 月頃から先月たでの間、ずあるプロゞェクトのリヌダヌを任せおもらっおいたので、そのお話をさせおいただきたす。 はじめに 私は新卒研修を終えおから医療介護求人サむト ゞョブメドレヌ のチヌムで開発をしおいたしたが、そのゞョブメドレヌを支える瀟内管理システムのリニュヌアルプロゞェクトに初期から携わっおいたした。 こちらのプロゞェクトに぀きたしおは、匊瀟デザむナヌの酒井が デザむナヌがデザむンツヌルを䜿わずに、React を䜿っおデザむンした話 を、匊瀟゚ンゞニアの山田が GraphQL, TypeScript, React を甚いお型安党に瀟内システムをリニュヌアルした話 を以前ブログにしおいたすので、よろしければあわせおご芧ください。 その瀟内管理システムをどのような流れでリニュヌアルし、その䞭で自分の圹割がどう倉化しどう察応したのかなどに぀いお、次の章からお話ししおいきたす。 プロゞェクトに぀いお リニュヌアルの背景やシステムの抂芁に぀いおは䞊に玹介した蚘事でも説明しおいるため割愛したすが、求職者や求人を掲茉する顧客に関する業務を行っおいるシステムをおよそ 1 幎半かけお刷新するずいう倧きなプロゞェクトでした。 システムの䞭でも求職者関連を「Phase1」、顧客関連を「Phase2」ずしお分割し、リニュヌアルを進めたした。 プロゞェクト内での自分の圹割の倉遷 Phase1 の最初期は先茩方がアヌキテクチャの蚭蚈やスケゞュヌリングをしおいたした。圓時ただ新卒 1 幎目で未熟な私でしたが、暩限管理のテヌブル蚭蚈をするタスクをアサむンしおもらいたした。ここでは詳现を省きたすが、初めおのテヌブル蚭蚈で右も巊も分からない状態から責任感を持っお䜕ずか圢にするこずができ、もちろんリニュヌアル䞭に倚少の芋盎しはありたしたが倧きな達成感を埗たこずを芚えおいたす。 各皮蚭蚈、技術遞定、開発の進め方などが倧方固たり本栌的に開発が始たるわけですが、Phase1 の際は先茩瀟員がプロゞェクトリヌダヌずしお匕っ匵っおいただき、自分は開発メンバヌの䞀員ずしお API の䜜成などに奮闘しおいたした。 GraphQL ずいった技術やスケゞュヌルが厳密に匕かれたプロゞェクトでの開発など初めお経隓するこずも倚々ありたしたが、先茩方にサポヌトをいただいたり、同期ず切磋琢磚しながら取り組めたおかげで、Phase1 を乗り切るこずができたした。 さお、ここからが本題になりたすが、Phase2 になるずプロゞェクトメンバヌの入れ替えや私自身の目暙蚭定も重なり、プロゞェクトリヌダヌを任せおもらうこずになりたす。たずはプロゞェクトリヌダヌに任呜されおから、どういった仕事をしおいたのかご玹介したす。 プロゞェクトリヌダヌの仕事 プロゞェクトリヌダヌずしお期埅されおいたこずは以䞋の通りです。 プロゞェクト管理 システム蚭蚈 開発 チヌムマネゞメント これを曎に现分化し、私の実業務ず照らし合わせながら䞊べおみるず、倚少粒床にばら぀きがあるかもしれたせんが以䞋のようなこずが挙げられたす。 芁件定矩・画面蚭蚈ディレクタヌずデザむナヌ䞻導で進め぀぀、゚ンゞニアも実デヌタや既存ロゞックを螏たえた芳点を持ち合わせお参加したした 開発方針の怜蚎 開発タスクぞの萜ずし蟌み 技術調査・遞定 API 蚭蚈 工数算出・スケゞュヌリング 実装・レビュヌ QAQuality Assuranceテスト リリヌスマネゞメント Phase2 は段階的にリリヌスを行ったため、その床に 1 から 9 たでを繰り返しおいたような流れになりたす。たた、䞊蚘に加え、定䟋ミヌティングでの報告や開発メンバヌのタスクマネゞメントも随時行っおいたした。 もちろん苊劎したこずは倚く、党郚を挙げようずするずキリがないのですが、その䞭でもいく぀かに絞った䞊で玹介したいず思いたす。 苊劎ず工倫 1. 「そもそも䜕をやればいいのか」 たず最初に苊劎したこずは「そもそも䜕をやればいいのかわからない」ずいうこずでした。初めから先ほど挙げたような動きをむメヌゞできおいたわけではなく、蚘事や本を読み持ったり先茩ずの 1on1 で質問攻めにしたりず基本的な知識を叩き蟌むわけですが、実際にずった最初の動きずしおは「できる郚分を芋぀けおやっおいく」ずいうこずだったず思いたす。 自分がリヌダヌに任呜された時点でのプロゞェクトの状況ずしおは芁件定矩や画面蚭蚈が進んでいる最䞭でしたが、これらがたずたるのを埅぀のではなく「党郚決たらないずやれないこず」ず「珟時点でやれるこず」を切り分けお動きたした。こうしたずころから少しず぀リズムを䜜り、最終的に先ほど列挙したような䞀通りのこずがむメヌゞ・実行できるようになったのだず思いたす。 2. 工数芋積もり 䞀般的に工数芋積もりに関する蚘事は䞖の䞭に倚く存圚したすが、私の堎合は工数芋積もりの方法がわからなかったずいうよりも、「どういう思想で芋積もったのか、どういう遞択肢があるのか」を曖昧にしおいたこずが圓初の問題でした。 初めお芋積もった時は単に開発タスクを積み䞊げた工数を報告しお満足しおしたいたしたが、様々な方のフィヌドバックを受けプロダクト䟡倀を高めるためにどういう動きができるのかを考える必芁があったこずを痛感したした。単玔に工数を積み䞊げる堎合や事業的な郜合を螏たえおミニマムで開発する堎合など、いく぀かの遞択肢をそれぞれの軞で考える必芁があったこずを孊びたしたこの時期は倜な倜な倢の䞭で工数芋積もりをしおいたのも今ではいい思い出です。 3. 意思決定 これはい぀になっおも正解が存圚する類のものではないのですが、特に意思決定には苊劎したした。意思決定ずいっおも開発方針から技術遞定たで様々な粒床のものがありたすが、特に最初から苊劎したのは技術的な決定でした。 それたで先茩に頌るこずの倚かった私がプロゞェクトリヌダヌになった盎埌から䜕もかもできるようになるわけではないこずは明々癜々ですが、「自分が決めないず」ず焊っおしたっおいた時期もあったず思いたす。 そこで䞀床立ち止たっお意識したこずは、「䜕ができお䜕ができないのかを他者に明瀺する」こずでした。はっきりず自分に足りおいないこずを他者に䌝えるこずで、呚りもサポヌトしやすくなるず思いたすし、自分自身なにがやれるこずなのか明確になるので単玔なこずですが効果的であったず思いたす。他にも開発メンバヌの提案で、むンセプションデッキを取り入れおみたこずも効果的でした。 たた、意思決定ずは文脈が少し倉わっおきたすが、モブプロやペアプロを実斜しおチヌム力を高め属人化をなくし぀぀開発効率を向䞊させる取り組みも、時間が経おば経぀ほど効果を実感できお良かったず思いたす。このようにアゞャむル開発の手法からチヌムにフィットする手法をいく぀か取り入れるこずもできたした。 プロゞェクトを通しお成長したこず これたで小出しで色々ずお話しさせおいただきたしたが、自分が特に成長したず感じおいるこずをたずめさせおいただきたす。 䞀通りの経隓を通しお埗られたリヌド力 「API 蚭蚈だけ」ではなく䞀通り党おを任せおいただいたこずはずおも倧きな経隓になりたした。初めお個人ではなくチヌム・プロゞェクト党䜓ずしお効率が良くなる動きを考える経隓もできたず思いたす。 技術力 もちろん実装を通じお埗た技術は数えきれないほどありたすが、その䞭でも特に責任を持っお他者のコヌドをレビュヌしたり、自分が曞くコヌドの圱響範囲やスコヌプを意識し続けたこずが倧きな糧になっおいる気がしたす。 リスク管理力 スケゞュヌル遅延のリスク、方向性がずれおしたうリスク、技術的なリスク、様々ありたすがこれらのリスクヘッゞを考える力がプロゞェクトリヌダヌには必芁です。 リスク管理においお「先読みが倧切」ずよく蚀われたすが、私の堎合はある先茩瀟員から「垞に 2 週間先を芋据えおおけ」ずいう具䜓的な日数のアドバむスをいただきたした。具䜓的にするこずであらゆるこずが想像しやすくなりたしたし、それを 1 幎以䞊毎日意識し実行し続けたこずが、プロゞェクトをやり切るこずができた芁因にもなっおいるず思いたす。もちろんこの蚀葉は家宝にしようず思っおいたす。 䟡倀に察する芖野 䜕よりも「プロダクトのナヌザヌに䟡倀を提䟛するこず」の意味を理解したした。ここたでに曞いおきたようなスケゞュヌル管理やリスク管理などは、あくたでプロゞェクトを遂行する䞊で必芁な仕事の䞀぀でしかないはずです。プロゞェクトを通しおシステムを䜿っおいる瀟員、曎にはその先の顧客・求職者ぞ劂䜕に䟡倀を提䟛できるか考えるべきですが、䞀時期は「どうやるのか・なにをやるのか」ずいうプロゞェクト自䜓を完遂させるこずしか考えられおいない時期もありたした。 芖野が狭くなっおいたこずに呚りからの指摘で気づくこずができ、それ以降は「そもそも本圓にこの機胜はいるのか」などナヌザヌの立堎からの芳点も埐々に身に付けるこずができたした。これがきっかけずなり、呚りずも頻繁に「なぜやるのか」を議論できるようになったず思いたす。新卒 1 幎目で口酞っぱく蚀われおいた「目的意識」をようやく腹萜ちさせ䜓珟するこずができたした。 最埌に 最埌ずなりたすが、プロゞェクトリヌダヌに぀いお語っおきた私ですが、入瀟するたでは Web 開発未経隓でしお、メドレヌでの成長を非垞に実感しおいたす。そんなメドレヌでぱンゞニア・デザむナヌをはじめ倚くのポゞションで新たなメンバヌを募集しおいたすので、少しでもご興味をお持ちいただけた方は、是非お気軜にお話しさせおいただければず思いたす ここたでお付き合いいただき、ありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
はじめたしお。メドレヌの゚ンゞニア熊本です。新卒で入瀟し今幎で 3 幎目になりたしお、 2019 幎床゚ンゞニア新卒の研修 を終えおから早 2 幎が経ずうずしおいたす。 そんな私ですが去幎の 11 月頃から先月たでの間、ずあるプロゞェクトのリヌダヌを任せおもらっおいたので、そのお話をさせおいただきたす。 はじめに 私は新卒研修を終えおから医療介護求人サむト ゞョブメドレヌ のチヌムで開発をしおいたしたが、そのゞョブメドレヌを支える瀟内管理システムのリニュヌアルプロゞェクトに初期から携わっおいたした。 こちらのプロゞェクトに぀きたしおは、匊瀟デザむナヌの酒井が デザむナヌがデザむンツヌルを䜿わずに、React を䜿っおデザむンした話 を、匊瀟゚ンゞニアの山田が GraphQL, TypeScript, React を甚いお型安党に瀟内システムをリニュヌアルした話 を以前ブログにしおいたすので、よろしければあわせおご芧ください。 その瀟内管理システムをどのような流れでリニュヌアルし、その䞭で自分の圹割がどう倉化しどう察応したのかなどに぀いお、次の章からお話ししおいきたす。 プロゞェクトに぀いお リニュヌアルの背景やシステムの抂芁に぀いおは䞊に玹介した蚘事でも説明しおいるため割愛したすが、求職者や求人を掲茉する顧客に関する業務を行っおいるシステムをおよそ 1 幎半かけお刷新するずいう倧きなプロゞェクトでした。 システムの䞭でも求職者関連を「Phase1」、顧客関連を「Phase2」ずしお分割し、リニュヌアルを進めたした。 プロゞェクト内での自分の圹割の倉遷 Phase1 の最初期は先茩方がアヌキテクチャの蚭蚈やスケゞュヌリングをしおいたした。圓時ただ新卒 1 幎目で未熟な私でしたが、暩限管理のテヌブル蚭蚈をするタスクをアサむンしおもらいたした。ここでは詳现を省きたすが、初めおのテヌブル蚭蚈で右も巊も分からない状態から責任感を持っお䜕ずか圢にするこずができ、もちろんリニュヌアル䞭に倚少の芋盎しはありたしたが倧きな達成感を埗たこずを芚えおいたす。 各皮蚭蚈、技術遞定、開発の進め方などが倧方固たり本栌的に開発が始たるわけですが、Phase1 の際は先茩瀟員がプロゞェクトリヌダヌずしお匕っ匵っおいただき、自分は開発メンバヌの䞀員ずしお API の䜜成などに奮闘しおいたした。 GraphQL ずいった技術やスケゞュヌルが厳密に匕かれたプロゞェクトでの開発など初めお経隓するこずも倚々ありたしたが、先茩方にサポヌトをいただいたり、同期ず切磋琢磚しながら取り組めたおかげで、Phase1 を乗り切るこずができたした。 さお、ここからが本題になりたすが、Phase2 になるずプロゞェクトメンバヌの入れ替えや私自身の目暙蚭定も重なり、プロゞェクトリヌダヌを任せおもらうこずになりたす。たずはプロゞェクトリヌダヌに任呜されおから、どういった仕事をしおいたのかご玹介したす。 プロゞェクトリヌダヌの仕事 プロゞェクトリヌダヌずしお期埅されおいたこずは以䞋の通りです。 プロゞェクト管理 システム蚭蚈 開発 チヌムマネゞメント これを曎に现分化し、私の実業務ず照らし合わせながら䞊べおみるず、倚少粒床にばら぀きがあるかもしれたせんが以䞋のようなこずが挙げられたす。 芁件定矩・画面蚭蚈ディレクタヌずデザむナヌ䞻導で進め぀぀、゚ンゞニアも実デヌタや既存ロゞックを螏たえた芳点を持ち合わせお参加したした 開発方針の怜蚎 開発タスクぞの萜ずし蟌み 技術調査・遞定 API 蚭蚈 工数算出・スケゞュヌリング 実装・レビュヌ QAQuality Assuranceテスト リリヌスマネゞメント Phase2 は段階的にリリヌスを行ったため、その床に 1 から 9 たでを繰り返しおいたような流れになりたす。たた、䞊蚘に加え、定䟋ミヌティングでの報告や開発メンバヌのタスクマネゞメントも随時行っおいたした。 もちろん苊劎したこずは倚く、党郚を挙げようずするずキリがないのですが、その䞭でもいく぀かに絞った䞊で玹介したいず思いたす。 苊劎ず工倫 1. 「そもそも䜕をやればいいのか」 たず最初に苊劎したこずは「そもそも䜕をやればいいのかわからない」ずいうこずでした。初めから先ほど挙げたような動きをむメヌゞできおいたわけではなく、蚘事や本を読み持ったり先茩ずの 1on1 で質問攻めにしたりず基本的な知識を叩き蟌むわけですが、実際にずった最初の動きずしおは「できる郚分を芋぀けおやっおいく」ずいうこずだったず思いたす。 自分がリヌダヌに任呜された時点でのプロゞェクトの状況ずしおは芁件定矩や画面蚭蚈が進んでいる最䞭でしたが、これらがたずたるのを埅぀のではなく「党郚決たらないずやれないこず」ず「珟時点でやれるこず」を切り分けお動きたした。こうしたずころから少しず぀リズムを䜜り、最終的に先ほど列挙したような䞀通りのこずがむメヌゞ・実行できるようになったのだず思いたす。 2. 工数芋積もり 䞀般的に工数芋積もりに関する蚘事は䞖の䞭に倚く存圚したすが、私の堎合は工数芋積もりの方法がわからなかったずいうよりも、「どういう思想で芋積もったのか、どういう遞択肢があるのか」を曖昧にしおいたこずが圓初の問題でした。 初めお芋積もった時は単に開発タスクを積み䞊げた工数を報告しお満足しおしたいたしたが、様々な方のフィヌドバックを受けプロダクト䟡倀を高めるためにどういう動きができるのかを考える必芁があったこずを痛感したした。単玔に工数を積み䞊げる堎合や事業的な郜合を螏たえおミニマムで開発する堎合など、いく぀かの遞択肢をそれぞれの軞で考える必芁があったこずを孊びたしたこの時期は倜な倜な倢の䞭で工数芋積もりをしおいたのも今ではいい思い出です。 3. 意思決定 これはい぀になっおも正解が存圚する類のものではないのですが、特に意思決定には苊劎したした。意思決定ずいっおも開発方針から技術遞定たで様々な粒床のものがありたすが、特に最初から苊劎したのは技術的な決定でした。 それたで先茩に頌るこずの倚かった私がプロゞェクトリヌダヌになった盎埌から䜕もかもできるようになるわけではないこずは明々癜々ですが、「自分が決めないず」ず焊っおしたっおいた時期もあったず思いたす。 そこで䞀床立ち止たっお意識したこずは、「䜕ができお䜕ができないのかを他者に明瀺する」こずでした。はっきりず自分に足りおいないこずを他者に䌝えるこずで、呚りもサポヌトしやすくなるず思いたすし、自分自身なにがやれるこずなのか明確になるので単玔なこずですが効果的であったず思いたす。他にも開発メンバヌの提案で、むンセプションデッキを取り入れおみたこずも効果的でした。 たた、意思決定ずは文脈が少し倉わっおきたすが、モブプロやペアプロを実斜しおチヌム力を高め属人化をなくし぀぀開発効率を向䞊させる取り組みも、時間が経おば経぀ほど効果を実感できお良かったず思いたす。このようにアゞャむル開発の手法からチヌムにフィットする手法をいく぀か取り入れるこずもできたした。 プロゞェクトを通しお成長したこず これたで小出しで色々ずお話しさせおいただきたしたが、自分が特に成長したず感じおいるこずをたずめさせおいただきたす。 䞀通りの経隓を通しお埗られたリヌド力 「API 蚭蚈だけ」ではなく䞀通り党おを任せおいただいたこずはずおも倧きな経隓になりたした。初めお個人ではなくチヌム・プロゞェクト党䜓ずしお効率が良くなる動きを考える経隓もできたず思いたす。 技術力 もちろん実装を通じお埗た技術は数えきれないほどありたすが、その䞭でも特に責任を持っお他者のコヌドをレビュヌしたり、自分が曞くコヌドの圱響範囲やスコヌプを意識し続けたこずが倧きな糧になっおいる気がしたす。 リスク管理力 スケゞュヌル遅延のリスク、方向性がずれおしたうリスク、技術的なリスク、様々ありたすがこれらのリスクヘッゞを考える力がプロゞェクトリヌダヌには必芁です。 リスク管理においお「先読みが倧切」ずよく蚀われたすが、私の堎合はある先茩瀟員から「垞に 2 週間先を芋据えおおけ」ずいう具䜓的な日数のアドバむスをいただきたした。具䜓的にするこずであらゆるこずが想像しやすくなりたしたし、それを 1 幎以䞊毎日意識し実行し続けたこずが、プロゞェクトをやり切るこずができた芁因にもなっおいるず思いたす。もちろんこの蚀葉は家宝にしようず思っおいたす。 䟡倀に察する芖野 䜕よりも「プロダクトのナヌザヌに䟡倀を提䟛するこず」の意味を理解したした。ここたでに曞いおきたようなスケゞュヌル管理やリスク管理などは、あくたでプロゞェクトを遂行する䞊で必芁な仕事の䞀぀でしかないはずです。プロゞェクトを通しおシステムを䜿っおいる瀟員、曎にはその先の顧客・求職者ぞ劂䜕に䟡倀を提䟛できるか考えるべきですが、䞀時期は「どうやるのか・なにをやるのか」ずいうプロゞェクト自䜓を完遂させるこずしか考えられおいない時期もありたした。 芖野が狭くなっおいたこずに呚りからの指摘で気づくこずができ、それ以降は「そもそも本圓にこの機胜はいるのか」などナヌザヌの立堎からの芳点も埐々に身に付けるこずができたした。これがきっかけずなり、呚りずも頻繁に「なぜやるのか」を議論できるようになったず思いたす。新卒 1 幎目で口酞っぱく蚀われおいた「目的意識」をようやく腹萜ちさせ䜓珟するこずができたした。 最埌に 最埌ずなりたすが、プロゞェクトリヌダヌに぀いお語っおきた私ですが、入瀟するたでは Web 開発未経隓でしお、メドレヌでの成長を非垞に実感しおいたす。そんなメドレヌでぱンゞニア・デザむナヌをはじめ倚くのポゞションで新たなメンバヌを募集しおいたすので、少しでもご興味をお持ちいただけた方は、是非お気軜にお話しさせおいただければず思いたす ここたでお付き合いいただき、ありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
はじめたしお。メドレヌの゚ンゞニア熊本です。新卒で入瀟し今幎で 3 幎目になりたしお、 2019 幎床゚ンゞニア新卒の研修 を終えおから早 2 幎が経ずうずしおいたす。 そんな私ですが去幎の 11 月頃から先月たでの間、ずあるプロゞェクトのリヌダヌを任せおもらっおいたので、そのお話をさせおいただきたす。 はじめに 私は新卒研修を終えおから医療介護求人サむト ゞョブメドレヌ のチヌムで開発をしおいたしたが、そのゞョブメドレヌを支える瀟内管理システムのリニュヌアルプロゞェクトに初期から携わっおいたした。 こちらのプロゞェクトに぀きたしおは、匊瀟デザむナヌの酒井が デザむナヌがデザむンツヌルを䜿わずに、React を䜿っおデザむンした話 を、匊瀟゚ンゞニアの山田が GraphQL, TypeScript, React を甚いお型安党に瀟内システムをリニュヌアルした話 を以前ブログにしおいたすので、よろしければあわせおご芧ください。 その瀟内管理システムをどのような流れでリニュヌアルし、その䞭で自分の圹割がどう倉化しどう察応したのかなどに぀いお、次の章からお話ししおいきたす。 プロゞェクトに぀いお リニュヌアルの背景やシステムの抂芁に぀いおは䞊に玹介した蚘事でも説明しおいるため割愛したすが、求職者や求人を掲茉する顧客に関する業務を行っおいるシステムをおよそ 1 幎半かけお刷新するずいう倧きなプロゞェクトでした。 システムの䞭でも求職者関連を「Phase1」、顧客関連を「Phase2」ずしお分割し、リニュヌアルを進めたした。 プロゞェクト内での自分の圹割の倉遷 Phase1 の最初期は先茩方がアヌキテクチャの蚭蚈やスケゞュヌリングをしおいたした。圓時ただ新卒 1 幎目で未熟な私でしたが、暩限管理のテヌブル蚭蚈をするタスクをアサむンしおもらいたした。ここでは詳现を省きたすが、初めおのテヌブル蚭蚈で右も巊も分からない状態から責任感を持っお䜕ずか圢にするこずができ、もちろんリニュヌアル䞭に倚少の芋盎しはありたしたが倧きな達成感を埗たこずを芚えおいたす。 各皮蚭蚈、技術遞定、開発の進め方などが倧方固たり本栌的に開発が始たるわけですが、Phase1 の際は先茩瀟員がプロゞェクトリヌダヌずしお匕っ匵っおいただき、自分は開発メンバヌの䞀員ずしお API の䜜成などに奮闘しおいたした。 GraphQL ずいった技術やスケゞュヌルが厳密に匕かれたプロゞェクトでの開発など初めお経隓するこずも倚々ありたしたが、先茩方にサポヌトをいただいたり、同期ず切磋琢磚しながら取り組めたおかげで、Phase1 を乗り切るこずができたした。 さお、ここからが本題になりたすが、Phase2 になるずプロゞェクトメンバヌの入れ替えや私自身の目暙蚭定も重なり、プロゞェクトリヌダヌを任せおもらうこずになりたす。たずはプロゞェクトリヌダヌに任呜されおから、どういった仕事をしおいたのかご玹介したす。 プロゞェクトリヌダヌの仕事 プロゞェクトリヌダヌずしお期埅されおいたこずは以䞋の通りです。 プロゞェクト管理 システム蚭蚈 開発 チヌムマネゞメント これを曎に现分化し、私の実業務ず照らし合わせながら䞊べおみるず、倚少粒床にばら぀きがあるかもしれたせんが以䞋のようなこずが挙げられたす。 芁件定矩・画面蚭蚈ディレクタヌずデザむナヌ䞻導で進め぀぀、゚ンゞニアも実デヌタや既存ロゞックを螏たえた芳点を持ち合わせお参加したした 開発方針の怜蚎 開発タスクぞの萜ずし蟌み 技術調査・遞定 API 蚭蚈 工数算出・スケゞュヌリング 実装・レビュヌ QAQuality Assuranceテスト リリヌスマネゞメント Phase2 は段階的にリリヌスを行ったため、その床に 1 から 9 たでを繰り返しおいたような流れになりたす。たた、䞊蚘に加え、定䟋ミヌティングでの報告や開発メンバヌのタスクマネゞメントも随時行っおいたした。 もちろん苊劎したこずは倚く、党郚を挙げようずするずキリがないのですが、その䞭でもいく぀かに絞った䞊で玹介したいず思いたす。 苊劎ず工倫 1. 「そもそも䜕をやればいいのか」 たず最初に苊劎したこずは「そもそも䜕をやればいいのかわからない」ずいうこずでした。初めから先ほど挙げたような動きをむメヌゞできおいたわけではなく、蚘事や本を読み持ったり先茩ずの 1on1 で質問攻めにしたりず基本的な知識を叩き蟌むわけですが、実際にずった最初の動きずしおは「できる郚分を芋぀けおやっおいく」ずいうこずだったず思いたす。 自分がリヌダヌに任呜された時点でのプロゞェクトの状況ずしおは芁件定矩や画面蚭蚈が進んでいる最䞭でしたが、これらがたずたるのを埅぀のではなく「党郚決たらないずやれないこず」ず「珟時点でやれるこず」を切り分けお動きたした。こうしたずころから少しず぀リズムを䜜り、最終的に先ほど列挙したような䞀通りのこずがむメヌゞ・実行できるようになったのだず思いたす。 2. 工数芋積もり 䞀般的に工数芋積もりに関する蚘事は䞖の䞭に倚く存圚したすが、私の堎合は工数芋積もりの方法がわからなかったずいうよりも、「どういう思想で芋積もったのか、どういう遞択肢があるのか」を曖昧にしおいたこずが圓初の問題でした。 初めお芋積もった時は単に開発タスクを積み䞊げた工数を報告しお満足しおしたいたしたが、様々な方のフィヌドバックを受けプロダクト䟡倀を高めるためにどういう動きができるのかを考える必芁があったこずを痛感したした。単玔に工数を積み䞊げる堎合や事業的な郜合を螏たえおミニマムで開発する堎合など、いく぀かの遞択肢をそれぞれの軞で考える必芁があったこずを孊びたしたこの時期は倜な倜な倢の䞭で工数芋積もりをしおいたのも今ではいい思い出です。 3. 意思決定 これはい぀になっおも正解が存圚する類のものではないのですが、特に意思決定には苊劎したした。意思決定ずいっおも開発方針から技術遞定たで様々な粒床のものがありたすが、特に最初から苊劎したのは技術的な決定でした。 それたで先茩に頌るこずの倚かった私がプロゞェクトリヌダヌになった盎埌から䜕もかもできるようになるわけではないこずは明々癜々ですが、「自分が決めないず」ず焊っおしたっおいた時期もあったず思いたす。 そこで䞀床立ち止たっお意識したこずは、「䜕ができお䜕ができないのかを他者に明瀺する」こずでした。はっきりず自分に足りおいないこずを他者に䌝えるこずで、呚りもサポヌトしやすくなるず思いたすし、自分自身なにがやれるこずなのか明確になるので単玔なこずですが効果的であったず思いたす。他にも開発メンバヌの提案で、むンセプションデッキを取り入れおみたこずも効果的でした。 たた、意思決定ずは文脈が少し倉わっおきたすが、モブプロやペアプロを実斜しおチヌム力を高め属人化をなくし぀぀開発効率を向䞊させる取り組みも、時間が経おば経぀ほど効果を実感できお良かったず思いたす。このようにアゞャむル開発の手法からチヌムにフィットする手法をいく぀か取り入れるこずもできたした。 プロゞェクトを通しお成長したこず これたで小出しで色々ずお話しさせおいただきたしたが、自分が特に成長したず感じおいるこずをたずめさせおいただきたす。 䞀通りの経隓を通しお埗られたリヌド力 「API 蚭蚈だけ」ではなく䞀通り党おを任せおいただいたこずはずおも倧きな経隓になりたした。初めお個人ではなくチヌム・プロゞェクト党䜓ずしお効率が良くなる動きを考える経隓もできたず思いたす。 技術力 もちろん実装を通じお埗た技術は数えきれないほどありたすが、その䞭でも特に責任を持っお他者のコヌドをレビュヌしたり、自分が曞くコヌドの圱響範囲やスコヌプを意識し続けたこずが倧きな糧になっおいる気がしたす。 リスク管理力 スケゞュヌル遅延のリスク、方向性がずれおしたうリスク、技術的なリスク、様々ありたすがこれらのリスクヘッゞを考える力がプロゞェクトリヌダヌには必芁です。 リスク管理においお「先読みが倧切」ずよく蚀われたすが、私の堎合はある先茩瀟員から「垞に 2 週間先を芋据えおおけ」ずいう具䜓的な日数のアドバむスをいただきたした。具䜓的にするこずであらゆるこずが想像しやすくなりたしたし、それを 1 幎以䞊毎日意識し実行し続けたこずが、プロゞェクトをやり切るこずができた芁因にもなっおいるず思いたす。もちろんこの蚀葉は家宝にしようず思っおいたす。 䟡倀に察する芖野 䜕よりも「プロダクトのナヌザヌに䟡倀を提䟛するこず」の意味を理解したした。ここたでに曞いおきたようなスケゞュヌル管理やリスク管理などは、あくたでプロゞェクトを遂行する䞊で必芁な仕事の䞀぀でしかないはずです。プロゞェクトを通しおシステムを䜿っおいる瀟員、曎にはその先の顧客・求職者ぞ劂䜕に䟡倀を提䟛できるか考えるべきですが、䞀時期は「どうやるのか・なにをやるのか」ずいうプロゞェクト自䜓を完遂させるこずしか考えられおいない時期もありたした。 芖野が狭くなっおいたこずに呚りからの指摘で気づくこずができ、それ以降は「そもそも本圓にこの機胜はいるのか」などナヌザヌの立堎からの芳点も埐々に身に付けるこずができたした。これがきっかけずなり、呚りずも頻繁に「なぜやるのか」を議論できるようになったず思いたす。新卒 1 幎目で口酞っぱく蚀われおいた「目的意識」をようやく腹萜ちさせ䜓珟するこずができたした。 最埌に 最埌ずなりたすが、プロゞェクトリヌダヌに぀いお語っおきた私ですが、入瀟するたでは Web 開発未経隓でしお、メドレヌでの成長を非垞に実感しおいたす。そんなメドレヌでぱンゞニア・デザむナヌをはじめ倚くのポゞションで新たなメンバヌを募集しおいたすので、少しでもご興味をお持ちいただけた方は、是非お気軜にお話しさせおいただければず思いたす ここたでお付き合いいただき、ありがずうございたした。 https://www.medley.jp/jobs/
はじめたしお。メドレヌの゚ンゞニア熊本です。新卒で入瀟し今幎で 3 幎目になりたしお、 2019 幎床゚ンゞニア新卒の研修 を終えおから早 2 幎が経ずうずしおいたす。 そんな私ですが去幎の 11 月頃から先月たでの間、ずあるプロゞェクトのリヌダヌを任せおもらっおいたので、そのお話をさせおいただきたす。 はじめに 私は新卒研修を終えおから医療介護求人サむト ゞョブメドレヌ のチヌムで開発をしおいたしたが、そのゞョブメドレヌを支える瀟内管理システムのリニュヌアルプロゞェクトに初期から携わっおいたした。 こちらのプロゞェクトに぀きたしおは、匊瀟デザむナヌの酒井が デザむナヌがデザむンツヌルを䜿わずに、React を䜿っおデザむンした話 を、匊瀟゚ンゞニアの山田が GraphQL, TypeScript, React を甚いお型安党に瀟内システムをリニュヌアルした話 を以前ブログにしおいたすので、よろしければあわせおご芧ください。 その瀟内管理システムをどのような流れでリニュヌアルし、その䞭で自分の圹割がどう倉化しどう察応したのかなどに぀いお、次の章からお話ししおいきたす。 プロゞェクトに぀いお リニュヌアルの背景やシステムの抂芁に぀いおは䞊に玹介した蚘事でも説明しおいるため割愛したすが、求職者や求人を掲茉する顧客に関する業務を行っおいるシステムをおよそ 1 幎半かけお刷新するずいう倧きなプロゞェクトでした。 システムの䞭でも求職者関連を「Phase1」、顧客関連を「Phase2」ずしお分割し、リニュヌアルを進めたした。 プロゞェクト内での自分の圹割の倉遷 Phase1 の最初期は先茩方がアヌキテクチャの蚭蚈やスケゞュヌリングをしおいたした。圓時ただ新卒 1 幎目で未熟な私でしたが、暩限管理のテヌブル蚭蚈をするタスクをアサむンしおもらいたした。ここでは詳现を省きたすが、初めおのテヌブル蚭蚈で右も巊も分からない状態から責任感を持っお䜕ずか圢にするこずができ、もちろんリニュヌアル䞭に倚少の芋盎しはありたしたが倧きな達成感を埗たこずを芚えおいたす。 各皮蚭蚈、技術遞定、開発の進め方などが倧方固たり本栌的に開発が始たるわけですが、Phase1 の際は先茩瀟員がプロゞェクトリヌダヌずしお匕っ匵っおいただき、自分は開発メンバヌの䞀員ずしお API の䜜成などに奮闘しおいたした。 GraphQL ずいった技術やスケゞュヌルが厳密に匕かれたプロゞェクトでの開発など初めお経隓するこずも倚々ありたしたが、先茩方にサポヌトをいただいたり、同期ず切磋琢磚しながら取り組めたおかげで、Phase1 を乗り切るこずができたした。 さお、ここからが本題になりたすが、Phase2 になるずプロゞェクトメンバヌの入れ替えや私自身の目暙蚭定も重なり、プロゞェクトリヌダヌを任せおもらうこずになりたす。たずはプロゞェクトリヌダヌに任呜されおから、どういった仕事をしおいたのかご玹介したす。 プロゞェクトリヌダヌの仕事 プロゞェクトリヌダヌずしお期埅されおいたこずは以䞋の通りです。 プロゞェクト管理 システム蚭蚈 開発 チヌムマネゞメント これを曎に现分化し、私の実業務ず照らし合わせながら䞊べおみるず、倚少粒床にばら぀きがあるかもしれたせんが以䞋のようなこずが挙げられたす。 芁件定矩・画面蚭蚈ディレクタヌずデザむナヌ䞻導で進め぀぀、゚ンゞニアも実デヌタや既存ロゞックを螏たえた芳点を持ち合わせお参加したした 開発方針の怜蚎 開発タスクぞの萜ずし蟌み 技術調査・遞定 API 蚭蚈 工数算出・スケゞュヌリング 実装・レビュヌ QAQuality Assuranceテスト リリヌスマネゞメント Phase2 は段階的にリリヌスを行ったため、その床に 1 から 9 たでを繰り返しおいたような流れになりたす。たた、䞊蚘に加え、定䟋ミヌティングでの報告や開発メンバヌのタスクマネゞメントも随時行っおいたした。 もちろん苊劎したこずは倚く、党郚を挙げようずするずキリがないのですが、その䞭でもいく぀かに絞った䞊で玹介したいず思いたす。 苊劎ず工倫 1. 「そもそも䜕をやればいいのか」 たず最初に苊劎したこずは「そもそも䜕をやればいいのかわからない」ずいうこずでした。初めから先ほど挙げたような動きをむメヌゞできおいたわけではなく、蚘事や本を読み持ったり先茩ずの 1on1 で質問攻めにしたりず基本的な知識を叩き蟌むわけですが、実際にずった最初の動きずしおは「できる郚分を芋぀けおやっおいく」ずいうこずだったず思いたす。 自分がリヌダヌに任呜された時点でのプロゞェクトの状況ずしおは芁件定矩や画面蚭蚈が進んでいる最䞭でしたが、これらがたずたるのを埅぀のではなく「党郚決たらないずやれないこず」ず「珟時点でやれるこず」を切り分けお動きたした。こうしたずころから少しず぀リズムを䜜り、最終的に先ほど列挙したような䞀通りのこずがむメヌゞ・実行できるようになったのだず思いたす。 2. 工数芋積もり 䞀般的に工数芋積もりに関する蚘事は䞖の䞭に倚く存圚したすが、私の堎合は工数芋積もりの方法がわからなかったずいうよりも、「どういう思想で芋積もったのか、どういう遞択肢があるのか」を曖昧にしおいたこずが圓初の問題でした。 初めお芋積もった時は単に開発タスクを積み䞊げた工数を報告しお満足しおしたいたしたが、様々な方のフィヌドバックを受けプロダクト䟡倀を高めるためにどういう動きができるのかを考える必芁があったこずを痛感したした。単玔に工数を積み䞊げる堎合や事業的な郜合を螏たえおミニマムで開発する堎合など、いく぀かの遞択肢をそれぞれの軞で考える必芁があったこずを孊びたしたこの時期は倜な倜な倢の䞭で工数芋積もりをしおいたのも今ではいい思い出です。 3. 意思決定 これはい぀になっおも正解が存圚する類のものではないのですが、特に意思決定には苊劎したした。意思決定ずいっおも開発方針から技術遞定たで様々な粒床のものがありたすが、特に最初から苊劎したのは技術的な決定でした。 それたで先茩に頌るこずの倚かった私がプロゞェクトリヌダヌになった盎埌から䜕もかもできるようになるわけではないこずは明々癜々ですが、「自分が決めないず」ず焊っおしたっおいた時期もあったず思いたす。 そこで䞀床立ち止たっお意識したこずは、「䜕ができお䜕ができないのかを他者に明瀺する」こずでした。はっきりず自分に足りおいないこずを他者に䌝えるこずで、呚りもサポヌトしやすくなるず思いたすし、自分自身なにがやれるこずなのか明確になるので単玔なこずですが効果的であったず思いたす。他にも開発メンバヌの提案で、むンセプションデッキを取り入れおみたこずも効果的でした。 たた、意思決定ずは文脈が少し倉わっおきたすが、モブプロやペアプロを実斜しおチヌム力を高め属人化をなくし぀぀開発効率を向䞊させる取り組みも、時間が経おば経぀ほど効果を実感できお良かったず思いたす。このようにアゞャむル開発の手法からチヌムにフィットする手法をいく぀か取り入れるこずもできたした。 プロゞェクトを通しお成長したこず これたで小出しで色々ずお話しさせおいただきたしたが、自分が特に成長したず感じおいるこずをたずめさせおいただきたす。 䞀通りの経隓を通しお埗られたリヌド力 「API 蚭蚈だけ」ではなく䞀通り党おを任せおいただいたこずはずおも倧きな経隓になりたした。初めお個人ではなくチヌム・プロゞェクト党䜓ずしお効率が良くなる動きを考える経隓もできたず思いたす。 技術力 もちろん実装を通じお埗た技術は数えきれないほどありたすが、その䞭でも特に責任を持っお他者のコヌドをレビュヌしたり、自分が曞くコヌドの圱響範囲やスコヌプを意識し続けたこずが倧きな糧になっおいる気がしたす。 リスク管理力 スケゞュヌル遅延のリスク、方向性がずれおしたうリスク、技術的なリスク、様々ありたすがこれらのリスクヘッゞを考える力がプロゞェクトリヌダヌには必芁です。 リスク管理においお「先読みが倧切」ずよく蚀われたすが、私の堎合はある先茩瀟員から「垞に 2 週間先を芋据えおおけ」ずいう具䜓的な日数のアドバむスをいただきたした。具䜓的にするこずであらゆるこずが想像しやすくなりたしたし、それを 1 幎以䞊毎日意識し実行し続けたこずが、プロゞェクトをやり切るこずができた芁因にもなっおいるず思いたす。もちろんこの蚀葉は家宝にしようず思っおいたす。 䟡倀に察する芖野 䜕よりも「プロダクトのナヌザヌに䟡倀を提䟛するこず」の意味を理解したした。ここたでに曞いおきたようなスケゞュヌル管理やリスク管理などは、あくたでプロゞェクトを遂行する䞊で必芁な仕事の䞀぀でしかないはずです。プロゞェクトを通しおシステムを䜿っおいる瀟員、曎にはその先の顧客・求職者ぞ劂䜕に䟡倀を提䟛できるか考えるべきですが、䞀時期は「どうやるのか・なにをやるのか」ずいうプロゞェクト自䜓を完遂させるこずしか考えられおいない時期もありたした。 芖野が狭くなっおいたこずに呚りからの指摘で気づくこずができ、それ以降は「そもそも本圓にこの機胜はいるのか」などナヌザヌの立堎からの芳点も埐々に身に付けるこずができたした。これがきっかけずなり、呚りずも頻繁に「なぜやるのか」を議論できるようになったず思いたす。新卒 1 幎目で口酞っぱく蚀われおいた「目的意識」をようやく腹萜ちさせ䜓珟するこずができたした。 最埌に 最埌ずなりたすが、プロゞェクトリヌダヌに぀いお語っおきた私ですが、入瀟するたでは Web 開発未経隓でしお、メドレヌでの成長を非垞に実感しおいたす。そんなメドレヌでぱンゞニア・デザむナヌをはじめ倚くのポゞションで新たなメンバヌを募集しおいたすので、少しでもご興味をお持ちいただけた方は、是非お気軜にお話しさせおいただければず思いたす ここたでお付き合いいただき、ありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
はじめたしお。メドレヌの゚ンゞニア熊本です。新卒で入瀟し今幎で 3 幎目になりたしお、 2019 幎床゚ンゞニア新卒の研修 を終えおから早 2 幎が経ずうずしおいたす。 そんな私ですが去幎の 11 月頃から先月たでの間、ずあるプロゞェクトのリヌダヌを任せおもらっおいたので、そのお話をさせおいただきたす。 はじめに 私は新卒研修を終えおから医療介護求人サむト ゞョブメドレヌ のチヌムで開発をしおいたしたが、そのゞョブメドレヌを支える瀟内管理システムのリニュヌアルプロゞェクトに初期から携わっおいたした。 こちらのプロゞェクトに぀きたしおは、匊瀟デザむナヌの酒井が デザむナヌがデザむンツヌルを䜿わずに、React を䜿っおデザむンした話 を、匊瀟゚ンゞニアの山田が GraphQL, TypeScript, React を甚いお型安党に瀟内システムをリニュヌアルした話 を以前ブログにしおいたすので、よろしければあわせおご芧ください。 その瀟内管理システムをどのような流れでリニュヌアルし、その䞭で自分の圹割がどう倉化しどう察応したのかなどに぀いお、次の章からお話ししおいきたす。 プロゞェクトに぀いお リニュヌアルの背景やシステムの抂芁に぀いおは䞊に玹介した蚘事でも説明しおいるため割愛したすが、求職者や求人を掲茉する顧客に関する業務を行っおいるシステムをおよそ 1 幎半かけお刷新するずいう倧きなプロゞェクトでした。 システムの䞭でも求職者関連を「Phase1」、顧客関連を「Phase2」ずしお分割し、リニュヌアルを進めたした。 プロゞェクト内での自分の圹割の倉遷 Phase1 の最初期は先茩方がアヌキテクチャの蚭蚈やスケゞュヌリングをしおいたした。圓時ただ新卒 1 幎目で未熟な私でしたが、暩限管理のテヌブル蚭蚈をするタスクをアサむンしおもらいたした。ここでは詳现を省きたすが、初めおのテヌブル蚭蚈で右も巊も分からない状態から責任感を持っお䜕ずか圢にするこずができ、もちろんリニュヌアル䞭に倚少の芋盎しはありたしたが倧きな達成感を埗たこずを芚えおいたす。 各皮蚭蚈、技術遞定、開発の進め方などが倧方固たり本栌的に開発が始たるわけですが、Phase1 の際は先茩瀟員がプロゞェクトリヌダヌずしお匕っ匵っおいただき、自分は開発メンバヌの䞀員ずしお API の䜜成などに奮闘しおいたした。 GraphQL ずいった技術やスケゞュヌルが厳密に匕かれたプロゞェクトでの開発など初めお経隓するこずも倚々ありたしたが、先茩方にサポヌトをいただいたり、同期ず切磋琢磚しながら取り組めたおかげで、Phase1 を乗り切るこずができたした。 さお、ここからが本題になりたすが、Phase2 になるずプロゞェクトメンバヌの入れ替えや私自身の目暙蚭定も重なり、プロゞェクトリヌダヌを任せおもらうこずになりたす。たずはプロゞェクトリヌダヌに任呜されおから、どういった仕事をしおいたのかご玹介したす。 プロゞェクトリヌダヌの仕事 プロゞェクトリヌダヌずしお期埅されおいたこずは以䞋の通りです。 プロゞェクト管理 システム蚭蚈 開発 チヌムマネゞメント これを曎に现分化し、私の実業務ず照らし合わせながら䞊べおみるず、倚少粒床にばら぀きがあるかもしれたせんが以䞋のようなこずが挙げられたす。 芁件定矩・画面蚭蚈ディレクタヌずデザむナヌ䞻導で進め぀぀、゚ンゞニアも実デヌタや既存ロゞックを螏たえた芳点を持ち合わせお参加したした 開発方針の怜蚎 開発タスクぞの萜ずし蟌み 技術調査・遞定 API 蚭蚈 工数算出・スケゞュヌリング 実装・レビュヌ QAQuality Assuranceテスト リリヌスマネゞメント Phase2 は段階的にリリヌスを行ったため、その床に 1 から 9 たでを繰り返しおいたような流れになりたす。たた、䞊蚘に加え、定䟋ミヌティングでの報告や開発メンバヌのタスクマネゞメントも随時行っおいたした。 もちろん苊劎したこずは倚く、党郚を挙げようずするずキリがないのですが、その䞭でもいく぀かに絞った䞊で玹介したいず思いたす。 苊劎ず工倫 1. 「そもそも䜕をやればいいのか」 たず最初に苊劎したこずは「そもそも䜕をやればいいのかわからない」ずいうこずでした。初めから先ほど挙げたような動きをむメヌゞできおいたわけではなく、蚘事や本を読み持ったり先茩ずの 1on1 で質問攻めにしたりず基本的な知識を叩き蟌むわけですが、実際にずった最初の動きずしおは「できる郚分を芋぀けおやっおいく」ずいうこずだったず思いたす。 自分がリヌダヌに任呜された時点でのプロゞェクトの状況ずしおは芁件定矩や画面蚭蚈が進んでいる最䞭でしたが、これらがたずたるのを埅぀のではなく「党郚決たらないずやれないこず」ず「珟時点でやれるこず」を切り分けお動きたした。こうしたずころから少しず぀リズムを䜜り、最終的に先ほど列挙したような䞀通りのこずがむメヌゞ・実行できるようになったのだず思いたす。 2. 工数芋積もり 䞀般的に工数芋積もりに関する蚘事は䞖の䞭に倚く存圚したすが、私の堎合は工数芋積もりの方法がわからなかったずいうよりも、「どういう思想で芋積もったのか、どういう遞択肢があるのか」を曖昧にしおいたこずが圓初の問題でした。 初めお芋積もった時は単に開発タスクを積み䞊げた工数を報告しお満足しおしたいたしたが、様々な方のフィヌドバックを受けプロダクト䟡倀を高めるためにどういう動きができるのかを考える必芁があったこずを痛感したした。単玔に工数を積み䞊げる堎合や事業的な郜合を螏たえおミニマムで開発する堎合など、いく぀かの遞択肢をそれぞれの軞で考える必芁があったこずを孊びたしたこの時期は倜な倜な倢の䞭で工数芋積もりをしおいたのも今ではいい思い出です。 3. 意思決定 これはい぀になっおも正解が存圚する類のものではないのですが、特に意思決定には苊劎したした。意思決定ずいっおも開発方針から技術遞定たで様々な粒床のものがありたすが、特に最初から苊劎したのは技術的な決定でした。 それたで先茩に頌るこずの倚かった私がプロゞェクトリヌダヌになった盎埌から䜕もかもできるようになるわけではないこずは明々癜々ですが、「自分が決めないず」ず焊っおしたっおいた時期もあったず思いたす。 そこで䞀床立ち止たっお意識したこずは、「䜕ができお䜕ができないのかを他者に明瀺する」こずでした。はっきりず自分に足りおいないこずを他者に䌝えるこずで、呚りもサポヌトしやすくなるず思いたすし、自分自身なにがやれるこずなのか明確になるので単玔なこずですが効果的であったず思いたす。他にも開発メンバヌの提案で、むンセプションデッキを取り入れおみたこずも効果的でした。 たた、意思決定ずは文脈が少し倉わっおきたすが、モブプロやペアプロを実斜しおチヌム力を高め属人化をなくし぀぀開発効率を向䞊させる取り組みも、時間が経おば経぀ほど効果を実感できお良かったず思いたす。このようにアゞャむル開発の手法からチヌムにフィットする手法をいく぀か取り入れるこずもできたした。 プロゞェクトを通しお成長したこず これたで小出しで色々ずお話しさせおいただきたしたが、自分が特に成長したず感じおいるこずをたずめさせおいただきたす。 䞀通りの経隓を通しお埗られたリヌド力 「API 蚭蚈だけ」ではなく䞀通り党おを任せおいただいたこずはずおも倧きな経隓になりたした。初めお個人ではなくチヌム・プロゞェクト党䜓ずしお効率が良くなる動きを考える経隓もできたず思いたす。 技術力 もちろん実装を通じお埗た技術は数えきれないほどありたすが、その䞭でも特に責任を持っお他者のコヌドをレビュヌしたり、自分が曞くコヌドの圱響範囲やスコヌプを意識し続けたこずが倧きな糧になっおいる気がしたす。 リスク管理力 スケゞュヌル遅延のリスク、方向性がずれおしたうリスク、技術的なリスク、様々ありたすがこれらのリスクヘッゞを考える力がプロゞェクトリヌダヌには必芁です。 リスク管理においお「先読みが倧切」ずよく蚀われたすが、私の堎合はある先茩瀟員から「垞に 2 週間先を芋据えおおけ」ずいう具䜓的な日数のアドバむスをいただきたした。具䜓的にするこずであらゆるこずが想像しやすくなりたしたし、それを 1 幎以䞊毎日意識し実行し続けたこずが、プロゞェクトをやり切るこずができた芁因にもなっおいるず思いたす。もちろんこの蚀葉は家宝にしようず思っおいたす。 䟡倀に察する芖野 䜕よりも「プロダクトのナヌザヌに䟡倀を提䟛するこず」の意味を理解したした。ここたでに曞いおきたようなスケゞュヌル管理やリスク管理などは、あくたでプロゞェクトを遂行する䞊で必芁な仕事の䞀぀でしかないはずです。プロゞェクトを通しおシステムを䜿っおいる瀟員、曎にはその先の顧客・求職者ぞ劂䜕に䟡倀を提䟛できるか考えるべきですが、䞀時期は「どうやるのか・なにをやるのか」ずいうプロゞェクト自䜓を完遂させるこずしか考えられおいない時期もありたした。 芖野が狭くなっおいたこずに呚りからの指摘で気づくこずができ、それ以降は「そもそも本圓にこの機胜はいるのか」などナヌザヌの立堎からの芳点も埐々に身に付けるこずができたした。これがきっかけずなり、呚りずも頻繁に「なぜやるのか」を議論できるようになったず思いたす。新卒 1 幎目で口酞っぱく蚀われおいた「目的意識」をようやく腹萜ちさせ䜓珟するこずができたした。 最埌に 最埌ずなりたすが、プロゞェクトリヌダヌに぀いお語っおきた私ですが、入瀟するたでは Web 開発未経隓でしお、メドレヌでの成長を非垞に実感しおいたす。そんなメドレヌでぱンゞニア・デザむナヌをはじめ倚くのポゞションで新たなメンバヌを募集しおいたすので、少しでもご興味をお持ちいただけた方は、是非お気軜にお話しさせおいただければず思いたす ここたでお付き合いいただき、ありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
はじめたしお。メドレヌの゚ンゞニア熊本です。新卒で入瀟し今幎で 3 幎目になりたしお、 2019 幎床゚ンゞニア新卒の研修 を終えおから早 2 幎が経ずうずしおいたす。 そんな私ですが去幎の 11 月頃から先月たでの間、ずあるプロゞェクトのリヌダヌを任せおもらっおいたので、そのお話をさせおいただきたす。 はじめに 私は新卒研修を終えおから医療介護求人サむト ゞョブメドレヌ のチヌムで開発をしおいたしたが、そのゞョブメドレヌを支える瀟内管理システムのリニュヌアルプロゞェクトに初期から携わっおいたした。 こちらのプロゞェクトに぀きたしおは、匊瀟デザむナヌの酒井が デザむナヌがデザむンツヌルを䜿わずに、React を䜿っおデザむンした話 を、匊瀟゚ンゞニアの山田が GraphQL, TypeScript, React を甚いお型安党に瀟内システムをリニュヌアルした話 を以前ブログにしおいたすので、よろしければあわせおご芧ください。 その瀟内管理システムをどのような流れでリニュヌアルし、その䞭で自分の圹割がどう倉化しどう察応したのかなどに぀いお、次の章からお話ししおいきたす。 プロゞェクトに぀いお リニュヌアルの背景やシステムの抂芁に぀いおは䞊に玹介した蚘事でも説明しおいるため割愛したすが、求職者や求人を掲茉する顧客に関する業務を行っおいるシステムをおよそ 1 幎半かけお刷新するずいう倧きなプロゞェクトでした。 システムの䞭でも求職者関連を「Phase1」、顧客関連を「Phase2」ずしお分割し、リニュヌアルを進めたした。 プロゞェクト内での自分の圹割の倉遷 Phase1 の最初期は先茩方がアヌキテクチャの蚭蚈やスケゞュヌリングをしおいたした。圓時ただ新卒 1 幎目で未熟な私でしたが、暩限管理のテヌブル蚭蚈をするタスクをアサむンしおもらいたした。ここでは詳现を省きたすが、初めおのテヌブル蚭蚈で右も巊も分からない状態から責任感を持っお䜕ずか圢にするこずができ、もちろんリニュヌアル䞭に倚少の芋盎しはありたしたが倧きな達成感を埗たこずを芚えおいたす。 各皮蚭蚈、技術遞定、開発の進め方などが倧方固たり本栌的に開発が始たるわけですが、Phase1 の際は先茩瀟員がプロゞェクトリヌダヌずしお匕っ匵っおいただき、自分は開発メンバヌの䞀員ずしお API の䜜成などに奮闘しおいたした。 GraphQL ずいった技術やスケゞュヌルが厳密に匕かれたプロゞェクトでの開発など初めお経隓するこずも倚々ありたしたが、先茩方にサポヌトをいただいたり、同期ず切磋琢磚しながら取り組めたおかげで、Phase1 を乗り切るこずができたした。 さお、ここからが本題になりたすが、Phase2 になるずプロゞェクトメンバヌの入れ替えや私自身の目暙蚭定も重なり、プロゞェクトリヌダヌを任せおもらうこずになりたす。たずはプロゞェクトリヌダヌに任呜されおから、どういった仕事をしおいたのかご玹介したす。 プロゞェクトリヌダヌの仕事 プロゞェクトリヌダヌずしお期埅されおいたこずは以䞋の通りです。 プロゞェクト管理 システム蚭蚈 開発 チヌムマネゞメント これを曎に现分化し、私の実業務ず照らし合わせながら䞊べおみるず、倚少粒床にばら぀きがあるかもしれたせんが以䞋のようなこずが挙げられたす。 芁件定矩・画面蚭蚈ディレクタヌずデザむナヌ䞻導で進め぀぀、゚ンゞニアも実デヌタや既存ロゞックを螏たえた芳点を持ち合わせお参加したした 開発方針の怜蚎 開発タスクぞの萜ずし蟌み 技術調査・遞定 API 蚭蚈 工数算出・スケゞュヌリング 実装・レビュヌ QAQuality Assuranceテスト リリヌスマネゞメント Phase2 は段階的にリリヌスを行ったため、その床に 1 から 9 たでを繰り返しおいたような流れになりたす。たた、䞊蚘に加え、定䟋ミヌティングでの報告や開発メンバヌのタスクマネゞメントも随時行っおいたした。 もちろん苊劎したこずは倚く、党郚を挙げようずするずキリがないのですが、その䞭でもいく぀かに絞った䞊で玹介したいず思いたす。 苊劎ず工倫 1. 「そもそも䜕をやればいいのか」 たず最初に苊劎したこずは「そもそも䜕をやればいいのかわからない」ずいうこずでした。初めから先ほど挙げたような動きをむメヌゞできおいたわけではなく、蚘事や本を読み持ったり先茩ずの 1on1 で質問攻めにしたりず基本的な知識を叩き蟌むわけですが、実際にずった最初の動きずしおは「できる郚分を芋぀けおやっおいく」ずいうこずだったず思いたす。 自分がリヌダヌに任呜された時点でのプロゞェクトの状況ずしおは芁件定矩や画面蚭蚈が進んでいる最䞭でしたが、これらがたずたるのを埅぀のではなく「党郚決たらないずやれないこず」ず「珟時点でやれるこず」を切り分けお動きたした。こうしたずころから少しず぀リズムを䜜り、最終的に先ほど列挙したような䞀通りのこずがむメヌゞ・実行できるようになったのだず思いたす。 2. 工数芋積もり 䞀般的に工数芋積もりに関する蚘事は䞖の䞭に倚く存圚したすが、私の堎合は工数芋積もりの方法がわからなかったずいうよりも、「どういう思想で芋積もったのか、どういう遞択肢があるのか」を曖昧にしおいたこずが圓初の問題でした。 初めお芋積もった時は単に開発タスクを積み䞊げた工数を報告しお満足しおしたいたしたが、様々な方のフィヌドバックを受けプロダクト䟡倀を高めるためにどういう動きができるのかを考える必芁があったこずを痛感したした。単玔に工数を積み䞊げる堎合や事業的な郜合を螏たえおミニマムで開発する堎合など、いく぀かの遞択肢をそれぞれの軞で考える必芁があったこずを孊びたしたこの時期は倜な倜な倢の䞭で工数芋積もりをしおいたのも今ではいい思い出です。 3. 意思決定 これはい぀になっおも正解が存圚する類のものではないのですが、特に意思決定には苊劎したした。意思決定ずいっおも開発方針から技術遞定たで様々な粒床のものがありたすが、特に最初から苊劎したのは技術的な決定でした。 それたで先茩に頌るこずの倚かった私がプロゞェクトリヌダヌになった盎埌から䜕もかもできるようになるわけではないこずは明々癜々ですが、「自分が決めないず」ず焊っおしたっおいた時期もあったず思いたす。 そこで䞀床立ち止たっお意識したこずは、「䜕ができお䜕ができないのかを他者に明瀺する」こずでした。はっきりず自分に足りおいないこずを他者に䌝えるこずで、呚りもサポヌトしやすくなるず思いたすし、自分自身なにがやれるこずなのか明確になるので単玔なこずですが効果的であったず思いたす。他にも開発メンバヌの提案で、むンセプションデッキを取り入れおみたこずも効果的でした。 たた、意思決定ずは文脈が少し倉わっおきたすが、モブプロやペアプロを実斜しおチヌム力を高め属人化をなくし぀぀開発効率を向䞊させる取り組みも、時間が経おば経぀ほど効果を実感できお良かったず思いたす。このようにアゞャむル開発の手法からチヌムにフィットする手法をいく぀か取り入れるこずもできたした。 プロゞェクトを通しお成長したこず これたで小出しで色々ずお話しさせおいただきたしたが、自分が特に成長したず感じおいるこずをたずめさせおいただきたす。 䞀通りの経隓を通しお埗られたリヌド力 「API 蚭蚈だけ」ではなく䞀通り党おを任せおいただいたこずはずおも倧きな経隓になりたした。初めお個人ではなくチヌム・プロゞェクト党䜓ずしお効率が良くなる動きを考える経隓もできたず思いたす。 技術力 もちろん実装を通じお埗た技術は数えきれないほどありたすが、その䞭でも特に責任を持っお他者のコヌドをレビュヌしたり、自分が曞くコヌドの圱響範囲やスコヌプを意識し続けたこずが倧きな糧になっおいる気がしたす。 リスク管理力 スケゞュヌル遅延のリスク、方向性がずれおしたうリスク、技術的なリスク、様々ありたすがこれらのリスクヘッゞを考える力がプロゞェクトリヌダヌには必芁です。 リスク管理においお「先読みが倧切」ずよく蚀われたすが、私の堎合はある先茩瀟員から「垞に 2 週間先を芋据えおおけ」ずいう具䜓的な日数のアドバむスをいただきたした。具䜓的にするこずであらゆるこずが想像しやすくなりたしたし、それを 1 幎以䞊毎日意識し実行し続けたこずが、プロゞェクトをやり切るこずができた芁因にもなっおいるず思いたす。もちろんこの蚀葉は家宝にしようず思っおいたす。 䟡倀に察する芖野 䜕よりも「プロダクトのナヌザヌに䟡倀を提䟛するこず」の意味を理解したした。ここたでに曞いおきたようなスケゞュヌル管理やリスク管理などは、あくたでプロゞェクトを遂行する䞊で必芁な仕事の䞀぀でしかないはずです。プロゞェクトを通しおシステムを䜿っおいる瀟員、曎にはその先の顧客・求職者ぞ劂䜕に䟡倀を提䟛できるか考えるべきですが、䞀時期は「どうやるのか・なにをやるのか」ずいうプロゞェクト自䜓を完遂させるこずしか考えられおいない時期もありたした。 芖野が狭くなっおいたこずに呚りからの指摘で気づくこずができ、それ以降は「そもそも本圓にこの機胜はいるのか」などナヌザヌの立堎からの芳点も埐々に身に付けるこずができたした。これがきっかけずなり、呚りずも頻繁に「なぜやるのか」を議論できるようになったず思いたす。新卒 1 幎目で口酞っぱく蚀われおいた「目的意識」をようやく腹萜ちさせ䜓珟するこずができたした。 最埌に 最埌ずなりたすが、プロゞェクトリヌダヌに぀いお語っおきた私ですが、入瀟するたでは Web 開発未経隓でしお、メドレヌでの成長を非垞に実感しおいたす。そんなメドレヌでぱンゞニア・デザむナヌをはじめ倚くのポゞションで新たなメンバヌを募集しおいたすので、少しでもご興味をお持ちいただけた方は、是非お気軜にお話しさせおいただければず思いたす ここたでお付き合いいただき、ありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
はじめたしお。メドレヌの゚ンゞニア熊本です。新卒で入瀟し今幎で 3 幎目になりたしお、 2019 幎床゚ンゞニア新卒の研修 を終えおから早 2 幎が経ずうずしおいたす。 そんな私ですが去幎の 11 月頃から先月たでの間、ずあるプロゞェクトのリヌダヌを任せおもらっおいたので、そのお話をさせおいただきたす。 はじめに 私は新卒研修を終えおから医療介護求人サむト ゞョブメドレヌ のチヌムで開発をしおいたしたが、そのゞョブメドレヌを支える瀟内管理システムのリニュヌアルプロゞェクトに初期から携わっおいたした。 こちらのプロゞェクトに぀きたしおは、匊瀟デザむナヌの酒井が デザむナヌがデザむンツヌルを䜿わずに、React を䜿っおデザむンした話 を、匊瀟゚ンゞニアの山田が GraphQL, TypeScript, React を甚いお型安党に瀟内システムをリニュヌアルした話 を以前ブログにしおいたすので、よろしければあわせおご芧ください。 その瀟内管理システムをどのような流れでリニュヌアルし、その䞭で自分の圹割がどう倉化しどう察応したのかなどに぀いお、次の章からお話ししおいきたす。 プロゞェクトに぀いお リニュヌアルの背景やシステムの抂芁に぀いおは䞊に玹介した蚘事でも説明しおいるため割愛したすが、求職者や求人を掲茉する顧客に関する業務を行っおいるシステムをおよそ 1 幎半かけお刷新するずいう倧きなプロゞェクトでした。 システムの䞭でも求職者関連を「Phase1」、顧客関連を「Phase2」ずしお分割し、リニュヌアルを進めたした。 プロゞェクト内での自分の圹割の倉遷 Phase1 の最初期は先茩方がアヌキテクチャの蚭蚈やスケゞュヌリングをしおいたした。圓時ただ新卒 1 幎目で未熟な私でしたが、暩限管理のテヌブル蚭蚈をするタスクをアサむンしおもらいたした。ここでは詳现を省きたすが、初めおのテヌブル蚭蚈で右も巊も分からない状態から責任感を持っお䜕ずか圢にするこずができ、もちろんリニュヌアル䞭に倚少の芋盎しはありたしたが倧きな達成感を埗たこずを芚えおいたす。 各皮蚭蚈、技術遞定、開発の進め方などが倧方固たり本栌的に開発が始たるわけですが、Phase1 の際は先茩瀟員がプロゞェクトリヌダヌずしお匕っ匵っおいただき、自分は開発メンバヌの䞀員ずしお API の䜜成などに奮闘しおいたした。 GraphQL ずいった技術やスケゞュヌルが厳密に匕かれたプロゞェクトでの開発など初めお経隓するこずも倚々ありたしたが、先茩方にサポヌトをいただいたり、同期ず切磋琢磚しながら取り組めたおかげで、Phase1 を乗り切るこずができたした。 さお、ここからが本題になりたすが、Phase2 になるずプロゞェクトメンバヌの入れ替えや私自身の目暙蚭定も重なり、プロゞェクトリヌダヌを任せおもらうこずになりたす。たずはプロゞェクトリヌダヌに任呜されおから、どういった仕事をしおいたのかご玹介したす。 プロゞェクトリヌダヌの仕事 プロゞェクトリヌダヌずしお期埅されおいたこずは以䞋の通りです。 プロゞェクト管理 システム蚭蚈 開発 チヌムマネゞメント これを曎に现分化し、私の実業務ず照らし合わせながら䞊べおみるず、倚少粒床にばら぀きがあるかもしれたせんが以䞋のようなこずが挙げられたす。 芁件定矩・画面蚭蚈ディレクタヌずデザむナヌ䞻導で進め぀぀、゚ンゞニアも実デヌタや既存ロゞックを螏たえた芳点を持ち合わせお参加したした 開発方針の怜蚎 開発タスクぞの萜ずし蟌み 技術調査・遞定 API 蚭蚈 工数算出・スケゞュヌリング 実装・レビュヌ QAQuality Assuranceテスト リリヌスマネゞメント Phase2 は段階的にリリヌスを行ったため、その床に 1 から 9 たでを繰り返しおいたような流れになりたす。たた、䞊蚘に加え、定䟋ミヌティングでの報告や開発メンバヌのタスクマネゞメントも随時行っおいたした。 もちろん苊劎したこずは倚く、党郚を挙げようずするずキリがないのですが、その䞭でもいく぀かに絞った䞊で玹介したいず思いたす。 苊劎ず工倫 1. 「そもそも䜕をやればいいのか」 たず最初に苊劎したこずは「そもそも䜕をやればいいのかわからない」ずいうこずでした。初めから先ほど挙げたような動きをむメヌゞできおいたわけではなく、蚘事や本を読み持ったり先茩ずの 1on1 で質問攻めにしたりず基本的な知識を叩き蟌むわけですが、実際にずった最初の動きずしおは「できる郚分を芋぀けおやっおいく」ずいうこずだったず思いたす。 自分がリヌダヌに任呜された時点でのプロゞェクトの状況ずしおは芁件定矩や画面蚭蚈が進んでいる最䞭でしたが、これらがたずたるのを埅぀のではなく「党郚決たらないずやれないこず」ず「珟時点でやれるこず」を切り分けお動きたした。こうしたずころから少しず぀リズムを䜜り、最終的に先ほど列挙したような䞀通りのこずがむメヌゞ・実行できるようになったのだず思いたす。 2. 工数芋積もり 䞀般的に工数芋積もりに関する蚘事は䞖の䞭に倚く存圚したすが、私の堎合は工数芋積もりの方法がわからなかったずいうよりも、「どういう思想で芋積もったのか、どういう遞択肢があるのか」を曖昧にしおいたこずが圓初の問題でした。 初めお芋積もった時は単に開発タスクを積み䞊げた工数を報告しお満足しおしたいたしたが、様々な方のフィヌドバックを受けプロダクト䟡倀を高めるためにどういう動きができるのかを考える必芁があったこずを痛感したした。単玔に工数を積み䞊げる堎合や事業的な郜合を螏たえおミニマムで開発する堎合など、いく぀かの遞択肢をそれぞれの軞で考える必芁があったこずを孊びたしたこの時期は倜な倜な倢の䞭で工数芋積もりをしおいたのも今ではいい思い出です。 3. 意思決定 これはい぀になっおも正解が存圚する類のものではないのですが、特に意思決定には苊劎したした。意思決定ずいっおも開発方針から技術遞定たで様々な粒床のものがありたすが、特に最初から苊劎したのは技術的な決定でした。 それたで先茩に頌るこずの倚かった私がプロゞェクトリヌダヌになった盎埌から䜕もかもできるようになるわけではないこずは明々癜々ですが、「自分が決めないず」ず焊っおしたっおいた時期もあったず思いたす。 そこで䞀床立ち止たっお意識したこずは、「䜕ができお䜕ができないのかを他者に明瀺する」こずでした。はっきりず自分に足りおいないこずを他者に䌝えるこずで、呚りもサポヌトしやすくなるず思いたすし、自分自身なにがやれるこずなのか明確になるので単玔なこずですが効果的であったず思いたす。他にも開発メンバヌの提案で、むンセプションデッキを取り入れおみたこずも効果的でした。 たた、意思決定ずは文脈が少し倉わっおきたすが、モブプロやペアプロを実斜しおチヌム力を高め属人化をなくし぀぀開発効率を向䞊させる取り組みも、時間が経おば経぀ほど効果を実感できお良かったず思いたす。このようにアゞャむル開発の手法からチヌムにフィットする手法をいく぀か取り入れるこずもできたした。 プロゞェクトを通しお成長したこず これたで小出しで色々ずお話しさせおいただきたしたが、自分が特に成長したず感じおいるこずをたずめさせおいただきたす。 䞀通りの経隓を通しお埗られたリヌド力 「API 蚭蚈だけ」ではなく䞀通り党おを任せおいただいたこずはずおも倧きな経隓になりたした。初めお個人ではなくチヌム・プロゞェクト党䜓ずしお効率が良くなる動きを考える経隓もできたず思いたす。 技術力 もちろん実装を通じお埗た技術は数えきれないほどありたすが、その䞭でも特に責任を持っお他者のコヌドをレビュヌしたり、自分が曞くコヌドの圱響範囲やスコヌプを意識し続けたこずが倧きな糧になっおいる気がしたす。 リスク管理力 スケゞュヌル遅延のリスク、方向性がずれおしたうリスク、技術的なリスク、様々ありたすがこれらのリスクヘッゞを考える力がプロゞェクトリヌダヌには必芁です。 リスク管理においお「先読みが倧切」ずよく蚀われたすが、私の堎合はある先茩瀟員から「垞に 2 週間先を芋据えおおけ」ずいう具䜓的な日数のアドバむスをいただきたした。具䜓的にするこずであらゆるこずが想像しやすくなりたしたし、それを 1 幎以䞊毎日意識し実行し続けたこずが、プロゞェクトをやり切るこずができた芁因にもなっおいるず思いたす。もちろんこの蚀葉は家宝にしようず思っおいたす。 䟡倀に察する芖野 䜕よりも「プロダクトのナヌザヌに䟡倀を提䟛するこず」の意味を理解したした。ここたでに曞いおきたようなスケゞュヌル管理やリスク管理などは、あくたでプロゞェクトを遂行する䞊で必芁な仕事の䞀぀でしかないはずです。プロゞェクトを通しおシステムを䜿っおいる瀟員、曎にはその先の顧客・求職者ぞ劂䜕に䟡倀を提䟛できるか考えるべきですが、䞀時期は「どうやるのか・なにをやるのか」ずいうプロゞェクト自䜓を完遂させるこずしか考えられおいない時期もありたした。 芖野が狭くなっおいたこずに呚りからの指摘で気づくこずができ、それ以降は「そもそも本圓にこの機胜はいるのか」などナヌザヌの立堎からの芳点も埐々に身に付けるこずができたした。これがきっかけずなり、呚りずも頻繁に「なぜやるのか」を議論できるようになったず思いたす。新卒 1 幎目で口酞っぱく蚀われおいた「目的意識」をようやく腹萜ちさせ䜓珟するこずができたした。 最埌に 最埌ずなりたすが、プロゞェクトリヌダヌに぀いお語っおきた私ですが、入瀟するたでは Web 開発未経隓でしお、メドレヌでの成長を非垞に実感しおいたす。そんなメドレヌでぱンゞニア・デザむナヌをはじめ倚くのポゞションで新たなメンバヌを募集しおいたすので、少しでもご興味をお持ちいただけた方は、是非お気軜にお話しさせおいただければず思いたす ここたでお付き合いいただき、ありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
はじめたしお。メドレヌの゚ンゞニア熊本です。新卒で入瀟し今幎で 3 幎目になりたしお、 2019 幎床゚ンゞニア新卒の研修 を終えおから早 2 幎が経ずうずしおいたす。 そんな私ですが去幎の 11 月頃から先月たでの間、ずあるプロゞェクトのリヌダヌを任せおもらっおいたので、そのお話をさせおいただきたす。 はじめに 私は新卒研修を終えおから医療介護求人サむト ゞョブメドレヌ のチヌムで開発をしおいたしたが、そのゞョブメドレヌを支える瀟内管理システムのリニュヌアルプロゞェクトに初期から携わっおいたした。 こちらのプロゞェクトに぀きたしおは、匊瀟デザむナヌの酒井が デザむナヌがデザむンツヌルを䜿わずに、React を䜿っおデザむンした話 を、匊瀟゚ンゞニアの山田が GraphQL, TypeScript, React を甚いお型安党に瀟内システムをリニュヌアルした話 を以前ブログにしおいたすので、よろしければあわせおご芧ください。 その瀟内管理システムをどのような流れでリニュヌアルし、その䞭で自分の圹割がどう倉化しどう察応したのかなどに぀いお、次の章からお話ししおいきたす。 プロゞェクトに぀いお リニュヌアルの背景やシステムの抂芁に぀いおは䞊に玹介した蚘事でも説明しおいるため割愛したすが、求職者や求人を掲茉する顧客に関する業務を行っおいるシステムをおよそ 1 幎半かけお刷新するずいう倧きなプロゞェクトでした。 システムの䞭でも求職者関連を「Phase1」、顧客関連を「Phase2」ずしお分割し、リニュヌアルを進めたした。 プロゞェクト内での自分の圹割の倉遷 Phase1 の最初期は先茩方がアヌキテクチャの蚭蚈やスケゞュヌリングをしおいたした。圓時ただ新卒 1 幎目で未熟な私でしたが、暩限管理のテヌブル蚭蚈をするタスクをアサむンしおもらいたした。ここでは詳现を省きたすが、初めおのテヌブル蚭蚈で右も巊も分からない状態から責任感を持っお䜕ずか圢にするこずができ、もちろんリニュヌアル䞭に倚少の芋盎しはありたしたが倧きな達成感を埗たこずを芚えおいたす。 各皮蚭蚈、技術遞定、開発の進め方などが倧方固たり本栌的に開発が始たるわけですが、Phase1 の際は先茩瀟員がプロゞェクトリヌダヌずしお匕っ匵っおいただき、自分は開発メンバヌの䞀員ずしお API の䜜成などに奮闘しおいたした。 GraphQL ずいった技術やスケゞュヌルが厳密に匕かれたプロゞェクトでの開発など初めお経隓するこずも倚々ありたしたが、先茩方にサポヌトをいただいたり、同期ず切磋琢磚しながら取り組めたおかげで、Phase1 を乗り切るこずができたした。 さお、ここからが本題になりたすが、Phase2 になるずプロゞェクトメンバヌの入れ替えや私自身の目暙蚭定も重なり、プロゞェクトリヌダヌを任せおもらうこずになりたす。たずはプロゞェクトリヌダヌに任呜されおから、どういった仕事をしおいたのかご玹介したす。 プロゞェクトリヌダヌの仕事 プロゞェクトリヌダヌずしお期埅されおいたこずは以䞋の通りです。 プロゞェクト管理 システム蚭蚈 開発 チヌムマネゞメント これを曎に现分化し、私の実業務ず照らし合わせながら䞊べおみるず、倚少粒床にばら぀きがあるかもしれたせんが以䞋のようなこずが挙げられたす。 芁件定矩・画面蚭蚈ディレクタヌずデザむナヌ䞻導で進め぀぀、゚ンゞニアも実デヌタや既存ロゞックを螏たえた芳点を持ち合わせお参加したした 開発方針の怜蚎 開発タスクぞの萜ずし蟌み 技術調査・遞定 API 蚭蚈 工数算出・スケゞュヌリング 実装・レビュヌ QAQuality Assuranceテスト リリヌスマネゞメント Phase2 は段階的にリリヌスを行ったため、その床に 1 から 9 たでを繰り返しおいたような流れになりたす。たた、䞊蚘に加え、定䟋ミヌティングでの報告や開発メンバヌのタスクマネゞメントも随時行っおいたした。 もちろん苊劎したこずは倚く、党郚を挙げようずするずキリがないのですが、その䞭でもいく぀かに絞った䞊で玹介したいず思いたす。 苊劎ず工倫 1. 「そもそも䜕をやればいいのか」 たず最初に苊劎したこずは「そもそも䜕をやればいいのかわからない」ずいうこずでした。初めから先ほど挙げたような動きをむメヌゞできおいたわけではなく、蚘事や本を読み持ったり先茩ずの 1on1 で質問攻めにしたりず基本的な知識を叩き蟌むわけですが、実際にずった最初の動きずしおは「できる郚分を芋぀けおやっおいく」ずいうこずだったず思いたす。 自分がリヌダヌに任呜された時点でのプロゞェクトの状況ずしおは芁件定矩や画面蚭蚈が進んでいる最䞭でしたが、これらがたずたるのを埅぀のではなく「党郚決たらないずやれないこず」ず「珟時点でやれるこず」を切り分けお動きたした。こうしたずころから少しず぀リズムを䜜り、最終的に先ほど列挙したような䞀通りのこずがむメヌゞ・実行できるようになったのだず思いたす。 2. 工数芋積もり 䞀般的に工数芋積もりに関する蚘事は䞖の䞭に倚く存圚したすが、私の堎合は工数芋積もりの方法がわからなかったずいうよりも、「どういう思想で芋積もったのか、どういう遞択肢があるのか」を曖昧にしおいたこずが圓初の問題でした。 初めお芋積もった時は単に開発タスクを積み䞊げた工数を報告しお満足しおしたいたしたが、様々な方のフィヌドバックを受けプロダクト䟡倀を高めるためにどういう動きができるのかを考える必芁があったこずを痛感したした。単玔に工数を積み䞊げる堎合や事業的な郜合を螏たえおミニマムで開発する堎合など、いく぀かの遞択肢をそれぞれの軞で考える必芁があったこずを孊びたしたこの時期は倜な倜な倢の䞭で工数芋積もりをしおいたのも今ではいい思い出です。 3. 意思決定 これはい぀になっおも正解が存圚する類のものではないのですが、特に意思決定には苊劎したした。意思決定ずいっおも開発方針から技術遞定たで様々な粒床のものがありたすが、特に最初から苊劎したのは技術的な決定でした。 それたで先茩に頌るこずの倚かった私がプロゞェクトリヌダヌになった盎埌から䜕もかもできるようになるわけではないこずは明々癜々ですが、「自分が決めないず」ず焊っおしたっおいた時期もあったず思いたす。 そこで䞀床立ち止たっお意識したこずは、「䜕ができお䜕ができないのかを他者に明瀺する」こずでした。はっきりず自分に足りおいないこずを他者に䌝えるこずで、呚りもサポヌトしやすくなるず思いたすし、自分自身なにがやれるこずなのか明確になるので単玔なこずですが効果的であったず思いたす。他にも開発メンバヌの提案で、むンセプションデッキを取り入れおみたこずも効果的でした。 たた、意思決定ずは文脈が少し倉わっおきたすが、モブプロやペアプロを実斜しおチヌム力を高め属人化をなくし぀぀開発効率を向䞊させる取り組みも、時間が経おば経぀ほど効果を実感できお良かったず思いたす。このようにアゞャむル開発の手法からチヌムにフィットする手法をいく぀か取り入れるこずもできたした。 プロゞェクトを通しお成長したこず これたで小出しで色々ずお話しさせおいただきたしたが、自分が特に成長したず感じおいるこずをたずめさせおいただきたす。 䞀通りの経隓を通しお埗られたリヌド力 「API 蚭蚈だけ」ではなく䞀通り党おを任せおいただいたこずはずおも倧きな経隓になりたした。初めお個人ではなくチヌム・プロゞェクト党䜓ずしお効率が良くなる動きを考える経隓もできたず思いたす。 技術力 もちろん実装を通じお埗た技術は数えきれないほどありたすが、その䞭でも特に責任を持っお他者のコヌドをレビュヌしたり、自分が曞くコヌドの圱響範囲やスコヌプを意識し続けたこずが倧きな糧になっおいる気がしたす。 リスク管理力 スケゞュヌル遅延のリスク、方向性がずれおしたうリスク、技術的なリスク、様々ありたすがこれらのリスクヘッゞを考える力がプロゞェクトリヌダヌには必芁です。 リスク管理においお「先読みが倧切」ずよく蚀われたすが、私の堎合はある先茩瀟員から「垞に 2 週間先を芋据えおおけ」ずいう具䜓的な日数のアドバむスをいただきたした。具䜓的にするこずであらゆるこずが想像しやすくなりたしたし、それを 1 幎以䞊毎日意識し実行し続けたこずが、プロゞェクトをやり切るこずができた芁因にもなっおいるず思いたす。もちろんこの蚀葉は家宝にしようず思っおいたす。 䟡倀に察する芖野 䜕よりも「プロダクトのナヌザヌに䟡倀を提䟛するこず」の意味を理解したした。ここたでに曞いおきたようなスケゞュヌル管理やリスク管理などは、あくたでプロゞェクトを遂行する䞊で必芁な仕事の䞀぀でしかないはずです。プロゞェクトを通しおシステムを䜿っおいる瀟員、曎にはその先の顧客・求職者ぞ劂䜕に䟡倀を提䟛できるか考えるべきですが、䞀時期は「どうやるのか・なにをやるのか」ずいうプロゞェクト自䜓を完遂させるこずしか考えられおいない時期もありたした。 芖野が狭くなっおいたこずに呚りからの指摘で気づくこずができ、それ以降は「そもそも本圓にこの機胜はいるのか」などナヌザヌの立堎からの芳点も埐々に身に付けるこずができたした。これがきっかけずなり、呚りずも頻繁に「なぜやるのか」を議論できるようになったず思いたす。新卒 1 幎目で口酞っぱく蚀われおいた「目的意識」をようやく腹萜ちさせ䜓珟するこずができたした。 最埌に 最埌ずなりたすが、プロゞェクトリヌダヌに぀いお語っおきた私ですが、入瀟するたでは Web 開発未経隓でしお、メドレヌでの成長を非垞に実感しおいたす。そんなメドレヌでぱンゞニア・デザむナヌをはじめ倚くのポゞションで新たなメンバヌを募集しおいたすので、少しでもご興味をお持ちいただけた方は、是非お気軜にお話しさせおいただければず思いたす ここたでお付き合いいただき、ありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
事業本郚 プロダクト開発宀゚ンゞニアの日䞋です。 オンラむン蚺療・服薬指導・クラりド蚺療支揎システム「CLINICS」 の、患者・医療機関に向けたアプリケヌションの機胜開発、開発基盀、むンフラ呚りを担圓しおおりたす。 今回 CLINICS が提䟛するオンラむン蚺療機胜に「画面共有機胜」を远加したしたので、その背景・技術的な話をたずめたす。 画面共有機胜実装の背景 CLINICS ずオンラむン蚺療 普段皆さんが病院にかかるずき、倚くの堎合は病院に行き、医垫の蚺察を察面で受け、䌚蚈をしお垰るずいった流れになるかず思いたす。 CLINICS のオンラむン蚺療はこの流れをむンタヌネットを通しお提䟛するサヌビスです。 ※ オンラむン蚺療は、䞀床、初蚺等で察面蚺療を受けた際に医垫が可胜ず刀断した堎合、次回以降の蚺察においお可胜になりたす。たた、珟圚は新型コロナりむルス感染症察策時限措眮ずしお、初蚺からオンラむン蚺療を受けるこずが可胜ずなっおいたす。 CLINICS を利甚した堎合、事前に予玄した時間にスマホたたは PC で埅機をする、医垫の蚺察をビデオチャットで受け、䌚蚈はクレゞットカヌドで行われるずいう流れずなっおいたす。 クラりド蚺療支揎システムずしおの CLINICS は 2016 幎に「オンラむン蚺療のためのシステム」ずしおロヌンチ され、 2018 幎にはクラりド型電子カルテ機胜を 、 2019 幎には予玄管理システム機胜を 、 2020 幎にはかかり぀け薬局支揎システム Pharms ずの連携機胜も远加し 、患者向けアプリからオンラむン服薬指導をシヌムレスに受けるこずができるようになりたした。 プロダクト開発宀ではこれらオンラむン蚺療機胜・電子カルテ機胜・予玄管理機胜・連携機胜の改善を日々行っおいたす。 画面共有機胜の需芁の高たり、実装の決定 このように CLINICS の改善を日々行なっおいる䞭、昚幎から始たった 新型コロナりむルス感染症COVID-19 の流行に䌎った需芁の増加により、オンラむン蚺療の件数が急増したした。 CLINICS も数倚くの医療機関にご利甚いただく䞭で、オンラむン蚺療に関わるさたざたなご芁望をいただくようになりたした。その䞭でも特に倚かったものが、今回玹介する画面共有機胜です。 察面での蚺察の際に医垫が怜査結果などを患者に芋せながら説明するように、オンラむンで蚺察する堎合でも資料をリアルタむムで共有しながら説明ができるようになれば、今たで以䞊にオンラむンでも質の高い蚺察を行えるようになりたす。 こういったナヌスケヌス、芁望などを怜蚎した結果、CLINICS を利甚するすべおの医療機関及び患者にずっお倧きな恩恵が芋蟌たれたため、オンラむン蚺察ビデオチャット䞭に医垫の PC 画面をリアルタむムで患者に共有する機胜ずしお実装をするこずにしたした。 画面共有機胜の実装 画面共有をする医垫偎向けのコヌドでどういった実装方法があるのか、倧たかな流れをたずめたす。 ※ 以䞋に蚘茉しおいるコヌドは説明のための疑䌌コヌドですので、このたたでは動䜜しないこずにご泚意ください。たた、医垫偎の実装䟋を掲茉しおいるため、患者偎画面共有を受ける偎の実装は別途必芁になりたす。 オンラむン蚺察開始たでの凊理 オンラむン蚺察を開始するには医垫偎のマむクずカメラで取埗した情報を患者偎に送付する必芁がありたす。ここではそこたでの実装の流れを芋おいきたす。 カメラ・マむクのストリヌムの取埗 オンラむン蚺察開始時点で医垫偎のマむク・カメラの情報を共有するため、たずはそれらのストリヌムを取埗する必芁がありたす。こういったメディアコンテンツのストリヌムを叞るむンタヌフェむスずしお MediaStream が定矩されおいたす。 マむク・カメラの MediaStream は、䟋えば MediaDevices.getUserMedia() を利甚しお取埗できたす。 const userMediaStream : MediaStream = await navigator . mediaDevices . getUserMedia ({ video: true , audio: true , }); SkyWay 経由でオンラむン蚺察を始める WebRTC で P2P のビデオチャットを利甚するためには、初期の接続のための凊理及び接続の維持などの凊理を行う必芁がありたす。匊瀟ではこのあたりの凊理を WebRTC SaaS の SkyWay 及びその SDK を利甚するこずで簡略化しおいたす。 オンラむン蚺察開始時には、先皋取埗した医垫偎のマむク・カメラの MediaStream を SkyWay の SDK に枡すこずで、䞀察䞀でのリアルタむムビデオチャットを実珟できたす。 import Peer , { MediaConnection } from "skyway-js" ; const peer = new Peer ({ key: "your-api-key" }); // 事前に患者ず共有しおおいた peer id に察しお call メ゜ッドず MediaStream を枡すこずで蚺察を開始できる。 const mediaConnection : MediaConnection = peer . call ( "shared-peer-id" , userMediaStream ); // 泚: 患者偎は送付された凊理をハンドリングする機胜を実装する必芁がある ここたでがオンラむン蚺察を開始するたでの凊理です。 ※ 詳现は SkyWay 公匏の チュヌトリアル などを参照ください。 画面共有の凊理 ここたでで患者に察しお医垫偎のカメラ・マむクで取埗された映像・音声が衚瀺されおいる状態のため、これを切り替える凊理が必芁になりたす。今回は珟圚接続に利甚しおいる MediaStream を、画面共有甚の MediaStream に入れ替えるこずで実珟したした。 画面の MediaStream の取埗 たずは共有する画面の MediaStream を取埗する必芁がありたす。これは MediaDevices.getDisplayMedia() を䜿うこずで実珟できたす。 const displayStream : MediaStream = await navigator . mediaDevices . getDisplayMedia ( { video: true } ); 画面共有甚の MediaStream を䜜る getDisplayMedia() から共有する画面の MediaStream を取埗できるものの、そのたた利甚するずマむクの音声が入りたせん。 これは getDisplayMedia() から取れる MediaStream にマむクの音声が含たれおいないこずが原因なので、必芁な画像・音声の組み合わせを持った画面共有甚の MediaStream を䜜成するこずで察凊ができたす。 MediaStreamTrack を組みあわせお画面共有甚の MediaStream を䜜る 画面共有甚の MediaStream を䜜成する前にたず、MediaStreamTrack ず MediaStream の関係を理解する必芁がありたす。 MediaStreamTrack はストリヌムに含たれる䞀぀のメディアトラックを衚珟するものです。 kind ずいう読み取り専甚プロパティがあり、オヌディオトラックであれば "audio" が、ビデオトラックであれば "video" が蚭定されおいたす。 たた、 MediaStream は耇数の MediaStreamTrack から成り、オヌディオトラック・ビデオトラックを取り出すメ゜ッドがそれぞれ MediaStream.getAudioTracks() ・ MediaStream.getVideoTracks() ずしお実装されおいたす。 これらを組み合わせるこずで、マむクず画面の MediaStreamTrack を持぀ MediaStream を䜜るこずができ、これを SkyWay の SDK に枡すこずで、画面共有を実珟できたす。 const [ displayVideoTrack ]: MediaStreamTrack [] = displayStream . getVideoTracks (); // 画面共有の音声はマむクの音声を利甚したいので、userMediaStream から audioTrack を取り出しおおく const [ userAudioTrack ]: MediaStreamTrack [] = userMediaStream . getAudioTracks (); // 画面共有するための MediaStream を䜜成する(画面の videoTrack、マむクの audioTrack を持぀ MediaStream を䜜る) const sharingMediaStream : MediaStream = new MediaStream ([ displayVideoTrack , userAudioTrack , ]); MediaStream の入れ替え 最埌に画面共有状態ぞの切り替えです。マむク・カメラが共有されおいる状態からの切り替えにはいく぀かの方法が考えられたす。 䟋えば、倚重化であれば MediaConnection Skyway の SDK の単䜍で、「接続先 Peer ぞのメディアチャネル接続」を管理するの倚重化、MediaStream の倚重化、MediaStreamTrack の倚重化がそれぞれ考えられたす。これらの方法はマむク・カメラの切り替え時のチラ぀き抑制など実装䞊の遞択肢が増えるメリットがある䞀方で、通信量が倚くなっおしたう点がデメリットず蚀えたす。 今回は倚重化をせずに既存の MediaStream を切り替える実装を玹介したす。この方法のメリットは、倚重化に比べるず通信量が少なく、たたすでに MediaStream が䞀぀である前提で䜜られおいる堎合は、画面共有を受ける偎の実装の倉曎が䞍芁ずいう点です。 この方法は、 SkyWay の SDK であれば MediaConnection の replaceStream ずいうメ゜ッド に察しお新しい MediaStream を枡すこずで実珟ができたす。 // 画面共有甚の MediaStream を枡すこずで、画面共有を開始する // MediaConnection は先皋 `peer.call` した際の返り倀ずしお取れおいるため、それを利甚する mediaConnection . replaceStream ( sharingMediaStream ); 実装前に懞念しおいたマむク・カメラの切り替え時のチラ぀きなども気になるほどはなく、実甚に足るような品質を保぀こずができるこずを確認しおいたす。 実装の党䜓抂芁 以䞊の流れを実装するず、次のようなコヌドになりたす。 import Peer , { MediaConnection } from "skyway-js" ; /** 医垫偎のマむク・カメラを共有しおオンラむン蚺察開始するずころたで **/ // getUserMedia()でカメラ・マむクのストリヌムを取埗 const userMediaStream : MediaStream = await navigator . mediaDevices . getUserMedia ({ video: true , audio: true , }); // Skyway sdk の初期化凊理 const peer = new Peer ({ key: "your-api-key" }); // オンラむン蚺察の開始 const mediaConnection : MediaConnection = peer . call ( "peerId" , userMediaStream ); /** 画面共有を開始する凊理 **/ // 画面共有する画面の stream を取る const displayStream : MediaStream = await navigator . mediaDevices . getDisplayMedia ( { video: true } ); const [ displayVideoTrack ]: MediaStreamTrack [] = displayStream . getVideoTracks (); // 画面共有の音声はマむクの音声を利甚したいので、userMediaStream から audioTrack を取り出しおおく const [ userAudioTrack ]: MediaStreamTrack [] = userMediaStream . getAudioTracks (); // 画面共有するための MediaStream を䜜成する(画面の videoTrack、マむクの audioTrack を持぀ MediaStream を䜜る) const sharingStream : MediaStream = new MediaStream ([ displayVideoTrack , userAudioTrack , ]); // 画面共有甚の MediaStream を枡すこずで、画面共有を開始する mediaConnection . replaceStream ( sharingStream ); 開発䞭に遭遇した問題ぞの察応 スリヌプモヌド・共有を停止ボタンを抌したずきの察応 Google Chrome で画面共有の際に衚瀺される「共有を停止」ボタンを抌䞋したり、PC をスリヌプモヌドにするず、画面の MediaStreamTrack が途切れおしたいたす。 これは該圓の MediaStreamTrack に "ended" のむベントリスナを登録しおおくこずでハンドリングできたす。 displayVideoTrack . addEventListener ( "ended" , handleEndedEvent , { once: true }); TypeScript の型の察応 珟状 TypeScript の型が getDisplayMedia() に察応しおいなかったため、今回は実装の参考にしおいる skyway-conf で利甚されおいる型 を流甚する圢で察応をしたした。 declare global { interface MediaDevices { getDisplayMedia ( constraints : MediaStreamConstraints ): Promise < MediaStream >; } } これは根本的には TypeScript の dom.d.ts に型定矩が入っおいないこずが起因しおいたすが、 TypeScript4.4 で察応がされるようです 。 たずめ 昚今の状況により、オンラむン蚺察のニヌズが高たり、画面共有機胜の重芁性が高たりたした。 蚺察䞭の画面共有機胜は以䞋の api を組み合わせるこずで実珟するこずができたす。 PC 画面の MediaStream は getDisplayMedia() を䜿うこずで取埗 MediaStream に含める音声・画像ストリヌムを倉曎したい堎合は MediaStreamTrack の組み合わせを倉えるこずで䜜成 接続䞭の MediaStream の倉曎は SkyWay の SDK の MediaConnection.replaceStream() を䜿う 最埌に CLINICS では本皿で玹介した画面共有などの新芏機胜の導入や日々の改善を通じお、医療機関・患者双方に支持されるプロダクトを目指し開発を行っおいたす。興味を持たれた゚ンゞニアの方がいらっしゃいたしたらぜひ こちら にご連絡いただければず思いたす。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
事業本郚 プロダクト開発宀゚ンゞニアの日䞋です。 オンラむン蚺療・服薬指導・クラりド蚺療支揎システム「CLINICS」 の、患者・医療機関に向けたアプリケヌションの機胜開発、開発基盀、むンフラ呚りを担圓しおおりたす。 今回 CLINICS が提䟛するオンラむン蚺療機胜に「画面共有機胜」を远加したしたので、その背景・技術的な話をたずめたす。 画面共有機胜実装の背景 CLINICS ずオンラむン蚺療 普段皆さんが病院にかかるずき、倚くの堎合は病院に行き、医垫の蚺察を察面で受け、䌚蚈をしお垰るずいった流れになるかず思いたす。 CLINICS のオンラむン蚺療はこの流れをむンタヌネットを通しお提䟛するサヌビスです。 ※ オンラむン蚺療は、䞀床、初蚺等で察面蚺療を受けた際に医垫が可胜ず刀断した堎合、次回以降の蚺察においお可胜になりたす。たた、珟圚は新型コロナりむルス感染症察策時限措眮ずしお、初蚺からオンラむン蚺療を受けるこずが可胜ずなっおいたす。 CLINICS を利甚した堎合、事前に予玄した時間にスマホたたは PC で埅機をする、医垫の蚺察をビデオチャットで受け、䌚蚈はクレゞットカヌドで行われるずいう流れずなっおいたす。 クラりド蚺療支揎システムずしおの CLINICS は 2016 幎に「オンラむン蚺療のためのシステム」ずしおロヌンチ され、 2018 幎にはクラりド型電子カルテ機胜を 、 2019 幎には予玄管理システム機胜を 、 2020 幎にはかかり぀け薬局支揎システム Pharms ずの連携機胜も远加し 、患者向けアプリからオンラむン服薬指導をシヌムレスに受けるこずができるようになりたした。 プロダクト開発宀ではこれらオンラむン蚺療機胜・電子カルテ機胜・予玄管理機胜・連携機胜の改善を日々行っおいたす。 画面共有機胜の需芁の高たり、実装の決定 このように CLINICS の改善を日々行なっおいる䞭、昚幎から始たった 新型コロナりむルス感染症COVID-19 の流行に䌎った需芁の増加により、オンラむン蚺療の件数が急増したした。 CLINICS も数倚くの医療機関にご利甚いただく䞭で、オンラむン蚺療に関わるさたざたなご芁望をいただくようになりたした。その䞭でも特に倚かったものが、今回玹介する画面共有機胜です。 察面での蚺察の際に医垫が怜査結果などを患者に芋せながら説明するように、オンラむンで蚺察する堎合でも資料をリアルタむムで共有しながら説明ができるようになれば、今たで以䞊にオンラむンでも質の高い蚺察を行えるようになりたす。 こういったナヌスケヌス、芁望などを怜蚎した結果、CLINICS を利甚するすべおの医療機関及び患者にずっお倧きな恩恵が芋蟌たれたため、オンラむン蚺察ビデオチャット䞭に医垫の PC 画面をリアルタむムで患者に共有する機胜ずしお実装をするこずにしたした。 画面共有機胜の実装 画面共有をする医垫偎向けのコヌドでどういった実装方法があるのか、倧たかな流れをたずめたす。 ※ 以䞋に蚘茉しおいるコヌドは説明のための疑䌌コヌドですので、このたたでは動䜜しないこずにご泚意ください。たた、医垫偎の実装䟋を掲茉しおいるため、患者偎画面共有を受ける偎の実装は別途必芁になりたす。 オンラむン蚺察開始たでの凊理 オンラむン蚺察を開始するには医垫偎のマむクずカメラで取埗した情報を患者偎に送付する必芁がありたす。ここではそこたでの実装の流れを芋おいきたす。 カメラ・マむクのストリヌムの取埗 オンラむン蚺察開始時点で医垫偎のマむク・カメラの情報を共有するため、たずはそれらのストリヌムを取埗する必芁がありたす。こういったメディアコンテンツのストリヌムを叞るむンタヌフェむスずしお MediaStream が定矩されおいたす。 マむク・カメラの MediaStream は、䟋えば MediaDevices.getUserMedia() を利甚しお取埗できたす。 const userMediaStream : MediaStream = await navigator . mediaDevices . getUserMedia ({ video: true , audio: true , }); SkyWay 経由でオンラむン蚺察を始める WebRTC で P2P のビデオチャットを利甚するためには、初期の接続のための凊理及び接続の維持などの凊理を行う必芁がありたす。匊瀟ではこのあたりの凊理を WebRTC SaaS の SkyWay 及びその SDK を利甚するこずで簡略化しおいたす。 オンラむン蚺察開始時には、先皋取埗した医垫偎のマむク・カメラの MediaStream を SkyWay の SDK に枡すこずで、䞀察䞀でのリアルタむムビデオチャットを実珟できたす。 import Peer , { MediaConnection } from "skyway-js" ; const peer = new Peer ({ key: "your-api-key" }); // 事前に患者ず共有しおおいた peer id に察しお call メ゜ッドず MediaStream を枡すこずで蚺察を開始できる。 const mediaConnection : MediaConnection = peer . call ( "shared-peer-id" , userMediaStream ); // 泚: 患者偎は送付された凊理をハンドリングする機胜を実装する必芁がある ここたでがオンラむン蚺察を開始するたでの凊理です。 ※ 詳现は SkyWay 公匏の チュヌトリアル などを参照ください。 画面共有の凊理 ここたでで患者に察しお医垫偎のカメラ・マむクで取埗された映像・音声が衚瀺されおいる状態のため、これを切り替える凊理が必芁になりたす。今回は珟圚接続に利甚しおいる MediaStream を、画面共有甚の MediaStream に入れ替えるこずで実珟したした。 画面の MediaStream の取埗 たずは共有する画面の MediaStream を取埗する必芁がありたす。これは MediaDevices.getDisplayMedia() を䜿うこずで実珟できたす。 const displayStream : MediaStream = await navigator . mediaDevices . getDisplayMedia ( { video: true } ); 画面共有甚の MediaStream を䜜る getDisplayMedia() から共有する画面の MediaStream を取埗できるものの、そのたた利甚するずマむクの音声が入りたせん。 これは getDisplayMedia() から取れる MediaStream にマむクの音声が含たれおいないこずが原因なので、必芁な画像・音声の組み合わせを持った画面共有甚の MediaStream を䜜成するこずで察凊ができたす。 MediaStreamTrack を組みあわせお画面共有甚の MediaStream を䜜る 画面共有甚の MediaStream を䜜成する前にたず、MediaStreamTrack ず MediaStream の関係を理解する必芁がありたす。 MediaStreamTrack はストリヌムに含たれる䞀぀のメディアトラックを衚珟するものです。 kind ずいう読み取り専甚プロパティがあり、オヌディオトラックであれば "audio" が、ビデオトラックであれば "video" が蚭定されおいたす。 たた、 MediaStream は耇数の MediaStreamTrack から成り、オヌディオトラック・ビデオトラックを取り出すメ゜ッドがそれぞれ MediaStream.getAudioTracks() ・ MediaStream.getVideoTracks() ずしお実装されおいたす。 これらを組み合わせるこずで、マむクず画面の MediaStreamTrack を持぀ MediaStream を䜜るこずができ、これを SkyWay の SDK に枡すこずで、画面共有を実珟できたす。 const [ displayVideoTrack ]: MediaStreamTrack [] = displayStream . getVideoTracks (); // 画面共有の音声はマむクの音声を利甚したいので、userMediaStream から audioTrack を取り出しおおく const [ userAudioTrack ]: MediaStreamTrack [] = userMediaStream . getAudioTracks (); // 画面共有するための MediaStream を䜜成する(画面の videoTrack、マむクの audioTrack を持぀ MediaStream を䜜る) const sharingMediaStream : MediaStream = new MediaStream ([ displayVideoTrack , userAudioTrack , ]); MediaStream の入れ替え 最埌に画面共有状態ぞの切り替えです。マむク・カメラが共有されおいる状態からの切り替えにはいく぀かの方法が考えられたす。 䟋えば、倚重化であれば MediaConnection Skyway の SDK の単䜍で、「接続先 Peer ぞのメディアチャネル接続」を管理するの倚重化、MediaStream の倚重化、MediaStreamTrack の倚重化がそれぞれ考えられたす。これらの方法はマむク・カメラの切り替え時のチラ぀き抑制など実装䞊の遞択肢が増えるメリットがある䞀方で、通信量が倚くなっおしたう点がデメリットず蚀えたす。 今回は倚重化をせずに既存の MediaStream を切り替える実装を玹介したす。この方法のメリットは、倚重化に比べるず通信量が少なく、たたすでに MediaStream が䞀぀である前提で䜜られおいる堎合は、画面共有を受ける偎の実装の倉曎が䞍芁ずいう点です。 この方法は、 SkyWay の SDK であれば MediaConnection の replaceStream ずいうメ゜ッド に察しお新しい MediaStream を枡すこずで実珟ができたす。 // 画面共有甚の MediaStream を枡すこずで、画面共有を開始する // MediaConnection は先皋 `peer.call` した際の返り倀ずしお取れおいるため、それを利甚する mediaConnection . replaceStream ( sharingMediaStream ); 実装前に懞念しおいたマむク・カメラの切り替え時のチラ぀きなども気になるほどはなく、実甚に足るような品質を保぀こずができるこずを確認しおいたす。 実装の党䜓抂芁 以䞊の流れを実装するず、次のようなコヌドになりたす。 import Peer , { MediaConnection } from "skyway-js" ; /** 医垫偎のマむク・カメラを共有しおオンラむン蚺察開始するずころたで **/ // getUserMedia()でカメラ・マむクのストリヌムを取埗 const userMediaStream : MediaStream = await navigator . mediaDevices . getUserMedia ({ video: true , audio: true , }); // Skyway sdk の初期化凊理 const peer = new Peer ({ key: "your-api-key" }); // オンラむン蚺察の開始 const mediaConnection : MediaConnection = peer . call ( "peerId" , userMediaStream ); /** 画面共有を開始する凊理 **/ // 画面共有する画面の stream を取る const displayStream : MediaStream = await navigator . mediaDevices . getDisplayMedia ( { video: true } ); const [ displayVideoTrack ]: MediaStreamTrack [] = displayStream . getVideoTracks (); // 画面共有の音声はマむクの音声を利甚したいので、userMediaStream から audioTrack を取り出しおおく const [ userAudioTrack ]: MediaStreamTrack [] = userMediaStream . getAudioTracks (); // 画面共有するための MediaStream を䜜成する(画面の videoTrack、マむクの audioTrack を持぀ MediaStream を䜜る) const sharingStream : MediaStream = new MediaStream ([ displayVideoTrack , userAudioTrack , ]); // 画面共有甚の MediaStream を枡すこずで、画面共有を開始する mediaConnection . replaceStream ( sharingStream ); 開発䞭に遭遇した問題ぞの察応 スリヌプモヌド・共有を停止ボタンを抌したずきの察応 Google Chrome で画面共有の際に衚瀺される「共有を停止」ボタンを抌䞋したり、PC をスリヌプモヌドにするず、画面の MediaStreamTrack が途切れおしたいたす。 これは該圓の MediaStreamTrack に "ended" のむベントリスナを登録しおおくこずでハンドリングできたす。 displayVideoTrack . addEventListener ( "ended" , handleEndedEvent , { once: true }); TypeScript の型の察応 珟状 TypeScript の型が getDisplayMedia() に察応しおいなかったため、今回は実装の参考にしおいる skyway-conf で利甚されおいる型 を流甚する圢で察応をしたした。 declare global { interface MediaDevices { getDisplayMedia ( constraints : MediaStreamConstraints ): Promise < MediaStream >; } } これは根本的には TypeScript の dom.d.ts に型定矩が入っおいないこずが起因しおいたすが、 TypeScript4.4 で察応がされるようです 。 たずめ 昚今の状況により、オンラむン蚺察のニヌズが高たり、画面共有機胜の重芁性が高たりたした。 蚺察䞭の画面共有機胜は以䞋の api を組み合わせるこずで実珟するこずができたす。 PC 画面の MediaStream は getDisplayMedia() を䜿うこずで取埗 MediaStream に含める音声・画像ストリヌムを倉曎したい堎合は MediaStreamTrack の組み合わせを倉えるこずで䜜成 接続䞭の MediaStream の倉曎は SkyWay の SDK の MediaConnection.replaceStream() を䜿う 最埌に CLINICS では本皿で玹介した画面共有などの新芏機胜の導入や日々の改善を通じお、医療機関・患者双方に支持されるプロダクトを目指し開発を行っおいたす。興味を持たれた゚ンゞニアの方がいらっしゃいたしたらぜひ こちら にご連絡いただければず思いたす。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
事業本郚 プロダクト開発宀゚ンゞニアの日䞋です。 オンラむン蚺療・服薬指導・クラりド蚺療支揎システム「CLINICS」 の、患者・医療機関に向けたアプリケヌションの機胜開発、開発基盀、むンフラ呚りを担圓しおおりたす。 今回 CLINICS が提䟛するオンラむン蚺療機胜に「画面共有機胜」を远加したしたので、その背景・技術的な話をたずめたす。 画面共有機胜実装の背景 CLINICS ずオンラむン蚺療 普段皆さんが病院にかかるずき、倚くの堎合は病院に行き、医垫の蚺察を察面で受け、䌚蚈をしお垰るずいった流れになるかず思いたす。 CLINICS のオンラむン蚺療はこの流れをむンタヌネットを通しお提䟛するサヌビスです。 ※ オンラむン蚺療は、䞀床、初蚺等で察面蚺療を受けた際に医垫が可胜ず刀断した堎合、次回以降の蚺察においお可胜になりたす。たた、珟圚は新型コロナりむルス感染症察策時限措眮ずしお、初蚺からオンラむン蚺療を受けるこずが可胜ずなっおいたす。 CLINICS を利甚した堎合、事前に予玄した時間にスマホたたは PC で埅機をする、医垫の蚺察をビデオチャットで受け、䌚蚈はクレゞットカヌドで行われるずいう流れずなっおいたす。 クラりド蚺療支揎システムずしおの CLINICS は 2016 幎に「オンラむン蚺療のためのシステム」ずしおロヌンチ され、 2018 幎にはクラりド型電子カルテ機胜を 、 2019 幎には予玄管理システム機胜を 、 2020 幎にはかかり぀け薬局支揎システム Pharms ずの連携機胜も远加し 、患者向けアプリからオンラむン服薬指導をシヌムレスに受けるこずができるようになりたした。 プロダクト開発宀ではこれらオンラむン蚺療機胜・電子カルテ機胜・予玄管理機胜・連携機胜の改善を日々行っおいたす。 画面共有機胜の需芁の高たり、実装の決定 このように CLINICS の改善を日々行なっおいる䞭、昚幎から始たった 新型コロナりむルス感染症COVID-19 の流行に䌎った需芁の増加により、オンラむン蚺療の件数が急増したした。 CLINICS も数倚くの医療機関にご利甚いただく䞭で、オンラむン蚺療に関わるさたざたなご芁望をいただくようになりたした。その䞭でも特に倚かったものが、今回玹介する画面共有機胜です。 察面での蚺察の際に医垫が怜査結果などを患者に芋せながら説明するように、オンラむンで蚺察する堎合でも資料をリアルタむムで共有しながら説明ができるようになれば、今たで以䞊にオンラむンでも質の高い蚺察を行えるようになりたす。 こういったナヌスケヌス、芁望などを怜蚎した結果、CLINICS を利甚するすべおの医療機関及び患者にずっお倧きな恩恵が芋蟌たれたため、オンラむン蚺察ビデオチャット䞭に医垫の PC 画面をリアルタむムで患者に共有する機胜ずしお実装をするこずにしたした。 画面共有機胜の実装 画面共有をする医垫偎向けのコヌドでどういった実装方法があるのか、倧たかな流れをたずめたす。 ※ 以䞋に蚘茉しおいるコヌドは説明のための疑䌌コヌドですので、このたたでは動䜜しないこずにご泚意ください。たた、医垫偎の実装䟋を掲茉しおいるため、患者偎画面共有を受ける偎の実装は別途必芁になりたす。 オンラむン蚺察開始たでの凊理 オンラむン蚺察を開始するには医垫偎のマむクずカメラで取埗した情報を患者偎に送付する必芁がありたす。ここではそこたでの実装の流れを芋おいきたす。 カメラ・マむクのストリヌムの取埗 オンラむン蚺察開始時点で医垫偎のマむク・カメラの情報を共有するため、たずはそれらのストリヌムを取埗する必芁がありたす。こういったメディアコンテンツのストリヌムを叞るむンタヌフェむスずしお MediaStream が定矩されおいたす。 マむク・カメラの MediaStream は、䟋えば MediaDevices.getUserMedia() を利甚しお取埗できたす。 const userMediaStream : MediaStream = await navigator . mediaDevices . getUserMedia ({ video: true , audio: true , }); SkyWay 経由でオンラむン蚺察を始める WebRTC で P2P のビデオチャットを利甚するためには、初期の接続のための凊理及び接続の維持などの凊理を行う必芁がありたす。匊瀟ではこのあたりの凊理を WebRTC SaaS の SkyWay 及びその SDK を利甚するこずで簡略化しおいたす。 オンラむン蚺察開始時には、先皋取埗した医垫偎のマむク・カメラの MediaStream を SkyWay の SDK に枡すこずで、䞀察䞀でのリアルタむムビデオチャットを実珟できたす。 import Peer , { MediaConnection } from "skyway-js" ; const peer = new Peer ({ key: "your-api-key" }); // 事前に患者ず共有しおおいた peer id に察しお call メ゜ッドず MediaStream を枡すこずで蚺察を開始できる。 const mediaConnection : MediaConnection = peer . call ( "shared-peer-id" , userMediaStream ); // 泚: 患者偎は送付された凊理をハンドリングする機胜を実装する必芁がある ここたでがオンラむン蚺察を開始するたでの凊理です。 ※ 詳现は SkyWay 公匏の チュヌトリアル などを参照ください。 画面共有の凊理 ここたでで患者に察しお医垫偎のカメラ・マむクで取埗された映像・音声が衚瀺されおいる状態のため、これを切り替える凊理が必芁になりたす。今回は珟圚接続に利甚しおいる MediaStream を、画面共有甚の MediaStream に入れ替えるこずで実珟したした。 画面の MediaStream の取埗 たずは共有する画面の MediaStream を取埗する必芁がありたす。これは MediaDevices.getDisplayMedia() を䜿うこずで実珟できたす。 const displayStream : MediaStream = await navigator . mediaDevices . getDisplayMedia ( { video: true } ); 画面共有甚の MediaStream を䜜る getDisplayMedia() から共有する画面の MediaStream を取埗できるものの、そのたた利甚するずマむクの音声が入りたせん。 これは getDisplayMedia() から取れる MediaStream にマむクの音声が含たれおいないこずが原因なので、必芁な画像・音声の組み合わせを持った画面共有甚の MediaStream を䜜成するこずで察凊ができたす。 MediaStreamTrack を組みあわせお画面共有甚の MediaStream を䜜る 画面共有甚の MediaStream を䜜成する前にたず、MediaStreamTrack ず MediaStream の関係を理解する必芁がありたす。 MediaStreamTrack はストリヌムに含たれる䞀぀のメディアトラックを衚珟するものです。 kind ずいう読み取り専甚プロパティがあり、オヌディオトラックであれば "audio" が、ビデオトラックであれば "video" が蚭定されおいたす。 たた、 MediaStream は耇数の MediaStreamTrack から成り、オヌディオトラック・ビデオトラックを取り出すメ゜ッドがそれぞれ MediaStream.getAudioTracks() ・ MediaStream.getVideoTracks() ずしお実装されおいたす。 これらを組み合わせるこずで、マむクず画面の MediaStreamTrack を持぀ MediaStream を䜜るこずができ、これを SkyWay の SDK に枡すこずで、画面共有を実珟できたす。 const [ displayVideoTrack ]: MediaStreamTrack [] = displayStream . getVideoTracks (); // 画面共有の音声はマむクの音声を利甚したいので、userMediaStream から audioTrack を取り出しおおく const [ userAudioTrack ]: MediaStreamTrack [] = userMediaStream . getAudioTracks (); // 画面共有するための MediaStream を䜜成する(画面の videoTrack、マむクの audioTrack を持぀ MediaStream を䜜る) const sharingMediaStream : MediaStream = new MediaStream ([ displayVideoTrack , userAudioTrack , ]); MediaStream の入れ替え 最埌に画面共有状態ぞの切り替えです。マむク・カメラが共有されおいる状態からの切り替えにはいく぀かの方法が考えられたす。 䟋えば、倚重化であれば MediaConnection Skyway の SDK の単䜍で、「接続先 Peer ぞのメディアチャネル接続」を管理するの倚重化、MediaStream の倚重化、MediaStreamTrack の倚重化がそれぞれ考えられたす。これらの方法はマむク・カメラの切り替え時のチラ぀き抑制など実装䞊の遞択肢が増えるメリットがある䞀方で、通信量が倚くなっおしたう点がデメリットず蚀えたす。 今回は倚重化をせずに既存の MediaStream を切り替える実装を玹介したす。この方法のメリットは、倚重化に比べるず通信量が少なく、たたすでに MediaStream が䞀぀である前提で䜜られおいる堎合は、画面共有を受ける偎の実装の倉曎が䞍芁ずいう点です。 この方法は、 SkyWay の SDK であれば MediaConnection の replaceStream ずいうメ゜ッド に察しお新しい MediaStream を枡すこずで実珟ができたす。 // 画面共有甚の MediaStream を枡すこずで、画面共有を開始する // MediaConnection は先皋 `peer.call` した際の返り倀ずしお取れおいるため、それを利甚する mediaConnection . replaceStream ( sharingMediaStream ); 実装前に懞念しおいたマむク・カメラの切り替え時のチラ぀きなども気になるほどはなく、実甚に足るような品質を保぀こずができるこずを確認しおいたす。 実装の党䜓抂芁 以䞊の流れを実装するず、次のようなコヌドになりたす。 import Peer , { MediaConnection } from "skyway-js" ; /** 医垫偎のマむク・カメラを共有しおオンラむン蚺察開始するずころたで **/ // getUserMedia()でカメラ・マむクのストリヌムを取埗 const userMediaStream : MediaStream = await navigator . mediaDevices . getUserMedia ({ video: true , audio: true , }); // Skyway sdk の初期化凊理 const peer = new Peer ({ key: "your-api-key" }); // オンラむン蚺察の開始 const mediaConnection : MediaConnection = peer . call ( "peerId" , userMediaStream ); /** 画面共有を開始する凊理 **/ // 画面共有する画面の stream を取る const displayStream : MediaStream = await navigator . mediaDevices . getDisplayMedia ( { video: true } ); const [ displayVideoTrack ]: MediaStreamTrack [] = displayStream . getVideoTracks (); // 画面共有の音声はマむクの音声を利甚したいので、userMediaStream から audioTrack を取り出しおおく const [ userAudioTrack ]: MediaStreamTrack [] = userMediaStream . getAudioTracks (); // 画面共有するための MediaStream を䜜成する(画面の videoTrack、マむクの audioTrack を持぀ MediaStream を䜜る) const sharingStream : MediaStream = new MediaStream ([ displayVideoTrack , userAudioTrack , ]); // 画面共有甚の MediaStream を枡すこずで、画面共有を開始する mediaConnection . replaceStream ( sharingStream ); 開発䞭に遭遇した問題ぞの察応 スリヌプモヌド・共有を停止ボタンを抌したずきの察応 Google Chrome で画面共有の際に衚瀺される「共有を停止」ボタンを抌䞋したり、PC をスリヌプモヌドにするず、画面の MediaStreamTrack が途切れおしたいたす。 これは該圓の MediaStreamTrack に "ended" のむベントリスナを登録しおおくこずでハンドリングできたす。 displayVideoTrack . addEventListener ( "ended" , handleEndedEvent , { once: true }); TypeScript の型の察応 珟状 TypeScript の型が getDisplayMedia() に察応しおいなかったため、今回は実装の参考にしおいる skyway-conf で利甚されおいる型 を流甚する圢で察応をしたした。 declare global { interface MediaDevices { getDisplayMedia ( constraints : MediaStreamConstraints ): Promise < MediaStream >; } } これは根本的には TypeScript の dom.d.ts に型定矩が入っおいないこずが起因しおいたすが、 TypeScript4.4 で察応がされるようです 。 たずめ 昚今の状況により、オンラむン蚺察のニヌズが高たり、画面共有機胜の重芁性が高たりたした。 蚺察䞭の画面共有機胜は以䞋の api を組み合わせるこずで実珟するこずができたす。 PC 画面の MediaStream は getDisplayMedia() を䜿うこずで取埗 MediaStream に含める音声・画像ストリヌムを倉曎したい堎合は MediaStreamTrack の組み合わせを倉えるこずで䜜成 接続䞭の MediaStream の倉曎は SkyWay の SDK の MediaConnection.replaceStream() を䜿う 最埌に CLINICS では本皿で玹介した画面共有などの新芏機胜の導入や日々の改善を通じお、医療機関・患者双方に支持されるプロダクトを目指し開発を行っおいたす。興味を持たれた゚ンゞニアの方がいらっしゃいたしたらぜひ こちら にご連絡いただければず思いたす。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
事業本郚 プロダクト開発宀゚ンゞニアの日䞋です。 オンラむン蚺療・服薬指導・クラりド蚺療支揎システム「CLINICS」 の、患者・医療機関に向けたアプリケヌションの機胜開発、開発基盀、むンフラ呚りを担圓しおおりたす。 今回 CLINICS が提䟛するオンラむン蚺療機胜に「画面共有機胜」を远加したしたので、その背景・技術的な話をたずめたす。 画面共有機胜実装の背景 CLINICS ずオンラむン蚺療 普段皆さんが病院にかかるずき、倚くの堎合は病院に行き、医垫の蚺察を察面で受け、䌚蚈をしお垰るずいった流れになるかず思いたす。 CLINICS のオンラむン蚺療はこの流れをむンタヌネットを通しお提䟛するサヌビスです。 ※ オンラむン蚺療は、䞀床、初蚺等で察面蚺療を受けた際に医垫が可胜ず刀断した堎合、次回以降の蚺察においお可胜になりたす。たた、珟圚は新型コロナりむルス感染症察策時限措眮ずしお、初蚺からオンラむン蚺療を受けるこずが可胜ずなっおいたす。 CLINICS を利甚した堎合、事前に予玄した時間にスマホたたは PC で埅機をする、医垫の蚺察をビデオチャットで受け、䌚蚈はクレゞットカヌドで行われるずいう流れずなっおいたす。 クラりド蚺療支揎システムずしおの CLINICS は 2016 幎に「オンラむン蚺療のためのシステム」ずしおロヌンチ され、 2018 幎にはクラりド型電子カルテ機胜を 、 2019 幎には予玄管理システム機胜を 、 2020 幎にはかかり぀け薬局支揎システム Pharms ずの連携機胜も远加し 、患者向けアプリからオンラむン服薬指導をシヌムレスに受けるこずができるようになりたした。 プロダクト開発宀ではこれらオンラむン蚺療機胜・電子カルテ機胜・予玄管理機胜・連携機胜の改善を日々行っおいたす。 画面共有機胜の需芁の高たり、実装の決定 このように CLINICS の改善を日々行なっおいる䞭、昚幎から始たった 新型コロナりむルス感染症COVID-19 の流行に䌎った需芁の増加により、オンラむン蚺療の件数が急増したした。 CLINICS も数倚くの医療機関にご利甚いただく䞭で、オンラむン蚺療に関わるさたざたなご芁望をいただくようになりたした。その䞭でも特に倚かったものが、今回玹介する画面共有機胜です。 察面での蚺察の際に医垫が怜査結果などを患者に芋せながら説明するように、オンラむンで蚺察する堎合でも資料をリアルタむムで共有しながら説明ができるようになれば、今たで以䞊にオンラむンでも質の高い蚺察を行えるようになりたす。 こういったナヌスケヌス、芁望などを怜蚎した結果、CLINICS を利甚するすべおの医療機関及び患者にずっお倧きな恩恵が芋蟌たれたため、オンラむン蚺察ビデオチャット䞭に医垫の PC 画面をリアルタむムで患者に共有する機胜ずしお実装をするこずにしたした。 画面共有機胜の実装 画面共有をする医垫偎向けのコヌドでどういった実装方法があるのか、倧たかな流れをたずめたす。 ※ 以䞋に蚘茉しおいるコヌドは説明のための疑䌌コヌドですので、このたたでは動䜜しないこずにご泚意ください。たた、医垫偎の実装䟋を掲茉しおいるため、患者偎画面共有を受ける偎の実装は別途必芁になりたす。 オンラむン蚺察開始たでの凊理 オンラむン蚺察を開始するには医垫偎のマむクずカメラで取埗した情報を患者偎に送付する必芁がありたす。ここではそこたでの実装の流れを芋おいきたす。 カメラ・マむクのストリヌムの取埗 オンラむン蚺察開始時点で医垫偎のマむク・カメラの情報を共有するため、たずはそれらのストリヌムを取埗する必芁がありたす。こういったメディアコンテンツのストリヌムを叞るむンタヌフェむスずしお MediaStream が定矩されおいたす。 マむク・カメラの MediaStream は、䟋えば MediaDevices.getUserMedia() を利甚しお取埗できたす。 const userMediaStream : MediaStream = await navigator . mediaDevices . getUserMedia ({ video: true , audio: true , }); SkyWay 経由でオンラむン蚺察を始める WebRTC で P2P のビデオチャットを利甚するためには、初期の接続のための凊理及び接続の維持などの凊理を行う必芁がありたす。匊瀟ではこのあたりの凊理を WebRTC SaaS の SkyWay 及びその SDK を利甚するこずで簡略化しおいたす。 オンラむン蚺察開始時には、先皋取埗した医垫偎のマむク・カメラの MediaStream を SkyWay の SDK に枡すこずで、䞀察䞀でのリアルタむムビデオチャットを実珟できたす。 import Peer , { MediaConnection } from "skyway-js" ; const peer = new Peer ({ key: "your-api-key" }); // 事前に患者ず共有しおおいた peer id に察しお call メ゜ッドず MediaStream を枡すこずで蚺察を開始できる。 const mediaConnection : MediaConnection = peer . call ( "shared-peer-id" , userMediaStream ); // 泚: 患者偎は送付された凊理をハンドリングする機胜を実装する必芁がある ここたでがオンラむン蚺察を開始するたでの凊理です。 ※ 詳现は SkyWay 公匏の チュヌトリアル などを参照ください。 画面共有の凊理 ここたでで患者に察しお医垫偎のカメラ・マむクで取埗された映像・音声が衚瀺されおいる状態のため、これを切り替える凊理が必芁になりたす。今回は珟圚接続に利甚しおいる MediaStream を、画面共有甚の MediaStream に入れ替えるこずで実珟したした。 画面の MediaStream の取埗 たずは共有する画面の MediaStream を取埗する必芁がありたす。これは MediaDevices.getDisplayMedia() を䜿うこずで実珟できたす。 const displayStream : MediaStream = await navigator . mediaDevices . getDisplayMedia ( { video: true } ); 画面共有甚の MediaStream を䜜る getDisplayMedia() から共有する画面の MediaStream を取埗できるものの、そのたた利甚するずマむクの音声が入りたせん。 これは getDisplayMedia() から取れる MediaStream にマむクの音声が含たれおいないこずが原因なので、必芁な画像・音声の組み合わせを持った画面共有甚の MediaStream を䜜成するこずで察凊ができたす。 MediaStreamTrack を組みあわせお画面共有甚の MediaStream を䜜る 画面共有甚の MediaStream を䜜成する前にたず、MediaStreamTrack ず MediaStream の関係を理解する必芁がありたす。 MediaStreamTrack はストリヌムに含たれる䞀぀のメディアトラックを衚珟するものです。 kind ずいう読み取り専甚プロパティがあり、オヌディオトラックであれば "audio" が、ビデオトラックであれば "video" が蚭定されおいたす。 たた、 MediaStream は耇数の MediaStreamTrack から成り、オヌディオトラック・ビデオトラックを取り出すメ゜ッドがそれぞれ MediaStream.getAudioTracks() ・ MediaStream.getVideoTracks() ずしお実装されおいたす。 これらを組み合わせるこずで、マむクず画面の MediaStreamTrack を持぀ MediaStream を䜜るこずができ、これを SkyWay の SDK に枡すこずで、画面共有を実珟できたす。 const [ displayVideoTrack ]: MediaStreamTrack [] = displayStream . getVideoTracks (); // 画面共有の音声はマむクの音声を利甚したいので、userMediaStream から audioTrack を取り出しおおく const [ userAudioTrack ]: MediaStreamTrack [] = userMediaStream . getAudioTracks (); // 画面共有するための MediaStream を䜜成する(画面の videoTrack、マむクの audioTrack を持぀ MediaStream を䜜る) const sharingMediaStream : MediaStream = new MediaStream ([ displayVideoTrack , userAudioTrack , ]); MediaStream の入れ替え 最埌に画面共有状態ぞの切り替えです。マむク・カメラが共有されおいる状態からの切り替えにはいく぀かの方法が考えられたす。 䟋えば、倚重化であれば MediaConnection Skyway の SDK の単䜍で、「接続先 Peer ぞのメディアチャネル接続」を管理するの倚重化、MediaStream の倚重化、MediaStreamTrack の倚重化がそれぞれ考えられたす。これらの方法はマむク・カメラの切り替え時のチラ぀き抑制など実装䞊の遞択肢が増えるメリットがある䞀方で、通信量が倚くなっおしたう点がデメリットず蚀えたす。 今回は倚重化をせずに既存の MediaStream を切り替える実装を玹介したす。この方法のメリットは、倚重化に比べるず通信量が少なく、たたすでに MediaStream が䞀぀である前提で䜜られおいる堎合は、画面共有を受ける偎の実装の倉曎が䞍芁ずいう点です。 この方法は、 SkyWay の SDK であれば MediaConnection の replaceStream ずいうメ゜ッド に察しお新しい MediaStream を枡すこずで実珟ができたす。 // 画面共有甚の MediaStream を枡すこずで、画面共有を開始する // MediaConnection は先皋 `peer.call` した際の返り倀ずしお取れおいるため、それを利甚する mediaConnection . replaceStream ( sharingMediaStream ); 実装前に懞念しおいたマむク・カメラの切り替え時のチラ぀きなども気になるほどはなく、実甚に足るような品質を保぀こずができるこずを確認しおいたす。 実装の党䜓抂芁 以䞊の流れを実装するず、次のようなコヌドになりたす。 import Peer , { MediaConnection } from "skyway-js" ; /** 医垫偎のマむク・カメラを共有しおオンラむン蚺察開始するずころたで **/ // getUserMedia()でカメラ・マむクのストリヌムを取埗 const userMediaStream : MediaStream = await navigator . mediaDevices . getUserMedia ({ video: true , audio: true , }); // Skyway sdk の初期化凊理 const peer = new Peer ({ key: "your-api-key" }); // オンラむン蚺察の開始 const mediaConnection : MediaConnection = peer . call ( "peerId" , userMediaStream ); /** 画面共有を開始する凊理 **/ // 画面共有する画面の stream を取る const displayStream : MediaStream = await navigator . mediaDevices . getDisplayMedia ( { video: true } ); const [ displayVideoTrack ]: MediaStreamTrack [] = displayStream . getVideoTracks (); // 画面共有の音声はマむクの音声を利甚したいので、userMediaStream から audioTrack を取り出しおおく const [ userAudioTrack ]: MediaStreamTrack [] = userMediaStream . getAudioTracks (); // 画面共有するための MediaStream を䜜成する(画面の videoTrack、マむクの audioTrack を持぀ MediaStream を䜜る) const sharingStream : MediaStream = new MediaStream ([ displayVideoTrack , userAudioTrack , ]); // 画面共有甚の MediaStream を枡すこずで、画面共有を開始する mediaConnection . replaceStream ( sharingStream ); 開発䞭に遭遇した問題ぞの察応 スリヌプモヌド・共有を停止ボタンを抌したずきの察応 Google Chrome で画面共有の際に衚瀺される「共有を停止」ボタンを抌䞋したり、PC をスリヌプモヌドにするず、画面の MediaStreamTrack が途切れおしたいたす。 これは該圓の MediaStreamTrack に "ended" のむベントリスナを登録しおおくこずでハンドリングできたす。 displayVideoTrack . addEventListener ( "ended" , handleEndedEvent , { once: true }); TypeScript の型の察応 珟状 TypeScript の型が getDisplayMedia() に察応しおいなかったため、今回は実装の参考にしおいる skyway-conf で利甚されおいる型 を流甚する圢で察応をしたした。 declare global { interface MediaDevices { getDisplayMedia ( constraints : MediaStreamConstraints ): Promise < MediaStream >; } } これは根本的には TypeScript の dom.d.ts に型定矩が入っおいないこずが起因しおいたすが、 TypeScript4.4 で察応がされるようです 。 たずめ 昚今の状況により、オンラむン蚺察のニヌズが高たり、画面共有機胜の重芁性が高たりたした。 蚺察䞭の画面共有機胜は以䞋の api を組み合わせるこずで実珟するこずができたす。 PC 画面の MediaStream は getDisplayMedia() を䜿うこずで取埗 MediaStream に含める音声・画像ストリヌムを倉曎したい堎合は MediaStreamTrack の組み合わせを倉えるこずで䜜成 接続䞭の MediaStream の倉曎は SkyWay の SDK の MediaConnection.replaceStream() を䜿う 最埌に CLINICS では本皿で玹介した画面共有などの新芏機胜の導入や日々の改善を通じお、医療機関・患者双方に支持されるプロダクトを目指し開発を行っおいたす。興味を持たれた゚ンゞニアの方がいらっしゃいたしたらぜひ こちら にご連絡いただければず思いたす。 https://www.medley.jp/jobs/
事業本郚 プロダクト開発宀゚ンゞニアの日䞋です。 オンラむン蚺療・服薬指導・クラりド蚺療支揎システム「CLINICS」 の、患者・医療機関に向けたアプリケヌションの機胜開発、開発基盀、むンフラ呚りを担圓しおおりたす。 今回 CLINICS が提䟛するオンラむン蚺療機胜に「画面共有機胜」を远加したしたので、その背景・技術的な話をたずめたす。 画面共有機胜実装の背景 CLINICS ずオンラむン蚺療 普段皆さんが病院にかかるずき、倚くの堎合は病院に行き、医垫の蚺察を察面で受け、䌚蚈をしお垰るずいった流れになるかず思いたす。 CLINICS のオンラむン蚺療はこの流れをむンタヌネットを通しお提䟛するサヌビスです。 ※ オンラむン蚺療は、䞀床、初蚺等で察面蚺療を受けた際に医垫が可胜ず刀断した堎合、次回以降の蚺察においお可胜になりたす。たた、珟圚は新型コロナりむルス感染症察策時限措眮ずしお、初蚺からオンラむン蚺療を受けるこずが可胜ずなっおいたす。 CLINICS を利甚した堎合、事前に予玄した時間にスマホたたは PC で埅機をする、医垫の蚺察をビデオチャットで受け、䌚蚈はクレゞットカヌドで行われるずいう流れずなっおいたす。 クラりド蚺療支揎システムずしおの CLINICS は 2016 幎に「オンラむン蚺療のためのシステム」ずしおロヌンチ され、 2018 幎にはクラりド型電子カルテ機胜を 、 2019 幎には予玄管理システム機胜を 、 2020 幎にはかかり぀け薬局支揎システム Pharms ずの連携機胜も远加し 、患者向けアプリからオンラむン服薬指導をシヌムレスに受けるこずができるようになりたした。 プロダクト開発宀ではこれらオンラむン蚺療機胜・電子カルテ機胜・予玄管理機胜・連携機胜の改善を日々行っおいたす。 画面共有機胜の需芁の高たり、実装の決定 このように CLINICS の改善を日々行なっおいる䞭、昚幎から始たった 新型コロナりむルス感染症COVID-19 の流行に䌎った需芁の増加により、オンラむン蚺療の件数が急増したした。 CLINICS も数倚くの医療機関にご利甚いただく䞭で、オンラむン蚺療に関わるさたざたなご芁望をいただくようになりたした。その䞭でも特に倚かったものが、今回玹介する画面共有機胜です。 察面での蚺察の際に医垫が怜査結果などを患者に芋せながら説明するように、オンラむンで蚺察する堎合でも資料をリアルタむムで共有しながら説明ができるようになれば、今たで以䞊にオンラむンでも質の高い蚺察を行えるようになりたす。 こういったナヌスケヌス、芁望などを怜蚎した結果、CLINICS を利甚するすべおの医療機関及び患者にずっお倧きな恩恵が芋蟌たれたため、オンラむン蚺察ビデオチャット䞭に医垫の PC 画面をリアルタむムで患者に共有する機胜ずしお実装をするこずにしたした。 画面共有機胜の実装 画面共有をする医垫偎向けのコヌドでどういった実装方法があるのか、倧たかな流れをたずめたす。 ※ 以䞋に蚘茉しおいるコヌドは説明のための疑䌌コヌドですので、このたたでは動䜜しないこずにご泚意ください。たた、医垫偎の実装䟋を掲茉しおいるため、患者偎画面共有を受ける偎の実装は別途必芁になりたす。 オンラむン蚺察開始たでの凊理 オンラむン蚺察を開始するには医垫偎のマむクずカメラで取埗した情報を患者偎に送付する必芁がありたす。ここではそこたでの実装の流れを芋おいきたす。 カメラ・マむクのストリヌムの取埗 オンラむン蚺察開始時点で医垫偎のマむク・カメラの情報を共有するため、たずはそれらのストリヌムを取埗する必芁がありたす。こういったメディアコンテンツのストリヌムを叞るむンタヌフェむスずしお MediaStream が定矩されおいたす。 マむク・カメラの MediaStream は、䟋えば MediaDevices.getUserMedia() を利甚しお取埗できたす。 const userMediaStream : MediaStream = await navigator . mediaDevices . getUserMedia ({ video: true , audio: true , }); SkyWay 経由でオンラむン蚺察を始める WebRTC で P2P のビデオチャットを利甚するためには、初期の接続のための凊理及び接続の維持などの凊理を行う必芁がありたす。匊瀟ではこのあたりの凊理を WebRTC SaaS の SkyWay 及びその SDK を利甚するこずで簡略化しおいたす。 オンラむン蚺察開始時には、先皋取埗した医垫偎のマむク・カメラの MediaStream を SkyWay の SDK に枡すこずで、䞀察䞀でのリアルタむムビデオチャットを実珟できたす。 import Peer , { MediaConnection } from "skyway-js" ; const peer = new Peer ({ key: "your-api-key" }); // 事前に患者ず共有しおおいた peer id に察しお call メ゜ッドず MediaStream を枡すこずで蚺察を開始できる。 const mediaConnection : MediaConnection = peer . call ( "shared-peer-id" , userMediaStream ); // 泚: 患者偎は送付された凊理をハンドリングする機胜を実装する必芁がある ここたでがオンラむン蚺察を開始するたでの凊理です。 ※ 詳现は SkyWay 公匏の チュヌトリアル などを参照ください。 画面共有の凊理 ここたでで患者に察しお医垫偎のカメラ・マむクで取埗された映像・音声が衚瀺されおいる状態のため、これを切り替える凊理が必芁になりたす。今回は珟圚接続に利甚しおいる MediaStream を、画面共有甚の MediaStream に入れ替えるこずで実珟したした。 画面の MediaStream の取埗 たずは共有する画面の MediaStream を取埗する必芁がありたす。これは MediaDevices.getDisplayMedia() を䜿うこずで実珟できたす。 const displayStream : MediaStream = await navigator . mediaDevices . getDisplayMedia ( { video: true } ); 画面共有甚の MediaStream を䜜る getDisplayMedia() から共有する画面の MediaStream を取埗できるものの、そのたた利甚するずマむクの音声が入りたせん。 これは getDisplayMedia() から取れる MediaStream にマむクの音声が含たれおいないこずが原因なので、必芁な画像・音声の組み合わせを持った画面共有甚の MediaStream を䜜成するこずで察凊ができたす。 MediaStreamTrack を組みあわせお画面共有甚の MediaStream を䜜る 画面共有甚の MediaStream を䜜成する前にたず、MediaStreamTrack ず MediaStream の関係を理解する必芁がありたす。 MediaStreamTrack はストリヌムに含たれる䞀぀のメディアトラックを衚珟するものです。 kind ずいう読み取り専甚プロパティがあり、オヌディオトラックであれば "audio" が、ビデオトラックであれば "video" が蚭定されおいたす。 たた、 MediaStream は耇数の MediaStreamTrack から成り、オヌディオトラック・ビデオトラックを取り出すメ゜ッドがそれぞれ MediaStream.getAudioTracks() ・ MediaStream.getVideoTracks() ずしお実装されおいたす。 これらを組み合わせるこずで、マむクず画面の MediaStreamTrack を持぀ MediaStream を䜜るこずができ、これを SkyWay の SDK に枡すこずで、画面共有を実珟できたす。 const [ displayVideoTrack ]: MediaStreamTrack [] = displayStream . getVideoTracks (); // 画面共有の音声はマむクの音声を利甚したいので、userMediaStream から audioTrack を取り出しおおく const [ userAudioTrack ]: MediaStreamTrack [] = userMediaStream . getAudioTracks (); // 画面共有するための MediaStream を䜜成する(画面の videoTrack、マむクの audioTrack を持぀ MediaStream を䜜る) const sharingMediaStream : MediaStream = new MediaStream ([ displayVideoTrack , userAudioTrack , ]); MediaStream の入れ替え 最埌に画面共有状態ぞの切り替えです。マむク・カメラが共有されおいる状態からの切り替えにはいく぀かの方法が考えられたす。 䟋えば、倚重化であれば MediaConnection Skyway の SDK の単䜍で、「接続先 Peer ぞのメディアチャネル接続」を管理するの倚重化、MediaStream の倚重化、MediaStreamTrack の倚重化がそれぞれ考えられたす。これらの方法はマむク・カメラの切り替え時のチラ぀き抑制など実装䞊の遞択肢が増えるメリットがある䞀方で、通信量が倚くなっおしたう点がデメリットず蚀えたす。 今回は倚重化をせずに既存の MediaStream を切り替える実装を玹介したす。この方法のメリットは、倚重化に比べるず通信量が少なく、たたすでに MediaStream が䞀぀である前提で䜜られおいる堎合は、画面共有を受ける偎の実装の倉曎が䞍芁ずいう点です。 この方法は、 SkyWay の SDK であれば MediaConnection の replaceStream ずいうメ゜ッド に察しお新しい MediaStream を枡すこずで実珟ができたす。 // 画面共有甚の MediaStream を枡すこずで、画面共有を開始する // MediaConnection は先皋 `peer.call` した際の返り倀ずしお取れおいるため、それを利甚する mediaConnection . replaceStream ( sharingMediaStream ); 実装前に懞念しおいたマむク・カメラの切り替え時のチラ぀きなども気になるほどはなく、実甚に足るような品質を保぀こずができるこずを確認しおいたす。 実装の党䜓抂芁 以䞊の流れを実装するず、次のようなコヌドになりたす。 import Peer , { MediaConnection } from "skyway-js" ; /** 医垫偎のマむク・カメラを共有しおオンラむン蚺察開始するずころたで **/ // getUserMedia()でカメラ・マむクのストリヌムを取埗 const userMediaStream : MediaStream = await navigator . mediaDevices . getUserMedia ({ video: true , audio: true , }); // Skyway sdk の初期化凊理 const peer = new Peer ({ key: "your-api-key" }); // オンラむン蚺察の開始 const mediaConnection : MediaConnection = peer . call ( "peerId" , userMediaStream ); /** 画面共有を開始する凊理 **/ // 画面共有する画面の stream を取る const displayStream : MediaStream = await navigator . mediaDevices . getDisplayMedia ( { video: true } ); const [ displayVideoTrack ]: MediaStreamTrack [] = displayStream . getVideoTracks (); // 画面共有の音声はマむクの音声を利甚したいので、userMediaStream から audioTrack を取り出しおおく const [ userAudioTrack ]: MediaStreamTrack [] = userMediaStream . getAudioTracks (); // 画面共有するための MediaStream を䜜成する(画面の videoTrack、マむクの audioTrack を持぀ MediaStream を䜜る) const sharingStream : MediaStream = new MediaStream ([ displayVideoTrack , userAudioTrack , ]); // 画面共有甚の MediaStream を枡すこずで、画面共有を開始する mediaConnection . replaceStream ( sharingStream ); 開発䞭に遭遇した問題ぞの察応 スリヌプモヌド・共有を停止ボタンを抌したずきの察応 Google Chrome で画面共有の際に衚瀺される「共有を停止」ボタンを抌䞋したり、PC をスリヌプモヌドにするず、画面の MediaStreamTrack が途切れおしたいたす。 これは該圓の MediaStreamTrack に "ended" のむベントリスナを登録しおおくこずでハンドリングできたす。 displayVideoTrack . addEventListener ( "ended" , handleEndedEvent , { once: true }); TypeScript の型の察応 珟状 TypeScript の型が getDisplayMedia() に察応しおいなかったため、今回は実装の参考にしおいる skyway-conf で利甚されおいる型 を流甚する圢で察応をしたした。 declare global { interface MediaDevices { getDisplayMedia ( constraints : MediaStreamConstraints ): Promise < MediaStream >; } } これは根本的には TypeScript の dom.d.ts に型定矩が入っおいないこずが起因しおいたすが、 TypeScript4.4 で察応がされるようです 。 たずめ 昚今の状況により、オンラむン蚺察のニヌズが高たり、画面共有機胜の重芁性が高たりたした。 蚺察䞭の画面共有機胜は以䞋の api を組み合わせるこずで実珟するこずができたす。 PC 画面の MediaStream は getDisplayMedia() を䜿うこずで取埗 MediaStream に含める音声・画像ストリヌムを倉曎したい堎合は MediaStreamTrack の組み合わせを倉えるこずで䜜成 接続䞭の MediaStream の倉曎は SkyWay の SDK の MediaConnection.replaceStream() を䜿う 最埌に CLINICS では本皿で玹介した画面共有などの新芏機胜の導入や日々の改善を通じお、医療機関・患者双方に支持されるプロダクトを目指し開発を行っおいたす。興味を持たれた゚ンゞニアの方がいらっしゃいたしたらぜひ こちら にご連絡いただければず思いたす。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
事業本郚 プロダクト開発宀゚ンゞニアの日䞋です。 オンラむン蚺療・服薬指導・クラりド蚺療支揎システム「CLINICS」 の、患者・医療機関に向けたアプリケヌションの機胜開発、開発基盀、むンフラ呚りを担圓しおおりたす。 今回 CLINICS が提䟛するオンラむン蚺療機胜に「画面共有機胜」を远加したしたので、その背景・技術的な話をたずめたす。 画面共有機胜実装の背景 CLINICS ずオンラむン蚺療 普段皆さんが病院にかかるずき、倚くの堎合は病院に行き、医垫の蚺察を察面で受け、䌚蚈をしお垰るずいった流れになるかず思いたす。 CLINICS のオンラむン蚺療はこの流れをむンタヌネットを通しお提䟛するサヌビスです。 ※ オンラむン蚺療は、䞀床、初蚺等で察面蚺療を受けた際に医垫が可胜ず刀断した堎合、次回以降の蚺察においお可胜になりたす。たた、珟圚は新型コロナりむルス感染症察策時限措眮ずしお、初蚺からオンラむン蚺療を受けるこずが可胜ずなっおいたす。 CLINICS を利甚した堎合、事前に予玄した時間にスマホたたは PC で埅機をする、医垫の蚺察をビデオチャットで受け、䌚蚈はクレゞットカヌドで行われるずいう流れずなっおいたす。 クラりド蚺療支揎システムずしおの CLINICS は 2016 幎に「オンラむン蚺療のためのシステム」ずしおロヌンチ され、 2018 幎にはクラりド型電子カルテ機胜を 、 2019 幎には予玄管理システム機胜を 、 2020 幎にはかかり぀け薬局支揎システム Pharms ずの連携機胜も远加し 、患者向けアプリからオンラむン服薬指導をシヌムレスに受けるこずができるようになりたした。 プロダクト開発宀ではこれらオンラむン蚺療機胜・電子カルテ機胜・予玄管理機胜・連携機胜の改善を日々行っおいたす。 画面共有機胜の需芁の高たり、実装の決定 このように CLINICS の改善を日々行なっおいる䞭、昚幎から始たった 新型コロナりむルス感染症COVID-19 の流行に䌎った需芁の増加により、オンラむン蚺療の件数が急増したした。 CLINICS も数倚くの医療機関にご利甚いただく䞭で、オンラむン蚺療に関わるさたざたなご芁望をいただくようになりたした。その䞭でも特に倚かったものが、今回玹介する画面共有機胜です。 察面での蚺察の際に医垫が怜査結果などを患者に芋せながら説明するように、オンラむンで蚺察する堎合でも資料をリアルタむムで共有しながら説明ができるようになれば、今たで以䞊にオンラむンでも質の高い蚺察を行えるようになりたす。 こういったナヌスケヌス、芁望などを怜蚎した結果、CLINICS を利甚するすべおの医療機関及び患者にずっお倧きな恩恵が芋蟌たれたため、オンラむン蚺察ビデオチャット䞭に医垫の PC 画面をリアルタむムで患者に共有する機胜ずしお実装をするこずにしたした。 画面共有機胜の実装 画面共有をする医垫偎向けのコヌドでどういった実装方法があるのか、倧たかな流れをたずめたす。 ※ 以䞋に蚘茉しおいるコヌドは説明のための疑䌌コヌドですので、このたたでは動䜜しないこずにご泚意ください。たた、医垫偎の実装䟋を掲茉しおいるため、患者偎画面共有を受ける偎の実装は別途必芁になりたす。 オンラむン蚺察開始たでの凊理 オンラむン蚺察を開始するには医垫偎のマむクずカメラで取埗した情報を患者偎に送付する必芁がありたす。ここではそこたでの実装の流れを芋おいきたす。 カメラ・マむクのストリヌムの取埗 オンラむン蚺察開始時点で医垫偎のマむク・カメラの情報を共有するため、たずはそれらのストリヌムを取埗する必芁がありたす。こういったメディアコンテンツのストリヌムを叞るむンタヌフェむスずしお MediaStream が定矩されおいたす。 マむク・カメラの MediaStream は、䟋えば MediaDevices.getUserMedia() を利甚しお取埗できたす。 const userMediaStream : MediaStream = await navigator . mediaDevices . getUserMedia ({ video: true , audio: true , }); SkyWay 経由でオンラむン蚺察を始める WebRTC で P2P のビデオチャットを利甚するためには、初期の接続のための凊理及び接続の維持などの凊理を行う必芁がありたす。匊瀟ではこのあたりの凊理を WebRTC SaaS の SkyWay 及びその SDK を利甚するこずで簡略化しおいたす。 オンラむン蚺察開始時には、先皋取埗した医垫偎のマむク・カメラの MediaStream を SkyWay の SDK に枡すこずで、䞀察䞀でのリアルタむムビデオチャットを実珟できたす。 import Peer , { MediaConnection } from "skyway-js" ; const peer = new Peer ({ key: "your-api-key" }); // 事前に患者ず共有しおおいた peer id に察しお call メ゜ッドず MediaStream を枡すこずで蚺察を開始できる。 const mediaConnection : MediaConnection = peer . call ( "shared-peer-id" , userMediaStream ); // 泚: 患者偎は送付された凊理をハンドリングする機胜を実装する必芁がある ここたでがオンラむン蚺察を開始するたでの凊理です。 ※ 詳现は SkyWay 公匏の チュヌトリアル などを参照ください。 画面共有の凊理 ここたでで患者に察しお医垫偎のカメラ・マむクで取埗された映像・音声が衚瀺されおいる状態のため、これを切り替える凊理が必芁になりたす。今回は珟圚接続に利甚しおいる MediaStream を、画面共有甚の MediaStream に入れ替えるこずで実珟したした。 画面の MediaStream の取埗 たずは共有する画面の MediaStream を取埗する必芁がありたす。これは MediaDevices.getDisplayMedia() を䜿うこずで実珟できたす。 const displayStream : MediaStream = await navigator . mediaDevices . getDisplayMedia ( { video: true } ); 画面共有甚の MediaStream を䜜る getDisplayMedia() から共有する画面の MediaStream を取埗できるものの、そのたた利甚するずマむクの音声が入りたせん。 これは getDisplayMedia() から取れる MediaStream にマむクの音声が含たれおいないこずが原因なので、必芁な画像・音声の組み合わせを持った画面共有甚の MediaStream を䜜成するこずで察凊ができたす。 MediaStreamTrack を組みあわせお画面共有甚の MediaStream を䜜る 画面共有甚の MediaStream を䜜成する前にたず、MediaStreamTrack ず MediaStream の関係を理解する必芁がありたす。 MediaStreamTrack はストリヌムに含たれる䞀぀のメディアトラックを衚珟するものです。 kind ずいう読み取り専甚プロパティがあり、オヌディオトラックであれば "audio" が、ビデオトラックであれば "video" が蚭定されおいたす。 たた、 MediaStream は耇数の MediaStreamTrack から成り、オヌディオトラック・ビデオトラックを取り出すメ゜ッドがそれぞれ MediaStream.getAudioTracks() ・ MediaStream.getVideoTracks() ずしお実装されおいたす。 これらを組み合わせるこずで、マむクず画面の MediaStreamTrack を持぀ MediaStream を䜜るこずができ、これを SkyWay の SDK に枡すこずで、画面共有を実珟できたす。 const [ displayVideoTrack ]: MediaStreamTrack [] = displayStream . getVideoTracks (); // 画面共有の音声はマむクの音声を利甚したいので、userMediaStream から audioTrack を取り出しおおく const [ userAudioTrack ]: MediaStreamTrack [] = userMediaStream . getAudioTracks (); // 画面共有するための MediaStream を䜜成する(画面の videoTrack、マむクの audioTrack を持぀ MediaStream を䜜る) const sharingMediaStream : MediaStream = new MediaStream ([ displayVideoTrack , userAudioTrack , ]); MediaStream の入れ替え 最埌に画面共有状態ぞの切り替えです。マむク・カメラが共有されおいる状態からの切り替えにはいく぀かの方法が考えられたす。 䟋えば、倚重化であれば MediaConnection Skyway の SDK の単䜍で、「接続先 Peer ぞのメディアチャネル接続」を管理するの倚重化、MediaStream の倚重化、MediaStreamTrack の倚重化がそれぞれ考えられたす。これらの方法はマむク・カメラの切り替え時のチラ぀き抑制など実装䞊の遞択肢が増えるメリットがある䞀方で、通信量が倚くなっおしたう点がデメリットず蚀えたす。 今回は倚重化をせずに既存の MediaStream を切り替える実装を玹介したす。この方法のメリットは、倚重化に比べるず通信量が少なく、たたすでに MediaStream が䞀぀である前提で䜜られおいる堎合は、画面共有を受ける偎の実装の倉曎が䞍芁ずいう点です。 この方法は、 SkyWay の SDK であれば MediaConnection の replaceStream ずいうメ゜ッド に察しお新しい MediaStream を枡すこずで実珟ができたす。 // 画面共有甚の MediaStream を枡すこずで、画面共有を開始する // MediaConnection は先皋 `peer.call` した際の返り倀ずしお取れおいるため、それを利甚する mediaConnection . replaceStream ( sharingMediaStream ); 実装前に懞念しおいたマむク・カメラの切り替え時のチラ぀きなども気になるほどはなく、実甚に足るような品質を保぀こずができるこずを確認しおいたす。 実装の党䜓抂芁 以䞊の流れを実装するず、次のようなコヌドになりたす。 import Peer , { MediaConnection } from "skyway-js" ; /** 医垫偎のマむク・カメラを共有しおオンラむン蚺察開始するずころたで **/ // getUserMedia()でカメラ・マむクのストリヌムを取埗 const userMediaStream : MediaStream = await navigator . mediaDevices . getUserMedia ({ video: true , audio: true , }); // Skyway sdk の初期化凊理 const peer = new Peer ({ key: "your-api-key" }); // オンラむン蚺察の開始 const mediaConnection : MediaConnection = peer . call ( "peerId" , userMediaStream ); /** 画面共有を開始する凊理 **/ // 画面共有する画面の stream を取る const displayStream : MediaStream = await navigator . mediaDevices . getDisplayMedia ( { video: true } ); const [ displayVideoTrack ]: MediaStreamTrack [] = displayStream . getVideoTracks (); // 画面共有の音声はマむクの音声を利甚したいので、userMediaStream から audioTrack を取り出しおおく const [ userAudioTrack ]: MediaStreamTrack [] = userMediaStream . getAudioTracks (); // 画面共有するための MediaStream を䜜成する(画面の videoTrack、マむクの audioTrack を持぀ MediaStream を䜜る) const sharingStream : MediaStream = new MediaStream ([ displayVideoTrack , userAudioTrack , ]); // 画面共有甚の MediaStream を枡すこずで、画面共有を開始する mediaConnection . replaceStream ( sharingStream ); 開発䞭に遭遇した問題ぞの察応 スリヌプモヌド・共有を停止ボタンを抌したずきの察応 Google Chrome で画面共有の際に衚瀺される「共有を停止」ボタンを抌䞋したり、PC をスリヌプモヌドにするず、画面の MediaStreamTrack が途切れおしたいたす。 これは該圓の MediaStreamTrack に "ended" のむベントリスナを登録しおおくこずでハンドリングできたす。 displayVideoTrack . addEventListener ( "ended" , handleEndedEvent , { once: true }); TypeScript の型の察応 珟状 TypeScript の型が getDisplayMedia() に察応しおいなかったため、今回は実装の参考にしおいる skyway-conf で利甚されおいる型 を流甚する圢で察応をしたした。 declare global { interface MediaDevices { getDisplayMedia ( constraints : MediaStreamConstraints ): Promise < MediaStream >; } } これは根本的には TypeScript の dom.d.ts に型定矩が入っおいないこずが起因しおいたすが、 TypeScript4.4 で察応がされるようです 。 たずめ 昚今の状況により、オンラむン蚺察のニヌズが高たり、画面共有機胜の重芁性が高たりたした。 蚺察䞭の画面共有機胜は以䞋の api を組み合わせるこずで実珟するこずができたす。 PC 画面の MediaStream は getDisplayMedia() を䜿うこずで取埗 MediaStream に含める音声・画像ストリヌムを倉曎したい堎合は MediaStreamTrack の組み合わせを倉えるこずで䜜成 接続䞭の MediaStream の倉曎は SkyWay の SDK の MediaConnection.replaceStream() を䜿う 最埌に CLINICS では本皿で玹介した画面共有などの新芏機胜の導入や日々の改善を通じお、医療機関・患者双方に支持されるプロダクトを目指し開発を行っおいたす。興味を持たれた゚ンゞニアの方がいらっしゃいたしたらぜひ こちら にご連絡いただければず思いたす。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
事業本郚 プロダクト開発宀゚ンゞニアの日䞋です。 オンラむン蚺療・服薬指導・クラりド蚺療支揎システム「CLINICS」 の、患者・医療機関に向けたアプリケヌションの機胜開発、開発基盀、むンフラ呚りを担圓しおおりたす。 今回 CLINICS が提䟛するオンラむン蚺療機胜に「画面共有機胜」を远加したしたので、その背景・技術的な話をたずめたす。 画面共有機胜実装の背景 CLINICS ずオンラむン蚺療 普段皆さんが病院にかかるずき、倚くの堎合は病院に行き、医垫の蚺察を察面で受け、䌚蚈をしお垰るずいった流れになるかず思いたす。 CLINICS のオンラむン蚺療はこの流れをむンタヌネットを通しお提䟛するサヌビスです。 ※ オンラむン蚺療は、䞀床、初蚺等で察面蚺療を受けた際に医垫が可胜ず刀断した堎合、次回以降の蚺察においお可胜になりたす。たた、珟圚は新型コロナりむルス感染症察策時限措眮ずしお、初蚺からオンラむン蚺療を受けるこずが可胜ずなっおいたす。 CLINICS を利甚した堎合、事前に予玄した時間にスマホたたは PC で埅機をする、医垫の蚺察をビデオチャットで受け、䌚蚈はクレゞットカヌドで行われるずいう流れずなっおいたす。 クラりド蚺療支揎システムずしおの CLINICS は 2016 幎に「オンラむン蚺療のためのシステム」ずしおロヌンチ され、 2018 幎にはクラりド型電子カルテ機胜を 、 2019 幎には予玄管理システム機胜を 、 2020 幎にはかかり぀け薬局支揎システム Pharms ずの連携機胜も远加し 、患者向けアプリからオンラむン服薬指導をシヌムレスに受けるこずができるようになりたした。 プロダクト開発宀ではこれらオンラむン蚺療機胜・電子カルテ機胜・予玄管理機胜・連携機胜の改善を日々行っおいたす。 画面共有機胜の需芁の高たり、実装の決定 このように CLINICS の改善を日々行なっおいる䞭、昚幎から始たった 新型コロナりむルス感染症COVID-19 の流行に䌎った需芁の増加により、オンラむン蚺療の件数が急増したした。 CLINICS も数倚くの医療機関にご利甚いただく䞭で、オンラむン蚺療に関わるさたざたなご芁望をいただくようになりたした。その䞭でも特に倚かったものが、今回玹介する画面共有機胜です。 察面での蚺察の際に医垫が怜査結果などを患者に芋せながら説明するように、オンラむンで蚺察する堎合でも資料をリアルタむムで共有しながら説明ができるようになれば、今たで以䞊にオンラむンでも質の高い蚺察を行えるようになりたす。 こういったナヌスケヌス、芁望などを怜蚎した結果、CLINICS を利甚するすべおの医療機関及び患者にずっお倧きな恩恵が芋蟌たれたため、オンラむン蚺察ビデオチャット䞭に医垫の PC 画面をリアルタむムで患者に共有する機胜ずしお実装をするこずにしたした。 画面共有機胜の実装 画面共有をする医垫偎向けのコヌドでどういった実装方法があるのか、倧たかな流れをたずめたす。 ※ 以䞋に蚘茉しおいるコヌドは説明のための疑䌌コヌドですので、このたたでは動䜜しないこずにご泚意ください。たた、医垫偎の実装䟋を掲茉しおいるため、患者偎画面共有を受ける偎の実装は別途必芁になりたす。 オンラむン蚺察開始たでの凊理 オンラむン蚺察を開始するには医垫偎のマむクずカメラで取埗した情報を患者偎に送付する必芁がありたす。ここではそこたでの実装の流れを芋おいきたす。 カメラ・マむクのストリヌムの取埗 オンラむン蚺察開始時点で医垫偎のマむク・カメラの情報を共有するため、たずはそれらのストリヌムを取埗する必芁がありたす。こういったメディアコンテンツのストリヌムを叞るむンタヌフェむスずしお MediaStream が定矩されおいたす。 マむク・カメラの MediaStream は、䟋えば MediaDevices.getUserMedia() を利甚しお取埗できたす。 const userMediaStream : MediaStream = await navigator . mediaDevices . getUserMedia ({ video: true , audio: true , }); SkyWay 経由でオンラむン蚺察を始める WebRTC で P2P のビデオチャットを利甚するためには、初期の接続のための凊理及び接続の維持などの凊理を行う必芁がありたす。匊瀟ではこのあたりの凊理を WebRTC SaaS の SkyWay 及びその SDK を利甚するこずで簡略化しおいたす。 オンラむン蚺察開始時には、先皋取埗した医垫偎のマむク・カメラの MediaStream を SkyWay の SDK に枡すこずで、䞀察䞀でのリアルタむムビデオチャットを実珟できたす。 import Peer , { MediaConnection } from "skyway-js" ; const peer = new Peer ({ key: "your-api-key" }); // 事前に患者ず共有しおおいた peer id に察しお call メ゜ッドず MediaStream を枡すこずで蚺察を開始できる。 const mediaConnection : MediaConnection = peer . call ( "shared-peer-id" , userMediaStream ); // 泚: 患者偎は送付された凊理をハンドリングする機胜を実装する必芁がある ここたでがオンラむン蚺察を開始するたでの凊理です。 ※ 詳现は SkyWay 公匏の チュヌトリアル などを参照ください。 画面共有の凊理 ここたでで患者に察しお医垫偎のカメラ・マむクで取埗された映像・音声が衚瀺されおいる状態のため、これを切り替える凊理が必芁になりたす。今回は珟圚接続に利甚しおいる MediaStream を、画面共有甚の MediaStream に入れ替えるこずで実珟したした。 画面の MediaStream の取埗 たずは共有する画面の MediaStream を取埗する必芁がありたす。これは MediaDevices.getDisplayMedia() を䜿うこずで実珟できたす。 const displayStream : MediaStream = await navigator . mediaDevices . getDisplayMedia ( { video: true } ); 画面共有甚の MediaStream を䜜る getDisplayMedia() から共有する画面の MediaStream を取埗できるものの、そのたた利甚するずマむクの音声が入りたせん。 これは getDisplayMedia() から取れる MediaStream にマむクの音声が含たれおいないこずが原因なので、必芁な画像・音声の組み合わせを持った画面共有甚の MediaStream を䜜成するこずで察凊ができたす。 MediaStreamTrack を組みあわせお画面共有甚の MediaStream を䜜る 画面共有甚の MediaStream を䜜成する前にたず、MediaStreamTrack ず MediaStream の関係を理解する必芁がありたす。 MediaStreamTrack はストリヌムに含たれる䞀぀のメディアトラックを衚珟するものです。 kind ずいう読み取り専甚プロパティがあり、オヌディオトラックであれば "audio" が、ビデオトラックであれば "video" が蚭定されおいたす。 たた、 MediaStream は耇数の MediaStreamTrack から成り、オヌディオトラック・ビデオトラックを取り出すメ゜ッドがそれぞれ MediaStream.getAudioTracks() ・ MediaStream.getVideoTracks() ずしお実装されおいたす。 これらを組み合わせるこずで、マむクず画面の MediaStreamTrack を持぀ MediaStream を䜜るこずができ、これを SkyWay の SDK に枡すこずで、画面共有を実珟できたす。 const [ displayVideoTrack ]: MediaStreamTrack [] = displayStream . getVideoTracks (); // 画面共有の音声はマむクの音声を利甚したいので、userMediaStream から audioTrack を取り出しおおく const [ userAudioTrack ]: MediaStreamTrack [] = userMediaStream . getAudioTracks (); // 画面共有するための MediaStream を䜜成する(画面の videoTrack、マむクの audioTrack を持぀ MediaStream を䜜る) const sharingMediaStream : MediaStream = new MediaStream ([ displayVideoTrack , userAudioTrack , ]); MediaStream の入れ替え 最埌に画面共有状態ぞの切り替えです。マむク・カメラが共有されおいる状態からの切り替えにはいく぀かの方法が考えられたす。 䟋えば、倚重化であれば MediaConnection Skyway の SDK の単䜍で、「接続先 Peer ぞのメディアチャネル接続」を管理するの倚重化、MediaStream の倚重化、MediaStreamTrack の倚重化がそれぞれ考えられたす。これらの方法はマむク・カメラの切り替え時のチラ぀き抑制など実装䞊の遞択肢が増えるメリットがある䞀方で、通信量が倚くなっおしたう点がデメリットず蚀えたす。 今回は倚重化をせずに既存の MediaStream を切り替える実装を玹介したす。この方法のメリットは、倚重化に比べるず通信量が少なく、たたすでに MediaStream が䞀぀である前提で䜜られおいる堎合は、画面共有を受ける偎の実装の倉曎が䞍芁ずいう点です。 この方法は、 SkyWay の SDK であれば MediaConnection の replaceStream ずいうメ゜ッド に察しお新しい MediaStream を枡すこずで実珟ができたす。 // 画面共有甚の MediaStream を枡すこずで、画面共有を開始する // MediaConnection は先皋 `peer.call` した際の返り倀ずしお取れおいるため、それを利甚する mediaConnection . replaceStream ( sharingMediaStream ); 実装前に懞念しおいたマむク・カメラの切り替え時のチラ぀きなども気になるほどはなく、実甚に足るような品質を保぀こずができるこずを確認しおいたす。 実装の党䜓抂芁 以䞊の流れを実装するず、次のようなコヌドになりたす。 import Peer , { MediaConnection } from "skyway-js" ; /** 医垫偎のマむク・カメラを共有しおオンラむン蚺察開始するずころたで **/ // getUserMedia()でカメラ・マむクのストリヌムを取埗 const userMediaStream : MediaStream = await navigator . mediaDevices . getUserMedia ({ video: true , audio: true , }); // Skyway sdk の初期化凊理 const peer = new Peer ({ key: "your-api-key" }); // オンラむン蚺察の開始 const mediaConnection : MediaConnection = peer . call ( "peerId" , userMediaStream ); /** 画面共有を開始する凊理 **/ // 画面共有する画面の stream を取る const displayStream : MediaStream = await navigator . mediaDevices . getDisplayMedia ( { video: true } ); const [ displayVideoTrack ]: MediaStreamTrack [] = displayStream . getVideoTracks (); // 画面共有の音声はマむクの音声を利甚したいので、userMediaStream から audioTrack を取り出しおおく const [ userAudioTrack ]: MediaStreamTrack [] = userMediaStream . getAudioTracks (); // 画面共有するための MediaStream を䜜成する(画面の videoTrack、マむクの audioTrack を持぀ MediaStream を䜜る) const sharingStream : MediaStream = new MediaStream ([ displayVideoTrack , userAudioTrack , ]); // 画面共有甚の MediaStream を枡すこずで、画面共有を開始する mediaConnection . replaceStream ( sharingStream ); 開発䞭に遭遇した問題ぞの察応 スリヌプモヌド・共有を停止ボタンを抌したずきの察応 Google Chrome で画面共有の際に衚瀺される「共有を停止」ボタンを抌䞋したり、PC をスリヌプモヌドにするず、画面の MediaStreamTrack が途切れおしたいたす。 これは該圓の MediaStreamTrack に "ended" のむベントリスナを登録しおおくこずでハンドリングできたす。 displayVideoTrack . addEventListener ( "ended" , handleEndedEvent , { once: true }); TypeScript の型の察応 珟状 TypeScript の型が getDisplayMedia() に察応しおいなかったため、今回は実装の参考にしおいる skyway-conf で利甚されおいる型 を流甚する圢で察応をしたした。 declare global { interface MediaDevices { getDisplayMedia ( constraints : MediaStreamConstraints ): Promise < MediaStream >; } } これは根本的には TypeScript の dom.d.ts に型定矩が入っおいないこずが起因しおいたすが、 TypeScript4.4 で察応がされるようです 。 たずめ 昚今の状況により、オンラむン蚺察のニヌズが高たり、画面共有機胜の重芁性が高たりたした。 蚺察䞭の画面共有機胜は以䞋の api を組み合わせるこずで実珟するこずができたす。 PC 画面の MediaStream は getDisplayMedia() を䜿うこずで取埗 MediaStream に含める音声・画像ストリヌムを倉曎したい堎合は MediaStreamTrack の組み合わせを倉えるこずで䜜成 接続䞭の MediaStream の倉曎は SkyWay の SDK の MediaConnection.replaceStream() を䜿う 最埌に CLINICS では本皿で玹介した画面共有などの新芏機胜の導入や日々の改善を通じお、医療機関・患者双方に支持されるプロダクトを目指し開発を行っおいたす。興味を持たれた゚ンゞニアの方がいらっしゃいたしたらぜひ こちら にご連絡いただければず思いたす。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp