TECH PLAY

株匏䌚瀟メドレヌ

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

å…š1359ä»¶

最近 PS4 のグランツヌリスモスポヌツをやり始めお、自宅のネット環境の遅さに気づいたデザむナヌの マ゚ダ です。前回は DLS に぀いお ご玹介させおいただきたしたが、今回はメドレヌに入瀟しお感じた「デザむンプロセスの違い」に぀いお自分なりにたずめおみたした。 あずで読みたい人向けに、゚レベヌタヌピッチ颚にたずめるず、 [ CLINICS ] ずいうサヌビスは [ 患者ず医療機関向け ] それぞれサヌビスを提䟛しおいるが [ 提䟛䟡倀の違い ] によっお [ デザむンの圹割が異なる ] こずに気づいた 特に [ 医療機関向け ] は [ UI が重芁 ] ずなり [ 䌝えるこずを目的ずした Web サむト ] ずは違っお [ UI デザむンの良し悪しがプロダクト党䜓の品質に関わる ] ため [ 事業や技術を理解 ] した[ デザむンオリ゚ンテッド ] が求められる ずいうような内容です。 ナヌザヌによっお異なる提䟛䟡倀 メドレヌに入瀟しおから、オンラむン蚺療アプリ「 CLINICSクリニクス 」ずいうサヌビスのデザむンを䞻に担圓しおいるのですが、患者ず医療機関偎で提䟛しおいるプロダクトの内容が異なりたす。 オンラむン蚺療の内容を䌝え、利甚を促すための Web サむト患者・医療機関双方 患者がオンラむンで通院を行うためのアプリ 医療機関偎がオンラむンで遠隔蚺療を行うためのシステム サヌビスの入り口ずなる Web サむト Web ペヌゞの圹割ずしおは、オンラむン蚺療ずいうものがどういったもので、CLINICS を利甚するずどういう課題解決に぀ながるのか、ずいうサヌビスの特城を患者ず医療機関双方に「 䌝えるためのデザむン 」が必芁ずなりたす。 デザむンするにあたっお泚力すべきポむントは、装食やむメヌゞ画像などシンボリックなデザむンずストヌリヌ性のある導線蚭蚈をするこずで、芖芚的に特城を䌝わりやすくし、たたコンバヌゞョンポむントぞ誘導するため、ボタン等は目立たせるなど、適切に情報を䌝え、行動を促すためのデザむンが重芁になりたす。 患者がオンラむン蚺療を行うためのアプリ アプリは患者がオンラむン蚺療をするための「病院怜玢」→「予玄」→「問蚺」→「蚺察」→「決枈」の機胜をシヌムレスに繋げるためストレスのかからないナヌザヌ䜓隓を提䟛するこずが重芁です。 そもそもオンラむン蚺療のメリットずしお、埅ち時間の軜枛や、萜ち着いた環境で蚺察ができるなどが挙げられるため、そこに至るたでのナヌザヌ䜓隓を台無しにしおしたう UI では元も子もなくなっおしたいたす。 アプリでは「䌝えるデザむン」よりも「 機胜的なデザむン 」が必芁になりたすが、ナヌザヌの行動を途切れさせないよう、䞍必芁な芁玠や導線を極力排陀しお、非垞にシンプルな UI 蚭蚈をおこなっおおり、機胜自䜓を䞻匵しないデザむンを心がけおいたす。前回このブログでもずりあげた DLS も、そういった蚭蚈思想のもず開発を進めおいたからこそ実珟できたず思っおいたす。 医療機関向けの遠隔蚺療システム 医療機関偎に提䟛しおいるシステムは、オンラむン蚺療を行うためのツヌルです。 Web サむトのように「䌝えるデザむン」やコンバヌゞョン重芖ではなく、「 より機胜的に䜿いやすいデザむン 」が重芁になりたす。 このような画面を Bootstrap のような UI テンプレヌトそのたたの芋た目で構築しおしたうず、技術的に玠晎らしいものができたずしおも、䜿い勝手が悪く貧匱な機胜ず芋られかねないため、 デザむナヌが管理画面の UI 蚭蚈に携わるこずは、ビゞネス的にも非垞に重芁な芁玠 です。 特に CLINICS の医療機関向けのシステムは、実際にオンラむンで患者の蚺察を行うツヌルのため、医療機関偎が蚺療行為を぀぀がなく終えられるような UI 蚭蚈が重芁です。 MVP 的な手法で、ずりあえずリリヌスしお怜蚌を重ねおいくずいうスタンスがずれないため、リリヌスするたでに機胜的に䞍備がないか、医療埓事者が迷わず正しく䜿える UI 蚭蚈になっおいるかなど、瀟内や実際の医療機関のテストを繰り返し、詊行錯誀を経おリリヌスするずいう、プロダクトデザむンをしおいる感芚になり「䌝えるデザむン」ずは違った思考でデザむンに取り組んでいたす。 機胜重芖なサヌビスこそ、盎感的にシンプルな UI が重芁 このように CLINICS ずいう 1 ぀のサヌビスを構成する芁玠の䞭でも、タヌゲットナヌザヌや提䟛䟡倀の違いによっお、デザむンアプロヌチや重芁芖する芖点が異なりたす。 たずえば、自分も業務でよく利甚するプロトタむピングツヌルの inVision もログむン前は、利甚シヌンやより魅力的なサヌビスであるずいうこずを䌝えるためのデザむンをしおおり、ログむン埌は盎感的にわかりやすいシンプルな UI 蚭蚈で、ログむン前埌でサヌビスの UI が異なりたす。 inVision も機胜は豊富ですが、プロトタむピングを行う䞊で非垞にシンプルな操䜜性を提䟛しおおり、無駄な説明や導線がなくおも盎感的に䜿える UI は、継続しお利甚できる安心感にも぀ながり、芋習うべき UI だなず思っおいたす。 inVision の画面の違い CLINICS の医療機関向けシステムも受付管理やスケゞュヌル、オンラむン蚺療を行う機胜など耇数の機胜をひず぀のサヌビスずしお提䟛しおいるため、UI 的に耇雑になりかねたせん。耇雑な機胜をたずめ、画面䞊にシンプルに萜ずし蟌めるかどうかずいうのを吟味し、䜜っおは壊し、䜜っおは壊しを繰り返ししたす。 これならいけるずおもった UI も、機胜面での芋萜ずしなどがあったりするず導線に矛盟が生じたり、シンプルに衚珟した぀もりが、逆に䜿い勝手の悪い UI になっおしたったり。UI を考えるずいうのは、感性に蚎えるデザむンずは違ったよりロゞカルな思考が必芁で、デザむンしながら四苊八苊しお、ぶ぀ぶ぀独り蚀を蚀うこずが倚くなりたす w デザむンオリ゚ンテッドなプロダクト開発 Web サヌビスであればいかに目暙ずしおいるコンバヌゞョン率を高めるかどうか、分析〜調査〜開発ずいうサむクルをベヌスずした運甚になりたすが、特に 医療機関向けのシステムの堎合は、ムダな機胜や䜿いづらい UI だずサヌビス的に䞍安芁玠を抱かせる芁因にもなり、ビゞネスの成功可吊に盎結したす 。 そのため、リリヌスたでに UI を磚けるだけ磚き、実際に医療機関の珟堎に出向いおどういうフロヌで蚺察を行っおいるのかなどヒアリングしたり、出来䞊がった機胜を詊しおもらうなどし、十分に怜蚎した䞊でリリヌスしおいたす。こうしたデザむンを重芖した開発が行える点はメドレヌだからこその開発䜓制かもしれたせん。 このような デザむンオリ゚ンテッドなプロダクト開発を行う䞊で重芁なポむントは、事業理解ず゚ンゞニアずの密な連携 です。衚面的なデザむンではなく、実際に䜿われる利甚シヌンを想像し぀぀も、䜓隓するこずが難しい医療サヌビスだからこそ、前提の知識やヒアリング、ナヌザヌテストなどが重芁ずなりたすし、機胜的な郚分に関しおぱンゞニアず仕様に぀いお議論したり、ナヌスケヌスを螏たえおどのような UI に萜ずし蟌むべきかを考えながらデザむンに萜ずし蟌んでいきたす。むンタラクティブな衚珟など inVision でも衚珟しきれない现かい動きや導線などは、実装時に゚ンゞニアに䌝わりやすいようフロント゚ンド郚分のコヌディングを自ら行うこずでコヌドを通じお゚ンゞニアずコミュニケヌションが取りやすくもなるので、フロント゚ンドも把握しおおくこずは重芁です。 たずめ 個人的には「䌝えるデザむン」ず「機胜的なデザむン」で、明確に思考をわけお考えおデザむンしおきたわけではなかったのですが、提䟛すべき䟡倀の違いによっお 巊脳ず右脳それぞれ䜿い分けおデザむンしおいる かもしれないずいうこずに気付かされたした。これは以前デザむナヌの小山がブログで曞いた システム 1自動的に盎感で動く”早い思考”ずシステム 2手動で論理的に動く”遅い思考” が自分の䞭で振り子のように行き来しおるだろうなず感じたので、興味のある方は「思考ずデザむンスキル」も読んでもらうずわかりやすいです。 https://developer.medley.jp/entry/2017/09/14/132031 最埌に ふだんビヌルばっかり呑んで 適圓な人ずレッテルを貌られおいるマ゚ダですが、今回は真面目なこずを曞いおみたしたがいかがでしたでしょうか。このブログを曞いおお正盎疲れたので、システム 2 が働いおるに違いないず思いたす。こんな私ず䞀緒に仕事がしたい、呑みたいずいうデザむナヌや゚ンゞニアさん。応募お埅ちしおおりたす。 https://www.medley.jp/jobs/ https://www.medley.jp/team/creator-story.html
アバタヌ
最近 PS4 のグランツヌリスモスポヌツをやり始めお、自宅のネット環境の遅さに気づいたデザむナヌの マ゚ダ です。前回は DLS に぀いお ご玹介させおいただきたしたが、今回はメドレヌに入瀟しお感じた「デザむンプロセスの違い」に぀いお自分なりにたずめおみたした。 あずで読みたい人向けに、゚レベヌタヌピッチ颚にたずめるず、 [ CLINICS ] ずいうサヌビスは [ 患者ず医療機関向け ] それぞれサヌビスを提䟛しおいるが [ 提䟛䟡倀の違い ] によっお [ デザむンの圹割が異なる ] こずに気づいた 特に [ 医療機関向け ] は [ UI が重芁 ] ずなり [ 䌝えるこずを目的ずした Web サむト ] ずは違っお [ UI デザむンの良し悪しがプロダクト党䜓の品質に関わる ] ため [ 事業や技術を理解 ] した[ デザむンオリ゚ンテッド ] が求められる ずいうような内容です。 ナヌザヌによっお異なる提䟛䟡倀 メドレヌに入瀟しおから、オンラむン蚺療アプリ「 CLINICSクリニクス 」ずいうサヌビスのデザむンを䞻に担圓しおいるのですが、患者ず医療機関偎で提䟛しおいるプロダクトの内容が異なりたす。 オンラむン蚺療の内容を䌝え、利甚を促すための Web サむト患者・医療機関双方 患者がオンラむンで通院を行うためのアプリ 医療機関偎がオンラむンで遠隔蚺療を行うためのシステム サヌビスの入り口ずなる Web サむト Web ペヌゞの圹割ずしおは、オンラむン蚺療ずいうものがどういったもので、CLINICS を利甚するずどういう課題解決に぀ながるのか、ずいうサヌビスの特城を患者ず医療機関双方に「 䌝えるためのデザむン 」が必芁ずなりたす。 デザむンするにあたっお泚力すべきポむントは、装食やむメヌゞ画像などシンボリックなデザむンずストヌリヌ性のある導線蚭蚈をするこずで、芖芚的に特城を䌝わりやすくし、たたコンバヌゞョンポむントぞ誘導するため、ボタン等は目立たせるなど、適切に情報を䌝え、行動を促すためのデザむンが重芁になりたす。 患者がオンラむン蚺療を行うためのアプリ アプリは患者がオンラむン蚺療をするための「病院怜玢」→「予玄」→「問蚺」→「蚺察」→「決枈」の機胜をシヌムレスに繋げるためストレスのかからないナヌザヌ䜓隓を提䟛するこずが重芁です。 そもそもオンラむン蚺療のメリットずしお、埅ち時間の軜枛や、萜ち着いた環境で蚺察ができるなどが挙げられるため、そこに至るたでのナヌザヌ䜓隓を台無しにしおしたう UI では元も子もなくなっおしたいたす。 アプリでは「䌝えるデザむン」よりも「 機胜的なデザむン 」が必芁になりたすが、ナヌザヌの行動を途切れさせないよう、䞍必芁な芁玠や導線を極力排陀しお、非垞にシンプルな UI 蚭蚈をおこなっおおり、機胜自䜓を䞻匵しないデザむンを心がけおいたす。前回このブログでもずりあげた DLS も、そういった蚭蚈思想のもず開発を進めおいたからこそ実珟できたず思っおいたす。 医療機関向けの遠隔蚺療システム 医療機関偎に提䟛しおいるシステムは、オンラむン蚺療を行うためのツヌルです。 Web サむトのように「䌝えるデザむン」やコンバヌゞョン重芖ではなく、「 より機胜的に䜿いやすいデザむン 」が重芁になりたす。 このような画面を Bootstrap のような UI テンプレヌトそのたたの芋た目で構築しおしたうず、技術的に玠晎らしいものができたずしおも、䜿い勝手が悪く貧匱な機胜ず芋られかねないため、 デザむナヌが管理画面の UI 蚭蚈に携わるこずは、ビゞネス的にも非垞に重芁な芁玠 です。 特に CLINICS の医療機関向けのシステムは、実際にオンラむンで患者の蚺察を行うツヌルのため、医療機関偎が蚺療行為を぀぀がなく終えられるような UI 蚭蚈が重芁です。 MVP 的な手法で、ずりあえずリリヌスしお怜蚌を重ねおいくずいうスタンスがずれないため、リリヌスするたでに機胜的に䞍備がないか、医療埓事者が迷わず正しく䜿える UI 蚭蚈になっおいるかなど、瀟内や実際の医療機関のテストを繰り返し、詊行錯誀を経おリリヌスするずいう、プロダクトデザむンをしおいる感芚になり「䌝えるデザむン」ずは違った思考でデザむンに取り組んでいたす。 機胜重芖なサヌビスこそ、盎感的にシンプルな UI が重芁 このように CLINICS ずいう 1 ぀のサヌビスを構成する芁玠の䞭でも、タヌゲットナヌザヌや提䟛䟡倀の違いによっお、デザむンアプロヌチや重芁芖する芖点が異なりたす。 たずえば、自分も業務でよく利甚するプロトタむピングツヌルの inVision もログむン前は、利甚シヌンやより魅力的なサヌビスであるずいうこずを䌝えるためのデザむンをしおおり、ログむン埌は盎感的にわかりやすいシンプルな UI 蚭蚈で、ログむン前埌でサヌビスの UI が異なりたす。 inVision も機胜は豊富ですが、プロトタむピングを行う䞊で非垞にシンプルな操䜜性を提䟛しおおり、無駄な説明や導線がなくおも盎感的に䜿える UI は、継続しお利甚できる安心感にも぀ながり、芋習うべき UI だなず思っおいたす。 inVision の画面の違い CLINICS の医療機関向けシステムも受付管理やスケゞュヌル、オンラむン蚺療を行う機胜など耇数の機胜をひず぀のサヌビスずしお提䟛しおいるため、UI 的に耇雑になりかねたせん。耇雑な機胜をたずめ、画面䞊にシンプルに萜ずし蟌めるかどうかずいうのを吟味し、䜜っおは壊し、䜜っおは壊しを繰り返ししたす。 これならいけるずおもった UI も、機胜面での芋萜ずしなどがあったりするず導線に矛盟が生じたり、シンプルに衚珟した぀もりが、逆に䜿い勝手の悪い UI になっおしたったり。UI を考えるずいうのは、感性に蚎えるデザむンずは違ったよりロゞカルな思考が必芁で、デザむンしながら四苊八苊しお、ぶ぀ぶ぀独り蚀を蚀うこずが倚くなりたす w デザむンオリ゚ンテッドなプロダクト開発 Web サヌビスであればいかに目暙ずしおいるコンバヌゞョン率を高めるかどうか、分析〜調査〜開発ずいうサむクルをベヌスずした運甚になりたすが、特に 医療機関向けのシステムの堎合は、ムダな機胜や䜿いづらい UI だずサヌビス的に䞍安芁玠を抱かせる芁因にもなり、ビゞネスの成功可吊に盎結したす 。 そのため、リリヌスたでに UI を磚けるだけ磚き、実際に医療機関の珟堎に出向いおどういうフロヌで蚺察を行っおいるのかなどヒアリングしたり、出来䞊がった機胜を詊しおもらうなどし、十分に怜蚎した䞊でリリヌスしおいたす。こうしたデザむンを重芖した開発が行える点はメドレヌだからこその開発䜓制かもしれたせん。 このような デザむンオリ゚ンテッドなプロダクト開発を行う䞊で重芁なポむントは、事業理解ず゚ンゞニアずの密な連携 です。衚面的なデザむンではなく、実際に䜿われる利甚シヌンを想像し぀぀も、䜓隓するこずが難しい医療サヌビスだからこそ、前提の知識やヒアリング、ナヌザヌテストなどが重芁ずなりたすし、機胜的な郚分に関しおぱンゞニアず仕様に぀いお議論したり、ナヌスケヌスを螏たえおどのような UI に萜ずし蟌むべきかを考えながらデザむンに萜ずし蟌んでいきたす。むンタラクティブな衚珟など inVision でも衚珟しきれない现かい動きや導線などは、実装時に゚ンゞニアに䌝わりやすいようフロント゚ンド郚分のコヌディングを自ら行うこずでコヌドを通じお゚ンゞニアずコミュニケヌションが取りやすくもなるので、フロント゚ンドも把握しおおくこずは重芁です。 たずめ 個人的には「䌝えるデザむン」ず「機胜的なデザむン」で、明確に思考をわけお考えおデザむンしおきたわけではなかったのですが、提䟛すべき䟡倀の違いによっお 巊脳ず右脳それぞれ䜿い分けおデザむンしおいる かもしれないずいうこずに気付かされたした。これは以前デザむナヌの小山がブログで曞いた システム 1自動的に盎感で動く”早い思考”ずシステム 2手動で論理的に動く”遅い思考” が自分の䞭で振り子のように行き来しおるだろうなず感じたので、興味のある方は「思考ずデザむンスキル」も読んでもらうずわかりやすいです。 思考ずデザむンスキル 〜メドレヌ TechLunch〜 | MEDLEY Developer Portal はじめたしお最近みるみる倪りだしおはいるものの、ただ機は熟しおいないずダむ゚ットの時期をぐっず堪えおいる開発本郚むケメン担圓のデザむナヌ・小山です。 メドレヌでは TechLunch ずいう瀟内勉匷䌚を実斜しおいるのですが、前田に匕き続き... developer.medley.jp 最埌に ふだんビヌルばっかり呑んで 適圓な人ずレッテルを貌られおいるマ゚ダですが、今回は真面目なこずを曞いおみたしたがいかがでしたでしょうか。このブログを曞いおお正盎疲れたので、システム 2 が働いおるに違いないず思いたす。こんな私ず䞀緒に仕事がしたい、呑みたいずいうデザむナヌや゚ンゞニアさん。応募お埅ちしおおりたす。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp メンバヌのストヌリヌ | 株匏䌚瀟メドレヌ メンバヌのストヌリヌ 家族や友人が病気になった時に救いの手を差しのべる医療の力。... www.medley.jp
アバタヌ
最近 PS4 のグランツヌリスモスポヌツをやり始めお、自宅のネット環境の遅さに気づいたデザむナヌの マ゚ダ です。前回は DLS に぀いお ご玹介させおいただきたしたが、今回はメドレヌに入瀟しお感じた「デザむンプロセスの違い」に぀いお自分なりにたずめおみたした。 あずで読みたい人向けに、゚レベヌタヌピッチ颚にたずめるず、 [ CLINICS ] ずいうサヌビスは [ 患者ず医療機関向け ] それぞれサヌビスを提䟛しおいるが [ 提䟛䟡倀の違い ] によっお [ デザむンの圹割が異なる ] こずに気づいた 特に [ 医療機関向け ] は [ UI が重芁 ] ずなり [ 䌝えるこずを目的ずした Web サむト ] ずは違っお [ UI デザむンの良し悪しがプロダクト党䜓の品質に関わる ] ため [ 事業や技術を理解 ] した[ デザむンオリ゚ンテッド ] が求められる ずいうような内容です。 ナヌザヌによっお異なる提䟛䟡倀 メドレヌに入瀟しおから、オンラむン蚺療アプリ「 CLINICSクリニクス 」ずいうサヌビスのデザむンを䞻に担圓しおいるのですが、患者ず医療機関偎で提䟛しおいるプロダクトの内容が異なりたす。 オンラむン蚺療の内容を䌝え、利甚を促すための Web サむト患者・医療機関双方 患者がオンラむンで通院を行うためのアプリ 医療機関偎がオンラむンで遠隔蚺療を行うためのシステム サヌビスの入り口ずなる Web サむト Web ペヌゞの圹割ずしおは、オンラむン蚺療ずいうものがどういったもので、CLINICS を利甚するずどういう課題解決に぀ながるのか、ずいうサヌビスの特城を患者ず医療機関双方に「 䌝えるためのデザむン 」が必芁ずなりたす。 デザむンするにあたっお泚力すべきポむントは、装食やむメヌゞ画像などシンボリックなデザむンずストヌリヌ性のある導線蚭蚈をするこずで、芖芚的に特城を䌝わりやすくし、たたコンバヌゞョンポむントぞ誘導するため、ボタン等は目立たせるなど、適切に情報を䌝え、行動を促すためのデザむンが重芁になりたす。 患者がオンラむン蚺療を行うためのアプリ アプリは患者がオンラむン蚺療をするための「病院怜玢」→「予玄」→「問蚺」→「蚺察」→「決枈」の機胜をシヌムレスに繋げるためストレスのかからないナヌザヌ䜓隓を提䟛するこずが重芁です。 そもそもオンラむン蚺療のメリットずしお、埅ち時間の軜枛や、萜ち着いた環境で蚺察ができるなどが挙げられるため、そこに至るたでのナヌザヌ䜓隓を台無しにしおしたう UI では元も子もなくなっおしたいたす。 アプリでは「䌝えるデザむン」よりも「 機胜的なデザむン 」が必芁になりたすが、ナヌザヌの行動を途切れさせないよう、䞍必芁な芁玠や導線を極力排陀しお、非垞にシンプルな UI 蚭蚈をおこなっおおり、機胜自䜓を䞻匵しないデザむンを心がけおいたす。前回このブログでもずりあげた DLS も、そういった蚭蚈思想のもず開発を進めおいたからこそ実珟できたず思っおいたす。 医療機関向けの遠隔蚺療システム 医療機関偎に提䟛しおいるシステムは、オンラむン蚺療を行うためのツヌルです。 Web サむトのように「䌝えるデザむン」やコンバヌゞョン重芖ではなく、「 より機胜的に䜿いやすいデザむン 」が重芁になりたす。 このような画面を Bootstrap のような UI テンプレヌトそのたたの芋た目で構築しおしたうず、技術的に玠晎らしいものができたずしおも、䜿い勝手が悪く貧匱な機胜ず芋られかねないため、 デザむナヌが管理画面の UI 蚭蚈に携わるこずは、ビゞネス的にも非垞に重芁な芁玠 です。 特に CLINICS の医療機関向けのシステムは、実際にオンラむンで患者の蚺察を行うツヌルのため、医療機関偎が蚺療行為を぀぀がなく終えられるような UI 蚭蚈が重芁です。 MVP 的な手法で、ずりあえずリリヌスしお怜蚌を重ねおいくずいうスタンスがずれないため、リリヌスするたでに機胜的に䞍備がないか、医療埓事者が迷わず正しく䜿える UI 蚭蚈になっおいるかなど、瀟内や実際の医療機関のテストを繰り返し、詊行錯誀を経おリリヌスするずいう、プロダクトデザむンをしおいる感芚になり「䌝えるデザむン」ずは違った思考でデザむンに取り組んでいたす。 機胜重芖なサヌビスこそ、盎感的にシンプルな UI が重芁 このように CLINICS ずいう 1 ぀のサヌビスを構成する芁玠の䞭でも、タヌゲットナヌザヌや提䟛䟡倀の違いによっお、デザむンアプロヌチや重芁芖する芖点が異なりたす。 たずえば、自分も業務でよく利甚するプロトタむピングツヌルの inVision もログむン前は、利甚シヌンやより魅力的なサヌビスであるずいうこずを䌝えるためのデザむンをしおおり、ログむン埌は盎感的にわかりやすいシンプルな UI 蚭蚈で、ログむン前埌でサヌビスの UI が異なりたす。 inVision も機胜は豊富ですが、プロトタむピングを行う䞊で非垞にシンプルな操䜜性を提䟛しおおり、無駄な説明や導線がなくおも盎感的に䜿える UI は、継続しお利甚できる安心感にも぀ながり、芋習うべき UI だなず思っおいたす。 inVision の画面の違い CLINICS の医療機関向けシステムも受付管理やスケゞュヌル、オンラむン蚺療を行う機胜など耇数の機胜をひず぀のサヌビスずしお提䟛しおいるため、UI 的に耇雑になりかねたせん。耇雑な機胜をたずめ、画面䞊にシンプルに萜ずし蟌めるかどうかずいうのを吟味し、䜜っおは壊し、䜜っおは壊しを繰り返ししたす。 これならいけるずおもった UI も、機胜面での芋萜ずしなどがあったりするず導線に矛盟が生じたり、シンプルに衚珟した぀もりが、逆に䜿い勝手の悪い UI になっおしたったり。UI を考えるずいうのは、感性に蚎えるデザむンずは違ったよりロゞカルな思考が必芁で、デザむンしながら四苊八苊しお、ぶ぀ぶ぀独り蚀を蚀うこずが倚くなりたす w デザむンオリ゚ンテッドなプロダクト開発 Web サヌビスであればいかに目暙ずしおいるコンバヌゞョン率を高めるかどうか、分析〜調査〜開発ずいうサむクルをベヌスずした運甚になりたすが、特に 医療機関向けのシステムの堎合は、ムダな機胜や䜿いづらい UI だずサヌビス的に䞍安芁玠を抱かせる芁因にもなり、ビゞネスの成功可吊に盎結したす 。 そのため、リリヌスたでに UI を磚けるだけ磚き、実際に医療機関の珟堎に出向いおどういうフロヌで蚺察を行っおいるのかなどヒアリングしたり、出来䞊がった機胜を詊しおもらうなどし、十分に怜蚎した䞊でリリヌスしおいたす。こうしたデザむンを重芖した開発が行える点はメドレヌだからこその開発䜓制かもしれたせん。 このような デザむンオリ゚ンテッドなプロダクト開発を行う䞊で重芁なポむントは、事業理解ず゚ンゞニアずの密な連携 です。衚面的なデザむンではなく、実際に䜿われる利甚シヌンを想像し぀぀も、䜓隓するこずが難しい医療サヌビスだからこそ、前提の知識やヒアリング、ナヌザヌテストなどが重芁ずなりたすし、機胜的な郚分に関しおぱンゞニアず仕様に぀いお議論したり、ナヌスケヌスを螏たえおどのような UI に萜ずし蟌むべきかを考えながらデザむンに萜ずし蟌んでいきたす。むンタラクティブな衚珟など inVision でも衚珟しきれない现かい動きや導線などは、実装時に゚ンゞニアに䌝わりやすいようフロント゚ンド郚分のコヌディングを自ら行うこずでコヌドを通じお゚ンゞニアずコミュニケヌションが取りやすくもなるので、フロント゚ンドも把握しおおくこずは重芁です。 たずめ 個人的には「䌝えるデザむン」ず「機胜的なデザむン」で、明確に思考をわけお考えおデザむンしおきたわけではなかったのですが、提䟛すべき䟡倀の違いによっお 巊脳ず右脳それぞれ䜿い分けおデザむンしおいる かもしれないずいうこずに気付かされたした。これは以前デザむナヌの小山がブログで曞いた システム 1自動的に盎感で動く”早い思考”ずシステム 2手動で論理的に動く”遅い思考” が自分の䞭で振り子のように行き来しおるだろうなず感じたので、興味のある方は「思考ずデザむンスキル」も読んでもらうずわかりやすいです。 思考ずデザむンスキル 〜メドレヌ TechLunch〜 | MEDLEY Developer Portal はじめたしお最近みるみる倪りだしおはいるものの、ただ機は熟しおいないずダむ゚ットの時期をぐっず堪えおいる開発本郚むケメン担圓のデザむナヌ・小山です。 メドレヌでは TechLunch ずいう瀟内勉匷䌚を実斜しおいるのですが、前田に匕き続き... developer.medley.jp 最埌に ふだんビヌルばっかり呑んで 適圓な人ずレッテルを貌られおいるマ゚ダですが、今回は真面目なこずを曞いおみたしたがいかがでしたでしょうか。このブログを曞いおお正盎疲れたので、システム 2 が働いおるに違いないず思いたす。こんな私ず䞀緒に仕事がしたい、呑みたいずいうデザむナヌや゚ンゞニアさん。応募お埅ちしおおりたす。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp メンバヌのストヌリヌ | 株匏䌚瀟メドレヌ メンバヌのストヌリヌ 家族や友人が病気になった時に救いの手を差しのべる医療の力。... www.medley.jp
アバタヌ
最近 PS4 のグランツヌリスモスポヌツをやり始めお、自宅のネット環境の遅さに気づいたデザむナヌの マ゚ダ です。前回は DLS に぀いお ご玹介させおいただきたしたが、今回はメドレヌに入瀟しお感じた「デザむンプロセスの違い」に぀いお自分なりにたずめおみたした。 あずで読みたい人向けに、゚レベヌタヌピッチ颚にたずめるず、 [ CLINICS ] ずいうサヌビスは [ 患者ず医療機関向け ] それぞれサヌビスを提䟛しおいるが [ 提䟛䟡倀の違い ] によっお [ デザむンの圹割が異なる ] こずに気づいた 特に [ 医療機関向け ] は [ UI が重芁 ] ずなり [ 䌝えるこずを目的ずした Web サむト ] ずは違っお [ UI デザむンの良し悪しがプロダクト党䜓の品質に関わる ] ため [ 事業や技術を理解 ] した[ デザむンオリ゚ンテッド ] が求められる ずいうような内容です。 ナヌザヌによっお異なる提䟛䟡倀 メドレヌに入瀟しおから、オンラむン蚺療アプリ「 CLINICSクリニクス 」ずいうサヌビスのデザむンを䞻に担圓しおいるのですが、患者ず医療機関偎で提䟛しおいるプロダクトの内容が異なりたす。 オンラむン蚺療の内容を䌝え、利甚を促すための Web サむト患者・医療機関双方 患者がオンラむンで通院を行うためのアプリ 医療機関偎がオンラむンで遠隔蚺療を行うためのシステム サヌビスの入り口ずなる Web サむト Web ペヌゞの圹割ずしおは、オンラむン蚺療ずいうものがどういったもので、CLINICS を利甚するずどういう課題解決に぀ながるのか、ずいうサヌビスの特城を患者ず医療機関双方に「 䌝えるためのデザむン 」が必芁ずなりたす。 デザむンするにあたっお泚力すべきポむントは、装食やむメヌゞ画像などシンボリックなデザむンずストヌリヌ性のある導線蚭蚈をするこずで、芖芚的に特城を䌝わりやすくし、たたコンバヌゞョンポむントぞ誘導するため、ボタン等は目立たせるなど、適切に情報を䌝え、行動を促すためのデザむンが重芁になりたす。 患者がオンラむン蚺療を行うためのアプリ アプリは患者がオンラむン蚺療をするための「病院怜玢」→「予玄」→「問蚺」→「蚺察」→「決枈」の機胜をシヌムレスに繋げるためストレスのかからないナヌザヌ䜓隓を提䟛するこずが重芁です。 そもそもオンラむン蚺療のメリットずしお、埅ち時間の軜枛や、萜ち着いた環境で蚺察ができるなどが挙げられるため、そこに至るたでのナヌザヌ䜓隓を台無しにしおしたう UI では元も子もなくなっおしたいたす。 アプリでは「䌝えるデザむン」よりも「 機胜的なデザむン 」が必芁になりたすが、ナヌザヌの行動を途切れさせないよう、䞍必芁な芁玠や導線を極力排陀しお、非垞にシンプルな UI 蚭蚈をおこなっおおり、機胜自䜓を䞻匵しないデザむンを心がけおいたす。前回このブログでもずりあげた DLS も、そういった蚭蚈思想のもず開発を進めおいたからこそ実珟できたず思っおいたす。 医療機関向けの遠隔蚺療システム 医療機関偎に提䟛しおいるシステムは、オンラむン蚺療を行うためのツヌルです。 Web サむトのように「䌝えるデザむン」やコンバヌゞョン重芖ではなく、「 より機胜的に䜿いやすいデザむン 」が重芁になりたす。 このような画面を Bootstrap のような UI テンプレヌトそのたたの芋た目で構築しおしたうず、技術的に玠晎らしいものができたずしおも、䜿い勝手が悪く貧匱な機胜ず芋られかねないため、 デザむナヌが管理画面の UI 蚭蚈に携わるこずは、ビゞネス的にも非垞に重芁な芁玠 です。 特に CLINICS の医療機関向けのシステムは、実際にオンラむンで患者の蚺察を行うツヌルのため、医療機関偎が蚺療行為を぀぀がなく終えられるような UI 蚭蚈が重芁です。 MVP 的な手法で、ずりあえずリリヌスしお怜蚌を重ねおいくずいうスタンスがずれないため、リリヌスするたでに機胜的に䞍備がないか、医療埓事者が迷わず正しく䜿える UI 蚭蚈になっおいるかなど、瀟内や実際の医療機関のテストを繰り返し、詊行錯誀を経おリリヌスするずいう、プロダクトデザむンをしおいる感芚になり「䌝えるデザむン」ずは違った思考でデザむンに取り組んでいたす。 機胜重芖なサヌビスこそ、盎感的にシンプルな UI が重芁 このように CLINICS ずいう 1 ぀のサヌビスを構成する芁玠の䞭でも、タヌゲットナヌザヌや提䟛䟡倀の違いによっお、デザむンアプロヌチや重芁芖する芖点が異なりたす。 たずえば、自分も業務でよく利甚するプロトタむピングツヌルの inVision もログむン前は、利甚シヌンやより魅力的なサヌビスであるずいうこずを䌝えるためのデザむンをしおおり、ログむン埌は盎感的にわかりやすいシンプルな UI 蚭蚈で、ログむン前埌でサヌビスの UI が異なりたす。 inVision も機胜は豊富ですが、プロトタむピングを行う䞊で非垞にシンプルな操䜜性を提䟛しおおり、無駄な説明や導線がなくおも盎感的に䜿える UI は、継続しお利甚できる安心感にも぀ながり、芋習うべき UI だなず思っおいたす。 inVision の画面の違い CLINICS の医療機関向けシステムも受付管理やスケゞュヌル、オンラむン蚺療を行う機胜など耇数の機胜をひず぀のサヌビスずしお提䟛しおいるため、UI 的に耇雑になりかねたせん。耇雑な機胜をたずめ、画面䞊にシンプルに萜ずし蟌めるかどうかずいうのを吟味し、䜜っおは壊し、䜜っおは壊しを繰り返ししたす。 これならいけるずおもった UI も、機胜面での芋萜ずしなどがあったりするず導線に矛盟が生じたり、シンプルに衚珟した぀もりが、逆に䜿い勝手の悪い UI になっおしたったり。UI を考えるずいうのは、感性に蚎えるデザむンずは違ったよりロゞカルな思考が必芁で、デザむンしながら四苊八苊しお、ぶ぀ぶ぀独り蚀を蚀うこずが倚くなりたす w デザむンオリ゚ンテッドなプロダクト開発 Web サヌビスであればいかに目暙ずしおいるコンバヌゞョン率を高めるかどうか、分析〜調査〜開発ずいうサむクルをベヌスずした運甚になりたすが、特に 医療機関向けのシステムの堎合は、ムダな機胜や䜿いづらい UI だずサヌビス的に䞍安芁玠を抱かせる芁因にもなり、ビゞネスの成功可吊に盎結したす 。 そのため、リリヌスたでに UI を磚けるだけ磚き、実際に医療機関の珟堎に出向いおどういうフロヌで蚺察を行っおいるのかなどヒアリングしたり、出来䞊がった機胜を詊しおもらうなどし、十分に怜蚎した䞊でリリヌスしおいたす。こうしたデザむンを重芖した開発が行える点はメドレヌだからこその開発䜓制かもしれたせん。 このような デザむンオリ゚ンテッドなプロダクト開発を行う䞊で重芁なポむントは、事業理解ず゚ンゞニアずの密な連携 です。衚面的なデザむンではなく、実際に䜿われる利甚シヌンを想像し぀぀も、䜓隓するこずが難しい医療サヌビスだからこそ、前提の知識やヒアリング、ナヌザヌテストなどが重芁ずなりたすし、機胜的な郚分に関しおぱンゞニアず仕様に぀いお議論したり、ナヌスケヌスを螏たえおどのような UI に萜ずし蟌むべきかを考えながらデザむンに萜ずし蟌んでいきたす。むンタラクティブな衚珟など inVision でも衚珟しきれない现かい動きや導線などは、実装時に゚ンゞニアに䌝わりやすいようフロント゚ンド郚分のコヌディングを自ら行うこずでコヌドを通じお゚ンゞニアずコミュニケヌションが取りやすくもなるので、フロント゚ンドも把握しおおくこずは重芁です。 たずめ 個人的には「䌝えるデザむン」ず「機胜的なデザむン」で、明確に思考をわけお考えおデザむンしおきたわけではなかったのですが、提䟛すべき䟡倀の違いによっお 巊脳ず右脳それぞれ䜿い分けおデザむンしおいる かもしれないずいうこずに気付かされたした。これは以前デザむナヌの小山がブログで曞いた システム 1自動的に盎感で動く”早い思考”ずシステム 2手動で論理的に動く”遅い思考” が自分の䞭で振り子のように行き来しおるだろうなず感じたので、興味のある方は「思考ずデザむンスキル」も読んでもらうずわかりやすいです。 思考ずデザむンスキル 〜メドレヌ TechLunch〜 | MEDLEY Developer Portal はじめたしお最近みるみる倪りだしおはいるものの、ただ機は熟しおいないずダむ゚ットの時期をぐっず堪えおいる開発本郚むケメン担圓のデザむナヌ・小山です。 メドレヌでは TechLunch ずいう瀟内勉匷䌚を実斜しおいるのですが、前田に匕き続き... developer.medley.jp 最埌に ふだんビヌルばっかり呑んで 適圓な人ずレッテルを貌られおいるマ゚ダですが、今回は真面目なこずを曞いおみたしたがいかがでしたでしょうか。このブログを曞いおお正盎疲れたので、システム 2 が働いおるに違いないず思いたす。こんな私ず䞀緒に仕事がしたい、呑みたいずいうデザむナヌや゚ンゞニアさん。応募お埅ちしおおりたす。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp メンバヌのストヌリヌ | 株匏䌚瀟メドレヌ メンバヌのストヌリヌ 家族や友人が病気になった時に救いの手を差しのべる医療の力。... www.medley.jp
アバタヌ
最近 PS4 のグランツヌリスモスポヌツをやり始めお、自宅のネット環境の遅さに気づいたデザむナヌの マ゚ダ です。前回は DLS に぀いお ご玹介させおいただきたしたが、今回はメドレヌに入瀟しお感じた「デザむンプロセスの違い」に぀いお自分なりにたずめおみたした。 あずで読みたい人向けに、゚レベヌタヌピッチ颚にたずめるず、 [ CLINICS ] ずいうサヌビスは [ 患者ず医療機関向け ] それぞれサヌビスを提䟛しおいるが [ 提䟛䟡倀の違い ] によっお [ デザむンの圹割が異なる ] こずに気づいた 特に [ 医療機関向け ] は [ UI が重芁 ] ずなり [ 䌝えるこずを目的ずした Web サむト ] ずは違っお [ UI デザむンの良し悪しがプロダクト党䜓の品質に関わる ] ため [ 事業や技術を理解 ] した[ デザむンオリ゚ンテッド ] が求められる ずいうような内容です。 ナヌザヌによっお異なる提䟛䟡倀 メドレヌに入瀟しおから、オンラむン蚺療アプリ「 CLINICSクリニクス 」ずいうサヌビスのデザむンを䞻に担圓しおいるのですが、患者ず医療機関偎で提䟛しおいるプロダクトの内容が異なりたす。 オンラむン蚺療の内容を䌝え、利甚を促すための Web サむト患者・医療機関双方 患者がオンラむンで通院を行うためのアプリ 医療機関偎がオンラむンで遠隔蚺療を行うためのシステム サヌビスの入り口ずなる Web サむト Web ペヌゞの圹割ずしおは、オンラむン蚺療ずいうものがどういったもので、CLINICS を利甚するずどういう課題解決に぀ながるのか、ずいうサヌビスの特城を患者ず医療機関双方に「 䌝えるためのデザむン 」が必芁ずなりたす。 デザむンするにあたっお泚力すべきポむントは、装食やむメヌゞ画像などシンボリックなデザむンずストヌリヌ性のある導線蚭蚈をするこずで、芖芚的に特城を䌝わりやすくし、たたコンバヌゞョンポむントぞ誘導するため、ボタン等は目立たせるなど、適切に情報を䌝え、行動を促すためのデザむンが重芁になりたす。 患者がオンラむン蚺療を行うためのアプリ アプリは患者がオンラむン蚺療をするための「病院怜玢」→「予玄」→「問蚺」→「蚺察」→「決枈」の機胜をシヌムレスに繋げるためストレスのかからないナヌザヌ䜓隓を提䟛するこずが重芁です。 そもそもオンラむン蚺療のメリットずしお、埅ち時間の軜枛や、萜ち着いた環境で蚺察ができるなどが挙げられるため、そこに至るたでのナヌザヌ䜓隓を台無しにしおしたう UI では元も子もなくなっおしたいたす。 アプリでは「䌝えるデザむン」よりも「 機胜的なデザむン 」が必芁になりたすが、ナヌザヌの行動を途切れさせないよう、䞍必芁な芁玠や導線を極力排陀しお、非垞にシンプルな UI 蚭蚈をおこなっおおり、機胜自䜓を䞻匵しないデザむンを心がけおいたす。前回このブログでもずりあげた DLS も、そういった蚭蚈思想のもず開発を進めおいたからこそ実珟できたず思っおいたす。 医療機関向けの遠隔蚺療システム 医療機関偎に提䟛しおいるシステムは、オンラむン蚺療を行うためのツヌルです。 Web サむトのように「䌝えるデザむン」やコンバヌゞョン重芖ではなく、「 より機胜的に䜿いやすいデザむン 」が重芁になりたす。 このような画面を Bootstrap のような UI テンプレヌトそのたたの芋た目で構築しおしたうず、技術的に玠晎らしいものができたずしおも、䜿い勝手が悪く貧匱な機胜ず芋られかねないため、 デザむナヌが管理画面の UI 蚭蚈に携わるこずは、ビゞネス的にも非垞に重芁な芁玠 です。 特に CLINICS の医療機関向けのシステムは、実際にオンラむンで患者の蚺察を行うツヌルのため、医療機関偎が蚺療行為を぀぀がなく終えられるような UI 蚭蚈が重芁です。 MVP 的な手法で、ずりあえずリリヌスしお怜蚌を重ねおいくずいうスタンスがずれないため、リリヌスするたでに機胜的に䞍備がないか、医療埓事者が迷わず正しく䜿える UI 蚭蚈になっおいるかなど、瀟内や実際の医療機関のテストを繰り返し、詊行錯誀を経おリリヌスするずいう、プロダクトデザむンをしおいる感芚になり「䌝えるデザむン」ずは違った思考でデザむンに取り組んでいたす。 機胜重芖なサヌビスこそ、盎感的にシンプルな UI が重芁 このように CLINICS ずいう 1 ぀のサヌビスを構成する芁玠の䞭でも、タヌゲットナヌザヌや提䟛䟡倀の違いによっお、デザむンアプロヌチや重芁芖する芖点が異なりたす。 たずえば、自分も業務でよく利甚するプロトタむピングツヌルの inVision もログむン前は、利甚シヌンやより魅力的なサヌビスであるずいうこずを䌝えるためのデザむンをしおおり、ログむン埌は盎感的にわかりやすいシンプルな UI 蚭蚈で、ログむン前埌でサヌビスの UI が異なりたす。 inVision も機胜は豊富ですが、プロトタむピングを行う䞊で非垞にシンプルな操䜜性を提䟛しおおり、無駄な説明や導線がなくおも盎感的に䜿える UI は、継続しお利甚できる安心感にも぀ながり、芋習うべき UI だなず思っおいたす。 inVision の画面の違い CLINICS の医療機関向けシステムも受付管理やスケゞュヌル、オンラむン蚺療を行う機胜など耇数の機胜をひず぀のサヌビスずしお提䟛しおいるため、UI 的に耇雑になりかねたせん。耇雑な機胜をたずめ、画面䞊にシンプルに萜ずし蟌めるかどうかずいうのを吟味し、䜜っおは壊し、䜜っおは壊しを繰り返ししたす。 これならいけるずおもった UI も、機胜面での芋萜ずしなどがあったりするず導線に矛盟が生じたり、シンプルに衚珟した぀もりが、逆に䜿い勝手の悪い UI になっおしたったり。UI を考えるずいうのは、感性に蚎えるデザむンずは違ったよりロゞカルな思考が必芁で、デザむンしながら四苊八苊しお、ぶ぀ぶ぀独り蚀を蚀うこずが倚くなりたす w デザむンオリ゚ンテッドなプロダクト開発 Web サヌビスであればいかに目暙ずしおいるコンバヌゞョン率を高めるかどうか、分析〜調査〜開発ずいうサむクルをベヌスずした運甚になりたすが、特に 医療機関向けのシステムの堎合は、ムダな機胜や䜿いづらい UI だずサヌビス的に䞍安芁玠を抱かせる芁因にもなり、ビゞネスの成功可吊に盎結したす 。 そのため、リリヌスたでに UI を磚けるだけ磚き、実際に医療機関の珟堎に出向いおどういうフロヌで蚺察を行っおいるのかなどヒアリングしたり、出来䞊がった機胜を詊しおもらうなどし、十分に怜蚎した䞊でリリヌスしおいたす。こうしたデザむンを重芖した開発が行える点はメドレヌだからこその開発䜓制かもしれたせん。 このような デザむンオリ゚ンテッドなプロダクト開発を行う䞊で重芁なポむントは、事業理解ず゚ンゞニアずの密な連携 です。衚面的なデザむンではなく、実際に䜿われる利甚シヌンを想像し぀぀も、䜓隓するこずが難しい医療サヌビスだからこそ、前提の知識やヒアリング、ナヌザヌテストなどが重芁ずなりたすし、機胜的な郚分に関しおぱンゞニアず仕様に぀いお議論したり、ナヌスケヌスを螏たえおどのような UI に萜ずし蟌むべきかを考えながらデザむンに萜ずし蟌んでいきたす。むンタラクティブな衚珟など inVision でも衚珟しきれない现かい動きや導線などは、実装時に゚ンゞニアに䌝わりやすいようフロント゚ンド郚分のコヌディングを自ら行うこずでコヌドを通じお゚ンゞニアずコミュニケヌションが取りやすくもなるので、フロント゚ンドも把握しおおくこずは重芁です。 たずめ 個人的には「䌝えるデザむン」ず「機胜的なデザむン」で、明確に思考をわけお考えおデザむンしおきたわけではなかったのですが、提䟛すべき䟡倀の違いによっお 巊脳ず右脳それぞれ䜿い分けおデザむンしおいる かもしれないずいうこずに気付かされたした。これは以前デザむナヌの小山がブログで曞いた システム 1自動的に盎感で動く”早い思考”ずシステム 2手動で論理的に動く”遅い思考” が自分の䞭で振り子のように行き来しおるだろうなず感じたので、興味のある方は「思考ずデザむンスキル」も読んでもらうずわかりやすいです。 思考ずデザむンスキル 〜メドレヌ TechLunch〜 | MEDLEY Developer Portal はじめたしお最近みるみる倪りだしおはいるものの、ただ機は熟しおいないずダむ゚ットの時期をぐっず堪えおいる開発本郚むケメン担圓のデザむナヌ・小山です。 メドレヌでは TechLunch ずいう瀟内勉匷䌚を実斜しおいるのですが、前田に匕き続き... developer.medley.jp 最埌に ふだんビヌルばっかり呑んで 適圓な人ずレッテルを貌られおいるマ゚ダですが、今回は真面目なこずを曞いおみたしたがいかがでしたでしょうか。このブログを曞いおお正盎疲れたので、システム 2 が働いおるに違いないず思いたす。こんな私ず䞀緒に仕事がしたい、呑みたいずいうデザむナヌや゚ンゞニアさん。応募お埅ちしおおりたす。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp メンバヌのストヌリヌ | 株匏䌚瀟メドレヌ メンバヌのストヌリヌ 家族や友人が病気になった時に救いの手を差しのべる医療の力。... www.medley.jp
アバタヌ
最近 PS4 のグランツヌリスモスポヌツをやり始めお、自宅のネット環境の遅さに気づいたデザむナヌの マ゚ダ です。前回は DLS に぀いお ご玹介させおいただきたしたが、今回はメドレヌに入瀟しお感じた「デザむンプロセスの違い」に぀いお自分なりにたずめおみたした。 あずで読みたい人向けに、゚レベヌタヌピッチ颚にたずめるず、 [ CLINICS ] ずいうサヌビスは [ 患者ず医療機関向け ] それぞれサヌビスを提䟛しおいるが [ 提䟛䟡倀の違い ] によっお [ デザむンの圹割が異なる ] こずに気づいた 特に [ 医療機関向け ] は [ UI が重芁 ] ずなり [ 䌝えるこずを目的ずした Web サむト ] ずは違っお [ UI デザむンの良し悪しがプロダクト党䜓の品質に関わる ] ため [ 事業や技術を理解 ] した[ デザむンオリ゚ンテッド ] が求められる ずいうような内容です。 ナヌザヌによっお異なる提䟛䟡倀 メドレヌに入瀟しおから、オンラむン蚺療アプリ「 CLINICSクリニクス 」ずいうサヌビスのデザむンを䞻に担圓しおいるのですが、患者ず医療機関偎で提䟛しおいるプロダクトの内容が異なりたす。 オンラむン蚺療の内容を䌝え、利甚を促すための Web サむト患者・医療機関双方 患者がオンラむンで通院を行うためのアプリ 医療機関偎がオンラむンで遠隔蚺療を行うためのシステム サヌビスの入り口ずなる Web サむト Web ペヌゞの圹割ずしおは、オンラむン蚺療ずいうものがどういったもので、CLINICS を利甚するずどういう課題解決に぀ながるのか、ずいうサヌビスの特城を患者ず医療機関双方に「 䌝えるためのデザむン 」が必芁ずなりたす。 デザむンするにあたっお泚力すべきポむントは、装食やむメヌゞ画像などシンボリックなデザむンずストヌリヌ性のある導線蚭蚈をするこずで、芖芚的に特城を䌝わりやすくし、たたコンバヌゞョンポむントぞ誘導するため、ボタン等は目立たせるなど、適切に情報を䌝え、行動を促すためのデザむンが重芁になりたす。 患者がオンラむン蚺療を行うためのアプリ アプリは患者がオンラむン蚺療をするための「病院怜玢」→「予玄」→「問蚺」→「蚺察」→「決枈」の機胜をシヌムレスに繋げるためストレスのかからないナヌザヌ䜓隓を提䟛するこずが重芁です。 そもそもオンラむン蚺療のメリットずしお、埅ち時間の軜枛や、萜ち着いた環境で蚺察ができるなどが挙げられるため、そこに至るたでのナヌザヌ䜓隓を台無しにしおしたう UI では元も子もなくなっおしたいたす。 アプリでは「䌝えるデザむン」よりも「 機胜的なデザむン 」が必芁になりたすが、ナヌザヌの行動を途切れさせないよう、䞍必芁な芁玠や導線を極力排陀しお、非垞にシンプルな UI 蚭蚈をおこなっおおり、機胜自䜓を䞻匵しないデザむンを心がけおいたす。前回このブログでもずりあげた DLS も、そういった蚭蚈思想のもず開発を進めおいたからこそ実珟できたず思っおいたす。 医療機関向けの遠隔蚺療システム 医療機関偎に提䟛しおいるシステムは、オンラむン蚺療を行うためのツヌルです。 Web サむトのように「䌝えるデザむン」やコンバヌゞョン重芖ではなく、「 より機胜的に䜿いやすいデザむン 」が重芁になりたす。 このような画面を Bootstrap のような UI テンプレヌトそのたたの芋た目で構築しおしたうず、技術的に玠晎らしいものができたずしおも、䜿い勝手が悪く貧匱な機胜ず芋られかねないため、 デザむナヌが管理画面の UI 蚭蚈に携わるこずは、ビゞネス的にも非垞に重芁な芁玠 です。 特に CLINICS の医療機関向けのシステムは、実際にオンラむンで患者の蚺察を行うツヌルのため、医療機関偎が蚺療行為を぀぀がなく終えられるような UI 蚭蚈が重芁です。 MVP 的な手法で、ずりあえずリリヌスしお怜蚌を重ねおいくずいうスタンスがずれないため、リリヌスするたでに機胜的に䞍備がないか、医療埓事者が迷わず正しく䜿える UI 蚭蚈になっおいるかなど、瀟内や実際の医療機関のテストを繰り返し、詊行錯誀を経おリリヌスするずいう、プロダクトデザむンをしおいる感芚になり「䌝えるデザむン」ずは違った思考でデザむンに取り組んでいたす。 機胜重芖なサヌビスこそ、盎感的にシンプルな UI が重芁 このように CLINICS ずいう 1 ぀のサヌビスを構成する芁玠の䞭でも、タヌゲットナヌザヌや提䟛䟡倀の違いによっお、デザむンアプロヌチや重芁芖する芖点が異なりたす。 たずえば、自分も業務でよく利甚するプロトタむピングツヌルの inVision もログむン前は、利甚シヌンやより魅力的なサヌビスであるずいうこずを䌝えるためのデザむンをしおおり、ログむン埌は盎感的にわかりやすいシンプルな UI 蚭蚈で、ログむン前埌でサヌビスの UI が異なりたす。 inVision も機胜は豊富ですが、プロトタむピングを行う䞊で非垞にシンプルな操䜜性を提䟛しおおり、無駄な説明や導線がなくおも盎感的に䜿える UI は、継続しお利甚できる安心感にも぀ながり、芋習うべき UI だなず思っおいたす。 inVision の画面の違い CLINICS の医療機関向けシステムも受付管理やスケゞュヌル、オンラむン蚺療を行う機胜など耇数の機胜をひず぀のサヌビスずしお提䟛しおいるため、UI 的に耇雑になりかねたせん。耇雑な機胜をたずめ、画面䞊にシンプルに萜ずし蟌めるかどうかずいうのを吟味し、䜜っおは壊し、䜜っおは壊しを繰り返ししたす。 これならいけるずおもった UI も、機胜面での芋萜ずしなどがあったりするず導線に矛盟が生じたり、シンプルに衚珟した぀もりが、逆に䜿い勝手の悪い UI になっおしたったり。UI を考えるずいうのは、感性に蚎えるデザむンずは違ったよりロゞカルな思考が必芁で、デザむンしながら四苊八苊しお、ぶ぀ぶ぀独り蚀を蚀うこずが倚くなりたす w デザむンオリ゚ンテッドなプロダクト開発 Web サヌビスであればいかに目暙ずしおいるコンバヌゞョン率を高めるかどうか、分析〜調査〜開発ずいうサむクルをベヌスずした運甚になりたすが、特に 医療機関向けのシステムの堎合は、ムダな機胜や䜿いづらい UI だずサヌビス的に䞍安芁玠を抱かせる芁因にもなり、ビゞネスの成功可吊に盎結したす 。 そのため、リリヌスたでに UI を磚けるだけ磚き、実際に医療機関の珟堎に出向いおどういうフロヌで蚺察を行っおいるのかなどヒアリングしたり、出来䞊がった機胜を詊しおもらうなどし、十分に怜蚎した䞊でリリヌスしおいたす。こうしたデザむンを重芖した開発が行える点はメドレヌだからこその開発䜓制かもしれたせん。 このような デザむンオリ゚ンテッドなプロダクト開発を行う䞊で重芁なポむントは、事業理解ず゚ンゞニアずの密な連携 です。衚面的なデザむンではなく、実際に䜿われる利甚シヌンを想像し぀぀も、䜓隓するこずが難しい医療サヌビスだからこそ、前提の知識やヒアリング、ナヌザヌテストなどが重芁ずなりたすし、機胜的な郚分に関しおぱンゞニアず仕様に぀いお議論したり、ナヌスケヌスを螏たえおどのような UI に萜ずし蟌むべきかを考えながらデザむンに萜ずし蟌んでいきたす。むンタラクティブな衚珟など inVision でも衚珟しきれない现かい動きや導線などは、実装時に゚ンゞニアに䌝わりやすいようフロント゚ンド郚分のコヌディングを自ら行うこずでコヌドを通じお゚ンゞニアずコミュニケヌションが取りやすくもなるので、フロント゚ンドも把握しおおくこずは重芁です。 たずめ 個人的には「䌝えるデザむン」ず「機胜的なデザむン」で、明確に思考をわけお考えおデザむンしおきたわけではなかったのですが、提䟛すべき䟡倀の違いによっお 巊脳ず右脳それぞれ䜿い分けおデザむンしおいる かもしれないずいうこずに気付かされたした。これは以前デザむナヌの小山がブログで曞いた システム 1自動的に盎感で動く”早い思考”ずシステム 2手動で論理的に動く”遅い思考” が自分の䞭で振り子のように行き来しおるだろうなず感じたので、興味のある方は「思考ずデザむンスキル」も読んでもらうずわかりやすいです。 思考ずデザむンスキル 〜メドレヌ TechLunch〜 | MEDLEY Developer Portal はじめたしお最近みるみる倪りだしおはいるものの、ただ機は熟しおいないずダむ゚ットの時期をぐっず堪えおいる開発本郚むケメン担圓のデザむナヌ・小山です。 メドレヌでは TechLunch ずいう瀟内勉匷䌚を実斜しおいるのですが、前田に匕き続き... developer.medley.jp 最埌に ふだんビヌルばっかり呑んで 適圓な人ずレッテルを貌られおいるマ゚ダですが、今回は真面目なこずを曞いおみたしたがいかがでしたでしょうか。このブログを曞いおお正盎疲れたので、システム 2 が働いおるに違いないず思いたす。こんな私ず䞀緒に仕事がしたい、呑みたいずいうデザむナヌや゚ンゞニアさん。応募お埅ちしおおりたす。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp メンバヌのストヌリヌ | 株匏䌚瀟メドレヌ メンバヌのストヌリヌ 家族や友人が病気になった時に救いの手を差しのべる医療の力。... www.medley.jp
アバタヌ
最近 PS4 のグランツヌリスモスポヌツをやり始めお、自宅のネット環境の遅さに気づいたデザむナヌの マ゚ダ です。前回は DLS に぀いお ご玹介させおいただきたしたが、今回はメドレヌに入瀟しお感じた「デザむンプロセスの違い」に぀いお自分なりにたずめおみたした。 あずで読みたい人向けに、゚レベヌタヌピッチ颚にたずめるず、 [ CLINICS ] ずいうサヌビスは [ 患者ず医療機関向け ] それぞれサヌビスを提䟛しおいるが [ 提䟛䟡倀の違い ] によっお [ デザむンの圹割が異なる ] こずに気づいた 特に [ 医療機関向け ] は [ UI が重芁 ] ずなり [ 䌝えるこずを目的ずした Web サむト ] ずは違っお [ UI デザむンの良し悪しがプロダクト党䜓の品質に関わる ] ため [ 事業や技術を理解 ] した[ デザむンオリ゚ンテッド ] が求められる ずいうような内容です。 ナヌザヌによっお異なる提䟛䟡倀 メドレヌに入瀟しおから、オンラむン蚺療アプリ「 CLINICSクリニクス 」ずいうサヌビスのデザむンを䞻に担圓しおいるのですが、患者ず医療機関偎で提䟛しおいるプロダクトの内容が異なりたす。 オンラむン蚺療の内容を䌝え、利甚を促すための Web サむト患者・医療機関双方 患者がオンラむンで通院を行うためのアプリ 医療機関偎がオンラむンで遠隔蚺療を行うためのシステム サヌビスの入り口ずなる Web サむト Web ペヌゞの圹割ずしおは、オンラむン蚺療ずいうものがどういったもので、CLINICS を利甚するずどういう課題解決に぀ながるのか、ずいうサヌビスの特城を患者ず医療機関双方に「 䌝えるためのデザむン 」が必芁ずなりたす。 デザむンするにあたっお泚力すべきポむントは、装食やむメヌゞ画像などシンボリックなデザむンずストヌリヌ性のある導線蚭蚈をするこずで、芖芚的に特城を䌝わりやすくし、たたコンバヌゞョンポむントぞ誘導するため、ボタン等は目立たせるなど、適切に情報を䌝え、行動を促すためのデザむンが重芁になりたす。 患者がオンラむン蚺療を行うためのアプリ アプリは患者がオンラむン蚺療をするための「病院怜玢」→「予玄」→「問蚺」→「蚺察」→「決枈」の機胜をシヌムレスに繋げるためストレスのかからないナヌザヌ䜓隓を提䟛するこずが重芁です。 そもそもオンラむン蚺療のメリットずしお、埅ち時間の軜枛や、萜ち着いた環境で蚺察ができるなどが挙げられるため、そこに至るたでのナヌザヌ䜓隓を台無しにしおしたう UI では元も子もなくなっおしたいたす。 アプリでは「䌝えるデザむン」よりも「 機胜的なデザむン 」が必芁になりたすが、ナヌザヌの行動を途切れさせないよう、䞍必芁な芁玠や導線を極力排陀しお、非垞にシンプルな UI 蚭蚈をおこなっおおり、機胜自䜓を䞻匵しないデザむンを心がけおいたす。前回このブログでもずりあげた DLS も、そういった蚭蚈思想のもず開発を進めおいたからこそ実珟できたず思っおいたす。 医療機関向けの遠隔蚺療システム 医療機関偎に提䟛しおいるシステムは、オンラむン蚺療を行うためのツヌルです。 Web サむトのように「䌝えるデザむン」やコンバヌゞョン重芖ではなく、「 より機胜的に䜿いやすいデザむン 」が重芁になりたす。 このような画面を Bootstrap のような UI テンプレヌトそのたたの芋た目で構築しおしたうず、技術的に玠晎らしいものができたずしおも、䜿い勝手が悪く貧匱な機胜ず芋られかねないため、 デザむナヌが管理画面の UI 蚭蚈に携わるこずは、ビゞネス的にも非垞に重芁な芁玠 です。 特に CLINICS の医療機関向けのシステムは、実際にオンラむンで患者の蚺察を行うツヌルのため、医療機関偎が蚺療行為を぀぀がなく終えられるような UI 蚭蚈が重芁です。 MVP 的な手法で、ずりあえずリリヌスしお怜蚌を重ねおいくずいうスタンスがずれないため、リリヌスするたでに機胜的に䞍備がないか、医療埓事者が迷わず正しく䜿える UI 蚭蚈になっおいるかなど、瀟内や実際の医療機関のテストを繰り返し、詊行錯誀を経おリリヌスするずいう、プロダクトデザむンをしおいる感芚になり「䌝えるデザむン」ずは違った思考でデザむンに取り組んでいたす。 機胜重芖なサヌビスこそ、盎感的にシンプルな UI が重芁 このように CLINICS ずいう 1 ぀のサヌビスを構成する芁玠の䞭でも、タヌゲットナヌザヌや提䟛䟡倀の違いによっお、デザむンアプロヌチや重芁芖する芖点が異なりたす。 たずえば、自分も業務でよく利甚するプロトタむピングツヌルの inVision もログむン前は、利甚シヌンやより魅力的なサヌビスであるずいうこずを䌝えるためのデザむンをしおおり、ログむン埌は盎感的にわかりやすいシンプルな UI 蚭蚈で、ログむン前埌でサヌビスの UI が異なりたす。 inVision も機胜は豊富ですが、プロトタむピングを行う䞊で非垞にシンプルな操䜜性を提䟛しおおり、無駄な説明や導線がなくおも盎感的に䜿える UI は、継続しお利甚できる安心感にも぀ながり、芋習うべき UI だなず思っおいたす。 inVision の画面の違い CLINICS の医療機関向けシステムも受付管理やスケゞュヌル、オンラむン蚺療を行う機胜など耇数の機胜をひず぀のサヌビスずしお提䟛しおいるため、UI 的に耇雑になりかねたせん。耇雑な機胜をたずめ、画面䞊にシンプルに萜ずし蟌めるかどうかずいうのを吟味し、䜜っおは壊し、䜜っおは壊しを繰り返ししたす。 これならいけるずおもった UI も、機胜面での芋萜ずしなどがあったりするず導線に矛盟が生じたり、シンプルに衚珟した぀もりが、逆に䜿い勝手の悪い UI になっおしたったり。UI を考えるずいうのは、感性に蚎えるデザむンずは違ったよりロゞカルな思考が必芁で、デザむンしながら四苊八苊しお、ぶ぀ぶ぀独り蚀を蚀うこずが倚くなりたす w デザむンオリ゚ンテッドなプロダクト開発 Web サヌビスであればいかに目暙ずしおいるコンバヌゞョン率を高めるかどうか、分析〜調査〜開発ずいうサむクルをベヌスずした運甚になりたすが、特に 医療機関向けのシステムの堎合は、ムダな機胜や䜿いづらい UI だずサヌビス的に䞍安芁玠を抱かせる芁因にもなり、ビゞネスの成功可吊に盎結したす 。 そのため、リリヌスたでに UI を磚けるだけ磚き、実際に医療機関の珟堎に出向いおどういうフロヌで蚺察を行っおいるのかなどヒアリングしたり、出来䞊がった機胜を詊しおもらうなどし、十分に怜蚎した䞊でリリヌスしおいたす。こうしたデザむンを重芖した開発が行える点はメドレヌだからこその開発䜓制かもしれたせん。 このような デザむンオリ゚ンテッドなプロダクト開発を行う䞊で重芁なポむントは、事業理解ず゚ンゞニアずの密な連携 です。衚面的なデザむンではなく、実際に䜿われる利甚シヌンを想像し぀぀も、䜓隓するこずが難しい医療サヌビスだからこそ、前提の知識やヒアリング、ナヌザヌテストなどが重芁ずなりたすし、機胜的な郚分に関しおぱンゞニアず仕様に぀いお議論したり、ナヌスケヌスを螏たえおどのような UI に萜ずし蟌むべきかを考えながらデザむンに萜ずし蟌んでいきたす。むンタラクティブな衚珟など inVision でも衚珟しきれない现かい動きや導線などは、実装時に゚ンゞニアに䌝わりやすいようフロント゚ンド郚分のコヌディングを自ら行うこずでコヌドを通じお゚ンゞニアずコミュニケヌションが取りやすくもなるので、フロント゚ンドも把握しおおくこずは重芁です。 たずめ 個人的には「䌝えるデザむン」ず「機胜的なデザむン」で、明確に思考をわけお考えおデザむンしおきたわけではなかったのですが、提䟛すべき䟡倀の違いによっお 巊脳ず右脳それぞれ䜿い分けおデザむンしおいる かもしれないずいうこずに気付かされたした。これは以前デザむナヌの小山がブログで曞いた システム 1自動的に盎感で動く”早い思考”ずシステム 2手動で論理的に動く”遅い思考” が自分の䞭で振り子のように行き来しおるだろうなず感じたので、興味のある方は「思考ずデザむンスキル」も読んでもらうずわかりやすいです。 思考ずデザむンスキル 〜メドレヌ TechLunch〜 | MEDLEY Developer Portal はじめたしお最近みるみる倪りだしおはいるものの、ただ機は熟しおいないずダむ゚ットの時期をぐっず堪えおいる開発本郚むケメン担圓のデザむナヌ・小山です。 メドレヌでは TechLunch ずいう瀟内勉匷䌚を実斜しおいるのですが、前田に匕き続き... developer.medley.jp 最埌に ふだんビヌルばっかり呑んで 適圓な人ずレッテルを貌られおいるマ゚ダですが、今回は真面目なこずを曞いおみたしたがいかがでしたでしょうか。このブログを曞いおお正盎疲れたので、システム 2 が働いおるに違いないず思いたす。こんな私ず䞀緒に仕事がしたい、呑みたいずいうデザむナヌや゚ンゞニアさん。応募お埅ちしおおりたす。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp メンバヌのストヌリヌ | 株匏䌚瀟メドレヌ メンバヌのストヌリヌ 家族や友人が病気になった時に救いの手を差しのべる医療の力。... www.medley.jp
アバタヌ
こんにちは。開発本郚の 宍戞 です。 メドレヌでは定期的に、テヌマに沿っお組織の技術的な底䞊げを行うための機䌚 タスクフォヌス ず呌んでいたすを行っおいたす。そのタスクフォヌスの぀ずしお先日、フロント゚ンド開発力のベヌスアップを目的ずしたタスクフォヌスを行いたした。本蚘事では、その取組みに぀いおご玹介したいず思いたす。 背景 メドレヌには珟圚 20 人匱の゚ンゞニアが圚籍しおおり、その玄半数がサヌバヌサむド出身者です。たた普段の開発においおは、䞀぀の機胜をフロントからサヌバヌサむドたで䞀貫しお䞀人が担圓するケヌスが倚くありたす。サヌバヌサむド出身者のフロント゚ンド開発のスキルセットには倚少ばら぀きはあるものの、普段の開発業務ではレビュヌ等でそれぞれサポヌトし぀぀開発を行っおいたす。 しかし、フロント゚ンドの基瀎的な郚分や最新の流れたで聞かれるず䞍安なメンバヌも少なくありたせん。フロント゚ンド出身のメンバヌが䞻導し、改めお基瀎や最新情報に関しお敎理・フォロヌを行うこずで、組織党䜓のフロント゚ンドの開発力を高めおいきたいず考えたした。 タスクフォヌスの目的 今回のタスクフォヌスは『フロント゚ンドの基本や最近のトレンドに関しお孊ぶ』こずで『フロント゚ンド開発における技術遞定、蚭蚈、実装ができる基瀎を身に぀ける』、そしおこれらをもずに『新芏のプロゞェクトで蚭蚈段階から自走できるようになる』こずを目的ずしたした。 その䞭でも特にここ数幎、倉化の流れが早かった JavaScript を䞭心にトピックを遞定したした。 参加者は、これたでサヌバヌサむド開発を䞭心に行っおきたメンバヌ数名です。背景でも觊れたずおり、業務経隓はそれぞれある前提でのスタヌトであったため、基瀎をみっちりずいうよりは、基瀎的な話から最近の話題たでを䞀通り確認しながら、各自の持っおいる知識の敎理ず土台を固めるこずで、今埌の蚭蚈や技術遞定を行う際の指針を埗るこずを目的ずしたした。 進め方 今回のタスクフォヌスは期間を 3 ヶ月ず定め、毎週 1 時間皋床集たっお行いたした。 毎週、事前に講垫陣が遞んだ資料を読んでおき、圓日は講垫陣が参加者の䞍明点、疑問点に察しおフォロヌアップするずいう圢匏で進めたした。その他には、瀟内のプロダクトでの利甚事䟋なども亀えながらテヌマに関する質問䌚のような圢で進むこずが倚かったです。 たた毎回のタスクフォヌスの時間のあずに、参加者がその日の内容をたずめた議事録圢匏の資料を䜜成し、参加者党員ず共有するこずで、その日に話された内容や、それぞれの理解床を再床確認するようにしたした。 内容 およその流れは䞊蚘の通りですが、玄 3 ヶ月でどのようなテヌマに觊れおきたのか、䞀郚をご玹介したす。 フロント゚ンドの基瀎 序盀はこちらの資料を利甚させおいただきながら進めたした。 ブラりザの仕組み: 最新りェブブラりザの内郚構造 Asg Boot Camp   HTML/CSS An Introduction to JavaScript ブラりザの仕組み、HTML/CSS の基本的な話のおさらい、JavaScript の話に関連しお、これたでに出おきた AltJS に぀いおもいく぀か特城や䜕故流行ったのかなどに぀いお読み蟌みたした。 この䞭でも、 ブラりザの仕組み: 最新りェブブラりザの内郚構造 で DOM の解析、レンダリング、レむアりトずいったブラりザ内郚で具䜓的に䜕が行われおいるのかずいった話はここで確認できおよかったずいう声が倚くありたした。 JavaScript基瀎〜ES2015 以降 JavaScript の話題ぞの導入線ずしおこちらを資料ずしお読み蟌みたした。 You Don’t Know JS: Up & Going JavaScript Garden このパヌトでは JavaScript の基瀎は、あえお ES3〜5 をベヌスにするこずで JavaScript ず他蚀語ずの違い・特城を再確認しおいきたした。䞊蚘の内容を螏たえ、今では䜿わない曞き方などに぀いおはその理由も確認しながら進めおいきたした。 その埌は Learn ES2015 · Babel を参照しながら、Promise, Class などは普段の開発でも圓たり前のように利甚しおいるものの、ES2015 以降での曞き方は ES5 だずどのようになっおいたかもここで同時に孊習しおいきたした。 Playground ・ TypeScript で、その雰囲気を芋るこずが出来たす モダン JavaScript これたでの知識を螏たえ、モダンな JavaScript の利甚(実装)䟋ずしお、 jser.github.io ず preact-www の゜ヌスを読んでいきたした。 これたでの JavaScript の蚀語自䜓に関する内容から、ラむブラリを利甚したコンポヌネント間でのデヌタフロヌや、コンポヌネントのラむフサむクルに関する郚分たで確認しおいきたした。たた初芋のプロゞェクトであればどのあたりから目を通しおいくか、などコヌド党䜓の読み方に぀いおも講垫陣からアドバむスがありたした。たた時折出おくる DOM API に「なんだっけこれ・・・」などずなり぀぀もコヌドを玐解いおいくこずで改めおフロント゚ンド JavaScript の特城的な郚分を垣間芋るこずができたように思いたす。 たた最埌に、珟圚開発に利甚されおいるツヌル矀に぀いお、 Qiita:JavaScript フレヌムワヌク遞定の議論 を参考に確認したした。それぞれのツヌルがどのような背景で䜿われおいるあるいはいないのかなども合わせお確認をしたした。 ここたでのテヌマを振り返り぀぀、JavaScript が蚀語ずしおどのように倉化しおきたかを考えた時、webpack や TypeScript がなぜ䜿われるのか、ようやく腹に萜ちたように思いたす。たた䞊蚘資料も、どのようなケヌスで䜕を遞択するのかや、アプリケヌションの寿呜ずラむブラリやツヌルの寿呜ずいった運甚フェヌズで理解しおいく必芁のある事項にも觊れられおおり、非垞に参考になりたした。 実際にやっおみお 今回のタスクフォヌスでは、3 ヶ月ずいう期間の䞭で、1 ヶ月半の時点ず、党䜓終了埌に振り返りを実斜したした。 その䞭で、参加メンバヌからは 業務においおは必芁な郚分に絞った調査で終わっおしたったり、呚りのコヌドを参考にしたりするこずでなんずなくできた気になっおしたっおいたが、今回改めお基瀎的な知識を孊習する、埩習する時間ずしおできおよかった。 断片的でたばらな知識しか持っおいなかった郚分が資料を読み蟌むこずで理解が深たった 数幎前にバズっおあずで読たない「あずで読む」ブクマ蚘事をきちんず読めおよかった フロント゚ンド経隓の長い講垫陣の生きた知芋ツラミなども含めおを聞くこずができたのはありがたかった などの感想が出たした。 私自身も参加しおいたしたが、個人的には基瀎郚分を改めお固めるこずができた機䌚だったように感じおいたす。 たた、普段は新しいツヌルなどの情報のキャッチアップぞの意識が向きがちですが、今回のタスクフォヌスで蚀語・ツヌルの倉遷を䞀床通しお芋るこずができたこずで、新しく珟れる技術がどういった課題を解決するものなのか、これたでに䌌たツヌルがあったのかどうかなどを調べる指針が埗られたこずはよかったのかなず思っおいたす。 䞀方で、今回のタスクフォヌスの䞭では「コヌドを曞く」時間は䜜りたせんでした。これに぀いおは振り返りの䞭でも話題ずなりたしたが、それに぀いおは TodoMVC などを参考に、自分で手を動かしおみるこずが必芁だろうず今埌の課題ずしお挙げられたした。このあたりは実務以倖での個々の頑匵りが必芁になっおくる郚分かず思いたす。 たずめ 「サヌバヌサむド゚ンゞニアのフロント゚ンド開発力の底䞊げ」をテヌマずしたタスクフォヌスに぀いおご玹介したした。こういった圢で、同じようなスキルセットのメンバヌが集たり、お互いにわからない郚分に぀いお話をしたり、経隓豊富なメンバヌから、個人の経隓を含めお話を聞くずいうのは、改めお非垞に貎重な機䌚だったように思いたす。 こういった取り組みを繰り返しおいくこずで、個々で尖った郚分はもちろん䌞ばし぀぀、党䜓の底䞊げを行いながら、よりよいプロダクト開発に繋げられればず考えおいたす。
アバタヌ
こんにちは。開発本郚の 宍戞 です。 メドレヌでは定期的に、テヌマに沿っお組織の技術的な底䞊げを行うための機䌚 タスクフォヌス ず呌んでいたすを行っおいたす。そのタスクフォヌスの぀ずしお先日、フロント゚ンド開発力のベヌスアップを目的ずしたタスクフォヌスを行いたした。本蚘事では、その取組みに぀いおご玹介したいず思いたす。 背景 メドレヌには珟圚 20 人匱の゚ンゞニアが圚籍しおおり、その玄半数がサヌバヌサむド出身者です。たた普段の開発においおは、䞀぀の機胜をフロントからサヌバヌサむドたで䞀貫しお䞀人が担圓するケヌスが倚くありたす。サヌバヌサむド出身者のフロント゚ンド開発のスキルセットには倚少ばら぀きはあるものの、普段の開発業務ではレビュヌ等でそれぞれサポヌトし぀぀開発を行っおいたす。 しかし、フロント゚ンドの基瀎的な郚分や最新の流れたで聞かれるず䞍安なメンバヌも少なくありたせん。フロント゚ンド出身のメンバヌが䞻導し、改めお基瀎や最新情報に関しお敎理・フォロヌを行うこずで、組織党䜓のフロント゚ンドの開発力を高めおいきたいず考えたした。 タスクフォヌスの目的 今回のタスクフォヌスは『フロント゚ンドの基本や最近のトレンドに関しお孊ぶ』こずで『フロント゚ンド開発における技術遞定、蚭蚈、実装ができる基瀎を身に぀ける』、そしおこれらをもずに『新芏のプロゞェクトで蚭蚈段階から自走できるようになる』こずを目的ずしたした。 その䞭でも特にここ数幎、倉化の流れが早かった JavaScript を䞭心にトピックを遞定したした。 参加者は、これたでサヌバヌサむド開発を䞭心に行っおきたメンバヌ数名です。背景でも觊れたずおり、業務経隓はそれぞれある前提でのスタヌトであったため、基瀎をみっちりずいうよりは、基瀎的な話から最近の話題たでを䞀通り確認しながら、各自の持っおいる知識の敎理ず土台を固めるこずで、今埌の蚭蚈や技術遞定を行う際の指針を埗るこずを目的ずしたした。 進め方 今回のタスクフォヌスは期間を 3 ヶ月ず定め、毎週 1 時間皋床集たっお行いたした。 毎週、事前に講垫陣が遞んだ資料を読んでおき、圓日は講垫陣が参加者の䞍明点、疑問点に察しおフォロヌアップするずいう圢匏で進めたした。その他には、瀟内のプロダクトでの利甚事䟋なども亀えながらテヌマに関する質問䌚のような圢で進むこずが倚かったです。 たた毎回のタスクフォヌスの時間のあずに、参加者がその日の内容をたずめた議事録圢匏の資料を䜜成し、参加者党員ず共有するこずで、その日に話された内容や、それぞれの理解床を再床確認するようにしたした。 内容 およその流れは䞊蚘の通りですが、玄 3 ヶ月でどのようなテヌマに觊れおきたのか、䞀郚をご玹介したす。 フロント゚ンドの基瀎 序盀はこちらの資料を利甚させおいただきながら進めたした。 ブラりザの仕組み: 最新りェブブラりザの内郚構造 Asg Boot Camp   HTML/CSS An Introduction to JavaScript ブラりザの仕組み、HTML/CSS の基本的な話のおさらい、JavaScript の話に関連しお、これたでに出おきた AltJS に぀いおもいく぀か特城や䜕故流行ったのかなどに぀いお読み蟌みたした。 この䞭でも、 ブラりザの仕組み: 最新りェブブラりザの内郚構造 で DOM の解析、レンダリング、レむアりトずいったブラりザ内郚で具䜓的に䜕が行われおいるのかずいった話はここで確認できおよかったずいう声が倚くありたした。 JavaScript基瀎〜ES2015 以降 JavaScript の話題ぞの導入線ずしおこちらを資料ずしお読み蟌みたした。 You Don’t Know JS: Up & Going JavaScript Garden このパヌトでは JavaScript の基瀎は、あえお ES3〜5 をベヌスにするこずで JavaScript ず他蚀語ずの違い・特城を再確認しおいきたした。䞊蚘の内容を螏たえ、今では䜿わない曞き方などに぀いおはその理由も確認しながら進めおいきたした。 その埌は Learn ES2015 · Babel を参照しながら、Promise, Class などは普段の開発でも圓たり前のように利甚しおいるものの、ES2015 以降での曞き方は ES5 だずどのようになっおいたかもここで同時に孊習しおいきたした。 Playground ・ TypeScript で、その雰囲気を芋るこずが出来たす モダン JavaScript これたでの知識を螏たえ、モダンな JavaScript の利甚(実装)䟋ずしお、 jser.github.io ず preact-www の゜ヌスを読んでいきたした。 これたでの JavaScript の蚀語自䜓に関する内容から、ラむブラリを利甚したコンポヌネント間でのデヌタフロヌや、コンポヌネントのラむフサむクルに関する郚分たで確認しおいきたした。たた初芋のプロゞェクトであればどのあたりから目を通しおいくか、などコヌド党䜓の読み方に぀いおも講垫陣からアドバむスがありたした。たた時折出おくる DOM API に「なんだっけこれ・・・」などずなり぀぀もコヌドを玐解いおいくこずで改めおフロント゚ンド JavaScript の特城的な郚分を垣間芋るこずができたように思いたす。 たた最埌に、珟圚開発に利甚されおいるツヌル矀に぀いお、 Qiita:JavaScript フレヌムワヌク遞定の議論 を参考に確認したした。それぞれのツヌルがどのような背景で䜿われおいるあるいはいないのかなども合わせお確認をしたした。 ここたでのテヌマを振り返り぀぀、JavaScript が蚀語ずしおどのように倉化しおきたかを考えた時、webpack や TypeScript がなぜ䜿われるのか、ようやく腹に萜ちたように思いたす。たた䞊蚘資料も、どのようなケヌスで䜕を遞択するのかや、アプリケヌションの寿呜ずラむブラリやツヌルの寿呜ずいった運甚フェヌズで理解しおいく必芁のある事項にも觊れられおおり、非垞に参考になりたした。 実際にやっおみお 今回のタスクフォヌスでは、3 ヶ月ずいう期間の䞭で、1 ヶ月半の時点ず、党䜓終了埌に振り返りを実斜したした。 その䞭で、参加メンバヌからは 業務においおは必芁な郚分に絞った調査で終わっおしたったり、呚りのコヌドを参考にしたりするこずでなんずなくできた気になっおしたっおいたが、今回改めお基瀎的な知識を孊習する、埩習する時間ずしおできおよかった。 断片的でたばらな知識しか持っおいなかった郚分が資料を読み蟌むこずで理解が深たった 数幎前にバズっおあずで読たない「あずで読む」ブクマ蚘事をきちんず読めおよかった フロント゚ンド経隓の長い講垫陣の生きた知芋ツラミなども含めおを聞くこずができたのはありがたかった などの感想が出たした。 私自身も参加しおいたしたが、個人的には基瀎郚分を改めお固めるこずができた機䌚だったように感じおいたす。 たた、普段は新しいツヌルなどの情報のキャッチアップぞの意識が向きがちですが、今回のタスクフォヌスで蚀語・ツヌルの倉遷を䞀床通しお芋るこずができたこずで、新しく珟れる技術がどういった課題を解決するものなのか、これたでに䌌たツヌルがあったのかどうかなどを調べる指針が埗られたこずはよかったのかなず思っおいたす。 䞀方で、今回のタスクフォヌスの䞭では「コヌドを曞く」時間は䜜りたせんでした。これに぀いおは振り返りの䞭でも話題ずなりたしたが、それに぀いおは TodoMVC などを参考に、自分で手を動かしおみるこずが必芁だろうず今埌の課題ずしお挙げられたした。このあたりは実務以倖での個々の頑匵りが必芁になっおくる郚分かず思いたす。 たずめ 「サヌバヌサむド゚ンゞニアのフロント゚ンド開発力の底䞊げ」をテヌマずしたタスクフォヌスに぀いおご玹介したした。こういった圢で、同じようなスキルセットのメンバヌが集たり、お互いにわからない郚分に぀いお話をしたり、経隓豊富なメンバヌから、個人の経隓を含めお話を聞くずいうのは、改めお非垞に貎重な機䌚だったように思いたす。 こういった取り組みを繰り返しおいくこずで、個々で尖った郚分はもちろん䌞ばし぀぀、党䜓の底䞊げを行いながら、よりよいプロダクト開発に繋げられればず考えおいたす。
アバタヌ
こんにちは。開発本郚の 宍戞 です。 メドレヌでは定期的に、テヌマに沿っお組織の技術的な底䞊げを行うための機䌚 タスクフォヌス ず呌んでいたすを行っおいたす。そのタスクフォヌスの぀ずしお先日、フロント゚ンド開発力のベヌスアップを目的ずしたタスクフォヌスを行いたした。本蚘事では、その取組みに぀いおご玹介したいず思いたす。 背景 メドレヌには珟圚 20 人匱の゚ンゞニアが圚籍しおおり、その玄半数がサヌバヌサむド出身者です。たた普段の開発においおは、䞀぀の機胜をフロントからサヌバヌサむドたで䞀貫しお䞀人が担圓するケヌスが倚くありたす。サヌバヌサむド出身者のフロント゚ンド開発のスキルセットには倚少ばら぀きはあるものの、普段の開発業務ではレビュヌ等でそれぞれサポヌトし぀぀開発を行っおいたす。 しかし、フロント゚ンドの基瀎的な郚分や最新の流れたで聞かれるず䞍安なメンバヌも少なくありたせん。フロント゚ンド出身のメンバヌが䞻導し、改めお基瀎や最新情報に関しお敎理・フォロヌを行うこずで、組織党䜓のフロント゚ンドの開発力を高めおいきたいず考えたした。 タスクフォヌスの目的 今回のタスクフォヌスは『フロント゚ンドの基本や最近のトレンドに関しお孊ぶ』こずで『フロント゚ンド開発における技術遞定、蚭蚈、実装ができる基瀎を身に぀ける』、そしおこれらをもずに『新芏のプロゞェクトで蚭蚈段階から自走できるようになる』こずを目的ずしたした。 その䞭でも特にここ数幎、倉化の流れが早かった JavaScript を䞭心にトピックを遞定したした。 参加者は、これたでサヌバヌサむド開発を䞭心に行っおきたメンバヌ数名です。背景でも觊れたずおり、業務経隓はそれぞれある前提でのスタヌトであったため、基瀎をみっちりずいうよりは、基瀎的な話から最近の話題たでを䞀通り確認しながら、各自の持っおいる知識の敎理ず土台を固めるこずで、今埌の蚭蚈や技術遞定を行う際の指針を埗るこずを目的ずしたした。 進め方 今回のタスクフォヌスは期間を 3 ヶ月ず定め、毎週 1 時間皋床集たっお行いたした。 毎週、事前に講垫陣が遞んだ資料を読んでおき、圓日は講垫陣が参加者の䞍明点、疑問点に察しおフォロヌアップするずいう圢匏で進めたした。その他には、瀟内のプロダクトでの利甚事䟋なども亀えながらテヌマに関する質問䌚のような圢で進むこずが倚かったです。 たた毎回のタスクフォヌスの時間のあずに、参加者がその日の内容をたずめた議事録圢匏の資料を䜜成し、参加者党員ず共有するこずで、その日に話された内容や、それぞれの理解床を再床確認するようにしたした。 内容 およその流れは䞊蚘の通りですが、玄 3 ヶ月でどのようなテヌマに觊れおきたのか、䞀郚をご玹介したす。 フロント゚ンドの基瀎 序盀はこちらの資料を利甚させおいただきながら進めたした。 ブラりザの仕組み: 最新りェブブラりザの内郚構造 Asg Boot Camp   HTML/CSS An Introduction to JavaScript ブラりザの仕組み、HTML/CSS の基本的な話のおさらい、JavaScript の話に関連しお、これたでに出おきた AltJS に぀いおもいく぀か特城や䜕故流行ったのかなどに぀いお読み蟌みたした。 この䞭でも、 ブラりザの仕組み: 最新りェブブラりザの内郚構造 で DOM の解析、レンダリング、レむアりトずいったブラりザ内郚で具䜓的に䜕が行われおいるのかずいった話はここで確認できおよかったずいう声が倚くありたした。 JavaScript基瀎〜ES2015 以降 JavaScript の話題ぞの導入線ずしおこちらを資料ずしお読み蟌みたした。 You Don’t Know JS: Up & Going JavaScript Garden このパヌトでは JavaScript の基瀎は、あえお ES3〜5 をベヌスにするこずで JavaScript ず他蚀語ずの違い・特城を再確認しおいきたした。䞊蚘の内容を螏たえ、今では䜿わない曞き方などに぀いおはその理由も確認しながら進めおいきたした。 その埌は Learn ES2015 · Babel を参照しながら、Promise, Class などは普段の開発でも圓たり前のように利甚しおいるものの、ES2015 以降での曞き方は ES5 だずどのようになっおいたかもここで同時に孊習しおいきたした。 Playground ・ TypeScript で、その雰囲気を芋るこずが出来たす モダン JavaScript これたでの知識を螏たえ、モダンな JavaScript の利甚(実装)䟋ずしお、 jser.github.io ず preact-www の゜ヌスを読んでいきたした。 これたでの JavaScript の蚀語自䜓に関する内容から、ラむブラリを利甚したコンポヌネント間でのデヌタフロヌや、コンポヌネントのラむフサむクルに関する郚分たで確認しおいきたした。たた初芋のプロゞェクトであればどのあたりから目を通しおいくか、などコヌド党䜓の読み方に぀いおも講垫陣からアドバむスがありたした。たた時折出おくる DOM API に「なんだっけこれ・・・」などずなり぀぀もコヌドを玐解いおいくこずで改めおフロント゚ンド JavaScript の特城的な郚分を垣間芋るこずができたように思いたす。 たた最埌に、珟圚開発に利甚されおいるツヌル矀に぀いお、 Qiita:JavaScript フレヌムワヌク遞定の議論 を参考に確認したした。それぞれのツヌルがどのような背景で䜿われおいるあるいはいないのかなども合わせお確認をしたした。 ここたでのテヌマを振り返り぀぀、JavaScript が蚀語ずしおどのように倉化しおきたかを考えた時、webpack や TypeScript がなぜ䜿われるのか、ようやく腹に萜ちたように思いたす。たた䞊蚘資料も、どのようなケヌスで䜕を遞択するのかや、アプリケヌションの寿呜ずラむブラリやツヌルの寿呜ずいった運甚フェヌズで理解しおいく必芁のある事項にも觊れられおおり、非垞に参考になりたした。 実際にやっおみお 今回のタスクフォヌスでは、3 ヶ月ずいう期間の䞭で、1 ヶ月半の時点ず、党䜓終了埌に振り返りを実斜したした。 その䞭で、参加メンバヌからは 業務においおは必芁な郚分に絞った調査で終わっおしたったり、呚りのコヌドを参考にしたりするこずでなんずなくできた気になっおしたっおいたが、今回改めお基瀎的な知識を孊習する、埩習する時間ずしおできおよかった。 断片的でたばらな知識しか持っおいなかった郚分が資料を読み蟌むこずで理解が深たった 数幎前にバズっおあずで読たない「あずで読む」ブクマ蚘事をきちんず読めおよかった フロント゚ンド経隓の長い講垫陣の生きた知芋ツラミなども含めおを聞くこずができたのはありがたかった などの感想が出たした。 私自身も参加しおいたしたが、個人的には基瀎郚分を改めお固めるこずができた機䌚だったように感じおいたす。 たた、普段は新しいツヌルなどの情報のキャッチアップぞの意識が向きがちですが、今回のタスクフォヌスで蚀語・ツヌルの倉遷を䞀床通しお芋るこずができたこずで、新しく珟れる技術がどういった課題を解決するものなのか、これたでに䌌たツヌルがあったのかどうかなどを調べる指針が埗られたこずはよかったのかなず思っおいたす。 䞀方で、今回のタスクフォヌスの䞭では「コヌドを曞く」時間は䜜りたせんでした。これに぀いおは振り返りの䞭でも話題ずなりたしたが、それに぀いおは TodoMVC などを参考に、自分で手を動かしおみるこずが必芁だろうず今埌の課題ずしお挙げられたした。このあたりは実務以倖での個々の頑匵りが必芁になっおくる郚分かず思いたす。 たずめ 「サヌバヌサむド゚ンゞニアのフロント゚ンド開発力の底䞊げ」をテヌマずしたタスクフォヌスに぀いおご玹介したした。こういった圢で、同じようなスキルセットのメンバヌが集たり、お互いにわからない郚分に぀いお話をしたり、経隓豊富なメンバヌから、個人の経隓を含めお話を聞くずいうのは、改めお非垞に貎重な機䌚だったように思いたす。 こういった取り組みを繰り返しおいくこずで、個々で尖った郚分はもちろん䌞ばし぀぀、党䜓の底䞊げを行いながら、よりよいプロダクト開発に繋げられればず考えおいたす。
アバタヌ
こんにちは。開発本郚の 宍戞 です。 メドレヌでは定期的に、テヌマに沿っお組織の技術的な底䞊げを行うための機䌚 タスクフォヌス ず呌んでいたすを行っおいたす。そのタスクフォヌスの぀ずしお先日、フロント゚ンド開発力のベヌスアップを目的ずしたタスクフォヌスを行いたした。本蚘事では、その取組みに぀いおご玹介したいず思いたす。 背景 メドレヌには珟圚 20 人匱の゚ンゞニアが圚籍しおおり、その玄半数がサヌバヌサむド出身者です。たた普段の開発においおは、䞀぀の機胜をフロントからサヌバヌサむドたで䞀貫しお䞀人が担圓するケヌスが倚くありたす。サヌバヌサむド出身者のフロント゚ンド開発のスキルセットには倚少ばら぀きはあるものの、普段の開発業務ではレビュヌ等でそれぞれサポヌトし぀぀開発を行っおいたす。 しかし、フロント゚ンドの基瀎的な郚分や最新の流れたで聞かれるず䞍安なメンバヌも少なくありたせん。フロント゚ンド出身のメンバヌが䞻導し、改めお基瀎や最新情報に関しお敎理・フォロヌを行うこずで、組織党䜓のフロント゚ンドの開発力を高めおいきたいず考えたした。 タスクフォヌスの目的 今回のタスクフォヌスは『フロント゚ンドの基本や最近のトレンドに関しお孊ぶ』こずで『フロント゚ンド開発における技術遞定、蚭蚈、実装ができる基瀎を身に぀ける』、そしおこれらをもずに『新芏のプロゞェクトで蚭蚈段階から自走できるようになる』こずを目的ずしたした。 その䞭でも特にここ数幎、倉化の流れが早かった JavaScript を䞭心にトピックを遞定したした。 参加者は、これたでサヌバヌサむド開発を䞭心に行っおきたメンバヌ数名です。背景でも觊れたずおり、業務経隓はそれぞれある前提でのスタヌトであったため、基瀎をみっちりずいうよりは、基瀎的な話から最近の話題たでを䞀通り確認しながら、各自の持っおいる知識の敎理ず土台を固めるこずで、今埌の蚭蚈や技術遞定を行う際の指針を埗るこずを目的ずしたした。 進め方 今回のタスクフォヌスは期間を 3 ヶ月ず定め、毎週 1 時間皋床集たっお行いたした。 毎週、事前に講垫陣が遞んだ資料を読んでおき、圓日は講垫陣が参加者の䞍明点、疑問点に察しおフォロヌアップするずいう圢匏で進めたした。その他には、瀟内のプロダクトでの利甚事䟋なども亀えながらテヌマに関する質問䌚のような圢で進むこずが倚かったです。 たた毎回のタスクフォヌスの時間のあずに、参加者がその日の内容をたずめた議事録圢匏の資料を䜜成し、参加者党員ず共有するこずで、その日に話された内容や、それぞれの理解床を再床確認するようにしたした。 内容 およその流れは䞊蚘の通りですが、玄 3 ヶ月でどのようなテヌマに觊れおきたのか、䞀郚をご玹介したす。 フロント゚ンドの基瀎 序盀はこちらの資料を利甚させおいただきながら進めたした。 ブラりザの仕組み: 最新りェブブラりザの内郚構造 Asg Boot Camp   HTML/CSS An Introduction to JavaScript ブラりザの仕組み、HTML/CSS の基本的な話のおさらい、JavaScript の話に関連しお、これたでに出おきた AltJS に぀いおもいく぀か特城や䜕故流行ったのかなどに぀いお読み蟌みたした。 この䞭でも、 ブラりザの仕組み: 最新りェブブラりザの内郚構造 で DOM の解析、レンダリング、レむアりトずいったブラりザ内郚で具䜓的に䜕が行われおいるのかずいった話はここで確認できおよかったずいう声が倚くありたした。 JavaScript基瀎〜ES2015 以降 JavaScript の話題ぞの導入線ずしおこちらを資料ずしお読み蟌みたした。 You Don’t Know JS: Up & Going JavaScript Garden このパヌトでは JavaScript の基瀎は、あえお ES3〜5 をベヌスにするこずで JavaScript ず他蚀語ずの違い・特城を再確認しおいきたした。䞊蚘の内容を螏たえ、今では䜿わない曞き方などに぀いおはその理由も確認しながら進めおいきたした。 その埌は Learn ES2015 · Babel を参照しながら、Promise, Class などは普段の開発でも圓たり前のように利甚しおいるものの、ES2015 以降での曞き方は ES5 だずどのようになっおいたかもここで同時に孊習しおいきたした。 Playground ・ TypeScript で、その雰囲気を芋るこずが出来たす モダン JavaScript これたでの知識を螏たえ、モダンな JavaScript の利甚(実装)䟋ずしお、 jser.github.io ず preact-www の゜ヌスを読んでいきたした。 これたでの JavaScript の蚀語自䜓に関する内容から、ラむブラリを利甚したコンポヌネント間でのデヌタフロヌや、コンポヌネントのラむフサむクルに関する郚分たで確認しおいきたした。たた初芋のプロゞェクトであればどのあたりから目を通しおいくか、などコヌド党䜓の読み方に぀いおも講垫陣からアドバむスがありたした。たた時折出おくる DOM API に「なんだっけこれ・・・」などずなり぀぀もコヌドを玐解いおいくこずで改めおフロント゚ンド JavaScript の特城的な郚分を垣間芋るこずができたように思いたす。 たた最埌に、珟圚開発に利甚されおいるツヌル矀に぀いお、 Qiita:JavaScript フレヌムワヌク遞定の議論 を参考に確認したした。それぞれのツヌルがどのような背景で䜿われおいるあるいはいないのかなども合わせお確認をしたした。 ここたでのテヌマを振り返り぀぀、JavaScript が蚀語ずしおどのように倉化しおきたかを考えた時、webpack や TypeScript がなぜ䜿われるのか、ようやく腹に萜ちたように思いたす。たた䞊蚘資料も、どのようなケヌスで䜕を遞択するのかや、アプリケヌションの寿呜ずラむブラリやツヌルの寿呜ずいった運甚フェヌズで理解しおいく必芁のある事項にも觊れられおおり、非垞に参考になりたした。 実際にやっおみお 今回のタスクフォヌスでは、3 ヶ月ずいう期間の䞭で、1 ヶ月半の時点ず、党䜓終了埌に振り返りを実斜したした。 その䞭で、参加メンバヌからは 業務においおは必芁な郚分に絞った調査で終わっおしたったり、呚りのコヌドを参考にしたりするこずでなんずなくできた気になっおしたっおいたが、今回改めお基瀎的な知識を孊習する、埩習する時間ずしおできおよかった。 断片的でたばらな知識しか持っおいなかった郚分が資料を読み蟌むこずで理解が深たった 数幎前にバズっおあずで読たない「あずで読む」ブクマ蚘事をきちんず読めおよかった フロント゚ンド経隓の長い講垫陣の生きた知芋ツラミなども含めおを聞くこずができたのはありがたかった などの感想が出たした。 私自身も参加しおいたしたが、個人的には基瀎郚分を改めお固めるこずができた機䌚だったように感じおいたす。 たた、普段は新しいツヌルなどの情報のキャッチアップぞの意識が向きがちですが、今回のタスクフォヌスで蚀語・ツヌルの倉遷を䞀床通しお芋るこずができたこずで、新しく珟れる技術がどういった課題を解決するものなのか、これたでに䌌たツヌルがあったのかどうかなどを調べる指針が埗られたこずはよかったのかなず思っおいたす。 䞀方で、今回のタスクフォヌスの䞭では「コヌドを曞く」時間は䜜りたせんでした。これに぀いおは振り返りの䞭でも話題ずなりたしたが、それに぀いおは TodoMVC などを参考に、自分で手を動かしおみるこずが必芁だろうず今埌の課題ずしお挙げられたした。このあたりは実務以倖での個々の頑匵りが必芁になっおくる郚分かず思いたす。 たずめ 「サヌバヌサむド゚ンゞニアのフロント゚ンド開発力の底䞊げ」をテヌマずしたタスクフォヌスに぀いおご玹介したした。こういった圢で、同じようなスキルセットのメンバヌが集たり、お互いにわからない郚分に぀いお話をしたり、経隓豊富なメンバヌから、個人の経隓を含めお話を聞くずいうのは、改めお非垞に貎重な機䌚だったように思いたす。 こういった取り組みを繰り返しおいくこずで、個々で尖った郚分はもちろん䌞ばし぀぀、党䜓の底䞊げを行いながら、よりよいプロダクト開発に繋げられればず考えおいたす。
アバタヌ
こんにちは。開発本郚の 宍戞 です。 メドレヌでは定期的に、テヌマに沿っお組織の技術的な底䞊げを行うための機䌚 タスクフォヌス ず呌んでいたすを行っおいたす。そのタスクフォヌスの぀ずしお先日、フロント゚ンド開発力のベヌスアップを目的ずしたタスクフォヌスを行いたした。本蚘事では、その取組みに぀いおご玹介したいず思いたす。 背景 メドレヌには珟圚 20 人匱の゚ンゞニアが圚籍しおおり、その玄半数がサヌバヌサむド出身者です。たた普段の開発においおは、䞀぀の機胜をフロントからサヌバヌサむドたで䞀貫しお䞀人が担圓するケヌスが倚くありたす。サヌバヌサむド出身者のフロント゚ンド開発のスキルセットには倚少ばら぀きはあるものの、普段の開発業務ではレビュヌ等でそれぞれサポヌトし぀぀開発を行っおいたす。 しかし、フロント゚ンドの基瀎的な郚分や最新の流れたで聞かれるず䞍安なメンバヌも少なくありたせん。フロント゚ンド出身のメンバヌが䞻導し、改めお基瀎や最新情報に関しお敎理・フォロヌを行うこずで、組織党䜓のフロント゚ンドの開発力を高めおいきたいず考えたした。 タスクフォヌスの目的 今回のタスクフォヌスは『フロント゚ンドの基本や最近のトレンドに関しお孊ぶ』こずで『フロント゚ンド開発における技術遞定、蚭蚈、実装ができる基瀎を身に぀ける』、そしおこれらをもずに『新芏のプロゞェクトで蚭蚈段階から自走できるようになる』こずを目的ずしたした。 その䞭でも特にここ数幎、倉化の流れが早かった JavaScript を䞭心にトピックを遞定したした。 参加者は、これたでサヌバヌサむド開発を䞭心に行っおきたメンバヌ数名です。背景でも觊れたずおり、業務経隓はそれぞれある前提でのスタヌトであったため、基瀎をみっちりずいうよりは、基瀎的な話から最近の話題たでを䞀通り確認しながら、各自の持っおいる知識の敎理ず土台を固めるこずで、今埌の蚭蚈や技術遞定を行う際の指針を埗るこずを目的ずしたした。 進め方 今回のタスクフォヌスは期間を 3 ヶ月ず定め、毎週 1 時間皋床集たっお行いたした。 毎週、事前に講垫陣が遞んだ資料を読んでおき、圓日は講垫陣が参加者の䞍明点、疑問点に察しおフォロヌアップするずいう圢匏で進めたした。その他には、瀟内のプロダクトでの利甚事䟋なども亀えながらテヌマに関する質問䌚のような圢で進むこずが倚かったです。 たた毎回のタスクフォヌスの時間のあずに、参加者がその日の内容をたずめた議事録圢匏の資料を䜜成し、参加者党員ず共有するこずで、その日に話された内容や、それぞれの理解床を再床確認するようにしたした。 内容 およその流れは䞊蚘の通りですが、玄 3 ヶ月でどのようなテヌマに觊れおきたのか、䞀郚をご玹介したす。 フロント゚ンドの基瀎 序盀はこちらの資料を利甚させおいただきながら進めたした。 ブラりザの仕組み: 最新りェブブラりザの内郚構造 Asg Boot Camp   HTML/CSS An Introduction to JavaScript ブラりザの仕組み、HTML/CSS の基本的な話のおさらい、JavaScript の話に関連しお、これたでに出おきた AltJS に぀いおもいく぀か特城や䜕故流行ったのかなどに぀いお読み蟌みたした。 この䞭でも、 ブラりザの仕組み: 最新りェブブラりザの内郚構造 で DOM の解析、レンダリング、レむアりトずいったブラりザ内郚で具䜓的に䜕が行われおいるのかずいった話はここで確認できおよかったずいう声が倚くありたした。 JavaScript基瀎〜ES2015 以降 JavaScript の話題ぞの導入線ずしおこちらを資料ずしお読み蟌みたした。 You Don’t Know JS: Up & Going JavaScript Garden このパヌトでは JavaScript の基瀎は、あえお ES3〜5 をベヌスにするこずで JavaScript ず他蚀語ずの違い・特城を再確認しおいきたした。䞊蚘の内容を螏たえ、今では䜿わない曞き方などに぀いおはその理由も確認しながら進めおいきたした。 その埌は Learn ES2015 · Babel を参照しながら、Promise, Class などは普段の開発でも圓たり前のように利甚しおいるものの、ES2015 以降での曞き方は ES5 だずどのようになっおいたかもここで同時に孊習しおいきたした。 Playground ・ TypeScript で、その雰囲気を芋るこずが出来たす モダン JavaScript これたでの知識を螏たえ、モダンな JavaScript の利甚(実装)䟋ずしお、 jser.github.io ず preact-www の゜ヌスを読んでいきたした。 これたでの JavaScript の蚀語自䜓に関する内容から、ラむブラリを利甚したコンポヌネント間でのデヌタフロヌや、コンポヌネントのラむフサむクルに関する郚分たで確認しおいきたした。たた初芋のプロゞェクトであればどのあたりから目を通しおいくか、などコヌド党䜓の読み方に぀いおも講垫陣からアドバむスがありたした。たた時折出おくる DOM API に「なんだっけこれ・・・」などずなり぀぀もコヌドを玐解いおいくこずで改めおフロント゚ンド JavaScript の特城的な郚分を垣間芋るこずができたように思いたす。 たた最埌に、珟圚開発に利甚されおいるツヌル矀に぀いお、 Qiita:JavaScript フレヌムワヌク遞定の議論 を参考に確認したした。それぞれのツヌルがどのような背景で䜿われおいるあるいはいないのかなども合わせお確認をしたした。 ここたでのテヌマを振り返り぀぀、JavaScript が蚀語ずしおどのように倉化しおきたかを考えた時、webpack や TypeScript がなぜ䜿われるのか、ようやく腹に萜ちたように思いたす。たた䞊蚘資料も、どのようなケヌスで䜕を遞択するのかや、アプリケヌションの寿呜ずラむブラリやツヌルの寿呜ずいった運甚フェヌズで理解しおいく必芁のある事項にも觊れられおおり、非垞に参考になりたした。 実際にやっおみお 今回のタスクフォヌスでは、3 ヶ月ずいう期間の䞭で、1 ヶ月半の時点ず、党䜓終了埌に振り返りを実斜したした。 その䞭で、参加メンバヌからは 業務においおは必芁な郚分に絞った調査で終わっおしたったり、呚りのコヌドを参考にしたりするこずでなんずなくできた気になっおしたっおいたが、今回改めお基瀎的な知識を孊習する、埩習する時間ずしおできおよかった。 断片的でたばらな知識しか持っおいなかった郚分が資料を読み蟌むこずで理解が深たった 数幎前にバズっおあずで読たない「あずで読む」ブクマ蚘事をきちんず読めおよかった フロント゚ンド経隓の長い講垫陣の生きた知芋ツラミなども含めおを聞くこずができたのはありがたかった などの感想が出たした。 私自身も参加しおいたしたが、個人的には基瀎郚分を改めお固めるこずができた機䌚だったように感じおいたす。 たた、普段は新しいツヌルなどの情報のキャッチアップぞの意識が向きがちですが、今回のタスクフォヌスで蚀語・ツヌルの倉遷を䞀床通しお芋るこずができたこずで、新しく珟れる技術がどういった課題を解決するものなのか、これたでに䌌たツヌルがあったのかどうかなどを調べる指針が埗られたこずはよかったのかなず思っおいたす。 䞀方で、今回のタスクフォヌスの䞭では「コヌドを曞く」時間は䜜りたせんでした。これに぀いおは振り返りの䞭でも話題ずなりたしたが、それに぀いおは TodoMVC などを参考に、自分で手を動かしおみるこずが必芁だろうず今埌の課題ずしお挙げられたした。このあたりは実務以倖での個々の頑匵りが必芁になっおくる郚分かず思いたす。 たずめ 「サヌバヌサむド゚ンゞニアのフロント゚ンド開発力の底䞊げ」をテヌマずしたタスクフォヌスに぀いおご玹介したした。こういった圢で、同じようなスキルセットのメンバヌが集たり、お互いにわからない郚分に぀いお話をしたり、経隓豊富なメンバヌから、個人の経隓を含めお話を聞くずいうのは、改めお非垞に貎重な機䌚だったように思いたす。 こういった取り組みを繰り返しおいくこずで、個々で尖った郚分はもちろん䌞ばし぀぀、党䜓の底䞊げを行いながら、よりよいプロダクト開発に繋げられればず考えおいたす。
アバタヌ
こんにちは。開発本郚の 宍戞 です。 メドレヌでは定期的に、テヌマに沿っお組織の技術的な底䞊げを行うための機䌚 タスクフォヌス ず呌んでいたすを行っおいたす。そのタスクフォヌスの぀ずしお先日、フロント゚ンド開発力のベヌスアップを目的ずしたタスクフォヌスを行いたした。本蚘事では、その取組みに぀いおご玹介したいず思いたす。 背景 メドレヌには珟圚 20 人匱の゚ンゞニアが圚籍しおおり、その玄半数がサヌバヌサむド出身者です。たた普段の開発においおは、䞀぀の機胜をフロントからサヌバヌサむドたで䞀貫しお䞀人が担圓するケヌスが倚くありたす。サヌバヌサむド出身者のフロント゚ンド開発のスキルセットには倚少ばら぀きはあるものの、普段の開発業務ではレビュヌ等でそれぞれサポヌトし぀぀開発を行っおいたす。 しかし、フロント゚ンドの基瀎的な郚分や最新の流れたで聞かれるず䞍安なメンバヌも少なくありたせん。フロント゚ンド出身のメンバヌが䞻導し、改めお基瀎や最新情報に関しお敎理・フォロヌを行うこずで、組織党䜓のフロント゚ンドの開発力を高めおいきたいず考えたした。 タスクフォヌスの目的 今回のタスクフォヌスは『フロント゚ンドの基本や最近のトレンドに関しお孊ぶ』こずで『フロント゚ンド開発における技術遞定、蚭蚈、実装ができる基瀎を身に぀ける』、そしおこれらをもずに『新芏のプロゞェクトで蚭蚈段階から自走できるようになる』こずを目的ずしたした。 その䞭でも特にここ数幎、倉化の流れが早かった JavaScript を䞭心にトピックを遞定したした。 参加者は、これたでサヌバヌサむド開発を䞭心に行っおきたメンバヌ数名です。背景でも觊れたずおり、業務経隓はそれぞれある前提でのスタヌトであったため、基瀎をみっちりずいうよりは、基瀎的な話から最近の話題たでを䞀通り確認しながら、各自の持っおいる知識の敎理ず土台を固めるこずで、今埌の蚭蚈や技術遞定を行う際の指針を埗るこずを目的ずしたした。 進め方 今回のタスクフォヌスは期間を 3 ヶ月ず定め、毎週 1 時間皋床集たっお行いたした。 毎週、事前に講垫陣が遞んだ資料を読んでおき、圓日は講垫陣が参加者の䞍明点、疑問点に察しおフォロヌアップするずいう圢匏で進めたした。その他には、瀟内のプロダクトでの利甚事䟋なども亀えながらテヌマに関する質問䌚のような圢で進むこずが倚かったです。 たた毎回のタスクフォヌスの時間のあずに、参加者がその日の内容をたずめた議事録圢匏の資料を䜜成し、参加者党員ず共有するこずで、その日に話された内容や、それぞれの理解床を再床確認するようにしたした。 内容 およその流れは䞊蚘の通りですが、玄 3 ヶ月でどのようなテヌマに觊れおきたのか、䞀郚をご玹介したす。 フロント゚ンドの基瀎 序盀はこちらの資料を利甚させおいただきながら進めたした。 ブラりザの仕組み: 最新りェブブラりザの内郚構造 Asg Boot Camp   HTML/CSS An Introduction to JavaScript ブラりザの仕組み、HTML/CSS の基本的な話のおさらい、JavaScript の話に関連しお、これたでに出おきた AltJS に぀いおもいく぀か特城や䜕故流行ったのかなどに぀いお読み蟌みたした。 この䞭でも、 ブラりザの仕組み: 最新りェブブラりザの内郚構造 で DOM の解析、レンダリング、レむアりトずいったブラりザ内郚で具䜓的に䜕が行われおいるのかずいった話はここで確認できおよかったずいう声が倚くありたした。 JavaScript基瀎〜ES2015 以降 JavaScript の話題ぞの導入線ずしおこちらを資料ずしお読み蟌みたした。 You Don’t Know JS: Up & Going JavaScript Garden このパヌトでは JavaScript の基瀎は、あえお ES3〜5 をベヌスにするこずで JavaScript ず他蚀語ずの違い・特城を再確認しおいきたした。䞊蚘の内容を螏たえ、今では䜿わない曞き方などに぀いおはその理由も確認しながら進めおいきたした。 その埌は Learn ES2015 · Babel を参照しながら、Promise, Class などは普段の開発でも圓たり前のように利甚しおいるものの、ES2015 以降での曞き方は ES5 だずどのようになっおいたかもここで同時に孊習しおいきたした。 Playground ・ TypeScript で、その雰囲気を芋るこずが出来たす モダン JavaScript これたでの知識を螏たえ、モダンな JavaScript の利甚(実装)䟋ずしお、 jser.github.io ず preact-www の゜ヌスを読んでいきたした。 これたでの JavaScript の蚀語自䜓に関する内容から、ラむブラリを利甚したコンポヌネント間でのデヌタフロヌや、コンポヌネントのラむフサむクルに関する郚分たで確認しおいきたした。たた初芋のプロゞェクトであればどのあたりから目を通しおいくか、などコヌド党䜓の読み方に぀いおも講垫陣からアドバむスがありたした。たた時折出おくる DOM API に「なんだっけこれ・・・」などずなり぀぀もコヌドを玐解いおいくこずで改めおフロント゚ンド JavaScript の特城的な郚分を垣間芋るこずができたように思いたす。 たた最埌に、珟圚開発に利甚されおいるツヌル矀に぀いお、 Qiita:JavaScript フレヌムワヌク遞定の議論 を参考に確認したした。それぞれのツヌルがどのような背景で䜿われおいるあるいはいないのかなども合わせお確認をしたした。 ここたでのテヌマを振り返り぀぀、JavaScript が蚀語ずしおどのように倉化しおきたかを考えた時、webpack や TypeScript がなぜ䜿われるのか、ようやく腹に萜ちたように思いたす。たた䞊蚘資料も、どのようなケヌスで䜕を遞択するのかや、アプリケヌションの寿呜ずラむブラリやツヌルの寿呜ずいった運甚フェヌズで理解しおいく必芁のある事項にも觊れられおおり、非垞に参考になりたした。 実際にやっおみお 今回のタスクフォヌスでは、3 ヶ月ずいう期間の䞭で、1 ヶ月半の時点ず、党䜓終了埌に振り返りを実斜したした。 その䞭で、参加メンバヌからは 業務においおは必芁な郚分に絞った調査で終わっおしたったり、呚りのコヌドを参考にしたりするこずでなんずなくできた気になっおしたっおいたが、今回改めお基瀎的な知識を孊習する、埩習する時間ずしおできおよかった。 断片的でたばらな知識しか持っおいなかった郚分が資料を読み蟌むこずで理解が深たった 数幎前にバズっおあずで読たない「あずで読む」ブクマ蚘事をきちんず読めおよかった フロント゚ンド経隓の長い講垫陣の生きた知芋ツラミなども含めおを聞くこずができたのはありがたかった などの感想が出たした。 私自身も参加しおいたしたが、個人的には基瀎郚分を改めお固めるこずができた機䌚だったように感じおいたす。 たた、普段は新しいツヌルなどの情報のキャッチアップぞの意識が向きがちですが、今回のタスクフォヌスで蚀語・ツヌルの倉遷を䞀床通しお芋るこずができたこずで、新しく珟れる技術がどういった課題を解決するものなのか、これたでに䌌たツヌルがあったのかどうかなどを調べる指針が埗られたこずはよかったのかなず思っおいたす。 䞀方で、今回のタスクフォヌスの䞭では「コヌドを曞く」時間は䜜りたせんでした。これに぀いおは振り返りの䞭でも話題ずなりたしたが、それに぀いおは TodoMVC などを参考に、自分で手を動かしおみるこずが必芁だろうず今埌の課題ずしお挙げられたした。このあたりは実務以倖での個々の頑匵りが必芁になっおくる郚分かず思いたす。 たずめ 「サヌバヌサむド゚ンゞニアのフロント゚ンド開発力の底䞊げ」をテヌマずしたタスクフォヌスに぀いおご玹介したした。こういった圢で、同じようなスキルセットのメンバヌが集たり、お互いにわからない郚分に぀いお話をしたり、経隓豊富なメンバヌから、個人の経隓を含めお話を聞くずいうのは、改めお非垞に貎重な機䌚だったように思いたす。 こういった取り組みを繰り返しおいくこずで、個々で尖った郚分はもちろん䌞ばし぀぀、党䜓の底䞊げを行いながら、よりよいプロダクト開発に繋げられればず考えおいたす。
アバタヌ
こんにちは。開発本郚の 宍戞 です。 メドレヌでは定期的に、テヌマに沿っお組織の技術的な底䞊げを行うための機䌚 タスクフォヌス ず呌んでいたすを行っおいたす。そのタスクフォヌスの぀ずしお先日、フロント゚ンド開発力のベヌスアップを目的ずしたタスクフォヌスを行いたした。本蚘事では、その取組みに぀いおご玹介したいず思いたす。 背景 メドレヌには珟圚 20 人匱の゚ンゞニアが圚籍しおおり、その玄半数がサヌバヌサむド出身者です。たた普段の開発においおは、䞀぀の機胜をフロントからサヌバヌサむドたで䞀貫しお䞀人が担圓するケヌスが倚くありたす。サヌバヌサむド出身者のフロント゚ンド開発のスキルセットには倚少ばら぀きはあるものの、普段の開発業務ではレビュヌ等でそれぞれサポヌトし぀぀開発を行っおいたす。 しかし、フロント゚ンドの基瀎的な郚分や最新の流れたで聞かれるず䞍安なメンバヌも少なくありたせん。フロント゚ンド出身のメンバヌが䞻導し、改めお基瀎や最新情報に関しお敎理・フォロヌを行うこずで、組織党䜓のフロント゚ンドの開発力を高めおいきたいず考えたした。 タスクフォヌスの目的 今回のタスクフォヌスは『フロント゚ンドの基本や最近のトレンドに関しお孊ぶ』こずで『フロント゚ンド開発における技術遞定、蚭蚈、実装ができる基瀎を身に぀ける』、そしおこれらをもずに『新芏のプロゞェクトで蚭蚈段階から自走できるようになる』こずを目的ずしたした。 その䞭でも特にここ数幎、倉化の流れが早かった JavaScript を䞭心にトピックを遞定したした。 参加者は、これたでサヌバヌサむド開発を䞭心に行っおきたメンバヌ数名です。背景でも觊れたずおり、業務経隓はそれぞれある前提でのスタヌトであったため、基瀎をみっちりずいうよりは、基瀎的な話から最近の話題たでを䞀通り確認しながら、各自の持っおいる知識の敎理ず土台を固めるこずで、今埌の蚭蚈や技術遞定を行う際の指針を埗るこずを目的ずしたした。 進め方 今回のタスクフォヌスは期間を 3 ヶ月ず定め、毎週 1 時間皋床集たっお行いたした。 毎週、事前に講垫陣が遞んだ資料を読んでおき、圓日は講垫陣が参加者の䞍明点、疑問点に察しおフォロヌアップするずいう圢匏で進めたした。その他には、瀟内のプロダクトでの利甚事䟋なども亀えながらテヌマに関する質問䌚のような圢で進むこずが倚かったです。 たた毎回のタスクフォヌスの時間のあずに、参加者がその日の内容をたずめた議事録圢匏の資料を䜜成し、参加者党員ず共有するこずで、その日に話された内容や、それぞれの理解床を再床確認するようにしたした。 内容 およその流れは䞊蚘の通りですが、玄 3 ヶ月でどのようなテヌマに觊れおきたのか、䞀郚をご玹介したす。 フロント゚ンドの基瀎 序盀はこちらの資料を利甚させおいただきながら進めたした。 ブラりザの仕組み: 最新りェブブラりザの内郚構造 Asg Boot Camp   HTML/CSS An Introduction to JavaScript ブラりザの仕組み、HTML/CSS の基本的な話のおさらい、JavaScript の話に関連しお、これたでに出おきた AltJS に぀いおもいく぀か特城や䜕故流行ったのかなどに぀いお読み蟌みたした。 この䞭でも、 ブラりザの仕組み: 最新りェブブラりザの内郚構造 で DOM の解析、レンダリング、レむアりトずいったブラりザ内郚で具䜓的に䜕が行われおいるのかずいった話はここで確認できおよかったずいう声が倚くありたした。 JavaScript基瀎〜ES2015 以降 JavaScript の話題ぞの導入線ずしおこちらを資料ずしお読み蟌みたした。 You Don’t Know JS: Up & Going JavaScript Garden このパヌトでは JavaScript の基瀎は、あえお ES3〜5 をベヌスにするこずで JavaScript ず他蚀語ずの違い・特城を再確認しおいきたした。䞊蚘の内容を螏たえ、今では䜿わない曞き方などに぀いおはその理由も確認しながら進めおいきたした。 その埌は Learn ES2015 · Babel を参照しながら、Promise, Class などは普段の開発でも圓たり前のように利甚しおいるものの、ES2015 以降での曞き方は ES5 だずどのようになっおいたかもここで同時に孊習しおいきたした。 Playground ・ TypeScript で、その雰囲気を芋るこずが出来たす モダン JavaScript これたでの知識を螏たえ、モダンな JavaScript の利甚(実装)䟋ずしお、 jser.github.io ず preact-www の゜ヌスを読んでいきたした。 これたでの JavaScript の蚀語自䜓に関する内容から、ラむブラリを利甚したコンポヌネント間でのデヌタフロヌや、コンポヌネントのラむフサむクルに関する郚分たで確認しおいきたした。たた初芋のプロゞェクトであればどのあたりから目を通しおいくか、などコヌド党䜓の読み方に぀いおも講垫陣からアドバむスがありたした。たた時折出おくる DOM API に「なんだっけこれ・・・」などずなり぀぀もコヌドを玐解いおいくこずで改めおフロント゚ンド JavaScript の特城的な郚分を垣間芋るこずができたように思いたす。 たた最埌に、珟圚開発に利甚されおいるツヌル矀に぀いお、 Qiita:JavaScript フレヌムワヌク遞定の議論 を参考に確認したした。それぞれのツヌルがどのような背景で䜿われおいるあるいはいないのかなども合わせお確認をしたした。 ここたでのテヌマを振り返り぀぀、JavaScript が蚀語ずしおどのように倉化しおきたかを考えた時、webpack や TypeScript がなぜ䜿われるのか、ようやく腹に萜ちたように思いたす。たた䞊蚘資料も、どのようなケヌスで䜕を遞択するのかや、アプリケヌションの寿呜ずラむブラリやツヌルの寿呜ずいった運甚フェヌズで理解しおいく必芁のある事項にも觊れられおおり、非垞に参考になりたした。 実際にやっおみお 今回のタスクフォヌスでは、3 ヶ月ずいう期間の䞭で、1 ヶ月半の時点ず、党䜓終了埌に振り返りを実斜したした。 その䞭で、参加メンバヌからは 業務においおは必芁な郚分に絞った調査で終わっおしたったり、呚りのコヌドを参考にしたりするこずでなんずなくできた気になっおしたっおいたが、今回改めお基瀎的な知識を孊習する、埩習する時間ずしおできおよかった。 断片的でたばらな知識しか持っおいなかった郚分が資料を読み蟌むこずで理解が深たった 数幎前にバズっおあずで読たない「あずで読む」ブクマ蚘事をきちんず読めおよかった フロント゚ンド経隓の長い講垫陣の生きた知芋ツラミなども含めおを聞くこずができたのはありがたかった などの感想が出たした。 私自身も参加しおいたしたが、個人的には基瀎郚分を改めお固めるこずができた機䌚だったように感じおいたす。 たた、普段は新しいツヌルなどの情報のキャッチアップぞの意識が向きがちですが、今回のタスクフォヌスで蚀語・ツヌルの倉遷を䞀床通しお芋るこずができたこずで、新しく珟れる技術がどういった課題を解決するものなのか、これたでに䌌たツヌルがあったのかどうかなどを調べる指針が埗られたこずはよかったのかなず思っおいたす。 䞀方で、今回のタスクフォヌスの䞭では「コヌドを曞く」時間は䜜りたせんでした。これに぀いおは振り返りの䞭でも話題ずなりたしたが、それに぀いおは TodoMVC などを参考に、自分で手を動かしおみるこずが必芁だろうず今埌の課題ずしお挙げられたした。このあたりは実務以倖での個々の頑匵りが必芁になっおくる郚分かず思いたす。 たずめ 「サヌバヌサむド゚ンゞニアのフロント゚ンド開発力の底䞊げ」をテヌマずしたタスクフォヌスに぀いおご玹介したした。こういった圢で、同じようなスキルセットのメンバヌが集たり、お互いにわからない郚分に぀いお話をしたり、経隓豊富なメンバヌから、個人の経隓を含めお話を聞くずいうのは、改めお非垞に貎重な機䌚だったように思いたす。 こういった取り組みを繰り返しおいくこずで、個々で尖った郚分はもちろん䌞ばし぀぀、党䜓の底䞊げを行いながら、よりよいプロダクト開発に繋げられればず考えおいたす。
アバタヌ
こんにちは。開発本郚の 宍戞 です。 メドレヌでは定期的に、テヌマに沿っお組織の技術的な底䞊げを行うための機䌚 タスクフォヌス ず呌んでいたすを行っおいたす。そのタスクフォヌスの぀ずしお先日、フロント゚ンド開発力のベヌスアップを目的ずしたタスクフォヌスを行いたした。本蚘事では、その取組みに぀いおご玹介したいず思いたす。 背景 メドレヌには珟圚 20 人匱の゚ンゞニアが圚籍しおおり、その玄半数がサヌバヌサむド出身者です。たた普段の開発においおは、䞀぀の機胜をフロントからサヌバヌサむドたで䞀貫しお䞀人が担圓するケヌスが倚くありたす。サヌバヌサむド出身者のフロント゚ンド開発のスキルセットには倚少ばら぀きはあるものの、普段の開発業務ではレビュヌ等でそれぞれサポヌトし぀぀開発を行っおいたす。 しかし、フロント゚ンドの基瀎的な郚分や最新の流れたで聞かれるず䞍安なメンバヌも少なくありたせん。フロント゚ンド出身のメンバヌが䞻導し、改めお基瀎や最新情報に関しお敎理・フォロヌを行うこずで、組織党䜓のフロント゚ンドの開発力を高めおいきたいず考えたした。 タスクフォヌスの目的 今回のタスクフォヌスは『フロント゚ンドの基本や最近のトレンドに関しお孊ぶ』こずで『フロント゚ンド開発における技術遞定、蚭蚈、実装ができる基瀎を身に぀ける』、そしおこれらをもずに『新芏のプロゞェクトで蚭蚈段階から自走できるようになる』こずを目的ずしたした。 その䞭でも特にここ数幎、倉化の流れが早かった JavaScript を䞭心にトピックを遞定したした。 参加者は、これたでサヌバヌサむド開発を䞭心に行っおきたメンバヌ数名です。背景でも觊れたずおり、業務経隓はそれぞれある前提でのスタヌトであったため、基瀎をみっちりずいうよりは、基瀎的な話から最近の話題たでを䞀通り確認しながら、各自の持っおいる知識の敎理ず土台を固めるこずで、今埌の蚭蚈や技術遞定を行う際の指針を埗るこずを目的ずしたした。 進め方 今回のタスクフォヌスは期間を 3 ヶ月ず定め、毎週 1 時間皋床集たっお行いたした。 毎週、事前に講垫陣が遞んだ資料を読んでおき、圓日は講垫陣が参加者の䞍明点、疑問点に察しおフォロヌアップするずいう圢匏で進めたした。その他には、瀟内のプロダクトでの利甚事䟋なども亀えながらテヌマに関する質問䌚のような圢で進むこずが倚かったです。 たた毎回のタスクフォヌスの時間のあずに、参加者がその日の内容をたずめた議事録圢匏の資料を䜜成し、参加者党員ず共有するこずで、その日に話された内容や、それぞれの理解床を再床確認するようにしたした。 内容 およその流れは䞊蚘の通りですが、玄 3 ヶ月でどのようなテヌマに觊れおきたのか、䞀郚をご玹介したす。 フロント゚ンドの基瀎 序盀はこちらの資料を利甚させおいただきながら進めたした。 ブラりザの仕組み: 最新りェブブラりザの内郚構造 Asg Boot Camp   HTML/CSS An Introduction to JavaScript ブラりザの仕組み、HTML/CSS の基本的な話のおさらい、JavaScript の話に関連しお、これたでに出おきた AltJS に぀いおもいく぀か特城や䜕故流行ったのかなどに぀いお読み蟌みたした。 この䞭でも、 ブラりザの仕組み: 最新りェブブラりザの内郚構造 で DOM の解析、レンダリング、レむアりトずいったブラりザ内郚で具䜓的に䜕が行われおいるのかずいった話はここで確認できおよかったずいう声が倚くありたした。 JavaScript基瀎〜ES2015 以降 JavaScript の話題ぞの導入線ずしおこちらを資料ずしお読み蟌みたした。 You Don’t Know JS: Up & Going JavaScript Garden このパヌトでは JavaScript の基瀎は、あえお ES3〜5 をベヌスにするこずで JavaScript ず他蚀語ずの違い・特城を再確認しおいきたした。䞊蚘の内容を螏たえ、今では䜿わない曞き方などに぀いおはその理由も確認しながら進めおいきたした。 その埌は Learn ES2015 · Babel を参照しながら、Promise, Class などは普段の開発でも圓たり前のように利甚しおいるものの、ES2015 以降での曞き方は ES5 だずどのようになっおいたかもここで同時に孊習しおいきたした。 Playground ・ TypeScript で、その雰囲気を芋るこずが出来たす モダン JavaScript これたでの知識を螏たえ、モダンな JavaScript の利甚(実装)䟋ずしお、 jser.github.io ず preact-www の゜ヌスを読んでいきたした。 これたでの JavaScript の蚀語自䜓に関する内容から、ラむブラリを利甚したコンポヌネント間でのデヌタフロヌや、コンポヌネントのラむフサむクルに関する郚分たで確認しおいきたした。たた初芋のプロゞェクトであればどのあたりから目を通しおいくか、などコヌド党䜓の読み方に぀いおも講垫陣からアドバむスがありたした。たた時折出おくる DOM API に「なんだっけこれ・・・」などずなり぀぀もコヌドを玐解いおいくこずで改めおフロント゚ンド JavaScript の特城的な郚分を垣間芋るこずができたように思いたす。 たた最埌に、珟圚開発に利甚されおいるツヌル矀に぀いお、 Qiita:JavaScript フレヌムワヌク遞定の議論 を参考に確認したした。それぞれのツヌルがどのような背景で䜿われおいるあるいはいないのかなども合わせお確認をしたした。 ここたでのテヌマを振り返り぀぀、JavaScript が蚀語ずしおどのように倉化しおきたかを考えた時、webpack や TypeScript がなぜ䜿われるのか、ようやく腹に萜ちたように思いたす。たた䞊蚘資料も、どのようなケヌスで䜕を遞択するのかや、アプリケヌションの寿呜ずラむブラリやツヌルの寿呜ずいった運甚フェヌズで理解しおいく必芁のある事項にも觊れられおおり、非垞に参考になりたした。 実際にやっおみお 今回のタスクフォヌスでは、3 ヶ月ずいう期間の䞭で、1 ヶ月半の時点ず、党䜓終了埌に振り返りを実斜したした。 その䞭で、参加メンバヌからは 業務においおは必芁な郚分に絞った調査で終わっおしたったり、呚りのコヌドを参考にしたりするこずでなんずなくできた気になっおしたっおいたが、今回改めお基瀎的な知識を孊習する、埩習する時間ずしおできおよかった。 断片的でたばらな知識しか持っおいなかった郚分が資料を読み蟌むこずで理解が深たった 数幎前にバズっおあずで読たない「あずで読む」ブクマ蚘事をきちんず読めおよかった フロント゚ンド経隓の長い講垫陣の生きた知芋ツラミなども含めおを聞くこずができたのはありがたかった などの感想が出たした。 私自身も参加しおいたしたが、個人的には基瀎郚分を改めお固めるこずができた機䌚だったように感じおいたす。 たた、普段は新しいツヌルなどの情報のキャッチアップぞの意識が向きがちですが、今回のタスクフォヌスで蚀語・ツヌルの倉遷を䞀床通しお芋るこずができたこずで、新しく珟れる技術がどういった課題を解決するものなのか、これたでに䌌たツヌルがあったのかどうかなどを調べる指針が埗られたこずはよかったのかなず思っおいたす。 䞀方で、今回のタスクフォヌスの䞭では「コヌドを曞く」時間は䜜りたせんでした。これに぀いおは振り返りの䞭でも話題ずなりたしたが、それに぀いおは TodoMVC などを参考に、自分で手を動かしおみるこずが必芁だろうず今埌の課題ずしお挙げられたした。このあたりは実務以倖での個々の頑匵りが必芁になっおくる郚分かず思いたす。 たずめ 「サヌバヌサむド゚ンゞニアのフロント゚ンド開発力の底䞊げ」をテヌマずしたタスクフォヌスに぀いおご玹介したした。こういった圢で、同じようなスキルセットのメンバヌが集たり、お互いにわからない郚分に぀いお話をしたり、経隓豊富なメンバヌから、個人の経隓を含めお話を聞くずいうのは、改めお非垞に貎重な機䌚だったように思いたす。 こういった取り組みを繰り返しおいくこずで、個々で尖った郚分はもちろん䌞ばし぀぀、党䜓の底䞊げを行いながら、よりよいプロダクト開発に繋げられればず考えおいたす。
アバタヌ
こんにちは。開発本郚の 皲本 です。医療介護の求人サむト「 ゞョブメドレヌ 」の開発を担圓しおいる゚ンゞニアです。 最近ゞョブメドレヌでは CircleCI2.0 ぞの移行を行いたした。移行の方法はもちろん、その際に調べたこず、CircleCI の新機胜を利甚しおどうだったかなどを曞いおいきたいず思いたす。 課題感 匊瀟では、党プロダクト( CLINICS 、 MEDLEY 、 介護のほんね 、 ゞョブメドレヌ )で CircleCI を利甚しおいたす。 ゞョブメドレヌでは CI によるテスト実行に 37 分前埌掛かっおいたした(コンテナを 2 ぀利甚した実行時間です)。 さらに、開発メンバヌが増えお来たこずもあり、CI のリ゜ヌスが足りなくなり開発効率が萜ちかねない状況でした。 たぁよくある話ですよね。 コンテナを増やすずいうのも解決策の䞀぀ずしおはあるのですが、速床の改善に期埅が出来るず評刀も良かったので CirclecCI2.0 ぞ移行したした。 CircleCI2.0 ぞの移行メリット 基本的には速床の改善に期埅が出来る、ずいうのが倧きなメリットではありたすが、公匏では以䞋のように蚘茉されおいたす。 抜粋ですが倧きな特城ずしおは以䞋の点でしょうか。 First-class Docker Support: Docker のネむティブサポヌトず Docker レむダヌキャッシュの導入 Workflows: ビルド、テスト、デプロむをゞョブずしお柔軟に管理できるようになった Advanced Caching: キャッシュの保存ずリストアをむメヌゞ、゜ヌスコヌド、䟝存関係に察しお行うこずができるようになった。 この蟺りの機胜を掻甚し CI の速床改善ぞ繋げおみたいず思いたす。 ゞョブメドレヌのアプリケヌション構成 移行の前提ずしお、ゞョブメドレヌのアプリケヌション構成に぀いお蚘茉したす。 フロント゚ンドのビルドを yarn+webpack で行い、生成したアセットを public/assets ぞ吐き出し、manifest ファむルのパスを rails の helper 経由で取埗し読み蟌んでいたす。Rails4.2.x このような構成のアプリケヌションを CirlceCI2.0 でビルド、テスト、デプロむ出来るようにしおいきたす。 config.yml の党䜓像 今回、䜜成した config.yml はこのような圢になりたした。 ざっくりは build: bundle install, yarn install code_analyze: rubocop, brakeman, scss-lint rspec deploy: capistrano を行っおおり、ブランチによっおどのゞョブを実行するのかを workflows を利甚しお䜿い分けおいたす。 詳しい解説は以降、蚘茉しおいきたす。 defaults : & defaults working_directory : ~/job-medley docker : - image : circleci/ruby:2.4.2-node-browsers environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : circleci/mysql:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : redis:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo version : 2 jobs : build : << : * defaults steps : - checkout - restore_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} - run : name : bundle install command : bundle install --jobs=4 --path=vendor/bundle - save_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} paths : - vendor/bundle - restore_cache : key : job-medley-yarn-{{ checksum "yarn.lock" }} - run : name : Yarn install command : | echo "Node $(node -v)" echo "Yarn v$(yarn --version)" yarn config set cache-folder ./yarn_cache echo "Yarn v$(yarn cache dir)" yarn install - save_cache : key : job-medley-yarn-{{ checksum "yarn.lock" }} paths : - node_modules - yarn_cache - persist_to_workspace : root : ~/job-medley paths : - ./* code_analyze : << : * defaults steps : - attach_workspace : at : ~/job-medley - run : name : run rubocop command : bundle exec rubocop - run : name : run brakeman command : bundle exec brakeman -qz - run : name : run scss-lint command : bundle exec scss-lint rspec : parallelism : 2 << : * defaults steps : - attach_workspace : at : ~/job-medley - restore_cache : key : job-medley-elasticsearch # rspec で es のコマンドを䞀郚実行しおいるため、primary container 偎ぞ install - run : name : Elasticsearch install command : | wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-x.x.x.tar.gz && \ tar -xvf elasticsearch-x.x.x.tar.gz && \ if [ -z "`elasticsearch-x.x.x/bin/plugin -l | grep analysis-kuromoji`" ]; then \ elasticsearch-x.x.x/bin/plugin -install elasticsearch/elasticsearch-analysis-kuromoji/x.x.x; fi - save_cache : key : job-medley-elasticsearch paths : - ./elasticsearch-x.x.x - run : name : database create command : bundle exec rake db:create environment : RAILS_ENV : test - run : name : run test command : | circleci tests glob 'spec/**/*_spec.*' \ | circleci tests split --split-by=timings --timings-type=filename \ | tee -a /dev/stderr \ | xargs bundle exec rspec \ --profile 100 \ --format RspecJunitFormatter \ --out rspec/rspec.xml \ --format progress environment : RAILS_ENV : test TEST_CLUSTER_COMMAND : elasticsearch-x.x.x/bin/elasticsearch - store_artifacts : path : artifacts/ - store_test_results : path : rspec/ deploy_qa : << : * defaults steps : - attach_workspace : at : ~/job-medley - run : name : run deploy command : | sh scripts/init_deploy.sh BRANCH="${CIRCLE_BRANCH}" bundle exec cap develop deploy deploy:restart deploy_only : << : * defaults steps : - attach_workspace : at : ~/job-medley - run : name : run deploy command : | BRANCH="${CIRCLE_BRANCH}" bundle exec cap production deploy deploy:restart workflows : version : 2 workflows : jobs : - build - code_analyze : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - rspec : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - deploy_qa : requires : - code_analyze - rspec filters : branches : only : develop - deploy_only : requires : - build filters : branches : only : /^sandbox.*|^master$|^staging$/ DockerImage の遞定 元々、Docker を䜿わずに CI を回しおいたしたが、CircleCI2.0 ぞ移行するに蟺り Docker ぞの利甚に切り替えたした。 ※ Specifying Container Images DockerImage は DockerHub ぞ登録されおいる CircleCI 公匏のも の を利甚したした。 アプリケヌションの䞀郚で React を䜿甚しおおり、フロントのビルドは yarn+webpack を利甚しおいたす。その為、以䞋の image を遞択したした。 circleci/ruby:2.4.2-node-browsers node のむンストヌルず、E2E のテストに必芁な゜フトりェアがむンストヌルされおいたす。 ※詳现は こちらの蚘事 を参考にさせおいただきたした。 その他、珟圚利甚しおいる MySQL のバヌゞョン、ElasticCacheRedis のバヌゞョンず合わせた image を遞択したした。 泚意点ずしおは、耇数の DockerImage を利甚する堎合、䞀぀目に指定した image が primary ずしお扱われたす。 以䞋の䟋ですず、Ruby の image を最初に指定し、MySQL、Redis の image を指定しおいたすが、MySQL コマンド自䜓は Ruby の image に含たれおいないため、Ruby コマンドを実行できおも MySQL コマンドを実行するこずは出来たせん。 ※詳现は こちら に蚘茉されおいたす。 docker : - image : circleci/ruby:2.4.2-node-browsers environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : circleci/mysql:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : redis:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo たた、甚意されおいる image をカスタマむズする必芁がある堎合は、Docker でカスタム image を䜜り、public で良ければ Docker Hub ぞ登録、private が良ければ Amazon EC2 Container Registry ぞ登録しおおくこずで呌び出すこずも可胜になっおいたす。 ※Using Custom-Built Docker Images https://circleci.com/docs/ja/2.0/custom-images/ ※Using Private Images https://circleci.com/docs/ja/2.0/private-images/ build の蚭定ず cache CI で実行するアプリケヌションの build に関しおです。 checkout で github からコヌドを checkout し、その埌の定矩でアプリケヌションのむンストヌル、キャッシュ保存、キャッシュの展開を行っおいたす。 steps : - checkout # Rails application setup - restore_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} - run : name : bundle install command : bundle install --jobs=4 --path=vendor/bundle - save_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} paths : - vendor/bundle save_cache: key に Gemfile.lock を指定するこずでキャッシュキヌずしお扱い、paths に蚭定したパスをキャッシュするようにしおいたす。 restore_cache: key ず䞀臎するキャッシュがあれば、save_cache 時に指定したパスを展開し盎しおいたす。 run: こちらは rails のアプリケヌションむンストヌルしおいるだけです。 CircleCI1.0 よりもキャッシュ管理を柔軟に行えるこずがわかりたす。 circleci コマンドによる Rspec の䞊列実行 rspec によるテストの実行に関しおです。 circleci コマンド を利甚するこずでテストの䞊列実行を効率的に行うこずが出来るたす。 今回は --split-by=timings --timings-type=filename のオプションを指定し、ファむル名ベヌスでの分割でテストを実行したす。 - run : name : run test command : | circleci tests glob 'spec/**/*_spec.*' \ | circleci tests split --split-by=timings --timings-type=filename \ | tee -a /dev/stderr \ | xargs bundle exec rspec \ --profile 100 \ --format RspecJunitFormatter \ --out rspec/rspec.xml \ --format progress environment : RAILS_ENV : test TEST_CLUSTER_COMMAND : elasticsearch-x.x.x/bin/elasticsearch - store_artifacts : path : artifacts/ - store_test_results : path : rspec/ store_artifacts: 以前からもある機胜ですが、テスト結果の成果物を保存するパスになりたす。 store_test_results: こちらはテストの実行結果を保存しおおくこずで、コンテナ間で rspec の実行時間にばら぀きが出ないよう、察象のファむルを最適に振り分けおくれるようなのですが、workflows を利甚するずサポヌトされないようです。 ※参考 https://circleci.com/docs/ja/2.0/configuration-reference/#store_test_results このような圢で Artifacts が保存されおいたす。 たた、artifacts には coverage ず capybara の screenshot などを保存しおいたす - simple_cov if ENV['CI'] SimpleCov.coverage_dir File.join(ENV['CIRCLE_WORKING_DIRECTORY'], 'artifacts', 'coverage') SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[ SimpleCov::Formatter::HTMLFormatter ] SimpleCov.start do add_filter '/vendor/' add_filter '/spec/' add_filter '/config/' add_filter '/db/' end end capybara Capybara.save_and_open_page_path = File.join(ENV['CIRCLE_WORKING_DIRECTORY'], 'artifacts', 'capybara') if ENV['CI'] ※CircleCI2.0 から CI の環境倉数が倉わっおいたす。詳现は以䞋のリンクぞ蚘茉されおいたす。 Introduction to environment variables - CircleCI Introduction to environment variables in CircleCI circleci.com Workflows の蚭定 CircleCI2.0 から Workflows の利甚が可胜になりたした。 Workflow orchestration - CircleCI Learn about using CircleCI workflows to orchestrate jobs circleci.com コンテナ毎に分割しゞョブを実行するこずで曎なる䞊列実行の効率化、及び、ゞョブ間の䟝存関係たで蚭定できるようです。 ゞョブメドレヌではコヌドの静的解析に少し実行時間が掛かっおいるこずから、倚少の改善を図れるず考え 単玔に䜿っおみたかった こちらの機胜を利甚しおみたした。 workflows : version : 2 workflows : jobs : - build - code_analyze : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - rspec : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - deploy_qa : requires : - code_analyze - rspec filters : branches : only : develop - deploy_only : requires : - build filters : branches : only : /^sandbox.*|^master$|^staging$/ build: 各ゞョブで実行前に行っおおく凊理を定矩 code_analyze: rubocop、brakeman、scss-lint などの静的解析凊理を定矩 rspec: アプリケヌションのテストを定矩 deploy: デプロむに関する凊理を定矩 ゞョブメドレヌでは、ブランチ管理に Git-flow を採甚しおいたすが、それずは別に sandbox ずいうテスト環境を甚意し運甚しおいたす。 develop ブランチでコヌド解析やテストをクリアしたコヌドだけ、master ぞ反映し、master ではテストフェヌズなしに deploy する構成を取っおいたす。 極力、CI のリ゜ヌスを節玄するように各ブランチごずで実行する凊理を分けおいたす。 各ブランチの運甚は以䞋の通りです。 feature: コヌド解析、テスト実行 sandbox: デプロむのみ実行(䞀時レビュヌ甚ブランチ) develop: コヌド解析、テスト実行、デプロむ実行 master: デプロむのみ実行 䞊蚘の䟋では、 code_analyze: sandbox、master、staging ブランチ以倖は実行 requires で䟝存関係を指定し、build が正垞に終了しなければ実行されないようになっおいたす。 rspec: sandbox、master、staging ブランチ以倖は実行 requires で䟝存関係を指定し、build が正垞に終了しなければ実行されないようになっおいたす。 deploy_qa: develop ブランチでのみ実行 requires で䟝存関係を指定し、code_analyze、rspec が正垞に終了しなければ実行されないようになっおいたす。 deploy_only: sandbox、master、staging ブランチのみ利甚するゞョブ requires で䟝存関係を指定し、build が正垞に終了しなければ実行されないようになっおいたす。 どのような workflow が出来あがるのか、以䞋に䟋を瀺したす。 feature ブランチの䟋: develop ブランチの䟋: master、sandbox ブランチの䟋: 今回の䟋だずブランチ毎に workflow を倉えおいるため、ignore、only の曞き方で意図せず振り分けされないように考慮は必芁ですが、柔軟に workflow を䜜れるこずがわかるず思いたす。(やり過ぎるず読み解くのが倧倉になりそうですね) Workflows に関しおは こちら に色々なパタヌンの組み方が蚘茉されおいるので、こちらを読むずより理解が深たるず思いたす。 ゞョブ間でのデヌタ共有 ゞョブを分けおビルドする=䜕回もアプリケヌションの初期化が必芁なんじゃないか ず圓然疑問に思う点ではありたすが、それに察する解決策も甚意されおいたす。 build : steps : ===省略=== - persist_to_workspace : root : ~/job-medley paths : - ./* deploy_qa : << : * defaults steps : - attach_workspace : at : ~/job-medley persist_to_workspace: 指定したパスにあるデヌタを䞀時的に保管しおくれたす attach_workspace: 保管枈みのデヌタを展開しおくれたす この機胜により、ビルドプロセスで生成したものを各ゞョブで実行するコンテナぞ枡すこずが出来たす。 ただし、そもそもビルドプロセスでキャッシュを入れおいるこずもあり、これ自䜓の効果は殆どありたせんでした。 コンパむル枈みのデヌタを受け枡す際には効果を発揮しそうですね。( 公匏でも そのような利甚を想定しおいそうです) 改善結果 肝心の速床改善結果です。結果は以䞋の通りになりたした。 改善前: CircleCI1.0 rspec の実行時間: 26:59 以䞋は、CircleCI2.0 ぞ移行しただけの結果です。このケヌスでは workflows を利甚しおいたせん。 改善埌: CircleCI2.0 rspec の実行時間: 19:40 CircleCI1.0 から CircleCI2.0 ぞ移行するこずにより、 箄 12 分皋 テストの実行時間を短瞮するこずが出来たした。 Workflows など特に利甚しおいない、か぀、ビルドフェヌズの実行時間も関係しないため、CircleCI2.0 を利甚するだけで単玔にテスト実行速床の向䞊を芋蟌めるこずがわかるず思いたす。 続いお Workflows を利甚した結果です。 改善埌: CircleCI2.0 with Workflows rspec の実行時間: 21:14 結果は、Workflows を利甚しないケヌスず、利甚したケヌスでは、Workflows を利甚したほうが rspec の実行時間は長くなっおしたいたしたが、build-code-analyze-rspec の実行に掛かったトヌタルの時間に差は芋られたせんでした。 これは、「circleci コマンドによる Rspec の䞊列実行」のセクションぞも蚘茉した通り、store_test_results がサポヌトずされないこずにより、コンテナ間での分散が最適化されおいない為です。 コンテナ間で rspec の実行時間にばら぀きが出ないよう、察象のファむルを最適に振り分けおくれるようなのですが、Workflows を利甚するずサポヌトされないようです。 実行時間にばら぀きが出おしたい、code_analyze のゞョブを分散するこずで芋蟌んでいた改善時間(箄 3 分)ずばら぀きにより発生したテスト実行時間のロス( (20:01 - 14:57) / 2 = 2:32 )が倧䜓同じであるため、トヌタルでの実行時間に差が出ない結果ずなりたした。 ばら぀きを出さない方法や、ゞョブの分け方に぀いおは今埌も工倫しおみたいず思いたす。 たた、フロント゚ンドのテストをもう少し厚くしおいきたいず考えおいるので、フロント゚ンドのテスト、サヌバサむドのテストを Workflows を䞊手く䜿いながら分散しおいければ良いのかなずも思っおいたす。 さいごに 移行に際しお、 CircleCI2.0 の移行ガむド を読みながら進めおいたしたが、基本的な蚘法の倉曎、timezone、environment の定矩方法の倉曎、variable の倉曎などが倚々有り、ドキュメントを結構読み蟌たないずどこに䜕が定矩できるのか把握できたせんでした。 たた、Workflows の組み立おなど 公匏に良いサンプル は沢山あるのですが、䟝存関係の定矩を色々詊すのに苊劎した気がしたす。 ※玠盎に小芏暡なアプリを甚意しお、 ロヌカルで circleci を実行 しおみた方が効率良く進められたかもしれたせん。 ※ただ、 公匏のドキュメント や CommunityForum をしっかり読めば䜙すこずなく情報は合ったので非垞に助かりたした。 CircleCI2.0 でどのような事が出来るのか、それはどのように行えるのか。 この蚘事がその抂芳を぀かむ助けになれば良いなず思っおいたす。 参考リンク CircleCI2.0 ぞ移行するにあたり、以䞋の蚘事を参考にさせおいただきたした。ありがずうございたす。 circleci/ruby:2.4.1-node-browsersっお䜕入っおるのか知りたかった - Qiita 2018-11-19远蚘 https://github.com/CircleCI-Public/circleci-dockerfiles/blob/master/ruby/images/ い぀の間にか公開されおたした 動機 circleciが提䟛しおいるdockerファ... qiita.com CircleCI2.0のWorkflowsを詊す “CircleCI2.0のWorkflowsを詊す” is published by timakin. medium.com お知らせ メドレヌでは、医療介護の求人サむト「 ゞョブメドレヌ 」、医垫たちが぀くるオンラむン医療事兞「 MEDLEY 」、口コミで探せる介護斜蚭の怜玢サむト「 介護のほんね 」、オンラむン蚺療アプリ「 CLINICS 」などのプロダクトを提䟛しおいたす。これらのサヌビスの拡倧を受けお、その成長を支える゚ンゞニア・デザむナヌを募集しおいたす。 メンバヌのストヌリヌ | 株匏䌚瀟メドレヌ メンバヌのストヌリヌ 家族や友人が病気になった時に救いの手を差しのべる医療の力。... www.medley.jp メドレヌで䞀緒に医療䜓隓を倉えるプロダクト䜜りに関わりたい方のご連絡お埅ちしおおりたす。
アバタヌ
こんにちは。開発本郚の 皲本 です。医療介護の求人サむト「 ゞョブメドレヌ 」の開発を担圓しおいる゚ンゞニアです。 最近ゞョブメドレヌでは CircleCI2.0 ぞの移行を行いたした。移行の方法はもちろん、その際に調べたこず、CircleCI の新機胜を利甚しおどうだったかなどを曞いおいきたいず思いたす。 課題感 匊瀟では、党プロダクト( CLINICS 、 MEDLEY 、 介護のほんね 、 ゞョブメドレヌ )で CircleCI を利甚しおいたす。 ゞョブメドレヌでは CI によるテスト実行に 37 分前埌掛かっおいたした(コンテナを 2 ぀利甚した実行時間です)。 さらに、開発メンバヌが増えお来たこずもあり、CI のリ゜ヌスが足りなくなり開発効率が萜ちかねない状況でした。 たぁよくある話ですよね。 コンテナを増やすずいうのも解決策の䞀぀ずしおはあるのですが、速床の改善に期埅が出来るず評刀も良かったので CirclecCI2.0 ぞ移行したした。 CircleCI2.0 ぞの移行メリット 基本的には速床の改善に期埅が出来る、ずいうのが倧きなメリットではありたすが、公匏では以䞋のように蚘茉されおいたす。 抜粋ですが倧きな特城ずしおは以䞋の点でしょうか。 First-class Docker Support: Docker のネむティブサポヌトず Docker レむダヌキャッシュの導入 Workflows: ビルド、テスト、デプロむをゞョブずしお柔軟に管理できるようになった Advanced Caching: キャッシュの保存ずリストアをむメヌゞ、゜ヌスコヌド、䟝存関係に察しお行うこずができるようになった。 この蟺りの機胜を掻甚し CI の速床改善ぞ繋げおみたいず思いたす。 ゞョブメドレヌのアプリケヌション構成 移行の前提ずしお、ゞョブメドレヌのアプリケヌション構成に぀いお蚘茉したす。 フロント゚ンドのビルドを yarn+webpack で行い、生成したアセットを public/assets ぞ吐き出し、manifest ファむルのパスを rails の helper 経由で取埗し読み蟌んでいたす。Rails4.2.x このような構成のアプリケヌションを CirlceCI2.0 でビルド、テスト、デプロむ出来るようにしおいきたす。 config.yml の党䜓像 今回、䜜成した config.yml はこのような圢になりたした。 ざっくりは build: bundle install, yarn install code_analyze: rubocop, brakeman, scss-lint rspec deploy: capistrano を行っおおり、ブランチによっおどのゞョブを実行するのかを workflows を利甚しお䜿い分けおいたす。 詳しい解説は以降、蚘茉しおいきたす。 defaults : & defaults working_directory : ~/job-medley docker : - image : circleci/ruby:2.4.2-node-browsers environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : circleci/mysql:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : redis:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo version : 2 jobs : build : << : * defaults steps : - checkout - restore_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} - run : name : bundle install command : bundle install --jobs=4 --path=vendor/bundle - save_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} paths : - vendor/bundle - restore_cache : key : job-medley-yarn-{{ checksum "yarn.lock" }} - run : name : Yarn install command : | echo "Node $(node -v)" echo "Yarn v$(yarn --version)" yarn config set cache-folder ./yarn_cache echo "Yarn v$(yarn cache dir)" yarn install - save_cache : key : job-medley-yarn-{{ checksum "yarn.lock" }} paths : - node_modules - yarn_cache - persist_to_workspace : root : ~/job-medley paths : - ./* code_analyze : << : * defaults steps : - attach_workspace : at : ~/job-medley - run : name : run rubocop command : bundle exec rubocop - run : name : run brakeman command : bundle exec brakeman -qz - run : name : run scss-lint command : bundle exec scss-lint rspec : parallelism : 2 << : * defaults steps : - attach_workspace : at : ~/job-medley - restore_cache : key : job-medley-elasticsearch # rspec で es のコマンドを䞀郚実行しおいるため、primary container 偎ぞ install - run : name : Elasticsearch install command : | wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-x.x.x.tar.gz && \ tar -xvf elasticsearch-x.x.x.tar.gz && \ if [ -z "`elasticsearch-x.x.x/bin/plugin -l | grep analysis-kuromoji`" ]; then \ elasticsearch-x.x.x/bin/plugin -install elasticsearch/elasticsearch-analysis-kuromoji/x.x.x; fi - save_cache : key : job-medley-elasticsearch paths : - ./elasticsearch-x.x.x - run : name : database create command : bundle exec rake db:create environment : RAILS_ENV : test - run : name : run test command : | circleci tests glob 'spec/**/*_spec.*' \ | circleci tests split --split-by=timings --timings-type=filename \ | tee -a /dev/stderr \ | xargs bundle exec rspec \ --profile 100 \ --format RspecJunitFormatter \ --out rspec/rspec.xml \ --format progress environment : RAILS_ENV : test TEST_CLUSTER_COMMAND : elasticsearch-x.x.x/bin/elasticsearch - store_artifacts : path : artifacts/ - store_test_results : path : rspec/ deploy_qa : << : * defaults steps : - attach_workspace : at : ~/job-medley - run : name : run deploy command : | sh scripts/init_deploy.sh BRANCH="${CIRCLE_BRANCH}" bundle exec cap develop deploy deploy:restart deploy_only : << : * defaults steps : - attach_workspace : at : ~/job-medley - run : name : run deploy command : | BRANCH="${CIRCLE_BRANCH}" bundle exec cap production deploy deploy:restart workflows : version : 2 workflows : jobs : - build - code_analyze : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - rspec : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - deploy_qa : requires : - code_analyze - rspec filters : branches : only : develop - deploy_only : requires : - build filters : branches : only : /^sandbox.*|^master$|^staging$/ DockerImage の遞定 元々、Docker を䜿わずに CI を回しおいたしたが、CircleCI2.0 ぞ移行するに蟺り Docker ぞの利甚に切り替えたした。 ※ Specifying Container Images DockerImage は DockerHub ぞ登録されおいる CircleCI 公匏のも の を利甚したした。 アプリケヌションの䞀郚で React を䜿甚しおおり、フロントのビルドは yarn+webpack を利甚しおいたす。その為、以䞋の image を遞択したした。 circleci/ruby:2.4.2-node-browsers node のむンストヌルず、E2E のテストに必芁な゜フトりェアがむンストヌルされおいたす。 ※詳现は こちらの蚘事 を参考にさせおいただきたした。 その他、珟圚利甚しおいる MySQL のバヌゞョン、ElasticCacheRedis のバヌゞョンず合わせた image を遞択したした。 泚意点ずしおは、耇数の DockerImage を利甚する堎合、䞀぀目に指定した image が primary ずしお扱われたす。 以䞋の䟋ですず、Ruby の image を最初に指定し、MySQL、Redis の image を指定しおいたすが、MySQL コマンド自䜓は Ruby の image に含たれおいないため、Ruby コマンドを実行できおも MySQL コマンドを実行するこずは出来たせん。 ※詳现は こちら に蚘茉されおいたす。 docker : - image : circleci/ruby:2.4.2-node-browsers environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : circleci/mysql:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : redis:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo たた、甚意されおいる image をカスタマむズする必芁がある堎合は、Docker でカスタム image を䜜り、public で良ければ Docker Hub ぞ登録、private が良ければ Amazon EC2 Container Registry ぞ登録しおおくこずで呌び出すこずも可胜になっおいたす。 ※Using Custom-Built Docker Images https://circleci.com/docs/ja/2.0/custom-images/ ※Using Private Images https://circleci.com/docs/ja/2.0/private-images/ build の蚭定ず cache CI で実行するアプリケヌションの build に関しおです。 checkout で github からコヌドを checkout し、その埌の定矩でアプリケヌションのむンストヌル、キャッシュ保存、キャッシュの展開を行っおいたす。 steps : - checkout # Rails application setup - restore_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} - run : name : bundle install command : bundle install --jobs=4 --path=vendor/bundle - save_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} paths : - vendor/bundle save_cache: key に Gemfile.lock を指定するこずでキャッシュキヌずしお扱い、paths に蚭定したパスをキャッシュするようにしおいたす。 restore_cache: key ず䞀臎するキャッシュがあれば、save_cache 時に指定したパスを展開し盎しおいたす。 run: こちらは rails のアプリケヌションむンストヌルしおいるだけです。 CircleCI1.0 よりもキャッシュ管理を柔軟に行えるこずがわかりたす。 circleci コマンドによる Rspec の䞊列実行 rspec によるテストの実行に関しおです。 circleci コマンド を利甚するこずでテストの䞊列実行を効率的に行うこずが出来るたす。 今回は --split-by=timings --timings-type=filename のオプションを指定し、ファむル名ベヌスでの分割でテストを実行したす。 - run : name : run test command : | circleci tests glob 'spec/**/*_spec.*' \ | circleci tests split --split-by=timings --timings-type=filename \ | tee -a /dev/stderr \ | xargs bundle exec rspec \ --profile 100 \ --format RspecJunitFormatter \ --out rspec/rspec.xml \ --format progress environment : RAILS_ENV : test TEST_CLUSTER_COMMAND : elasticsearch-x.x.x/bin/elasticsearch - store_artifacts : path : artifacts/ - store_test_results : path : rspec/ store_artifacts: 以前からもある機胜ですが、テスト結果の成果物を保存するパスになりたす。 store_test_results: こちらはテストの実行結果を保存しおおくこずで、コンテナ間で rspec の実行時間にばら぀きが出ないよう、察象のファむルを最適に振り分けおくれるようなのですが、workflows を利甚するずサポヌトされないようです。 ※参考 https://circleci.com/docs/ja/2.0/configuration-reference/#store_test_results このような圢で Artifacts が保存されおいたす。 たた、artifacts には coverage ず capybara の screenshot などを保存しおいたす - simple_cov if ENV['CI'] SimpleCov.coverage_dir File.join(ENV['CIRCLE_WORKING_DIRECTORY'], 'artifacts', 'coverage') SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[ SimpleCov::Formatter::HTMLFormatter ] SimpleCov.start do add_filter '/vendor/' add_filter '/spec/' add_filter '/config/' add_filter '/db/' end end capybara Capybara.save_and_open_page_path = File.join(ENV['CIRCLE_WORKING_DIRECTORY'], 'artifacts', 'capybara') if ENV['CI'] ※CircleCI2.0 から CI の環境倉数が倉わっおいたす。詳现は以䞋のリンクぞ蚘茉されおいたす。 https://circleci.com/docs/ja/2.0/env-vars/#circleci-environment-variable-descriptions Workflows の蚭定 CircleCI2.0 から Workflows の利甚が可胜になりたした。 https://circleci.com/docs/ja/2.0/workflows/ コンテナ毎に分割しゞョブを実行するこずで曎なる䞊列実行の効率化、及び、ゞョブ間の䟝存関係たで蚭定できるようです。 ゞョブメドレヌではコヌドの静的解析に少し実行時間が掛かっおいるこずから、倚少の改善を図れるず考え 単玔に䜿っおみたかった こちらの機胜を利甚しおみたした。 workflows : version : 2 workflows : jobs : - build - code_analyze : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - rspec : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - deploy_qa : requires : - code_analyze - rspec filters : branches : only : develop - deploy_only : requires : - build filters : branches : only : /^sandbox.*|^master$|^staging$/ build: 各ゞョブで実行前に行っおおく凊理を定矩 code_analyze: rubocop、brakeman、scss-lint などの静的解析凊理を定矩 rspec: アプリケヌションのテストを定矩 deploy: デプロむに関する凊理を定矩 ゞョブメドレヌでは、ブランチ管理に Git-flow を採甚しおいたすが、それずは別に sandbox ずいうテスト環境を甚意し運甚しおいたす。 develop ブランチでコヌド解析やテストをクリアしたコヌドだけ、master ぞ反映し、master ではテストフェヌズなしに deploy する構成を取っおいたす。 極力、CI のリ゜ヌスを節玄するように各ブランチごずで実行する凊理を分けおいたす。 各ブランチの運甚は以䞋の通りです。 feature: コヌド解析、テスト実行 sandbox: デプロむのみ実行(䞀時レビュヌ甚ブランチ) develop: コヌド解析、テスト実行、デプロむ実行 master: デプロむのみ実行 䞊蚘の䟋では、 code_analyze: sandbox、master、staging ブランチ以倖は実行 requires で䟝存関係を指定し、build が正垞に終了しなければ実行されないようになっおいたす。 rspec: sandbox、master、staging ブランチ以倖は実行 requires で䟝存関係を指定し、build が正垞に終了しなければ実行されないようになっおいたす。 deploy_qa: develop ブランチでのみ実行 requires で䟝存関係を指定し、code_analyze、rspec が正垞に終了しなければ実行されないようになっおいたす。 deploy_only: sandbox、master、staging ブランチのみ利甚するゞョブ requires で䟝存関係を指定し、build が正垞に終了しなければ実行されないようになっおいたす。 どのような workflow が出来あがるのか、以䞋に䟋を瀺したす。 feature ブランチの䟋: develop ブランチの䟋: master、sandbox ブランチの䟋: 今回の䟋だずブランチ毎に workflow を倉えおいるため、ignore、only の曞き方で意図せず振り分けされないように考慮は必芁ですが、柔軟に workflow を䜜れるこずがわかるず思いたす。(やり過ぎるず読み解くのが倧倉になりそうですね) Workflows に関しおは こちら に色々なパタヌンの組み方が蚘茉されおいるので、こちらを読むずより理解が深たるず思いたす。 ゞョブ間でのデヌタ共有 ゞョブを分けおビルドする=䜕回もアプリケヌションの初期化が必芁なんじゃないか ず圓然疑問に思う点ではありたすが、それに察する解決策も甚意されおいたす。 build : steps : ===省略=== - persist_to_workspace : root : ~/job-medley paths : - ./* deploy_qa : << : * defaults steps : - attach_workspace : at : ~/job-medley persist_to_workspace: 指定したパスにあるデヌタを䞀時的に保管しおくれたす attach_workspace: 保管枈みのデヌタを展開しおくれたす この機胜により、ビルドプロセスで生成したものを各ゞョブで実行するコンテナぞ枡すこずが出来たす。 ただし、そもそもビルドプロセスでキャッシュを入れおいるこずもあり、これ自䜓の効果は殆どありたせんでした。 コンパむル枈みのデヌタを受け枡す際には効果を発揮しそうですね。( 公匏でも そのような利甚を想定しおいそうです) 改善結果 肝心の速床改善結果です。結果は以䞋の通りになりたした。 改善前: CircleCI1.0 rspec の実行時間: 26:59 以䞋は、CircleCI2.0 ぞ移行しただけの結果です。このケヌスでは workflows を利甚しおいたせん。 改善埌: CircleCI2.0 rspec の実行時間: 19:40 CircleCI1.0 から CircleCI2.0 ぞ移行するこずにより、 箄 12 分皋 テストの実行時間を短瞮するこずが出来たした。 Workflows など特に利甚しおいない、か぀、ビルドフェヌズの実行時間も関係しないため、CircleCI2.0 を利甚するだけで単玔にテスト実行速床の向䞊を芋蟌めるこずがわかるず思いたす。 続いお Workflows を利甚した結果です。 改善埌: CircleCI2.0 with Workflows rspec の実行時間: 21:14 結果は、Workflows を利甚しないケヌスず、利甚したケヌスでは、Workflows を利甚したほうが rspec の実行時間は長くなっおしたいたしたが、build-code-analyze-rspec の実行に掛かったトヌタルの時間に差は芋られたせんでした。 これは、「circleci コマンドによる Rspec の䞊列実行」のセクションぞも蚘茉した通り、store_test_results がサポヌトずされないこずにより、コンテナ間での分散が最適化されおいない為です。 コンテナ間で rspec の実行時間にばら぀きが出ないよう、察象のファむルを最適に振り分けおくれるようなのですが、Workflows を利甚するずサポヌトされないようです。 実行時間にばら぀きが出おしたい、code_analyze のゞョブを分散するこずで芋蟌んでいた改善時間(箄 3 分)ずばら぀きにより発生したテスト実行時間のロス( (20:01 - 14:57) / 2 = 2:32 )が倧䜓同じであるため、トヌタルでの実行時間に差が出ない結果ずなりたした。 ばら぀きを出さない方法や、ゞョブの分け方に぀いおは今埌も工倫しおみたいず思いたす。 たた、フロント゚ンドのテストをもう少し厚くしおいきたいず考えおいるので、フロント゚ンドのテスト、サヌバサむドのテストを Workflows を䞊手く䜿いながら分散しおいければ良いのかなずも思っおいたす。 さいごに 移行に際しお、 CircleCI2.0 の移行ガむド を読みながら進めおいたしたが、基本的な蚘法の倉曎、timezone、environment の定矩方法の倉曎、variable の倉曎などが倚々有り、ドキュメントを結構読み蟌たないずどこに䜕が定矩できるのか把握できたせんでした。 たた、Workflows の組み立おなど 公匏に良いサンプル は沢山あるのですが、䟝存関係の定矩を色々詊すのに苊劎した気がしたす。 ※玠盎に小芏暡なアプリを甚意しお、 ロヌカルで circleci を実行 しおみた方が効率良く進められたかもしれたせん。 ※ただ、 公匏のドキュメント や CommunityForum をしっかり読めば䜙すこずなく情報は合ったので非垞に助かりたした。 CircleCI2.0 でどのような事が出来るのか、それはどのように行えるのか。 この蚘事がその抂芳を぀かむ助けになれば良いなず思っおいたす。 参考リンク CircleCI2.0 ぞ移行するにあたり、以䞋の蚘事を参考にさせおいただきたした。ありがずうございたす。 https://qiita.com/inuscript/items/09d15ee52b1657872f80 https://medium.com/@timakin/circleci2-0%E3%81%AEworkflows%E3%82%92%E8%A9%A6%E3%81%99-1329042122fd お知らせ メドレヌでは、医療介護の求人サむト「 ゞョブメドレヌ 」、医垫たちが぀くるオンラむン医療事兞「 MEDLEY 」、口コミで探せる介護斜蚭の怜玢サむト「 介護のほんね 」、オンラむン蚺療アプリ「 CLINICS 」などのプロダクトを提䟛しおいたす。これらのサヌビスの拡倧を受けお、その成長を支える゚ンゞニア・デザむナヌを募集しおいたす。 https://www.medley.jp/recruit/creative.html メドレヌで䞀緒に医療䜓隓を倉えるプロダクト䜜りに関わりたい方のご連絡お埅ちしおおりたす。
アバタヌ
こんにちは。開発本郚の 皲本 です。医療介護の求人サむト「 ゞョブメドレヌ 」の開発を担圓しおいる゚ンゞニアです。 最近ゞョブメドレヌでは CircleCI2.0 ぞの移行を行いたした。移行の方法はもちろん、その際に調べたこず、CircleCI の新機胜を利甚しおどうだったかなどを曞いおいきたいず思いたす。 課題感 匊瀟では、党プロダクト( CLINICS 、 MEDLEY 、 介護のほんね 、 ゞョブメドレヌ )で CircleCI を利甚しおいたす。 ゞョブメドレヌでは CI によるテスト実行に 37 分前埌掛かっおいたした(コンテナを 2 ぀利甚した実行時間です)。 さらに、開発メンバヌが増えお来たこずもあり、CI のリ゜ヌスが足りなくなり開発効率が萜ちかねない状況でした。 たぁよくある話ですよね。 コンテナを増やすずいうのも解決策の䞀぀ずしおはあるのですが、速床の改善に期埅が出来るず評刀も良かったので CirclecCI2.0 ぞ移行したした。 CircleCI2.0 ぞの移行メリット 基本的には速床の改善に期埅が出来る、ずいうのが倧きなメリットではありたすが、公匏では以䞋のように蚘茉されおいたす。 抜粋ですが倧きな特城ずしおは以䞋の点でしょうか。 First-class Docker Support: Docker のネむティブサポヌトず Docker レむダヌキャッシュの導入 Workflows: ビルド、テスト、デプロむをゞョブずしお柔軟に管理できるようになった Advanced Caching: キャッシュの保存ずリストアをむメヌゞ、゜ヌスコヌド、䟝存関係に察しお行うこずができるようになった。 この蟺りの機胜を掻甚し CI の速床改善ぞ繋げおみたいず思いたす。 ゞョブメドレヌのアプリケヌション構成 移行の前提ずしお、ゞョブメドレヌのアプリケヌション構成に぀いお蚘茉したす。 フロント゚ンドのビルドを yarn+webpack で行い、生成したアセットを public/assets ぞ吐き出し、manifest ファむルのパスを rails の helper 経由で取埗し読み蟌んでいたす。Rails4.2.x このような構成のアプリケヌションを CirlceCI2.0 でビルド、テスト、デプロむ出来るようにしおいきたす。 config.yml の党䜓像 今回、䜜成した config.yml はこのような圢になりたした。 ざっくりは build: bundle install, yarn install code_analyze: rubocop, brakeman, scss-lint rspec deploy: capistrano を行っおおり、ブランチによっおどのゞョブを実行するのかを workflows を利甚しお䜿い分けおいたす。 詳しい解説は以降、蚘茉しおいきたす。 defaults : & defaults working_directory : ~/job-medley docker : - image : circleci/ruby:2.4.2-node-browsers environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : circleci/mysql:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : redis:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo version : 2 jobs : build : << : * defaults steps : - checkout - restore_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} - run : name : bundle install command : bundle install --jobs=4 --path=vendor/bundle - save_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} paths : - vendor/bundle - restore_cache : key : job-medley-yarn-{{ checksum "yarn.lock" }} - run : name : Yarn install command : | echo "Node $(node -v)" echo "Yarn v$(yarn --version)" yarn config set cache-folder ./yarn_cache echo "Yarn v$(yarn cache dir)" yarn install - save_cache : key : job-medley-yarn-{{ checksum "yarn.lock" }} paths : - node_modules - yarn_cache - persist_to_workspace : root : ~/job-medley paths : - ./* code_analyze : << : * defaults steps : - attach_workspace : at : ~/job-medley - run : name : run rubocop command : bundle exec rubocop - run : name : run brakeman command : bundle exec brakeman -qz - run : name : run scss-lint command : bundle exec scss-lint rspec : parallelism : 2 << : * defaults steps : - attach_workspace : at : ~/job-medley - restore_cache : key : job-medley-elasticsearch # rspec で es のコマンドを䞀郚実行しおいるため、primary container 偎ぞ install - run : name : Elasticsearch install command : | wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-x.x.x.tar.gz && \ tar -xvf elasticsearch-x.x.x.tar.gz && \ if [ -z "`elasticsearch-x.x.x/bin/plugin -l | grep analysis-kuromoji`" ]; then \ elasticsearch-x.x.x/bin/plugin -install elasticsearch/elasticsearch-analysis-kuromoji/x.x.x; fi - save_cache : key : job-medley-elasticsearch paths : - ./elasticsearch-x.x.x - run : name : database create command : bundle exec rake db:create environment : RAILS_ENV : test - run : name : run test command : | circleci tests glob 'spec/**/*_spec.*' \ | circleci tests split --split-by=timings --timings-type=filename \ | tee -a /dev/stderr \ | xargs bundle exec rspec \ --profile 100 \ --format RspecJunitFormatter \ --out rspec/rspec.xml \ --format progress environment : RAILS_ENV : test TEST_CLUSTER_COMMAND : elasticsearch-x.x.x/bin/elasticsearch - store_artifacts : path : artifacts/ - store_test_results : path : rspec/ deploy_qa : << : * defaults steps : - attach_workspace : at : ~/job-medley - run : name : run deploy command : | sh scripts/init_deploy.sh BRANCH="${CIRCLE_BRANCH}" bundle exec cap develop deploy deploy:restart deploy_only : << : * defaults steps : - attach_workspace : at : ~/job-medley - run : name : run deploy command : | BRANCH="${CIRCLE_BRANCH}" bundle exec cap production deploy deploy:restart workflows : version : 2 workflows : jobs : - build - code_analyze : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - rspec : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - deploy_qa : requires : - code_analyze - rspec filters : branches : only : develop - deploy_only : requires : - build filters : branches : only : /^sandbox.*|^master$|^staging$/ DockerImage の遞定 元々、Docker を䜿わずに CI を回しおいたしたが、CircleCI2.0 ぞ移行するに蟺り Docker ぞの利甚に切り替えたした。 ※ Specifying Container Images DockerImage は DockerHub ぞ登録されおいる CircleCI 公匏のも の を利甚したした。 アプリケヌションの䞀郚で React を䜿甚しおおり、フロントのビルドは yarn+webpack を利甚しおいたす。その為、以䞋の image を遞択したした。 circleci/ruby:2.4.2-node-browsers node のむンストヌルず、E2E のテストに必芁な゜フトりェアがむンストヌルされおいたす。 ※詳现は こちらの蚘事 を参考にさせおいただきたした。 その他、珟圚利甚しおいる MySQL のバヌゞョン、ElasticCacheRedis のバヌゞョンず合わせた image を遞択したした。 泚意点ずしおは、耇数の DockerImage を利甚する堎合、䞀぀目に指定した image が primary ずしお扱われたす。 以䞋の䟋ですず、Ruby の image を最初に指定し、MySQL、Redis の image を指定しおいたすが、MySQL コマンド自䜓は Ruby の image に含たれおいないため、Ruby コマンドを実行できおも MySQL コマンドを実行するこずは出来たせん。 ※詳现は こちら に蚘茉されおいたす。 docker : - image : circleci/ruby:2.4.2-node-browsers environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : circleci/mysql:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : redis:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo たた、甚意されおいる image をカスタマむズする必芁がある堎合は、Docker でカスタム image を䜜り、public で良ければ Docker Hub ぞ登録、private が良ければ Amazon EC2 Container Registry ぞ登録しおおくこずで呌び出すこずも可胜になっおいたす。 ※Using Custom-Built Docker Images https://circleci.com/docs/ja/2.0/custom-images/ ※Using Private Images https://circleci.com/docs/ja/2.0/private-images/ build の蚭定ず cache CI で実行するアプリケヌションの build に関しおです。 checkout で github からコヌドを checkout し、その埌の定矩でアプリケヌションのむンストヌル、キャッシュ保存、キャッシュの展開を行っおいたす。 steps : - checkout # Rails application setup - restore_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} - run : name : bundle install command : bundle install --jobs=4 --path=vendor/bundle - save_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} paths : - vendor/bundle save_cache: key に Gemfile.lock を指定するこずでキャッシュキヌずしお扱い、paths に蚭定したパスをキャッシュするようにしおいたす。 restore_cache: key ず䞀臎するキャッシュがあれば、save_cache 時に指定したパスを展開し盎しおいたす。 run: こちらは rails のアプリケヌションむンストヌルしおいるだけです。 CircleCI1.0 よりもキャッシュ管理を柔軟に行えるこずがわかりたす。 circleci コマンドによる Rspec の䞊列実行 rspec によるテストの実行に関しおです。 circleci コマンド を利甚するこずでテストの䞊列実行を効率的に行うこずが出来るたす。 今回は --split-by=timings --timings-type=filename のオプションを指定し、ファむル名ベヌスでの分割でテストを実行したす。 - run : name : run test command : | circleci tests glob 'spec/**/*_spec.*' \ | circleci tests split --split-by=timings --timings-type=filename \ | tee -a /dev/stderr \ | xargs bundle exec rspec \ --profile 100 \ --format RspecJunitFormatter \ --out rspec/rspec.xml \ --format progress environment : RAILS_ENV : test TEST_CLUSTER_COMMAND : elasticsearch-x.x.x/bin/elasticsearch - store_artifacts : path : artifacts/ - store_test_results : path : rspec/ store_artifacts: 以前からもある機胜ですが、テスト結果の成果物を保存するパスになりたす。 store_test_results: こちらはテストの実行結果を保存しおおくこずで、コンテナ間で rspec の実行時間にばら぀きが出ないよう、察象のファむルを最適に振り分けおくれるようなのですが、workflows を利甚するずサポヌトされないようです。 ※参考 https://circleci.com/docs/ja/2.0/configuration-reference/#store_test_results このような圢で Artifacts が保存されおいたす。 たた、artifacts には coverage ず capybara の screenshot などを保存しおいたす - simple_cov if ENV['CI'] SimpleCov.coverage_dir File.join(ENV['CIRCLE_WORKING_DIRECTORY'], 'artifacts', 'coverage') SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[ SimpleCov::Formatter::HTMLFormatter ] SimpleCov.start do add_filter '/vendor/' add_filter '/spec/' add_filter '/config/' add_filter '/db/' end end capybara Capybara.save_and_open_page_path = File.join(ENV['CIRCLE_WORKING_DIRECTORY'], 'artifacts', 'capybara') if ENV['CI'] ※CircleCI2.0 から CI の環境倉数が倉わっおいたす。詳现は以䞋のリンクぞ蚘茉されおいたす。 Introduction to environment variables - CircleCI Introduction to environment variables in CircleCI circleci.com Workflows の蚭定 CircleCI2.0 から Workflows の利甚が可胜になりたした。 Workflow orchestration - CircleCI Learn about using CircleCI workflows to orchestrate jobs circleci.com コンテナ毎に分割しゞョブを実行するこずで曎なる䞊列実行の効率化、及び、ゞョブ間の䟝存関係たで蚭定できるようです。 ゞョブメドレヌではコヌドの静的解析に少し実行時間が掛かっおいるこずから、倚少の改善を図れるず考え 単玔に䜿っおみたかった こちらの機胜を利甚しおみたした。 workflows : version : 2 workflows : jobs : - build - code_analyze : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - rspec : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - deploy_qa : requires : - code_analyze - rspec filters : branches : only : develop - deploy_only : requires : - build filters : branches : only : /^sandbox.*|^master$|^staging$/ build: 各ゞョブで実行前に行っおおく凊理を定矩 code_analyze: rubocop、brakeman、scss-lint などの静的解析凊理を定矩 rspec: アプリケヌションのテストを定矩 deploy: デプロむに関する凊理を定矩 ゞョブメドレヌでは、ブランチ管理に Git-flow を採甚しおいたすが、それずは別に sandbox ずいうテスト環境を甚意し運甚しおいたす。 develop ブランチでコヌド解析やテストをクリアしたコヌドだけ、master ぞ反映し、master ではテストフェヌズなしに deploy する構成を取っおいたす。 極力、CI のリ゜ヌスを節玄するように各ブランチごずで実行する凊理を分けおいたす。 各ブランチの運甚は以䞋の通りです。 feature: コヌド解析、テスト実行 sandbox: デプロむのみ実行(䞀時レビュヌ甚ブランチ) develop: コヌド解析、テスト実行、デプロむ実行 master: デプロむのみ実行 䞊蚘の䟋では、 code_analyze: sandbox、master、staging ブランチ以倖は実行 requires で䟝存関係を指定し、build が正垞に終了しなければ実行されないようになっおいたす。 rspec: sandbox、master、staging ブランチ以倖は実行 requires で䟝存関係を指定し、build が正垞に終了しなければ実行されないようになっおいたす。 deploy_qa: develop ブランチでのみ実行 requires で䟝存関係を指定し、code_analyze、rspec が正垞に終了しなければ実行されないようになっおいたす。 deploy_only: sandbox、master、staging ブランチのみ利甚するゞョブ requires で䟝存関係を指定し、build が正垞に終了しなければ実行されないようになっおいたす。 どのような workflow が出来あがるのか、以䞋に䟋を瀺したす。 feature ブランチの䟋: develop ブランチの䟋: master、sandbox ブランチの䟋: 今回の䟋だずブランチ毎に workflow を倉えおいるため、ignore、only の曞き方で意図せず振り分けされないように考慮は必芁ですが、柔軟に workflow を䜜れるこずがわかるず思いたす。(やり過ぎるず読み解くのが倧倉になりそうですね) Workflows に関しおは こちら に色々なパタヌンの組み方が蚘茉されおいるので、こちらを読むずより理解が深たるず思いたす。 ゞョブ間でのデヌタ共有 ゞョブを分けおビルドする=䜕回もアプリケヌションの初期化が必芁なんじゃないか ず圓然疑問に思う点ではありたすが、それに察する解決策も甚意されおいたす。 build : steps : ===省略=== - persist_to_workspace : root : ~/job-medley paths : - ./* deploy_qa : << : * defaults steps : - attach_workspace : at : ~/job-medley persist_to_workspace: 指定したパスにあるデヌタを䞀時的に保管しおくれたす attach_workspace: 保管枈みのデヌタを展開しおくれたす この機胜により、ビルドプロセスで生成したものを各ゞョブで実行するコンテナぞ枡すこずが出来たす。 ただし、そもそもビルドプロセスでキャッシュを入れおいるこずもあり、これ自䜓の効果は殆どありたせんでした。 コンパむル枈みのデヌタを受け枡す際には効果を発揮しそうですね。( 公匏でも そのような利甚を想定しおいそうです) 改善結果 肝心の速床改善結果です。結果は以䞋の通りになりたした。 改善前: CircleCI1.0 rspec の実行時間: 26:59 以䞋は、CircleCI2.0 ぞ移行しただけの結果です。このケヌスでは workflows を利甚しおいたせん。 改善埌: CircleCI2.0 rspec の実行時間: 19:40 CircleCI1.0 から CircleCI2.0 ぞ移行するこずにより、 箄 12 分皋 テストの実行時間を短瞮するこずが出来たした。 Workflows など特に利甚しおいない、か぀、ビルドフェヌズの実行時間も関係しないため、CircleCI2.0 を利甚するだけで単玔にテスト実行速床の向䞊を芋蟌めるこずがわかるず思いたす。 続いお Workflows を利甚した結果です。 改善埌: CircleCI2.0 with Workflows rspec の実行時間: 21:14 結果は、Workflows を利甚しないケヌスず、利甚したケヌスでは、Workflows を利甚したほうが rspec の実行時間は長くなっおしたいたしたが、build-code-analyze-rspec の実行に掛かったトヌタルの時間に差は芋られたせんでした。 これは、「circleci コマンドによる Rspec の䞊列実行」のセクションぞも蚘茉した通り、store_test_results がサポヌトずされないこずにより、コンテナ間での分散が最適化されおいない為です。 コンテナ間で rspec の実行時間にばら぀きが出ないよう、察象のファむルを最適に振り分けおくれるようなのですが、Workflows を利甚するずサポヌトされないようです。 実行時間にばら぀きが出おしたい、code_analyze のゞョブを分散するこずで芋蟌んでいた改善時間(箄 3 分)ずばら぀きにより発生したテスト実行時間のロス( (20:01 - 14:57) / 2 = 2:32 )が倧䜓同じであるため、トヌタルでの実行時間に差が出ない結果ずなりたした。 ばら぀きを出さない方法や、ゞョブの分け方に぀いおは今埌も工倫しおみたいず思いたす。 たた、フロント゚ンドのテストをもう少し厚くしおいきたいず考えおいるので、フロント゚ンドのテスト、サヌバサむドのテストを Workflows を䞊手く䜿いながら分散しおいければ良いのかなずも思っおいたす。 さいごに 移行に際しお、 CircleCI2.0 の移行ガむド を読みながら進めおいたしたが、基本的な蚘法の倉曎、timezone、environment の定矩方法の倉曎、variable の倉曎などが倚々有り、ドキュメントを結構読み蟌たないずどこに䜕が定矩できるのか把握できたせんでした。 たた、Workflows の組み立おなど 公匏に良いサンプル は沢山あるのですが、䟝存関係の定矩を色々詊すのに苊劎した気がしたす。 ※玠盎に小芏暡なアプリを甚意しお、 ロヌカルで circleci を実行 しおみた方が効率良く進められたかもしれたせん。 ※ただ、 公匏のドキュメント や CommunityForum をしっかり読めば䜙すこずなく情報は合ったので非垞に助かりたした。 CircleCI2.0 でどのような事が出来るのか、それはどのように行えるのか。 この蚘事がその抂芳を぀かむ助けになれば良いなず思っおいたす。 参考リンク CircleCI2.0 ぞ移行するにあたり、以䞋の蚘事を参考にさせおいただきたした。ありがずうございたす。 circleci/ruby:2.4.1-node-browsersっお䜕入っおるのか知りたかった - Qiita 2018-11-19远蚘https://github.com/CircleCI-Public/circleci-dockerfiles/blob/master/ruby/images/い぀の間に  qiita.com CircleCI2.0のWorkflowsを詊す “CircleCI2.0のWorkflowsを詊す” is published by timakin. medium.com お知らせ メドレヌでは、医療介護の求人サむト「 ゞョブメドレヌ 」、医垫たちが぀くるオンラむン医療事兞「 MEDLEY 」、口コミで探せる介護斜蚭の怜玢サむト「 介護のほんね 」、オンラむン蚺療アプリ「 CLINICS 」などのプロダクトを提䟛しおいたす。これらのサヌビスの拡倧を受けお、その成長を支える゚ンゞニア・デザむナヌを募集しおいたす。 メンバヌのストヌリヌ | 株匏䌚瀟メドレヌ メンバヌのストヌリヌ 家族や友人が病気になった時に救いの手を差しのべる医療の力。... www.medley.jp メドレヌで䞀緒に医療䜓隓を倉えるプロダクト䜜りに関わりたい方のご連絡お埅ちしおおりたす。
アバタヌ
こんにちは。開発本郚の 皲本 です。医療介護の求人サむト「 ゞョブメドレヌ 」の開発を担圓しおいる゚ンゞニアです。 最近ゞョブメドレヌでは CircleCI2.0 ぞの移行を行いたした。移行の方法はもちろん、その際に調べたこず、CircleCI の新機胜を利甚しおどうだったかなどを曞いおいきたいず思いたす。 課題感 匊瀟では、党プロダクト( CLINICS 、 MEDLEY 、 介護のほんね 、 ゞョブメドレヌ )で CircleCI を利甚しおいたす。 ゞョブメドレヌでは CI によるテスト実行に 37 分前埌掛かっおいたした(コンテナを 2 ぀利甚した実行時間です)。 さらに、開発メンバヌが増えお来たこずもあり、CI のリ゜ヌスが足りなくなり開発効率が萜ちかねない状況でした。 たぁよくある話ですよね。 コンテナを増やすずいうのも解決策の䞀぀ずしおはあるのですが、速床の改善に期埅が出来るず評刀も良かったので CirclecCI2.0 ぞ移行したした。 CircleCI2.0 ぞの移行メリット 基本的には速床の改善に期埅が出来る、ずいうのが倧きなメリットではありたすが、公匏では以䞋のように蚘茉されおいたす。 抜粋ですが倧きな特城ずしおは以䞋の点でしょうか。 First-class Docker Support: Docker のネむティブサポヌトず Docker レむダヌキャッシュの導入 Workflows: ビルド、テスト、デプロむをゞョブずしお柔軟に管理できるようになった Advanced Caching: キャッシュの保存ずリストアをむメヌゞ、゜ヌスコヌド、䟝存関係に察しお行うこずができるようになった。 この蟺りの機胜を掻甚し CI の速床改善ぞ繋げおみたいず思いたす。 ゞョブメドレヌのアプリケヌション構成 移行の前提ずしお、ゞョブメドレヌのアプリケヌション構成に぀いお蚘茉したす。 フロント゚ンドのビルドを yarn+webpack で行い、生成したアセットを public/assets ぞ吐き出し、manifest ファむルのパスを rails の helper 経由で取埗し読み蟌んでいたす。Rails4.2.x このような構成のアプリケヌションを CirlceCI2.0 でビルド、テスト、デプロむ出来るようにしおいきたす。 config.yml の党䜓像 今回、䜜成した config.yml はこのような圢になりたした。 ざっくりは build: bundle install, yarn install code_analyze: rubocop, brakeman, scss-lint rspec deploy: capistrano を行っおおり、ブランチによっおどのゞョブを実行するのかを workflows を利甚しお䜿い分けおいたす。 詳しい解説は以降、蚘茉しおいきたす。 defaults : & defaults working_directory : ~/job-medley docker : - image : circleci/ruby:2.4.2-node-browsers environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : circleci/mysql:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : redis:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo version : 2 jobs : build : << : * defaults steps : - checkout - restore_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} - run : name : bundle install command : bundle install --jobs=4 --path=vendor/bundle - save_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} paths : - vendor/bundle - restore_cache : key : job-medley-yarn-{{ checksum "yarn.lock" }} - run : name : Yarn install command : | echo "Node $(node -v)" echo "Yarn v$(yarn --version)" yarn config set cache-folder ./yarn_cache echo "Yarn v$(yarn cache dir)" yarn install - save_cache : key : job-medley-yarn-{{ checksum "yarn.lock" }} paths : - node_modules - yarn_cache - persist_to_workspace : root : ~/job-medley paths : - ./* code_analyze : << : * defaults steps : - attach_workspace : at : ~/job-medley - run : name : run rubocop command : bundle exec rubocop - run : name : run brakeman command : bundle exec brakeman -qz - run : name : run scss-lint command : bundle exec scss-lint rspec : parallelism : 2 << : * defaults steps : - attach_workspace : at : ~/job-medley - restore_cache : key : job-medley-elasticsearch # rspec で es のコマンドを䞀郚実行しおいるため、primary container 偎ぞ install - run : name : Elasticsearch install command : | wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-x.x.x.tar.gz && \ tar -xvf elasticsearch-x.x.x.tar.gz && \ if [ -z "`elasticsearch-x.x.x/bin/plugin -l | grep analysis-kuromoji`" ]; then \ elasticsearch-x.x.x/bin/plugin -install elasticsearch/elasticsearch-analysis-kuromoji/x.x.x; fi - save_cache : key : job-medley-elasticsearch paths : - ./elasticsearch-x.x.x - run : name : database create command : bundle exec rake db:create environment : RAILS_ENV : test - run : name : run test command : | circleci tests glob 'spec/**/*_spec.*' \ | circleci tests split --split-by=timings --timings-type=filename \ | tee -a /dev/stderr \ | xargs bundle exec rspec \ --profile 100 \ --format RspecJunitFormatter \ --out rspec/rspec.xml \ --format progress environment : RAILS_ENV : test TEST_CLUSTER_COMMAND : elasticsearch-x.x.x/bin/elasticsearch - store_artifacts : path : artifacts/ - store_test_results : path : rspec/ deploy_qa : << : * defaults steps : - attach_workspace : at : ~/job-medley - run : name : run deploy command : | sh scripts/init_deploy.sh BRANCH="${CIRCLE_BRANCH}" bundle exec cap develop deploy deploy:restart deploy_only : << : * defaults steps : - attach_workspace : at : ~/job-medley - run : name : run deploy command : | BRANCH="${CIRCLE_BRANCH}" bundle exec cap production deploy deploy:restart workflows : version : 2 workflows : jobs : - build - code_analyze : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - rspec : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - deploy_qa : requires : - code_analyze - rspec filters : branches : only : develop - deploy_only : requires : - build filters : branches : only : /^sandbox.*|^master$|^staging$/ DockerImage の遞定 元々、Docker を䜿わずに CI を回しおいたしたが、CircleCI2.0 ぞ移行するに蟺り Docker ぞの利甚に切り替えたした。 ※ Specifying Container Images DockerImage は DockerHub ぞ登録されおいる CircleCI 公匏のも の を利甚したした。 アプリケヌションの䞀郚で React を䜿甚しおおり、フロントのビルドは yarn+webpack を利甚しおいたす。その為、以䞋の image を遞択したした。 circleci/ruby:2.4.2-node-browsers node のむンストヌルず、E2E のテストに必芁な゜フトりェアがむンストヌルされおいたす。 ※詳现は こちらの蚘事 を参考にさせおいただきたした。 その他、珟圚利甚しおいる MySQL のバヌゞョン、ElasticCacheRedis のバヌゞョンず合わせた image を遞択したした。 泚意点ずしおは、耇数の DockerImage を利甚する堎合、䞀぀目に指定した image が primary ずしお扱われたす。 以䞋の䟋ですず、Ruby の image を最初に指定し、MySQL、Redis の image を指定しおいたすが、MySQL コマンド自䜓は Ruby の image に含たれおいないため、Ruby コマンドを実行できおも MySQL コマンドを実行するこずは出来たせん。 ※詳现は こちら に蚘茉されおいたす。 docker : - image : circleci/ruby:2.4.2-node-browsers environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : circleci/mysql:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : redis:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo たた、甚意されおいる image をカスタマむズする必芁がある堎合は、Docker でカスタム image を䜜り、public で良ければ Docker Hub ぞ登録、private が良ければ Amazon EC2 Container Registry ぞ登録しおおくこずで呌び出すこずも可胜になっおいたす。 ※Using Custom-Built Docker Images https://circleci.com/docs/ja/2.0/custom-images/ ※Using Private Images https://circleci.com/docs/ja/2.0/private-images/ build の蚭定ず cache CI で実行するアプリケヌションの build に関しおです。 checkout で github からコヌドを checkout し、その埌の定矩でアプリケヌションのむンストヌル、キャッシュ保存、キャッシュの展開を行っおいたす。 steps : - checkout # Rails application setup - restore_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} - run : name : bundle install command : bundle install --jobs=4 --path=vendor/bundle - save_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} paths : - vendor/bundle save_cache: key に Gemfile.lock を指定するこずでキャッシュキヌずしお扱い、paths に蚭定したパスをキャッシュするようにしおいたす。 restore_cache: key ず䞀臎するキャッシュがあれば、save_cache 時に指定したパスを展開し盎しおいたす。 run: こちらは rails のアプリケヌションむンストヌルしおいるだけです。 CircleCI1.0 よりもキャッシュ管理を柔軟に行えるこずがわかりたす。 circleci コマンドによる Rspec の䞊列実行 rspec によるテストの実行に関しおです。 circleci コマンド を利甚するこずでテストの䞊列実行を効率的に行うこずが出来るたす。 今回は --split-by=timings --timings-type=filename のオプションを指定し、ファむル名ベヌスでの分割でテストを実行したす。 - run : name : run test command : | circleci tests glob 'spec/**/*_spec.*' \ | circleci tests split --split-by=timings --timings-type=filename \ | tee -a /dev/stderr \ | xargs bundle exec rspec \ --profile 100 \ --format RspecJunitFormatter \ --out rspec/rspec.xml \ --format progress environment : RAILS_ENV : test TEST_CLUSTER_COMMAND : elasticsearch-x.x.x/bin/elasticsearch - store_artifacts : path : artifacts/ - store_test_results : path : rspec/ store_artifacts: 以前からもある機胜ですが、テスト結果の成果物を保存するパスになりたす。 store_test_results: こちらはテストの実行結果を保存しおおくこずで、コンテナ間で rspec の実行時間にばら぀きが出ないよう、察象のファむルを最適に振り分けおくれるようなのですが、workflows を利甚するずサポヌトされないようです。 ※参考 https://circleci.com/docs/ja/2.0/configuration-reference/#store_test_results このような圢で Artifacts が保存されおいたす。 たた、artifacts には coverage ず capybara の screenshot などを保存しおいたす - simple_cov if ENV['CI'] SimpleCov.coverage_dir File.join(ENV['CIRCLE_WORKING_DIRECTORY'], 'artifacts', 'coverage') SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[ SimpleCov::Formatter::HTMLFormatter ] SimpleCov.start do add_filter '/vendor/' add_filter '/spec/' add_filter '/config/' add_filter '/db/' end end capybara Capybara.save_and_open_page_path = File.join(ENV['CIRCLE_WORKING_DIRECTORY'], 'artifacts', 'capybara') if ENV['CI'] ※CircleCI2.0 から CI の環境倉数が倉わっおいたす。詳现は以䞋のリンクぞ蚘茉されおいたす。 Introduction to environment variables - CircleCI Introduction to environment variables in CircleCI circleci.com Workflows の蚭定 CircleCI2.0 から Workflows の利甚が可胜になりたした。 Workflow orchestration - CircleCI Learn about using CircleCI workflows to orchestrate jobs circleci.com コンテナ毎に分割しゞョブを実行するこずで曎なる䞊列実行の効率化、及び、ゞョブ間の䟝存関係たで蚭定できるようです。 ゞョブメドレヌではコヌドの静的解析に少し実行時間が掛かっおいるこずから、倚少の改善を図れるず考え 単玔に䜿っおみたかった こちらの機胜を利甚しおみたした。 workflows : version : 2 workflows : jobs : - build - code_analyze : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - rspec : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - deploy_qa : requires : - code_analyze - rspec filters : branches : only : develop - deploy_only : requires : - build filters : branches : only : /^sandbox.*|^master$|^staging$/ build: 各ゞョブで実行前に行っおおく凊理を定矩 code_analyze: rubocop、brakeman、scss-lint などの静的解析凊理を定矩 rspec: アプリケヌションのテストを定矩 deploy: デプロむに関する凊理を定矩 ゞョブメドレヌでは、ブランチ管理に Git-flow を採甚しおいたすが、それずは別に sandbox ずいうテスト環境を甚意し運甚しおいたす。 develop ブランチでコヌド解析やテストをクリアしたコヌドだけ、master ぞ反映し、master ではテストフェヌズなしに deploy する構成を取っおいたす。 極力、CI のリ゜ヌスを節玄するように各ブランチごずで実行する凊理を分けおいたす。 各ブランチの運甚は以䞋の通りです。 feature: コヌド解析、テスト実行 sandbox: デプロむのみ実行(䞀時レビュヌ甚ブランチ) develop: コヌド解析、テスト実行、デプロむ実行 master: デプロむのみ実行 䞊蚘の䟋では、 code_analyze: sandbox、master、staging ブランチ以倖は実行 requires で䟝存関係を指定し、build が正垞に終了しなければ実行されないようになっおいたす。 rspec: sandbox、master、staging ブランチ以倖は実行 requires で䟝存関係を指定し、build が正垞に終了しなければ実行されないようになっおいたす。 deploy_qa: develop ブランチでのみ実行 requires で䟝存関係を指定し、code_analyze、rspec が正垞に終了しなければ実行されないようになっおいたす。 deploy_only: sandbox、master、staging ブランチのみ利甚するゞョブ requires で䟝存関係を指定し、build が正垞に終了しなければ実行されないようになっおいたす。 どのような workflow が出来あがるのか、以䞋に䟋を瀺したす。 feature ブランチの䟋: develop ブランチの䟋: master、sandbox ブランチの䟋: 今回の䟋だずブランチ毎に workflow を倉えおいるため、ignore、only の曞き方で意図せず振り分けされないように考慮は必芁ですが、柔軟に workflow を䜜れるこずがわかるず思いたす。(やり過ぎるず読み解くのが倧倉になりそうですね) Workflows に関しおは こちら に色々なパタヌンの組み方が蚘茉されおいるので、こちらを読むずより理解が深たるず思いたす。 ゞョブ間でのデヌタ共有 ゞョブを分けおビルドする=䜕回もアプリケヌションの初期化が必芁なんじゃないか ず圓然疑問に思う点ではありたすが、それに察する解決策も甚意されおいたす。 build : steps : ===省略=== - persist_to_workspace : root : ~/job-medley paths : - ./* deploy_qa : << : * defaults steps : - attach_workspace : at : ~/job-medley persist_to_workspace: 指定したパスにあるデヌタを䞀時的に保管しおくれたす attach_workspace: 保管枈みのデヌタを展開しおくれたす この機胜により、ビルドプロセスで生成したものを各ゞョブで実行するコンテナぞ枡すこずが出来たす。 ただし、そもそもビルドプロセスでキャッシュを入れおいるこずもあり、これ自䜓の効果は殆どありたせんでした。 コンパむル枈みのデヌタを受け枡す際には効果を発揮しそうですね。( 公匏でも そのような利甚を想定しおいそうです) 改善結果 肝心の速床改善結果です。結果は以䞋の通りになりたした。 改善前: CircleCI1.0 rspec の実行時間: 26:59 以䞋は、CircleCI2.0 ぞ移行しただけの結果です。このケヌスでは workflows を利甚しおいたせん。 改善埌: CircleCI2.0 rspec の実行時間: 19:40 CircleCI1.0 から CircleCI2.0 ぞ移行するこずにより、 箄 12 分皋 テストの実行時間を短瞮するこずが出来たした。 Workflows など特に利甚しおいない、か぀、ビルドフェヌズの実行時間も関係しないため、CircleCI2.0 を利甚するだけで単玔にテスト実行速床の向䞊を芋蟌めるこずがわかるず思いたす。 続いお Workflows を利甚した結果です。 改善埌: CircleCI2.0 with Workflows rspec の実行時間: 21:14 結果は、Workflows を利甚しないケヌスず、利甚したケヌスでは、Workflows を利甚したほうが rspec の実行時間は長くなっおしたいたしたが、build-code-analyze-rspec の実行に掛かったトヌタルの時間に差は芋られたせんでした。 これは、「circleci コマンドによる Rspec の䞊列実行」のセクションぞも蚘茉した通り、store_test_results がサポヌトずされないこずにより、コンテナ間での分散が最適化されおいない為です。 コンテナ間で rspec の実行時間にばら぀きが出ないよう、察象のファむルを最適に振り分けおくれるようなのですが、Workflows を利甚するずサポヌトされないようです。 実行時間にばら぀きが出おしたい、code_analyze のゞョブを分散するこずで芋蟌んでいた改善時間(箄 3 分)ずばら぀きにより発生したテスト実行時間のロス( (20:01 - 14:57) / 2 = 2:32 )が倧䜓同じであるため、トヌタルでの実行時間に差が出ない結果ずなりたした。 ばら぀きを出さない方法や、ゞョブの分け方に぀いおは今埌も工倫しおみたいず思いたす。 たた、フロント゚ンドのテストをもう少し厚くしおいきたいず考えおいるので、フロント゚ンドのテスト、サヌバサむドのテストを Workflows を䞊手く䜿いながら分散しおいければ良いのかなずも思っおいたす。 さいごに 移行に際しお、 CircleCI2.0 の移行ガむド を読みながら進めおいたしたが、基本的な蚘法の倉曎、timezone、environment の定矩方法の倉曎、variable の倉曎などが倚々有り、ドキュメントを結構読み蟌たないずどこに䜕が定矩できるのか把握できたせんでした。 たた、Workflows の組み立おなど 公匏に良いサンプル は沢山あるのですが、䟝存関係の定矩を色々詊すのに苊劎した気がしたす。 ※玠盎に小芏暡なアプリを甚意しお、 ロヌカルで circleci を実行 しおみた方が効率良く進められたかもしれたせん。 ※ただ、 公匏のドキュメント や CommunityForum をしっかり読めば䜙すこずなく情報は合ったので非垞に助かりたした。 CircleCI2.0 でどのような事が出来るのか、それはどのように行えるのか。 この蚘事がその抂芳を぀かむ助けになれば良いなず思っおいたす。 参考リンク CircleCI2.0 ぞ移行するにあたり、以䞋の蚘事を参考にさせおいただきたした。ありがずうございたす。 circleci/ruby:2.4.1-node-browsersっお䜕入っおるのか知りたかった - Qiita 2018-11-19远蚘https://github.com/CircleCI-Public/circleci-dockerfiles/blob/master/ruby/images/い぀の間に  qiita.com CircleCI2.0のWorkflowsを詊す “CircleCI2.0のWorkflowsを詊す” is published by timakin. medium.com お知らせ メドレヌでは、医療介護の求人サむト「 ゞョブメドレヌ 」、医垫たちが぀くるオンラむン医療事兞「 MEDLEY 」、口コミで探せる介護斜蚭の怜玢サむト「 介護のほんね 」、オンラむン蚺療アプリ「 CLINICS 」などのプロダクトを提䟛しおいたす。これらのサヌビスの拡倧を受けお、その成長を支える゚ンゞニア・デザむナヌを募集しおいたす。 メンバヌのストヌリヌ | 株匏䌚瀟メドレヌ メンバヌのストヌリヌ 家族や友人が病気になった時に救いの手を差しのべる医療の力。... www.medley.jp メドレヌで䞀緒に医療䜓隓を倉えるプロダクト䜜りに関わりたい方のご連絡お埅ちしおおりたす。
アバタヌ
こんにちは。開発本郚の 皲本 です。医療介護の求人サむト「 ゞョブメドレヌ 」の開発を担圓しおいる゚ンゞニアです。 最近ゞョブメドレヌでは CircleCI2.0 ぞの移行を行いたした。移行の方法はもちろん、その際に調べたこず、CircleCI の新機胜を利甚しおどうだったかなどを曞いおいきたいず思いたす。 課題感 匊瀟では、党プロダクト( CLINICS 、 MEDLEY 、 介護のほんね 、 ゞョブメドレヌ )で CircleCI を利甚しおいたす。 ゞョブメドレヌでは CI によるテスト実行に 37 分前埌掛かっおいたした(コンテナを 2 ぀利甚した実行時間です)。 さらに、開発メンバヌが増えお来たこずもあり、CI のリ゜ヌスが足りなくなり開発効率が萜ちかねない状況でした。 たぁよくある話ですよね。 コンテナを増やすずいうのも解決策の䞀぀ずしおはあるのですが、速床の改善に期埅が出来るず評刀も良かったので CirclecCI2.0 ぞ移行したした。 CircleCI2.0 ぞの移行メリット 基本的には速床の改善に期埅が出来る、ずいうのが倧きなメリットではありたすが、公匏では以䞋のように蚘茉されおいたす。 抜粋ですが倧きな特城ずしおは以䞋の点でしょうか。 First-class Docker Support: Docker のネむティブサポヌトず Docker レむダヌキャッシュの導入 Workflows: ビルド、テスト、デプロむをゞョブずしお柔軟に管理できるようになった Advanced Caching: キャッシュの保存ずリストアをむメヌゞ、゜ヌスコヌド、䟝存関係に察しお行うこずができるようになった。 この蟺りの機胜を掻甚し CI の速床改善ぞ繋げおみたいず思いたす。 ゞョブメドレヌのアプリケヌション構成 移行の前提ずしお、ゞョブメドレヌのアプリケヌション構成に぀いお蚘茉したす。 フロント゚ンドのビルドを yarn+webpack で行い、生成したアセットを public/assets ぞ吐き出し、manifest ファむルのパスを rails の helper 経由で取埗し読み蟌んでいたす。Rails4.2.x このような構成のアプリケヌションを CirlceCI2.0 でビルド、テスト、デプロむ出来るようにしおいきたす。 config.yml の党䜓像 今回、䜜成した config.yml はこのような圢になりたした。 ざっくりは build: bundle install, yarn install code_analyze: rubocop, brakeman, scss-lint rspec deploy: capistrano を行っおおり、ブランチによっおどのゞョブを実行するのかを workflows を利甚しお䜿い分けおいたす。 詳しい解説は以降、蚘茉しおいきたす。 defaults : & defaults working_directory : ~/job-medley docker : - image : circleci/ruby:2.4.2-node-browsers environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : circleci/mysql:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : redis:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo version : 2 jobs : build : << : * defaults steps : - checkout - restore_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} - run : name : bundle install command : bundle install --jobs=4 --path=vendor/bundle - save_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} paths : - vendor/bundle - restore_cache : key : job-medley-yarn-{{ checksum "yarn.lock" }} - run : name : Yarn install command : | echo "Node $(node -v)" echo "Yarn v$(yarn --version)" yarn config set cache-folder ./yarn_cache echo "Yarn v$(yarn cache dir)" yarn install - save_cache : key : job-medley-yarn-{{ checksum "yarn.lock" }} paths : - node_modules - yarn_cache - persist_to_workspace : root : ~/job-medley paths : - ./* code_analyze : << : * defaults steps : - attach_workspace : at : ~/job-medley - run : name : run rubocop command : bundle exec rubocop - run : name : run brakeman command : bundle exec brakeman -qz - run : name : run scss-lint command : bundle exec scss-lint rspec : parallelism : 2 << : * defaults steps : - attach_workspace : at : ~/job-medley - restore_cache : key : job-medley-elasticsearch # rspec で es のコマンドを䞀郚実行しおいるため、primary container 偎ぞ install - run : name : Elasticsearch install command : | wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-x.x.x.tar.gz && \ tar -xvf elasticsearch-x.x.x.tar.gz && \ if [ -z "`elasticsearch-x.x.x/bin/plugin -l | grep analysis-kuromoji`" ]; then \ elasticsearch-x.x.x/bin/plugin -install elasticsearch/elasticsearch-analysis-kuromoji/x.x.x; fi - save_cache : key : job-medley-elasticsearch paths : - ./elasticsearch-x.x.x - run : name : database create command : bundle exec rake db:create environment : RAILS_ENV : test - run : name : run test command : | circleci tests glob 'spec/**/*_spec.*' \ | circleci tests split --split-by=timings --timings-type=filename \ | tee -a /dev/stderr \ | xargs bundle exec rspec \ --profile 100 \ --format RspecJunitFormatter \ --out rspec/rspec.xml \ --format progress environment : RAILS_ENV : test TEST_CLUSTER_COMMAND : elasticsearch-x.x.x/bin/elasticsearch - store_artifacts : path : artifacts/ - store_test_results : path : rspec/ deploy_qa : << : * defaults steps : - attach_workspace : at : ~/job-medley - run : name : run deploy command : | sh scripts/init_deploy.sh BRANCH="${CIRCLE_BRANCH}" bundle exec cap develop deploy deploy:restart deploy_only : << : * defaults steps : - attach_workspace : at : ~/job-medley - run : name : run deploy command : | BRANCH="${CIRCLE_BRANCH}" bundle exec cap production deploy deploy:restart workflows : version : 2 workflows : jobs : - build - code_analyze : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - rspec : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - deploy_qa : requires : - code_analyze - rspec filters : branches : only : develop - deploy_only : requires : - build filters : branches : only : /^sandbox.*|^master$|^staging$/ DockerImage の遞定 元々、Docker を䜿わずに CI を回しおいたしたが、CircleCI2.0 ぞ移行するに蟺り Docker ぞの利甚に切り替えたした。 ※ Specifying Container Images DockerImage は DockerHub ぞ登録されおいる CircleCI 公匏のも の を利甚したした。 アプリケヌションの䞀郚で React を䜿甚しおおり、フロントのビルドは yarn+webpack を利甚しおいたす。その為、以䞋の image を遞択したした。 circleci/ruby:2.4.2-node-browsers node のむンストヌルず、E2E のテストに必芁な゜フトりェアがむンストヌルされおいたす。 ※詳现は こちらの蚘事 を参考にさせおいただきたした。 その他、珟圚利甚しおいる MySQL のバヌゞョン、ElasticCacheRedis のバヌゞョンず合わせた image を遞択したした。 泚意点ずしおは、耇数の DockerImage を利甚する堎合、䞀぀目に指定した image が primary ずしお扱われたす。 以䞋の䟋ですず、Ruby の image を最初に指定し、MySQL、Redis の image を指定しおいたすが、MySQL コマンド自䜓は Ruby の image に含たれおいないため、Ruby コマンドを実行できおも MySQL コマンドを実行するこずは出来たせん。 ※詳现は こちら に蚘茉されおいたす。 docker : - image : circleci/ruby:2.4.2-node-browsers environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : circleci/mysql:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo - image : redis:x.x.x environment : TZ : /usr/share/zoneinfo/Asia/Tokyo たた、甚意されおいる image をカスタマむズする必芁がある堎合は、Docker でカスタム image を䜜り、public で良ければ Docker Hub ぞ登録、private が良ければ Amazon EC2 Container Registry ぞ登録しおおくこずで呌び出すこずも可胜になっおいたす。 ※Using Custom-Built Docker Images https://circleci.com/docs/ja/2.0/custom-images/ ※Using Private Images https://circleci.com/docs/ja/2.0/private-images/ build の蚭定ず cache CI で実行するアプリケヌションの build に関しおです。 checkout で github からコヌドを checkout し、その埌の定矩でアプリケヌションのむンストヌル、キャッシュ保存、キャッシュの展開を行っおいたす。 steps : - checkout # Rails application setup - restore_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} - run : name : bundle install command : bundle install --jobs=4 --path=vendor/bundle - save_cache : key : job-medley-app-{{ checksum "Gemfile.lock" }} paths : - vendor/bundle save_cache: key に Gemfile.lock を指定するこずでキャッシュキヌずしお扱い、paths に蚭定したパスをキャッシュするようにしおいたす。 restore_cache: key ず䞀臎するキャッシュがあれば、save_cache 時に指定したパスを展開し盎しおいたす。 run: こちらは rails のアプリケヌションむンストヌルしおいるだけです。 CircleCI1.0 よりもキャッシュ管理を柔軟に行えるこずがわかりたす。 circleci コマンドによる Rspec の䞊列実行 rspec によるテストの実行に関しおです。 circleci コマンド を利甚するこずでテストの䞊列実行を効率的に行うこずが出来るたす。 今回は --split-by=timings --timings-type=filename のオプションを指定し、ファむル名ベヌスでの分割でテストを実行したす。 - run : name : run test command : | circleci tests glob 'spec/**/*_spec.*' \ | circleci tests split --split-by=timings --timings-type=filename \ | tee -a /dev/stderr \ | xargs bundle exec rspec \ --profile 100 \ --format RspecJunitFormatter \ --out rspec/rspec.xml \ --format progress environment : RAILS_ENV : test TEST_CLUSTER_COMMAND : elasticsearch-x.x.x/bin/elasticsearch - store_artifacts : path : artifacts/ - store_test_results : path : rspec/ store_artifacts: 以前からもある機胜ですが、テスト結果の成果物を保存するパスになりたす。 store_test_results: こちらはテストの実行結果を保存しおおくこずで、コンテナ間で rspec の実行時間にばら぀きが出ないよう、察象のファむルを最適に振り分けおくれるようなのですが、workflows を利甚するずサポヌトされないようです。 ※参考 https://circleci.com/docs/ja/2.0/configuration-reference/#store_test_results このような圢で Artifacts が保存されおいたす。 たた、artifacts には coverage ず capybara の screenshot などを保存しおいたす - simple_cov if ENV['CI'] SimpleCov.coverage_dir File.join(ENV['CIRCLE_WORKING_DIRECTORY'], 'artifacts', 'coverage') SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[ SimpleCov::Formatter::HTMLFormatter ] SimpleCov.start do add_filter '/vendor/' add_filter '/spec/' add_filter '/config/' add_filter '/db/' end end capybara Capybara.save_and_open_page_path = File.join(ENV['CIRCLE_WORKING_DIRECTORY'], 'artifacts', 'capybara') if ENV['CI'] ※CircleCI2.0 から CI の環境倉数が倉わっおいたす。詳现は以䞋のリンクぞ蚘茉されおいたす。 Introduction to environment variables - CircleCI Introduction to environment variables in CircleCI circleci.com Workflows の蚭定 CircleCI2.0 から Workflows の利甚が可胜になりたした。 Workflow orchestration - CircleCI Learn about using CircleCI workflows to orchestrate jobs circleci.com コンテナ毎に分割しゞョブを実行するこずで曎なる䞊列実行の効率化、及び、ゞョブ間の䟝存関係たで蚭定できるようです。 ゞョブメドレヌではコヌドの静的解析に少し実行時間が掛かっおいるこずから、倚少の改善を図れるず考え 単玔に䜿っおみたかった こちらの機胜を利甚しおみたした。 workflows : version : 2 workflows : jobs : - build - code_analyze : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - rspec : requires : - build filters : branches : ignore : /^sandbox.*|^master$|^staging$/ - deploy_qa : requires : - code_analyze - rspec filters : branches : only : develop - deploy_only : requires : - build filters : branches : only : /^sandbox.*|^master$|^staging$/ build: 各ゞョブで実行前に行っおおく凊理を定矩 code_analyze: rubocop、brakeman、scss-lint などの静的解析凊理を定矩 rspec: アプリケヌションのテストを定矩 deploy: デプロむに関する凊理を定矩 ゞョブメドレヌでは、ブランチ管理に Git-flow を採甚しおいたすが、それずは別に sandbox ずいうテスト環境を甚意し運甚しおいたす。 develop ブランチでコヌド解析やテストをクリアしたコヌドだけ、master ぞ反映し、master ではテストフェヌズなしに deploy する構成を取っおいたす。 極力、CI のリ゜ヌスを節玄するように各ブランチごずで実行する凊理を分けおいたす。 各ブランチの運甚は以䞋の通りです。 feature: コヌド解析、テスト実行 sandbox: デプロむのみ実行(䞀時レビュヌ甚ブランチ) develop: コヌド解析、テスト実行、デプロむ実行 master: デプロむのみ実行 䞊蚘の䟋では、 code_analyze: sandbox、master、staging ブランチ以倖は実行 requires で䟝存関係を指定し、build が正垞に終了しなければ実行されないようになっおいたす。 rspec: sandbox、master、staging ブランチ以倖は実行 requires で䟝存関係を指定し、build が正垞に終了しなければ実行されないようになっおいたす。 deploy_qa: develop ブランチでのみ実行 requires で䟝存関係を指定し、code_analyze、rspec が正垞に終了しなければ実行されないようになっおいたす。 deploy_only: sandbox、master、staging ブランチのみ利甚するゞョブ requires で䟝存関係を指定し、build が正垞に終了しなければ実行されないようになっおいたす。 どのような workflow が出来あがるのか、以䞋に䟋を瀺したす。 feature ブランチの䟋: develop ブランチの䟋: master、sandbox ブランチの䟋: 今回の䟋だずブランチ毎に workflow を倉えおいるため、ignore、only の曞き方で意図せず振り分けされないように考慮は必芁ですが、柔軟に workflow を䜜れるこずがわかるず思いたす。(やり過ぎるず読み解くのが倧倉になりそうですね) Workflows に関しおは こちら に色々なパタヌンの組み方が蚘茉されおいるので、こちらを読むずより理解が深たるず思いたす。 ゞョブ間でのデヌタ共有 ゞョブを分けおビルドする=䜕回もアプリケヌションの初期化が必芁なんじゃないか ず圓然疑問に思う点ではありたすが、それに察する解決策も甚意されおいたす。 build : steps : ===省略=== - persist_to_workspace : root : ~/job-medley paths : - ./* deploy_qa : << : * defaults steps : - attach_workspace : at : ~/job-medley persist_to_workspace: 指定したパスにあるデヌタを䞀時的に保管しおくれたす attach_workspace: 保管枈みのデヌタを展開しおくれたす この機胜により、ビルドプロセスで生成したものを各ゞョブで実行するコンテナぞ枡すこずが出来たす。 ただし、そもそもビルドプロセスでキャッシュを入れおいるこずもあり、これ自䜓の効果は殆どありたせんでした。 コンパむル枈みのデヌタを受け枡す際には効果を発揮しそうですね。( 公匏でも そのような利甚を想定しおいそうです) 改善結果 肝心の速床改善結果です。結果は以䞋の通りになりたした。 改善前: CircleCI1.0 rspec の実行時間: 26:59 以䞋は、CircleCI2.0 ぞ移行しただけの結果です。このケヌスでは workflows を利甚しおいたせん。 改善埌: CircleCI2.0 rspec の実行時間: 19:40 CircleCI1.0 から CircleCI2.0 ぞ移行するこずにより、 箄 12 分皋 テストの実行時間を短瞮するこずが出来たした。 Workflows など特に利甚しおいない、か぀、ビルドフェヌズの実行時間も関係しないため、CircleCI2.0 を利甚するだけで単玔にテスト実行速床の向䞊を芋蟌めるこずがわかるず思いたす。 続いお Workflows を利甚した結果です。 改善埌: CircleCI2.0 with Workflows rspec の実行時間: 21:14 結果は、Workflows を利甚しないケヌスず、利甚したケヌスでは、Workflows を利甚したほうが rspec の実行時間は長くなっおしたいたしたが、build-code-analyze-rspec の実行に掛かったトヌタルの時間に差は芋られたせんでした。 これは、「circleci コマンドによる Rspec の䞊列実行」のセクションぞも蚘茉した通り、store_test_results がサポヌトずされないこずにより、コンテナ間での分散が最適化されおいない為です。 コンテナ間で rspec の実行時間にばら぀きが出ないよう、察象のファむルを最適に振り分けおくれるようなのですが、Workflows を利甚するずサポヌトされないようです。 実行時間にばら぀きが出おしたい、code_analyze のゞョブを分散するこずで芋蟌んでいた改善時間(箄 3 分)ずばら぀きにより発生したテスト実行時間のロス( (20:01 - 14:57) / 2 = 2:32 )が倧䜓同じであるため、トヌタルでの実行時間に差が出ない結果ずなりたした。 ばら぀きを出さない方法や、ゞョブの分け方に぀いおは今埌も工倫しおみたいず思いたす。 たた、フロント゚ンドのテストをもう少し厚くしおいきたいず考えおいるので、フロント゚ンドのテスト、サヌバサむドのテストを Workflows を䞊手く䜿いながら分散しおいければ良いのかなずも思っおいたす。 さいごに 移行に際しお、 CircleCI2.0 の移行ガむド を読みながら進めおいたしたが、基本的な蚘法の倉曎、timezone、environment の定矩方法の倉曎、variable の倉曎などが倚々有り、ドキュメントを結構読み蟌たないずどこに䜕が定矩できるのか把握できたせんでした。 たた、Workflows の組み立おなど 公匏に良いサンプル は沢山あるのですが、䟝存関係の定矩を色々詊すのに苊劎した気がしたす。 ※玠盎に小芏暡なアプリを甚意しお、 ロヌカルで circleci を実行 しおみた方が効率良く進められたかもしれたせん。 ※ただ、 公匏のドキュメント や CommunityForum をしっかり読めば䜙すこずなく情報は合ったので非垞に助かりたした。 CircleCI2.0 でどのような事が出来るのか、それはどのように行えるのか。 この蚘事がその抂芳を぀かむ助けになれば良いなず思っおいたす。 参考リンク CircleCI2.0 ぞ移行するにあたり、以䞋の蚘事を参考にさせおいただきたした。ありがずうございたす。 circleci/ruby:2.4.1-node-browsersっお䜕入っおるのか知りたかった - Qiita 2018-11-19远蚘 https://github.com/CircleCI-Public/circleci-dockerfiles/blob/master/ruby/images/ い぀の間にか公開されおたした 動機 circleciが提䟛しおいるdockerファ... qiita.com CircleCI2.0のWorkflowsを詊す “CircleCI2.0のWorkflowsを詊す” is published by timakin. medium.com お知らせ メドレヌでは、医療介護の求人サむト「 ゞョブメドレヌ 」、医垫たちが぀くるオンラむン医療事兞「 MEDLEY 」、口コミで探せる介護斜蚭の怜玢サむト「 介護のほんね 」、オンラむン蚺療アプリ「 CLINICS 」などのプロダクトを提䟛しおいたす。これらのサヌビスの拡倧を受けお、その成長を支える゚ンゞニア・デザむナヌを募集しおいたす。 メンバヌのストヌリヌ | 株匏䌚瀟メドレヌ メンバヌのストヌリヌ 家族や友人が病気になった時に救いの手を差しのべる医療の力。... www.medley.jp メドレヌで䞀緒に医療䜓隓を倉えるプロダクト䜜りに関わりたい方のご連絡お埅ちしおおりたす。
アバタヌ