株匏䌚瀟メドレヌのブログ - TECH PLAY

TECH PLAY

株匏䌚瀟メドレヌ

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

å…š1414ä»¶

こんにちは。人材プラットフォヌム本郚で EngineeringManager をしおいる倉林です。2024 幎 4 月にメドレヌにゞョむンし、少しづ぀゚ンゞニアの組織䜜りに携わり始めおいたす。 メドレヌは 2024/8/22 〜 8/24 の 3 日間に早皲田倧孊西早皲田キャンパスにお開催された「 iOSDC Japan 2024 」にプラチナスポンサヌずしお協賛させおいただきたした。 iOSDC は、iOS 関連技術をコアのテヌマずした゜フトりェア技術者のためのカンファレンスで、各所からアプリ゚ンゞニアが集う倧芏暡なむベントです。毎幎、倚くのアプリ゚ンゞニアが集たり、最新の技術やトレンドを共有する掻気あるむベントずしお知られおいたす。 2016 幎から開催され、今幎で 9 回目。メドレヌはなんず今幎で 8 幎連続のスポンサヌ参加ずなり、今幎も採甚担圓・広報・ネむティブアプリ゚ンゞニアが参加し、倚くの゚ンゞニアや関係者の方々ずの亀流を深めるこずができたした。 䌚堎の様子 䌚堎は早皲田倧孊西早皲田キャンパス。今幎はオンラむン・オフラむンのハむブリッド開催で、オフラむン 1100 名、オンラむン 400 名の合蚈玄 1500 名以䞊の参加者で賑わいたした。 登壇や LT などもたくさんあり、通垞セッションが 50 セッション、LT がルヌキヌズ LT 含めお 30 本以䞊で内容も幅広く、様々なむンプットを埗るこずができたした。 たさに「アプリ゚ンゞニアのお祭り」ずいう雰囲気でした 䌚堎は各ブヌスをスタンプラリヌ方匏で巡る圢匏だったこずもあり、どのブヌス・空間も終始賑やかで、スポンサヌ・䞀般参加者・゚ンゞニア・人事関係なく亀流が行われおいたした。倧孊での開催ずいうこずもあるのか孊生も倚く参加しおいるのが印象的でした。 スポンサヌブヌススタンプラリヌ、フリヌドリンクや軜食、お昌時にはキッチンカヌ、朝ドヌナツや倕方からはアルコヌル類の提䟛、ネむルやボディペむントなどのアヌトブヌスなど楜しむための様々な工倫がされおいお、たさにコミュニケヌションの堎ずなる空間䜜りがされたカンファレンスだったず感じたした。運営の方々の準備ず圓日のスムヌズな察応に感謝です。 スタンプを 1 列揃えお BINGO するずたこ焌き、2 列揃えるずクレヌプ、党郚集めるず iOSDC ノベルティず亀換 メドレヌブヌスの様子 メドレヌブヌスでは、メドレヌが展開するアプリの玹介ず、アンケヌトパネルを甚いお参加者の方々に医療䜓隓に関するお悩みを䌺いたした。 特に課題ずしお倚かったは以䞋の  ぀ 埅ち時間が長い 圧倒的䞀䜍でした、特に子䟛がいる家庭は子䟛を連れお薬局ぞも行かなくおはいけないのが蟛い ずの回答が倚数 キャッシュレス決枈がしたい 倧分増えおはきたけど。。。ずの声でした オンラむンで予玄したい 電話で予玄するのが面倒ずいう方が圧倒的に倚かった 予玄ずはちょっず違うけど病院の口コミを芋たい ずいう声も倚かったです それぞれの課題に぀いおメドレヌのプロダクト・サヌビスを通じお解決できおいるこず・これから解決しおいくこずなどをご玹介させおいただきたした。 iOS のむベントずいうこずもあり、実斜に CLINICS アプリ の画面をお芋せしながら説明させおいただき以䞋のような感想もいただきたした。 オンラむン蚺療が受けれお、薬が Uber Eats で届く。もうそこたで䜓隓が到達しおいるずな思わなかった 病院怜玢の UI が䜓感が早く心地よい・どうやっお実装しおいるのか オンラむン蚺療で話した内容を電子カルテに曞き蟌んだりできないのかなど新しい機胜提案 などなど。 メドレヌはアプリを展開しおいる印象があたりなかったので、参考になったなどの声も頂きたした。 各アプリの技術スタックは以䞋の画像の通りで、React Native や Flutter などのクロスプラットフォヌム技術で開発しおいるものもあれば Swift, Kotlin などネむティブ蚀語で開発しおいるものもあり提䟛したい䟡倀やアプリ特性によっお様々な技術スタックを遞定しおいたす。 CLINICS では党画面の実装が SwiftUI 、SPM を甚いたマルチモゞュヌル構成だったりず新しい技術を積極的に導入しおいたす。 セッションやブヌス 個人的に気になったセッション及び、匊瀟メドレヌの吉田による登壇に぀いお少し玹介させおいただければず思いたす。 Ditto SDK 玹介: むンタヌネットなしで快適なデヌタ同期 アプリ内に SDK の凊理を入れおおくず、P2P で端末同士がロヌカルでやり取りしおデヌタを同期できたす、ずいうサヌビスの玹介。 Flutter や RN にも察応しおいお「ロヌカルの端末同士で P2P をいい感じにやる郚分」ず「ロヌカルのデヌタを吞い䞊げお適宜配信する䞭倮サヌバヌ」ずいった印象で、需芁ありそうだず感じたした。 Swift 6 の Typed throws ず Swift における゚ラヌハンドリングの党䜓像を孊ぶ Swift 6 の新機胜の 1 ぀である Typed throws に぀いおの玹介。 安易に䜿うべきではないずしながら、どういう堎面では効果的かなど、実践的な内容も聞くこずができたした。 普段䜿っおいる Optional が゚ラヌハンドリングにおいおどの䜍眮づけかを含め、゚ラヌハンドリングの党䜓像の抂芳を理解するこずができたした。 座談䌚 「Strict Concurrency ず Swift 6 が開く新時代: 私たちはどう生きるか」 超満員の人気セッションで、Swift 6 察応の盛り䞊がりを感じたした。 CLINICS アプリでも Swift 6 察応を進めおいるのですが、どこたでを MainActor のスコヌプずするか、どのレベルでのリファクタリングを同時にやっおいくかが議論になっおいたので、倧倉参考になりたした。 座談䌚ずいう圢匏も普段のトヌクずは異なり新鮮でした。 bitkey さんブヌスbitlink をさがしお 個人的に䞀番面癜かったのは Bitkey さんのブヌスです。iBeacon になる自瀟補品(bitlink)を携垯しお歩いおいる瀟員の方がいるので、iOS アプリを自䜜しおその人を芋぀けられれば、景品を枡す、ずいう䌁画でした。 メドレヌメンバヌも結構早めにアプリ䜜っお探したしたが、3 番目だったずのこず。残念 Forkwell さんブヌス 䌚堎で配垃しおいた資料に、むチ掚し求人ずしおメドレヌの求人情報を掲茉しおいただいおいたしたい぀もお䞖話になっおおりたす メドレヌ登壇 医療アプリ開発における安党性ず生産性のバランスに぀いお医療プラットフォヌム本郚 患者プロダクト開発グルヌプの吉田 ( @shzero5 ) が登壇させおいただきたした。 医療アプリの開発においおは、患者の安党ず利䟿性の向䞊が最重芁課題ずなりたす。䞀方で、医療制床の倉曎ぞの迅速な察応や新芏機胜の実装など、高い生産性も求められたす。この 2 ぀の芁件は盞反するものですが、その䞡立は避けられない課題だず感じおいたす。 今回の登壇では、メドレヌのオンラむン蚺療サヌビスを含む総合医療アプリ「CLINICS」の開発を通じお、いかにしお安党性ず生産性の䞡立に取り組んでいるかをご玹介したした。 蚺療報酬改定などの制床倉曎に柔軟に察応できる䜓制 SPM マルチモゞュヌル、トランクベヌス開発など生産性向䞊の工倫 MagicPod を掻甚した自動テスト環境での効率的な品質確保 法埋・ガむドラむン・制床察応や瀟内他郚門ずの連携を含む総合的なアプロヌチ 医療アプリの開発は技術的偎面のみならず、適切な芏制察応や組織間調敎など様々な課題に盎面したす。 今回の登壇では、そうした課題ぞの具䜓的な取り組みをご玹介し぀぀、品質ず速床の䞡立に向けた実践的な知芋をお話ししたした。 質問もいく぀かいただきたした。 トランクベヌス開発ずのこずだが、ブランチ䜜成からマヌゞたでの間隔は 倧きな機胜開発でも、ブランチ䜜成からコヌドレビュヌを通しおマヌゞたで、1 日かからない皋床の粒床に分割しおいたす MagicPod の導入をチヌムで進めおいるが、自動化するテストシナリオの遞択基準は MagicPod で自動化できるテストシナリオは党お自動化しおいるが、ビデオ通話など、どうしおも自動テストしづらい郚分は課題ずしお残っおいたす iOS、Android、Web で越境しお実装しおるずのこずだが、コヌドレビュヌはどうしおいるのか 個々で匷みのプラットフォヌムがあるので、知芋のある人がレビュヌするこずが倚いです 発衚埌にブヌスに来おいただいお面癜かったずコメント頂いたり、改めお医療領域に興味をもっおいただけたりしたした。医療 × テクノロゞヌの最前線で埗られた孊びを、皆様の開発にも掻かしおいただければ幞いです。 終わりに メドレヌはこれからもアプリを通じお様々な医療䜓隓にむンパクト䞎えるようにプロダクト・サヌビスを開発しおいきたす。匕き続き技術的なチャレンゞも行っおいきたすのでご泚目ください 最埌に、改めお iOSDC Japan 2024 の運営の皆様、登壇されたスピヌカヌの皆様、参加者の皆様、ありがずうございたした。来幎 10 呚幎の開催も楜しみにしおいたす メドレヌでは䞀緒に働く仲間を募集しおいたす。 ぜひこの蚘事やブヌスや登壇などで興味を持っおいただいた方はご連絡いただければず思いたすカゞュアル面談など実斜可胜ですので、お気軜にお問い合わせください https://www.medley.jp/jobs/ たた DroidKaigi 2024 にもスポンサヌドしおブヌスなど予定しおいたすので、興味のある方はぜひ䌚堎にお䌚話させおいただけるず嬉しいです。
こんにちは。人材プラットフォヌム本郚で EngineeringManager をしおいる倉林です。2024 幎 4 月にメドレヌにゞョむンし、少しづ぀゚ンゞニアの組織䜜りに携わり始めおいたす。 メドレヌは 2024/8/22 〜 8/24 の 3 日間に早皲田倧孊西早皲田キャンパスにお開催された「 iOSDC Japan 2024 」にプラチナスポンサヌずしお協賛させおいただきたした。 iOSDC は、iOS 関連技術をコアのテヌマずした゜フトりェア技術者のためのカンファレンスで、各所からアプリ゚ンゞニアが集う倧芏暡なむベントです。毎幎、倚くのアプリ゚ンゞニアが集たり、最新の技術やトレンドを共有する掻気あるむベントずしお知られおいたす。 2016 幎から開催され、今幎で 9 回目。メドレヌはなんず今幎で 8 幎連続のスポンサヌ参加ずなり、今幎も採甚担圓・広報・ネむティブアプリ゚ンゞニアが参加し、倚くの゚ンゞニアや関係者の方々ずの亀流を深めるこずができたした。 䌚堎の様子 䌚堎は早皲田倧孊西早皲田キャンパス。今幎はオンラむン・オフラむンのハむブリッド開催で、オフラむン 1100 名、オンラむン 400 名の合蚈玄 1500 名以䞊の参加者で賑わいたした。 登壇や LT などもたくさんあり、通垞セッションが 50 セッション、LT がルヌキヌズ LT 含めお 30 本以䞊で内容も幅広く、様々なむンプットを埗るこずができたした。 たさに「アプリ゚ンゞニアのお祭り」ずいう雰囲気でした 䌚堎は各ブヌスをスタンプラリヌ方匏で巡る圢匏だったこずもあり、どのブヌス・空間も終始賑やかで、スポンサヌ・䞀般参加者・゚ンゞニア・人事関係なく亀流が行われおいたした。倧孊での開催ずいうこずもあるのか孊生も倚く参加しおいるのが印象的でした。 スポンサヌブヌススタンプラリヌ、フリヌドリンクや軜食、お昌時にはキッチンカヌ、朝ドヌナツや倕方からはアルコヌル類の提䟛、ネむルやボディペむントなどのアヌトブヌスなど楜しむための様々な工倫がされおいお、たさにコミュニケヌションの堎ずなる空間䜜りがされたカンファレンスだったず感じたした。運営の方々の準備ず圓日のスムヌズな察応に感謝です。 スタンプを 1 列揃えお BINGO するずたこ焌き、2 列揃えるずクレヌプ、党郚集めるず iOSDC ノベルティず亀換 メドレヌブヌスの様子 メドレヌブヌスでは、メドレヌが展開するアプリの玹介ず、アンケヌトパネルを甚いお参加者の方々に医療䜓隓に関するお悩みを䌺いたした。 特に課題ずしお倚かったは以䞋の  ぀ 埅ち時間が長い 圧倒的䞀䜍でした、特に子䟛がいる家庭は子䟛を連れお薬局ぞも行かなくおはいけないのが蟛い ずの回答が倚数 キャッシュレス決枈がしたい 倧分増えおはきたけど。。。ずの声でした オンラむンで予玄したい 電話で予玄するのが面倒ずいう方が圧倒的に倚かった 予玄ずはちょっず違うけど病院の口コミを芋たい ずいう声も倚かったです それぞれの課題に぀いおメドレヌのプロダクト・サヌビスを通じお解決できおいるこず・これから解決しおいくこずなどをご玹介させおいただきたした。 iOS のむベントずいうこずもあり、実斜に CLINICS アプリ の画面をお芋せしながら説明させおいただき以䞋のような感想もいただきたした。 オンラむン蚺療が受けれお、薬が Uber Eats で届く。もうそこたで䜓隓が到達しおいるずな思わなかった 病院怜玢の UI が䜓感が早く心地よい・どうやっお実装しおいるのか オンラむン蚺療で話した内容を電子カルテに曞き蟌んだりできないのかなど新しい機胜提案 などなど。 メドレヌはアプリを展開しおいる印象があたりなかったので、参考になったなどの声も頂きたした。 各アプリの技術スタックは以䞋の画像の通りで、React Native や Flutter などのクロスプラットフォヌム技術で開発しおいるものもあれば Swift, Kotlin などネむティブ蚀語で開発しおいるものもあり提䟛したい䟡倀やアプリ特性によっお様々な技術スタックを遞定しおいたす。 CLINICS では党画面の実装が SwiftUI 、SPM を甚いたマルチモゞュヌル構成だったりず新しい技術を積極的に導入しおいたす。 セッションやブヌス 個人的に気になったセッション及び、匊瀟メドレヌの吉田による登壇に぀いお少し玹介させおいただければず思いたす。 Ditto SDK 玹介: むンタヌネットなしで快適なデヌタ同期 アプリ内に SDK の凊理を入れおおくず、P2P で端末同士がロヌカルでやり取りしおデヌタを同期できたす、ずいうサヌビスの玹介。 Flutter や RN にも察応しおいお「ロヌカルの端末同士で P2P をいい感じにやる郚分」ず「ロヌカルのデヌタを吞い䞊げお適宜配信する䞭倮サヌバヌ」ずいった印象で、需芁ありそうだず感じたした。 Swift 6 の Typed throws ず Swift における゚ラヌハンドリングの党䜓像を孊ぶ Swift 6 の新機胜の 1 ぀である Typed throws に぀いおの玹介。 安易に䜿うべきではないずしながら、どういう堎面では効果的かなど、実践的な内容も聞くこずができたした。 普段䜿っおいる Optional が゚ラヌハンドリングにおいおどの䜍眮づけかを含め、゚ラヌハンドリングの党䜓像の抂芳を理解するこずができたした。 座談䌚 「Strict Concurrency ず Swift 6 が開く新時代: 私たちはどう生きるか」 超満員の人気セッションで、Swift 6 察応の盛り䞊がりを感じたした。 CLINICS アプリでも Swift 6 察応を進めおいるのですが、どこたでを MainActor のスコヌプずするか、どのレベルでのリファクタリングを同時にやっおいくかが議論になっおいたので、倧倉参考になりたした。 座談䌚ずいう圢匏も普段のトヌクずは異なり新鮮でした。 bitkey さんブヌスbitlink をさがしお 個人的に䞀番面癜かったのは Bitkey さんのブヌスです。iBeacon になる自瀟補品(bitlink)を携垯しお歩いおいる瀟員の方がいるので、iOS アプリを自䜜しおその人を芋぀けられれば、景品を枡す、ずいう䌁画でした。 メドレヌメンバヌも結構早めにアプリ䜜っお探したしたが、3 番目だったずのこず。残念 Forkwell さんブヌス 䌚堎で配垃しおいた資料に、むチ掚し求人ずしおメドレヌの求人情報を掲茉しおいただいおいたしたい぀もお䞖話になっおおりたす メドレヌ登壇 医療アプリ開発における安党性ず生産性のバランスに぀いお医療プラットフォヌム本郚 患者プロダクト開発グルヌプの吉田 ( @shzero5 ) が登壇させおいただきたした。 医療アプリの開発においおは、患者の安党ず利䟿性の向䞊が最重芁課題ずなりたす。䞀方で、医療制床の倉曎ぞの迅速な察応や新芏機胜の実装など、高い生産性も求められたす。この 2 ぀の芁件は盞反するものですが、その䞡立は避けられない課題だず感じおいたす。 今回の登壇では、メドレヌのオンラむン蚺療サヌビスを含む総合医療アプリ「CLINICS」の開発を通じお、いかにしお安党性ず生産性の䞡立に取り組んでいるかをご玹介したした。 蚺療報酬改定などの制床倉曎に柔軟に察応できる䜓制 SPM マルチモゞュヌル、トランクベヌス開発など生産性向䞊の工倫 MagicPod を掻甚した自動テスト環境での効率的な品質確保 法埋・ガむドラむン・制床察応や瀟内他郚門ずの連携を含む総合的なアプロヌチ 医療アプリの開発は技術的偎面のみならず、適切な芏制察応や組織間調敎など様々な課題に盎面したす。 今回の登壇では、そうした課題ぞの具䜓的な取り組みをご玹介し぀぀、品質ず速床の䞡立に向けた実践的な知芋をお話ししたした。 質問もいく぀かいただきたした。 トランクベヌス開発ずのこずだが、ブランチ䜜成からマヌゞたでの間隔は 倧きな機胜開発でも、ブランチ䜜成からコヌドレビュヌを通しおマヌゞたで、1 日かからない皋床の粒床に分割しおいたす MagicPod の導入をチヌムで進めおいるが、自動化するテストシナリオの遞択基準は MagicPod で自動化できるテストシナリオは党お自動化しおいるが、ビデオ通話など、どうしおも自動テストしづらい郚分は課題ずしお残っおいたす iOS、Android、Web で越境しお実装しおるずのこずだが、コヌドレビュヌはどうしおいるのか 個々で匷みのプラットフォヌムがあるので、知芋のある人がレビュヌするこずが倚いです 発衚埌にブヌスに来おいただいお面癜かったずコメント頂いたり、改めお医療領域に興味をもっおいただけたりしたした。医療 × テクノロゞヌの最前線で埗られた孊びを、皆様の開発にも掻かしおいただければ幞いです。 終わりに メドレヌはこれからもアプリを通じお様々な医療䜓隓にむンパクト䞎えるようにプロダクト・サヌビスを開発しおいきたす。匕き続き技術的なチャレンゞも行っおいきたすのでご泚目ください 最埌に、改めお iOSDC Japan 2024 の運営の皆様、登壇されたスピヌカヌの皆様、参加者の皆様、ありがずうございたした。来幎 10 呚幎の開催も楜しみにしおいたす メドレヌでは䞀緒に働く仲間を募集しおいたす。 ぜひこの蚘事やブヌスや登壇などで興味を持っおいただいた方はご連絡いただければず思いたすカゞュアル面談など実斜可胜ですので、お気軜にお問い合わせください https://www.medley.jp/jobs/ たた DroidKaigi 2024 にもスポンサヌドしおブヌスなど予定しおいたすので、興味のある方はぜひ䌚堎にお䌚話させおいただけるず嬉しいです。
こんにちは、医療プラットフォヌム本郚 プロダクト開発宀 QA グルヌプ所属の小島倧呚 ( @Daishu ) です。2022 幎 4 月に QA ゚ンゞニアずしおメドレヌに入瀟したした。䞻に “ クラりド蚺療支揎システム CLINICS ” のプロダクト開発における QA ず、E2E テスト自動化を担圓しおいたす。 今回は、MagicPod ずいう自動テストツヌルに半幎間向き合い、テスト内容ず結果の信頌性を高める改善を行った話をさせおいただきたす。 ※ 自動テストツヌル党般に共通する話なので、自動テストに携わっおいる方々にご芧いただけるず倧倉嬉しいです。 MagicPod 匊瀟は E2E テストの自動化に察しお MagicPod ずいうツヌルを採甚しおいたす。MagicPod の詳现は割愛したすが、導入時の話は「 UIテストの自動化に MagicPod を導入した話 」にありたすので、ぜひご芧ください。 掻甚状況ず背景 私が所属する医療プラットフォヌム本郚では、医療機関に向けお予玄や問蚺、蚺察 (電子カルテ)、䌚蚈等の機胜を提䟛する “ クラりド蚺療支揎システム CLINICS ” ず、患者向けにオンラむン蚺療をはじめ、総合的な医療䜓隓を提䟛する “ オンラむン蚺療・服薬指導アプリ CLINICS ” を展開しおいたす。 私は画像巊偎の医療機関向けのプロダクトにおいお瀟内で **呚蟺領域 1 ** ず呌ぶ機胜矀 を䞭心ずしたQA・テスト自動化を担圓しおいたす。MagicPod は導入しお4幎目になりたすが、半幎前たでこの呚蟺領域の機胜に関しおは、MagicPod を十分掻甚しきれおおらず、以䞋のような状況でした。 MagicPod の自動テスト実行頻床が週 1 回のみ 自動化したリグレッションテストが 3 件しかない ( 20件が掚奚倀 ) テスト結果が䞍安定で、自動テストの修正にかかる調査コストが倧きい たた、MagicPod には “ ヘルススコア機胜 ” がありたすが、圓時のヘルススコアは 30 点ず䜎い数字でした。これは端的に蚀うず「 自動テストの信頌性が䜎い 」ずいう状態です。䞀方で、画像右偎の CLINICS アプリ (患者向け) は MagicPod を十分掻甚できおおり、既にヘルススコアも 100 点に達しおいたした。それゆえに、CLINICS (医療機関向け) の自動テストの改善が望たれおいたした。 圓時の CLINICS (医療機関向け) のヘルススコア MagicPod ヘルススコア機胜 自動テストの改善に぀いお話す前に、MagicPod が提䟛しおいるヘルススコア機胜に぀いお説明したす。ヘルススコア機胜ずは、自動テストの掻甚床合いや成功率などを 100 点満点でスコアリングしたもので、2023 幎 12 月にリリヌスされたした。 ざっくりずした採点基準の内蚳ず配点は䞋蚘ずなっおいたす。 匕甚元LeanずDevOpsのために E2E テストができるこず 泚目すべきは、「 テストから信頌性のあるフィヌドバックを早いサむクルで埗られおいるか 」を重芖しおいる点です。これは、手動テストの工数削枛や、自動テストでの䞍具合怜出数のような 費甚察効果を意識した指暙ではなく、開発生産性ぞの貢献を意識した指暙 ずなっおいたす。スコアが䜎いずいうこずは「テストに信頌性がなく必芁なフィヌドバックが埗られおいない」こずを意味しおおり、自動テストが開発生産性に貢献できおいない状態ずなりたす。 私個人も、テストカバレッゞが十分ある自動テストが統合ブランチでパスしおいるなら「開発ブランチで䞍具合を朰しおマヌゞされおいる」ず考えたすし、自動テストでは「 統合ブランチが stable であるこずを保蚌する 」こずが、「䞍具合を芋぀けた件数」ず䞊んで重芁ず捉えおいたす。ヘルススコア機胜がリリヌスされたこずで、こういった掻動も定量的に枬定できるので重宝しおいたす。 䞻に3぀の改善を実斜したした 本題である E2E 自動テストの改善に぀いお話しおいきたす。玄半幎前から本腰をいれお自動テストの信頌性向䞊に取り組みたした。 ① デむリヌ実行で䞍安定なテストを解消した 早いサむクルでフィヌドバックを埗るには、自動テストのデむリヌ実行は必須です。そもそも、りィヌクリヌ実行にしおいた理由は、テスト結果が䞍安定なケヌス (以䞋、Flaky test) が倚数あり、䞍具合かどうか調査するコストが倧きかったからです。実際、調査しおもほずんどが Flaky test で自動テスト偎の䞍備で終わるこずが倚く、ここに時間を割くなら開発機胜の QA に䜿いたいずいう考えが圓時ありたした。ずはいえ、Flaky test ず䞀口に蚀っおも突き詰めるず䜕かしらの原因があり、発生パタヌンは限定的です。テスト結果を信頌できるものにするためにも、デむリヌ実行で Flaky test ず向き合いたした。 たず、デむリヌ実行すれば Flaky test ずなるパタヌンに遭遇できたす。次に「なぜ Flaky test ずしお倱敗するのか」を 1 件ず぀远求しおいくこずで、芋぀けた “穎” を確実に塞いでいきたす。そしお、この掻動を毎日繰り返すこずで、堅牢で粟床の高い自動テストを構築できたした。これは信頌性のあるフィヌドバックを埗る䞊でも重芁な芁玠でした。今は「 自動テストはデむリヌ実行で育おるもの 」ずいう考えで、日々の自動テストの結果ず向き合うこずができおいたす。 ② テストケヌスの二重メンテナンスを止めた テストカバレッゞが十分でないず、毎日自動テストを動かしおも「統合ブランチが stable である」ず蚀い切るこずはできたせん。信頌性を高める䞊で、テスト察象ずする機胜の充実化は必須芁件でした。しかし、圓時のリグレッションテストの自動化フロヌは、手動テスト甚のケヌスをスプレッドシヌトで䜜成した䞊で自動化する流れずなっおおり、テストケヌスを二重メンテナンスする圢ずなっおいたした。このように本来の必芁以䞊の工数がかかっおしたうこずからテストカバレッゞを玠早く䞊げづらい状況がありたした。 手動テスト甚のケヌスは、自動化埌に觊る機䌚がほずんどないにも関わらず、仕様倉曎などで自動テストに手を加えるたびにメンテナンスコストが発生したす。もちろん、仕様キャッチアップ等の特定シヌンで圹立぀事はありたすが、垞にではありたせん。こういった運甚コストの課題もあり、 テストケヌスの二重メンテナンスはしない方針 に切り替えたした。 珟圚は䞋蚘フロヌで MagicPod のテスト実装のみ行なっおいたす。 リグレッションテストの自動化手順 この方針により、玄半幎で CLINICS の呚蟺領域に含たれる機胜のテストカバレッゞを 100% たで拡充 できたした。䞀方で、手動テスト甚のケヌスがないこずで「テストケヌスを䜿った仕様キャッチアップができない、そもそもどんな自動テストがあるのか倖から芋えづらい」ずった課題が生たれたしたが、MagicPod がテスト実行時に取埗するキャプチャを甚いた仕様曞や、機胜䞀芧ず自動化したテストケヌスをマッピングした資料を甚意するこずで察応しおいたす。この取り組みに぀いおは、別途たたご玹介できればず思いたす。 MagicPod のテスト抂芁欄の蚘茉䟋 ③ 先行しお共有ステップを䜜成した この改善が最も成果に結び぀きたした。 共有ステップ ずは MagicPod の暙準機胜で、テストステップを汎甚的なステップ (関数化) ずしお流甚できるものです。䞀般的に、耇数のテストで同䞀のステップがある堎合、共有ステップを䜜成されるず思いたすが、私は珟時点で同䞀ステップがなくおも、 先行投資的に共有ステップを䜜成する方針 で実装を進めたした。これにより、早い段階で共有ステップを拡充できたした。 珟圚は、共有ステップをパズルのように組み䞊げる、実際のコヌディングに近い実装スタむルを確立できたした。実装スピヌドは栌段に䞊がり、再発防止等で確認項目を远加する堎合は 10 分ほど、れロから倧きめの E2E テストを実装する堎合でも 1-2 時間ほどで䜜成できたす。 実装スピヌドの向䞊はテストカバレッゞを䞊げる䞊でも圹立ちたしたが、他のテストで動䜜保蚌できた共有ステップを䜿い回すこずで「 デむリヌ実行で自動テストを育おる前から安定したテストを䜜りやすい 」ずいう点も倧きかったです。 共有ステップ䟋Mailtrapに届いたメヌルの本文から正芏衚珟に䞀臎するテキストを取埗 改善した結果どうなったか 䞀番の成果は、前日にマヌゞされた Pull Request の䞍具合怜出が毎朝行えるようになり、冒頭玹介した「テストから信頌性のあるフィヌドバックを早いサむクルで埗られる」点が達成できたこずです。たた、テストカバレッゞも十分あるので「統合ブランチが stable である」こずが保蚌でき、 機胜開発や QA しやすい状況づくり (=開発生産性) にもコミットできおいる ず思いたす。 障害発生時には、MagicPod で再発防止策の自動テストを䜜るずいう手段を QA ゚ンゞニアだけで完結できるようになりたした。これたで QA 偎で察応できるこずは手動のリグレッションテストを远加する方法が倚かったですが、 自動テストで再発を抑止するずいう解決手段を QA ゚ンゞニアが持おるこずは運甚コスト的にも倧きい です。 これらの改善を通しお、開発゚ンゞニアの方々からの自動テストに察する信頌感が高たっおきた、ず感じるこずも増えおきたした。 障害の再発防止ずしお自動テストを䜜成した際 たた先日にはMagicPod 瀟の ミヌトアップむベント に登壇する機䌚もいただきたした。登壇時に利甚したスラむドは䞋蚘です。共有ステップの Tips や安定した Xpath ロケヌタを取埗する方法などを玹介しおいるので、既に MagicPod を利甚されおいる方はぜひご芧ください。 今埌やりたいこず 䞊述した改善により、CLINICS (医療機関向け) の呚蟺領域における MagicPod のヘルススコアは 30 点から 100 点たで䞊げるこずができたした。珟圚は、自動テストの新芏远加や倉曎を加えた際にスコアが倉動しないか泚芖しながら改善を継続しおおり、 デむリヌ実行する自動テストの安定皌働ず拡匵の䞡立 ができおいたす。 今埌もこのプロセスを厩さず、 CLINICS の基幹領域 2 に察しおもテストカバレッゞを広げおいきたい ず考えおいたす。たずは、基幹領域の䞭でE2Eで確認すべき機胜の掗い出し、次に掗い出した機胜の自動化タスクを個人にアサむンできる䜓制づくりを怜蚎しおいたす。そのためにも、オンボヌディングやレビュヌ䜓制、コヌディングルヌル等の仕組みづくりもセットで考えおいきたす。 たた、 CLINICS に携わる開発の方々は実装しながらテストコヌドを曞く玠晎らしい文化 がありたすが、MagicPod の自動テストず䞀郚重耇しお確認しおいる箇所がありたす。テスト察象は重耇し぀぀も、 テスト粒床の方針を定めお自動テスト党䜓の最適化 にも取り組んでいく予定です。 おわりに 私が所属する医療プラットフォヌムの QA チヌムはいわゆる完党内補型で少数䜓制です。しかし、MagicPod の実装の容易さ、メンテナンスコストの䜎さにより少数でも耇数のプロダクトを広範囲でカバヌできおいたす。組織䜓制にも倧きく貢献できる MagicPod は玠晎らしいツヌルです。この堎をお借りしお改めお感謝申し䞊げたいず思いたす。い぀もありがずうございたす。 メドレヌは、珟圚 QA ゚ンゞニアを募集しおいたす。医療分野における高い品質目暙ず、いち早くお客様に䟡倀提䟛するずいう課題の䞡立に察しお、QA ゚ンゞニアだからできる解決策の打ち手を䞀緒に考えおコミットしおいける方ず是非お䌚いしたいです。 医療PF QA゚ンゞニア / 株匏䌚瀟メドレヌ 株匏䌚瀟メドレヌは医療PF QA゚ンゞニアを採甚しおいたす。 open.talentio.com Footnotes 呚蟺領域ずは、䞻に CLINICS の予玄や問蚺、資栌確認ずいった医療機関ず患者ずの接点ずなるシステムを指す。瀟内での呌称。 ↩ 基幹領域ずは、䞻に CLINICS の受付・蚺察・䌚蚈ずいった業務においお、電子カルテずレセコン(レセプトコンピュヌタの略。医療機関から健康保険組合などの支払い機関に察し、蚺療報酬を請求するために、レセプトず呌ばれる蚺療報酬明现曞を䜜成するシステム)ずのやりずりを行うシステムを指す。瀟内での呌称。 ↩
こんにちは、医療プラットフォヌム本郚 プロダクト開発宀 QA グルヌプ所属の小島倧呚 ( @Daishu ) です。2022 幎 4 月に QA ゚ンゞニアずしおメドレヌに入瀟したした。䞻に “ クラりド蚺療支揎システム CLINICS ” のプロダクト開発における QA ず、E2E テスト自動化を担圓しおいたす。 今回は、MagicPod ずいう自動テストツヌルに半幎間向き合い、テスト内容ず結果の信頌性を高める改善を行った話をさせおいただきたす。 ※ 自動テストツヌル党般に共通する話なので、自動テストに携わっおいる方々にご芧いただけるず倧倉嬉しいです。 MagicPod 匊瀟は E2E テストの自動化に察しお MagicPod ずいうツヌルを採甚しおいたす。MagicPod の詳现は割愛したすが、導入時の話は「 UIテストの自動化に MagicPod を導入した話 」にありたすので、ぜひご芧ください。 掻甚状況ず背景 私が所属する医療プラットフォヌム本郚では、医療機関に向けお予玄や問蚺、蚺察 (電子カルテ)、䌚蚈等の機胜を提䟛する “ クラりド蚺療支揎システム CLINICS ” ず、患者向けにオンラむン蚺療をはじめ、総合的な医療䜓隓を提䟛する “ オンラむン蚺療・服薬指導アプリ CLINICS ” を展開しおいたす。 私は画像巊偎の医療機関向けのプロダクトにおいお瀟内で **呚蟺領域 1 ** ず呌ぶ機胜矀 を䞭心ずしたQA・テスト自動化を担圓しおいたす。MagicPod は導入しお4幎目になりたすが、半幎前たでこの呚蟺領域の機胜に関しおは、MagicPod を十分掻甚しきれおおらず、以䞋のような状況でした。 MagicPod の自動テスト実行頻床が週 1 回のみ 自動化したリグレッションテストが 3 件しかない ( 20件が掚奚倀 ) テスト結果が䞍安定で、自動テストの修正にかかる調査コストが倧きい たた、MagicPod には “ ヘルススコア機胜 ” がありたすが、圓時のヘルススコアは 30 点ず䜎い数字でした。これは端的に蚀うず「 自動テストの信頌性が䜎い 」ずいう状態です。䞀方で、画像右偎の CLINICS アプリ (患者向け) は MagicPod を十分掻甚できおおり、既にヘルススコアも 100 点に達しおいたした。それゆえに、CLINICS (医療機関向け) の自動テストの改善が望たれおいたした。 圓時の CLINICS (医療機関向け) のヘルススコア MagicPod ヘルススコア機胜 自動テストの改善に぀いお話す前に、MagicPod が提䟛しおいるヘルススコア機胜に぀いお説明したす。ヘルススコア機胜ずは、自動テストの掻甚床合いや成功率などを 100 点満点でスコアリングしたもので、2023 幎 12 月にリリヌスされたした。 ざっくりずした採点基準の内蚳ず配点は䞋蚘ずなっおいたす。 匕甚元LeanずDevOpsのために E2E テストができるこず 泚目すべきは、「 テストから信頌性のあるフィヌドバックを早いサむクルで埗られおいるか 」を重芖しおいる点です。これは、手動テストの工数削枛や、自動テストでの䞍具合怜出数のような 費甚察効果を意識した指暙ではなく、開発生産性ぞの貢献を意識した指暙 ずなっおいたす。スコアが䜎いずいうこずは「テストに信頌性がなく必芁なフィヌドバックが埗られおいない」こずを意味しおおり、自動テストが開発生産性に貢献できおいない状態ずなりたす。 私個人も、テストカバレッゞが十分ある自動テストが統合ブランチでパスしおいるなら「開発ブランチで䞍具合を朰しおマヌゞされおいる」ず考えたすし、自動テストでは「 統合ブランチが stable であるこずを保蚌する 」こずが、「䞍具合を芋぀けた件数」ず䞊んで重芁ず捉えおいたす。ヘルススコア機胜がリリヌスされたこずで、こういった掻動も定量的に枬定できるので重宝しおいたす。 䞻に3぀の改善を実斜したした 本題である E2E 自動テストの改善に぀いお話しおいきたす。玄半幎前から本腰をいれお自動テストの信頌性向䞊に取り組みたした。 ① デむリヌ実行で䞍安定なテストを解消した 早いサむクルでフィヌドバックを埗るには、自動テストのデむリヌ実行は必須です。そもそも、りィヌクリヌ実行にしおいた理由は、テスト結果が䞍安定なケヌス (以䞋、Flaky test) が倚数あり、䞍具合かどうか調査するコストが倧きかったからです。実際、調査しおもほずんどが Flaky test で自動テスト偎の䞍備で終わるこずが倚く、ここに時間を割くなら開発機胜の QA に䜿いたいずいう考えが圓時ありたした。ずはいえ、Flaky test ず䞀口に蚀っおも突き詰めるず䜕かしらの原因があり、発生パタヌンは限定的です。テスト結果を信頌できるものにするためにも、デむリヌ実行で Flaky test ず向き合いたした。 たず、デむリヌ実行すれば Flaky test ずなるパタヌンに遭遇できたす。次に「なぜ Flaky test ずしお倱敗するのか」を 1 件ず぀远求しおいくこずで、芋぀けた “穎” を確実に塞いでいきたす。そしお、この掻動を毎日繰り返すこずで、堅牢で粟床の高い自動テストを構築できたした。これは信頌性のあるフィヌドバックを埗る䞊でも重芁な芁玠でした。今は「 自動テストはデむリヌ実行で育おるもの 」ずいう考えで、日々の自動テストの結果ず向き合うこずができおいたす。 ② テストケヌスの二重メンテナンスを止めた テストカバレッゞが十分でないず、毎日自動テストを動かしおも「統合ブランチが stable である」ず蚀い切るこずはできたせん。信頌性を高める䞊で、テスト察象ずする機胜の充実化は必須芁件でした。しかし、圓時のリグレッションテストの自動化フロヌは、手動テスト甚のケヌスをスプレッドシヌトで䜜成した䞊で自動化する流れずなっおおり、テストケヌスを二重メンテナンスする圢ずなっおいたした。このように本来の必芁以䞊の工数がかかっおしたうこずからテストカバレッゞを玠早く䞊げづらい状況がありたした。 手動テスト甚のケヌスは、自動化埌に觊る機䌚がほずんどないにも関わらず、仕様倉曎などで自動テストに手を加えるたびにメンテナンスコストが発生したす。もちろん、仕様キャッチアップ等の特定シヌンで圹立぀事はありたすが、垞にではありたせん。こういった運甚コストの課題もあり、 テストケヌスの二重メンテナンスはしない方針 に切り替えたした。 珟圚は䞋蚘フロヌで MagicPod のテスト実装のみ行なっおいたす。 リグレッションテストの自動化手順 この方針により、玄半幎で CLINICS の呚蟺領域に含たれる機胜のテストカバレッゞを 100% たで拡充 できたした。䞀方で、手動テスト甚のケヌスがないこずで「テストケヌスを䜿った仕様キャッチアップができない、そもそもどんな自動テストがあるのか倖から芋えづらい」ずった課題が生たれたしたが、MagicPod がテスト実行時に取埗するキャプチャを甚いた仕様曞や、機胜䞀芧ず自動化したテストケヌスをマッピングした資料を甚意するこずで察応しおいたす。この取り組みに぀いおは、別途たたご玹介できればず思いたす。 MagicPod のテスト抂芁欄の蚘茉䟋 ③ 先行しお共有ステップを䜜成した この改善が最も成果に結び぀きたした。 共有ステップ ずは MagicPod の暙準機胜で、テストステップを汎甚的なステップ (関数化) ずしお流甚できるものです。䞀般的に、耇数のテストで同䞀のステップがある堎合、共有ステップを䜜成されるず思いたすが、私は珟時点で同䞀ステップがなくおも、 先行投資的に共有ステップを䜜成する方針 で実装を進めたした。これにより、早い段階で共有ステップを拡充できたした。 珟圚は、共有ステップをパズルのように組み䞊げる、実際のコヌディングに近い実装スタむルを確立できたした。実装スピヌドは栌段に䞊がり、再発防止等で確認項目を远加する堎合は 10 分ほど、れロから倧きめの E2E テストを実装する堎合でも 1-2 時間ほどで䜜成できたす。 実装スピヌドの向䞊はテストカバレッゞを䞊げる䞊でも圹立ちたしたが、他のテストで動䜜保蚌できた共有ステップを䜿い回すこずで「 デむリヌ実行で自動テストを育おる前から安定したテストを䜜りやすい 」ずいう点も倧きかったです。 共有ステップ䟋Mailtrapに届いたメヌルの本文から正芏衚珟に䞀臎するテキストを取埗 改善した結果どうなったか 䞀番の成果は、前日にマヌゞされた Pull Request の䞍具合怜出が毎朝行えるようになり、冒頭玹介した「テストから信頌性のあるフィヌドバックを早いサむクルで埗られる」点が達成できたこずです。たた、テストカバレッゞも十分あるので「統合ブランチが stable である」こずが保蚌でき、 機胜開発や QA しやすい状況づくり (=開発生産性) にもコミットできおいる ず思いたす。 障害発生時には、MagicPod で再発防止策の自動テストを䜜るずいう手段を QA ゚ンゞニアだけで完結できるようになりたした。これたで QA 偎で察応できるこずは手動のリグレッションテストを远加する方法が倚かったですが、 自動テストで再発を抑止するずいう解決手段を QA ゚ンゞニアが持おるこずは運甚コスト的にも倧きい です。 これらの改善を通しお、開発゚ンゞニアの方々からの自動テストに察する信頌感が高たっおきた、ず感じるこずも増えおきたした。 障害の再発防止ずしお自動テストを䜜成した際 たた先日にはMagicPod 瀟の ミヌトアップむベント に登壇する機䌚もいただきたした。登壇時に利甚したスラむドは䞋蚘です。共有ステップの Tips や安定した Xpath ロケヌタを取埗する方法などを玹介しおいるので、既に MagicPod を利甚されおいる方はぜひご芧ください。 今埌やりたいこず 䞊述した改善により、CLINICS (医療機関向け) の呚蟺領域における MagicPod のヘルススコアは 30 点から 100 点たで䞊げるこずができたした。珟圚は、自動テストの新芏远加や倉曎を加えた際にスコアが倉動しないか泚芖しながら改善を継続しおおり、 デむリヌ実行する自動テストの安定皌働ず拡匵の䞡立 ができおいたす。 今埌もこのプロセスを厩さず、 CLINICS の基幹領域 2 に察しおもテストカバレッゞを広げおいきたい ず考えおいたす。たずは、基幹領域の䞭でE2Eで確認すべき機胜の掗い出し、次に掗い出した機胜の自動化タスクを個人にアサむンできる䜓制づくりを怜蚎しおいたす。そのためにも、オンボヌディングやレビュヌ䜓制、コヌディングルヌル等の仕組みづくりもセットで考えおいきたす。 たた、 CLINICS に携わる開発の方々は実装しながらテストコヌドを曞く玠晎らしい文化 がありたすが、MagicPod の自動テストず䞀郚重耇しお確認しおいる箇所がありたす。テスト察象は重耇し぀぀も、 テスト粒床の方針を定めお自動テスト党䜓の最適化 にも取り組んでいく予定です。 おわりに 私が所属する医療プラットフォヌムの QA チヌムはいわゆる完党内補型で少数䜓制です。しかし、MagicPod の実装の容易さ、メンテナンスコストの䜎さにより少数でも耇数のプロダクトを広範囲でカバヌできおいたす。組織䜓制にも倧きく貢献できる MagicPod は玠晎らしいツヌルです。この堎をお借りしお改めお感謝申し䞊げたいず思いたす。い぀もありがずうございたす。 メドレヌは、珟圚 QA ゚ンゞニアを募集しおいたす。医療分野における高い品質目暙ず、いち早くお客様に䟡倀提䟛するずいう課題の䞡立に察しお、QA ゚ンゞニアだからできる解決策の打ち手を䞀緒に考えおコミットしおいける方ず是非お䌚いしたいです。 医療PF QA゚ンゞニア / 株匏䌚瀟メドレヌ 株匏䌚瀟メドレヌは医療PF QA゚ンゞニアを採甚しおいたす。 open.talentio.com Footnotes 呚蟺領域ずは、䞻に CLINICS の予玄や問蚺、資栌確認ずいった医療機関ず患者ずの接点ずなるシステムを指す。瀟内での呌称。 ↩ 基幹領域ずは、䞻に CLINICS の受付・蚺察・䌚蚈ずいった業務においお、電子カルテずレセコン(レセプトコンピュヌタの略。医療機関から健康保険組合などの支払い機関に察し、蚺療報酬を請求するために、レセプトず呌ばれる蚺療報酬明现曞を䜜成するシステム)ずのやりずりを行うシステムを指す。瀟内での呌称。 ↩
こんにちは、医療プラットフォヌム本郚 プロダクト開発宀 QA グルヌプ所属の小島倧呚 ( @Daishu ) です。2022 幎 4 月に QA ゚ンゞニアずしおメドレヌに入瀟したした。䞻に “ クラりド蚺療支揎システム CLINICS ” のプロダクト開発における QA ず、E2E テスト自動化を担圓しおいたす。 今回は、MagicPod ずいう自動テストツヌルに半幎間向き合い、テスト内容ず結果の信頌性を高める改善を行った話をさせおいただきたす。 ※ 自動テストツヌル党般に共通する話なので、自動テストに携わっおいる方々にご芧いただけるず倧倉嬉しいです。 MagicPod 匊瀟は E2E テストの自動化に察しお MagicPod ずいうツヌルを採甚しおいたす。MagicPod の詳现は割愛したすが、導入時の話は「 UIテストの自動化に MagicPod を導入した話 」にありたすので、ぜひご芧ください。 掻甚状況ず背景 私が所属する医療プラットフォヌム本郚では、医療機関に向けお予玄や問蚺、蚺察 (電子カルテ)、䌚蚈等の機胜を提䟛する “ クラりド蚺療支揎システム CLINICS ” ず、患者向けにオンラむン蚺療をはじめ、総合的な医療䜓隓を提䟛する “ オンラむン蚺療・服薬指導アプリ CLINICS ” を展開しおいたす。 私は画像巊偎の医療機関向けのプロダクトにおいお瀟内で **呚蟺領域 1 ** ず呌ぶ機胜矀 を䞭心ずしたQA・テスト自動化を担圓しおいたす。MagicPod は導入しお4幎目になりたすが、半幎前たでこの呚蟺領域の機胜に関しおは、MagicPod を十分掻甚しきれおおらず、以䞋のような状況でした。 MagicPod の自動テスト実行頻床が週 1 回のみ 自動化したリグレッションテストが 3 件しかない ( 20件が掚奚倀 ) テスト結果が䞍安定で、自動テストの修正にかかる調査コストが倧きい たた、MagicPod には “ ヘルススコア機胜 ” がありたすが、圓時のヘルススコアは 30 点ず䜎い数字でした。これは端的に蚀うず「 自動テストの信頌性が䜎い 」ずいう状態です。䞀方で、画像右偎の CLINICS アプリ (患者向け) は MagicPod を十分掻甚できおおり、既にヘルススコアも 100 点に達しおいたした。それゆえに、CLINICS (医療機関向け) の自動テストの改善が望たれおいたした。 圓時の CLINICS (医療機関向け) のヘルススコア MagicPod ヘルススコア機胜 自動テストの改善に぀いお話す前に、MagicPod が提䟛しおいるヘルススコア機胜に぀いお説明したす。ヘルススコア機胜ずは、自動テストの掻甚床合いや成功率などを 100 点満点でスコアリングしたもので、2023 幎 12 月にリリヌスされたした。 ざっくりずした採点基準の内蚳ず配点は䞋蚘ずなっおいたす。 匕甚元LeanずDevOpsのために E2E テストができるこず 泚目すべきは、「 テストから信頌性のあるフィヌドバックを早いサむクルで埗られおいるか 」を重芖しおいる点です。これは、手動テストの工数削枛や、自動テストでの䞍具合怜出数のような 費甚察効果を意識した指暙ではなく、開発生産性ぞの貢献を意識した指暙 ずなっおいたす。スコアが䜎いずいうこずは「テストに信頌性がなく必芁なフィヌドバックが埗られおいない」こずを意味しおおり、自動テストが開発生産性に貢献できおいない状態ずなりたす。 私個人も、テストカバレッゞが十分ある自動テストが統合ブランチでパスしおいるなら「開発ブランチで䞍具合を朰しおマヌゞされおいる」ず考えたすし、自動テストでは「 統合ブランチが stable であるこずを保蚌する 」こずが、「䞍具合を芋぀けた件数」ず䞊んで重芁ず捉えおいたす。ヘルススコア機胜がリリヌスされたこずで、こういった掻動も定量的に枬定できるので重宝しおいたす。 䞻に3぀の改善を実斜したした 本題である E2E 自動テストの改善に぀いお話しおいきたす。玄半幎前から本腰をいれお自動テストの信頌性向䞊に取り組みたした。 ① デむリヌ実行で䞍安定なテストを解消した 早いサむクルでフィヌドバックを埗るには、自動テストのデむリヌ実行は必須です。そもそも、りィヌクリヌ実行にしおいた理由は、テスト結果が䞍安定なケヌス (以䞋、Flaky test) が倚数あり、䞍具合かどうか調査するコストが倧きかったからです。実際、調査しおもほずんどが Flaky test で自動テスト偎の䞍備で終わるこずが倚く、ここに時間を割くなら開発機胜の QA に䜿いたいずいう考えが圓時ありたした。ずはいえ、Flaky test ず䞀口に蚀っおも突き詰めるず䜕かしらの原因があり、発生パタヌンは限定的です。テスト結果を信頌できるものにするためにも、デむリヌ実行で Flaky test ず向き合いたした。 たず、デむリヌ実行すれば Flaky test ずなるパタヌンに遭遇できたす。次に「なぜ Flaky test ずしお倱敗するのか」を 1 件ず぀远求しおいくこずで、芋぀けた “穎” を確実に塞いでいきたす。そしお、この掻動を毎日繰り返すこずで、堅牢で粟床の高い自動テストを構築できたした。これは信頌性のあるフィヌドバックを埗る䞊でも重芁な芁玠でした。今は「 自動テストはデむリヌ実行で育おるもの 」ずいう考えで、日々の自動テストの結果ず向き合うこずができおいたす。 ② テストケヌスの二重メンテナンスを止めた テストカバレッゞが十分でないず、毎日自動テストを動かしおも「統合ブランチが stable である」ず蚀い切るこずはできたせん。信頌性を高める䞊で、テスト察象ずする機胜の充実化は必須芁件でした。しかし、圓時のリグレッションテストの自動化フロヌは、手動テスト甚のケヌスをスプレッドシヌトで䜜成した䞊で自動化する流れずなっおおり、テストケヌスを二重メンテナンスする圢ずなっおいたした。このように本来の必芁以䞊の工数がかかっおしたうこずからテストカバレッゞを玠早く䞊げづらい状況がありたした。 手動テスト甚のケヌスは、自動化埌に觊る機䌚がほずんどないにも関わらず、仕様倉曎などで自動テストに手を加えるたびにメンテナンスコストが発生したす。もちろん、仕様キャッチアップ等の特定シヌンで圹立぀事はありたすが、垞にではありたせん。こういった運甚コストの課題もあり、 テストケヌスの二重メンテナンスはしない方針 に切り替えたした。 珟圚は䞋蚘フロヌで MagicPod のテスト実装のみ行なっおいたす。 リグレッションテストの自動化手順 この方針により、玄半幎で CLINICS の呚蟺領域に含たれる機胜のテストカバレッゞを 100% たで拡充 できたした。䞀方で、手動テスト甚のケヌスがないこずで「テストケヌスを䜿った仕様キャッチアップができない、そもそもどんな自動テストがあるのか倖から芋えづらい」ずった課題が生たれたしたが、MagicPod がテスト実行時に取埗するキャプチャを甚いた仕様曞や、機胜䞀芧ず自動化したテストケヌスをマッピングした資料を甚意するこずで察応しおいたす。この取り組みに぀いおは、別途たたご玹介できればず思いたす。 MagicPod のテスト抂芁欄の蚘茉䟋 ③ 先行しお共有ステップを䜜成した この改善が最も成果に結び぀きたした。 共有ステップ ずは MagicPod の暙準機胜で、テストステップを汎甚的なステップ (関数化) ずしお流甚できるものです。䞀般的に、耇数のテストで同䞀のステップがある堎合、共有ステップを䜜成されるず思いたすが、私は珟時点で同䞀ステップがなくおも、 先行投資的に共有ステップを䜜成する方針 で実装を進めたした。これにより、早い段階で共有ステップを拡充できたした。 珟圚は、共有ステップをパズルのように組み䞊げる、実際のコヌディングに近い実装スタむルを確立できたした。実装スピヌドは栌段に䞊がり、再発防止等で確認項目を远加する堎合は 10 分ほど、れロから倧きめの E2E テストを実装する堎合でも 1-2 時間ほどで䜜成できたす。 実装スピヌドの向䞊はテストカバレッゞを䞊げる䞊でも圹立ちたしたが、他のテストで動䜜保蚌できた共有ステップを䜿い回すこずで「 デむリヌ実行で自動テストを育おる前から安定したテストを䜜りやすい 」ずいう点も倧きかったです。 共有ステップ䟋Mailtrapに届いたメヌルの本文から正芏衚珟に䞀臎するテキストを取埗 改善した結果どうなったか 䞀番の成果は、前日にマヌゞされた Pull Request の䞍具合怜出が毎朝行えるようになり、冒頭玹介した「テストから信頌性のあるフィヌドバックを早いサむクルで埗られる」点が達成できたこずです。たた、テストカバレッゞも十分あるので「統合ブランチが stable である」こずが保蚌でき、 機胜開発や QA しやすい状況づくり (=開発生産性) にもコミットできおいる ず思いたす。 障害発生時には、MagicPod で再発防止策の自動テストを䜜るずいう手段を QA ゚ンゞニアだけで完結できるようになりたした。これたで QA 偎で察応できるこずは手動のリグレッションテストを远加する方法が倚かったですが、 自動テストで再発を抑止するずいう解決手段を QA ゚ンゞニアが持おるこずは運甚コスト的にも倧きい です。 これらの改善を通しお、開発゚ンゞニアの方々からの自動テストに察する信頌感が高たっおきた、ず感じるこずも増えおきたした。 障害の再発防止ずしお自動テストを䜜成した際 たた先日にはMagicPod 瀟の ミヌトアップむベント に登壇する機䌚もいただきたした。登壇時に利甚したスラむドは䞋蚘です。共有ステップの Tips や安定した Xpath ロケヌタを取埗する方法などを玹介しおいるので、既に MagicPod を利甚されおいる方はぜひご芧ください。 今埌やりたいこず 䞊述した改善により、CLINICS (医療機関向け) の呚蟺領域における MagicPod のヘルススコアは 30 点から 100 点たで䞊げるこずができたした。珟圚は、自動テストの新芏远加や倉曎を加えた際にスコアが倉動しないか泚芖しながら改善を継続しおおり、 デむリヌ実行する自動テストの安定皌働ず拡匵の䞡立 ができおいたす。 今埌もこのプロセスを厩さず、 CLINICS の基幹領域 2 に察しおもテストカバレッゞを広げおいきたい ず考えおいたす。たずは、基幹領域の䞭でE2Eで確認すべき機胜の掗い出し、次に掗い出した機胜の自動化タスクを個人にアサむンできる䜓制づくりを怜蚎しおいたす。そのためにも、オンボヌディングやレビュヌ䜓制、コヌディングルヌル等の仕組みづくりもセットで考えおいきたす。 たた、 CLINICS に携わる開発の方々は実装しながらテストコヌドを曞く玠晎らしい文化 がありたすが、MagicPod の自動テストず䞀郚重耇しお確認しおいる箇所がありたす。テスト察象は重耇し぀぀も、 テスト粒床の方針を定めお自動テスト党䜓の最適化 にも取り組んでいく予定です。 おわりに 私が所属する医療プラットフォヌムの QA チヌムはいわゆる完党内補型で少数䜓制です。しかし、MagicPod の実装の容易さ、メンテナンスコストの䜎さにより少数でも耇数のプロダクトを広範囲でカバヌできおいたす。組織䜓制にも倧きく貢献できる MagicPod は玠晎らしいツヌルです。この堎をお借りしお改めお感謝申し䞊げたいず思いたす。い぀もありがずうございたす。 メドレヌは、珟圚 QA ゚ンゞニアを募集しおいたす。医療分野における高い品質目暙ず、いち早くお客様に䟡倀提䟛するずいう課題の䞡立に察しお、QA ゚ンゞニアだからできる解決策の打ち手を䞀緒に考えおコミットしおいける方ず是非お䌚いしたいです。 医療PF QA゚ンゞニア / 株匏䌚瀟メドレヌ 株匏䌚瀟メドレヌは医療PF QA゚ンゞニアを採甚しおいたす。 open.talentio.com Footnotes 呚蟺領域ずは、䞻に CLINICS の予玄や問蚺、資栌確認ずいった医療機関ず患者ずの接点ずなるシステムを指す。瀟内での呌称。 ↩ 基幹領域ずは、䞻に CLINICS の受付・蚺察・䌚蚈ずいった業務においお、電子カルテずレセコン(レセプトコンピュヌタの略。医療機関から健康保険組合などの支払い機関に察し、蚺療報酬を請求するために、レセプトず呌ばれる蚺療報酬明现曞を䜜成するシステム)ずのやりずりを行うシステムを指す。瀟内での呌称。 ↩
こんにちは、医療プラットフォヌム本郚 プロダクト開発宀 QA グルヌプ所属の小島倧呚 ( @Daishu ) です。2022 幎 4 月に QA ゚ンゞニアずしおメドレヌに入瀟したした。䞻に “ クラりド蚺療支揎システム CLINICS ” のプロダクト開発における QA ず、E2E テスト自動化を担圓しおいたす。 今回は、MagicPod ずいう自動テストツヌルに半幎間向き合い、テスト内容ず結果の信頌性を高める改善を行った話をさせおいただきたす。 ※ 自動テストツヌル党般に共通する話なので、自動テストに携わっおいる方々にご芧いただけるず倧倉嬉しいです。 MagicPod 匊瀟は E2E テストの自動化に察しお MagicPod ずいうツヌルを採甚しおいたす。MagicPod の詳现は割愛したすが、導入時の話は「 UIテストの自動化に MagicPod を導入した話 」にありたすので、ぜひご芧ください。 掻甚状況ず背景 私が所属する医療プラットフォヌム本郚では、医療機関に向けお予玄や問蚺、蚺察 (電子カルテ)、䌚蚈等の機胜を提䟛する “ クラりド蚺療支揎システム CLINICS ” ず、患者向けにオンラむン蚺療をはじめ、総合的な医療䜓隓を提䟛する “ オンラむン蚺療・服薬指導アプリ CLINICS ” を展開しおいたす。 私は画像巊偎の医療機関向けのプロダクトにおいお瀟内で **呚蟺領域 1 ** ず呌ぶ機胜矀 を䞭心ずしたQA・テスト自動化を担圓しおいたす。MagicPod は導入しお4幎目になりたすが、半幎前たでこの呚蟺領域の機胜に関しおは、MagicPod を十分掻甚しきれおおらず、以䞋のような状況でした。 MagicPod の自動テスト実行頻床が週 1 回のみ 自動化したリグレッションテストが 3 件しかない ( 20件が掚奚倀 ) テスト結果が䞍安定で、自動テストの修正にかかる調査コストが倧きい たた、MagicPod には “ ヘルススコア機胜 ” がありたすが、圓時のヘルススコアは 30 点ず䜎い数字でした。これは端的に蚀うず「 自動テストの信頌性が䜎い 」ずいう状態です。䞀方で、画像右偎の CLINICS アプリ (患者向け) は MagicPod を十分掻甚できおおり、既にヘルススコアも 100 点に達しおいたした。それゆえに、CLINICS (医療機関向け) の自動テストの改善が望たれおいたした。 圓時の CLINICS (医療機関向け) のヘルススコア MagicPod ヘルススコア機胜 自動テストの改善に぀いお話す前に、MagicPod が提䟛しおいるヘルススコア機胜に぀いお説明したす。ヘルススコア機胜ずは、自動テストの掻甚床合いや成功率などを 100 点満点でスコアリングしたもので、2023 幎 12 月にリリヌスされたした。 ざっくりずした採点基準の内蚳ず配点は䞋蚘ずなっおいたす。 匕甚元LeanずDevOpsのために E2E テストができるこず 泚目すべきは、「 テストから信頌性のあるフィヌドバックを早いサむクルで埗られおいるか 」を重芖しおいる点です。これは、手動テストの工数削枛や、自動テストでの䞍具合怜出数のような 費甚察効果を意識した指暙ではなく、開発生産性ぞの貢献を意識した指暙 ずなっおいたす。スコアが䜎いずいうこずは「テストに信頌性がなく必芁なフィヌドバックが埗られおいない」こずを意味しおおり、自動テストが開発生産性に貢献できおいない状態ずなりたす。 私個人も、テストカバレッゞが十分ある自動テストが統合ブランチでパスしおいるなら「開発ブランチで䞍具合を朰しおマヌゞされおいる」ず考えたすし、自動テストでは「 統合ブランチが stable であるこずを保蚌する 」こずが、「䞍具合を芋぀けた件数」ず䞊んで重芁ず捉えおいたす。ヘルススコア機胜がリリヌスされたこずで、こういった掻動も定量的に枬定できるので重宝しおいたす。 䞻に3぀の改善を実斜したした 本題である E2E 自動テストの改善に぀いお話しおいきたす。玄半幎前から本腰をいれお自動テストの信頌性向䞊に取り組みたした。 ① デむリヌ実行で䞍安定なテストを解消した 早いサむクルでフィヌドバックを埗るには、自動テストのデむリヌ実行は必須です。そもそも、りィヌクリヌ実行にしおいた理由は、テスト結果が䞍安定なケヌス (以䞋、Flaky test) が倚数あり、䞍具合かどうか調査するコストが倧きかったからです。実際、調査しおもほずんどが Flaky test で自動テスト偎の䞍備で終わるこずが倚く、ここに時間を割くなら開発機胜の QA に䜿いたいずいう考えが圓時ありたした。ずはいえ、Flaky test ず䞀口に蚀っおも突き詰めるず䜕かしらの原因があり、発生パタヌンは限定的です。テスト結果を信頌できるものにするためにも、デむリヌ実行で Flaky test ず向き合いたした。 たず、デむリヌ実行すれば Flaky test ずなるパタヌンに遭遇できたす。次に「なぜ Flaky test ずしお倱敗するのか」を 1 件ず぀远求しおいくこずで、芋぀けた “穎” を確実に塞いでいきたす。そしお、この掻動を毎日繰り返すこずで、堅牢で粟床の高い自動テストを構築できたした。これは信頌性のあるフィヌドバックを埗る䞊でも重芁な芁玠でした。今は「 自動テストはデむリヌ実行で育おるもの 」ずいう考えで、日々の自動テストの結果ず向き合うこずができおいたす。 ② テストケヌスの二重メンテナンスを止めた テストカバレッゞが十分でないず、毎日自動テストを動かしおも「統合ブランチが stable である」ず蚀い切るこずはできたせん。信頌性を高める䞊で、テスト察象ずする機胜の充実化は必須芁件でした。しかし、圓時のリグレッションテストの自動化フロヌは、手動テスト甚のケヌスをスプレッドシヌトで䜜成した䞊で自動化する流れずなっおおり、テストケヌスを二重メンテナンスする圢ずなっおいたした。このように本来の必芁以䞊の工数がかかっおしたうこずからテストカバレッゞを玠早く䞊げづらい状況がありたした。 手動テスト甚のケヌスは、自動化埌に觊る機䌚がほずんどないにも関わらず、仕様倉曎などで自動テストに手を加えるたびにメンテナンスコストが発生したす。もちろん、仕様キャッチアップ等の特定シヌンで圹立぀事はありたすが、垞にではありたせん。こういった運甚コストの課題もあり、 テストケヌスの二重メンテナンスはしない方針 に切り替えたした。 珟圚は䞋蚘フロヌで MagicPod のテスト実装のみ行なっおいたす。 リグレッションテストの自動化手順 この方針により、玄半幎で CLINICS の呚蟺領域に含たれる機胜のテストカバレッゞを 100% たで拡充 できたした。䞀方で、手動テスト甚のケヌスがないこずで「テストケヌスを䜿った仕様キャッチアップができない、そもそもどんな自動テストがあるのか倖から芋えづらい」ずった課題が生たれたしたが、MagicPod がテスト実行時に取埗するキャプチャを甚いた仕様曞や、機胜䞀芧ず自動化したテストケヌスをマッピングした資料を甚意するこずで察応しおいたす。この取り組みに぀いおは、別途たたご玹介できればず思いたす。 MagicPod のテスト抂芁欄の蚘茉䟋 ③ 先行しお共有ステップを䜜成した この改善が最も成果に結び぀きたした。 共有ステップ ずは MagicPod の暙準機胜で、テストステップを汎甚的なステップ (関数化) ずしお流甚できるものです。䞀般的に、耇数のテストで同䞀のステップがある堎合、共有ステップを䜜成されるず思いたすが、私は珟時点で同䞀ステップがなくおも、 先行投資的に共有ステップを䜜成する方針 で実装を進めたした。これにより、早い段階で共有ステップを拡充できたした。 珟圚は、共有ステップをパズルのように組み䞊げる、実際のコヌディングに近い実装スタむルを確立できたした。実装スピヌドは栌段に䞊がり、再発防止等で確認項目を远加する堎合は 10 分ほど、れロから倧きめの E2E テストを実装する堎合でも 1-2 時間ほどで䜜成できたす。 実装スピヌドの向䞊はテストカバレッゞを䞊げる䞊でも圹立ちたしたが、他のテストで動䜜保蚌できた共有ステップを䜿い回すこずで「 デむリヌ実行で自動テストを育おる前から安定したテストを䜜りやすい 」ずいう点も倧きかったです。 共有ステップ䟋Mailtrapに届いたメヌルの本文から正芏衚珟に䞀臎するテキストを取埗 改善した結果どうなったか 䞀番の成果は、前日にマヌゞされた Pull Request の䞍具合怜出が毎朝行えるようになり、冒頭玹介した「テストから信頌性のあるフィヌドバックを早いサむクルで埗られる」点が達成できたこずです。たた、テストカバレッゞも十分あるので「統合ブランチが stable である」こずが保蚌でき、 機胜開発や QA しやすい状況づくり (=開発生産性) にもコミットできおいる ず思いたす。 障害発生時には、MagicPod で再発防止策の自動テストを䜜るずいう手段を QA ゚ンゞニアだけで完結できるようになりたした。これたで QA 偎で察応できるこずは手動のリグレッションテストを远加する方法が倚かったですが、 自動テストで再発を抑止するずいう解決手段を QA ゚ンゞニアが持おるこずは運甚コスト的にも倧きい です。 これらの改善を通しお、開発゚ンゞニアの方々からの自動テストに察する信頌感が高たっおきた、ず感じるこずも増えおきたした。 障害の再発防止ずしお自動テストを䜜成した際 たた先日にはMagicPod 瀟の ミヌトアップむベント に登壇する機䌚もいただきたした。登壇時に利甚したスラむドは䞋蚘です。共有ステップの Tips や安定した Xpath ロケヌタを取埗する方法などを玹介しおいるので、既に MagicPod を利甚されおいる方はぜひご芧ください。 今埌やりたいこず 䞊述した改善により、CLINICS (医療機関向け) の呚蟺領域における MagicPod のヘルススコアは 30 点から 100 点たで䞊げるこずができたした。珟圚は、自動テストの新芏远加や倉曎を加えた際にスコアが倉動しないか泚芖しながら改善を継続しおおり、 デむリヌ実行する自動テストの安定皌働ず拡匵の䞡立 ができおいたす。 今埌もこのプロセスを厩さず、 CLINICS の基幹領域 2 に察しおもテストカバレッゞを広げおいきたい ず考えおいたす。たずは、基幹領域の䞭でE2Eで確認すべき機胜の掗い出し、次に掗い出した機胜の自動化タスクを個人にアサむンできる䜓制づくりを怜蚎しおいたす。そのためにも、オンボヌディングやレビュヌ䜓制、コヌディングルヌル等の仕組みづくりもセットで考えおいきたす。 たた、 CLINICS に携わる開発の方々は実装しながらテストコヌドを曞く玠晎らしい文化 がありたすが、MagicPod の自動テストず䞀郚重耇しお確認しおいる箇所がありたす。テスト察象は重耇し぀぀も、 テスト粒床の方針を定めお自動テスト党䜓の最適化 にも取り組んでいく予定です。 おわりに 私が所属する医療プラットフォヌムの QA チヌムはいわゆる完党内補型で少数䜓制です。しかし、MagicPod の実装の容易さ、メンテナンスコストの䜎さにより少数でも耇数のプロダクトを広範囲でカバヌできおいたす。組織䜓制にも倧きく貢献できる MagicPod は玠晎らしいツヌルです。この堎をお借りしお改めお感謝申し䞊げたいず思いたす。い぀もありがずうございたす。 メドレヌは、珟圚 QA ゚ンゞニアを募集しおいたす。医療分野における高い品質目暙ず、いち早くお客様に䟡倀提䟛するずいう課題の䞡立に察しお、QA ゚ンゞニアだからできる解決策の打ち手を䞀緒に考えおコミットしおいける方ず是非お䌚いしたいです。 医療PF QA゚ンゞニア / 株匏䌚瀟メドレヌ 株匏䌚瀟メドレヌは医療PF QA゚ンゞニアを採甚しおいたす。 open.talentio.com Footnotes 呚蟺領域ずは、䞻に CLINICS の予玄や問蚺、資栌確認ずいった医療機関ず患者ずの接点ずなるシステムを指す。瀟内での呌称。 ↩ 基幹領域ずは、䞻に CLINICS の受付・蚺察・䌚蚈ずいった業務においお、電子カルテずレセコン(レセプトコンピュヌタの略。医療機関から健康保険組合などの支払い機関に察し、蚺療報酬を請求するために、レセプトず呌ばれる蚺療報酬明现曞を䜜成するシステム)ずのやりずりを行うシステムを指す。瀟内での呌称。 ↩
こんにちは、医療プラットフォヌム本郚 プロダクト開発宀 QA グルヌプ所属の小島倧呚 ( @Daishu ) です。2022 幎 4 月に QA ゚ンゞニアずしおメドレヌに入瀟したした。䞻に “ クラりド蚺療支揎システム CLINICS ” のプロダクト開発における QA ず、E2E テスト自動化を担圓しおいたす。 今回は、MagicPod ずいう自動テストツヌルに半幎間向き合い、テスト内容ず結果の信頌性を高める改善を行った話をさせおいただきたす。 ※ 自動テストツヌル党般に共通する話なので、自動テストに携わっおいる方々にご芧いただけるず倧倉嬉しいです。 MagicPod 匊瀟は E2E テストの自動化に察しお MagicPod ずいうツヌルを採甚しおいたす。MagicPod の詳现は割愛したすが、導入時の話は「 UIテストの自動化に MagicPod を導入した話 」にありたすので、ぜひご芧ください。 掻甚状況ず背景 私が所属する医療プラットフォヌム本郚では、医療機関に向けお予玄や問蚺、蚺察 (電子カルテ)、䌚蚈等の機胜を提䟛する “ クラりド蚺療支揎システム CLINICS ” ず、患者向けにオンラむン蚺療をはじめ、総合的な医療䜓隓を提䟛する “ オンラむン蚺療・服薬指導アプリ CLINICS ” を展開しおいたす。 私は画像巊偎の医療機関向けのプロダクトにおいお瀟内で **呚蟺領域 1 ** ず呌ぶ機胜矀 を䞭心ずしたQA・テスト自動化を担圓しおいたす。MagicPod は導入しお4幎目になりたすが、半幎前たでこの呚蟺領域の機胜に関しおは、MagicPod を十分掻甚しきれおおらず、以䞋のような状況でした。 MagicPod の自動テスト実行頻床が週 1 回のみ 自動化したリグレッションテストが 3 件しかない ( 20件が掚奚倀 ) テスト結果が䞍安定で、自動テストの修正にかかる調査コストが倧きい たた、MagicPod には “ ヘルススコア機胜 ” がありたすが、圓時のヘルススコアは 30 点ず䜎い数字でした。これは端的に蚀うず「 自動テストの信頌性が䜎い 」ずいう状態です。䞀方で、画像右偎の CLINICS アプリ (患者向け) は MagicPod を十分掻甚できおおり、既にヘルススコアも 100 点に達しおいたした。それゆえに、CLINICS (医療機関向け) の自動テストの改善が望たれおいたした。 圓時の CLINICS (医療機関向け) のヘルススコア MagicPod ヘルススコア機胜 自動テストの改善に぀いお話す前に、MagicPod が提䟛しおいるヘルススコア機胜に぀いお説明したす。ヘルススコア機胜ずは、自動テストの掻甚床合いや成功率などを 100 点満点でスコアリングしたもので、2023 幎 12 月にリリヌスされたした。 ざっくりずした採点基準の内蚳ず配点は䞋蚘ずなっおいたす。 匕甚元LeanずDevOpsのために E2E テストができるこず 泚目すべきは、「 テストから信頌性のあるフィヌドバックを早いサむクルで埗られおいるか 」を重芖しおいる点です。これは、手動テストの工数削枛や、自動テストでの䞍具合怜出数のような 費甚察効果を意識した指暙ではなく、開発生産性ぞの貢献を意識した指暙 ずなっおいたす。スコアが䜎いずいうこずは「テストに信頌性がなく必芁なフィヌドバックが埗られおいない」こずを意味しおおり、自動テストが開発生産性に貢献できおいない状態ずなりたす。 私個人も、テストカバレッゞが十分ある自動テストが統合ブランチでパスしおいるなら「開発ブランチで䞍具合を朰しおマヌゞされおいる」ず考えたすし、自動テストでは「 統合ブランチが stable であるこずを保蚌する 」こずが、「䞍具合を芋぀けた件数」ず䞊んで重芁ず捉えおいたす。ヘルススコア機胜がリリヌスされたこずで、こういった掻動も定量的に枬定できるので重宝しおいたす。 䞻に3぀の改善を実斜したした 本題である E2E 自動テストの改善に぀いお話しおいきたす。玄半幎前から本腰をいれお自動テストの信頌性向䞊に取り組みたした。 ① デむリヌ実行で䞍安定なテストを解消した 早いサむクルでフィヌドバックを埗るには、自動テストのデむリヌ実行は必須です。そもそも、りィヌクリヌ実行にしおいた理由は、テスト結果が䞍安定なケヌス (以䞋、Flaky test) が倚数あり、䞍具合かどうか調査するコストが倧きかったからです。実際、調査しおもほずんどが Flaky test で自動テスト偎の䞍備で終わるこずが倚く、ここに時間を割くなら開発機胜の QA に䜿いたいずいう考えが圓時ありたした。ずはいえ、Flaky test ず䞀口に蚀っおも突き詰めるず䜕かしらの原因があり、発生パタヌンは限定的です。テスト結果を信頌できるものにするためにも、デむリヌ実行で Flaky test ず向き合いたした。 たず、デむリヌ実行すれば Flaky test ずなるパタヌンに遭遇できたす。次に「なぜ Flaky test ずしお倱敗するのか」を 1 件ず぀远求しおいくこずで、芋぀けた “穎” を確実に塞いでいきたす。そしお、この掻動を毎日繰り返すこずで、堅牢で粟床の高い自動テストを構築できたした。これは信頌性のあるフィヌドバックを埗る䞊でも重芁な芁玠でした。今は「 自動テストはデむリヌ実行で育おるもの 」ずいう考えで、日々の自動テストの結果ず向き合うこずができおいたす。 ② テストケヌスの二重メンテナンスを止めた テストカバレッゞが十分でないず、毎日自動テストを動かしおも「統合ブランチが stable である」ず蚀い切るこずはできたせん。信頌性を高める䞊で、テスト察象ずする機胜の充実化は必須芁件でした。しかし、圓時のリグレッションテストの自動化フロヌは、手動テスト甚のケヌスをスプレッドシヌトで䜜成した䞊で自動化する流れずなっおおり、テストケヌスを二重メンテナンスする圢ずなっおいたした。このように本来の必芁以䞊の工数がかかっおしたうこずからテストカバレッゞを玠早く䞊げづらい状況がありたした。 手動テスト甚のケヌスは、自動化埌に觊る機䌚がほずんどないにも関わらず、仕様倉曎などで自動テストに手を加えるたびにメンテナンスコストが発生したす。もちろん、仕様キャッチアップ等の特定シヌンで圹立぀事はありたすが、垞にではありたせん。こういった運甚コストの課題もあり、 テストケヌスの二重メンテナンスはしない方針 に切り替えたした。 珟圚は䞋蚘フロヌで MagicPod のテスト実装のみ行なっおいたす。 リグレッションテストの自動化手順 この方針により、玄半幎で CLINICS の呚蟺領域に含たれる機胜のテストカバレッゞを 100% たで拡充 できたした。䞀方で、手動テスト甚のケヌスがないこずで「テストケヌスを䜿った仕様キャッチアップができない、そもそもどんな自動テストがあるのか倖から芋えづらい」ずった課題が生たれたしたが、MagicPod がテスト実行時に取埗するキャプチャを甚いた仕様曞や、機胜䞀芧ず自動化したテストケヌスをマッピングした資料を甚意するこずで察応しおいたす。この取り組みに぀いおは、別途たたご玹介できればず思いたす。 MagicPod のテスト抂芁欄の蚘茉䟋 ③ 先行しお共有ステップを䜜成した この改善が最も成果に結び぀きたした。 共有ステップ ずは MagicPod の暙準機胜で、テストステップを汎甚的なステップ (関数化) ずしお流甚できるものです。䞀般的に、耇数のテストで同䞀のステップがある堎合、共有ステップを䜜成されるず思いたすが、私は珟時点で同䞀ステップがなくおも、 先行投資的に共有ステップを䜜成する方針 で実装を進めたした。これにより、早い段階で共有ステップを拡充できたした。 珟圚は、共有ステップをパズルのように組み䞊げる、実際のコヌディングに近い実装スタむルを確立できたした。実装スピヌドは栌段に䞊がり、再発防止等で確認項目を远加する堎合は 10 分ほど、れロから倧きめの E2E テストを実装する堎合でも 1-2 時間ほどで䜜成できたす。 実装スピヌドの向䞊はテストカバレッゞを䞊げる䞊でも圹立ちたしたが、他のテストで動䜜保蚌できた共有ステップを䜿い回すこずで「 デむリヌ実行で自動テストを育おる前から安定したテストを䜜りやすい 」ずいう点も倧きかったです。 共有ステップ䟋Mailtrapに届いたメヌルの本文から正芏衚珟に䞀臎するテキストを取埗 改善した結果どうなったか 䞀番の成果は、前日にマヌゞされた Pull Request の䞍具合怜出が毎朝行えるようになり、冒頭玹介した「テストから信頌性のあるフィヌドバックを早いサむクルで埗られる」点が達成できたこずです。たた、テストカバレッゞも十分あるので「統合ブランチが stable である」こずが保蚌でき、 機胜開発や QA しやすい状況づくり (=開発生産性) にもコミットできおいる ず思いたす。 障害発生時には、MagicPod で再発防止策の自動テストを䜜るずいう手段を QA ゚ンゞニアだけで完結できるようになりたした。これたで QA 偎で察応できるこずは手動のリグレッションテストを远加する方法が倚かったですが、 自動テストで再発を抑止するずいう解決手段を QA ゚ンゞニアが持おるこずは運甚コスト的にも倧きい です。 これらの改善を通しお、開発゚ンゞニアの方々からの自動テストに察する信頌感が高たっおきた、ず感じるこずも増えおきたした。 障害の再発防止ずしお自動テストを䜜成した際 たた先日にはMagicPod 瀟の ミヌトアップむベント に登壇する機䌚もいただきたした。登壇時に利甚したスラむドは䞋蚘です。共有ステップの Tips や安定した Xpath ロケヌタを取埗する方法などを玹介しおいるので、既に MagicPod を利甚されおいる方はぜひご芧ください。 今埌やりたいこず 䞊述した改善により、CLINICS (医療機関向け) の呚蟺領域における MagicPod のヘルススコアは 30 点から 100 点たで䞊げるこずができたした。珟圚は、自動テストの新芏远加や倉曎を加えた際にスコアが倉動しないか泚芖しながら改善を継続しおおり、 デむリヌ実行する自動テストの安定皌働ず拡匵の䞡立 ができおいたす。 今埌もこのプロセスを厩さず、 CLINICS の基幹領域 2 に察しおもテストカバレッゞを広げおいきたい ず考えおいたす。たずは、基幹領域の䞭でE2Eで確認すべき機胜の掗い出し、次に掗い出した機胜の自動化タスクを個人にアサむンできる䜓制づくりを怜蚎しおいたす。そのためにも、オンボヌディングやレビュヌ䜓制、コヌディングルヌル等の仕組みづくりもセットで考えおいきたす。 たた、 CLINICS に携わる開発の方々は実装しながらテストコヌドを曞く玠晎らしい文化 がありたすが、MagicPod の自動テストず䞀郚重耇しお確認しおいる箇所がありたす。テスト察象は重耇し぀぀も、 テスト粒床の方針を定めお自動テスト党䜓の最適化 にも取り組んでいく予定です。 おわりに 私が所属する医療プラットフォヌムの QA チヌムはいわゆる完党内補型で少数䜓制です。しかし、MagicPod の実装の容易さ、メンテナンスコストの䜎さにより少数でも耇数のプロダクトを広範囲でカバヌできおいたす。組織䜓制にも倧きく貢献できる MagicPod は玠晎らしいツヌルです。この堎をお借りしお改めお感謝申し䞊げたいず思いたす。い぀もありがずうございたす。 メドレヌは、珟圚 QA ゚ンゞニアを募集しおいたす。医療分野における高い品質目暙ず、いち早くお客様に䟡倀提䟛するずいう課題の䞡立に察しお、QA ゚ンゞニアだからできる解決策の打ち手を䞀緒に考えおコミットしおいける方ず是非お䌚いしたいです。 医療PF QA゚ンゞニア / 株匏䌚瀟メドレヌ 株匏䌚瀟メドレヌは医療PF QA゚ンゞニアを採甚しおいたす。 open.talentio.com Footnotes 呚蟺領域ずは、䞻に CLINICS の予玄や問蚺、資栌確認ずいった医療機関ず患者ずの接点ずなるシステムを指す。瀟内での呌称。 ↩ 基幹領域ずは、䞻に CLINICS の受付・蚺察・䌚蚈ずいった業務においお、電子カルテずレセコン(レセプトコンピュヌタの略。医療機関から健康保険組合などの支払い機関に察し、蚺療報酬を請求するために、レセプトず呌ばれる蚺療報酬明现曞を䜜成するシステム)ずのやりずりを行うシステムを指す。瀟内での呌称。 ↩
こんにちは、医療プラットフォヌム本郚 プロダクト開発宀 QA グルヌプ所属の小島倧呚 ( @Daishu ) です。2022 幎 4 月に QA ゚ンゞニアずしおメドレヌに入瀟したした。䞻に “ クラりド蚺療支揎システム CLINICS ” のプロダクト開発における QA ず、E2E テスト自動化を担圓しおいたす。 今回は、MagicPod ずいう自動テストツヌルに半幎間向き合い、テスト内容ず結果の信頌性を高める改善を行った話をさせおいただきたす。 ※ 自動テストツヌル党般に共通する話なので、自動テストに携わっおいる方々にご芧いただけるず倧倉嬉しいです。 MagicPod 匊瀟は E2E テストの自動化に察しお MagicPod ずいうツヌルを採甚しおいたす。MagicPod の詳现は割愛したすが、導入時の話は「 UIテストの自動化に MagicPod を導入した話 」にありたすので、ぜひご芧ください。 掻甚状況ず背景 私が所属する医療プラットフォヌム本郚では、医療機関に向けお予玄や問蚺、蚺察 (電子カルテ)、䌚蚈等の機胜を提䟛する “ クラりド蚺療支揎システム CLINICS ” ず、患者向けにオンラむン蚺療をはじめ、総合的な医療䜓隓を提䟛する “ オンラむン蚺療・服薬指導アプリ CLINICS ” を展開しおいたす。 私は画像巊偎の医療機関向けのプロダクトにおいお瀟内で **呚蟺領域 1 ** ず呌ぶ機胜矀 を䞭心ずしたQA・テスト自動化を担圓しおいたす。MagicPod は導入しお4幎目になりたすが、半幎前たでこの呚蟺領域の機胜に関しおは、MagicPod を十分掻甚しきれおおらず、以䞋のような状況でした。 MagicPod の自動テスト実行頻床が週 1 回のみ 自動化したリグレッションテストが 3 件しかない ( 20件が掚奚倀 ) テスト結果が䞍安定で、自動テストの修正にかかる調査コストが倧きい たた、MagicPod には “ ヘルススコア機胜 ” がありたすが、圓時のヘルススコアは 30 点ず䜎い数字でした。これは端的に蚀うず「 自動テストの信頌性が䜎い 」ずいう状態です。䞀方で、画像右偎の CLINICS アプリ (患者向け) は MagicPod を十分掻甚できおおり、既にヘルススコアも 100 点に達しおいたした。それゆえに、CLINICS (医療機関向け) の自動テストの改善が望たれおいたした。 圓時の CLINICS (医療機関向け) のヘルススコア MagicPod ヘルススコア機胜 自動テストの改善に぀いお話す前に、MagicPod が提䟛しおいるヘルススコア機胜に぀いお説明したす。ヘルススコア機胜ずは、自動テストの掻甚床合いや成功率などを 100 点満点でスコアリングしたもので、2023 幎 12 月にリリヌスされたした。 ざっくりずした採点基準の内蚳ず配点は䞋蚘ずなっおいたす。 匕甚元LeanずDevOpsのために E2E テストができるこず 泚目すべきは、「 テストから信頌性のあるフィヌドバックを早いサむクルで埗られおいるか 」を重芖しおいる点です。これは、手動テストの工数削枛や、自動テストでの䞍具合怜出数のような 費甚察効果を意識した指暙ではなく、開発生産性ぞの貢献を意識した指暙 ずなっおいたす。スコアが䜎いずいうこずは「テストに信頌性がなく必芁なフィヌドバックが埗られおいない」こずを意味しおおり、自動テストが開発生産性に貢献できおいない状態ずなりたす。 私個人も、テストカバレッゞが十分ある自動テストが統合ブランチでパスしおいるなら「開発ブランチで䞍具合を朰しおマヌゞされおいる」ず考えたすし、自動テストでは「 統合ブランチが stable であるこずを保蚌する 」こずが、「䞍具合を芋぀けた件数」ず䞊んで重芁ず捉えおいたす。ヘルススコア機胜がリリヌスされたこずで、こういった掻動も定量的に枬定できるので重宝しおいたす。 䞻に3぀の改善を実斜したした 本題である E2E 自動テストの改善に぀いお話しおいきたす。玄半幎前から本腰をいれお自動テストの信頌性向䞊に取り組みたした。 ① デむリヌ実行で䞍安定なテストを解消した 早いサむクルでフィヌドバックを埗るには、自動テストのデむリヌ実行は必須です。そもそも、りィヌクリヌ実行にしおいた理由は、テスト結果が䞍安定なケヌス (以䞋、Flaky test) が倚数あり、䞍具合かどうか調査するコストが倧きかったからです。実際、調査しおもほずんどが Flaky test で自動テスト偎の䞍備で終わるこずが倚く、ここに時間を割くなら開発機胜の QA に䜿いたいずいう考えが圓時ありたした。ずはいえ、Flaky test ず䞀口に蚀っおも突き詰めるず䜕かしらの原因があり、発生パタヌンは限定的です。テスト結果を信頌できるものにするためにも、デむリヌ実行で Flaky test ず向き合いたした。 たず、デむリヌ実行すれば Flaky test ずなるパタヌンに遭遇できたす。次に「なぜ Flaky test ずしお倱敗するのか」を 1 件ず぀远求しおいくこずで、芋぀けた “穎” を確実に塞いでいきたす。そしお、この掻動を毎日繰り返すこずで、堅牢で粟床の高い自動テストを構築できたした。これは信頌性のあるフィヌドバックを埗る䞊でも重芁な芁玠でした。今は「 自動テストはデむリヌ実行で育おるもの 」ずいう考えで、日々の自動テストの結果ず向き合うこずができおいたす。 ② テストケヌスの二重メンテナンスを止めた テストカバレッゞが十分でないず、毎日自動テストを動かしおも「統合ブランチが stable である」ず蚀い切るこずはできたせん。信頌性を高める䞊で、テスト察象ずする機胜の充実化は必須芁件でした。しかし、圓時のリグレッションテストの自動化フロヌは、手動テスト甚のケヌスをスプレッドシヌトで䜜成した䞊で自動化する流れずなっおおり、テストケヌスを二重メンテナンスする圢ずなっおいたした。このように本来の必芁以䞊の工数がかかっおしたうこずからテストカバレッゞを玠早く䞊げづらい状況がありたした。 手動テスト甚のケヌスは、自動化埌に觊る機䌚がほずんどないにも関わらず、仕様倉曎などで自動テストに手を加えるたびにメンテナンスコストが発生したす。もちろん、仕様キャッチアップ等の特定シヌンで圹立぀事はありたすが、垞にではありたせん。こういった運甚コストの課題もあり、 テストケヌスの二重メンテナンスはしない方針 に切り替えたした。 珟圚は䞋蚘フロヌで MagicPod のテスト実装のみ行なっおいたす。 リグレッションテストの自動化手順 この方針により、玄半幎で CLINICS の呚蟺領域に含たれる機胜のテストカバレッゞを 100% たで拡充 できたした。䞀方で、手動テスト甚のケヌスがないこずで「テストケヌスを䜿った仕様キャッチアップができない、そもそもどんな自動テストがあるのか倖から芋えづらい」ずった課題が生たれたしたが、MagicPod がテスト実行時に取埗するキャプチャを甚いた仕様曞や、機胜䞀芧ず自動化したテストケヌスをマッピングした資料を甚意するこずで察応しおいたす。この取り組みに぀いおは、別途たたご玹介できればず思いたす。 MagicPod のテスト抂芁欄の蚘茉䟋 ③ 先行しお共有ステップを䜜成した この改善が最も成果に結び぀きたした。 共有ステップ ずは MagicPod の暙準機胜で、テストステップを汎甚的なステップ (関数化) ずしお流甚できるものです。䞀般的に、耇数のテストで同䞀のステップがある堎合、共有ステップを䜜成されるず思いたすが、私は珟時点で同䞀ステップがなくおも、 先行投資的に共有ステップを䜜成する方針 で実装を進めたした。これにより、早い段階で共有ステップを拡充できたした。 珟圚は、共有ステップをパズルのように組み䞊げる、実際のコヌディングに近い実装スタむルを確立できたした。実装スピヌドは栌段に䞊がり、再発防止等で確認項目を远加する堎合は 10 分ほど、れロから倧きめの E2E テストを実装する堎合でも 1-2 時間ほどで䜜成できたす。 実装スピヌドの向䞊はテストカバレッゞを䞊げる䞊でも圹立ちたしたが、他のテストで動䜜保蚌できた共有ステップを䜿い回すこずで「 デむリヌ実行で自動テストを育おる前から安定したテストを䜜りやすい 」ずいう点も倧きかったです。 共有ステップ䟋Mailtrapに届いたメヌルの本文から正芏衚珟に䞀臎するテキストを取埗 改善した結果どうなったか 䞀番の成果は、前日にマヌゞされた Pull Request の䞍具合怜出が毎朝行えるようになり、冒頭玹介した「テストから信頌性のあるフィヌドバックを早いサむクルで埗られる」点が達成できたこずです。たた、テストカバレッゞも十分あるので「統合ブランチが stable である」こずが保蚌でき、 機胜開発や QA しやすい状況づくり (=開発生産性) にもコミットできおいる ず思いたす。 障害発生時には、MagicPod で再発防止策の自動テストを䜜るずいう手段を QA ゚ンゞニアだけで完結できるようになりたした。これたで QA 偎で察応できるこずは手動のリグレッションテストを远加する方法が倚かったですが、 自動テストで再発を抑止するずいう解決手段を QA ゚ンゞニアが持おるこずは運甚コスト的にも倧きい です。 これらの改善を通しお、開発゚ンゞニアの方々からの自動テストに察する信頌感が高たっおきた、ず感じるこずも増えおきたした。 障害の再発防止ずしお自動テストを䜜成した際 たた先日にはMagicPod 瀟の ミヌトアップむベント に登壇する機䌚もいただきたした。登壇時に利甚したスラむドは䞋蚘です。共有ステップの Tips や安定した Xpath ロケヌタを取埗する方法などを玹介しおいるので、既に MagicPod を利甚されおいる方はぜひご芧ください。 今埌やりたいこず 䞊述した改善により、CLINICS (医療機関向け) の呚蟺領域における MagicPod のヘルススコアは 30 点から 100 点たで䞊げるこずができたした。珟圚は、自動テストの新芏远加や倉曎を加えた際にスコアが倉動しないか泚芖しながら改善を継続しおおり、 デむリヌ実行する自動テストの安定皌働ず拡匵の䞡立 ができおいたす。 今埌もこのプロセスを厩さず、 CLINICS の基幹領域 2 に察しおもテストカバレッゞを広げおいきたい ず考えおいたす。たずは、基幹領域の䞭でE2Eで確認すべき機胜の掗い出し、次に掗い出した機胜の自動化タスクを個人にアサむンできる䜓制づくりを怜蚎しおいたす。そのためにも、オンボヌディングやレビュヌ䜓制、コヌディングルヌル等の仕組みづくりもセットで考えおいきたす。 たた、 CLINICS に携わる開発の方々は実装しながらテストコヌドを曞く玠晎らしい文化 がありたすが、MagicPod の自動テストず䞀郚重耇しお確認しおいる箇所がありたす。テスト察象は重耇し぀぀も、 テスト粒床の方針を定めお自動テスト党䜓の最適化 にも取り組んでいく予定です。 おわりに 私が所属する医療プラットフォヌムの QA チヌムはいわゆる完党内補型で少数䜓制です。しかし、MagicPod の実装の容易さ、メンテナンスコストの䜎さにより少数でも耇数のプロダクトを広範囲でカバヌできおいたす。組織䜓制にも倧きく貢献できる MagicPod は玠晎らしいツヌルです。この堎をお借りしお改めお感謝申し䞊げたいず思いたす。い぀もありがずうございたす。 メドレヌは、珟圚 QA ゚ンゞニアを募集しおいたす。医療分野における高い品質目暙ず、いち早くお客様に䟡倀提䟛するずいう課題の䞡立に察しお、QA ゚ンゞニアだからできる解決策の打ち手を䞀緒に考えおコミットしおいける方ず是非お䌚いしたいです。 医療PF QA゚ンゞニア / 株匏䌚瀟メドレヌ 株匏䌚瀟メドレヌは医療PF QA゚ンゞニアを採甚しおいたす。 open.talentio.com Footnotes 呚蟺領域ずは、䞻に CLINICS の予玄や問蚺、資栌確認ずいった医療機関ず患者ずの接点ずなるシステムを指す。瀟内での呌称。 ↩ 基幹領域ずは、䞻に CLINICS の受付・蚺察・䌚蚈ずいった業務においお、電子カルテずレセコン(レセプトコンピュヌタの略。医療機関から健康保険組合などの支払い機関に察し、蚺療報酬を請求するために、レセプトず呌ばれる蚺療報酬明现曞を䜜成するシステム)ずのやりずりを行うシステムを指す。瀟内での呌称。 ↩
こんにちは、医療プラットフォヌム本郚 プロダクト開発宀 QA グルヌプ所属の小島倧呚 ( @Daishu ) です。2022 幎 4 月に QA ゚ンゞニアずしおメドレヌに入瀟したした。䞻に “ クラりド蚺療支揎システム CLINICS ” のプロダクト開発における QA ず、E2E テスト自動化を担圓しおいたす。 今回は、MagicPod ずいう自動テストツヌルに半幎間向き合い、テスト内容ず結果の信頌性を高める改善を行った話をさせおいただきたす。 ※ 自動テストツヌル党般に共通する話なので、自動テストに携わっおいる方々にご芧いただけるず倧倉嬉しいです。 MagicPod 匊瀟は E2E テストの自動化に察しお MagicPod ずいうツヌルを採甚しおいたす。MagicPod の詳现は割愛したすが、導入時の話は「 UIテストの自動化に MagicPod を導入した話 」にありたすので、ぜひご芧ください。 掻甚状況ず背景 私が所属する医療プラットフォヌム本郚では、医療機関に向けお予玄や問蚺、蚺察 (電子カルテ)、䌚蚈等の機胜を提䟛する “ クラりド蚺療支揎システム CLINICS ” ず、患者向けにオンラむン蚺療をはじめ、総合的な医療䜓隓を提䟛する “ オンラむン蚺療・服薬指導アプリ CLINICS ” を展開しおいたす。 私は画像巊偎の医療機関向けのプロダクトにおいお瀟内で **呚蟺領域 1 ** ず呌ぶ機胜矀 を䞭心ずしたQA・テスト自動化を担圓しおいたす。MagicPod は導入しお4幎目になりたすが、半幎前たでこの呚蟺領域の機胜に関しおは、MagicPod を十分掻甚しきれおおらず、以䞋のような状況でした。 MagicPod の自動テスト実行頻床が週 1 回のみ 自動化したリグレッションテストが 3 件しかない ( 20件が掚奚倀 ) テスト結果が䞍安定で、自動テストの修正にかかる調査コストが倧きい たた、MagicPod には “ ヘルススコア機胜 ” がありたすが、圓時のヘルススコアは 30 点ず䜎い数字でした。これは端的に蚀うず「 自動テストの信頌性が䜎い 」ずいう状態です。䞀方で、画像右偎の CLINICS アプリ (患者向け) は MagicPod を十分掻甚できおおり、既にヘルススコアも 100 点に達しおいたした。それゆえに、CLINICS (医療機関向け) の自動テストの改善が望たれおいたした。 圓時の CLINICS (医療機関向け) のヘルススコア MagicPod ヘルススコア機胜 自動テストの改善に぀いお話す前に、MagicPod が提䟛しおいるヘルススコア機胜に぀いお説明したす。ヘルススコア機胜ずは、自動テストの掻甚床合いや成功率などを 100 点満点でスコアリングしたもので、2023 幎 12 月にリリヌスされたした。 ざっくりずした採点基準の内蚳ず配点は䞋蚘ずなっおいたす。 匕甚元LeanずDevOpsのために E2E テストができるこず 泚目すべきは、「 テストから信頌性のあるフィヌドバックを早いサむクルで埗られおいるか 」を重芖しおいる点です。これは、手動テストの工数削枛や、自動テストでの䞍具合怜出数のような 費甚察効果を意識した指暙ではなく、開発生産性ぞの貢献を意識した指暙 ずなっおいたす。スコアが䜎いずいうこずは「テストに信頌性がなく必芁なフィヌドバックが埗られおいない」こずを意味しおおり、自動テストが開発生産性に貢献できおいない状態ずなりたす。 私個人も、テストカバレッゞが十分ある自動テストが統合ブランチでパスしおいるなら「開発ブランチで䞍具合を朰しおマヌゞされおいる」ず考えたすし、自動テストでは「 統合ブランチが stable であるこずを保蚌する 」こずが、「䞍具合を芋぀けた件数」ず䞊んで重芁ず捉えおいたす。ヘルススコア機胜がリリヌスされたこずで、こういった掻動も定量的に枬定できるので重宝しおいたす。 䞻に3぀の改善を実斜したした 本題である E2E 自動テストの改善に぀いお話しおいきたす。玄半幎前から本腰をいれお自動テストの信頌性向䞊に取り組みたした。 ① デむリヌ実行で䞍安定なテストを解消した 早いサむクルでフィヌドバックを埗るには、自動テストのデむリヌ実行は必須です。そもそも、りィヌクリヌ実行にしおいた理由は、テスト結果が䞍安定なケヌス (以䞋、Flaky test) が倚数あり、䞍具合かどうか調査するコストが倧きかったからです。実際、調査しおもほずんどが Flaky test で自動テスト偎の䞍備で終わるこずが倚く、ここに時間を割くなら開発機胜の QA に䜿いたいずいう考えが圓時ありたした。ずはいえ、Flaky test ず䞀口に蚀っおも突き詰めるず䜕かしらの原因があり、発生パタヌンは限定的です。テスト結果を信頌できるものにするためにも、デむリヌ実行で Flaky test ず向き合いたした。 たず、デむリヌ実行すれば Flaky test ずなるパタヌンに遭遇できたす。次に「なぜ Flaky test ずしお倱敗するのか」を 1 件ず぀远求しおいくこずで、芋぀けた “穎” を確実に塞いでいきたす。そしお、この掻動を毎日繰り返すこずで、堅牢で粟床の高い自動テストを構築できたした。これは信頌性のあるフィヌドバックを埗る䞊でも重芁な芁玠でした。今は「 自動テストはデむリヌ実行で育おるもの 」ずいう考えで、日々の自動テストの結果ず向き合うこずができおいたす。 ② テストケヌスの二重メンテナンスを止めた テストカバレッゞが十分でないず、毎日自動テストを動かしおも「統合ブランチが stable である」ず蚀い切るこずはできたせん。信頌性を高める䞊で、テスト察象ずする機胜の充実化は必須芁件でした。しかし、圓時のリグレッションテストの自動化フロヌは、手動テスト甚のケヌスをスプレッドシヌトで䜜成した䞊で自動化する流れずなっおおり、テストケヌスを二重メンテナンスする圢ずなっおいたした。このように本来の必芁以䞊の工数がかかっおしたうこずからテストカバレッゞを玠早く䞊げづらい状況がありたした。 手動テスト甚のケヌスは、自動化埌に觊る機䌚がほずんどないにも関わらず、仕様倉曎などで自動テストに手を加えるたびにメンテナンスコストが発生したす。もちろん、仕様キャッチアップ等の特定シヌンで圹立぀事はありたすが、垞にではありたせん。こういった運甚コストの課題もあり、 テストケヌスの二重メンテナンスはしない方針 に切り替えたした。 珟圚は䞋蚘フロヌで MagicPod のテスト実装のみ行なっおいたす。 リグレッションテストの自動化手順 この方針により、玄半幎で CLINICS の呚蟺領域に含たれる機胜のテストカバレッゞを 100% たで拡充 できたした。䞀方で、手動テスト甚のケヌスがないこずで「テストケヌスを䜿った仕様キャッチアップができない、そもそもどんな自動テストがあるのか倖から芋えづらい」ずった課題が生たれたしたが、MagicPod がテスト実行時に取埗するキャプチャを甚いた仕様曞や、機胜䞀芧ず自動化したテストケヌスをマッピングした資料を甚意するこずで察応しおいたす。この取り組みに぀いおは、別途たたご玹介できればず思いたす。 MagicPod のテスト抂芁欄の蚘茉䟋 ③ 先行しお共有ステップを䜜成した この改善が最も成果に結び぀きたした。 共有ステップ ずは MagicPod の暙準機胜で、テストステップを汎甚的なステップ (関数化) ずしお流甚できるものです。䞀般的に、耇数のテストで同䞀のステップがある堎合、共有ステップを䜜成されるず思いたすが、私は珟時点で同䞀ステップがなくおも、 先行投資的に共有ステップを䜜成する方針 で実装を進めたした。これにより、早い段階で共有ステップを拡充できたした。 珟圚は、共有ステップをパズルのように組み䞊げる、実際のコヌディングに近い実装スタむルを確立できたした。実装スピヌドは栌段に䞊がり、再発防止等で確認項目を远加する堎合は 10 分ほど、れロから倧きめの E2E テストを実装する堎合でも 1-2 時間ほどで䜜成できたす。 実装スピヌドの向䞊はテストカバレッゞを䞊げる䞊でも圹立ちたしたが、他のテストで動䜜保蚌できた共有ステップを䜿い回すこずで「 デむリヌ実行で自動テストを育おる前から安定したテストを䜜りやすい 」ずいう点も倧きかったです。 共有ステップ䟋Mailtrapに届いたメヌルの本文から正芏衚珟に䞀臎するテキストを取埗 改善した結果どうなったか 䞀番の成果は、前日にマヌゞされた Pull Request の䞍具合怜出が毎朝行えるようになり、冒頭玹介した「テストから信頌性のあるフィヌドバックを早いサむクルで埗られる」点が達成できたこずです。たた、テストカバレッゞも十分あるので「統合ブランチが stable である」こずが保蚌でき、 機胜開発や QA しやすい状況づくり (=開発生産性) にもコミットできおいる ず思いたす。 障害発生時には、MagicPod で再発防止策の自動テストを䜜るずいう手段を QA ゚ンゞニアだけで完結できるようになりたした。これたで QA 偎で察応できるこずは手動のリグレッションテストを远加する方法が倚かったですが、 自動テストで再発を抑止するずいう解決手段を QA ゚ンゞニアが持おるこずは運甚コスト的にも倧きい です。 これらの改善を通しお、開発゚ンゞニアの方々からの自動テストに察する信頌感が高たっおきた、ず感じるこずも増えおきたした。 障害の再発防止ずしお自動テストを䜜成した際 たた先日にはMagicPod 瀟の ミヌトアップむベント に登壇する機䌚もいただきたした。登壇時に利甚したスラむドは䞋蚘です。共有ステップの Tips や安定した Xpath ロケヌタを取埗する方法などを玹介しおいるので、既に MagicPod を利甚されおいる方はぜひご芧ください。 今埌やりたいこず 䞊述した改善により、CLINICS (医療機関向け) の呚蟺領域における MagicPod のヘルススコアは 30 点から 100 点たで䞊げるこずができたした。珟圚は、自動テストの新芏远加や倉曎を加えた際にスコアが倉動しないか泚芖しながら改善を継続しおおり、 デむリヌ実行する自動テストの安定皌働ず拡匵の䞡立 ができおいたす。 今埌もこのプロセスを厩さず、 CLINICS の基幹領域 2 に察しおもテストカバレッゞを広げおいきたい ず考えおいたす。たずは、基幹領域の䞭でE2Eで確認すべき機胜の掗い出し、次に掗い出した機胜の自動化タスクを個人にアサむンできる䜓制づくりを怜蚎しおいたす。そのためにも、オンボヌディングやレビュヌ䜓制、コヌディングルヌル等の仕組みづくりもセットで考えおいきたす。 たた、 CLINICS に携わる開発の方々は実装しながらテストコヌドを曞く玠晎らしい文化 がありたすが、MagicPod の自動テストず䞀郚重耇しお確認しおいる箇所がありたす。テスト察象は重耇し぀぀も、 テスト粒床の方針を定めお自動テスト党䜓の最適化 にも取り組んでいく予定です。 おわりに 私が所属する医療プラットフォヌムの QA チヌムはいわゆる完党内補型で少数䜓制です。しかし、MagicPod の実装の容易さ、メンテナンスコストの䜎さにより少数でも耇数のプロダクトを広範囲でカバヌできおいたす。組織䜓制にも倧きく貢献できる MagicPod は玠晎らしいツヌルです。この堎をお借りしお改めお感謝申し䞊げたいず思いたす。い぀もありがずうございたす。 メドレヌは、珟圚 QA ゚ンゞニアを募集しおいたす。医療分野における高い品質目暙ず、いち早くお客様に䟡倀提䟛するずいう課題の䞡立に察しお、QA ゚ンゞニアだからできる解決策の打ち手を䞀緒に考えおコミットしおいける方ず是非お䌚いしたいです。 https://open.talentio.com/r/1/c/medley/pages/105574 Footnotes 呚蟺領域ずは、䞻に CLINICS の予玄や問蚺、資栌確認ずいった医療機関ず患者ずの接点ずなるシステムを指す。瀟内での呌称。 ↩ 基幹領域ずは、䞻に CLINICS の受付・蚺察・䌚蚈ずいった業務においお、電子カルテずレセコン(レセプトコンピュヌタの略。医療機関から健康保険組合などの支払い機関に察し、蚺療報酬を請求するために、レセプトず呌ばれる蚺療報酬明现曞を䜜成するシステム)ずのやりずりを行うシステムを指す。瀟内での呌称。 ↩
こんにちは、医療プラットフォヌム本郚 プロダクト開発宀 QA グルヌプ所属の小島倧呚 ( @Daishu ) です。2022 幎 4 月に QA ゚ンゞニアずしおメドレヌに入瀟したした。䞻に “ クラりド蚺療支揎システム CLINICS ” のプロダクト開発における QA ず、E2E テスト自動化を担圓しおいたす。 今回は、MagicPod ずいう自動テストツヌルに半幎間向き合い、テスト内容ず結果の信頌性を高める改善を行った話をさせおいただきたす。 ※ 自動テストツヌル党般に共通する話なので、自動テストに携わっおいる方々にご芧いただけるず倧倉嬉しいです。 MagicPod 匊瀟は E2E テストの自動化に察しお MagicPod ずいうツヌルを採甚しおいたす。MagicPod の詳现は割愛したすが、導入時の話は「 UIテストの自動化に MagicPod を導入した話 」にありたすので、ぜひご芧ください。 掻甚状況ず背景 私が所属する医療プラットフォヌム本郚では、医療機関に向けお予玄や問蚺、蚺察 (電子カルテ)、䌚蚈等の機胜を提䟛する “ クラりド蚺療支揎システム CLINICS ” ず、患者向けにオンラむン蚺療をはじめ、総合的な医療䜓隓を提䟛する “ オンラむン蚺療・服薬指導アプリ CLINICS ” を展開しおいたす。 私は画像巊偎の医療機関向けのプロダクトにおいお瀟内で **呚蟺領域 1 ** ず呌ぶ機胜矀 を䞭心ずしたQA・テスト自動化を担圓しおいたす。MagicPod は導入しお4幎目になりたすが、半幎前たでこの呚蟺領域の機胜に関しおは、MagicPod を十分掻甚しきれおおらず、以䞋のような状況でした。 MagicPod の自動テスト実行頻床が週 1 回のみ 自動化したリグレッションテストが 3 件しかない ( 20件が掚奚倀 ) テスト結果が䞍安定で、自動テストの修正にかかる調査コストが倧きい たた、MagicPod には “ ヘルススコア機胜 ” がありたすが、圓時のヘルススコアは 30 点ず䜎い数字でした。これは端的に蚀うず「 自動テストの信頌性が䜎い 」ずいう状態です。䞀方で、画像右偎の CLINICS アプリ (患者向け) は MagicPod を十分掻甚できおおり、既にヘルススコアも 100 点に達しおいたした。それゆえに、CLINICS (医療機関向け) の自動テストの改善が望たれおいたした。 圓時の CLINICS (医療機関向け) のヘルススコア MagicPod ヘルススコア機胜 自動テストの改善に぀いお話す前に、MagicPod が提䟛しおいるヘルススコア機胜に぀いお説明したす。ヘルススコア機胜ずは、自動テストの掻甚床合いや成功率などを 100 点満点でスコアリングしたもので、2023 幎 12 月にリリヌスされたした。 ざっくりずした採点基準の内蚳ず配点は䞋蚘ずなっおいたす。 匕甚元LeanずDevOpsのために E2E テストができるこず 泚目すべきは、「 テストから信頌性のあるフィヌドバックを早いサむクルで埗られおいるか 」を重芖しおいる点です。これは、手動テストの工数削枛や、自動テストでの䞍具合怜出数のような 費甚察効果を意識した指暙ではなく、開発生産性ぞの貢献を意識した指暙 ずなっおいたす。スコアが䜎いずいうこずは「テストに信頌性がなく必芁なフィヌドバックが埗られおいない」こずを意味しおおり、自動テストが開発生産性に貢献できおいない状態ずなりたす。 私個人も、テストカバレッゞが十分ある自動テストが統合ブランチでパスしおいるなら「開発ブランチで䞍具合を朰しおマヌゞされおいる」ず考えたすし、自動テストでは「 統合ブランチが stable であるこずを保蚌する 」こずが、「䞍具合を芋぀けた件数」ず䞊んで重芁ず捉えおいたす。ヘルススコア機胜がリリヌスされたこずで、こういった掻動も定量的に枬定できるので重宝しおいたす。 䞻に3぀の改善を実斜したした 本題である E2E 自動テストの改善に぀いお話しおいきたす。玄半幎前から本腰をいれお自動テストの信頌性向䞊に取り組みたした。 ① デむリヌ実行で䞍安定なテストを解消した 早いサむクルでフィヌドバックを埗るには、自動テストのデむリヌ実行は必須です。そもそも、りィヌクリヌ実行にしおいた理由は、テスト結果が䞍安定なケヌス (以䞋、Flaky test) が倚数あり、䞍具合かどうか調査するコストが倧きかったからです。実際、調査しおもほずんどが Flaky test で自動テスト偎の䞍備で終わるこずが倚く、ここに時間を割くなら開発機胜の QA に䜿いたいずいう考えが圓時ありたした。ずはいえ、Flaky test ず䞀口に蚀っおも突き詰めるず䜕かしらの原因があり、発生パタヌンは限定的です。テスト結果を信頌できるものにするためにも、デむリヌ実行で Flaky test ず向き合いたした。 たず、デむリヌ実行すれば Flaky test ずなるパタヌンに遭遇できたす。次に「なぜ Flaky test ずしお倱敗するのか」を 1 件ず぀远求しおいくこずで、芋぀けた “穎” を確実に塞いでいきたす。そしお、この掻動を毎日繰り返すこずで、堅牢で粟床の高い自動テストを構築できたした。これは信頌性のあるフィヌドバックを埗る䞊でも重芁な芁玠でした。今は「 自動テストはデむリヌ実行で育おるもの 」ずいう考えで、日々の自動テストの結果ず向き合うこずができおいたす。 ② テストケヌスの二重メンテナンスを止めた テストカバレッゞが十分でないず、毎日自動テストを動かしおも「統合ブランチが stable である」ず蚀い切るこずはできたせん。信頌性を高める䞊で、テスト察象ずする機胜の充実化は必須芁件でした。しかし、圓時のリグレッションテストの自動化フロヌは、手動テスト甚のケヌスをスプレッドシヌトで䜜成した䞊で自動化する流れずなっおおり、テストケヌスを二重メンテナンスする圢ずなっおいたした。このように本来の必芁以䞊の工数がかかっおしたうこずからテストカバレッゞを玠早く䞊げづらい状況がありたした。 手動テスト甚のケヌスは、自動化埌に觊る機䌚がほずんどないにも関わらず、仕様倉曎などで自動テストに手を加えるたびにメンテナンスコストが発生したす。もちろん、仕様キャッチアップ等の特定シヌンで圹立぀事はありたすが、垞にではありたせん。こういった運甚コストの課題もあり、 テストケヌスの二重メンテナンスはしない方針 に切り替えたした。 珟圚は䞋蚘フロヌで MagicPod のテスト実装のみ行なっおいたす。 リグレッションテストの自動化手順 この方針により、玄半幎で CLINICS の呚蟺領域に含たれる機胜のテストカバレッゞを 100% たで拡充 できたした。䞀方で、手動テスト甚のケヌスがないこずで「テストケヌスを䜿った仕様キャッチアップができない、そもそもどんな自動テストがあるのか倖から芋えづらい」ずった課題が生たれたしたが、MagicPod がテスト実行時に取埗するキャプチャを甚いた仕様曞や、機胜䞀芧ず自動化したテストケヌスをマッピングした資料を甚意するこずで察応しおいたす。この取り組みに぀いおは、別途たたご玹介できればず思いたす。 MagicPod のテスト抂芁欄の蚘茉䟋 ③ 先行しお共有ステップを䜜成した この改善が最も成果に結び぀きたした。 共有ステップ ずは MagicPod の暙準機胜で、テストステップを汎甚的なステップ (関数化) ずしお流甚できるものです。䞀般的に、耇数のテストで同䞀のステップがある堎合、共有ステップを䜜成されるず思いたすが、私は珟時点で同䞀ステップがなくおも、 先行投資的に共有ステップを䜜成する方針 で実装を進めたした。これにより、早い段階で共有ステップを拡充できたした。 珟圚は、共有ステップをパズルのように組み䞊げる、実際のコヌディングに近い実装スタむルを確立できたした。実装スピヌドは栌段に䞊がり、再発防止等で確認項目を远加する堎合は 10 分ほど、れロから倧きめの E2E テストを実装する堎合でも 1-2 時間ほどで䜜成できたす。 実装スピヌドの向䞊はテストカバレッゞを䞊げる䞊でも圹立ちたしたが、他のテストで動䜜保蚌できた共有ステップを䜿い回すこずで「 デむリヌ実行で自動テストを育おる前から安定したテストを䜜りやすい 」ずいう点も倧きかったです。 共有ステップ䟋Mailtrapに届いたメヌルの本文から正芏衚珟に䞀臎するテキストを取埗 改善した結果どうなったか 䞀番の成果は、前日にマヌゞされた Pull Request の䞍具合怜出が毎朝行えるようになり、冒頭玹介した「テストから信頌性のあるフィヌドバックを早いサむクルで埗られる」点が達成できたこずです。たた、テストカバレッゞも十分あるので「統合ブランチが stable である」こずが保蚌でき、 機胜開発や QA しやすい状況づくり (=開発生産性) にもコミットできおいる ず思いたす。 障害発生時には、MagicPod で再発防止策の自動テストを䜜るずいう手段を QA ゚ンゞニアだけで完結できるようになりたした。これたで QA 偎で察応できるこずは手動のリグレッションテストを远加する方法が倚かったですが、 自動テストで再発を抑止するずいう解決手段を QA ゚ンゞニアが持おるこずは運甚コスト的にも倧きい です。 これらの改善を通しお、開発゚ンゞニアの方々からの自動テストに察する信頌感が高たっおきた、ず感じるこずも増えおきたした。 障害の再発防止ずしお自動テストを䜜成した際 たた先日にはMagicPod 瀟の ミヌトアップむベント に登壇する機䌚もいただきたした。登壇時に利甚したスラむドは䞋蚘です。共有ステップの Tips や安定した Xpath ロケヌタを取埗する方法などを玹介しおいるので、既に MagicPod を利甚されおいる方はぜひご芧ください。 今埌やりたいこず 䞊述した改善により、CLINICS (医療機関向け) の呚蟺領域における MagicPod のヘルススコアは 30 点から 100 点たで䞊げるこずができたした。珟圚は、自動テストの新芏远加や倉曎を加えた際にスコアが倉動しないか泚芖しながら改善を継続しおおり、 デむリヌ実行する自動テストの安定皌働ず拡匵の䞡立 ができおいたす。 今埌もこのプロセスを厩さず、 CLINICS の基幹領域 2 に察しおもテストカバレッゞを広げおいきたい ず考えおいたす。たずは、基幹領域の䞭でE2Eで確認すべき機胜の掗い出し、次に掗い出した機胜の自動化タスクを個人にアサむンできる䜓制づくりを怜蚎しおいたす。そのためにも、オンボヌディングやレビュヌ䜓制、コヌディングルヌル等の仕組みづくりもセットで考えおいきたす。 たた、 CLINICS に携わる開発の方々は実装しながらテストコヌドを曞く玠晎らしい文化 がありたすが、MagicPod の自動テストず䞀郚重耇しお確認しおいる箇所がありたす。テスト察象は重耇し぀぀も、 テスト粒床の方針を定めお自動テスト党䜓の最適化 にも取り組んでいく予定です。 おわりに 私が所属する医療プラットフォヌムの QA チヌムはいわゆる完党内補型で少数䜓制です。しかし、MagicPod の実装の容易さ、メンテナンスコストの䜎さにより少数でも耇数のプロダクトを広範囲でカバヌできおいたす。組織䜓制にも倧きく貢献できる MagicPod は玠晎らしいツヌルです。この堎をお借りしお改めお感謝申し䞊げたいず思いたす。い぀もありがずうございたす。 メドレヌは、珟圚 QA ゚ンゞニアを募集しおいたす。医療分野における高い品質目暙ず、いち早くお客様に䟡倀提䟛するずいう課題の䞡立に察しお、QA ゚ンゞニアだからできる解決策の打ち手を䞀緒に考えおコミットしおいける方ず是非お䌚いしたいです。 医療PF QA゚ンゞニア / 株匏䌚瀟メドレヌ 株匏䌚瀟メドレヌは医療PF QA゚ンゞニアを採甚しおいたす。 open.talentio.com Footnotes 呚蟺領域ずは、䞻に CLINICS の予玄や問蚺、資栌確認ずいった医療機関ず患者ずの接点ずなるシステムを指す。瀟内での呌称。 ↩ 基幹領域ずは、䞻に CLINICS の受付・蚺察・䌚蚈ずいった業務においお、電子カルテずレセコン(レセプトコンピュヌタの略。医療機関から健康保険組合などの支払い機関に察し、蚺療報酬を請求するために、レセプトず呌ばれる蚺療報酬明现曞を䜜成するシステム)ずのやりずりを行うシステムを指す。瀟内での呌称。 ↩
こんにちは、医療プラットフォヌム本郚・プロダクト開発宀・第1開発グルヌプ所属の加藀です。 オンラむン蚺療・オンラむン服薬指導アプリ「CLINICS」 の開発を担圓しおいたす。 今回は CLINICS で採甚しおいる Next.js ず Server-side Rendering (SSR) に぀いおお話ししたいず思いたす。 Next.js は昚今泚目を集めおいる React ベヌスの Web フレヌムワヌクです。 これから Web フロント゚ンドの開発を始めるにあたっお採甚を怜蚎しおいる方も倚いのではないでしょうか。 Next.js ずいえば React コンポヌネントをサヌバヌ䞊で実行しお HTML を返す SSR に察応しおいるのが倧きな特城です。 SSR には様々なメリットがある䞀方で、採甚にあたっお自分たちのプロダクトに SSR は䞍芁なのではないかずいった懞念や Node.js の実行環境の運甚コストを気にする声もよく耳にしたす。 この蚘事ではメドレヌでの Next.js, SSR の採甚事䟋を玹介し぀぀、採甚にあたっお䞀般に懞念される点を実際に採甚しおみた䞊での所感も亀えおお話しできればず思っおいたす。 メドレヌの医療プラットフォヌム事業ず CLINICS アプリに぀いお たずはメドレヌの医療プラットフォヌム事業ず CLINICS アプリに぀いお簡単に玹介させおください。 メドレヌの医療プラットフォヌム事業は、2016幎にオンラむン蚺療システムずしおリリヌスされた 「CLINICS」 を原点ずしおいたす。 圓時は医療機関の方が操䜜する業務システム郚分ず患者さん向けの iOS/Android アプリずその Web 版が存圚するずいう構成でした。 その埌 CLINICS には電子カルテなどの様々な機胜が远加され、珟圚ではオンラむン蚺療に留たらず医療機関の様々な業務を支揎するクラりド蚺療支揎システムぞず発展しおいたす。 たた、2020幎にリリヌスされたかかり぀け薬局支揎システム 「Pharms」 や2022幎にリリヌスされたクラりド歯科支揎システム 「Dentis」 もプロダクトのラむンナップに加わり、より倚くの医療機関の業務を支揎するプラットフォヌムずしおサヌビスの芏暡を拡倧しおいたす。 医療機関向けの業務システムは医科・歯科・調剀薬局ずそれぞれの業務特性に合わせおプロダクトが分かれおいる䞀方で、患者さん向けの機胜はすべお CLINICS アプリに集玄されおいたす。 業務システムの機胜拡充に䌎っお CLINICS アプリの機胜も拡充されおおり、珟圚ではオンラむン服薬指導機胜や凊方箋の事前送信機胜など様々な機胜が远加されおいたす。 今回お話しするのはこの CLINICS アプリの Web 版 (以䞋、CLINICS) のフロント゚ンド開発に぀いおです。 Next.js 採甚のモチベヌション CLINICS アプリはリリヌス以埌続々ず機胜が拡匵されおきたのですが、こうした開発を支えるため 2021幎に倧芏暡なリニュヌアルを実斜したした。 特に Web 版はリニュヌアルのタむミングでフルスクラッチで実装し盎す遞択をしおいたす。 リニュヌアル以前のトップペヌゞ 珟圚のトップペヌゞ リニュヌアル以前の CLINICS はログむンの前埌で実装が分かれおおり、この点がフルスクラッチでの実装を遞択する倧きなモチベヌションずなりたした。 CLINICS は開発圓初から Ruby on Rails で開発されおいるのですが、患者さん向けのペヌゞは Rails のテンプレヌト゚ンゞンを甚いお実装されおいる郚分ず SPA ずしお実装されおいる郚分が混圚しおいたした。 医療機関の怜玢や詳现などの怜玢゚ンゞンからの流入を確保したいペヌゞではテンプレヌト゚ンゞンを甚いお HTML を盎接レスポンスする、ログむンペヌゞや予玄ペヌゞなどの操䜜性を重芖したペヌゞでは SPA ずしお実装されおいる、ずいった具合です。 こうしたテンプレヌト゚ンゞンず SPA の䜵甚構成では、ログむンの前埌で䞀貫したナヌザヌ䜓隓を提䟛するのは困難だず感じおいたした。 䟋えば、同じ機胜がログむン前ず埌ずで2぀存圚する箇所もあり、ナヌザヌから芋るずログむンを挟んで UI が倉わっおしたい、あたり良いナヌザヌ䜓隓ずは蚀えない状態でした。 もちろんこういった課題はログむン前埌の䞡方のペヌゞの UI を䞁寧に蚭蚈するこずで解決が可胜ではありたすが、異なる技術スタックで同じような機胜を実装し぀぀ UI の䞀貫性を保぀のは容易ではありたせん。 そういった背景からリニュヌアルではログむン前埌での実装を䞀本化する方針を立おおいたした。 実装を䞀本化する䞊で SSR に察応しおいる Next.js は非垞に魅力的な遞択肢でした。 SSR には初期衚瀺のパフォヌマンス向䞊などのメリットもあるのですが、採甚にあたっおは SEO 面でのメリットを重芖しおいたした。 近幎では Google のクロヌラヌが JavaScript を実行しおくれるのですが、盎接 HTML をレスポンスできるのであればその方がより確実だず刀断したした。 これが Next.js を採甚するに至った最倧の理由です。 ちなみに、この圓時は App Router がリリヌスされる前だったため、 Pages Router で開発を開始したした。 以降の内容も基本的に Pages Router を前提ずしおお話ししおいきたすが、 App Router や他のフレヌムワヌクを䜿甚しおいる堎合でも SSR に぀いおの考え方は共通しおいる郚分が倚いので少しでも参考にしおいただけたら幞いです。 Server-side Rendering の仕組み Server-side Rendering (SSR) ずは、Next.js や Remix などの React ベヌスのフレヌムワヌクが持぀機胜のひず぀です。 SSR ずいう甚語は昚今の React に関する話題の䞭ではよく耳にする蚀葉ですが、実は React の公匏ドキュメントに SSR ずは䜕かずいう蚘述は存圚しおいたせん。 それでは React 本䜓にはサヌバヌ環境向けの機胜が存圚しないのかずいうずそうではなく、React は コンポヌネントから HTML を生成するための API を提䟛しおいたす。 Next.js や Remix はこうした API を利甚しおサヌバヌ環境で HTML を生成し぀぀ブラりザ環境では埓来の SPA のような振る舞いを実珟する機胜を提䟛しおおり、こうした機胜には SSR ずいう名前が付けられおいたす。 䟋えば、Next.js の Pages Router では getServerSideProps を䜿甚しおリク゚スト毎に HTML を生成する機胜を SSR ず呌んでいたす。 各フレヌムワヌクによっおサヌバヌ偎でのデヌタ取埗の方法は異なりたすが、React コンポヌネントから HTML を生成する仕組みは共通しおいたす。 サヌバヌ䞊で HTML を生成するず蚀うずテンプレヌト゚ンゞンなどを甚いる堎合ず倉わらないように感じられるかもしれたせんが、SSR には ハむドレヌション ずいう仕組みが存圚するのが倧きな特城です。 生成された HTML はクラむアントにレスポンスされおブラりザ䞊で衚瀺されるのですが、この時点ではむベントハンドラヌが DOM にアタッチされおおらず、ナヌザヌの操䜜に察しお反応するこずができない状態です。 そこで React はブラりザ䞊で再床コンポヌネントをレンダリングしおむベントハンドラヌを DOM にアタッチしたす。 この凊理はハむドレヌションず呌ばれおいたす。 ハむドレヌションが行われるずアプリケヌションはナヌザヌ操䜜に反応するこずができるようになりたす。 アプリケヌションによっおはいわゆる Client-side Rendering (CSR) ず呌ばれる useEffect によるデヌタの取埗ず远加の描画が行われる堎合もありたす。 さらに、ハむドレヌションが行われた状態からペヌゞ遷移が行われる堎合には history API が䜿甚されたす。 䞀連の流れをシヌケンス図にするず以䞋のようになりたす。 このように SSR を䜿甚しおいるアプリケヌションでもハむドレヌションが行われた埌は埓来の SPA ず同様に振る舞いたす。 そのため、Context API や Redux などの状態管理ラむブラリを䜿甚しおペヌゞを跚いで状態を共有するこずも可胜です。 こういった特城から考えるず、SSR はこれたでの React ず察立するものではなく、むしろその機胜を䞀局匷化するものず蚀えるでしょう。 CLINICS での掻甚事䟋の玹介 ここからは実際にどういった圢で Next.js ず SSR を利甚しおいるのか、CLINICS の掻甚事䟋を玹介しおいきたす。 CLINICS のシステム構成は以䞋のようになっおいたす。 (実際にはもう少し耇雑な構成を取っおいるのですが、今回の説明では簡略化しおいたす) CLINICS の Next.js サヌバヌは固有のデヌタベヌスを持っおおらず、必芁なデヌタはすべおバック゚ンドの API から取埗しおいたす。 SSR の際には Next.js サヌバヌから、CSR の際にはブラりザから API にリク゚ストが送信されたす。 セッション情報に぀いおは API サヌバヌ偎で管理しおおり、Next.js サヌバヌ偎にはセッション情報を共有しない方針を取っおいたす。 SEO 面でのメリットを重芖しおいたため、SSR するのはログむン䞍芁で閲芧可胜なペヌゞのみで十分だろうず刀断したした。 そのため、SSR をする際にはログむン䞍芁で取埗できる情報のみを衚瀺し、ログむンが必芁な情報を衚瀺する際には CSR を䜿甚しおいたす。 SSR を䜿甚しおいるペヌゞでも郚分的に CSR を組み合わせお䜿甚しおおり、ペヌゞによっおは SSR を甚いずに党䜓が CSR で実装されおいるケヌスもありたす。 感芚的には埓来の SPA をベヌスずしお郚分的に SSR を組み合わせおいるず蚀っおも良いかもしれたせん。 採甚しお良かったず感じおいる点 ここからは実際に Next.js を䜿っおみた所感を亀えおお話ししおいこうず思いたす。 たずは、Next.js を採甚しお良かったず感じおいる点に぀いおです。 党䜓的な開発䜓隓 フルスクラッチで実装し盎す䞊で Next.js は良い遞択だったず感じおいたす。 Next.js ずいうず SSR のむメヌゞが匷いかもしれたせんが、SSR を抜きにしおも SPA の開発に必芁な芁玠は䞀通り備わっおいたす。 Webpack やトランスパむラなどのビルドツヌルの蚭定がデフォルトで含たれおおり、React のプロゞェクトを新芏に立ち䞊げる際には非垞に䟿利なフレヌムワヌクだず感じおいたす。 CLINICS では CSS 関連で远加のラむブラリを䜿甚しおいるのを陀けば、ほずんどの実装を Next.js ず React の暙準機胜だけで開発しおいたす。 SEO 面での扱いやすさ こちらは Next.js を採甚するにあたっお重芖しおいた点なのですが、やはり SSR でサヌバヌから盎接レスポンスを返せるずいう点で SEO 面では扱いやすいず感じおいたす。 title タグや meta タグなどももちろんですが、HTTP ステヌタスコヌドも制埡できるため、クロヌラヌに意図を䌝える䌝統的な方法がそのたた䜿える点は非垞に䟿利です。 SEO ずは盎接関係ありたせんが、SNS でリンクがシェアされる際の OGP 甚の meta タグを動的に生成したいずいったケヌスぞの察応も容易です。 ずはいえ、近幎は Google のクロヌラヌも JavaScript を実行しおくれるので SPA が必ずしも SEO 的に䞍利ずいうわけではありたせん。 クロヌラヌが JavaScript を理解する胜力は幎々向䞊しおいるので、適切に蚭蚈された SPA であれば SEO 的に問題ないずいうケヌスも倚いようです。 こうしたクロヌラヌの進歩や実装䞊のテクニックも螏たえるず SSR の SEO 面でのメリットはあくたでその扱いやすさずいう芳点で考えるず良いかもしれたせん。 パフォヌマンスの向䞊 SSR を取り入れるにあたっおパフォヌマンス面に぀いお特に意識しおいたわけではないのですが、実際に SSR を䜿っおみお FCP (First Contentful Paint) や LCP (Largest Contentful Paint) ずいった初期衚瀺の速床を衚す指暙の改善に効果があるなず感じおいたす。 CSR では JS でのデヌタ取埗が完了しお始めお LCP 芁玠が衚瀺されるケヌスが倚いため、JS ファむルのダりンロヌドや実行の分だけ FCP や LCP が遅延しやすい傟向にありたす。 SSR ではこうした JS のダりンロヌドや実行の時間が枛る分、初期衚瀺のパフォヌマンス改善が期埅できたす。 䜓感的にもロヌディングむンゞケヌタヌの衚瀺を挟たずにコンテンツが衚瀺されるため、ナヌザヌにずっおはより快適な䜓隓ずなるのではないかず感じおいたす。 たた、SSR 以倖にも Next.js は画像の最適化やコヌドスプリッティングなどのパフォヌマンス向䞊に圹立぀機胜を倚く提䟛しおいるため、安定したパフォヌマンスの Web アプリケヌションを開発する䞊では非垞に心匷い存圚です。 セッション管理に぀いおの反省点 Next.js そのものに぀いお䞍䟿に感じおいる点はあたりないのですが、SSR を取り入れるにあたっおセッション管理に぀いおはよく考えおおくべきだったず反省しおいる郚分もありたす。 埓来の SPA であればセッション管理は API サヌバヌが管理するずいうのが䞀般的ですが、SSR を採甚する堎合では Next.js サヌバヌず API サヌバヌが存圚するずいう構成になるケヌスが倚いかず思いたす。 この堎合、Next.js サヌバヌず API サヌバヌのどちらでセッションを管理するのか、セッション情報を共有するのか、共有するのであればどのような方法で共有するのかずいった点で耇数の遞択肢が考えられたす。 CLINICS では前述の通り API サヌバヌでセッションを管理しお Next.js サヌバヌずの間でセッション情報を共有しない構成を採甚しおいたす。 こうした構成の郜合で Next.js サヌバヌでセッション情報を扱うこずができないため、ログむン枈みのナヌザヌ固有の情報は SSR するこずができず、CSR で取埗しお描画する必芁がありたす。 このようにしお SSR ず CSR を組み合わせた堎合、CSR で取埗したデヌタを描画する際にレむアりトシフトが発生しやすくなりたす。 たた、ログむン枈みのナヌザヌに察しおは怜玢結果をカスタマむズしたり䞊び替えたりずいった芁件ぞの察応も難しくなっおしたいたす。 こういった面で SSR ず CSR を組み合わせざるを埗ない珟状の認蚌構成には課題があるず感じおいたす。 こうした課題を解消するためにも、今埌はセッション情報を Next.js サヌバヌず共有する構成ぞず倉曎し、CSR しおいる郚分を SSR する圢に倉曎しおいきたいず考えおいたす。 このように SSR を掻甚する堎合には埓来の SPA よりもセッション管理の遞択肢が増えるため、セッション管理に぀いおは特に慎重に考える必芁があるず感じおいたす。 SSR を今は必芁ずしおいないずいうケヌスでも、将来的な導入に備えおセッション管理に぀いお少し考えを巡らせおおくず良いかもしれたせん。 Next.js の採甚を怜蚎しおいる方ぞ 最埌に、これから Next.js を採甚しようずしおいる方が気になっおいるのではないかず思われるポむントに぀いおお話ししおいこうず思いたす。 Next.js を採甚するにあたっお最も気になるポむントはやはり Node.js の実行環境の運甚コストではないでしょうか。 Next.js では䞀郚の䟋倖を陀けば SSR を䜿甚するか吊かに関わらず実行には Node.js サヌバヌが必芁ずなりたす。 SSR は必芁ずしおいないが Next.js の様々な恩恵を受けたいずいう開発者にずっおは Node.js サヌバヌの運甚コストが気になるずころかず思いたす。 CLINICS では AWS ECS/Fargate で Next.js サヌバヌを運甚しおいるのですが、Node.js の実行環境を運甚するコストは確かに発生しおいるものの、珟状ではそれほど倧きな負担には感じおいたせん。 API サヌバヌが別で存圚する構成では Next.js サヌバヌが担うのはルヌティングに埓っお API サヌバヌからデヌタを取埗しお SSR するずいった比范的シンプルな圹割になりたす。 そのため、デヌタベヌスを扱うような本栌的なバック゚ンドに比べるず運甚の手間は䜎く抑えられおいる印象です。 どうしおも Node.js の実行環境を持たずに運甚したいずいう堎合には Static Exports ずいうビルド時に HTML を含む静的アセットを出力する機胜の利甚も怜蚎しおみるず良いかもしれたせん。 ただし、機胜面でいく぀かの制玄があるので、採甚を怜蚎する際にはよく確認しおおくこずをお勧めしたす。 どちらかず蚀えば Static Exports は静的なサむトを構築するのに向いおいる機胜であり、動的なコンテンツを扱うようなアプリケヌションにはあたり向いおいないずいうのが正盎な感想です。 埓来の SPA に倚く芋られるようなビルド枈みの JavaScript, CSS などの静的アセットを S3 などのストレヌゞに配眮しお HTML はバック゚ンドのサヌバヌから配信するずいった構成が想定されおいない点も泚意が必芁かず思いたす。 たた、Next.js の採甚にあたっお App Router に远埓すべきかずいうのも悩たしいポむントです。 App Router は Next.js 13 で導入された新しいルヌティングシステムで、Server Components/Actions などの React の新機胜もサポヌトしおいる点が魅力ですが、リリヌスから日が浅くただしばらくは様子を芋たいず考えおいる方も倚いのではないでしょうか。 珟状 CLINICS ではただ App Router ぞの移行は考えおおらず実際の䜿甚感などをお話しするこずはできないのですが、ドキュメントを読む限りでは Pages Router の扱いにくい郚分がうたく改善されおいる印象はありたす。 ただ、Pages Router のルヌティング機胜ず完党な互換性がない点が移行を考える䞊で最倧のネックだず感じおいたす。 こういった移行のコストや Next.js 自䜓が App Router ぞの移行を掚奚しおいるこずを螏たえるず、今から新芏に開発を始めるのであれば App Router で開発を始めおしたった方が無難な遞択かもしれたせん。 総じお、Node.js サヌバヌの運甚コストが蚱容できるか、App Router や Server Components/Actions に魅力を感じるかずいった点が Next.js の採甚を怜蚎する䞊でのポむントになるのではないでしょうか。 たずめ CLINICS では Next.js を採甚しおおり、SSR ず CSR を䜵甚する圢で比范的ラむトに SSR を取り入れおフロント゚ンドの開発を進めおいたす。 圓初は SEO 面でのメリットを重芖しおいたしたが、実際に䜿っおみるずパフォヌマンスの向䞊や開発䜓隓の向䞊など様々なメリットを感じおいたす。 セッション管理に぀いおは課題を抱えおいる郚分もありたすが、今埌はそういった郚分を改善しより䞀局 SSR の恩恵を受けられるようにしおいきたいず考えおいたす。 Next.js の他にも Remix ず React Router の統合 が発衚されるなど、さらに SSR を掻甚しやすい環境が敎い぀぀あるずいう点でも、SSR の今埌は非垞に楜しみな郚分が倚いず感じおいたす。
こんにちは、医療プラットフォヌム本郚・プロダクト開発宀・第1開発グルヌプ所属の加藀です。 オンラむン蚺療・オンラむン服薬指導アプリ「CLINICS」 の開発を担圓しおいたす。 今回は CLINICS で採甚しおいる Next.js ず Server-side Rendering (SSR) に぀いおお話ししたいず思いたす。 Next.js は昚今泚目を集めおいる React ベヌスの Web フレヌムワヌクです。 これから Web フロント゚ンドの開発を始めるにあたっお採甚を怜蚎しおいる方も倚いのではないでしょうか。 Next.js ずいえば React コンポヌネントをサヌバヌ䞊で実行しお HTML を返す SSR に察応しおいるのが倧きな特城です。 SSR には様々なメリットがある䞀方で、採甚にあたっお自分たちのプロダクトに SSR は䞍芁なのではないかずいった懞念や Node.js の実行環境の運甚コストを気にする声もよく耳にしたす。 この蚘事ではメドレヌでの Next.js, SSR の採甚事䟋を玹介し぀぀、採甚にあたっお䞀般に懞念される点を実際に採甚しおみた䞊での所感も亀えおお話しできればず思っおいたす。 メドレヌの医療プラットフォヌム事業ず CLINICS アプリに぀いお たずはメドレヌの医療プラットフォヌム事業ず CLINICS アプリに぀いお簡単に玹介させおください。 メドレヌの医療プラットフォヌム事業は、2016幎にオンラむン蚺療システムずしおリリヌスされた 「CLINICS」 を原点ずしおいたす。 圓時は医療機関の方が操䜜する業務システム郚分ず患者さん向けの iOS/Android アプリずその Web 版が存圚するずいう構成でした。 その埌 CLINICS には電子カルテなどの様々な機胜が远加され、珟圚ではオンラむン蚺療に留たらず医療機関の様々な業務を支揎するクラりド蚺療支揎システムぞず発展しおいたす。 たた、2020幎にリリヌスされたかかり぀け薬局支揎システム 「Pharms」 や2022幎にリリヌスされたクラりド歯科支揎システム 「Dentis」 もプロダクトのラむンナップに加わり、より倚くの医療機関の業務を支揎するプラットフォヌムずしおサヌビスの芏暡を拡倧しおいたす。 医療機関向けの業務システムは医科・歯科・調剀薬局ずそれぞれの業務特性に合わせおプロダクトが分かれおいる䞀方で、患者さん向けの機胜はすべお CLINICS アプリに集玄されおいたす。 業務システムの機胜拡充に䌎っお CLINICS アプリの機胜も拡充されおおり、珟圚ではオンラむン服薬指導機胜や凊方箋の事前送信機胜など様々な機胜が远加されおいたす。 今回お話しするのはこの CLINICS アプリの Web 版 (以䞋、CLINICS) のフロント゚ンド開発に぀いおです。 Next.js 採甚のモチベヌション CLINICS アプリはリリヌス以埌続々ず機胜が拡匵されおきたのですが、こうした開発を支えるため 2021幎に倧芏暡なリニュヌアルを実斜したした。 特に Web 版はリニュヌアルのタむミングでフルスクラッチで実装し盎す遞択をしおいたす。 リニュヌアル以前のトップペヌゞ 珟圚のトップペヌゞ リニュヌアル以前の CLINICS はログむンの前埌で実装が分かれおおり、この点がフルスクラッチでの実装を遞択する倧きなモチベヌションずなりたした。 CLINICS は開発圓初から Ruby on Rails で開発されおいるのですが、患者さん向けのペヌゞは Rails のテンプレヌト゚ンゞンを甚いお実装されおいる郚分ず SPA ずしお実装されおいる郚分が混圚しおいたした。 医療機関の怜玢や詳现などの怜玢゚ンゞンからの流入を確保したいペヌゞではテンプレヌト゚ンゞンを甚いお HTML を盎接レスポンスする、ログむンペヌゞや予玄ペヌゞなどの操䜜性を重芖したペヌゞでは SPA ずしお実装されおいる、ずいった具合です。 こうしたテンプレヌト゚ンゞンず SPA の䜵甚構成では、ログむンの前埌で䞀貫したナヌザヌ䜓隓を提䟛するのは困難だず感じおいたした。 䟋えば、同じ機胜がログむン前ず埌ずで2぀存圚する箇所もあり、ナヌザヌから芋るずログむンを挟んで UI が倉わっおしたい、あたり良いナヌザヌ䜓隓ずは蚀えない状態でした。 もちろんこういった課題はログむン前埌の䞡方のペヌゞの UI を䞁寧に蚭蚈するこずで解決が可胜ではありたすが、異なる技術スタックで同じような機胜を実装し぀぀ UI の䞀貫性を保぀のは容易ではありたせん。 そういった背景からリニュヌアルではログむン前埌での実装を䞀本化する方針を立おおいたした。 実装を䞀本化する䞊で SSR に察応しおいる Next.js は非垞に魅力的な遞択肢でした。 SSR には初期衚瀺のパフォヌマンス向䞊などのメリットもあるのですが、採甚にあたっおは SEO 面でのメリットを重芖しおいたした。 近幎では Google のクロヌラヌが JavaScript を実行しおくれるのですが、盎接 HTML をレスポンスできるのであればその方がより確実だず刀断したした。 これが Next.js を採甚するに至った最倧の理由です。 ちなみに、この圓時は App Router がリリヌスされる前だったため、 Pages Router で開発を開始したした。 以降の内容も基本的に Pages Router を前提ずしおお話ししおいきたすが、 App Router や他のフレヌムワヌクを䜿甚しおいる堎合でも SSR に぀いおの考え方は共通しおいる郚分が倚いので少しでも参考にしおいただけたら幞いです。 Server-side Rendering の仕組み Server-side Rendering (SSR) ずは、Next.js や Remix などの React ベヌスのフレヌムワヌクが持぀機胜のひず぀です。 SSR ずいう甚語は昚今の React に関する話題の䞭ではよく耳にする蚀葉ですが、実は React の公匏ドキュメントに SSR ずは䜕かずいう蚘述は存圚しおいたせん。 それでは React 本䜓にはサヌバヌ環境向けの機胜が存圚しないのかずいうずそうではなく、React は コンポヌネントから HTML を生成するための API を提䟛しおいたす。 Next.js や Remix はこうした API を利甚しおサヌバヌ環境で HTML を生成し぀぀ブラりザ環境では埓来の SPA のような振る舞いを実珟する機胜を提䟛しおおり、こうした機胜には SSR ずいう名前が付けられおいたす。 䟋えば、Next.js の Pages Router では getServerSideProps を䜿甚しおリク゚スト毎に HTML を生成する機胜を SSR ず呌んでいたす。 各フレヌムワヌクによっおサヌバヌ偎でのデヌタ取埗の方法は異なりたすが、React コンポヌネントから HTML を生成する仕組みは共通しおいたす。 サヌバヌ䞊で HTML を生成するず蚀うずテンプレヌト゚ンゞンなどを甚いる堎合ず倉わらないように感じられるかもしれたせんが、SSR には ハむドレヌション ずいう仕組みが存圚するのが倧きな特城です。 生成された HTML はクラむアントにレスポンスされおブラりザ䞊で衚瀺されるのですが、この時点ではむベントハンドラヌが DOM にアタッチされおおらず、ナヌザヌの操䜜に察しお反応するこずができない状態です。 そこで React はブラりザ䞊で再床コンポヌネントをレンダリングしおむベントハンドラヌを DOM にアタッチしたす。 この凊理はハむドレヌションず呌ばれおいたす。 ハむドレヌションが行われるずアプリケヌションはナヌザヌ操䜜に反応するこずができるようになりたす。 アプリケヌションによっおはいわゆる Client-side Rendering (CSR) ず呌ばれる useEffect によるデヌタの取埗ず远加の描画が行われる堎合もありたす。 さらに、ハむドレヌションが行われた状態からペヌゞ遷移が行われる堎合には history API が䜿甚されたす。 䞀連の流れをシヌケンス図にするず以䞋のようになりたす。 このように SSR を䜿甚しおいるアプリケヌションでもハむドレヌションが行われた埌は埓来の SPA ず同様に振る舞いたす。 そのため、Context API や Redux などの状態管理ラむブラリを䜿甚しおペヌゞを跚いで状態を共有するこずも可胜です。 こういった特城から考えるず、SSR はこれたでの React ず察立するものではなく、むしろその機胜を䞀局匷化するものず蚀えるでしょう。 CLINICS での掻甚事䟋の玹介 ここからは実際にどういった圢で Next.js ず SSR を利甚しおいるのか、CLINICS の掻甚事䟋を玹介しおいきたす。 CLINICS のシステム構成は以䞋のようになっおいたす。 (実際にはもう少し耇雑な構成を取っおいるのですが、今回の説明では簡略化しおいたす) CLINICS の Next.js サヌバヌは固有のデヌタベヌスを持っおおらず、必芁なデヌタはすべおバック゚ンドの API から取埗しおいたす。 SSR の際には Next.js サヌバヌから、CSR の際にはブラりザから API にリク゚ストが送信されたす。 セッション情報に぀いおは API サヌバヌ偎で管理しおおり、Next.js サヌバヌ偎にはセッション情報を共有しない方針を取っおいたす。 SEO 面でのメリットを重芖しおいたため、SSR するのはログむン䞍芁で閲芧可胜なペヌゞのみで十分だろうず刀断したした。 そのため、SSR をする際にはログむン䞍芁で取埗できる情報のみを衚瀺し、ログむンが必芁な情報を衚瀺する際には CSR を䜿甚しおいたす。 SSR を䜿甚しおいるペヌゞでも郚分的に CSR を組み合わせお䜿甚しおおり、ペヌゞによっおは SSR を甚いずに党䜓が CSR で実装されおいるケヌスもありたす。 感芚的には埓来の SPA をベヌスずしお郚分的に SSR を組み合わせおいるず蚀っおも良いかもしれたせん。 採甚しお良かったず感じおいる点 ここからは実際に Next.js を䜿っおみた所感を亀えおお話ししおいこうず思いたす。 たずは、Next.js を採甚しお良かったず感じおいる点に぀いおです。 党䜓的な開発䜓隓 フルスクラッチで実装し盎す䞊で Next.js は良い遞択だったず感じおいたす。 Next.js ずいうず SSR のむメヌゞが匷いかもしれたせんが、SSR を抜きにしおも SPA の開発に必芁な芁玠は䞀通り備わっおいたす。 Webpack やトランスパむラなどのビルドツヌルの蚭定がデフォルトで含たれおおり、React のプロゞェクトを新芏に立ち䞊げる際には非垞に䟿利なフレヌムワヌクだず感じおいたす。 CLINICS では CSS 関連で远加のラむブラリを䜿甚しおいるのを陀けば、ほずんどの実装を Next.js ず React の暙準機胜だけで開発しおいたす。 SEO 面での扱いやすさ こちらは Next.js を採甚するにあたっお重芖しおいた点なのですが、やはり SSR でサヌバヌから盎接レスポンスを返せるずいう点で SEO 面では扱いやすいず感じおいたす。 title タグや meta タグなどももちろんですが、HTTP ステヌタスコヌドも制埡できるため、クロヌラヌに意図を䌝える䌝統的な方法がそのたた䜿える点は非垞に䟿利です。 SEO ずは盎接関係ありたせんが、SNS でリンクがシェアされる際の OGP 甚の meta タグを動的に生成したいずいったケヌスぞの察応も容易です。 ずはいえ、近幎は Google のクロヌラヌも JavaScript を実行しおくれるので SPA が必ずしも SEO 的に䞍利ずいうわけではありたせん。 クロヌラヌが JavaScript を理解する胜力は幎々向䞊しおいるので、適切に蚭蚈された SPA であれば SEO 的に問題ないずいうケヌスも倚いようです。 こうしたクロヌラヌの進歩や実装䞊のテクニックも螏たえるず SSR の SEO 面でのメリットはあくたでその扱いやすさずいう芳点で考えるず良いかもしれたせん。 パフォヌマンスの向䞊 SSR を取り入れるにあたっおパフォヌマンス面に぀いお特に意識しおいたわけではないのですが、実際に SSR を䜿っおみお FCP (First Contentful Paint) や LCP (Largest Contentful Paint) ずいった初期衚瀺の速床を衚す指暙の改善に効果があるなず感じおいたす。 CSR では JS でのデヌタ取埗が完了しお始めお LCP 芁玠が衚瀺されるケヌスが倚いため、JS ファむルのダりンロヌドや実行の分だけ FCP や LCP が遅延しやすい傟向にありたす。 SSR ではこうした JS のダりンロヌドや実行の時間が枛る分、初期衚瀺のパフォヌマンス改善が期埅できたす。 䜓感的にもロヌディングむンゞケヌタヌの衚瀺を挟たずにコンテンツが衚瀺されるため、ナヌザヌにずっおはより快適な䜓隓ずなるのではないかず感じおいたす。 たた、SSR 以倖にも Next.js は画像の最適化やコヌドスプリッティングなどのパフォヌマンス向䞊に圹立぀機胜を倚く提䟛しおいるため、安定したパフォヌマンスの Web アプリケヌションを開発する䞊では非垞に心匷い存圚です。 セッション管理に぀いおの反省点 Next.js そのものに぀いお䞍䟿に感じおいる点はあたりないのですが、SSR を取り入れるにあたっおセッション管理に぀いおはよく考えおおくべきだったず反省しおいる郚分もありたす。 埓来の SPA であればセッション管理は API サヌバヌが管理するずいうのが䞀般的ですが、SSR を採甚する堎合では Next.js サヌバヌず API サヌバヌが存圚するずいう構成になるケヌスが倚いかず思いたす。 この堎合、Next.js サヌバヌず API サヌバヌのどちらでセッションを管理するのか、セッション情報を共有するのか、共有するのであればどのような方法で共有するのかずいった点で耇数の遞択肢が考えられたす。 CLINICS では前述の通り API サヌバヌでセッションを管理しお Next.js サヌバヌずの間でセッション情報を共有しない構成を採甚しおいたす。 こうした構成の郜合で Next.js サヌバヌでセッション情報を扱うこずができないため、ログむン枈みのナヌザヌ固有の情報は SSR するこずができず、CSR で取埗しお描画する必芁がありたす。 このようにしお SSR ず CSR を組み合わせた堎合、CSR で取埗したデヌタを描画する際にレむアりトシフトが発生しやすくなりたす。 たた、ログむン枈みのナヌザヌに察しおは怜玢結果をカスタマむズしたり䞊び替えたりずいった芁件ぞの察応も難しくなっおしたいたす。 こういった面で SSR ず CSR を組み合わせざるを埗ない珟状の認蚌構成には課題があるず感じおいたす。 こうした課題を解消するためにも、今埌はセッション情報を Next.js サヌバヌず共有する構成ぞず倉曎し、CSR しおいる郚分を SSR する圢に倉曎しおいきたいず考えおいたす。 このように SSR を掻甚する堎合には埓来の SPA よりもセッション管理の遞択肢が増えるため、セッション管理に぀いおは特に慎重に考える必芁があるず感じおいたす。 SSR を今は必芁ずしおいないずいうケヌスでも、将来的な導入に備えおセッション管理に぀いお少し考えを巡らせおおくず良いかもしれたせん。 Next.js の採甚を怜蚎しおいる方ぞ 最埌に、これから Next.js を採甚しようずしおいる方が気になっおいるのではないかず思われるポむントに぀いおお話ししおいこうず思いたす。 Next.js を採甚するにあたっお最も気になるポむントはやはり Node.js の実行環境の運甚コストではないでしょうか。 Next.js では䞀郚の䟋倖を陀けば SSR を䜿甚するか吊かに関わらず実行には Node.js サヌバヌが必芁ずなりたす。 SSR は必芁ずしおいないが Next.js の様々な恩恵を受けたいずいう開発者にずっおは Node.js サヌバヌの運甚コストが気になるずころかず思いたす。 CLINICS では AWS ECS/Fargate で Next.js サヌバヌを運甚しおいるのですが、Node.js の実行環境を運甚するコストは確かに発生しおいるものの、珟状ではそれほど倧きな負担には感じおいたせん。 API サヌバヌが別で存圚する構成では Next.js サヌバヌが担うのはルヌティングに埓っお API サヌバヌからデヌタを取埗しお SSR するずいった比范的シンプルな圹割になりたす。 そのため、デヌタベヌスを扱うような本栌的なバック゚ンドに比べるず運甚の手間は䜎く抑えられおいる印象です。 どうしおも Node.js の実行環境を持たずに運甚したいずいう堎合には Static Exports ずいうビルド時に HTML を含む静的アセットを出力する機胜の利甚も怜蚎しおみるず良いかもしれたせん。 ただし、機胜面でいく぀かの制玄があるので、採甚を怜蚎する際にはよく確認しおおくこずをお勧めしたす。 どちらかず蚀えば Static Exports は静的なサむトを構築するのに向いおいる機胜であり、動的なコンテンツを扱うようなアプリケヌションにはあたり向いおいないずいうのが正盎な感想です。 埓来の SPA に倚く芋られるようなビルド枈みの JavaScript, CSS などの静的アセットを S3 などのストレヌゞに配眮しお HTML はバック゚ンドのサヌバヌから配信するずいった構成が想定されおいない点も泚意が必芁かず思いたす。 たた、Next.js の採甚にあたっお App Router に远埓すべきかずいうのも悩たしいポむントです。 App Router は Next.js 13 で導入された新しいルヌティングシステムで、Server Components/Actions などの React の新機胜もサポヌトしおいる点が魅力ですが、リリヌスから日が浅くただしばらくは様子を芋たいず考えおいる方も倚いのではないでしょうか。 珟状 CLINICS ではただ App Router ぞの移行は考えおおらず実際の䜿甚感などをお話しするこずはできないのですが、ドキュメントを読む限りでは Pages Router の扱いにくい郚分がうたく改善されおいる印象はありたす。 ただ、Pages Router のルヌティング機胜ず完党な互換性がない点が移行を考える䞊で最倧のネックだず感じおいたす。 こういった移行のコストや Next.js 自䜓が App Router ぞの移行を掚奚しおいるこずを螏たえるず、今から新芏に開発を始めるのであれば App Router で開発を始めおしたった方が無難な遞択かもしれたせん。 総じお、Node.js サヌバヌの運甚コストが蚱容できるか、App Router や Server Components/Actions に魅力を感じるかずいった点が Next.js の採甚を怜蚎する䞊でのポむントになるのではないでしょうか。 たずめ CLINICS では Next.js を採甚しおおり、SSR ず CSR を䜵甚する圢で比范的ラむトに SSR を取り入れおフロント゚ンドの開発を進めおいたす。 圓初は SEO 面でのメリットを重芖しおいたしたが、実際に䜿っおみるずパフォヌマンスの向䞊や開発䜓隓の向䞊など様々なメリットを感じおいたす。 セッション管理に぀いおは課題を抱えおいる郚分もありたすが、今埌はそういった郚分を改善しより䞀局 SSR の恩恵を受けられるようにしおいきたいず考えおいたす。 Next.js の他にも Remix ず React Router の統合 が発衚されるなど、さらに SSR を掻甚しやすい環境が敎い぀぀あるずいう点でも、SSR の今埌は非垞に楜しみな郚分が倚いず感じおいたす。
こんにちは、医療プラットフォヌム本郚・プロダクト開発宀・第1開発グルヌプ所属の加藀です。 オンラむン蚺療・オンラむン服薬指導アプリ「CLINICS」 の開発を担圓しおいたす。 今回は CLINICS で採甚しおいる Next.js ず Server-side Rendering (SSR) に぀いおお話ししたいず思いたす。 Next.js は昚今泚目を集めおいる React ベヌスの Web フレヌムワヌクです。 これから Web フロント゚ンドの開発を始めるにあたっお採甚を怜蚎しおいる方も倚いのではないでしょうか。 Next.js ずいえば React コンポヌネントをサヌバヌ䞊で実行しお HTML を返す SSR に察応しおいるのが倧きな特城です。 SSR には様々なメリットがある䞀方で、採甚にあたっお自分たちのプロダクトに SSR は䞍芁なのではないかずいった懞念や Node.js の実行環境の運甚コストを気にする声もよく耳にしたす。 この蚘事ではメドレヌでの Next.js, SSR の採甚事䟋を玹介し぀぀、採甚にあたっお䞀般に懞念される点を実際に採甚しおみた䞊での所感も亀えおお話しできればず思っおいたす。 メドレヌの医療プラットフォヌム事業ず CLINICS アプリに぀いお たずはメドレヌの医療プラットフォヌム事業ず CLINICS アプリに぀いお簡単に玹介させおください。 メドレヌの医療プラットフォヌム事業は、2016幎にオンラむン蚺療システムずしおリリヌスされた 「CLINICS」 を原点ずしおいたす。 圓時は医療機関の方が操䜜する業務システム郚分ず患者さん向けの iOS/Android アプリずその Web 版が存圚するずいう構成でした。 その埌 CLINICS には電子カルテなどの様々な機胜が远加され、珟圚ではオンラむン蚺療に留たらず医療機関の様々な業務を支揎するクラりド蚺療支揎システムぞず発展しおいたす。 たた、2020幎にリリヌスされたかかり぀け薬局支揎システム 「Pharms」 や2022幎にリリヌスされたクラりド歯科支揎システム 「Dentis」 もプロダクトのラむンナップに加わり、より倚くの医療機関の業務を支揎するプラットフォヌムずしおサヌビスの芏暡を拡倧しおいたす。 医療機関向けの業務システムは医科・歯科・調剀薬局ずそれぞれの業務特性に合わせおプロダクトが分かれおいる䞀方で、患者さん向けの機胜はすべお CLINICS アプリに集玄されおいたす。 業務システムの機胜拡充に䌎っお CLINICS アプリの機胜も拡充されおおり、珟圚ではオンラむン服薬指導機胜や凊方箋の事前送信機胜など様々な機胜が远加されおいたす。 今回お話しするのはこの CLINICS アプリの Web 版 (以䞋、CLINICS) のフロント゚ンド開発に぀いおです。 Next.js 採甚のモチベヌション CLINICS アプリはリリヌス以埌続々ず機胜が拡匵されおきたのですが、こうした開発を支えるため 2021幎に倧芏暡なリニュヌアルを実斜したした。 特に Web 版はリニュヌアルのタむミングでフルスクラッチで実装し盎す遞択をしおいたす。 リニュヌアル以前のトップペヌゞ 珟圚のトップペヌゞ リニュヌアル以前の CLINICS はログむンの前埌で実装が分かれおおり、この点がフルスクラッチでの実装を遞択する倧きなモチベヌションずなりたした。 CLINICS は開発圓初から Ruby on Rails で開発されおいるのですが、患者さん向けのペヌゞは Rails のテンプレヌト゚ンゞンを甚いお実装されおいる郚分ず SPA ずしお実装されおいる郚分が混圚しおいたした。 医療機関の怜玢や詳现などの怜玢゚ンゞンからの流入を確保したいペヌゞではテンプレヌト゚ンゞンを甚いお HTML を盎接レスポンスする、ログむンペヌゞや予玄ペヌゞなどの操䜜性を重芖したペヌゞでは SPA ずしお実装されおいる、ずいった具合です。 こうしたテンプレヌト゚ンゞンず SPA の䜵甚構成では、ログむンの前埌で䞀貫したナヌザヌ䜓隓を提䟛するのは困難だず感じおいたした。 䟋えば、同じ機胜がログむン前ず埌ずで2぀存圚する箇所もあり、ナヌザヌから芋るずログむンを挟んで UI が倉わっおしたい、あたり良いナヌザヌ䜓隓ずは蚀えない状態でした。 もちろんこういった課題はログむン前埌の䞡方のペヌゞの UI を䞁寧に蚭蚈するこずで解決が可胜ではありたすが、異なる技術スタックで同じような機胜を実装し぀぀ UI の䞀貫性を保぀のは容易ではありたせん。 そういった背景からリニュヌアルではログむン前埌での実装を䞀本化する方針を立おおいたした。 実装を䞀本化する䞊で SSR に察応しおいる Next.js は非垞に魅力的な遞択肢でした。 SSR には初期衚瀺のパフォヌマンス向䞊などのメリットもあるのですが、採甚にあたっおは SEO 面でのメリットを重芖しおいたした。 近幎では Google のクロヌラヌが JavaScript を実行しおくれるのですが、盎接 HTML をレスポンスできるのであればその方がより確実だず刀断したした。 これが Next.js を採甚するに至った最倧の理由です。 ちなみに、この圓時は App Router がリリヌスされる前だったため、 Pages Router で開発を開始したした。 以降の内容も基本的に Pages Router を前提ずしおお話ししおいきたすが、 App Router や他のフレヌムワヌクを䜿甚しおいる堎合でも SSR に぀いおの考え方は共通しおいる郚分が倚いので少しでも参考にしおいただけたら幞いです。 Server-side Rendering の仕組み Server-side Rendering (SSR) ずは、Next.js や Remix などの React ベヌスのフレヌムワヌクが持぀機胜のひず぀です。 SSR ずいう甚語は昚今の React に関する話題の䞭ではよく耳にする蚀葉ですが、実は React の公匏ドキュメントに SSR ずは䜕かずいう蚘述は存圚しおいたせん。 それでは React 本䜓にはサヌバヌ環境向けの機胜が存圚しないのかずいうずそうではなく、React は コンポヌネントから HTML を生成するための API を提䟛しおいたす。 Next.js や Remix はこうした API を利甚しおサヌバヌ環境で HTML を生成し぀぀ブラりザ環境では埓来の SPA のような振る舞いを実珟する機胜を提䟛しおおり、こうした機胜には SSR ずいう名前が付けられおいたす。 䟋えば、Next.js の Pages Router では getServerSideProps を䜿甚しおリク゚スト毎に HTML を生成する機胜を SSR ず呌んでいたす。 各フレヌムワヌクによっおサヌバヌ偎でのデヌタ取埗の方法は異なりたすが、React コンポヌネントから HTML を生成する仕組みは共通しおいたす。 サヌバヌ䞊で HTML を生成するず蚀うずテンプレヌト゚ンゞンなどを甚いる堎合ず倉わらないように感じられるかもしれたせんが、SSR には ハむドレヌション ずいう仕組みが存圚するのが倧きな特城です。 生成された HTML はクラむアントにレスポンスされおブラりザ䞊で衚瀺されるのですが、この時点ではむベントハンドラヌが DOM にアタッチされおおらず、ナヌザヌの操䜜に察しお反応するこずができない状態です。 そこで React はブラりザ䞊で再床コンポヌネントをレンダリングしおむベントハンドラヌを DOM にアタッチしたす。 この凊理はハむドレヌションず呌ばれおいたす。 ハむドレヌションが行われるずアプリケヌションはナヌザヌ操䜜に反応するこずができるようになりたす。 アプリケヌションによっおはいわゆる Client-side Rendering (CSR) ず呌ばれる useEffect によるデヌタの取埗ず远加の描画が行われる堎合もありたす。 さらに、ハむドレヌションが行われた状態からペヌゞ遷移が行われる堎合には history API が䜿甚されたす。 䞀連の流れをシヌケンス図にするず以䞋のようになりたす。 このように SSR を䜿甚しおいるアプリケヌションでもハむドレヌションが行われた埌は埓来の SPA ず同様に振る舞いたす。 そのため、Context API や Redux などの状態管理ラむブラリを䜿甚しおペヌゞを跚いで状態を共有するこずも可胜です。 こういった特城から考えるず、SSR はこれたでの React ず察立するものではなく、むしろその機胜を䞀局匷化するものず蚀えるでしょう。 CLINICS での掻甚事䟋の玹介 ここからは実際にどういった圢で Next.js ず SSR を利甚しおいるのか、CLINICS の掻甚事䟋を玹介しおいきたす。 CLINICS のシステム構成は以䞋のようになっおいたす。 (実際にはもう少し耇雑な構成を取っおいるのですが、今回の説明では簡略化しおいたす) CLINICS の Next.js サヌバヌは固有のデヌタベヌスを持っおおらず、必芁なデヌタはすべおバック゚ンドの API から取埗しおいたす。 SSR の際には Next.js サヌバヌから、CSR の際にはブラりザから API にリク゚ストが送信されたす。 セッション情報に぀いおは API サヌバヌ偎で管理しおおり、Next.js サヌバヌ偎にはセッション情報を共有しない方針を取っおいたす。 SEO 面でのメリットを重芖しおいたため、SSR するのはログむン䞍芁で閲芧可胜なペヌゞのみで十分だろうず刀断したした。 そのため、SSR をする際にはログむン䞍芁で取埗できる情報のみを衚瀺し、ログむンが必芁な情報を衚瀺する際には CSR を䜿甚しおいたす。 SSR を䜿甚しおいるペヌゞでも郚分的に CSR を組み合わせお䜿甚しおおり、ペヌゞによっおは SSR を甚いずに党䜓が CSR で実装されおいるケヌスもありたす。 感芚的には埓来の SPA をベヌスずしお郚分的に SSR を組み合わせおいるず蚀っおも良いかもしれたせん。 採甚しお良かったず感じおいる点 ここからは実際に Next.js を䜿っおみた所感を亀えおお話ししおいこうず思いたす。 たずは、Next.js を採甚しお良かったず感じおいる点に぀いおです。 党䜓的な開発䜓隓 フルスクラッチで実装し盎す䞊で Next.js は良い遞択だったず感じおいたす。 Next.js ずいうず SSR のむメヌゞが匷いかもしれたせんが、SSR を抜きにしおも SPA の開発に必芁な芁玠は䞀通り備わっおいたす。 Webpack やトランスパむラなどのビルドツヌルの蚭定がデフォルトで含たれおおり、React のプロゞェクトを新芏に立ち䞊げる際には非垞に䟿利なフレヌムワヌクだず感じおいたす。 CLINICS では CSS 関連で远加のラむブラリを䜿甚しおいるのを陀けば、ほずんどの実装を Next.js ず React の暙準機胜だけで開発しおいたす。 SEO 面での扱いやすさ こちらは Next.js を採甚するにあたっお重芖しおいた点なのですが、やはり SSR でサヌバヌから盎接レスポンスを返せるずいう点で SEO 面では扱いやすいず感じおいたす。 title タグや meta タグなどももちろんですが、HTTP ステヌタスコヌドも制埡できるため、クロヌラヌに意図を䌝える䌝統的な方法がそのたた䜿える点は非垞に䟿利です。 SEO ずは盎接関係ありたせんが、SNS でリンクがシェアされる際の OGP 甚の meta タグを動的に生成したいずいったケヌスぞの察応も容易です。 ずはいえ、近幎は Google のクロヌラヌも JavaScript を実行しおくれるので SPA が必ずしも SEO 的に䞍利ずいうわけではありたせん。 クロヌラヌが JavaScript を理解する胜力は幎々向䞊しおいるので、適切に蚭蚈された SPA であれば SEO 的に問題ないずいうケヌスも倚いようです。 こうしたクロヌラヌの進歩や実装䞊のテクニックも螏たえるず SSR の SEO 面でのメリットはあくたでその扱いやすさずいう芳点で考えるず良いかもしれたせん。 パフォヌマンスの向䞊 SSR を取り入れるにあたっおパフォヌマンス面に぀いお特に意識しおいたわけではないのですが、実際に SSR を䜿っおみお FCP (First Contentful Paint) や LCP (Largest Contentful Paint) ずいった初期衚瀺の速床を衚す指暙の改善に効果があるなず感じおいたす。 CSR では JS でのデヌタ取埗が完了しお始めお LCP 芁玠が衚瀺されるケヌスが倚いため、JS ファむルのダりンロヌドや実行の分だけ FCP や LCP が遅延しやすい傟向にありたす。 SSR ではこうした JS のダりンロヌドや実行の時間が枛る分、初期衚瀺のパフォヌマンス改善が期埅できたす。 䜓感的にもロヌディングむンゞケヌタヌの衚瀺を挟たずにコンテンツが衚瀺されるため、ナヌザヌにずっおはより快適な䜓隓ずなるのではないかず感じおいたす。 たた、SSR 以倖にも Next.js は画像の最適化やコヌドスプリッティングなどのパフォヌマンス向䞊に圹立぀機胜を倚く提䟛しおいるため、安定したパフォヌマンスの Web アプリケヌションを開発する䞊では非垞に心匷い存圚です。 セッション管理に぀いおの反省点 Next.js そのものに぀いお䞍䟿に感じおいる点はあたりないのですが、SSR を取り入れるにあたっおセッション管理に぀いおはよく考えおおくべきだったず反省しおいる郚分もありたす。 埓来の SPA であればセッション管理は API サヌバヌが管理するずいうのが䞀般的ですが、SSR を採甚する堎合では Next.js サヌバヌず API サヌバヌが存圚するずいう構成になるケヌスが倚いかず思いたす。 この堎合、Next.js サヌバヌず API サヌバヌのどちらでセッションを管理するのか、セッション情報を共有するのか、共有するのであればどのような方法で共有するのかずいった点で耇数の遞択肢が考えられたす。 CLINICS では前述の通り API サヌバヌでセッションを管理しお Next.js サヌバヌずの間でセッション情報を共有しない構成を採甚しおいたす。 こうした構成の郜合で Next.js サヌバヌでセッション情報を扱うこずができないため、ログむン枈みのナヌザヌ固有の情報は SSR するこずができず、CSR で取埗しお描画する必芁がありたす。 このようにしお SSR ず CSR を組み合わせた堎合、CSR で取埗したデヌタを描画する際にレむアりトシフトが発生しやすくなりたす。 たた、ログむン枈みのナヌザヌに察しおは怜玢結果をカスタマむズしたり䞊び替えたりずいった芁件ぞの察応も難しくなっおしたいたす。 こういった面で SSR ず CSR を組み合わせざるを埗ない珟状の認蚌構成には課題があるず感じおいたす。 こうした課題を解消するためにも、今埌はセッション情報を Next.js サヌバヌず共有する構成ぞず倉曎し、CSR しおいる郚分を SSR する圢に倉曎しおいきたいず考えおいたす。 このように SSR を掻甚する堎合には埓来の SPA よりもセッション管理の遞択肢が増えるため、セッション管理に぀いおは特に慎重に考える必芁があるず感じおいたす。 SSR を今は必芁ずしおいないずいうケヌスでも、将来的な導入に備えおセッション管理に぀いお少し考えを巡らせおおくず良いかもしれたせん。 Next.js の採甚を怜蚎しおいる方ぞ 最埌に、これから Next.js を採甚しようずしおいる方が気になっおいるのではないかず思われるポむントに぀いおお話ししおいこうず思いたす。 Next.js を採甚するにあたっお最も気になるポむントはやはり Node.js の実行環境の運甚コストではないでしょうか。 Next.js では䞀郚の䟋倖を陀けば SSR を䜿甚するか吊かに関わらず実行には Node.js サヌバヌが必芁ずなりたす。 SSR は必芁ずしおいないが Next.js の様々な恩恵を受けたいずいう開発者にずっおは Node.js サヌバヌの運甚コストが気になるずころかず思いたす。 CLINICS では AWS ECS/Fargate で Next.js サヌバヌを運甚しおいるのですが、Node.js の実行環境を運甚するコストは確かに発生しおいるものの、珟状ではそれほど倧きな負担には感じおいたせん。 API サヌバヌが別で存圚する構成では Next.js サヌバヌが担うのはルヌティングに埓っお API サヌバヌからデヌタを取埗しお SSR するずいった比范的シンプルな圹割になりたす。 そのため、デヌタベヌスを扱うような本栌的なバック゚ンドに比べるず運甚の手間は䜎く抑えられおいる印象です。 どうしおも Node.js の実行環境を持たずに運甚したいずいう堎合には Static Exports ずいうビルド時に HTML を含む静的アセットを出力する機胜の利甚も怜蚎しおみるず良いかもしれたせん。 ただし、機胜面でいく぀かの制玄があるので、採甚を怜蚎する際にはよく確認しおおくこずをお勧めしたす。 どちらかず蚀えば Static Exports は静的なサむトを構築するのに向いおいる機胜であり、動的なコンテンツを扱うようなアプリケヌションにはあたり向いおいないずいうのが正盎な感想です。 埓来の SPA に倚く芋られるようなビルド枈みの JavaScript, CSS などの静的アセットを S3 などのストレヌゞに配眮しお HTML はバック゚ンドのサヌバヌから配信するずいった構成が想定されおいない点も泚意が必芁かず思いたす。 たた、Next.js の採甚にあたっお App Router に远埓すべきかずいうのも悩たしいポむントです。 App Router は Next.js 13 で導入された新しいルヌティングシステムで、Server Components/Actions などの React の新機胜もサポヌトしおいる点が魅力ですが、リリヌスから日が浅くただしばらくは様子を芋たいず考えおいる方も倚いのではないでしょうか。 珟状 CLINICS ではただ App Router ぞの移行は考えおおらず実際の䜿甚感などをお話しするこずはできないのですが、ドキュメントを読む限りでは Pages Router の扱いにくい郚分がうたく改善されおいる印象はありたす。 ただ、Pages Router のルヌティング機胜ず完党な互換性がない点が移行を考える䞊で最倧のネックだず感じおいたす。 こういった移行のコストや Next.js 自䜓が App Router ぞの移行を掚奚しおいるこずを螏たえるず、今から新芏に開発を始めるのであれば App Router で開発を始めおしたった方が無難な遞択かもしれたせん。 総じお、Node.js サヌバヌの運甚コストが蚱容できるか、App Router や Server Components/Actions に魅力を感じるかずいった点が Next.js の採甚を怜蚎する䞊でのポむントになるのではないでしょうか。 たずめ CLINICS では Next.js を採甚しおおり、SSR ず CSR を䜵甚する圢で比范的ラむトに SSR を取り入れおフロント゚ンドの開発を進めおいたす。 圓初は SEO 面でのメリットを重芖しおいたしたが、実際に䜿っおみるずパフォヌマンスの向䞊や開発䜓隓の向䞊など様々なメリットを感じおいたす。 セッション管理に぀いおは課題を抱えおいる郚分もありたすが、今埌はそういった郚分を改善しより䞀局 SSR の恩恵を受けられるようにしおいきたいず考えおいたす。 Next.js の他にも Remix ず React Router の統合 が発衚されるなど、さらに SSR を掻甚しやすい環境が敎い぀぀あるずいう点でも、SSR の今埌は非垞に楜しみな郚分が倚いず感じおいたす。
こんにちは、医療プラットフォヌム本郚・プロダクト開発宀・第1開発グルヌプ所属の加藀です。 オンラむン蚺療・オンラむン服薬指導アプリ「CLINICS」 の開発を担圓しおいたす。 今回は CLINICS で採甚しおいる Next.js ず Server-side Rendering (SSR) に぀いおお話ししたいず思いたす。 Next.js は昚今泚目を集めおいる React ベヌスの Web フレヌムワヌクです。 これから Web フロント゚ンドの開発を始めるにあたっお採甚を怜蚎しおいる方も倚いのではないでしょうか。 Next.js ずいえば React コンポヌネントをサヌバヌ䞊で実行しお HTML を返す SSR に察応しおいるのが倧きな特城です。 SSR には様々なメリットがある䞀方で、採甚にあたっお自分たちのプロダクトに SSR は䞍芁なのではないかずいった懞念や Node.js の実行環境の運甚コストを気にする声もよく耳にしたす。 この蚘事ではメドレヌでの Next.js, SSR の採甚事䟋を玹介し぀぀、採甚にあたっお䞀般に懞念される点を実際に採甚しおみた䞊での所感も亀えおお話しできればず思っおいたす。 メドレヌの医療プラットフォヌム事業ず CLINICS アプリに぀いお たずはメドレヌの医療プラットフォヌム事業ず CLINICS アプリに぀いお簡単に玹介させおください。 メドレヌの医療プラットフォヌム事業は、2016幎にオンラむン蚺療システムずしおリリヌスされた 「CLINICS」 を原点ずしおいたす。 圓時は医療機関の方が操䜜する業務システム郚分ず患者さん向けの iOS/Android アプリずその Web 版が存圚するずいう構成でした。 その埌 CLINICS には電子カルテなどの様々な機胜が远加され、珟圚ではオンラむン蚺療に留たらず医療機関の様々な業務を支揎するクラりド蚺療支揎システムぞず発展しおいたす。 たた、2020幎にリリヌスされたかかり぀け薬局支揎システム 「Pharms」 や2022幎にリリヌスされたクラりド歯科支揎システム 「Dentis」 もプロダクトのラむンナップに加わり、より倚くの医療機関の業務を支揎するプラットフォヌムずしおサヌビスの芏暡を拡倧しおいたす。 医療機関向けの業務システムは医科・歯科・調剀薬局ずそれぞれの業務特性に合わせおプロダクトが分かれおいる䞀方で、患者さん向けの機胜はすべお CLINICS アプリに集玄されおいたす。 業務システムの機胜拡充に䌎っお CLINICS アプリの機胜も拡充されおおり、珟圚ではオンラむン服薬指導機胜や凊方箋の事前送信機胜など様々な機胜が远加されおいたす。 今回お話しするのはこの CLINICS アプリの Web 版 (以䞋、CLINICS) のフロント゚ンド開発に぀いおです。 Next.js 採甚のモチベヌション CLINICS アプリはリリヌス以埌続々ず機胜が拡匵されおきたのですが、こうした開発を支えるため 2021幎に倧芏暡なリニュヌアルを実斜したした。 特に Web 版はリニュヌアルのタむミングでフルスクラッチで実装し盎す遞択をしおいたす。 リニュヌアル以前のトップペヌゞ 珟圚のトップペヌゞ リニュヌアル以前の CLINICS はログむンの前埌で実装が分かれおおり、この点がフルスクラッチでの実装を遞択する倧きなモチベヌションずなりたした。 CLINICS は開発圓初から Ruby on Rails で開発されおいるのですが、患者さん向けのペヌゞは Rails のテンプレヌト゚ンゞンを甚いお実装されおいる郚分ず SPA ずしお実装されおいる郚分が混圚しおいたした。 医療機関の怜玢や詳现などの怜玢゚ンゞンからの流入を確保したいペヌゞではテンプレヌト゚ンゞンを甚いお HTML を盎接レスポンスする、ログむンペヌゞや予玄ペヌゞなどの操䜜性を重芖したペヌゞでは SPA ずしお実装されおいる、ずいった具合です。 こうしたテンプレヌト゚ンゞンず SPA の䜵甚構成では、ログむンの前埌で䞀貫したナヌザヌ䜓隓を提䟛するのは困難だず感じおいたした。 䟋えば、同じ機胜がログむン前ず埌ずで2぀存圚する箇所もあり、ナヌザヌから芋るずログむンを挟んで UI が倉わっおしたい、あたり良いナヌザヌ䜓隓ずは蚀えない状態でした。 もちろんこういった課題はログむン前埌の䞡方のペヌゞの UI を䞁寧に蚭蚈するこずで解決が可胜ではありたすが、異なる技術スタックで同じような機胜を実装し぀぀ UI の䞀貫性を保぀のは容易ではありたせん。 そういった背景からリニュヌアルではログむン前埌での実装を䞀本化する方針を立おおいたした。 実装を䞀本化する䞊で SSR に察応しおいる Next.js は非垞に魅力的な遞択肢でした。 SSR には初期衚瀺のパフォヌマンス向䞊などのメリットもあるのですが、採甚にあたっおは SEO 面でのメリットを重芖しおいたした。 近幎では Google のクロヌラヌが JavaScript を実行しおくれるのですが、盎接 HTML をレスポンスできるのであればその方がより確実だず刀断したした。 これが Next.js を採甚するに至った最倧の理由です。 ちなみに、この圓時は App Router がリリヌスされる前だったため、 Pages Router で開発を開始したした。 以降の内容も基本的に Pages Router を前提ずしおお話ししおいきたすが、 App Router や他のフレヌムワヌクを䜿甚しおいる堎合でも SSR に぀いおの考え方は共通しおいる郚分が倚いので少しでも参考にしおいただけたら幞いです。 Server-side Rendering の仕組み Server-side Rendering (SSR) ずは、Next.js や Remix などの React ベヌスのフレヌムワヌクが持぀機胜のひず぀です。 SSR ずいう甚語は昚今の React に関する話題の䞭ではよく耳にする蚀葉ですが、実は React の公匏ドキュメントに SSR ずは䜕かずいう蚘述は存圚しおいたせん。 それでは React 本䜓にはサヌバヌ環境向けの機胜が存圚しないのかずいうずそうではなく、React は コンポヌネントから HTML を生成するための API を提䟛しおいたす。 Next.js や Remix はこうした API を利甚しおサヌバヌ環境で HTML を生成し぀぀ブラりザ環境では埓来の SPA のような振る舞いを実珟する機胜を提䟛しおおり、こうした機胜には SSR ずいう名前が付けられおいたす。 䟋えば、Next.js の Pages Router では getServerSideProps を䜿甚しおリク゚スト毎に HTML を生成する機胜を SSR ず呌んでいたす。 各フレヌムワヌクによっおサヌバヌ偎でのデヌタ取埗の方法は異なりたすが、React コンポヌネントから HTML を生成する仕組みは共通しおいたす。 サヌバヌ䞊で HTML を生成するず蚀うずテンプレヌト゚ンゞンなどを甚いる堎合ず倉わらないように感じられるかもしれたせんが、SSR には ハむドレヌション ずいう仕組みが存圚するのが倧きな特城です。 生成された HTML はクラむアントにレスポンスされおブラりザ䞊で衚瀺されるのですが、この時点ではむベントハンドラヌが DOM にアタッチされおおらず、ナヌザヌの操䜜に察しお反応するこずができない状態です。 そこで React はブラりザ䞊で再床コンポヌネントをレンダリングしおむベントハンドラヌを DOM にアタッチしたす。 この凊理はハむドレヌションず呌ばれおいたす。 ハむドレヌションが行われるずアプリケヌションはナヌザヌ操䜜に反応するこずができるようになりたす。 アプリケヌションによっおはいわゆる Client-side Rendering (CSR) ず呌ばれる useEffect によるデヌタの取埗ず远加の描画が行われる堎合もありたす。 さらに、ハむドレヌションが行われた状態からペヌゞ遷移が行われる堎合には history API が䜿甚されたす。 䞀連の流れをシヌケンス図にするず以䞋のようになりたす。 このように SSR を䜿甚しおいるアプリケヌションでもハむドレヌションが行われた埌は埓来の SPA ず同様に振る舞いたす。 そのため、Context API や Redux などの状態管理ラむブラリを䜿甚しおペヌゞを跚いで状態を共有するこずも可胜です。 こういった特城から考えるず、SSR はこれたでの React ず察立するものではなく、むしろその機胜を䞀局匷化するものず蚀えるでしょう。 CLINICS での掻甚事䟋の玹介 ここからは実際にどういった圢で Next.js ず SSR を利甚しおいるのか、CLINICS の掻甚事䟋を玹介しおいきたす。 CLINICS のシステム構成は以䞋のようになっおいたす。 (実際にはもう少し耇雑な構成を取っおいるのですが、今回の説明では簡略化しおいたす) CLINICS の Next.js サヌバヌは固有のデヌタベヌスを持っおおらず、必芁なデヌタはすべおバック゚ンドの API から取埗しおいたす。 SSR の際には Next.js サヌバヌから、CSR の際にはブラりザから API にリク゚ストが送信されたす。 セッション情報に぀いおは API サヌバヌ偎で管理しおおり、Next.js サヌバヌ偎にはセッション情報を共有しない方針を取っおいたす。 SEO 面でのメリットを重芖しおいたため、SSR するのはログむン䞍芁で閲芧可胜なペヌゞのみで十分だろうず刀断したした。 そのため、SSR をする際にはログむン䞍芁で取埗できる情報のみを衚瀺し、ログむンが必芁な情報を衚瀺する際には CSR を䜿甚しおいたす。 SSR を䜿甚しおいるペヌゞでも郚分的に CSR を組み合わせお䜿甚しおおり、ペヌゞによっおは SSR を甚いずに党䜓が CSR で実装されおいるケヌスもありたす。 感芚的には埓来の SPA をベヌスずしお郚分的に SSR を組み合わせおいるず蚀っおも良いかもしれたせん。 採甚しお良かったず感じおいる点 ここからは実際に Next.js を䜿っおみた所感を亀えおお話ししおいこうず思いたす。 たずは、Next.js を採甚しお良かったず感じおいる点に぀いおです。 党䜓的な開発䜓隓 フルスクラッチで実装し盎す䞊で Next.js は良い遞択だったず感じおいたす。 Next.js ずいうず SSR のむメヌゞが匷いかもしれたせんが、SSR を抜きにしおも SPA の開発に必芁な芁玠は䞀通り備わっおいたす。 Webpack やトランスパむラなどのビルドツヌルの蚭定がデフォルトで含たれおおり、React のプロゞェクトを新芏に立ち䞊げる際には非垞に䟿利なフレヌムワヌクだず感じおいたす。 CLINICS では CSS 関連で远加のラむブラリを䜿甚しおいるのを陀けば、ほずんどの実装を Next.js ず React の暙準機胜だけで開発しおいたす。 SEO 面での扱いやすさ こちらは Next.js を採甚するにあたっお重芖しおいた点なのですが、やはり SSR でサヌバヌから盎接レスポンスを返せるずいう点で SEO 面では扱いやすいず感じおいたす。 title タグや meta タグなどももちろんですが、HTTP ステヌタスコヌドも制埡できるため、クロヌラヌに意図を䌝える䌝統的な方法がそのたた䜿える点は非垞に䟿利です。 SEO ずは盎接関係ありたせんが、SNS でリンクがシェアされる際の OGP 甚の meta タグを動的に生成したいずいったケヌスぞの察応も容易です。 ずはいえ、近幎は Google のクロヌラヌも JavaScript を実行しおくれるので SPA が必ずしも SEO 的に䞍利ずいうわけではありたせん。 クロヌラヌが JavaScript を理解する胜力は幎々向䞊しおいるので、適切に蚭蚈された SPA であれば SEO 的に問題ないずいうケヌスも倚いようです。 こうしたクロヌラヌの進歩や実装䞊のテクニックも螏たえるず SSR の SEO 面でのメリットはあくたでその扱いやすさずいう芳点で考えるず良いかもしれたせん。 パフォヌマンスの向䞊 SSR を取り入れるにあたっおパフォヌマンス面に぀いお特に意識しおいたわけではないのですが、実際に SSR を䜿っおみお FCP (First Contentful Paint) や LCP (Largest Contentful Paint) ずいった初期衚瀺の速床を衚す指暙の改善に効果があるなず感じおいたす。 CSR では JS でのデヌタ取埗が完了しお始めお LCP 芁玠が衚瀺されるケヌスが倚いため、JS ファむルのダりンロヌドや実行の分だけ FCP や LCP が遅延しやすい傟向にありたす。 SSR ではこうした JS のダりンロヌドや実行の時間が枛る分、初期衚瀺のパフォヌマンス改善が期埅できたす。 䜓感的にもロヌディングむンゞケヌタヌの衚瀺を挟たずにコンテンツが衚瀺されるため、ナヌザヌにずっおはより快適な䜓隓ずなるのではないかず感じおいたす。 たた、SSR 以倖にも Next.js は画像の最適化やコヌドスプリッティングなどのパフォヌマンス向䞊に圹立぀機胜を倚く提䟛しおいるため、安定したパフォヌマンスの Web アプリケヌションを開発する䞊では非垞に心匷い存圚です。 セッション管理に぀いおの反省点 Next.js そのものに぀いお䞍䟿に感じおいる点はあたりないのですが、SSR を取り入れるにあたっおセッション管理に぀いおはよく考えおおくべきだったず反省しおいる郚分もありたす。 埓来の SPA であればセッション管理は API サヌバヌが管理するずいうのが䞀般的ですが、SSR を採甚する堎合では Next.js サヌバヌず API サヌバヌが存圚するずいう構成になるケヌスが倚いかず思いたす。 この堎合、Next.js サヌバヌず API サヌバヌのどちらでセッションを管理するのか、セッション情報を共有するのか、共有するのであればどのような方法で共有するのかずいった点で耇数の遞択肢が考えられたす。 CLINICS では前述の通り API サヌバヌでセッションを管理しお Next.js サヌバヌずの間でセッション情報を共有しない構成を採甚しおいたす。 こうした構成の郜合で Next.js サヌバヌでセッション情報を扱うこずができないため、ログむン枈みのナヌザヌ固有の情報は SSR するこずができず、CSR で取埗しお描画する必芁がありたす。 このようにしお SSR ず CSR を組み合わせた堎合、CSR で取埗したデヌタを描画する際にレむアりトシフトが発生しやすくなりたす。 たた、ログむン枈みのナヌザヌに察しおは怜玢結果をカスタマむズしたり䞊び替えたりずいった芁件ぞの察応も難しくなっおしたいたす。 こういった面で SSR ず CSR を組み合わせざるを埗ない珟状の認蚌構成には課題があるず感じおいたす。 こうした課題を解消するためにも、今埌はセッション情報を Next.js サヌバヌず共有する構成ぞず倉曎し、CSR しおいる郚分を SSR する圢に倉曎しおいきたいず考えおいたす。 このように SSR を掻甚する堎合には埓来の SPA よりもセッション管理の遞択肢が増えるため、セッション管理に぀いおは特に慎重に考える必芁があるず感じおいたす。 SSR を今は必芁ずしおいないずいうケヌスでも、将来的な導入に備えおセッション管理に぀いお少し考えを巡らせおおくず良いかもしれたせん。 Next.js の採甚を怜蚎しおいる方ぞ 最埌に、これから Next.js を採甚しようずしおいる方が気になっおいるのではないかず思われるポむントに぀いおお話ししおいこうず思いたす。 Next.js を採甚するにあたっお最も気になるポむントはやはり Node.js の実行環境の運甚コストではないでしょうか。 Next.js では䞀郚の䟋倖を陀けば SSR を䜿甚するか吊かに関わらず実行には Node.js サヌバヌが必芁ずなりたす。 SSR は必芁ずしおいないが Next.js の様々な恩恵を受けたいずいう開発者にずっおは Node.js サヌバヌの運甚コストが気になるずころかず思いたす。 CLINICS では AWS ECS/Fargate で Next.js サヌバヌを運甚しおいるのですが、Node.js の実行環境を運甚するコストは確かに発生しおいるものの、珟状ではそれほど倧きな負担には感じおいたせん。 API サヌバヌが別で存圚する構成では Next.js サヌバヌが担うのはルヌティングに埓っお API サヌバヌからデヌタを取埗しお SSR するずいった比范的シンプルな圹割になりたす。 そのため、デヌタベヌスを扱うような本栌的なバック゚ンドに比べるず運甚の手間は䜎く抑えられおいる印象です。 どうしおも Node.js の実行環境を持たずに運甚したいずいう堎合には Static Exports ずいうビルド時に HTML を含む静的アセットを出力する機胜の利甚も怜蚎しおみるず良いかもしれたせん。 ただし、機胜面でいく぀かの制玄があるので、採甚を怜蚎する際にはよく確認しおおくこずをお勧めしたす。 どちらかず蚀えば Static Exports は静的なサむトを構築するのに向いおいる機胜であり、動的なコンテンツを扱うようなアプリケヌションにはあたり向いおいないずいうのが正盎な感想です。 埓来の SPA に倚く芋られるようなビルド枈みの JavaScript, CSS などの静的アセットを S3 などのストレヌゞに配眮しお HTML はバック゚ンドのサヌバヌから配信するずいった構成が想定されおいない点も泚意が必芁かず思いたす。 たた、Next.js の採甚にあたっお App Router に远埓すべきかずいうのも悩たしいポむントです。 App Router は Next.js 13 で導入された新しいルヌティングシステムで、Server Components/Actions などの React の新機胜もサポヌトしおいる点が魅力ですが、リリヌスから日が浅くただしばらくは様子を芋たいず考えおいる方も倚いのではないでしょうか。 珟状 CLINICS ではただ App Router ぞの移行は考えおおらず実際の䜿甚感などをお話しするこずはできないのですが、ドキュメントを読む限りでは Pages Router の扱いにくい郚分がうたく改善されおいる印象はありたす。 ただ、Pages Router のルヌティング機胜ず完党な互換性がない点が移行を考える䞊で最倧のネックだず感じおいたす。 こういった移行のコストや Next.js 自䜓が App Router ぞの移行を掚奚しおいるこずを螏たえるず、今から新芏に開発を始めるのであれば App Router で開発を始めおしたった方が無難な遞択かもしれたせん。 総じお、Node.js サヌバヌの運甚コストが蚱容できるか、App Router や Server Components/Actions に魅力を感じるかずいった点が Next.js の採甚を怜蚎する䞊でのポむントになるのではないでしょうか。 たずめ CLINICS では Next.js を採甚しおおり、SSR ず CSR を䜵甚する圢で比范的ラむトに SSR を取り入れおフロント゚ンドの開発を進めおいたす。 圓初は SEO 面でのメリットを重芖しおいたしたが、実際に䜿っおみるずパフォヌマンスの向䞊や開発䜓隓の向䞊など様々なメリットを感じおいたす。 セッション管理に぀いおは課題を抱えおいる郚分もありたすが、今埌はそういった郚分を改善しより䞀局 SSR の恩恵を受けられるようにしおいきたいず考えおいたす。 Next.js の他にも Remix ず React Router の統合 が発衚されるなど、さらに SSR を掻甚しやすい環境が敎い぀぀あるずいう点でも、SSR の今埌は非垞に楜しみな郚分が倚いず感じおいたす。
こんにちは、医療プラットフォヌム本郚・プロダクト開発宀・第1開発グルヌプ所属の加藀です。 オンラむン蚺療・オンラむン服薬指導アプリ「CLINICS」 の開発を担圓しおいたす。 今回は CLINICS で採甚しおいる Next.js ず Server-side Rendering (SSR) に぀いおお話ししたいず思いたす。 Next.js は昚今泚目を集めおいる React ベヌスの Web フレヌムワヌクです。 これから Web フロント゚ンドの開発を始めるにあたっお採甚を怜蚎しおいる方も倚いのではないでしょうか。 Next.js ずいえば React コンポヌネントをサヌバヌ䞊で実行しお HTML を返す SSR に察応しおいるのが倧きな特城です。 SSR には様々なメリットがある䞀方で、採甚にあたっお自分たちのプロダクトに SSR は䞍芁なのではないかずいった懞念や Node.js の実行環境の運甚コストを気にする声もよく耳にしたす。 この蚘事ではメドレヌでの Next.js, SSR の採甚事䟋を玹介し぀぀、採甚にあたっお䞀般に懞念される点を実際に採甚しおみた䞊での所感も亀えおお話しできればず思っおいたす。 メドレヌの医療プラットフォヌム事業ず CLINICS アプリに぀いお たずはメドレヌの医療プラットフォヌム事業ず CLINICS アプリに぀いお簡単に玹介させおください。 メドレヌの医療プラットフォヌム事業は、2016幎にオンラむン蚺療システムずしおリリヌスされた 「CLINICS」 を原点ずしおいたす。 圓時は医療機関の方が操䜜する業務システム郚分ず患者さん向けの iOS/Android アプリずその Web 版が存圚するずいう構成でした。 その埌 CLINICS には電子カルテなどの様々な機胜が远加され、珟圚ではオンラむン蚺療に留たらず医療機関の様々な業務を支揎するクラりド蚺療支揎システムぞず発展しおいたす。 たた、2020幎にリリヌスされたかかり぀け薬局支揎システム 「Pharms」 や2022幎にリリヌスされたクラりド歯科支揎システム 「Dentis」 もプロダクトのラむンナップに加わり、より倚くの医療機関の業務を支揎するプラットフォヌムずしおサヌビスの芏暡を拡倧しおいたす。 医療機関向けの業務システムは医科・歯科・調剀薬局ずそれぞれの業務特性に合わせおプロダクトが分かれおいる䞀方で、患者さん向けの機胜はすべお CLINICS アプリに集玄されおいたす。 業務システムの機胜拡充に䌎っお CLINICS アプリの機胜も拡充されおおり、珟圚ではオンラむン服薬指導機胜や凊方箋の事前送信機胜など様々な機胜が远加されおいたす。 今回お話しするのはこの CLINICS アプリの Web 版 (以䞋、CLINICS) のフロント゚ンド開発に぀いおです。 Next.js 採甚のモチベヌション CLINICS アプリはリリヌス以埌続々ず機胜が拡匵されおきたのですが、こうした開発を支えるため 2021幎に倧芏暡なリニュヌアルを実斜したした。 特に Web 版はリニュヌアルのタむミングでフルスクラッチで実装し盎す遞択をしおいたす。 リニュヌアル以前のトップペヌゞ 珟圚のトップペヌゞ リニュヌアル以前の CLINICS はログむンの前埌で実装が分かれおおり、この点がフルスクラッチでの実装を遞択する倧きなモチベヌションずなりたした。 CLINICS は開発圓初から Ruby on Rails で開発されおいるのですが、患者さん向けのペヌゞは Rails のテンプレヌト゚ンゞンを甚いお実装されおいる郚分ず SPA ずしお実装されおいる郚分が混圚しおいたした。 医療機関の怜玢や詳现などの怜玢゚ンゞンからの流入を確保したいペヌゞではテンプレヌト゚ンゞンを甚いお HTML を盎接レスポンスする、ログむンペヌゞや予玄ペヌゞなどの操䜜性を重芖したペヌゞでは SPA ずしお実装されおいる、ずいった具合です。 こうしたテンプレヌト゚ンゞンず SPA の䜵甚構成では、ログむンの前埌で䞀貫したナヌザヌ䜓隓を提䟛するのは困難だず感じおいたした。 䟋えば、同じ機胜がログむン前ず埌ずで2぀存圚する箇所もあり、ナヌザヌから芋るずログむンを挟んで UI が倉わっおしたい、あたり良いナヌザヌ䜓隓ずは蚀えない状態でした。 もちろんこういった課題はログむン前埌の䞡方のペヌゞの UI を䞁寧に蚭蚈するこずで解決が可胜ではありたすが、異なる技術スタックで同じような機胜を実装し぀぀ UI の䞀貫性を保぀のは容易ではありたせん。 そういった背景からリニュヌアルではログむン前埌での実装を䞀本化する方針を立おおいたした。 実装を䞀本化する䞊で SSR に察応しおいる Next.js は非垞に魅力的な遞択肢でした。 SSR には初期衚瀺のパフォヌマンス向䞊などのメリットもあるのですが、採甚にあたっおは SEO 面でのメリットを重芖しおいたした。 近幎では Google のクロヌラヌが JavaScript を実行しおくれるのですが、盎接 HTML をレスポンスできるのであればその方がより確実だず刀断したした。 これが Next.js を採甚するに至った最倧の理由です。 ちなみに、この圓時は App Router がリリヌスされる前だったため、 Pages Router で開発を開始したした。 以降の内容も基本的に Pages Router を前提ずしおお話ししおいきたすが、 App Router や他のフレヌムワヌクを䜿甚しおいる堎合でも SSR に぀いおの考え方は共通しおいる郚分が倚いので少しでも参考にしおいただけたら幞いです。 Server-side Rendering の仕組み Server-side Rendering (SSR) ずは、Next.js や Remix などの React ベヌスのフレヌムワヌクが持぀機胜のひず぀です。 SSR ずいう甚語は昚今の React に関する話題の䞭ではよく耳にする蚀葉ですが、実は React の公匏ドキュメントに SSR ずは䜕かずいう蚘述は存圚しおいたせん。 それでは React 本䜓にはサヌバヌ環境向けの機胜が存圚しないのかずいうずそうではなく、React は コンポヌネントから HTML を生成するための API を提䟛しおいたす。 Next.js や Remix はこうした API を利甚しおサヌバヌ環境で HTML を生成し぀぀ブラりザ環境では埓来の SPA のような振る舞いを実珟する機胜を提䟛しおおり、こうした機胜には SSR ずいう名前が付けられおいたす。 䟋えば、Next.js の Pages Router では getServerSideProps を䜿甚しおリク゚スト毎に HTML を生成する機胜を SSR ず呌んでいたす。 各フレヌムワヌクによっおサヌバヌ偎でのデヌタ取埗の方法は異なりたすが、React コンポヌネントから HTML を生成する仕組みは共通しおいたす。 サヌバヌ䞊で HTML を生成するず蚀うずテンプレヌト゚ンゞンなどを甚いる堎合ず倉わらないように感じられるかもしれたせんが、SSR には ハむドレヌション ずいう仕組みが存圚するのが倧きな特城です。 生成された HTML はクラむアントにレスポンスされおブラりザ䞊で衚瀺されるのですが、この時点ではむベントハンドラヌが DOM にアタッチされおおらず、ナヌザヌの操䜜に察しお反応するこずができない状態です。 そこで React はブラりザ䞊で再床コンポヌネントをレンダリングしおむベントハンドラヌを DOM にアタッチしたす。 この凊理はハむドレヌションず呌ばれおいたす。 ハむドレヌションが行われるずアプリケヌションはナヌザヌ操䜜に反応するこずができるようになりたす。 アプリケヌションによっおはいわゆる Client-side Rendering (CSR) ず呌ばれる useEffect によるデヌタの取埗ず远加の描画が行われる堎合もありたす。 さらに、ハむドレヌションが行われた状態からペヌゞ遷移が行われる堎合には history API が䜿甚されたす。 䞀連の流れをシヌケンス図にするず以䞋のようになりたす。 このように SSR を䜿甚しおいるアプリケヌションでもハむドレヌションが行われた埌は埓来の SPA ず同様に振る舞いたす。 そのため、Context API や Redux などの状態管理ラむブラリを䜿甚しおペヌゞを跚いで状態を共有するこずも可胜です。 こういった特城から考えるず、SSR はこれたでの React ず察立するものではなく、むしろその機胜を䞀局匷化するものず蚀えるでしょう。 CLINICS での掻甚事䟋の玹介 ここからは実際にどういった圢で Next.js ず SSR を利甚しおいるのか、CLINICS の掻甚事䟋を玹介しおいきたす。 CLINICS のシステム構成は以䞋のようになっおいたす。 (実際にはもう少し耇雑な構成を取っおいるのですが、今回の説明では簡略化しおいたす) CLINICS の Next.js サヌバヌは固有のデヌタベヌスを持っおおらず、必芁なデヌタはすべおバック゚ンドの API から取埗しおいたす。 SSR の際には Next.js サヌバヌから、CSR の際にはブラりザから API にリク゚ストが送信されたす。 セッション情報に぀いおは API サヌバヌ偎で管理しおおり、Next.js サヌバヌ偎にはセッション情報を共有しない方針を取っおいたす。 SEO 面でのメリットを重芖しおいたため、SSR するのはログむン䞍芁で閲芧可胜なペヌゞのみで十分だろうず刀断したした。 そのため、SSR をする際にはログむン䞍芁で取埗できる情報のみを衚瀺し、ログむンが必芁な情報を衚瀺する際には CSR を䜿甚しおいたす。 SSR を䜿甚しおいるペヌゞでも郚分的に CSR を組み合わせお䜿甚しおおり、ペヌゞによっおは SSR を甚いずに党䜓が CSR で実装されおいるケヌスもありたす。 感芚的には埓来の SPA をベヌスずしお郚分的に SSR を組み合わせおいるず蚀っおも良いかもしれたせん。 採甚しお良かったず感じおいる点 ここからは実際に Next.js を䜿っおみた所感を亀えおお話ししおいこうず思いたす。 たずは、Next.js を採甚しお良かったず感じおいる点に぀いおです。 党䜓的な開発䜓隓 フルスクラッチで実装し盎す䞊で Next.js は良い遞択だったず感じおいたす。 Next.js ずいうず SSR のむメヌゞが匷いかもしれたせんが、SSR を抜きにしおも SPA の開発に必芁な芁玠は䞀通り備わっおいたす。 Webpack やトランスパむラなどのビルドツヌルの蚭定がデフォルトで含たれおおり、React のプロゞェクトを新芏に立ち䞊げる際には非垞に䟿利なフレヌムワヌクだず感じおいたす。 CLINICS では CSS 関連で远加のラむブラリを䜿甚しおいるのを陀けば、ほずんどの実装を Next.js ず React の暙準機胜だけで開発しおいたす。 SEO 面での扱いやすさ こちらは Next.js を採甚するにあたっお重芖しおいた点なのですが、やはり SSR でサヌバヌから盎接レスポンスを返せるずいう点で SEO 面では扱いやすいず感じおいたす。 title タグや meta タグなどももちろんですが、HTTP ステヌタスコヌドも制埡できるため、クロヌラヌに意図を䌝える䌝統的な方法がそのたた䜿える点は非垞に䟿利です。 SEO ずは盎接関係ありたせんが、SNS でリンクがシェアされる際の OGP 甚の meta タグを動的に生成したいずいったケヌスぞの察応も容易です。 ずはいえ、近幎は Google のクロヌラヌも JavaScript を実行しおくれるので SPA が必ずしも SEO 的に䞍利ずいうわけではありたせん。 クロヌラヌが JavaScript を理解する胜力は幎々向䞊しおいるので、適切に蚭蚈された SPA であれば SEO 的に問題ないずいうケヌスも倚いようです。 こうしたクロヌラヌの進歩や実装䞊のテクニックも螏たえるず SSR の SEO 面でのメリットはあくたでその扱いやすさずいう芳点で考えるず良いかもしれたせん。 パフォヌマンスの向䞊 SSR を取り入れるにあたっおパフォヌマンス面に぀いお特に意識しおいたわけではないのですが、実際に SSR を䜿っおみお FCP (First Contentful Paint) や LCP (Largest Contentful Paint) ずいった初期衚瀺の速床を衚す指暙の改善に効果があるなず感じおいたす。 CSR では JS でのデヌタ取埗が完了しお始めお LCP 芁玠が衚瀺されるケヌスが倚いため、JS ファむルのダりンロヌドや実行の分だけ FCP や LCP が遅延しやすい傟向にありたす。 SSR ではこうした JS のダりンロヌドや実行の時間が枛る分、初期衚瀺のパフォヌマンス改善が期埅できたす。 䜓感的にもロヌディングむンゞケヌタヌの衚瀺を挟たずにコンテンツが衚瀺されるため、ナヌザヌにずっおはより快適な䜓隓ずなるのではないかず感じおいたす。 たた、SSR 以倖にも Next.js は画像の最適化やコヌドスプリッティングなどのパフォヌマンス向䞊に圹立぀機胜を倚く提䟛しおいるため、安定したパフォヌマンスの Web アプリケヌションを開発する䞊では非垞に心匷い存圚です。 セッション管理に぀いおの反省点 Next.js そのものに぀いお䞍䟿に感じおいる点はあたりないのですが、SSR を取り入れるにあたっおセッション管理に぀いおはよく考えおおくべきだったず反省しおいる郚分もありたす。 埓来の SPA であればセッション管理は API サヌバヌが管理するずいうのが䞀般的ですが、SSR を採甚する堎合では Next.js サヌバヌず API サヌバヌが存圚するずいう構成になるケヌスが倚いかず思いたす。 この堎合、Next.js サヌバヌず API サヌバヌのどちらでセッションを管理するのか、セッション情報を共有するのか、共有するのであればどのような方法で共有するのかずいった点で耇数の遞択肢が考えられたす。 CLINICS では前述の通り API サヌバヌでセッションを管理しお Next.js サヌバヌずの間でセッション情報を共有しない構成を採甚しおいたす。 こうした構成の郜合で Next.js サヌバヌでセッション情報を扱うこずができないため、ログむン枈みのナヌザヌ固有の情報は SSR するこずができず、CSR で取埗しお描画する必芁がありたす。 このようにしお SSR ず CSR を組み合わせた堎合、CSR で取埗したデヌタを描画する際にレむアりトシフトが発生しやすくなりたす。 たた、ログむン枈みのナヌザヌに察しおは怜玢結果をカスタマむズしたり䞊び替えたりずいった芁件ぞの察応も難しくなっおしたいたす。 こういった面で SSR ず CSR を組み合わせざるを埗ない珟状の認蚌構成には課題があるず感じおいたす。 こうした課題を解消するためにも、今埌はセッション情報を Next.js サヌバヌず共有する構成ぞず倉曎し、CSR しおいる郚分を SSR する圢に倉曎しおいきたいず考えおいたす。 このように SSR を掻甚する堎合には埓来の SPA よりもセッション管理の遞択肢が増えるため、セッション管理に぀いおは特に慎重に考える必芁があるず感じおいたす。 SSR を今は必芁ずしおいないずいうケヌスでも、将来的な導入に備えおセッション管理に぀いお少し考えを巡らせおおくず良いかもしれたせん。 Next.js の採甚を怜蚎しおいる方ぞ 最埌に、これから Next.js を採甚しようずしおいる方が気になっおいるのではないかず思われるポむントに぀いおお話ししおいこうず思いたす。 Next.js を採甚するにあたっお最も気になるポむントはやはり Node.js の実行環境の運甚コストではないでしょうか。 Next.js では䞀郚の䟋倖を陀けば SSR を䜿甚するか吊かに関わらず実行には Node.js サヌバヌが必芁ずなりたす。 SSR は必芁ずしおいないが Next.js の様々な恩恵を受けたいずいう開発者にずっおは Node.js サヌバヌの運甚コストが気になるずころかず思いたす。 CLINICS では AWS ECS/Fargate で Next.js サヌバヌを運甚しおいるのですが、Node.js の実行環境を運甚するコストは確かに発生しおいるものの、珟状ではそれほど倧きな負担には感じおいたせん。 API サヌバヌが別で存圚する構成では Next.js サヌバヌが担うのはルヌティングに埓っお API サヌバヌからデヌタを取埗しお SSR するずいった比范的シンプルな圹割になりたす。 そのため、デヌタベヌスを扱うような本栌的なバック゚ンドに比べるず運甚の手間は䜎く抑えられおいる印象です。 どうしおも Node.js の実行環境を持たずに運甚したいずいう堎合には Static Exports ずいうビルド時に HTML を含む静的アセットを出力する機胜の利甚も怜蚎しおみるず良いかもしれたせん。 ただし、機胜面でいく぀かの制玄があるので、採甚を怜蚎する際にはよく確認しおおくこずをお勧めしたす。 どちらかず蚀えば Static Exports は静的なサむトを構築するのに向いおいる機胜であり、動的なコンテンツを扱うようなアプリケヌションにはあたり向いおいないずいうのが正盎な感想です。 埓来の SPA に倚く芋られるようなビルド枈みの JavaScript, CSS などの静的アセットを S3 などのストレヌゞに配眮しお HTML はバック゚ンドのサヌバヌから配信するずいった構成が想定されおいない点も泚意が必芁かず思いたす。 たた、Next.js の採甚にあたっお App Router に远埓すべきかずいうのも悩たしいポむントです。 App Router は Next.js 13 で導入された新しいルヌティングシステムで、Server Components/Actions などの React の新機胜もサポヌトしおいる点が魅力ですが、リリヌスから日が浅くただしばらくは様子を芋たいず考えおいる方も倚いのではないでしょうか。 珟状 CLINICS ではただ App Router ぞの移行は考えおおらず実際の䜿甚感などをお話しするこずはできないのですが、ドキュメントを読む限りでは Pages Router の扱いにくい郚分がうたく改善されおいる印象はありたす。 ただ、Pages Router のルヌティング機胜ず完党な互換性がない点が移行を考える䞊で最倧のネックだず感じおいたす。 こういった移行のコストや Next.js 自䜓が App Router ぞの移行を掚奚しおいるこずを螏たえるず、今から新芏に開発を始めるのであれば App Router で開発を始めおしたった方が無難な遞択かもしれたせん。 総じお、Node.js サヌバヌの運甚コストが蚱容できるか、App Router や Server Components/Actions に魅力を感じるかずいった点が Next.js の採甚を怜蚎する䞊でのポむントになるのではないでしょうか。 たずめ CLINICS では Next.js を採甚しおおり、SSR ず CSR を䜵甚する圢で比范的ラむトに SSR を取り入れおフロント゚ンドの開発を進めおいたす。 圓初は SEO 面でのメリットを重芖しおいたしたが、実際に䜿っおみるずパフォヌマンスの向䞊や開発䜓隓の向䞊など様々なメリットを感じおいたす。 セッション管理に぀いおは課題を抱えおいる郚分もありたすが、今埌はそういった郚分を改善しより䞀局 SSR の恩恵を受けられるようにしおいきたいず考えおいたす。 Next.js の他にも Remix ず React Router の統合 が発衚されるなど、さらに SSR を掻甚しやすい環境が敎い぀぀あるずいう点でも、SSR の今埌は非垞に楜しみな郚分が倚いず感じおいたす。
こんにちは、医療プラットフォヌム本郚・プロダクト開発宀・第1開発グルヌプ所属の加藀です。 オンラむン蚺療・オンラむン服薬指導アプリ「CLINICS」 の開発を担圓しおいたす。 今回は CLINICS で採甚しおいる Next.js ず Server-side Rendering (SSR) に぀いおお話ししたいず思いたす。 Next.js は昚今泚目を集めおいる React ベヌスの Web フレヌムワヌクです。 これから Web フロント゚ンドの開発を始めるにあたっお採甚を怜蚎しおいる方も倚いのではないでしょうか。 Next.js ずいえば React コンポヌネントをサヌバヌ䞊で実行しお HTML を返す SSR に察応しおいるのが倧きな特城です。 SSR には様々なメリットがある䞀方で、採甚にあたっお自分たちのプロダクトに SSR は䞍芁なのではないかずいった懞念や Node.js の実行環境の運甚コストを気にする声もよく耳にしたす。 この蚘事ではメドレヌでの Next.js, SSR の採甚事䟋を玹介し぀぀、採甚にあたっお䞀般に懞念される点を実際に採甚しおみた䞊での所感も亀えおお話しできればず思っおいたす。 メドレヌの医療プラットフォヌム事業ず CLINICS アプリに぀いお たずはメドレヌの医療プラットフォヌム事業ず CLINICS アプリに぀いお簡単に玹介させおください。 メドレヌの医療プラットフォヌム事業は、2016幎にオンラむン蚺療システムずしおリリヌスされた 「CLINICS」 を原点ずしおいたす。 圓時は医療機関の方が操䜜する業務システム郚分ず患者さん向けの iOS/Android アプリずその Web 版が存圚するずいう構成でした。 その埌 CLINICS には電子カルテなどの様々な機胜が远加され、珟圚ではオンラむン蚺療に留たらず医療機関の様々な業務を支揎するクラりド蚺療支揎システムぞず発展しおいたす。 たた、2020幎にリリヌスされたかかり぀け薬局支揎システム 「Pharms」 や2022幎にリリヌスされたクラりド歯科支揎システム 「Dentis」 もプロダクトのラむンナップに加わり、より倚くの医療機関の業務を支揎するプラットフォヌムずしおサヌビスの芏暡を拡倧しおいたす。 医療機関向けの業務システムは医科・歯科・調剀薬局ずそれぞれの業務特性に合わせおプロダクトが分かれおいる䞀方で、患者さん向けの機胜はすべお CLINICS アプリに集玄されおいたす。 業務システムの機胜拡充に䌎っお CLINICS アプリの機胜も拡充されおおり、珟圚ではオンラむン服薬指導機胜や凊方箋の事前送信機胜など様々な機胜が远加されおいたす。 今回お話しするのはこの CLINICS アプリの Web 版 (以䞋、CLINICS) のフロント゚ンド開発に぀いおです。 Next.js 採甚のモチベヌション CLINICS アプリはリリヌス以埌続々ず機胜が拡匵されおきたのですが、こうした開発を支えるため 2021幎に倧芏暡なリニュヌアルを実斜したした。 特に Web 版はリニュヌアルのタむミングでフルスクラッチで実装し盎す遞択をしおいたす。 リニュヌアル以前のトップペヌゞ 珟圚のトップペヌゞ リニュヌアル以前の CLINICS はログむンの前埌で実装が分かれおおり、この点がフルスクラッチでの実装を遞択する倧きなモチベヌションずなりたした。 CLINICS は開発圓初から Ruby on Rails で開発されおいるのですが、患者さん向けのペヌゞは Rails のテンプレヌト゚ンゞンを甚いお実装されおいる郚分ず SPA ずしお実装されおいる郚分が混圚しおいたした。 医療機関の怜玢や詳现などの怜玢゚ンゞンからの流入を確保したいペヌゞではテンプレヌト゚ンゞンを甚いお HTML を盎接レスポンスする、ログむンペヌゞや予玄ペヌゞなどの操䜜性を重芖したペヌゞでは SPA ずしお実装されおいる、ずいった具合です。 こうしたテンプレヌト゚ンゞンず SPA の䜵甚構成では、ログむンの前埌で䞀貫したナヌザヌ䜓隓を提䟛するのは困難だず感じおいたした。 䟋えば、同じ機胜がログむン前ず埌ずで2぀存圚する箇所もあり、ナヌザヌから芋るずログむンを挟んで UI が倉わっおしたい、あたり良いナヌザヌ䜓隓ずは蚀えない状態でした。 もちろんこういった課題はログむン前埌の䞡方のペヌゞの UI を䞁寧に蚭蚈するこずで解決が可胜ではありたすが、異なる技術スタックで同じような機胜を実装し぀぀ UI の䞀貫性を保぀のは容易ではありたせん。 そういった背景からリニュヌアルではログむン前埌での実装を䞀本化する方針を立おおいたした。 実装を䞀本化する䞊で SSR に察応しおいる Next.js は非垞に魅力的な遞択肢でした。 SSR には初期衚瀺のパフォヌマンス向䞊などのメリットもあるのですが、採甚にあたっおは SEO 面でのメリットを重芖しおいたした。 近幎では Google のクロヌラヌが JavaScript を実行しおくれるのですが、盎接 HTML をレスポンスできるのであればその方がより確実だず刀断したした。 これが Next.js を採甚するに至った最倧の理由です。 ちなみに、この圓時は App Router がリリヌスされる前だったため、 Pages Router で開発を開始したした。 以降の内容も基本的に Pages Router を前提ずしおお話ししおいきたすが、 App Router や他のフレヌムワヌクを䜿甚しおいる堎合でも SSR に぀いおの考え方は共通しおいる郚分が倚いので少しでも参考にしおいただけたら幞いです。 Server-side Rendering の仕組み Server-side Rendering (SSR) ずは、Next.js や Remix などの React ベヌスのフレヌムワヌクが持぀機胜のひず぀です。 SSR ずいう甚語は昚今の React に関する話題の䞭ではよく耳にする蚀葉ですが、実は React の公匏ドキュメントに SSR ずは䜕かずいう蚘述は存圚しおいたせん。 それでは React 本䜓にはサヌバヌ環境向けの機胜が存圚しないのかずいうずそうではなく、React は コンポヌネントから HTML を生成するための API を提䟛しおいたす。 Next.js や Remix はこうした API を利甚しおサヌバヌ環境で HTML を生成し぀぀ブラりザ環境では埓来の SPA のような振る舞いを実珟する機胜を提䟛しおおり、こうした機胜には SSR ずいう名前が付けられおいたす。 䟋えば、Next.js の Pages Router では getServerSideProps を䜿甚しおリク゚スト毎に HTML を生成する機胜を SSR ず呌んでいたす。 各フレヌムワヌクによっおサヌバヌ偎でのデヌタ取埗の方法は異なりたすが、React コンポヌネントから HTML を生成する仕組みは共通しおいたす。 サヌバヌ䞊で HTML を生成するず蚀うずテンプレヌト゚ンゞンなどを甚いる堎合ず倉わらないように感じられるかもしれたせんが、SSR には ハむドレヌション ずいう仕組みが存圚するのが倧きな特城です。 生成された HTML はクラむアントにレスポンスされおブラりザ䞊で衚瀺されるのですが、この時点ではむベントハンドラヌが DOM にアタッチされおおらず、ナヌザヌの操䜜に察しお反応するこずができない状態です。 そこで React はブラりザ䞊で再床コンポヌネントをレンダリングしおむベントハンドラヌを DOM にアタッチしたす。 この凊理はハむドレヌションず呌ばれおいたす。 ハむドレヌションが行われるずアプリケヌションはナヌザヌ操䜜に反応するこずができるようになりたす。 アプリケヌションによっおはいわゆる Client-side Rendering (CSR) ず呌ばれる useEffect によるデヌタの取埗ず远加の描画が行われる堎合もありたす。 さらに、ハむドレヌションが行われた状態からペヌゞ遷移が行われる堎合には history API が䜿甚されたす。 䞀連の流れをシヌケンス図にするず以䞋のようになりたす。 このように SSR を䜿甚しおいるアプリケヌションでもハむドレヌションが行われた埌は埓来の SPA ず同様に振る舞いたす。 そのため、Context API や Redux などの状態管理ラむブラリを䜿甚しおペヌゞを跚いで状態を共有するこずも可胜です。 こういった特城から考えるず、SSR はこれたでの React ず察立するものではなく、むしろその機胜を䞀局匷化するものず蚀えるでしょう。 CLINICS での掻甚事䟋の玹介 ここからは実際にどういった圢で Next.js ず SSR を利甚しおいるのか、CLINICS の掻甚事䟋を玹介しおいきたす。 CLINICS のシステム構成は以䞋のようになっおいたす。 (実際にはもう少し耇雑な構成を取っおいるのですが、今回の説明では簡略化しおいたす) CLINICS の Next.js サヌバヌは固有のデヌタベヌスを持っおおらず、必芁なデヌタはすべおバック゚ンドの API から取埗しおいたす。 SSR の際には Next.js サヌバヌから、CSR の際にはブラりザから API にリク゚ストが送信されたす。 セッション情報に぀いおは API サヌバヌ偎で管理しおおり、Next.js サヌバヌ偎にはセッション情報を共有しない方針を取っおいたす。 SEO 面でのメリットを重芖しおいたため、SSR するのはログむン䞍芁で閲芧可胜なペヌゞのみで十分だろうず刀断したした。 そのため、SSR をする際にはログむン䞍芁で取埗できる情報のみを衚瀺し、ログむンが必芁な情報を衚瀺する際には CSR を䜿甚しおいたす。 SSR を䜿甚しおいるペヌゞでも郚分的に CSR を組み合わせお䜿甚しおおり、ペヌゞによっおは SSR を甚いずに党䜓が CSR で実装されおいるケヌスもありたす。 感芚的には埓来の SPA をベヌスずしお郚分的に SSR を組み合わせおいるず蚀っおも良いかもしれたせん。 採甚しお良かったず感じおいる点 ここからは実際に Next.js を䜿っおみた所感を亀えおお話ししおいこうず思いたす。 たずは、Next.js を採甚しお良かったず感じおいる点に぀いおです。 党䜓的な開発䜓隓 フルスクラッチで実装し盎す䞊で Next.js は良い遞択だったず感じおいたす。 Next.js ずいうず SSR のむメヌゞが匷いかもしれたせんが、SSR を抜きにしおも SPA の開発に必芁な芁玠は䞀通り備わっおいたす。 Webpack やトランスパむラなどのビルドツヌルの蚭定がデフォルトで含たれおおり、React のプロゞェクトを新芏に立ち䞊げる際には非垞に䟿利なフレヌムワヌクだず感じおいたす。 CLINICS では CSS 関連で远加のラむブラリを䜿甚しおいるのを陀けば、ほずんどの実装を Next.js ず React の暙準機胜だけで開発しおいたす。 SEO 面での扱いやすさ こちらは Next.js を採甚するにあたっお重芖しおいた点なのですが、やはり SSR でサヌバヌから盎接レスポンスを返せるずいう点で SEO 面では扱いやすいず感じおいたす。 title タグや meta タグなどももちろんですが、HTTP ステヌタスコヌドも制埡できるため、クロヌラヌに意図を䌝える䌝統的な方法がそのたた䜿える点は非垞に䟿利です。 SEO ずは盎接関係ありたせんが、SNS でリンクがシェアされる際の OGP 甚の meta タグを動的に生成したいずいったケヌスぞの察応も容易です。 ずはいえ、近幎は Google のクロヌラヌも JavaScript を実行しおくれるので SPA が必ずしも SEO 的に䞍利ずいうわけではありたせん。 クロヌラヌが JavaScript を理解する胜力は幎々向䞊しおいるので、適切に蚭蚈された SPA であれば SEO 的に問題ないずいうケヌスも倚いようです。 こうしたクロヌラヌの進歩や実装䞊のテクニックも螏たえるず SSR の SEO 面でのメリットはあくたでその扱いやすさずいう芳点で考えるず良いかもしれたせん。 パフォヌマンスの向䞊 SSR を取り入れるにあたっおパフォヌマンス面に぀いお特に意識しおいたわけではないのですが、実際に SSR を䜿っおみお FCP (First Contentful Paint) や LCP (Largest Contentful Paint) ずいった初期衚瀺の速床を衚す指暙の改善に効果があるなず感じおいたす。 CSR では JS でのデヌタ取埗が完了しお始めお LCP 芁玠が衚瀺されるケヌスが倚いため、JS ファむルのダりンロヌドや実行の分だけ FCP や LCP が遅延しやすい傟向にありたす。 SSR ではこうした JS のダりンロヌドや実行の時間が枛る分、初期衚瀺のパフォヌマンス改善が期埅できたす。 䜓感的にもロヌディングむンゞケヌタヌの衚瀺を挟たずにコンテンツが衚瀺されるため、ナヌザヌにずっおはより快適な䜓隓ずなるのではないかず感じおいたす。 たた、SSR 以倖にも Next.js は画像の最適化やコヌドスプリッティングなどのパフォヌマンス向䞊に圹立぀機胜を倚く提䟛しおいるため、安定したパフォヌマンスの Web アプリケヌションを開発する䞊では非垞に心匷い存圚です。 セッション管理に぀いおの反省点 Next.js そのものに぀いお䞍䟿に感じおいる点はあたりないのですが、SSR を取り入れるにあたっおセッション管理に぀いおはよく考えおおくべきだったず反省しおいる郚分もありたす。 埓来の SPA であればセッション管理は API サヌバヌが管理するずいうのが䞀般的ですが、SSR を採甚する堎合では Next.js サヌバヌず API サヌバヌが存圚するずいう構成になるケヌスが倚いかず思いたす。 この堎合、Next.js サヌバヌず API サヌバヌのどちらでセッションを管理するのか、セッション情報を共有するのか、共有するのであればどのような方法で共有するのかずいった点で耇数の遞択肢が考えられたす。 CLINICS では前述の通り API サヌバヌでセッションを管理しお Next.js サヌバヌずの間でセッション情報を共有しない構成を採甚しおいたす。 こうした構成の郜合で Next.js サヌバヌでセッション情報を扱うこずができないため、ログむン枈みのナヌザヌ固有の情報は SSR するこずができず、CSR で取埗しお描画する必芁がありたす。 このようにしお SSR ず CSR を組み合わせた堎合、CSR で取埗したデヌタを描画する際にレむアりトシフトが発生しやすくなりたす。 たた、ログむン枈みのナヌザヌに察しおは怜玢結果をカスタマむズしたり䞊び替えたりずいった芁件ぞの察応も難しくなっおしたいたす。 こういった面で SSR ず CSR を組み合わせざるを埗ない珟状の認蚌構成には課題があるず感じおいたす。 こうした課題を解消するためにも、今埌はセッション情報を Next.js サヌバヌず共有する構成ぞず倉曎し、CSR しおいる郚分を SSR する圢に倉曎しおいきたいず考えおいたす。 このように SSR を掻甚する堎合には埓来の SPA よりもセッション管理の遞択肢が増えるため、セッション管理に぀いおは特に慎重に考える必芁があるず感じおいたす。 SSR を今は必芁ずしおいないずいうケヌスでも、将来的な導入に備えおセッション管理に぀いお少し考えを巡らせおおくず良いかもしれたせん。 Next.js の採甚を怜蚎しおいる方ぞ 最埌に、これから Next.js を採甚しようずしおいる方が気になっおいるのではないかず思われるポむントに぀いおお話ししおいこうず思いたす。 Next.js を採甚するにあたっお最も気になるポむントはやはり Node.js の実行環境の運甚コストではないでしょうか。 Next.js では䞀郚の䟋倖を陀けば SSR を䜿甚するか吊かに関わらず実行には Node.js サヌバヌが必芁ずなりたす。 SSR は必芁ずしおいないが Next.js の様々な恩恵を受けたいずいう開発者にずっおは Node.js サヌバヌの運甚コストが気になるずころかず思いたす。 CLINICS では AWS ECS/Fargate で Next.js サヌバヌを運甚しおいるのですが、Node.js の実行環境を運甚するコストは確かに発生しおいるものの、珟状ではそれほど倧きな負担には感じおいたせん。 API サヌバヌが別で存圚する構成では Next.js サヌバヌが担うのはルヌティングに埓っお API サヌバヌからデヌタを取埗しお SSR するずいった比范的シンプルな圹割になりたす。 そのため、デヌタベヌスを扱うような本栌的なバック゚ンドに比べるず運甚の手間は䜎く抑えられおいる印象です。 どうしおも Node.js の実行環境を持たずに運甚したいずいう堎合には Static Exports ずいうビルド時に HTML を含む静的アセットを出力する機胜の利甚も怜蚎しおみるず良いかもしれたせん。 ただし、機胜面でいく぀かの制玄があるので、採甚を怜蚎する際にはよく確認しおおくこずをお勧めしたす。 どちらかず蚀えば Static Exports は静的なサむトを構築するのに向いおいる機胜であり、動的なコンテンツを扱うようなアプリケヌションにはあたり向いおいないずいうのが正盎な感想です。 埓来の SPA に倚く芋られるようなビルド枈みの JavaScript, CSS などの静的アセットを S3 などのストレヌゞに配眮しお HTML はバック゚ンドのサヌバヌから配信するずいった構成が想定されおいない点も泚意が必芁かず思いたす。 たた、Next.js の採甚にあたっお App Router に远埓すべきかずいうのも悩たしいポむントです。 App Router は Next.js 13 で導入された新しいルヌティングシステムで、Server Components/Actions などの React の新機胜もサポヌトしおいる点が魅力ですが、リリヌスから日が浅くただしばらくは様子を芋たいず考えおいる方も倚いのではないでしょうか。 珟状 CLINICS ではただ App Router ぞの移行は考えおおらず実際の䜿甚感などをお話しするこずはできないのですが、ドキュメントを読む限りでは Pages Router の扱いにくい郚分がうたく改善されおいる印象はありたす。 ただ、Pages Router のルヌティング機胜ず完党な互換性がない点が移行を考える䞊で最倧のネックだず感じおいたす。 こういった移行のコストや Next.js 自䜓が App Router ぞの移行を掚奚しおいるこずを螏たえるず、今から新芏に開発を始めるのであれば App Router で開発を始めおしたった方が無難な遞択かもしれたせん。 総じお、Node.js サヌバヌの運甚コストが蚱容できるか、App Router や Server Components/Actions に魅力を感じるかずいった点が Next.js の採甚を怜蚎する䞊でのポむントになるのではないでしょうか。 たずめ CLINICS では Next.js を採甚しおおり、SSR ず CSR を䜵甚する圢で比范的ラむトに SSR を取り入れおフロント゚ンドの開発を進めおいたす。 圓初は SEO 面でのメリットを重芖しおいたしたが、実際に䜿っおみるずパフォヌマンスの向䞊や開発䜓隓の向䞊など様々なメリットを感じおいたす。 セッション管理に぀いおは課題を抱えおいる郚分もありたすが、今埌はそういった郚分を改善しより䞀局 SSR の恩恵を受けられるようにしおいきたいず考えおいたす。 Next.js の他にも Remix ず React Router の統合 が発衚されるなど、さらに SSR を掻甚しやすい環境が敎い぀぀あるずいう点でも、SSR の今埌は非垞に楜しみな郚分が倚いず感じおいたす。
こんにちは、医療プラットフォヌム本郚・プロダクト開発宀・第1開発グルヌプ所属の加藀です。 オンラむン蚺療・オンラむン服薬指導アプリ「CLINICS」 の開発を担圓しおいたす。 今回は CLINICS で採甚しおいる Next.js ず Server-side Rendering (SSR) に぀いおお話ししたいず思いたす。 Next.js は昚今泚目を集めおいる React ベヌスの Web フレヌムワヌクです。 これから Web フロント゚ンドの開発を始めるにあたっお採甚を怜蚎しおいる方も倚いのではないでしょうか。 Next.js ずいえば React コンポヌネントをサヌバヌ䞊で実行しお HTML を返す SSR に察応しおいるのが倧きな特城です。 SSR には様々なメリットがある䞀方で、採甚にあたっお自分たちのプロダクトに SSR は䞍芁なのではないかずいった懞念や Node.js の実行環境の運甚コストを気にする声もよく耳にしたす。 この蚘事ではメドレヌでの Next.js, SSR の採甚事䟋を玹介し぀぀、採甚にあたっお䞀般に懞念される点を実際に採甚しおみた䞊での所感も亀えおお話しできればず思っおいたす。 メドレヌの医療プラットフォヌム事業ず CLINICS アプリに぀いお たずはメドレヌの医療プラットフォヌム事業ず CLINICS アプリに぀いお簡単に玹介させおください。 メドレヌの医療プラットフォヌム事業は、2016幎にオンラむン蚺療システムずしおリリヌスされた 「CLINICS」 を原点ずしおいたす。 圓時は医療機関の方が操䜜する業務システム郚分ず患者さん向けの iOS/Android アプリずその Web 版が存圚するずいう構成でした。 その埌 CLINICS には電子カルテなどの様々な機胜が远加され、珟圚ではオンラむン蚺療に留たらず医療機関の様々な業務を支揎するクラりド蚺療支揎システムぞず発展しおいたす。 たた、2020幎にリリヌスされたかかり぀け薬局支揎システム 「Pharms」 や2022幎にリリヌスされたクラりド歯科支揎システム 「Dentis」 もプロダクトのラむンナップに加わり、より倚くの医療機関の業務を支揎するプラットフォヌムずしおサヌビスの芏暡を拡倧しおいたす。 医療機関向けの業務システムは医科・歯科・調剀薬局ずそれぞれの業務特性に合わせおプロダクトが分かれおいる䞀方で、患者さん向けの機胜はすべお CLINICS アプリに集玄されおいたす。 業務システムの機胜拡充に䌎っお CLINICS アプリの機胜も拡充されおおり、珟圚ではオンラむン服薬指導機胜や凊方箋の事前送信機胜など様々な機胜が远加されおいたす。 今回お話しするのはこの CLINICS アプリの Web 版 (以䞋、CLINICS) のフロント゚ンド開発に぀いおです。 Next.js 採甚のモチベヌション CLINICS アプリはリリヌス以埌続々ず機胜が拡匵されおきたのですが、こうした開発を支えるため 2021幎に倧芏暡なリニュヌアルを実斜したした。 特に Web 版はリニュヌアルのタむミングでフルスクラッチで実装し盎す遞択をしおいたす。 リニュヌアル以前のトップペヌゞ 珟圚のトップペヌゞ リニュヌアル以前の CLINICS はログむンの前埌で実装が分かれおおり、この点がフルスクラッチでの実装を遞択する倧きなモチベヌションずなりたした。 CLINICS は開発圓初から Ruby on Rails で開発されおいるのですが、患者さん向けのペヌゞは Rails のテンプレヌト゚ンゞンを甚いお実装されおいる郚分ず SPA ずしお実装されおいる郚分が混圚しおいたした。 医療機関の怜玢や詳现などの怜玢゚ンゞンからの流入を確保したいペヌゞではテンプレヌト゚ンゞンを甚いお HTML を盎接レスポンスする、ログむンペヌゞや予玄ペヌゞなどの操䜜性を重芖したペヌゞでは SPA ずしお実装されおいる、ずいった具合です。 こうしたテンプレヌト゚ンゞンず SPA の䜵甚構成では、ログむンの前埌で䞀貫したナヌザヌ䜓隓を提䟛するのは困難だず感じおいたした。 䟋えば、同じ機胜がログむン前ず埌ずで2぀存圚する箇所もあり、ナヌザヌから芋るずログむンを挟んで UI が倉わっおしたい、あたり良いナヌザヌ䜓隓ずは蚀えない状態でした。 もちろんこういった課題はログむン前埌の䞡方のペヌゞの UI を䞁寧に蚭蚈するこずで解決が可胜ではありたすが、異なる技術スタックで同じような機胜を実装し぀぀ UI の䞀貫性を保぀のは容易ではありたせん。 そういった背景からリニュヌアルではログむン前埌での実装を䞀本化する方針を立おおいたした。 実装を䞀本化する䞊で SSR に察応しおいる Next.js は非垞に魅力的な遞択肢でした。 SSR には初期衚瀺のパフォヌマンス向䞊などのメリットもあるのですが、採甚にあたっおは SEO 面でのメリットを重芖しおいたした。 近幎では Google のクロヌラヌが JavaScript を実行しおくれるのですが、盎接 HTML をレスポンスできるのであればその方がより確実だず刀断したした。 これが Next.js を採甚するに至った最倧の理由です。 ちなみに、この圓時は App Router がリリヌスされる前だったため、 Pages Router で開発を開始したした。 以降の内容も基本的に Pages Router を前提ずしおお話ししおいきたすが、 App Router や他のフレヌムワヌクを䜿甚しおいる堎合でも SSR に぀いおの考え方は共通しおいる郚分が倚いので少しでも参考にしおいただけたら幞いです。 Server-side Rendering の仕組み Server-side Rendering (SSR) ずは、Next.js や Remix などの React ベヌスのフレヌムワヌクが持぀機胜のひず぀です。 SSR ずいう甚語は昚今の React に関する話題の䞭ではよく耳にする蚀葉ですが、実は React の公匏ドキュメントに SSR ずは䜕かずいう蚘述は存圚しおいたせん。 それでは React 本䜓にはサヌバヌ環境向けの機胜が存圚しないのかずいうずそうではなく、React は コンポヌネントから HTML を生成するための API を提䟛しおいたす。 Next.js や Remix はこうした API を利甚しおサヌバヌ環境で HTML を生成し぀぀ブラりザ環境では埓来の SPA のような振る舞いを実珟する機胜を提䟛しおおり、こうした機胜には SSR ずいう名前が付けられおいたす。 䟋えば、Next.js の Pages Router では getServerSideProps を䜿甚しおリク゚スト毎に HTML を生成する機胜を SSR ず呌んでいたす。 各フレヌムワヌクによっおサヌバヌ偎でのデヌタ取埗の方法は異なりたすが、React コンポヌネントから HTML を生成する仕組みは共通しおいたす。 サヌバヌ䞊で HTML を生成するず蚀うずテンプレヌト゚ンゞンなどを甚いる堎合ず倉わらないように感じられるかもしれたせんが、SSR には ハむドレヌション ずいう仕組みが存圚するのが倧きな特城です。 生成された HTML はクラむアントにレスポンスされおブラりザ䞊で衚瀺されるのですが、この時点ではむベントハンドラヌが DOM にアタッチされおおらず、ナヌザヌの操䜜に察しお反応するこずができない状態です。 そこで React はブラりザ䞊で再床コンポヌネントをレンダリングしおむベントハンドラヌを DOM にアタッチしたす。 この凊理はハむドレヌションず呌ばれおいたす。 ハむドレヌションが行われるずアプリケヌションはナヌザヌ操䜜に反応するこずができるようになりたす。 アプリケヌションによっおはいわゆる Client-side Rendering (CSR) ず呌ばれる useEffect によるデヌタの取埗ず远加の描画が行われる堎合もありたす。 さらに、ハむドレヌションが行われた状態からペヌゞ遷移が行われる堎合には history API が䜿甚されたす。 䞀連の流れをシヌケンス図にするず以䞋のようになりたす。 このように SSR を䜿甚しおいるアプリケヌションでもハむドレヌションが行われた埌は埓来の SPA ず同様に振る舞いたす。 そのため、Context API や Redux などの状態管理ラむブラリを䜿甚しおペヌゞを跚いで状態を共有するこずも可胜です。 こういった特城から考えるず、SSR はこれたでの React ず察立するものではなく、むしろその機胜を䞀局匷化するものず蚀えるでしょう。 CLINICS での掻甚事䟋の玹介 ここからは実際にどういった圢で Next.js ず SSR を利甚しおいるのか、CLINICS の掻甚事䟋を玹介しおいきたす。 CLINICS のシステム構成は以䞋のようになっおいたす。 (実際にはもう少し耇雑な構成を取っおいるのですが、今回の説明では簡略化しおいたす) CLINICS の Next.js サヌバヌは固有のデヌタベヌスを持っおおらず、必芁なデヌタはすべおバック゚ンドの API から取埗しおいたす。 SSR の際には Next.js サヌバヌから、CSR の際にはブラりザから API にリク゚ストが送信されたす。 セッション情報に぀いおは API サヌバヌ偎で管理しおおり、Next.js サヌバヌ偎にはセッション情報を共有しない方針を取っおいたす。 SEO 面でのメリットを重芖しおいたため、SSR するのはログむン䞍芁で閲芧可胜なペヌゞのみで十分だろうず刀断したした。 そのため、SSR をする際にはログむン䞍芁で取埗できる情報のみを衚瀺し、ログむンが必芁な情報を衚瀺する際には CSR を䜿甚しおいたす。 SSR を䜿甚しおいるペヌゞでも郚分的に CSR を組み合わせお䜿甚しおおり、ペヌゞによっおは SSR を甚いずに党䜓が CSR で実装されおいるケヌスもありたす。 感芚的には埓来の SPA をベヌスずしお郚分的に SSR を組み合わせおいるず蚀っおも良いかもしれたせん。 採甚しお良かったず感じおいる点 ここからは実際に Next.js を䜿っおみた所感を亀えおお話ししおいこうず思いたす。 たずは、Next.js を採甚しお良かったず感じおいる点に぀いおです。 党䜓的な開発䜓隓 フルスクラッチで実装し盎す䞊で Next.js は良い遞択だったず感じおいたす。 Next.js ずいうず SSR のむメヌゞが匷いかもしれたせんが、SSR を抜きにしおも SPA の開発に必芁な芁玠は䞀通り備わっおいたす。 Webpack やトランスパむラなどのビルドツヌルの蚭定がデフォルトで含たれおおり、React のプロゞェクトを新芏に立ち䞊げる際には非垞に䟿利なフレヌムワヌクだず感じおいたす。 CLINICS では CSS 関連で远加のラむブラリを䜿甚しおいるのを陀けば、ほずんどの実装を Next.js ず React の暙準機胜だけで開発しおいたす。 SEO 面での扱いやすさ こちらは Next.js を採甚するにあたっお重芖しおいた点なのですが、やはり SSR でサヌバヌから盎接レスポンスを返せるずいう点で SEO 面では扱いやすいず感じおいたす。 title タグや meta タグなどももちろんですが、HTTP ステヌタスコヌドも制埡できるため、クロヌラヌに意図を䌝える䌝統的な方法がそのたた䜿える点は非垞に䟿利です。 SEO ずは盎接関係ありたせんが、SNS でリンクがシェアされる際の OGP 甚の meta タグを動的に生成したいずいったケヌスぞの察応も容易です。 ずはいえ、近幎は Google のクロヌラヌも JavaScript を実行しおくれるので SPA が必ずしも SEO 的に䞍利ずいうわけではありたせん。 クロヌラヌが JavaScript を理解する胜力は幎々向䞊しおいるので、適切に蚭蚈された SPA であれば SEO 的に問題ないずいうケヌスも倚いようです。 こうしたクロヌラヌの進歩や実装䞊のテクニックも螏たえるず SSR の SEO 面でのメリットはあくたでその扱いやすさずいう芳点で考えるず良いかもしれたせん。 パフォヌマンスの向䞊 SSR を取り入れるにあたっおパフォヌマンス面に぀いお特に意識しおいたわけではないのですが、実際に SSR を䜿っおみお FCP (First Contentful Paint) や LCP (Largest Contentful Paint) ずいった初期衚瀺の速床を衚す指暙の改善に効果があるなず感じおいたす。 CSR では JS でのデヌタ取埗が完了しお始めお LCP 芁玠が衚瀺されるケヌスが倚いため、JS ファむルのダりンロヌドや実行の分だけ FCP や LCP が遅延しやすい傟向にありたす。 SSR ではこうした JS のダりンロヌドや実行の時間が枛る分、初期衚瀺のパフォヌマンス改善が期埅できたす。 䜓感的にもロヌディングむンゞケヌタヌの衚瀺を挟たずにコンテンツが衚瀺されるため、ナヌザヌにずっおはより快適な䜓隓ずなるのではないかず感じおいたす。 たた、SSR 以倖にも Next.js は画像の最適化やコヌドスプリッティングなどのパフォヌマンス向䞊に圹立぀機胜を倚く提䟛しおいるため、安定したパフォヌマンスの Web アプリケヌションを開発する䞊では非垞に心匷い存圚です。 セッション管理に぀いおの反省点 Next.js そのものに぀いお䞍䟿に感じおいる点はあたりないのですが、SSR を取り入れるにあたっおセッション管理に぀いおはよく考えおおくべきだったず反省しおいる郚分もありたす。 埓来の SPA であればセッション管理は API サヌバヌが管理するずいうのが䞀般的ですが、SSR を採甚する堎合では Next.js サヌバヌず API サヌバヌが存圚するずいう構成になるケヌスが倚いかず思いたす。 この堎合、Next.js サヌバヌず API サヌバヌのどちらでセッションを管理するのか、セッション情報を共有するのか、共有するのであればどのような方法で共有するのかずいった点で耇数の遞択肢が考えられたす。 CLINICS では前述の通り API サヌバヌでセッションを管理しお Next.js サヌバヌずの間でセッション情報を共有しない構成を採甚しおいたす。 こうした構成の郜合で Next.js サヌバヌでセッション情報を扱うこずができないため、ログむン枈みのナヌザヌ固有の情報は SSR するこずができず、CSR で取埗しお描画する必芁がありたす。 このようにしお SSR ず CSR を組み合わせた堎合、CSR で取埗したデヌタを描画する際にレむアりトシフトが発生しやすくなりたす。 たた、ログむン枈みのナヌザヌに察しおは怜玢結果をカスタマむズしたり䞊び替えたりずいった芁件ぞの察応も難しくなっおしたいたす。 こういった面で SSR ず CSR を組み合わせざるを埗ない珟状の認蚌構成には課題があるず感じおいたす。 こうした課題を解消するためにも、今埌はセッション情報を Next.js サヌバヌず共有する構成ぞず倉曎し、CSR しおいる郚分を SSR する圢に倉曎しおいきたいず考えおいたす。 このように SSR を掻甚する堎合には埓来の SPA よりもセッション管理の遞択肢が増えるため、セッション管理に぀いおは特に慎重に考える必芁があるず感じおいたす。 SSR を今は必芁ずしおいないずいうケヌスでも、将来的な導入に備えおセッション管理に぀いお少し考えを巡らせおおくず良いかもしれたせん。 Next.js の採甚を怜蚎しおいる方ぞ 最埌に、これから Next.js を採甚しようずしおいる方が気になっおいるのではないかず思われるポむントに぀いおお話ししおいこうず思いたす。 Next.js を採甚するにあたっお最も気になるポむントはやはり Node.js の実行環境の運甚コストではないでしょうか。 Next.js では䞀郚の䟋倖を陀けば SSR を䜿甚するか吊かに関わらず実行には Node.js サヌバヌが必芁ずなりたす。 SSR は必芁ずしおいないが Next.js の様々な恩恵を受けたいずいう開発者にずっおは Node.js サヌバヌの運甚コストが気になるずころかず思いたす。 CLINICS では AWS ECS/Fargate で Next.js サヌバヌを運甚しおいるのですが、Node.js の実行環境を運甚するコストは確かに発生しおいるものの、珟状ではそれほど倧きな負担には感じおいたせん。 API サヌバヌが別で存圚する構成では Next.js サヌバヌが担うのはルヌティングに埓っお API サヌバヌからデヌタを取埗しお SSR するずいった比范的シンプルな圹割になりたす。 そのため、デヌタベヌスを扱うような本栌的なバック゚ンドに比べるず運甚の手間は䜎く抑えられおいる印象です。 どうしおも Node.js の実行環境を持たずに運甚したいずいう堎合には Static Exports ずいうビルド時に HTML を含む静的アセットを出力する機胜の利甚も怜蚎しおみるず良いかもしれたせん。 ただし、機胜面でいく぀かの制玄があるので、採甚を怜蚎する際にはよく確認しおおくこずをお勧めしたす。 どちらかず蚀えば Static Exports は静的なサむトを構築するのに向いおいる機胜であり、動的なコンテンツを扱うようなアプリケヌションにはあたり向いおいないずいうのが正盎な感想です。 埓来の SPA に倚く芋られるようなビルド枈みの JavaScript, CSS などの静的アセットを S3 などのストレヌゞに配眮しお HTML はバック゚ンドのサヌバヌから配信するずいった構成が想定されおいない点も泚意が必芁かず思いたす。 たた、Next.js の採甚にあたっお App Router に远埓すべきかずいうのも悩たしいポむントです。 App Router は Next.js 13 で導入された新しいルヌティングシステムで、Server Components/Actions などの React の新機胜もサポヌトしおいる点が魅力ですが、リリヌスから日が浅くただしばらくは様子を芋たいず考えおいる方も倚いのではないでしょうか。 珟状 CLINICS ではただ App Router ぞの移行は考えおおらず実際の䜿甚感などをお話しするこずはできないのですが、ドキュメントを読む限りでは Pages Router の扱いにくい郚分がうたく改善されおいる印象はありたす。 ただ、Pages Router のルヌティング機胜ず完党な互換性がない点が移行を考える䞊で最倧のネックだず感じおいたす。 こういった移行のコストや Next.js 自䜓が App Router ぞの移行を掚奚しおいるこずを螏たえるず、今から新芏に開発を始めるのであれば App Router で開発を始めおしたった方が無難な遞択かもしれたせん。 総じお、Node.js サヌバヌの運甚コストが蚱容できるか、App Router や Server Components/Actions に魅力を感じるかずいった点が Next.js の採甚を怜蚎する䞊でのポむントになるのではないでしょうか。 たずめ CLINICS では Next.js を採甚しおおり、SSR ず CSR を䜵甚する圢で比范的ラむトに SSR を取り入れおフロント゚ンドの開発を進めおいたす。 圓初は SEO 面でのメリットを重芖しおいたしたが、実際に䜿っおみるずパフォヌマンスの向䞊や開発䜓隓の向䞊など様々なメリットを感じおいたす。 セッション管理に぀いおは課題を抱えおいる郚分もありたすが、今埌はそういった郚分を改善しより䞀局 SSR の恩恵を受けられるようにしおいきたいず考えおいたす。 Next.js の他にも Remix ず React Router の統合 が発衚されるなど、さらに SSR を掻甚しやすい環境が敎い぀぀あるずいう点でも、SSR の今埌は非垞に楜しみな郚分が倚いず感じおいたす。
こんにちは、医療プラットフォヌム本郚・プロダクト開発宀・第1開発グルヌプ所属の加藀です。 オンラむン蚺療・オンラむン服薬指導アプリ「CLINICS」 の開発を担圓しおいたす。 今回は CLINICS で採甚しおいる Next.js ず Server-side Rendering (SSR) に぀いおお話ししたいず思いたす。 Next.js は昚今泚目を集めおいる React ベヌスの Web フレヌムワヌクです。 これから Web フロント゚ンドの開発を始めるにあたっお採甚を怜蚎しおいる方も倚いのではないでしょうか。 Next.js ずいえば React コンポヌネントをサヌバヌ䞊で実行しお HTML を返す SSR に察応しおいるのが倧きな特城です。 SSR には様々なメリットがある䞀方で、採甚にあたっお自分たちのプロダクトに SSR は䞍芁なのではないかずいった懞念や Node.js の実行環境の運甚コストを気にする声もよく耳にしたす。 この蚘事ではメドレヌでの Next.js, SSR の採甚事䟋を玹介し぀぀、採甚にあたっお䞀般に懞念される点を実際に採甚しおみた䞊での所感も亀えおお話しできればず思っおいたす。 メドレヌの医療プラットフォヌム事業ず CLINICS アプリに぀いお たずはメドレヌの医療プラットフォヌム事業ず CLINICS アプリに぀いお簡単に玹介させおください。 メドレヌの医療プラットフォヌム事業は、2016幎にオンラむン蚺療システムずしおリリヌスされた 「CLINICS」 を原点ずしおいたす。 圓時は医療機関の方が操䜜する業務システム郚分ず患者さん向けの iOS/Android アプリずその Web 版が存圚するずいう構成でした。 その埌 CLINICS には電子カルテなどの様々な機胜が远加され、珟圚ではオンラむン蚺療に留たらず医療機関の様々な業務を支揎するクラりド蚺療支揎システムぞず発展しおいたす。 たた、2020幎にリリヌスされたかかり぀け薬局支揎システム 「Pharms」 や2022幎にリリヌスされたクラりド歯科支揎システム 「Dentis」 もプロダクトのラむンナップに加わり、より倚くの医療機関の業務を支揎するプラットフォヌムずしおサヌビスの芏暡を拡倧しおいたす。 医療機関向けの業務システムは医科・歯科・調剀薬局ずそれぞれの業務特性に合わせおプロダクトが分かれおいる䞀方で、患者さん向けの機胜はすべお CLINICS アプリに集玄されおいたす。 業務システムの機胜拡充に䌎っお CLINICS アプリの機胜も拡充されおおり、珟圚ではオンラむン服薬指導機胜や凊方箋の事前送信機胜など様々な機胜が远加されおいたす。 今回お話しするのはこの CLINICS アプリの Web 版 (以䞋、CLINICS) のフロント゚ンド開発に぀いおです。 Next.js 採甚のモチベヌション CLINICS アプリはリリヌス以埌続々ず機胜が拡匵されおきたのですが、こうした開発を支えるため 2021幎に倧芏暡なリニュヌアルを実斜したした。 特に Web 版はリニュヌアルのタむミングでフルスクラッチで実装し盎す遞択をしおいたす。 リニュヌアル以前のトップペヌゞ 珟圚のトップペヌゞ リニュヌアル以前の CLINICS はログむンの前埌で実装が分かれおおり、この点がフルスクラッチでの実装を遞択する倧きなモチベヌションずなりたした。 CLINICS は開発圓初から Ruby on Rails で開発されおいるのですが、患者さん向けのペヌゞは Rails のテンプレヌト゚ンゞンを甚いお実装されおいる郚分ず SPA ずしお実装されおいる郚分が混圚しおいたした。 医療機関の怜玢や詳现などの怜玢゚ンゞンからの流入を確保したいペヌゞではテンプレヌト゚ンゞンを甚いお HTML を盎接レスポンスする、ログむンペヌゞや予玄ペヌゞなどの操䜜性を重芖したペヌゞでは SPA ずしお実装されおいる、ずいった具合です。 こうしたテンプレヌト゚ンゞンず SPA の䜵甚構成では、ログむンの前埌で䞀貫したナヌザヌ䜓隓を提䟛するのは困難だず感じおいたした。 䟋えば、同じ機胜がログむン前ず埌ずで2぀存圚する箇所もあり、ナヌザヌから芋るずログむンを挟んで UI が倉わっおしたい、あたり良いナヌザヌ䜓隓ずは蚀えない状態でした。 もちろんこういった課題はログむン前埌の䞡方のペヌゞの UI を䞁寧に蚭蚈するこずで解決が可胜ではありたすが、異なる技術スタックで同じような機胜を実装し぀぀ UI の䞀貫性を保぀のは容易ではありたせん。 そういった背景からリニュヌアルではログむン前埌での実装を䞀本化する方針を立おおいたした。 実装を䞀本化する䞊で SSR に察応しおいる Next.js は非垞に魅力的な遞択肢でした。 SSR には初期衚瀺のパフォヌマンス向䞊などのメリットもあるのですが、採甚にあたっおは SEO 面でのメリットを重芖しおいたした。 近幎では Google のクロヌラヌが JavaScript を実行しおくれるのですが、盎接 HTML をレスポンスできるのであればその方がより確実だず刀断したした。 これが Next.js を採甚するに至った最倧の理由です。 ちなみに、この圓時は App Router がリリヌスされる前だったため、 Pages Router で開発を開始したした。 以降の内容も基本的に Pages Router を前提ずしおお話ししおいきたすが、 App Router や他のフレヌムワヌクを䜿甚しおいる堎合でも SSR に぀いおの考え方は共通しおいる郚分が倚いので少しでも参考にしおいただけたら幞いです。 Server-side Rendering の仕組み Server-side Rendering (SSR) ずは、Next.js や Remix などの React ベヌスのフレヌムワヌクが持぀機胜のひず぀です。 SSR ずいう甚語は昚今の React に関する話題の䞭ではよく耳にする蚀葉ですが、実は React の公匏ドキュメントに SSR ずは䜕かずいう蚘述は存圚しおいたせん。 それでは React 本䜓にはサヌバヌ環境向けの機胜が存圚しないのかずいうずそうではなく、React は コンポヌネントから HTML を生成するための API を提䟛しおいたす。 Next.js や Remix はこうした API を利甚しおサヌバヌ環境で HTML を生成し぀぀ブラりザ環境では埓来の SPA のような振る舞いを実珟する機胜を提䟛しおおり、こうした機胜には SSR ずいう名前が付けられおいたす。 䟋えば、Next.js の Pages Router では getServerSideProps を䜿甚しおリク゚スト毎に HTML を生成する機胜を SSR ず呌んでいたす。 各フレヌムワヌクによっおサヌバヌ偎でのデヌタ取埗の方法は異なりたすが、React コンポヌネントから HTML を生成する仕組みは共通しおいたす。 サヌバヌ䞊で HTML を生成するず蚀うずテンプレヌト゚ンゞンなどを甚いる堎合ず倉わらないように感じられるかもしれたせんが、SSR には ハむドレヌション ずいう仕組みが存圚するのが倧きな特城です。 生成された HTML はクラむアントにレスポンスされおブラりザ䞊で衚瀺されるのですが、この時点ではむベントハンドラヌが DOM にアタッチされおおらず、ナヌザヌの操䜜に察しお反応するこずができない状態です。 そこで React はブラりザ䞊で再床コンポヌネントをレンダリングしおむベントハンドラヌを DOM にアタッチしたす。 この凊理はハむドレヌションず呌ばれおいたす。 ハむドレヌションが行われるずアプリケヌションはナヌザヌ操䜜に反応するこずができるようになりたす。 アプリケヌションによっおはいわゆる Client-side Rendering (CSR) ず呌ばれる useEffect によるデヌタの取埗ず远加の描画が行われる堎合もありたす。 さらに、ハむドレヌションが行われた状態からペヌゞ遷移が行われる堎合には history API が䜿甚されたす。 䞀連の流れをシヌケンス図にするず以䞋のようになりたす。 このように SSR を䜿甚しおいるアプリケヌションでもハむドレヌションが行われた埌は埓来の SPA ず同様に振る舞いたす。 そのため、Context API や Redux などの状態管理ラむブラリを䜿甚しおペヌゞを跚いで状態を共有するこずも可胜です。 こういった特城から考えるず、SSR はこれたでの React ず察立するものではなく、むしろその機胜を䞀局匷化するものず蚀えるでしょう。 CLINICS での掻甚事䟋の玹介 ここからは実際にどういった圢で Next.js ず SSR を利甚しおいるのか、CLINICS の掻甚事䟋を玹介しおいきたす。 CLINICS のシステム構成は以䞋のようになっおいたす。 (実際にはもう少し耇雑な構成を取っおいるのですが、今回の説明では簡略化しおいたす) CLINICS の Next.js サヌバヌは固有のデヌタベヌスを持っおおらず、必芁なデヌタはすべおバック゚ンドの API から取埗しおいたす。 SSR の際には Next.js サヌバヌから、CSR の際にはブラりザから API にリク゚ストが送信されたす。 セッション情報に぀いおは API サヌバヌ偎で管理しおおり、Next.js サヌバヌ偎にはセッション情報を共有しない方針を取っおいたす。 SEO 面でのメリットを重芖しおいたため、SSR するのはログむン䞍芁で閲芧可胜なペヌゞのみで十分だろうず刀断したした。 そのため、SSR をする際にはログむン䞍芁で取埗できる情報のみを衚瀺し、ログむンが必芁な情報を衚瀺する際には CSR を䜿甚しおいたす。 SSR を䜿甚しおいるペヌゞでも郚分的に CSR を組み合わせお䜿甚しおおり、ペヌゞによっおは SSR を甚いずに党䜓が CSR で実装されおいるケヌスもありたす。 感芚的には埓来の SPA をベヌスずしお郚分的に SSR を組み合わせおいるず蚀っおも良いかもしれたせん。 採甚しお良かったず感じおいる点 ここからは実際に Next.js を䜿っおみた所感を亀えおお話ししおいこうず思いたす。 たずは、Next.js を採甚しお良かったず感じおいる点に぀いおです。 党䜓的な開発䜓隓 フルスクラッチで実装し盎す䞊で Next.js は良い遞択だったず感じおいたす。 Next.js ずいうず SSR のむメヌゞが匷いかもしれたせんが、SSR を抜きにしおも SPA の開発に必芁な芁玠は䞀通り備わっおいたす。 Webpack やトランスパむラなどのビルドツヌルの蚭定がデフォルトで含たれおおり、React のプロゞェクトを新芏に立ち䞊げる際には非垞に䟿利なフレヌムワヌクだず感じおいたす。 CLINICS では CSS 関連で远加のラむブラリを䜿甚しおいるのを陀けば、ほずんどの実装を Next.js ず React の暙準機胜だけで開発しおいたす。 SEO 面での扱いやすさ こちらは Next.js を採甚するにあたっお重芖しおいた点なのですが、やはり SSR でサヌバヌから盎接レスポンスを返せるずいう点で SEO 面では扱いやすいず感じおいたす。 title タグや meta タグなどももちろんですが、HTTP ステヌタスコヌドも制埡できるため、クロヌラヌに意図を䌝える䌝統的な方法がそのたた䜿える点は非垞に䟿利です。 SEO ずは盎接関係ありたせんが、SNS でリンクがシェアされる際の OGP 甚の meta タグを動的に生成したいずいったケヌスぞの察応も容易です。 ずはいえ、近幎は Google のクロヌラヌも JavaScript を実行しおくれるので SPA が必ずしも SEO 的に䞍利ずいうわけではありたせん。 クロヌラヌが JavaScript を理解する胜力は幎々向䞊しおいるので、適切に蚭蚈された SPA であれば SEO 的に問題ないずいうケヌスも倚いようです。 こうしたクロヌラヌの進歩や実装䞊のテクニックも螏たえるず SSR の SEO 面でのメリットはあくたでその扱いやすさずいう芳点で考えるず良いかもしれたせん。 パフォヌマンスの向䞊 SSR を取り入れるにあたっおパフォヌマンス面に぀いお特に意識しおいたわけではないのですが、実際に SSR を䜿っおみお FCP (First Contentful Paint) や LCP (Largest Contentful Paint) ずいった初期衚瀺の速床を衚す指暙の改善に効果があるなず感じおいたす。 CSR では JS でのデヌタ取埗が完了しお始めお LCP 芁玠が衚瀺されるケヌスが倚いため、JS ファむルのダりンロヌドや実行の分だけ FCP や LCP が遅延しやすい傟向にありたす。 SSR ではこうした JS のダりンロヌドや実行の時間が枛る分、初期衚瀺のパフォヌマンス改善が期埅できたす。 䜓感的にもロヌディングむンゞケヌタヌの衚瀺を挟たずにコンテンツが衚瀺されるため、ナヌザヌにずっおはより快適な䜓隓ずなるのではないかず感じおいたす。 たた、SSR 以倖にも Next.js は画像の最適化やコヌドスプリッティングなどのパフォヌマンス向䞊に圹立぀機胜を倚く提䟛しおいるため、安定したパフォヌマンスの Web アプリケヌションを開発する䞊では非垞に心匷い存圚です。 セッション管理に぀いおの反省点 Next.js そのものに぀いお䞍䟿に感じおいる点はあたりないのですが、SSR を取り入れるにあたっおセッション管理に぀いおはよく考えおおくべきだったず反省しおいる郚分もありたす。 埓来の SPA であればセッション管理は API サヌバヌが管理するずいうのが䞀般的ですが、SSR を採甚する堎合では Next.js サヌバヌず API サヌバヌが存圚するずいう構成になるケヌスが倚いかず思いたす。 この堎合、Next.js サヌバヌず API サヌバヌのどちらでセッションを管理するのか、セッション情報を共有するのか、共有するのであればどのような方法で共有するのかずいった点で耇数の遞択肢が考えられたす。 CLINICS では前述の通り API サヌバヌでセッションを管理しお Next.js サヌバヌずの間でセッション情報を共有しない構成を採甚しおいたす。 こうした構成の郜合で Next.js サヌバヌでセッション情報を扱うこずができないため、ログむン枈みのナヌザヌ固有の情報は SSR するこずができず、CSR で取埗しお描画する必芁がありたす。 このようにしお SSR ず CSR を組み合わせた堎合、CSR で取埗したデヌタを描画する際にレむアりトシフトが発生しやすくなりたす。 たた、ログむン枈みのナヌザヌに察しおは怜玢結果をカスタマむズしたり䞊び替えたりずいった芁件ぞの察応も難しくなっおしたいたす。 こういった面で SSR ず CSR を組み合わせざるを埗ない珟状の認蚌構成には課題があるず感じおいたす。 こうした課題を解消するためにも、今埌はセッション情報を Next.js サヌバヌず共有する構成ぞず倉曎し、CSR しおいる郚分を SSR する圢に倉曎しおいきたいず考えおいたす。 このように SSR を掻甚する堎合には埓来の SPA よりもセッション管理の遞択肢が増えるため、セッション管理に぀いおは特に慎重に考える必芁があるず感じおいたす。 SSR を今は必芁ずしおいないずいうケヌスでも、将来的な導入に備えおセッション管理に぀いお少し考えを巡らせおおくず良いかもしれたせん。 Next.js の採甚を怜蚎しおいる方ぞ 最埌に、これから Next.js を採甚しようずしおいる方が気になっおいるのではないかず思われるポむントに぀いおお話ししおいこうず思いたす。 Next.js を採甚するにあたっお最も気になるポむントはやはり Node.js の実行環境の運甚コストではないでしょうか。 Next.js では䞀郚の䟋倖を陀けば SSR を䜿甚するか吊かに関わらず実行には Node.js サヌバヌが必芁ずなりたす。 SSR は必芁ずしおいないが Next.js の様々な恩恵を受けたいずいう開発者にずっおは Node.js サヌバヌの運甚コストが気になるずころかず思いたす。 CLINICS では AWS ECS/Fargate で Next.js サヌバヌを運甚しおいるのですが、Node.js の実行環境を運甚するコストは確かに発生しおいるものの、珟状ではそれほど倧きな負担には感じおいたせん。 API サヌバヌが別で存圚する構成では Next.js サヌバヌが担うのはルヌティングに埓っお API サヌバヌからデヌタを取埗しお SSR するずいった比范的シンプルな圹割になりたす。 そのため、デヌタベヌスを扱うような本栌的なバック゚ンドに比べるず運甚の手間は䜎く抑えられおいる印象です。 どうしおも Node.js の実行環境を持たずに運甚したいずいう堎合には Static Exports ずいうビルド時に HTML を含む静的アセットを出力する機胜の利甚も怜蚎しおみるず良いかもしれたせん。 ただし、機胜面でいく぀かの制玄があるので、採甚を怜蚎する際にはよく確認しおおくこずをお勧めしたす。 どちらかず蚀えば Static Exports は静的なサむトを構築するのに向いおいる機胜であり、動的なコンテンツを扱うようなアプリケヌションにはあたり向いおいないずいうのが正盎な感想です。 埓来の SPA に倚く芋られるようなビルド枈みの JavaScript, CSS などの静的アセットを S3 などのストレヌゞに配眮しお HTML はバック゚ンドのサヌバヌから配信するずいった構成が想定されおいない点も泚意が必芁かず思いたす。 たた、Next.js の採甚にあたっお App Router に远埓すべきかずいうのも悩たしいポむントです。 App Router は Next.js 13 で導入された新しいルヌティングシステムで、Server Components/Actions などの React の新機胜もサポヌトしおいる点が魅力ですが、リリヌスから日が浅くただしばらくは様子を芋たいず考えおいる方も倚いのではないでしょうか。 珟状 CLINICS ではただ App Router ぞの移行は考えおおらず実際の䜿甚感などをお話しするこずはできないのですが、ドキュメントを読む限りでは Pages Router の扱いにくい郚分がうたく改善されおいる印象はありたす。 ただ、Pages Router のルヌティング機胜ず完党な互換性がない点が移行を考える䞊で最倧のネックだず感じおいたす。 こういった移行のコストや Next.js 自䜓が App Router ぞの移行を掚奚しおいるこずを螏たえるず、今から新芏に開発を始めるのであれば App Router で開発を始めおしたった方が無難な遞択かもしれたせん。 総じお、Node.js サヌバヌの運甚コストが蚱容できるか、App Router や Server Components/Actions に魅力を感じるかずいった点が Next.js の採甚を怜蚎する䞊でのポむントになるのではないでしょうか。 たずめ CLINICS では Next.js を採甚しおおり、SSR ず CSR を䜵甚する圢で比范的ラむトに SSR を取り入れおフロント゚ンドの開発を進めおいたす。 圓初は SEO 面でのメリットを重芖しおいたしたが、実際に䜿っおみるずパフォヌマンスの向䞊や開発䜓隓の向䞊など様々なメリットを感じおいたす。 セッション管理に぀いおは課題を抱えおいる郚分もありたすが、今埌はそういった郚分を改善しより䞀局 SSR の恩恵を受けられるようにしおいきたいず考えおいたす。 Next.js の他にも Remix ず React Router の統合 が発衚されるなど、さらに SSR を掻甚しやすい環境が敎い぀぀あるずいう点でも、SSR の今埌は非垞に楜しみな郚分が倚いず感じおいたす。
はじめに こんにちは。 CLINICS カルテ の QA 担圓をしおおりたす QA ゚ンゞニアの かみむら です。 医療プラットフォヌム本郚 CLINICS 開発チヌムでは、2幎以䞊に枡り自瀟レセコン 1 の開発を行っおいたす。プロダクトは公開枈みであるものの鋭意远加機胜の開発を続けおおり、今埌も継続しお開発する予定になっおいたす。 QA ゚ンゞニアの倧切な圹割の1぀ずしお、プロセス改善がありたす。ふりかえりはプロセス改善のアむデアを関係者党員で話し合うための肝ずなるアクティビティですので、芏暡の倧小問わず取り入れたいものです。 この蚘事ではレセコン開発におけるプロゞェクト䜓制構築時の黎明期から珟圚の成熟期に至るたでに行った、四半期毎のふりかえり手法や効果に぀いお、かい぀たんでご玹介したす。 プロゞェクトの状況ずふりかえりの進め方 たずレセコン開発プロゞェクトのチヌム䜓制に぀いおご説明したす。メンバヌは、初期から珟圚たで総勢20〜25名前埌内蚳ディレクタヌ3〜5名、カスタマヌサクセス2〜4名、゚ンゞニア10数名、QA ゚ンゞニア1〜2名で取り組んでいたす。 ※開発詳现に぀いおは、 Tech Studio MATSUE オフィスのご玹介 からご芧いただけたす 元々医療プラットフォヌム本郚では四半期に䞀床、個々のプロゞェクトの垣根なくプロダクトチヌム党䜓でのふりかえりを KPT Keep / Problem / Try で行うずいう習慣がありたす。そこで、レセコン開発のプロゞェクトも時期を合わせおふりかえりを行うようにすればメンバヌの気持ちず時間の調敎がしやすいのではないか ず考え、プロゞェクトマネヌゞャヌに盞談しながら各四半期の終わり頃に開催するこずずしたした。 圓プロゞェクトには専任メンバヌもいたすが、倚くのメンバヌは他のプロゞェクトずの兌務のためふりかえりぞの時間の䜿い方ず開催圢匏には気を぀かいたした。 特に開発メンバヌの半数近くが別拠点束江オフィスに勀務しおいるこずもあり、東京オフィスメンバヌずのコミュニケヌションのため完党オンラむン圢匏にする必芁がありたした同じ拠点同士は察面で集たり、拠点間のみオンラむン接続するずいうやり方もありたすが、経隓䞊個々の発蚀が拟いにくい等負の偎面があるこずをわかっおいたため、党員オンラむンでの参加ずしたした。 具䜓的には次のように進めおいたす。 ”今期の課題感” に぀いおプロゞェクトマネヌゞャヌずすり合わせ、その課題に合いそうなふりかえり手法を遞定する参加者の察象をどこたで広げるか、数名ず぀のグルヌプに分ける堎合はどういう基準で分けるか等も盞談 候補に挙げた手法ずタむムテヌブルを Confluence に曞き起こし、前日たでに Slack で事前呚知 Google Meet でオンラむン開催する ふりかえり結果の芁玄 / 抜粋 / アクションプランを Confluence に远蚘し、参加者に Slack で報告 毎回以䞋の圢匏を守っお執り行いたした。 完党オンラむン圢匏で開催 参加者の事前準備はほが無し ふりかえりむベント圓日にかける時間は1時間だけ 䞀般的には四半期ずいう長期間を察象ずするふりかえりの堎合、半日くらいかけお開催しおもおかしくないず思うのですが、察象者党員が空いおいる時間垯を確保するのもなかなか難しく「1時間以内でやり切り最倧の効果をあげるこず」を自分に課しおいたした。 具䜓䟋① 「象、死んだ魚、嘔吐」 開催時期初期2022幎6月 参加メンバヌ12名 ただ「ふりかえりをこうしおいこう」ずも決めおいなかった頃の、最初に行ったふりかえりは「 象、死んだ魚、嘔吐 」ずいう手法を採甚したした。 Airbnb 創業者が考案したコミュニケヌション改善の手法で、以䞋の3芁玠から構成されおいたす。 「象」 存圚しないかのように扱われるが、誰もが知っおいる事実。 「死んだ魚」 過去に起こったこず悪臭ず腐敗を乗り越えお、将来ぞの期埅を蚭定する。 「嘔吐」 普段は蚀わないこず、蚀うのを控えおいるこずなどをぶっちゃけお話す。 最初期のためチヌム党䜓ずしおも遠慮し合うような雰囲気がただうっすらずあり、束江ず東京の物理的な距離感も盞たっお「もう党員でぶっちゃけお話そうよ」ずいう思いでこの手法を遞びたした個人的にも気になっおいた手法でした。 少し前に行ったプロダクトチヌム党䜓のふりかえりから、珟圚のチヌムは「良い面も悪い面もコミュニケヌションのあり方がキヌポむントになっおいそう」ずいう掚枬が出おいたこずも背景にありたした。 「象」「死んだ魚」「嘔吐」それぞれでボヌドを䜿甚 「四半期毎の開催」ず述べたしたが、実はこの最初のチヌム党員のふりかえりたではプロゞェクト開始から半幎経過しおいたす。そのためレセコン開発プロゞェクト党䜓ずしおは初回のふりかえりずいうこずもあり、「そもそも䜕のためにふりかえりを行うのか」「このプロゞェクトの目的共通目暙は䜕か」ずいう郚分は特に䞁寧に察話する時間をずりたした。 ツヌルは Jamboard を䜿甚し、心理的安党性を高めるためクロヌズドな状態にしお「本圓に䜕でも蚀える」環境を぀くるこずに腐心したした。 結果、1時間のうち集䞭しお話ができたのは30分皋床ですが、かなりいろんなぶっちゃけ話ができたず思いたす。もちろんこのふりかえりだけが芁因ではないですが、その埌のプロゞェクトメンバヌ内のコミュニケヌションは埐々に滑らかになっおいっおるな、チヌムビルディングずいう意味でも効果があったかなず感じたした。 具䜓䟋② 「ポゞティブふりかえりマッピング」 開催時期初回リリヌス埌2023幎3月 参加メンバヌ25名 初回リリヌス埌の運甚期間を経お次の倧型リリヌスの準備を進めおいく䞭で、関わる人数やロヌルも䞀段ず増えた時期でした。これたではふりかえりに参加しおいなかったカスタマヌサクセス等のメンバヌも招埅し、次の期ぞのキックオフを兌ねお明るい雰囲気で未来ぞ぀ながっおいくお話をしたく、ポゞティブふりかえりマッピングを䜿うこずにしたした。 この手法は、はじめに「どんな道をたどったにせよ、圓時の知識・技術・胜力・利甚可胜なリ゜ヌス・状況の䞭で、みんなができる限り最高の仕事をしたはずです。それを心から信じたす。」ずいう声明を発衚し、「あなたは⚪⚪プロゞェクトにいたしたね。どういう点が玠晎らしかったですか」ず質問を続けるずいう䜜法で進みたす。メンバヌが次々ず玠晎らしい点を挙げおいくので、みんなが嬉しく和やかな雰囲気になりたす。 圓時のConfluence 参加メンバヌも倧人数になっおきたので、5名ず぀のグルヌプをあらかじめ぀くっおおき、グルヌプ毎の Jamboard ぞ意芋を蚘茉しおもらいたした。持ち時間は10分です。時間短瞮のためブレむクアりトルヌムは぀くらず、25名党員がメむンルヌムに参加したたたの状態で各自ふせんを぀くっおいきたす。 キックオフずしお有甚な堎になるよう、この回のグルヌプ線成は以䞋の点に配慮したした。 同じグルヌプ内でなるべく職皮が偏らないように 幎霢経隓幎数も偏らないように ずはいえたったく業務䞊の接点もないずいうこずがないように 次に各グルヌプ毎に挙がった内容が近いふせんを寄せたり、ペンで囲んだりずいったグルヌピングを5分で行いたす。 最埌に各グルヌプの結果を党員で芋おいき芁玄する時間を15分ずりたす。 メンバヌからは「プロゞェクトの掚進における各自の機動力、組織力が玠晎らしい」「効率化のための仕組みが効いお次期皌働可胜な状態たでもっおいけた」等の意芋が挙がりたした。 玠晎らしい点をお互いに芋぀けお蚀語化するこずによっお劎いや協力の気持ちが思い出され、ふりかえりずしおもキックオフずしおも良いむベントになったかなず思いたす。 ずあるグルヌプの最終圢態 具䜓䟋③ 「枩床蚈」 開催時期成長期2023幎12月 参加メンバヌ19名 自瀟レセコンが皌働する医療機関数の曎なる増加ず蚺療報酬改定 2 に向けお、持続的なプロダクト開発ずオペレヌション改善のための話し合いを行いたい時期でした。 このふりかえりでは、以䞋の3点を重芁課題ず䜍眮づけたした。 良いずころを䌞ばす 問題を解消する 関係の質を高める この3点の目的にマッチする「枩床蚈」ずいう手法は、チヌムメンバヌが「チヌムに起きおいるこず」「チヌムに望むこず」を報告し合いたす。珟圚䜍眮から今埌に芖点を向けるこずを意識するため、以䞋の3ステップで進めたした。 感謝・興奮 気づき・興味 提案・垌望・願望 「枩床蚈」ずいう名の通り、䞭倮に枩床蚈のむラストを配眮したす。本来は瞊長の甚玙䞋郚に䜎枩よくないこず、䞊郚にいくほど高枩興奮や願望のふせんを貌る、ずいうルヌルになっおいたすが、オンラむン画面䞊ではスクロヌルが必芁な状況を避けたかったため、各ステップのふせんの色を倉えるこずにより青→黄色→ピンク枩床感を衚珟するこずにしたした。 「感謝・興奮」は党員で1぀のボヌドを䜿甚し、ありがずうの気持ちが溢れたした 「倧倉だけど楜しい期だった」「チヌム感があった」「むンフラチヌムのおかげで開発・䞍具合察応に集䞭できた」等の意芋があがり、初期から比べるず本圓に良いチヌムになっおいるなず感じたした。 たたこの頃から「⚪⚪に関する勉匷䌚 / 品評䌚をしおみたい」ずいう意芋も埐々に増えおきおおり、䞀郚実珟したものもありたすが未だにやれおいないゞャンルもあり、熱が冷めないうちに䜕らかの圢で達成するこずが今埌の課題です。 たずめ ここたで、実際に行ったふりかえり事䟋を3぀ご玹介したした。 最埌に、どのふりかえりでも共通しお行っおいたこずを螏たえおたずめたす。 ふりかえりをする意矩を再認識し、堎を぀くる 前回のふりかえりをふりかえる 他のメンバヌが挙げた意芋に賛成や近い意芋がある堎合は、ドット投祚を行う 以䞋に詳しくご説明したす。 ふりかえりをする意矩を再認識し、堎を぀くる メンバヌ党員が「ふりかえり」に慣れおいるわけではなく、経隓が少ないメンバヌもいるこずから、「なぜふりかえりをするのか」ずいう意矩に぀いおは毎回冒頭で觊れお、気持ちを぀くっおいくずいうこずをしおいたした。毎回別の蚀葉で、「たいぞんな時ほど立ち止たっお呚りをみるこずが、これからも䞀緒に走っおいく仲間ずしお倧切」のようなお話をしたした。 䌚の前半は説明のため私が1人で話しおいる時間も長めで、オンラむンでは参加者の反応がわかりづらくちょっずした無音の時間が続いおしたいがちです。特別にアむスブレむクの時間をずっおいないこずもあり自然に堎を盛り䞊げおいくために、参加メンバヌには「環境的にミュヌト解陀しおも問題ない人はなるべく声出しおください〜」「スタンプくださヌい」等ず促しおわいわいしおもらいたした。 前回のふりかえりをふりかえる 四半期毎にふりかえりをする、ずいうリズムもできたので、毎回冒頭で「前回はこういうふりかえりをしたしたね」ずいう「ふりかえりのふりかえり」をするようにしおいたす。 あたり時間もずれないのでさらっず觊れる皋床ですが、今から行うふりかえりの気持ちを぀くる䞊でも重芁なパヌトかなず思っおいたす。 誰かが挙げた意芋に賛成や近い意芋がある堎合は、ドット投祚を行う 「ドット投祚」もふりかえりの手法の1぀ですが、あらかじめマヌクずなるアむコンを準備しおおき、それを各自コピヌしお共感した他の人のふせんの近くに貌っおもらいたした。 これによりみんなの関心がある課題が明確になっお時間も短瞮でき、取り䞊げる議題に集䞭できたす。 ドット投祚の䟋 ふりかえり手法の遞定に぀いお さお、私がなぜ毎回課題感に合わせお最適なず思われるふりかえり手法を䜿うこずができたのか、それはふりかえり Miro ゚バンゞェリストである びばさん の『 ふりかえりチヌトシヌト 』にかなりお䞖話になっおいるためです。 このシヌトには各ふりかえり手法がどの目的解消したい課題に適しおいるか詳现にマッピングされおいるので、「今回のふりかえりで解決 / 達成したいこず」を2〜3぀遞定し、その䞭から合いそうな手法をピックアップしお詳しく調べおから1時間でやり切れる圢匏に萜ずし蟌んでいきたした。 たた、課題によっおは1぀の手法に収めず、耇数の手法を組み合わせお䜿うこずも倚いです。前述の「ドット投祚」もそうですが、軜量な手法である「感謝」自分が感謝すべき人たちのこずを考え、粟䞀杯の誠意を蟌めお「ありがずう」ず蚀うは他の手法ず組み合わせおアむスブレむク的に䜿ったりもしたした。 このように、毎回異なるふりかえり手法を取り入れるこずのできる柔軟な組織で䞀緒に働いおみたい ず思った方はお気軜に カゞュアル面談 をお申し蟌みください。 良いふりかえり事䟋を持っおいる、あるいはふりかえりの仕方に悩んでいる等ずにかく語りたい方も䞀床お話ししおみたしょう 最埌たでお読みいただき、ありがずうございたした。 Reference&Thanksふりかえりの参考図曞 ふりかえり読本 堎䜜り線ふりかえるその前に Fearless Change アゞャむルに効く アむデアを組織に広めるための48のパタヌン アゞャむルレトロスペクティブズ 匷いチヌムを育おる「ふりかえり」の手匕き Footnotes レセプトコンピュヌタ。レセプト蚺療報酬明现曞を䜜成するためのコンピュヌタ。 https://clinics-cloud.com/column/64 ↩ 通垞2幎毎に行われる、医療行為に察する点数の芋盎し。 https://clinics-cloud.com/column/406 ↩
はじめに こんにちは。 CLINICS カルテ の QA 担圓をしおおりたす QA ゚ンゞニアの かみむら です。 医療プラットフォヌム本郚 CLINICS 開発チヌムでは、2幎以䞊に枡り自瀟レセコン 1 の開発を行っおいたす。プロダクトは公開枈みであるものの鋭意远加機胜の開発を続けおおり、今埌も継続しお開発する予定になっおいたす。 QA ゚ンゞニアの倧切な圹割の1぀ずしお、プロセス改善がありたす。ふりかえりはプロセス改善のアむデアを関係者党員で話し合うための肝ずなるアクティビティですので、芏暡の倧小問わず取り入れたいものです。 この蚘事ではレセコン開発におけるプロゞェクト䜓制構築時の黎明期から珟圚の成熟期に至るたでに行った、四半期毎のふりかえり手法や効果に぀いお、かい぀たんでご玹介したす。 プロゞェクトの状況ずふりかえりの進め方 たずレセコン開発プロゞェクトのチヌム䜓制に぀いおご説明したす。メンバヌは、初期から珟圚たで総勢20〜25名前埌内蚳ディレクタヌ3〜5名、カスタマヌサクセス2〜4名、゚ンゞニア10数名、QA ゚ンゞニア1〜2名で取り組んでいたす。 ※開発詳现に぀いおは、 Tech Studio MATSUE オフィスのご玹介 からご芧いただけたす 元々医療プラットフォヌム本郚では四半期に䞀床、個々のプロゞェクトの垣根なくプロダクトチヌム党䜓でのふりかえりを KPT Keep / Problem / Try で行うずいう習慣がありたす。そこで、レセコン開発のプロゞェクトも時期を合わせおふりかえりを行うようにすればメンバヌの気持ちず時間の調敎がしやすいのではないか ず考え、プロゞェクトマネヌゞャヌに盞談しながら各四半期の終わり頃に開催するこずずしたした。 圓プロゞェクトには専任メンバヌもいたすが、倚くのメンバヌは他のプロゞェクトずの兌務のためふりかえりぞの時間の䜿い方ず開催圢匏には気を぀かいたした。 特に開発メンバヌの半数近くが別拠点束江オフィスに勀務しおいるこずもあり、東京オフィスメンバヌずのコミュニケヌションのため完党オンラむン圢匏にする必芁がありたした同じ拠点同士は察面で集たり、拠点間のみオンラむン接続するずいうやり方もありたすが、経隓䞊個々の発蚀が拟いにくい等負の偎面があるこずをわかっおいたため、党員オンラむンでの参加ずしたした。 具䜓的には次のように進めおいたす。 ”今期の課題感” に぀いおプロゞェクトマネヌゞャヌずすり合わせ、その課題に合いそうなふりかえり手法を遞定する参加者の察象をどこたで広げるか、数名ず぀のグルヌプに分ける堎合はどういう基準で分けるか等も盞談 候補に挙げた手法ずタむムテヌブルを Confluence に曞き起こし、前日たでに Slack で事前呚知 Google Meet でオンラむン開催する ふりかえり結果の芁玄 / 抜粋 / アクションプランを Confluence に远蚘し、参加者に Slack で報告 毎回以䞋の圢匏を守っお執り行いたした。 完党オンラむン圢匏で開催 参加者の事前準備はほが無し ふりかえりむベント圓日にかける時間は1時間だけ 䞀般的には四半期ずいう長期間を察象ずするふりかえりの堎合、半日くらいかけお開催しおもおかしくないず思うのですが、察象者党員が空いおいる時間垯を確保するのもなかなか難しく「1時間以内でやり切り最倧の効果をあげるこず」を自分に課しおいたした。 具䜓䟋① 「象、死んだ魚、嘔吐」 開催時期初期2022幎6月 参加メンバヌ12名 ただ「ふりかえりをこうしおいこう」ずも決めおいなかった頃の、最初に行ったふりかえりは「 象、死んだ魚、嘔吐 」ずいう手法を採甚したした。 Airbnb 創業者が考案したコミュニケヌション改善の手法で、以䞋の3芁玠から構成されおいたす。 「象」 存圚しないかのように扱われるが、誰もが知っおいる事実。 「死んだ魚」 過去に起こったこず悪臭ず腐敗を乗り越えお、将来ぞの期埅を蚭定する。 「嘔吐」 普段は蚀わないこず、蚀うのを控えおいるこずなどをぶっちゃけお話す。 最初期のためチヌム党䜓ずしおも遠慮し合うような雰囲気がただうっすらずあり、束江ず東京の物理的な距離感も盞たっお「もう党員でぶっちゃけお話そうよ」ずいう思いでこの手法を遞びたした個人的にも気になっおいた手法でした。 少し前に行ったプロダクトチヌム党䜓のふりかえりから、珟圚のチヌムは「良い面も悪い面もコミュニケヌションのあり方がキヌポむントになっおいそう」ずいう掚枬が出おいたこずも背景にありたした。 「象」「死んだ魚」「嘔吐」それぞれでボヌドを䜿甚 「四半期毎の開催」ず述べたしたが、実はこの最初のチヌム党員のふりかえりたではプロゞェクト開始から半幎経過しおいたす。そのためレセコン開発プロゞェクト党䜓ずしおは初回のふりかえりずいうこずもあり、「そもそも䜕のためにふりかえりを行うのか」「このプロゞェクトの目的共通目暙は䜕か」ずいう郚分は特に䞁寧に察話する時間をずりたした。 ツヌルは Jamboard を䜿甚し、心理的安党性を高めるためクロヌズドな状態にしお「本圓に䜕でも蚀える」環境を぀くるこずに腐心したした。 結果、1時間のうち集䞭しお話ができたのは30分皋床ですが、かなりいろんなぶっちゃけ話ができたず思いたす。もちろんこのふりかえりだけが芁因ではないですが、その埌のプロゞェクトメンバヌ内のコミュニケヌションは埐々に滑らかになっおいっおるな、チヌムビルディングずいう意味でも効果があったかなず感じたした。 具䜓䟋② 「ポゞティブふりかえりマッピング」 開催時期初回リリヌス埌2023幎3月 参加メンバヌ25名 初回リリヌス埌の運甚期間を経お次の倧型リリヌスの準備を進めおいく䞭で、関わる人数やロヌルも䞀段ず増えた時期でした。これたではふりかえりに参加しおいなかったカスタマヌサクセス等のメンバヌも招埅し、次の期ぞのキックオフを兌ねお明るい雰囲気で未来ぞ぀ながっおいくお話をしたく、ポゞティブふりかえりマッピングを䜿うこずにしたした。 この手法は、はじめに「どんな道をたどったにせよ、圓時の知識・技術・胜力・利甚可胜なリ゜ヌス・状況の䞭で、みんなができる限り最高の仕事をしたはずです。それを心から信じたす。」ずいう声明を発衚し、「あなたは⚪⚪プロゞェクトにいたしたね。どういう点が玠晎らしかったですか」ず質問を続けるずいう䜜法で進みたす。メンバヌが次々ず玠晎らしい点を挙げおいくので、みんなが嬉しく和やかな雰囲気になりたす。 圓時のConfluence 参加メンバヌも倧人数になっおきたので、5名ず぀のグルヌプをあらかじめ぀くっおおき、グルヌプ毎の Jamboard ぞ意芋を蚘茉しおもらいたした。持ち時間は10分です。時間短瞮のためブレむクアりトルヌムは぀くらず、25名党員がメむンルヌムに参加したたたの状態で各自ふせんを぀くっおいきたす。 キックオフずしお有甚な堎になるよう、この回のグルヌプ線成は以䞋の点に配慮したした。 同じグルヌプ内でなるべく職皮が偏らないように 幎霢経隓幎数も偏らないように ずはいえたったく業務䞊の接点もないずいうこずがないように 次に各グルヌプ毎に挙がった内容が近いふせんを寄せたり、ペンで囲んだりずいったグルヌピングを5分で行いたす。 最埌に各グルヌプの結果を党員で芋おいき芁玄する時間を15分ずりたす。 メンバヌからは「プロゞェクトの掚進における各自の機動力、組織力が玠晎らしい」「効率化のための仕組みが効いお次期皌働可胜な状態たでもっおいけた」等の意芋が挙がりたした。 玠晎らしい点をお互いに芋぀けお蚀語化するこずによっお劎いや協力の気持ちが思い出され、ふりかえりずしおもキックオフずしおも良いむベントになったかなず思いたす。 ずあるグルヌプの最終圢態 具䜓䟋③ 「枩床蚈」 開催時期成長期2023幎12月 参加メンバヌ19名 自瀟レセコンが皌働する医療機関数の曎なる増加ず蚺療報酬改定 2 に向けお、持続的なプロダクト開発ずオペレヌション改善のための話し合いを行いたい時期でした。 このふりかえりでは、以䞋の3点を重芁課題ず䜍眮づけたした。 良いずころを䌞ばす 問題を解消する 関係の質を高める この3点の目的にマッチする「枩床蚈」ずいう手法は、チヌムメンバヌが「チヌムに起きおいるこず」「チヌムに望むこず」を報告し合いたす。珟圚䜍眮から今埌に芖点を向けるこずを意識するため、以䞋の3ステップで進めたした。 感謝・興奮 気づき・興味 提案・垌望・願望 「枩床蚈」ずいう名の通り、䞭倮に枩床蚈のむラストを配眮したす。本来は瞊長の甚玙䞋郚に䜎枩よくないこず、䞊郚にいくほど高枩興奮や願望のふせんを貌る、ずいうルヌルになっおいたすが、オンラむン画面䞊ではスクロヌルが必芁な状況を避けたかったため、各ステップのふせんの色を倉えるこずにより青→黄色→ピンク枩床感を衚珟するこずにしたした。 「感謝・興奮」は党員で1぀のボヌドを䜿甚し、ありがずうの気持ちが溢れたした 「倧倉だけど楜しい期だった」「チヌム感があった」「むンフラチヌムのおかげで開発・䞍具合察応に集䞭できた」等の意芋があがり、初期から比べるず本圓に良いチヌムになっおいるなず感じたした。 たたこの頃から「⚪⚪に関する勉匷䌚 / 品評䌚をしおみたい」ずいう意芋も埐々に増えおきおおり、䞀郚実珟したものもありたすが未だにやれおいないゞャンルもあり、熱が冷めないうちに䜕らかの圢で達成するこずが今埌の課題です。 たずめ ここたで、実際に行ったふりかえり事䟋を3぀ご玹介したした。 最埌に、どのふりかえりでも共通しお行っおいたこずを螏たえおたずめたす。 ふりかえりをする意矩を再認識し、堎を぀くる 前回のふりかえりをふりかえる 他のメンバヌが挙げた意芋に賛成や近い意芋がある堎合は、ドット投祚を行う 以䞋に詳しくご説明したす。 ふりかえりをする意矩を再認識し、堎を぀くる メンバヌ党員が「ふりかえり」に慣れおいるわけではなく、経隓が少ないメンバヌもいるこずから、「なぜふりかえりをするのか」ずいう意矩に぀いおは毎回冒頭で觊れお、気持ちを぀くっおいくずいうこずをしおいたした。毎回別の蚀葉で、「たいぞんな時ほど立ち止たっお呚りをみるこずが、これからも䞀緒に走っおいく仲間ずしお倧切」のようなお話をしたした。 䌚の前半は説明のため私が1人で話しおいる時間も長めで、オンラむンでは参加者の反応がわかりづらくちょっずした無音の時間が続いおしたいがちです。特別にアむスブレむクの時間をずっおいないこずもあり自然に堎を盛り䞊げおいくために、参加メンバヌには「環境的にミュヌト解陀しおも問題ない人はなるべく声出しおください〜」「スタンプくださヌい」等ず促しおわいわいしおもらいたした。 前回のふりかえりをふりかえる 四半期毎にふりかえりをする、ずいうリズムもできたので、毎回冒頭で「前回はこういうふりかえりをしたしたね」ずいう「ふりかえりのふりかえり」をするようにしおいたす。 あたり時間もずれないのでさらっず觊れる皋床ですが、今から行うふりかえりの気持ちを぀くる䞊でも重芁なパヌトかなず思っおいたす。 誰かが挙げた意芋に賛成や近い意芋がある堎合は、ドット投祚を行う 「ドット投祚」もふりかえりの手法の1぀ですが、あらかじめマヌクずなるアむコンを準備しおおき、それを各自コピヌしお共感した他の人のふせんの近くに貌っおもらいたした。 これによりみんなの関心がある課題が明確になっお時間も短瞮でき、取り䞊げる議題に集䞭できたす。 ドット投祚の䟋 ふりかえり手法の遞定に぀いお さお、私がなぜ毎回課題感に合わせお最適なず思われるふりかえり手法を䜿うこずができたのか、それはふりかえり Miro ゚バンゞェリストである びばさん の『 ふりかえりチヌトシヌト 』にかなりお䞖話になっおいるためです。 このシヌトには各ふりかえり手法がどの目的解消したい課題に適しおいるか詳现にマッピングされおいるので、「今回のふりかえりで解決 / 達成したいこず」を2〜3぀遞定し、その䞭から合いそうな手法をピックアップしお詳しく調べおから1時間でやり切れる圢匏に萜ずし蟌んでいきたした。 たた、課題によっおは1぀の手法に収めず、耇数の手法を組み合わせお䜿うこずも倚いです。前述の「ドット投祚」もそうですが、軜量な手法である「感謝」自分が感謝すべき人たちのこずを考え、粟䞀杯の誠意を蟌めお「ありがずう」ず蚀うは他の手法ず組み合わせおアむスブレむク的に䜿ったりもしたした。 このように、毎回異なるふりかえり手法を取り入れるこずのできる柔軟な組織で䞀緒に働いおみたい ず思った方はお気軜に カゞュアル面談 をお申し蟌みください。 良いふりかえり事䟋を持っおいる、あるいはふりかえりの仕方に悩んでいる等ずにかく語りたい方も䞀床お話ししおみたしょう 最埌たでお読みいただき、ありがずうございたした。 Reference&Thanksふりかえりの参考図曞 ふりかえり読本 堎䜜り線ふりかえるその前に Fearless Change アゞャむルに効く アむデアを組織に広めるための48のパタヌン アゞャむルレトロスペクティブズ 匷いチヌムを育おる「ふりかえり」の手匕き Footnotes レセプトコンピュヌタ。レセプト蚺療報酬明现曞を䜜成するためのコンピュヌタ。 https://clinics-cloud.com/column/64 ↩ 通垞2幎毎に行われる、医療行為に察する点数の芋盎し。 https://clinics-cloud.com/column/406 ↩