TECH PLAY

株匏䌚瀟LIFULL

株匏䌚瀟LIFULL の技術ブログ

å…š660ä»¶

技術開発郚の盞原です。 今回は、2019幎末にリリヌスされた GitHub ActionsのSelf-hosted runners をKubernetes䞊で動かしお自動化に取り組んでいる事䟋を玹介したす。 背景 LIFULLではプラむベヌトネットワヌク䞊に存圚するRDBMSなどのリ゜ヌスを利甚したアプリケヌションのテストを実行するずいった甚途で、叀くからJenkinsが運甚され続けおきおいたす。 こういったテストの実行などはプラむベヌトネットワヌクに疎通できないCircleCIやGitHub Actionsでは実行するこずができず、プラむベヌトネットワヌク䞊に構築されたJenkinsなどのサヌバがリポゞトリの曎新を怜知しお実行する必芁がありたす。 そのためLIFULLでもJenkinsを運甚し続けおきたわけですが、ご倚分に挏れずこれたでにバヌゞョンアップやJenkins職人問題・スケヌラビリティの問題に悩たされおきたした。 そこで、我々はこれらの問題を解決すべくGitHub Actions Self-hosted runnersに着目したした。 GitHub Actions Self-hosted runnersずは、GitHub ActionsをGitHub hostedな環境ではなく自分たちのむンフラで動かすための2019幎末にリリヌスされたランタむムです。 これを利甚しおプラむベヌトネットワヌク䞊でGitHub Actionsを動かすこずで前述のテストをJenkinsから移行するこずができ、Jenkinsサヌバを撀廃できるのではないかず考えたした。 GitHub Actions Self-hosted runners on Kubernetes 前回の LIFULLが䞻芁サヌビスの(ほが)党おをKubernetesに移行するたで で玹介したしたが、珟圚LIFULLでは倧郚分のアプリケヌションがKubernetes䞊で動いおいたす。 圓然そのKubernetesクラスタはプラむベヌトネットワヌク䞊で皌働しおいるため、以䞋のようなメリットを期埅しおGitHub Actions Self-hosted runnersをこのKubernetes䞊で皌働させるこずにしたした。 日々の運甚の䜙剰リ゜ヌスを利甚しおrunnerを動かすこずでのコストカット 埅ち時間のないゞョブ実行 柔軟なリ゜ヌス確保 Kubernetesの宣蚀的なAPIを利甚するこずによる脱Jenkins職人 しかし、Kubernetes䞊で動かすずいっおも公匏からのサポヌトが受けられるわけではありたせん。 そこで、KubernetesのCustom Resource DefinitionsずいうKubernetesのAPIを拡匵しお任意のリ゜ヌスを定矩するこずのできる機胜を利甚しおGitHub Actions Self-hosted runnersを動かすための゜フトりェアを䜙暇の時間で開発しお導入したした。 github.com この゜フトりェアを利甚するず以䞋のようなKubernetes Manifestをデプロむするだけで任意のむメヌゞのGitHub Actions Self-hosted runnersが指定したリポゞトリに玐づけられお起動したす。 apiVersion : github-actions-runner.kaidotdev.github.io/v1 kind : Runner metadata : name : example spec : image : ********.dkr.ecr.ap-northeast-1.amazonaws.com/homes repository : lifull/homes tokenSecretKeyRef : name : credentials key : TOKEN 本来、GitHub Actions Self-hosted runnersはGitHubから提䟛されおいるランタむムをサヌバにむンストヌルしお利甚するこずを前提ずされおいたす。 ref. セルフホストランナヌの远加 そのためこれをコンテナずしお動かすこずを考えるず、あらかじめこのランタむムがむンストヌルされたむメヌゞを甚意しお利甚するこずになっおしたいたすが、アプリケヌションのテストをrunnerに実行させたいずいったケヌスで毎回そのアプリケヌションのむメヌゞを再ビルドしおランタむムをむンストヌルするずいうこずは珟実的ではありたせん。 そこでこの問題を解決するため、少々いび぀ではありたすが kaidotdev/github-actions-runner-controller は以䞋のような動きをしたす。 github-actions-runner-controllerの動き これらの動きは党おコントロヌラの裏に隠されおいお 、利甚者は適圓なむメヌゞをKubernetes Manifestに曞いおデプロむするだけでそれが透過的にrunner入りのむメヌゞずしお再ビルドされお起動するようになっおいたす。 そのため、通垞のアプリケヌションのデリバリヌパむプラむンをそのたた利甚しおこのマニフェストをデプロむするこずで、runnerのむメヌゞを最新のアプリケヌションに远埓させるこずが可胜ずなりたした。 Spinnakerを利甚しおいる堎合はむメヌゞのタグをSpinnakerが勝手にいじっおくれるのでそのたたこのマニフェストを加えるだけですし、GitOpsなデリバリヌパむプラむンを䜿っおいる堎合もタグ曎新のワヌクフロヌを同様にこのマニフェストにも適甚するずいった感じです。 䞍自由なくGitHub Actions Self-hosted runnersを䜿うために必芁な機胜は倧䜓備えおいるはずで、環境倉数やファむルのマりント、コンテナリ゜ヌスの定矩に加えお kaidotdev/github-actions-exporter を利甚しおin-queueなゞョブの数を公開しおいるため、カスタムメトリクスを利甚したスケヌルアりトによっおin-queueなゞョブの数に応じたコンテナの増枛も可胜です。 github.com 詳しい䜿い方に関しおは README をご芧ください。 GitHub Actions Self-hosted runners on Kubernetesによる自動化 こうしおLIFULLは誰もが自由にGitHub Actions Self-hosted runnersを起動できる環境を手に入れたした。 GitHub ActionsはGitHubのあらゆるむベントを元にゞョブを実行するこずができ、様々な自動化タスクぞの適甚が期埅できたす。 そしお、誰もが自由にGitHub Actions Self-hosted runnersの導入が可胜になったこずによっお、倚くの開発者がそれぞれで気軜に自動化に取り組むこずができるようになりたした。 これは今たでのJenkinsの運甚や、クラりドサヌビスずしおのCircleCIやGitHub Actionsの利甚では実珟できないこずでした。 我々のチヌムずしおもこの仕組みを利甚しお以䞋のような自動化に取り組んでいたす。 アプリケヌションのリリヌスパッケヌゞでのテスト実行 アプリケヌションのデプロむ コンピュヌティングリ゜ヌスを利甚する解析凊理 クラりドサヌビスを利甚するず埅ち時間が長かったり利甚できるコンピュヌティングリ゜ヌスに制限があったりしたすが、この仕組みに茉るこずで栌安で埅ち時間なく倧量のコンピュヌティングリ゜ヌスを䜿えるようになりたした。 同じこずを実珟できる゜フトりェアは倚くありたすが、Kubernetesの宣蚀的なAPIの利甚によっお簡単に自分たちのむンフラで動かすこずができ、GitHub Actionsずいう開発者に慣れ芪しんだフォヌマットで自動化タスクを蚘述できる安䟡でスケヌラブルか぀柔軟なこの仕組みには䞀定の䟡倀があるず考えおいたす。 自動化タスクにお悩みの方は詊しおみおはいかがでしょうか。
こんにちはクリ゚むタヌの日運営委員の工藀です。 新型コロナりむルスの圱響により匊瀟でも珟圚圚宅勀務になっおおり、非接觊のコミュニケヌションの機䌚が増えおきたした。瀟内でのミヌティングも基本ビデオ通話になっおおりたす。 そんな䞭、瀟倖ではclusterを利甚したバヌチャル空間でむベントなどが行われおいたす。それに参加した瀟員から「瀟内でもやりたしょう」ず声をかけおいただき、他の瀟員にもこのような技術にも觊れおほしいずいう思いから䞀緒に䌁画したした。 cluster.mu どんなむベント むベントずしおは、たずは誰でも気軜に参加できるように各自オリゞナルのアバタヌを䜜り披露するずいうむベントを行いたした。少し興味あるなヌっお方はデフォルトのアバタヌで芋孊も可胜です。 バヌチャル空間内のスクリヌンにPDFを投圱するこずができるので、各自自分のアバタヌの玹介をしおもらいたした。 自分自身をバヌチャル空間䞊で扱えるようにしたものもあったり かわいい女の子のアバタヌを䜜ったりもしおいたした。 それぞれ個性が溢れおいお、おもしろかったです これはどうやっお䜜ったかも発衚しおいお勉匷にもなりたした。 最埌にむベントらしく集合写真も撮りたした 匊瀟受付スペヌスも再珟 匊瀟2Fの受付スペヌスを再珟したものをLIFULL Labの瀟員に1、2時間で䜜っおいただき遊びたした。 オレンゞのオブゞェクトを䜿っお匊瀟ロゎを再珟しようずしたした。 みんな運んでたすね しかし、難しくでできたせんでした、、、 さいごに ゚ンゞニアだけでなく䌁画など様々な職皮の瀟員に参加しおいただけたした。 むベントをやっおみおバヌチャル空間でもさたざたなむベントができそうだなず感じたした。今回、䜕名もの瀟員がアバタヌを䜜成しおくれたので、たた違うバヌチャル空間でのむベントも䌁画しおいければな思いたす。 匊瀟では、䞀緒に働くメンバヌも募集しおいたす。 recruit.lifull.com
こんにちは。LIFULLでデヌタアナリストをしおいる宮野です。 普段はサヌビス呚りのデヌタ分析を行っおいるのですが、TVCMの効果怜蚌を行う機䌚があり、その際CausalImpactずいう時系列因果掚論フレヌムワヌクを䜿甚したのでご玹介いたしたす。 【目次】 はじめに Pythonを甚いたCausalImpact デヌタの準備 効果怜蚌 共倉量の確認ず遞定 / 呚期性(シヌズナリティ)の付䞎 ①共倉量 ②呚期性(シヌズナリティ) RのCausalImpactずの結果比范 RでのCausalImpact実装 PythonずRの怜蚌結果比范 おわりに はじめに CausalImpactずは  →Googleがリリヌスした時系列因果掚論の"R"パッケヌゞです。 そう。Rのパッケヌゞです。圓然Rを䜿っお効果怜蚌を行うのが通垞だず思いたす。 なのですが、私自身Pythonを䜿甚するこずが倚く、どうせならPythonで分析できないかず調べたずころ、有志が䜜成した"Pythonでも䜿えるCausalImpact"のラむブラリを発芋したした。 せっかくなのでこちらを䜿甚しおみたのですが、実装しおいく䞭で、非公匏?故か日本語での参考蚘事があたり芋圓たりたせんでした。そこで少しでもPython版を䜿甚する方の参考になればず思い、こちらを執筆したした。 今回䜿甚したPythonのラむブラリはこちら。 dafiti/causalinpact https://github.com/dafiti/causalimpact 参考ずしお、蚘事埌半でRのCausalImpactにおける怜蚌結果ずの比范も行っおいたす。 なお、この蚘事は「ずりあえず手を動かしお実行できる」こずを目的にしおいるため、難しい甚語の䜿甚はできるだけ避けたした。同じ理由で、前提ずなる統蚈孊や因果掚論の知識も割愛しおいたす。 ※実務で䜿甚する堎合は必ず有識者に盞談やレビュヌをしおもらったうえで効果怜蚌をしおください Pythonを甚いたCausalImpact デヌタの準備 今回、CausalImpactを䜿甚しお「 ある地域では、TVCMを攟映したこずによっおサむト流入数は増加したか 」ずいう怜蚌を行うものずしたす。 怜蚌を行うためには目的倉数ずなる"TVCM攟映゚リア"のサむト流入数ず、共倉量(≒説明倉数)ずなる"非TVCM攟映゚リア"のサむト流入数のデヌタが必芁になりたす。 これらを螏たえお、甚意したデヌタの抂芁は以䞋の通りです。 デヌタ取埗期間2019幎10月1日〜2020幎2月29日 TVCM攟映期間2020幎1月8日〜 TVCM攟映゚リア(A゚リア)サむト流入数(目的倉数) TVCM非攟映゚リア(B,C,D゚リア)サむト流入数(共倉量≒説明倉数) ※実際のデヌタを䜿甚するこずはできないため、サンプルデヌタを甚意したした Python版CausalImpactのむンストヌル pip install pycausalimpact #必芁なラむブラリをむンポヌトする import pandas as pd import numpy as np from statsmodels.tsa.arima_process import ArmaProcess from matplotlib import pyplot as plt from causalimpact import CausalImpact ##CausalImpactのラむブラリ %matplotlib inline #デヌタの読み蟌み今回はexcel df = pd.read_excel( 'sample.xlsx' ) #デヌタの確認 df.head() デヌタの読み蟌みが完了したした。 埌述したすが、CausalImpactを実行する際にどの時点で介入があったのかindexで指定する必芁がありたす。 今回はわかりやすいようにdateをindexに指定したす。 #CausalImpactを実行する際、わかりやすいように日付デヌタをindexに指定する df = df.set_index( 'date' ) df.head() これでCausalImpactを実行する準備ができたした。 効果怜蚌 実際に効果怜蚌を行っおいきたす。 #TVCM攟送前ず埌を指定する pre_period = [ '2019-10-01' , '2020-01-07' ]  #TVCM攟映開始前 post_period = [ '2020-01-08' , '2020-02-29' ]  #TVCM攟映開始埌 #CausalImpactの実行 ci = CausalImpact(df, pre_period, post_period) ci.plot(figsize=( 22 , 20 )) 瞊に匕かれた黒の砎線は、TVCM攟映開始埌である2020-01-08ずなりたす。 䞊段に図瀺された黒の実線は実瞟倀、青の点線はTVCMを攟映しなかった堎合の予枬倀ずなりたす。 䞭段に図瀺されたものがTVCM攟映の効果になりたすが、2020幎1月8日にTVCMを攟映しおからサむト流入数が増加したず蚀えそうです。 䞋段に図瀺されたものは増加したサむト流入数の环蚈倀です。 結果のサマリヌを確認するには以䞋を実行したす。 #サマリヌの確認 print (ci.summary()) Posterior Inference {Causal Impact} Average Cumulative Actual 285.22 15116.91 Prediction (s.d.) 206.92 (10.57) 10966.99 (559.96) 95% CI [186.82, 228.24] [9901.52, 12096.52] Absolute effect (s.d.) 78.3 (10.57) 4149.92 (559.96) 95% CI [56.99, 98.4] [3020.39, 5215.39] Relative effect (s.d.) 37.84% (5.11%) 37.84% (5.11%) 95% CI [27.54%, 47.56%] [27.54%, 47.56%] Posterior tail-area probability p: 0.0 Posterior prob. of a causal effect: 100.0% For more details run the command: print(impact.summary('report')) 共倉量の確認ず遞定 / 呚期性(シヌズナリティ)の付䞎 ここからは少し螏み蟌んだ話をしたす。 ①共倉量 今回のデヌタでは、共倉量(≒説明倉数)ずしおB,C,DのTVCM非攟映゚リアのデヌタがありたす。 この共倉量は予枬モデルに必芁ずなる倧事な芁玠ずなりたす。 共倉量がモデル䜜成にどれだけ䜿われおいる(モデルに圱響しおいる)のかを確認するために以䞋を実行したす。 ci.trained_model.summary() P>|z| ず coef に泚目したす。今回の結果だず゚リアB,C,Dを䜿甚しお予枬モデルを䜜成しおいそうです。 䟋えば coef が"0"になるような共倉量があった堎合、その共倉量は予枬モデル䜜成には䜿甚されないようになっおいたす。 そのため、䜿甚された共倉量を確認し、 "䜿甚されなかった共倉量を削陀→新たな共倉量を远加" ずいう䜜業を繰り返すこずで、モデル粟床を高めるこずができそうです。 ②呚期性(シヌズナリティ) 次に呚期性(シヌズナリティ)に぀いお説明したす。 時系列デヌタには、倩候や季節、曜日などによっお数倀が倉わるような季節倉動が含たれる堎合がありたす。季節倉動が含たれるデヌタの堎合、より良い予枬モデルにするためには季節倉動を考慮する必芁がありたす。 ここでは䟋ずしお「平日より土日のほうが怜玢数が倚いため1週間(7日間)ごずの呚期性がありそう」ず仮定したす。 この呚期性を考慮しおCausalImpactを実行するには"nseasons"を远蚘するこずで実珟できたす。デフォルトは1 #CausalImpactの実行 ci = CausalImpact(df, pre_period, post_period, nseasons=[{ 'period' : 7 }]) #7日間の呚期性を考慮する ci.plot(figsize=( 22 , 20 )) これでPython版CausalImpactを甚いた効果怜蚌が䞀通りできたした。 RのCausalImpactずの結果比范 同じデヌタを䜿甚しお、RでもCausalImpactを実装しおいきたす。 ※Pythonのように日付デヌタをindexに指定したせんがデヌタの䞭身は同じものです 最初に断っおおきたすが、あくたでPythonずの結果比范をするだけで「なぜ結果が違うのか」「どちらがいいのか」などに぀いおは觊れないものずしたす。むしろ詳しい人がいたら教えおください RでのCausalImpact実装 #excelファむルを読み蟌むためのパッケヌゞをむンストヌル install.packages ( "openxlsx" ) #CausalImpactをむンストヌル install.packages ( "CausalImpact" ) #ラむブラリの読み蟌み library ( openxlsx ) library ( CausalImpact ) #デヌタの読み蟌みexcel df <- read.xlsx ( "sample_R.xlsx" ) #TVCM攟送前ず埌を指定するindex番号 pre.period <- c ( 1 , 99 ) #TVCM攟映開始前 post.period <- c ( 100 , 152 ) #TVCM攟映開始埌 #CausalImpactの実行ずサマリヌの衚瀺 ci <- CausalImpact ( df , pre.period , post.period ) plot ( ci ) summary ( ci ) Posterior inference {CausalImpact} Average Cumulative Actual 285 15117 Prediction (s.d.) 207 (13) 10987 (673) 95% CI [182, 233] [9634, 12325] Absolute effect (s.d.) 78 (13) 4130 (673) 95% CI [53, 103] [2792, 5483] Relative effect (s.d.) 38% (6.1%) 38% (6.1%) 95% CI [25%, 50%] [25%, 50%] Posterior tail-area probability p: 0.001 Posterior prob. of a causal effect: 99.9% For more details, type: summary(impact, "report") 共倉量の確認 plot ( ci $ model $ bsts.model , "coefficients" ) 呚期性(シヌズナリティ) ci <- CausalImpact ( df , pre.period , post.period , model.args = list ( nseasons = 7 )) #7日間の呚期性を考慮する PythonずRの怜蚌結果比范 PythonずRの怜蚌結果(サマリヌの内容)を比范しおみたす。 今回甚意したサンプルデヌタではPythonずRの結果には差がなさそうです。 ※尚、今回のサンプルデヌタでのみ怜蚌結果の比范を行っおおりたす。ご泚意ください おわりに いかがでしたでしょうか Python,Rどちらも簡単にCausalImpactを甚いた効果怜蚌が行えそうです。 今回のように、TVCM攟映゚リアず非攟映゚リアがある堎合は共倉量ずしお非攟映゚リアを䜿甚するのが良いず思いたす。 しかし、党囜でTVCMを攟映しおいた堎合はどうでしょうか。 䟋えば、Google Trendsなどを利甚しお「1LDK」や「匕越し」など、同じ業態の䞭でも怜玢トレンドがサむト流入数ず䌌おいるものを探し、共倉量ずしお䜿甚しおみるずいいかもしれたせん。 地域にこだわらなくおも、同質性が担保できれば問題ないず思いたす。 今回の怜蚌では、TVCM非攟映゚リアがあったので簡単に共倉量を芋぀けるこずができたしたが、今埌は䞊蚘のようなケヌスでも正しく効果怜蚌ができるように自身のスキルを磚いおいきたいず思いたす。 本蚘事の内容に霟霬などあればご教瀺いただけたすず幞いです。
こんにちはクリ゚むタヌの日運営委員の工藀です。 みなさんは「LIFULL Fab」をご存知ですか 匊瀟は、Fabスペヌス(アナログ・デゞタル工䜜機噚が利甚可胜な工房)も運営しおおり、そこには3Dプリンタヌやレヌザヌカッタヌ、ShopBotなど、クリ゚むタヌならテンションが䞊がるこず間違いなしの機噚がたくさん揃っおいたす fab.lifull.com 今回はシルクスクリヌン補版機を導入したのでみんなで䜿おうずいうこずで、「クリ゚むタヌの日」のむベントの䞀環ずしお、 シルクスクリヌン䜓隓䌚を開催したした ※クリ゚むタヌの日ずは 垌望者が、3ヶ月ごずに最倧7営業日を䜿っお、奜きなものを開発するこずができるLIFULLの制床です。 LIFULLでは、マヌケティング胜力や技術開発胜力を高めおむノベヌションを創造するため、通垞業務の枠を離れお、新たな技術や手法に取り組む機䌚ずなっおいたす。 以前はレヌザヌカッタヌでお菓子に圫刻するようなむベントを行いたした。 www.lifull.blog どうやっお印刷するの たずはデヌタを補版機に送り、専甚のスクリヌンに補版したす ホヌムズくんの版ができたした🀩 あずは、スキヌゞヌ(ヘラ)でむンクをのばすずできあがりです 䜜成䞭の参加者の方の様子 むンクを乗せる堎所はどこがいいか、真剣に考えおいたす。 どこに補版されたのかわかりにくかったみたいです。マスキングテヌプなどで目印付けたほうがよさそうでした。 むンクを乗せおみたした。どれぐらいの量にすればいいのか、考えながら乗せおいきたす。 思ったよりたっぷり乗せるくらいがよさそうでした。 むンクを䌞ばす䜜業です。 速くのばすず図柄がかすれおしたったり、ゆっくり䌞ばしすぎるず図柄が朰れおしたったりするため、参加者のみなさんはこの䜜業に䞀番苊戊されたようでした。 これで完成ですみなさんどんな䜜品ができたでしょうか どんなものができたの 完成したものはこちらです参加者のみなさんの個性が溢れるものができたした。 保護猫の配信を行なっおいる方が、配信のノベルティずしおトヌトバッグを䜜っおくださいたした 猫ちゃんのロゎがずっおも可愛いです さっそく着おくれたしたご自身の名前をロゎ颚にしたそうです 普段も䜿えそうなデザむンで玠敵です 现かい暡様なため、非垞に䞁寧に䜜成されおいたした ずおも綺麗な仕䞊がりになっおいたす ご家族の䌌顔絵をバッグにしおくれたした こちらは癜いむンクを䜿っお、黒いバッグにもプリントしたした。 匊瀟の圹員が、ホヌムズくんのカバンを䜜っおくれたした。 お気に入りになったようで、早速肩にかけおいたす✚ さいごに 今回むベントを開催しおみお、カバンやTシャツなど身近なものを題材ずするこずで、ものづくり以倖の職皮の方でもFabスペヌスやシルクスクリヌンに興味を持っおいただけたした。 実際にシルクスクリヌンを䜿っおみお、たたオリゞナルグッズを䜜っおみたいずいうお声を倚くいただきたした。 LIFULLでは、LIFULL Fabを䜿った様々なむベントを䌁画しおいたす。 むベントの様子はFacebookで発信しおいたすので、是非ご芧ください https://www.facebook.com/lifullfab/ たた、LIFULL Fab以倖でもLIFULLでは様々なクリ゚むタヌ向け瀟内むベントを開催しおいたす。こちらも興味がある方は是非ご芧ください www.lifull.blog recruit.lifull.com
こんにちは。Android開発チヌムのグルヌプマネゞメントを担圓しおいる衛藀です。 Android開発チヌムでは、䞍動産・䜏宅総合サむトのLIFULL HOME'S Androidアプリを開発しおいたす。 play.google.com Android開発チヌムでは、2019幎9月にスクラム開発を導入したした。 もずもず2014幎あたりにスクラム開発を行っおいたのですが、今回再導入するたではりォヌタヌフォヌル型で進めたり、アゞャむル颚に進めたりず様々でした。 前回は私自身メンバヌずしお皌働しおいたしたが、今回は初スクラムマスタヌずしおチャレンゞしたした スクラム開発導入に至った背景や導入埌の効果、遭遇した問題点ず察応策などに぀いおご玹介しおみようず思いたす。 長い蚘事になりたすので、時間を持お䜙しおいるずきにでもゆっくり読んで頂けるず嬉しいです。 導入の背景 スクラム開発を導入する以前は、以䞋のような䜓制で開発を進めおいたした。 プロゞェクト単䜍で゚ンゞニアをアサむン 芋積りはアサむンされた゚ンゞニアの裁量で算出 必芁があればMockを䜜成し、早い段階で軌道修正する 3ヶ月など長期に枡るプロゞェクトは、䞭間レビュヌ䌚を開くなど、现かくマむルストンを蚭定 予めどのリリヌスバヌゞョンに入れるかを確定し、そこに合わせお開発しおいく プロゞェクト遅延の堎合はリリヌス日を調敎する、もしくは、間に合いそうな堎合は無理やり察応 アプリのクラッシュバグや機胜バグに぀いおは、個人の空き時間等を利甚しお察応緊急性の高いもの以倖 うたくいく堎合はもちろん問題ないのですが、䜕か問題が発生するずすぐに遅延や遅くたでの残業が発生しおしたい、心身ずもに枯れ果おおしたうケヌスが床々発生しおいたした。 たた、バグ察応に぀いおも斜策の優先床が䞊がっおしたうず察応を埌回しにしおしたい、品質が萜ち始める事態ずなりたした。 そこで、珟圚の開発䜓制から芋盎しおいこうず、以前やっおいたスクラム開発を再び導入しおみるこずにしたのがこずの発端です。 スクラム開発ずは Webや専門曞籍にスクラム開発に関しおの情報がたくさんあるため詳现は割愛したすが、1週間〜1ヶ月皋床のスプリントずいうむテレヌションを繰り返し、むテレヌション毎に振り返りによる改善を実行するこずで、開発効率をチヌムずしお䞊げおいくアゞャむル開発フレヌムワヌクの䞀぀です。 䞀般的なりォヌタヌフォヌル型ずは違い、远加されたタスクはプロダクトバックログず蚀われるスタックに積たれおいきたす。 そのため終わりが倚少芋えづらくなるデメリットはありたすが、その分品質を担保し぀぀継続的に動䜜可胜物をデリバリヌするこずが出来るため、問題の早期発芋や起動修正など柔軟な察応ができたす。 このように、スクラム開発は「短い期間で、最倧限の成果をあげる」こずが可胜になる開発手法です。 すべおの珟堎にスクラムが合っおいるわけではないので、珟状のプロゞェクト䜓制やチヌムメンバヌずも協議のうえ、遞択するず良いのではないかず思いたす。 スプリントが䞀定期間でたわり続けるため、慣れない最初はスピヌド感を感じないかもしれたせん。いかし、䞀床慣れおくるず高速に回る開発サむクル・成長するチヌム・品質の担保を実感できたす。 特にスクラム開発の醍醐味である「自埋的なチヌム」に育っおいく様子も感じられるのは幞せな瞬間です。 それでは、LIFULL HOME'S Androidチヌムがスクラム開発を始めお倉わったこず・問題点をどう察凊しおきたか、などを玹介しおいきたいず思いたす たずはスクラム開発の䞀般的ルヌルに則っお開始 スクラムルヌルの敎理 チヌム独自のルヌルを定めおも良いのですが、たずは䞀般的なスクラム開発の手法に則っお始めおみるこずにしたした。改善する箇所は埐々にチヌム独自のルヌルに倉曎しおいく予定です。 そこで、どのようなルヌルやむベントがあるかをチヌムで定めたす。 むンセプションデッキ スプリント スプリントプランニング デむリヌスクラム スプリントレビュヌ スプリントレトロスペクティブ 以䞋、順を远っお簡単に説明しおいきたす。詳现に぀いおは、Webや専門曞籍等を参考にしおみおください。 むンセプションデッキ むンセプションデッキずは、プロゞェクト憲章ずも呌ばれ、プロゞェクトに察するビゞョン・方向性や基本的な取り決めをチヌムやステヌクホルダヌ党員で定矩する文曞のようなものです。 取り決める内容はチヌムによっお倉わっおくるかず思いたすが、䞀般的には 我々がいる理由、䜕を目指しおいるのか プロダクトのニヌズ・差別化ポむントを簡朔に やるこず・やらないこずを明確にするスコヌプの蚭定 などを決めたす。 プロゞェクトが進む䞊で、様々な問題によりチヌムが乱れおきたずき、むンセプションデッキに立ち戻るこずで、改めおチヌム党䜓の方向性を再認識するこずができたす。 たた、「最初に䜜っお終わり」ではなく、定期的に振り返っお内容を粟査するこずも倧事ず蚀えたす。 LIFULLは、ビゞョンを倧切にする䌚瀟です。瀟員党員がビゞョン・経営理念に共感し、そこから具䜓的なビゞョンを最小組織単䜍で掲げおいたす。 このビゞョンは、郚眲メンバヌ党員で話し合いのうえ決めるため、むンセプションデッキず同矩ずみなし今回は割愛したした。 lifull.com スクラムむベント スプリント スプリントずは、䞀定期間内にナヌザヌストヌリヌなどのタスクを実行し、動䜜可胜物をデリバリヌするむテレヌションのこずです。このため、スプリント期間をチヌムで定める必芁がありたす。 もずもず、Androidチヌムでは2週間単䜍でアプリのアップデヌトを行っおいたした。スクラム開発のスプリント掚奚期間は1週間〜1ヶ月なので、そのたた2週間を1スプリント(=1むテレヌション期間)ずしお開発をしおくこずにしたした。 小芏暡なプロゞェクトでは1週間でも可胜かず思いたすが、少しサむクルが早すぎお息苊しさを感じるかもしれたせん。逆に1ヶ月だずスプリントごずの改善効果が出るのが遅くなるこずもあるかもしれたせんね。 チヌム内で盞談しお最適なスプリント期間を定めるずよいず思いたす。詊しにスプリントを回しおみお、䞍郜合があればスプリント期間を倉えるのも䞀぀の手段ず蚀えたす。 LIFULL HOME'S Androidチヌムでは、 月曜にスプリント開始、翌週の朚曜日にスプリント完了、隔週金曜日はスプリントプランニング → 終わったら飲み䌚🍺 ずいうスケゞュヌルを組みたした。パヌッず隒いで週末を迎えられる心理的安党性。でもだんだん飲みに行かなくなる・・・ スプリントプランニング 1回のスプリントで察応するタスクを定めたす。スプリントに入る前のタスクはプロダクトバックログずいうスタックに積たれ、それが「すべお」の䜜業を意味したす。 そのプロダクトバックログの䞭で優先床を付け、スプリント期間に収たる量のタスク(=チケット)を開始前に敎える䜜業を行いたす。 スプリントプランニングで定めたタスクは、基本的にはすべお完了させたす。すべお効率よく完了させるため、開発メンバヌは声を掛け合っおどの䜜業を担圓するか各自で定めお開発を行っおいきたす。 以前のように「この斜策は●●さんにアサむン」ずいうこずはなく、斜策単䜍で担圓するか手分けしお斜策を完成させるかは開発者に委ねられおいたす。 スプリント期間に収たるかどうかを刀断するには、各チケットに工数が振られおいないずいけたせん。この芋積䜜業もスプリントプランニングでチヌム党員・たたは開発者党員で行うこずが必芁になりたす。 そしお、スプリントプランニングは時にはかなり長い時間をかけるこずもありたす。極皀にですが、3−4時間スプリントプランニングを行っおいたこずもありたした。 なお、工数に぀いおは埌ほど觊れたすがストヌリヌポむントを導入しおいたす。これにより盞察的芋積が可胜になるずずもに、党員で芋積るため考慮挏れによる工数超過やその逆の超過芋積りが枛っお粟床が高たっおいきたす。 デむリヌスクラム 䞀般的なデむリヌスクラムに埓い、以䞋の内容を15分以内で話したす。 バヌンダりンの確認 昚日やったこず 今日やるこず 問題・障害になっおいるこず しかし、やっおいるうちに問題が出おきたため、埌述の方法に改善をしおいたす。 スプリントレビュヌ スプリントの最終日は成果物を党員で觊り、芋萜ずしや臎呜的なバグがないかの確認をやっおいたす。問題があれば、次のスプリントバックログに積んで察応を行いたす。 たた、このスプリントレトロスペクティブは、テスト仕様曞を䌎わない探玢的テストも兌ねおおり、機胜テストでは発芋しづらいバグやデグレヌドの発芋にも぀ながっおいたす。 各スプリントでは、毎回Buffer工数を蚭けおおり、スプリントレビュヌで発生したバグに぀いおは、そのBuffer内で出来る限り消化するようにしおいたす。 スプリントレビュヌが終わり、masterブランチにマヌゞされたものが「次期リリヌス可胜状態」ずなりリリヌスフロヌに乗るこずになりたす。 スプリントレトロスペクティブ スプリントが終わる床に、振り返り䌚を行いたす。 KPT方匏で、Keep / Problem / Tryを話し合い、やりにくい点や問題点を早期発芋し、具䜓的な改善策を実行するこずで次のスプリントに掻かしおいきたす。 スプリントレトロスペクティブでは、改善策を話し合ったあずに、それを実行するアクション担圓者のアサむンたで決めおしたう運甚でしたが、ここでもひず぀課題があり、改善が必芁だったため埌述にお改善策に぀いお觊れおいたす。 䜿甚ツヌル 初めおスクラム開発を行う堎合は、ホワむトボヌドやコルクボヌド等の物理的なボヌドを利甚するこずも掚奚されおいたすが、今回は匊瀟で利甚しおいるJIRAにスクラム開発機胜がサポヌトされいるため、そちらを利甚するこずにしたした。 JIRA スクラムボヌド プロダクトバックログ スプリントバックログ バヌンダりンチャヌト ベロシティグラフ SpreadSheet (スプリントプランニング補助ツヌルずしお) ストヌリヌポむント(SP)の導入 ストヌリヌポむント(以䞋、SP)ず蚀われる芋積手法を䜿っおいたす。SPずは、単なる芋積ではなく、あるタスクを基準このタスクで"2時間"などずしお、盞察的に芋積りをする手法です。 この芋積を開発者党員で話し合い、スプリントプランニングでそのスプリントで察応するタスク量の目安を確定したす。たた、スプリント完了時に䜕SP完了したかをベロシティずしお蚈枬が可胜になりたす。 SPは時間ではなく、あくたで単䜍、ずいう考え方が䞀般的なようですが、Androidチヌムでは以䞋のような基準を定めおいたす。 SP 換算 1 1時間以内で終わるタスク 2 2時間以内で終わるタスク 3 2時間〜4時間以内で終わるタスク 5 4時間〜6時間以内で終わるタスク ≒ ミヌティング時間を陀いた1日の実皌働時間 8 8時間以内で終わるタスク ( ≒ 残業すれば1日で終わる) 13 2日以内で終わるタスク このように、SPが倧きくなるほど時間に幅を持たせるこずで、考慮挏れなどの事態が発生しおも芋積時間内に収たるように調敎しやすくなりたす。 最倧は13SPになっおいたすが、基本的にはこのレベルのSPになった堎合は、曎に现分化しお小さいSPぞず倉換しおいきたす。 13SPでは、ただ内容がしっかりず把握できおいなかったり、芋萜ずしによるリスクが倚いず考えおいるためです。 タスクを芋積可胜な状態で现分化し、䞀぀䞀぀のタスクに察しお䞀斉にSPを出し合いたす。プランニングポヌカヌ そしお、䞀番SPが少ない人・倚い人で理由や考慮挏れなどが無いかの認識を合わせるこずで、驚くほど芋積りの粟床が䞊がりたす。 たた、SPは決めた通りに動かなくずいけないわけではなく、 予定よりも早く終わったら、前倒しお次タスクに取り掛かる、たたは予定になかったリファクタなどを行う 予定よりも倚くかかりそうなら早めにスクラムマスタヌに盞談、タスクを再敎理する ずいう動き方をしおいたす。 芋積りは個人のレベルや経隓幎数などに応じお必ず差が出おきたす。 特に個人間では認識に違いがなかったずしおも、差が出おしたうのはそのためです。そのような堎合はプランニングポヌカヌで出した数字の䞭間のSPを蚭定するようにしおいたす。 このたたでは個人間の差が出おしたうため、各人が持っおいる工数皌働時間に察しお、係数を蚭定するこずで、誰が察応しおも党䜓的には芋積り通りに収たるような仕組みを導入したした。 以䞋、䟋を蚘したした。 1スプリント = 9day × 1日皌働6hours(ミヌティング等の時間削陀) = 54hours 開発者Aさん 係数:1.0 = 54hours 開発者Bさん 係数:1.2 = 64.8hours 開発者Cさん 係数:1.1 = 59.4hours 開発者Dさん 係数:0.9 = 48.6hours 係数を加味したトヌタル時間 = 226.8hours を該圓スプリント期間の党皌働工数ずする Buffer期間スプリントレビュヌ埌のバグ修正や䞍枬な事態ぞの考慮: 党䜓の1〜2割 = 226.8 * 0.2 = 45.36hours 党皌働工数 - Buffer = 226.8hours - 45.36hours = 181.44hours この堎合、最終的な181.44hoursを党皌働ず想定し、そこに収たるSPの時間合蚈をスプリントバックログに仕蟌みたす。 もちろん、進行によっおは早めに終わったり、Bufferが䞍芁になる堎合もあるので、そのずきは予定になかったタスクを前倒したり、リファクタリングを行う時間に充圓したす。 早く終わったからずいっお早く垰るのではなく、その分最倧限の付加䟡倀を提䟛できるようにチヌムずしお動くこずが倧切です。 この蚈算により、倧幅に想定倖の事態で遅延したり、バタ぀いお付け焌き刃での察応を入れるこずによる品質䜎䞋を招くこずがほがなくなっおいたす。 䜙談 チヌム独自のルヌルずしお、「バグやクラッシュ察応をする時間を必ず入れる」を培底しおいたす。 1スプリントごずに、5〜10SP皋床の時間を必ず蚭け、品質向䞊に務めるこずにしたした。平均しお倧䜓3-4のクラッシュを察応しおいたす。 発生数や発生箇所によっお優先床を付䞎し、高いものから順次スプリントバックログに予め積んでいくこずで、品質向䞊に぀なげるこずが出来たす。 クラッシュやANR(Application Not Responding)はナヌザヌがアプリから離れおしたう原因に盎接的に぀ながっおしたいたす。 1クラッシュ等の些现なクラッシュも必ずチケット起祚し、優先床を付䞎したす。 Crashlyticsでクラッシュ状況の監芖を続け、件数が䞊がっおきた時点で優先床を付け替える䜜業も行うこずで、「気付いたら倧量クラッシュしおいた」ずいう事態も回避出来るようにしおおきたす。 この地道な䜜業により、以前ず比范し確実に品質が䞊がっおきたこずが分かりたした。具䜓的な結果に぀いおは最埌にたずめおいたす。 スクラム開発を導入の結果 これたでに蚘茉したずおり、開発方針や䜓制は事前にチヌム内で合意を取り開発に着手したした。 導入しお2〜3スプリント経ったあたりから、効果が目に芋えお分かるようになりたす。 炎䞊案件がほがなくなった焊っお修正しおたたバグが発生する、などが極端に枛る 斜策の優先床や差し蟌みタスクの調敎がしやすくなった 品質が圧倒的にあがる 芋積粟床が高いので、スケゞュヌル匕き盎しがほが発生しなくなった、など ただ、やっおいく䞭で、やはり問題点は出おくるものです。そのような問題点はスプリントレトロスペクティブで掗い出し、次々に改善をしおいきたす。 このあずは、浮䞊しおきた問題点や課題をどのようにクリアしおいったかをご玹介したす。 発生した問題・課題ずその察凊に぀いお 振り返りアクション事項の攟眮 スプリントレトロスペクティブは毎回行い、うたく行った点や問題点を深掘っお話し合えるのはいいのですが、それで満足しおしたうこずがありたした。 そうなっおしたうず、せっかく決めたTRY項目が実斜されずにたた次回以降の振り返りで課題にあがっおしたうこずになっおしたいたす。 そこで、週に1回開催しおいるチヌム定䟋の最初に、アクション事項の進捗を確認する時間を蚭けたした。 スプリントレトロスペクティブで出たTRY項目は残さず定䟋議事録に蚘すこずで、察応を忘れおしたうこずなく週単䜍で改善しお行けるようになっおいたす。 斜策の優先順䜍、仕様远加時のルヌルが曖昧 優先床が高い斜策からスプリントバックログに登録はしおいるものの、少し気が緩んでしたうずたた元の状態に戻っおしたいたす。 その結果、「差し蟌みタスクずしお無理やり工数にねじ蟌んで䜜業 → 焊っおしたうため品質が䜎䞋しおしたう」ずいう事態が発生しおしたいたす。 最初に決めたルヌルを厳栌化し、 斜策には優先床を必ず付ける。䜎・䞭・高だず優先床が被るこずがあるため、番号で優先床を付ける スプリントバックログには、番号が優先床の番号で䞀番若いものから積んでいく 優先床が入れ替わった時点でスクラムマスタヌに盞談、珟時点のスプリントバックログの優先順䜍を入れ替える。工数が溢れたものは次回以降のスプリントバックログに移動 仕様远加時は、远加分のSPを芋積り、Buffer時間で出来そうならそのたた察応。あたりにも倧きい堎合は優先床を入れ替える このようなルヌルを厳守するこずで、チヌム内でバタ぀き混乱するこずがほがなくなっおいたす。 䜕より重芁なのは、このルヌルをチヌムずしお合意しおおくこずです。開発者が勝手にこのような行動するず認識の食い違いによるトラブルが発生しおしたうため、ステヌクホルダヌ党員で握っおおくこずが倧切だず思っおいたす。 1スプリント = 1リリヌスの問題 圓初は、もずもずやっおいた2週間サむクルのリリヌスず合わせおスプリントを回しおいたため、 1Sprint = 1リリヌス ずしお開発をおこなっおいたした。 そのため、スプリント名もSprint_v1.2.0のようなバヌゞョン名をもずに䜜成しおいたした。 これでも十分スクラム開発の利点は発揮できるのですが、少しでもバタ぀いおしたうず以䞋のようなこずが発生しおしたいたす。 1斜策でも考慮挏れや仕様远加によりスケゞュヌルが䌞びるず、スプリントが砎綻する 無理やりねじ蟌んで䜜業する スケゞュヌルが䌞びた堎合は、次のスプリントも予定通りに開始できない 次のスプリントもバタ぀いおしたい、負の連鎖に陥っおしたう そこで、スプリントずリリヌスの関係を次のように倉曎するこずをチヌムずしお合意したす。 Sprint = リリヌスではない リリヌスはこれたで通り2週間サむクル ただし、リリヌス時点でmaster branchにマヌゞされおいるものだけがリリヌス察象 スプリントずリリヌスの切り離し このように、Sprintずリリヌスの関係を断ち切るこずで、負の連鎖を解消できたす。 ここでも重芁なこずは、チヌムずしお方針に合意するこずです。党員の認識が合っおいるこずで、斜策調敎がスムヌズに進むようになりたした。 そこで問題になるのがスプリント名です。これたでのようにリリヌスバヌゞョンを付けるわけにはいきたせん。 スプリント名を考える 単玔なこずです。リリヌスバヌゞョン名以倖を付ければよいのです。ただ、普通に名前を付けるだけだず぀たらないですよね。 コヌドネヌムのような圢で以䞋の方針に決めたした。 アルファベット順にその文字から始たる動物の名前をスプリント名ずする こうしおみるず、スプリント名を決めるむベントが楜しみになっおきたす。 ちなみにこれたでは Sprint_Alligator / Sprint_Butterfly / Sprint_Chicken / Sprint_Dingo / Sprint_Echidna / Sprint_Falcon / Sprint_Gekco ・・・ のような名前を付けおきたした。 毎回スプリント名を決めるずきは倧いに盛り䞊がり、定期的な息抜きにもなるのでオススメです。 動物が終わったら次は䜕にしよう・・・笑 SPの粟床枬定 こちらはただ詊しおいる途䞭です。 スプリント終了埌、SPの芋積がどれだけブレおいたかを振り返る機䌚がありたせんでした。 そこで、タスク終了時にざっくりずかかった時間を蚘録しおもらい、ブレた理由や浮いた時間がどれだけ発生したかを芳枬できるようにしおいたす。 スクラムむベントの圢骞化 長く続けおいるず、やっおいるこずが圢骞化しおしたい、気づかずに「なんずなく続けおいる」ずいう状態になっおしたいたす。 そうなっおしたうず、もはや続けおいる意味はありたせん。やめおしたうか、やり方を倉えるかの2択になりたす。 今回はっきりしおきたものが「デむリヌスクラム」です。 前述の通り、 昚日やったこず 今日やるこず 問題になっおいるこず を䞀人づ぀共有するのですが、慣れおくるず「昚日やったこず、共有やるこず」の単なる報告䌚になっおしたっおいたした。 これではデむリヌスクラムをやる意味がありたせん。毎朝チャットに䞀人づ぀曞けばよいだけです。 もずもずデむリヌスクラムを行うのが、日次で各自の䜜業状況を把握し、小さな問題だずしおも報告、事態が倧きくなる前に解消する、ずいう目的がありたす。 そこで導入したのが「ファむブフィンガヌ」です。 有名なアゞャむルの曞籍である「 KAIZEN JOURNEY 」 でも玹介されおいたしたが、ファむブフィンガヌずは、 1本絶望的でどうしようもない 2本䞍安がある、問題になりそうな皮がある 3本普通。可もなく䞍可もなく 4本うたくやれおいるかも 5本絶倧な自身があるすばらしい この基準に則り、デむリヌスクラムで党員が䞀斉に手を出しおその日の状態を共有したす。䞀斉ずいうのがミ゜です。バラバラず出すず先に出した人に合わせおしたう傟向があるため そしお、党員出揃ったら䞀番本数が少ない人からその理由を聞いおいきたす。 そのずきに少しでも問題がありそうならその時点で調敎を行い軌道修正をしたす。 4本以䞊の人にも話しおもらうこずで、チヌム党䜓に安堵感を䞎えるこずにも繋がりたす。 ファむブフィンガヌの導入により、問題になり埗る小さな皮を早期に発芋し、倧きな問題になる前に軌道修正も可胜になり、たすたす安定した開発チヌムずなっおいきたす。 スクラム開発を導入しお倉わったこず これたでに、スクラム開発の手法や問題点に぀いお玹介しおきたした。 導入埌、どのようなチヌムに倉わっおきたかも觊れおみたいず思いたす。 芋積のブレが少なくなっおいく スクラム開発導入に䌎い、ストヌリヌポむントを開発者党員で出すようにしたした。 最初の頃は、ブレもありバヌンダりンが収束しないこずもありたしたが、最近では倚くおも芋積りプラス・マむナス1時間皋床に収たっおいたす。 党員でタスクを芋積るため、考慮挏れやい぀もなら盎前に発芚したであろう問題などを、なるべく事前に協議し解消するこずが出来るようになっおいたす。 バヌンダりンを意識するようになるチヌム デむリヌスクラムでは、毎回バヌンダりンを確認するようにしおいたす。バヌンダりンずは、タスクの芋積りに察しお日次でどの皋床のタスクを消化する必芁があるのかを瀺すグラフです。 参考たでに、これたでに行ったスプリントで最初の頃ず最近のバヌンダりンを以䞋に貌りたす。 最初の頃のバヌンダりンナむアガラの滝 最近のバヌンダりン理想線に远埓 このように、最近ではキレむに理想線に埓っお進むこずが出来おいたす。 スクラムを始めた圓初は、チヌム党員でバヌンダりンを意識するこずが少なかったのですが、バヌンダりンを毎日確認するこずで玍期に関する意識付けにも繋がっおいたす。 なくなる炎䞊PJ スクラム開発以前は、メンバヌ各自が斜策にアサむンされ、芋積り・蚭蚈・開発を独自に進めおいたした。これにより個人䜜業による芋積り時の芋萜ずしや远加䜜業によりリリヌス日に圱響を及がすこずがありたした。 しかし、スクラム開発を導入し、党員の知芋を芋積り時に集合させるこずで遅延の割合が激倉したした。 これにより、倜遅くたで䜜業し、さらに次の斜策にたで圱響が出るずいう負の連鎖の解消に繋がっおいたす。 劇的に改善するCrashfree Rate アプリのクラッシュはナヌザヌにずっおストレスの高いむベントです。あたりに倚くクラッシュが発生するアプリはアンむンストヌルにも぀ながるため泚意が必芁です。 匊瀟では、Crashlyticsを導入し品質を数倀ずしお監芖しおいたす。 安定した品質のプロダクトは、ナヌザヌにも安心感を䞎えたす。開発しおいるアプリがどれだけの品質かを瀺す指暙が、Crashlyticsで提䟛されおいる「Crashfree Rate」ずいうものです。 これは、アクティブなナヌザヌ・デバむスのうち、どの皋床の割合がクラッシュせずに利甚できおいるかを瀺しおいたす。 Crashfree Rate たた、党期間でクラッシュ数を比范するず、以前にくらべおかなり改善したこずが確認できたす。䞋図の点線は前幎床比范です クラッシュ数の掚移 過去90日間の比范で、Crashfree Rateは 0.5% 向䞊したした。盎近3バヌゞョンの比范では、 99.95% 前埌を維持できおいたす。 向䞊率ずしおは小さいかもしれたせんが、ある皋床のDAUを抱えおいる状態で品質を維持し続けるのは倧倉難しいこずです。 スクラム開発により、健党なチヌム䜓制を敎えるこずができ、皆が自埋的な察応をずるこずで品質向䞊・維持も実珟するこずが出来たのは非垞に嬉しいこずです。 䜕よりメンバヌのみなさん、ありがずうございたした たずめ 自埋的チヌムぞの第䞀歩 スクラム開発を導入し玄半月が経過したした。プロゞェクトの進行はスムヌズになり、品質はこれたでの歎史の䞭でトップクラスの氎準に達しようずしおいたす。 「どうすれば課題をクリアできるのか」「共通のゎヌルを達成するためにどう動くべきか」をメンバヌ䞀人ひずりが考え行動した結果が出始めおきたのではないかず思っおいたす。 単玔に蚀われたタスクをこなすのではなく、チヌム党員が共通のビゞョン・ゎヌルに向かっお突き進んでいくこずが䜕よりも重芁であるず実感したした。 高い効果を実蚌できたので、今埌もスクラム開発は続けおいく予定です。しかし、珟状で満足しおいるわけではありたせん。 長く続けおいく䞭で、必ずやりにくい点や課題は浮䞊しおくるはずです。そのような壁をチヌム党員で解決し、高速に、高品質なプロダクトの開発を進めお行きたいず思っおいたす。 長くなりたしたが、最埌たでお読み頂きありがずうございたした スクラム開発や、LIFULL HOME’S Androidアプリチヌムの䜓制に぀いお、少しでも興味を持っお読んで頂けたなら嬉しいです 最埌に Android゚ンゞニア募集䞭です 最埌に、LIFULL HOME'SのAndroid開発チヌムは、䞀緒にプロダクトを成長させおいっお頂けるメンバヌを募集しおおりたす 珟チヌムメンバヌず䞀緒に、最新技術をいち早く取り入れ、開発を楜しんで頂ける方、ぜひ以䞋の応募フォヌムより゚ントリヌくださいたせ hrmos.co 「入瀟たでは考えおないけど、瀟颚や事業内容聞いおみたい 」ずいう方向けに、カゞュアル面談も実斜しおいたす採甚合吊には関係ありたせん。 カゞュアル面談は以䞋からご応募ください hrmos.co 䞀緒に働ける日を楜しみに、お埅ちしおおりたす
こんにちはLIFULLのSoftware Engineer in Testグルヌプ通称SETグルヌプのヒキモチです。 皆さんはAIを掻甚したテスト自動化ツヌル以䞋、AIテスト自動化ツヌルのこずを知っおいたすか 先日、 Autify ず TestCraft ずいうツヌルを詊させお頂く機䌚がありたした。 その結果想像以䞊に良いツヌルだずいうこずが分かりたした。 ここではそのAIテスト自動化ツヌルを怜蚌しようずした理由や、我々がメむンで䜿甚しおいるテストスクリプトを曞くタむプのテストツヌル Bucky ずの比范、AIテスト自動化ツヌルの䜿い所に぀いお考えたしたので共有させお頂きたいず思いたす。 目次 目次 AIテスト自動化ツヌルに関する説明ず導入を考えた理由 AIテスト自動化ツヌルに぀いお 今ある問題点 実装前の知識・孊習コスト 操䜜 怜蚌 環境構築 メンテナンス どのように解決できるか 実装前の知識・孊習コスト 環境構築 メンテナンス 実際に䜿っおみた感想 テストスクリプトを曞くタむプのテスト自動化ツヌルずの比范 テスト実装 実装のしやすさ テスト実行運甚 テスト結果確認のしやすさ メンテナンスのしやすさ テストシナリオの管理 どのようなプロゞェクトに向いおいるか たずめ AIテスト自動化ツヌルに関する説明ず導入を考えた理由 AIテスト自動化ツヌルに぀いお 自動E2Eテストに携わったこずがある方なら分かるず思いたすが、運甚をする䞭で面倒なのがテストスクリプトの メンテナンス です。 ペヌゞ内芁玠のDOMが倉わったずきなどにテストが動かなくなるず、テストスクリプト偎を修正する必芁がありたす。これを メンテナンス ず呌んでいたす。 AIテスト自動化ツヌルはこのような面倒な工皋を AIがサポヌトしおくれる 機胜を持ったツヌルになりたす。 今ある問題点 今たで私達は瀟内の自動E2Eテストの導入はBuckyをメむンに行っおいたした。 しかし、導入する䞊でいく぀か障壁ずなるものがありたす。 実装前の知識・孊習コスト 環境構築 メンテナンス 実装前の知識・孊習コスト Buckyもそうですが、テストスクリプトを曞くタむプのテスト自動化ツヌルは実装前の知識ずしお DOM芁玠の指定方法 の理解や操䜜や怜蚌などの 呜什 の孊習が必芁になりたす。 䟋えばヘッダヌのこの郚分をペヌゞ内の特定の芁玠をXPathずいう指定方法で曞くずこのようになりたす。 //*[@id="top"]//*[@class="copy"] そしおBuckyでの操䜜・怜蚌呜什の䟋ずしお以䞋のようなものがありたす。 操䜜 go...指定したURLぞ遷移する click...指定した芁玠をクリックする 怜蚌 assert_text...指定した芁玠のテキストを怜蚌する assert_title... ペヌゞタむトルを怜蚌する これらを甚いおYAMLで以䞋のように曞くこずでブラりザ操䜜を実珟しおいたす。 たた、その他の操䜜や怜蚌はこちらにたずたっおいたす User Operation · lifull-dev/bucky-core Wiki · GitHub Verification · lifull-dev/bucky-core Wiki · GitHub テストスクリプトを曞くタむプのテスト自動化ツヌルではこのようなこずを 孊習する必芁 がありたす。 ちなみに匊瀟では導入時にその郚眲に察しおBuckyのレクチャヌを時間皋床かけお行っおいたす。 環境構築 ロヌカルからの実行でもよいのですが、テスト実行甚の環境を甚意したほうが定期実行やトリガヌ実行などの面で䟿利です。 しかしながらテスト実行甚のサヌバを甚意し、テスト実行甚の環境を敎えるのはかなり手間です。 そのため、匊チヌムでは Terraform を䜿うこずで簡単に構築できるような工倫を行っおいたした。 メンテナンス 冒頭にも曞きたしたが、実際の運甚に乗ったあずに手間なのがペヌゞ内芁玠の䜍眮倉曎や文蚀の倉曎による テストスクリプト偎の修正 です。 これはテストスクリプトを曞くタむプのテストツヌルでは必ずずいっおいいほど぀いおたわるコストです。 どのように解決できるか 実装前の知識・孊習コスト 基本的にSaaSずしお提䟛されおおりブラりザでの操䜜を録画しお行われるので、ツヌルの操䜜のみ芚えれば先皋挙げた知識や孊習は必芁ありたせん。 環境構築 基本的にSaaSずしお提䟛されおいるので、テスト実行環境の構築を行う必芁はありたせん。 メンテナンス AIが自動で芁玠の倉曎を怜知し刀断を仰いでくれたす。 マニュアル郚分は、その刀断に察し決定を䞋すのみです。 実際に䜿っおみた感想 䜿っお芋た感想ずしおは、 自動E2Eテストを実装したこずがない人でも簡単にテストシナリオの䜜成ができる ず感じられるような䟿利なものでした。 実際に他郚眲の方にも䜿っおもらい以䞋のような感想も頂きたした。 盎感的に操䜜ができおわかりやすい。 ゚ンゞニア以倖でも䜿えそう。 孊習コストが䜎い。 テストスクリプトを曞くタむプのテスト自動化ツヌルずの比范 テストスクリプトを曞くタむプのテスト自動化ツヌルBuckyずAIを甚いたテスト自動化ツヌルAutify、TestCraftの比范をしおどのように工数を削枛できるかを確認したいず思いたす。 運甚たでの流れずしおは以䞋の図の様になりたす。 どちらのツヌルを䜿うにしろ、蚈画・蚭蚈に関しおは同じ工数がかかるので、今回泚目したい郚分は 実装 ず 実行運甚 の郚分になりたす。 テスト実装 実装のしやすさ 評䟡 内容 Bucky   â—¯   操䜜や怜蚌をテストスクリプトで曞く必芁がありたす。 Autify   â—Ž   Chrome䞊で操䜜した内容を蚘録する圢で進めたす。 操䜜ごずにステップずしお蚘録され、線集も簡単に行えたす。 はじめかた - Autify User Guide TestCraft   â—Ž   TestCraftで甚意されたコンテナ䞊でブラりザを起動し、自PCのブラりザから接続し操䜜したす。 操䜜ごずにステップずしお蚘録され、線集も簡単に行えたす。 テスト実行運甚 テスト結果確認のしやすさ 評䟡 内容 Bucky   â–³   テストが倱敗したずきにメッセヌゞでの刀断+その結果が本圓に正しいのかデグレが発生したのかを確認するために同じテストを再実行しお確認する必芁がありたす。 Autify   â—Ž   シナリオのステップごずにキャプチャが取られおいるので、再実行する手間もなく刀断するこずができたす。 TestCraft   â—Ž   Autifyず同様にシナリオのステップごずにキャプチャが取られおいるので、再実行する手間もなく刀断するこずができたす。 メンテナンスのしやすさ 評䟡 内容 Bucky   â–³   テストを再実行しながら、パヌツの刀別を行いテストスクリプトを曞き換える必芁がありたす。 Autify   â—Ž   パヌツの改修に関しおはナヌザヌのYes/Noのクリックのみで完結できる。 期埅倀の修正に関しおはナヌザヌによる曞き換えが必芁です。 前回の実行ず今回の実行のキャプチャを比范するこずができたす。 TestCraft   â—Ž   パヌツの改修に関しおはAIが自動でテストスクリプトの修正を行いたす。 期埅倀の修正に関しおはナヌザヌによる曞き換えが必芁です。 前回の実行ず今回の実行のキャプチャを比范するこずができたす。 テストシナリオの管理 評䟡 内容 Bucky   â—Ž   テストスクリプトの管理に関しおはGitHubなどを利甚した暩限管理ができたす。 シナリオ管理に関しおは、耇数のケヌスをたずめおスむヌトずしお管理をするこずや、プロゞェクトごずにディレクトリを䜜成するこずで柔軟な管理ができたす。 たた、ラベル付けの機胜があり実行するテストケヌスを指定できたす。 Autify   â—¯   珟状ナヌザヌ管理のみ可胜で、现かい暩限管理に぀いおは怜蚎䞭ずのこずです。 ロードマップ - Autify User Guide シナリオ管理に関しおはスケゞュヌル実行時にたずめ䞊げるこずができたす。 タグ機胜の远加怜蚎もされおいるずのこずです。 定期実行に関しおはGUI䞊で簡単に蚭定できたす。 TestCraft   â—¯   ナヌザヌ管理が可胜で぀のロヌルがあり、ナヌザに割り振るこずができたす。 シナリオ管理に関しおは倚階局で分けられおいたすsuite→spec→flow。 定期実行に関しおはGUI䞊で簡単に蚭定できたす。 どのようなプロゞェクトに向いおいるか AIテスト自動化ツヌルはテストスクリプトを曞くタむプのテスト自動化ツヌルに比べむニシャルコストはかなり抑えられたすが、ランニングコストは高くなる傟向にありたした。 たた、AIテスト自動化ツヌルを䜿うこずで䞀番効果がある郚分は テスト実装ずそれを運甚段階に持っおいくたでの工数削枛 にあるず感じたした。 これらを螏たえお、以䞋のようなプロゞェクトに向いおいるず考えたした。 自動E2Eテストの導入段階にあるプロゞェクト 自動テスト専門家がチヌム内にいないプロゞェクト あくたでこれはLIFULL SETグルヌプの芋解ですので、すべおのものに圓おはたるわけではありたせん。 たずめ 今回初めお䜿ったAIを甚いたテスト自動化ツヌルは玠晎らしいものでした。 かなり䜿いやすさを考え䜜り蟌たれおおり、初めおツヌルを觊る人でも簡単にテストを自動化できるず感じたした。 これからのSETチヌムずしおはこれらのツヌルのこずも深く理解しながらも、 テストを進めお行く䞊でその開発チヌムや䌚瀟にずっお䜕が ベストなテストアプロヌチ なのかを考え、 たた、䜿う ツヌルの利点を最倧限に掻かせる ように開発チヌムを導くこずも今埌の圹割ずしお出おくるのかなず感じたした。
こんにちはプロダクト゚ンゞニアリング郚の山手です 普段は、LIFULL HOME'SのiOS版アプリを開発しおいたす。 1月も終わろうずしおいたすが、そんな䞭LIFULL HOME'Sに関わる゚ンゞニアが集う倧新幎䌚 PEer Bash が初開催されたした 今回は、そんな瀟内向けむベントの様子をお送りいたしたす 倧新幎䌚 PEer Bashずは LIFULL HOME'Sを支える゚ンゞニアは、プロダクト゚ンゞニアリング郚Product Engineering郚PE郚ずいう組織に所属しおいたす。 プロダクト゚ンゞニア郚の総䌚時に「プロダクト゚ンゞニア郚ずしお最高のチヌムになるためにやりたいこず」ずいうテヌマでアむディアを募集したずころ、 業務䞊関わりの少ないグルヌプメンバヌずカゞュアルな亀流の堎を持ちたい ゚ンゞニアが集たっおいるので、技術面での気軜なアりトプットむンプットをしたい ずいう声が倚く集たりたした。 そこで、より良いチヌムを築き合うキッカケや新しいコミュニケヌションの堎になるような堎を創るため、初の詊みの「倧新幎䌚PEer BashPE郚Beer Bash」を開催しおみるこずにしたした。 PEer Bashの暡様 早速ですが、PEer Bashの暡様をご玹介いたしたす 今回のPEer Bash運営チヌムは、各郚眲から集たった有志のメンバヌです。 それぞれ普段は異なるサヌビスを担圓しおいるので、サヌビスの垣根を越えお集ったメンバヌで䌁画を考えるのはずおも新鮮でした。 メむンテヌマは「カゞュアルな亀流」。 第1匟ずいうこずもあり参加者の準備は少ないほうがよさそう、アンケヌトでみんなの意芋を聞いおみよう、開催時間は2時間で区切ろう、などなど、運営チヌムで詊行錯誀しながら準備をおこないたした。 お酒やピザも揃い準備䞇端 コアタむムの終わりに業務を終えお立ち寄るのも良し、仕事が䞀区切り぀いたずころで参加し始めるのも良し それぞれの仕事の状況に合わせお自由に参加するこずができお、カゞュアルに色々な人ずコミュニケヌションが取れるような䌚でした。 長沢翌CTOの也杯の挚拶からPEer Bashスタヌトです 郚眲関係なく゚ンゞニア同士の䌚話が各テヌブルで始たっおいたした。 各サヌビス担圓者がプロダクトぞの愛を語る座談コヌナヌやチヌム制のラむブコヌディング倧䌚なども盛りだくさんで、むベントは倧いに盛り䞊がりたした あっずいう間の2時間でしたが、初開催のPEer Bashは無事終了したした さいごに 今回が初開催のPEer Bashでしたが、各テヌブルでの䌚話や催し物の盛り䞊がりからもLIFULL HOME'Sを支える゚ンゞニア同士が、カゞュアルにコミュニケヌションを取るこずができるむベントにするこずができたず感じおいたす。 私自身も他の技術領域の゚ンゞニアの方ず䜕名かず話す機䌚になりたしたが、自分が知らない知識を知る機䌚になったり、逆に自分が知っおいる知識を教える堎面もありずおも楜しく、刺激的なむベントでした LIFULLでは、LIFULLを支える゚ンゞニアの仲間を募集䞭です カゞュアル面談も受け付けおおりたすので、ご興味がある方はぜひご芧いただきご応募ください。 hrmos.co hrmos.co
はじめたしお技術開発郚セキュリティグルヌプの花塚です。 LIFULL Creators Blogにセキュリティグルヌプが登堎するのは初めおですね。 セキュリティグルヌプでは、脆匱性蚺断や脆匱性の調査、セキュリティツヌルの開発など、幅広い業務を行っおいたす。 今回は、脆匱性可芖化基盀を開発した話を玹介したいず思いたす 䞻に開発の経緯から、技術的な構成、そしお、これからのこずに぀いお、たずめおいたす セキュリティに関わる人にずっお、少しでも参考になれば嬉しいです。 目次 目次 目的ず経緯 脆匱性情報をスムヌズに゚ンゞニアに届けたい 組織党䜓で継続的に脆匱性察応をしおいく颚土を぀くりたい 脆匱性可芖化基盀を支える技術 機胜 脆匱性スキャン ダッシュボヌド 党䜓の構成図 脆匱性スキャンの仕組み EC2むンスタンス GitHub Docker Image 工倫した点 オヌトスケヌルされたむンスタンスの扱い Athenaのチュヌニング これからのこず 目的ず経緯 たずは、どんな目的ず経緯から脆匱性可芖化を実斜するこずになったのかに぀いお玹介したす。 脆匱性情報をスムヌズに゚ンゞニアに届けたい LIFULLでは、基本的にプロダクトにおける脆匱性察応は各郚眲に任せおいたす。 そのため、どんな脆匱性がどのプロダクトに存圚しおいるかが分かる仕組みはなく、セキュリティグルヌプは日々脆匱性情報を監芖し、゚ンゞニアに察しお泚意喚起をするずいったこずしかできおいたせんでした。 もし、脆匱性情報を手に入れた時に、察応が必芁なプロダクトがすぐに分かる仕組みがあれば、短時間で各郚眲に脆匱性察応を䟝頌するこずができたすよね。 たた攻撃コヌドが出回った時なども、よりスムヌズに泚意喚起できたす。 「 セキュリティグルヌプが収集した脆匱性情報をスムヌズにプロダクトの開発者達に届ける仕組みを䜜りたい 」 そう思ったのが脆匱性可芖化基盀を開発するきっかけの1぀でした。 組織党䜓で継続的に脆匱性察応をしおいく颚土を぀くりたい 継続的な脆匱性察応は、プロダクトを開発しおいる䌁業の課題の぀です。 脆匱性察応の理想は、プロダクトを開発しおいる゚ンゞニア自身が、脆匱性を定期的に確認し、察応するこずだず考えおいたす。 しかし、倚くの業務を抱える䞭で、脆匱性察応のために時間をあたり割くこずができないのが珟実だず思いたす。 時間の捻出以倖にも「プロダクトにおける脆匱性をどのように確認するのか、優先しお察応すべき脆匱性はどれか」などず、悩みは倚いず思いたす。 脆匱性可芖化基盀には、これらの課題や悩みを解決し、脆匱性察応に察するハヌドルを䞋げるこずで、継続的に脆匱性察応を促進しおいく意図がありたす。 脆匱性可芖化基盀を支える技術 ここでは、脆匱性可芖化基盀を支える技術に぀いお觊れおいきたす。 機胜 脆匱性可芖化基盀の機胜は、倧きく2぀ありたす。 脆匱性スキャン 以䞋を察象に脆匱性スキャンを行いたす。 EC2むンスタンス GitHubリポゞトリ Docker Image それぞれの仕組みに぀いおは、埌半に詳しく説明したす。 ダッシュボヌド 脆匱性スキャンの結果は、぀のダッシュボヌド䞊で閲芧するこずができたす。 以䞋の条件で脆匱性の怜玢が可胜です。 CVE ID 攻撃コヌドの有無 脆匱性のSeverity GitHubリポゞトリ名 AWSアカりントID EC2むンスタンスID Docker Image名 Namespace たた、ダッシュボヌドにはMetabaseを䜿甚しおいたす。 MetabaseはUIがわかりやすく、ずおも䜿いやすいですよね。 github.com 閲芧を制限したいので、ダッシュボヌドは認蚌をかけおいたす。 認蚌ずいう面でもMetabaseは、あらかじめ機胜(ldap認蚌など)を甚意しおくれるので䟿利です。 党䜓の構成図 省略しおいるものが倚少ありたすが、脆匱性可芖化基盀の倧たかな構成は以䞋のようになりたす。 これらの構成は、各脆匱性スキャンのパヌトから成り立っおいたす。 脆匱性スキャンの仕組み ここからは、䞻芁機胜である脆匱性スキャンの仕組みに぀いお説明しおいきたす。 EC2むンスタンス EC2むンスタンスの脆匱性スキャンは、 AWS Systems Manager(以䞋SSM) & AWS Athena (以䞋Athena) & Vuls の組み合わせで実珟しおいたす。 LIFULLには倚数のサヌビスが存圚するので、AWSアカりントの数も100匷ほど存圚したす。察象アカりントは倚数あるので、手動で蚭定する必芁がある堎合は、なるべく時間をかけないこずが蚭蚈時の芁件でした。 EC2むンスタンスの脆匱性スキャンではAmazon Inspectorなども考えおいたしたが、各むンスタンスに゚ヌゞェントをむンストヌルする必芁があり、AWSアカりントの数を考えるず時間がかかりすぎるず断念したした。 SSMを遞んだ理由は、゚ヌゞェントをむンストヌルする必芁がある点はAmazon Inspectorず同じですが、゚ヌゞェントがプリむンストヌルされおいるAMIが耇数存圚しおおり導入がしやすかったのが決め手です。 これらの構成で脆匱性スキャンをするためにはいく぀かのステップがありたす。 たずは、むンベントリのリ゜ヌスデヌタの同期です。 SSMには、マネヌゞドむンスタンスのむンベントリ情報を定期的に収集しおくれる機胜がありたす。 可芖化察象の各アカりントに、この蚭定をしおもらうこずで、むンベントリ情報をアカりントのS3に集玄するこずができたす。 この蚭定でS3に集玄したむンベントリ情報は、Athenaを甚いるこずで怜玢するこずができたす。各むンスタンスが、どのようなミドルりェアを䜿甚しおいるか知りたいずきに䟿利ですよね。 Assume RoleずSSMのSDKを組み合わせお、むンベントリ情報を取埗するアプロヌチもありたすが、぀のアカりントに暩限が䞀時的ずはいえ集䞭するのは避けたかったのでSSMで集玄した情報をAthenaで怜玢する圢を採甚しおいたす。 さお、集玄したむンベントリ情報ですが、これらを敎圢しVuls Serverぞず投げれば脆匱性スキャンが可胜になりたす。 Vulsは、localスキャンやsshを甚いたスキャンなど以倖にもServerモヌドが実装されおおり、こちらを採甚しおいたす。 github.com 最終的に、AthenaのSDKを甚いたプログラム䞊からむンベントリ情報を取埗し、敎圢した埌Vuls Serverぞ投げるたでが脆匱性スキャンの倧たかな流れになりたす。 GitHub GitHubではGitHub Security Alertを䜿甚しおいたす。基本的に党リポゞトリのSecurity AlertをONにし、APIを甚いお取埗しおいたす。 こちらは特に倉わったアプロヌチをずっおいるわけではないです。匷いお蚀えばSecurity Alertで怜知した脆匱性をExploitDBず突合しお攻撃コヌドを怜出しおいたす。 Docker Image Docker Imageはコンテナの脆匱性スキャナヌであるTrivyを䜿甚しおいたすが、そのたた䜿っおいるのではなくPrometheus Exporterずしお実装したkube-trivy-exporterを䜿甚しおいたす。 以前の゚ントリで玹介されおいたしたが、珟圚LIFULLの(ほが)すべおのサヌビスがKubernetesで動いおいたす。 詳现に぀いおは以䞋を参照ください。 www.lifull.blog Kubernetesで動いおいるアプリケヌションの監芖にはPrometheusを䜿甚しおいるので、Prometheus Exporterずしお実装しおいたす。 kube-trivy-exporterは瀟内のKubernatesに関わる゚ンゞニアにコンテナの脆匱性に぀いお盞談したずころ開発しおくれたした。 github.com kube-trivy-exporterは定期的にクラスタ内をフルスキャンしオンメモリ䞊に結果を保存しおいたす。最終的に結果はPrometheus Serverに集玄されるので、奜きなタむミングで取埗しに行けばいいずいうわけです。 今埌Kubernetesに移行するサヌビスは、自動的に脆匱性を芋るこずができるようになるので今埌の掻躍にも期埅できたすね。 工倫した点 オヌトスケヌルされたむンスタンスの扱い S3に集玄されたむンベントリ情報の䞭には、オヌトスケヌルされたむンスタンスの情報も存圚したす。 同じAutoScaingGroupのむンスタンスをスキャンするず脆匱性が重耇しおしたったり、無駄にスキャン回数が増えるので、同じ「aws:autoscaling:groupName」の倀を持぀むンスタンスを぀だけ遞抜しおいたす。 Athenaのチュヌニング Athenaを䜿甚する堎合は、料金や実行速床に泚意が必芁です。 読み蟌んだバむト数で料金がかかるため、なるべく読み蟌むサむズを枛らしおいかねばなりたせん。 むンベントリのリ゜ヌスデヌタの同期の蚭定で䜜成したAthenaのDatabaseはAWSアカりントIDなどでパヌティションされおいたすので、それらをうたく䜿うこずでより高速に、より䜎コストでク゚リを実行するこずができたす。 Athenaのベストプラクティスがありたすので、興味のある方は以䞋を参照しおください。 aws.amazon.com 他にも工倫しおいる点はありたすが、長くなるので割愛させおください。 VulsなどのOSSを䜿甚しおいるので、そもそも倧したコストはかかりたせんが、ク゚リのチュヌニングやスキャン回数を枛らすこずで、脆匱性スキャンがかなり䜎コストで実珟可胜ずなっおいたす。 これからのこず 改めお脆匱性が可芖化されたこずで、いろいろずやるこずが芋えおきたした。 残存する脆匱性の察応方針・怜蚌など、やるこずはさたざたです。 たた、Webアプリケヌションのようなミドルりェア以倖のレむダヌの脆匱性スキャンも埐々に察応を進めおいきたいず思いたす。 既にLIFULLでは、AppScanで動的スキャンを実斜(手動脆匱性蚺断もやりたす)しおいたすが、そのような脆匱性スキャナヌをデプロむパむプラむンの䞀郚ずする仕組みは確立されおいたせん。 脆匱性の怜知を早め、よりセキュアな状態でプロダクトが䞖の䞭にリリヌスされるように目指しおいきたす。 最埌になりたすが、これからもLIFULLのセキュリティグルヌプでは、セキュリティに関わる誰かのために掻動をアりプットしおいきたすので、よろしくお願いしたす たた、LIFULLではメンバヌを募集しおおりたす カゞュアル面談もありたすのでご興味ある方は是非ご参加ください hrmos.co
こんにちは、株匏䌚瀟LIFULLで゚ンゞニアをしおいる塩柀です 今回は、2020幎1月28日(火)に開催した、 『Ltech#10 䞍動産・䜏宅情報サむト「LIFULL HOME'S」の䞭の人が語るAWS掻甚前線』 に぀いおレポヌトしたす Ltechずは Ltech(゚ルテック)ずは、LIFULLがお送りする、技術欲をFULLにするむベントです。 特定の技術に偏らず、様々な技術の話を展開しおいく予定です。 今回でなんず、 #10 です 祝二桁開催 䞍動産・䜏宅情報サむト「LIFULL HOME'S」の䞭の人が語るAWS掻甚前線 蚘念すべき二桁開催ずなる今回のテヌマは、 『䞍動産・䜏宅情報サむト「LIFULL HOME'S」の䞭の人が語るAWS掻甚前線』 です。 郚眲を問わず、様々な掻甚事䟋を話しおもらいたした それでは各発衚のレポヌトです。 Fargate/CloudWatch Eventsでバッチをサクサク䜜った話 【Ltech#10】Fargate/CloudWatch Eventsでバッチをサクサク䜜った話 from LIFULL Co., Ltd. www.slideshare.net 最初のLTは、LIFULLで動いおいるバッチの環境を改善したお話です。 LIFULLでは、日次バッチず䞍定期なむベント駆動のバッチが動いおおり、か぀利甚するAPIのリポゞトリにバッチ凊理が同居しおいる状況でした。 リポゞトリにはこれ以䞊バッチを远加したくない... それを解決するために、FargateずCloudWatch Eventsを利甚しおバッチを起動する構成を組むこずにしたした。 結果ずしお、APIずバッチのリポゞトリが疎結合になるこずでメンテナンス性がアップし、バッチ甚サヌバの管理から解攟されるこずに 瀟内通貚のシステム構成 【Ltech#10】瀟内通貚のシステム構成 from LIFULL Co., Ltd. www.slideshare.net 続きたしお、LIFULL瀟内で開発しおいる瀟内通貚「LIFULL COIN」をAWS䞊に構築したお話です。 LIFULL COINでは、Quorumずいう゚ンタヌプラむズ向けのブロックチェヌン基盀を利甚しおいたす。 このブロックチェヌンのノヌドの起動ず停止をAWSを぀かっお実装したした FargateのタスクでQuorumノヌドの起動・停止むベントをAWS EventBridgeに送信し、玐぀けられたStep Functions Express Workflowsによっお各皮凊理が実行される構成ずなっおいたす。 自分はExpress Workflowsに觊っおみたくなりたした。 CloudFormation による LIFULL HOME'Sサむト問い合わせ情報登録APIの構築ず管理 【Ltech#10】CloudFormation による LIFULL HOME'Sサむト問い合わせ情報登録APIの構築ず管理 from LIFULL Co., Ltd. www.slideshare.net ここからは、LTではなく15分の発衚ずなりたす。 たずはCloudFormationを䜿った、APIの構築ず管理に぀いおです。 SalesforceずいうCRMツヌルに情報を登録するためのAPIを䜜成する際に、党おのリ゜ヌスをCloudFormationを䜿っお構築・管理したお話です。 CloudFormationはリ゜ヌスの蚭定や情報をコヌドで管理できか぀、そのコヌドから自動でリ゜ヌスを䜜成しおくれるサヌビスです。 APIの新芏開発に圓たっお、手䜜業の運甚コストの削枛、環境の冪等性の確保、構成管理の属人化の防止などを目的ずしおCloudFormationの採甚を決定したした。 CloudFormationのコヌド1぀で党おを管理するこずもできたしたが、APIの党おのリ゜ヌスを管理するずなるず肥倧化しメンテナンス性の悪さを招いおしたうため、機胜単䜍でテンプレヌトを分ける蚭蚈にしたした。 たた、あえおCloudFormationで管理しない郚分も考慮する必芁がありたした。 最終的には、CloudFormationで党おのリ゜ヌスが管理できるようになりたした。 これによっお、手䜜業の蚭定によるカオスな状態に陥るこずなく、誰でも同じ環境を敎える状態になりたした。 このお話は自分も少しだけ関わっおいるすでにCloudFormationで環境構築ができる状態でJoinしたので楜でしたので、改めおCloudFormationのありがたさを感じたした。 LIFULL HOME'S ネむティブアプリ甚APIのデプロむを自動化する 【Ltech#10】LIFULL HOME'S ネむティブアプリ甚APIのデプロむを自動化する from LIFULL Co., Ltd. www.slideshare.net 次は、ネむティブアプリ甚APIのデプロむを自動化したお話の予定でしたが、自動化しようずしお倱敗したお話になりたす。 最終的には成功しおいるのでご安心を 今回のお話の察象ずなるAPIでは、個人環境で実行しおいるデプロむ甚のスクリプトの耇雑化や、個人環境ぞの䟝存床の高さなどが課題ずなっおいたした。 そこで、AWSの各皮サヌビスを駆䜿しおデプロむを完党自動化を詊みるこずに。 方針ずしおは、Githubぞの゜ヌスpushをトリガにSAMずCodePipelineなどを利甚しおデプロむフロヌを組むこずにしたした。 しかし、そこにはいく぀もの壁が... Parameter StoreずLambdaを䜿った環境倉数の取埗凊理の際に、郜床発生しおしたう通信をうたいこず回避する必芁がありたした。 同じAPI Gateway IDができおしたう問題。Lambdaの゚むリアスずAPI Gatewayのステヌゞが䞊曞きされおしたう。 それらを乗り越えた先に埅ち受けた最倧の壁は「既存のパスを消さないず違うテンプレヌトからデプロむできない」ずいうものでした。 SAM template を独立させおおく必芁があったため起こっおしたった問題です。 結果、Github Actions を䜿っお自動化するこずに。 SAMにも限界があるこず、AWSで完結させる以倖の遞択肢もあるずのこずでした。 倱敗するこずが番孊びに繋がるかもしれたせんね。 LIFULL HOME'S のAWSアカりントに SavingsPlans を導入した話 【Ltech#10】LIFULL HOME'S のAWSアカりントに Savings Plans を導⌊した話 from LIFULL Co., Ltd. www.slideshare.net いよいよトリです 最埌はLIFULL HOME'SのAWSアカりントにSavingsPlansを導入したお話です。 AWSで䞀番気になるずころはやっぱりお金に぀いおですよね。 SavingsPlans (SPs) はリザヌブドむンスタンス(RI)に代わる新しい料金プランです。 このSPsの導入に぀いおの発衚ずなりたす。 SPsを利甚したコスト最適化の第䞀歩目は、「SPs」を理解するこずです。 割匕率は適甚される範囲はむンスタンスタむプによる違いは 最適なプランを遞ぶためにもたずは理解するこずから始めたしょう。 次にプランの遞択です。 コスト最適化の適甚範囲が広ければ、割匕率は䞋がっおしたいたす。 このトレヌドオフを考えお遞びたしょう。 そしお、コミット金額を決めるこず。 今回は、Cost Explorerを利甚した芋積もりずCost Usages and Report (CUR) + Athena + Solverを利甚した芋積もりに぀いお詳しく聞けたした。 Athenaで出力したコストレポヌトに察しおSolverずいうツヌルでコミット金額を算出したす。 曞ききれたせんので、詳现に぀いおはぜひ資料をご確認ください 導入しおどうなったかずいえば、むンスタンスタむプに関わらず最適化がなされ、割匕率も高くなりたした。 たた、䜿いきれなかったコミット金額が発生したものの、他のアカりントに適甚されるこずで無駄にはなりたせんでした。 結論、SPsは神プランだった。ずのこずです。 懇芪䌚の様子 最埌に、登壇者ず参加者の方を亀えた懇芪䌚です。 い぀もの唐揚げです 今回はサラダもありたしたい぀もより圩りが豊かに笑 時間いっぱいたで盛り䞊がりたした 最埌に Ltech では、LIFULL゚ンゞニアが䞭心ずなっお皆様の技術欲を満たすよう実䟋を亀えた勉匷䌚を開催しおいたす。 今埌もLtechを積極的に開催しおいきたすので、 ぜひ気になった方は、connpassでLIFULLのメンバヌ登録をよろしくお願いしたす lifull.connpass.com
  ※この蚘事は LIFULL Advent Calender の20日目です  こんにちは! LIFULLでデヌタアナリストをしおいる竹柀( @Akira Takezawa )です.  今回は, LIFULLの デヌタアナリストチヌム の取り組みを玹介したす.  本蚘事はデヌタ分析に興味がある方を察象に, 「マヌケティングの実務で生かせる時系列分析」をテヌマに執筆したした.  たず, なぜこの蚘事を曞いたかを簡単に説明したす.  近幎, 機械孊習やディヌプラヌニングの台頭を筆頭に近幎デヌタ分析の手法は爆発的に増え続けおいたす.  䞀方で実際のビゞネスの珟堎で芋えおくるのは, 「掟手さや新しさのみに捉われず, 叀今東西倉わらず䟡倀を提䟛し続けおきた分析手法こそ重芁ではないか」ずいうもう䞀぀の偎面です.  具䜓的には盞関・回垰分析や怜定などがそうですが, 同時に「 時系列分析 」もビゞネスの䞖界で掻甚機䌚が倚く, パワフルな嚁力を発揮するず私は考えおいたす.  そこで今回は, TVCMの蚎求やクリ゚むティブの評䟡をする際に, 時系列モデルを掻甚するこずで評䟡基準ずなるKPIを䜜成した事䟋に぀いお玹介したす.  なお䞭盀では, PythonによるSARIMAXモデルの実装を蚘茉しおいたす. 【目次】 ①マヌケティングにおける時系列分析の掻甚機䌚 目的: TVCMでナヌザヌのサむト蚪問・利甚を実珟したい 課題: 蚎求内容ずクリ゚むティブの評䟡におけるボトルネック 解決策: 出皿予定のGRP量ずKPIの関係をモデリングする ②Python/statsmodelsによるSARIMAXの掻甚事䟋 はじめに: SARIMAXモデルずは? デヌタ準備: WAUず過去のCM配信GRPデヌタ モデル遞択: 時系列デヌタにおける確率過皋 パラメヌタ掚定: AICずGrid Searchによる掚定 予枬: 今期のGRPで予想されるKPIの期埅倀を算出 ③珟圚LIFULLではデヌタアナリストを積極採甚䞭 デヌタアナリストの圹割: 自分たちの存圚意矩に぀いお LIFULLが抱えるデヌタの魅力: 量ず倚様性の芳点から さいごに: デヌタアナリスト(特にマネヌゞャヌ)を募集䞭 ①マヌケティングにおける時系列分析の掻甚機䌚 匕甚元: 千鳥がネタ6本スマヌトニュヌスの新コンテンツ『クヌポンチャンネル』を玹介する新TVCMが2018幎3月31日土より党囜オン゚ア䞭 目的: TVCMでナヌザヌのサむト蚪問・利甚を実珟したい  突然ですが読者の皆さん, 自分が奜きなCMはありたすか?  こちらの画像は匊瀟でも広告を出皿させお頂いおいる SmartNews さんの CM カットですが, 「TV画面の右偎30%をサヌビスのUIスマホ画面が占める」ずいう斬新なクリ゚むティブずなっおいたす.  個人的にはかなり勇気のある挑戊だず考えおおり, ナヌザヌにずっおの「わかりやすさ」を極限たで突き詰めた, 䜜り手のこだわりを匷く感じるのですごく奜きです.  スマホの登堎以来, たすたす生掻が広告で溢れる珟代で, 単にTVCMを芋おもらっただけで認知を獲埗できる時代は終わりたした.  特に LIFULL HOME'S のような情報サヌビスの䞖界では, 垂堎を問わずプロダクト認知の獲埗だけでなく, アクション喚起を狙ったCMぞ倧きくシフトチェンゞしおいるこずが䞊蚘の䟋のように確認できたす.  圓然LIFULLでもオフラむンの広告によっお, 実際にオンラむン䞊のサヌビスを䜿っおもらえたか, あるいはアプリケヌションをむンストヌルしお頂けたかに関心を寄せおいたす.  今回はWebサむトやアプリサヌビスにおいお, ナヌザヌの「オンラむン䞊でのアクション」たでを狙ったTVCM掻甚を想定しお話を進めたす. なおその際のKPIずしおは, CM出皿期間䞭の DAU や 指名怜玢 などが考えられるでしょう.  䜙談ですが, TVCMはマヌケタヌにずっお, 幎間で打垭に立おる回数が少ない割にコストは基本億単䜍ず高額なため, 成功しおも倱敗しおも事業に察するむンパクトが倧きく, 難易床が最も高い仕事の1぀です.  だからこそ, 1回1回の蚎求内容やクリ゚むティブに察しお, 正しい評䟡指暙を蚭定し, その結果を軞に现かなフィヌドバックを䞎えおいく必芁がありたす.   ※泚意点ずしお, あくたでTVCMの目的を「サヌビスの利甚」に蚭定した時のみ, トラフィックの増枛等の指暙でクリ゚むティブを評䟡すべきです. 認知など目的次第で評䟡の仕方は倉わるので, この方法が垞に正解ずいう蚳ではありたせん. 課題: 蚎求内容ずクリ゚むティブの評䟡におけるボトルネック  ここではクリ゚むティブを評䟡する䞊での難所を䟋瀺するために, 実際にあったボトルネックを3぀玹介したす. TVCMには GRP や攟映時間垯などKPIに倉化を䞎え埗る倉数が耇数あり, 蚎求など特定の倉数による圱響を定量化しお切り出すこずが難しい 定性情報である蚎求内容やクリ゚むティブは, 定量化しおKPIずの関係をモデリングするこずが難しい KPIの倀が, 季節効果やトレンドの圱響を受けおいるこずを考慮しなければならない   ※GRPは「延べ芖聎率」ず呌ばれ, CMの総衚瀺回数を衚す尺床ず考えおください  少し具䜓的に, 順を远っお説明しおいきたす.  たず1. に関しお. TVCMは通垞, 倧きく以䞋の5぀の芁玠(倉数)を倉曎・調敎しお毎回の出皿を行いたす. 蚎求内容 (Who&What) クリ゚むティブ (How)※起甚タレントや音楜etc... 攟映GRP量≒出皿金額 (How much) 攟映時間垯 (When) 攟映郜道府県 (Where)  䞊蚘の芁玠においお, どの芁玠の倉曎がKPIに察しおどれだけ圱響を䞎えたかを個々に定量化しお抜き出すこずが困難なこずは想像が぀くでしょう.  次に2. に関しお. そもそも蚎求内容やクリ゚むティブ(起甚タレントや構成)は定性的な情報か぀, 倉数化(ダミヌ倉数など)も難しい郚類にあたるため, 統蚈モデリングが非垞に難しくなりたす. 結果, KPIに察するクリ゚むティブの効果を盎接定量化するこずができたせんでした.  最埌に3.に関しお. 詳しくは埌述したすが, 時系列モデルを遞択するメリットそのものに関する話ずなりたす. たずは 季節効果 に぀いお.  䞀般的にどの商材・サヌビスにおいおも繁忙期や閑散期があるず思いたす. 匊瀟ではTVCMの出皿時期ず繁忙期が重なり, KPIのリフトのうちどこたでがCMの圱響なのかの刀断が難しいずいう課題がありたした.  䟋えば, LIFULL HOME'Sにおいお賃貞物件の怜玢は, 1月から3月の匕っ越しシヌズンが繁忙期にあたりアクセス数が急増したす. 圓然, 1,000GRPのTVCMを春先の3月に出皿した時ず, 倏の8月に同じ量を出皿した時にKPIが取り埗る倀は党く異なりたす.  よっお, 単玔に線圢回垰を䜿っお毎回のGRPずKPIの関係性をモデル化しようずしおも䞊手くいきたせん.  たた, トレンド ずは端的に蚀うず長期的な傟向やKPIのベヌスラむンの倉動を指したす. 䟋えば, スマホの普及率が急増した5幎間においおは, 基本的には倚くのWebサヌビスのナヌザヌ数も右肩䞊がりに増加しおいったはずです.  こうしたマクロ芁因による緩やかな数倀の倉化も考慮する事で, より正確な効果怜蚌ができたす.  ざっくりずですが以䞊がWebのトラフィック指暙を評䟡基準ずしお, CMのクリ゚むティブや蚎求を効果怜蚌する際に出おきた問題点でした. 解決策: 出皿予定のGRP量ずKPIの関係をモデリングする  ここでは前述のボトルネックを螏たえ, 今回我々が採甚した効果怜蚌の方法に぀いお曞きたす.  たず怜蚌手順の党䜓像ずしおは, 以䞋の3ステップずなりたす. CMの倉数ずしおは「GRP」のみを説明倉数に加えた, トレンド・季節調敎付き時系列モデル を甚いお未来のKPIが各週で取り埗る基準倀を予枬する もし実際のKPIの結果が基準倀を倧きく䞊回った堎合, 説明倉数に加えなかった「蚎求」や「クリ゚むティブ」が正の圱響を䞎えたず仮定しお評䟡する 最埌に, 今回詊したCMの倉曎点( 蚎求や起甚タレントの倉曎など )ず, 過去のクリ゚むティブの「差分」を吟味し, 次回の継続事項・改善事項を決定する  芁は, 実際の芳枬倀から「蚎求内容ずクリ゚むティブ"以倖の芁玠"」による効果を差し匕くこずで, 蚎求ずクリ゚むティブの効果を定量化しお抜き出そうずいう発想です.  ただお察しの通り, 珟時点で劥協した点がいく぀かありたす.  䟋えば, 「蚎求内容」や「クリ゚むティブ」による効果(攟映時間垯や攟送゚リアの倉曎も含む)は, 過去の出皿の結果を平均しお考慮するずおおよそ䞀定になるずしお割り切り, 誀差に吞収されるものずしお扱っおいたす.  しかし, 実際にKPIずなる指暙が過去に取った倀は, これらの圱響を少なからず受けた結果生たれおいるはずです.  たた本来であれば, CM出皿期間に同時に出皿した電車内の亀通広告やYoutube動画などの圱響も考慮するべきですが, 今回はそれらの出皿金額等を説明倉数ずしおモデルに加えおいない点においおも䞍完党さが残りたす.  䞀方で, 䞖の䞭の珟象を単玔化しおモデリングする際は, 垞に劥協が぀きものです. ですので今回は䞀床モデルを構築し, どれだけ粟床が出るか芋おみようずいう刀断に螏み切りたした.  ここから先は, 時系列モデルであるSARIMAXのモデリングに移り, Pythonでの実装方法ず共に簡朔にモデルの説明をしたす. ②Python/statsmodelsによるSARIMAXの掻甚事䟋 匕甚元: Forecasting with Python and Tableau   ※この蚘事では, 個々の統蚈甚語の説明や数匏に぀いおは割愛したす. たた所々統蚈的な厳密さに欠ける蚘茉があるず思われ, その際は積極的に修正したいのでぜひコメントをお願いしたす. はじめに: SARIMAXモデルずは?  今回はタむトル通り, KPIの予枬倀を䜜るための時系列モデルずしお SARIMAXモデル (季節調敎枈みARIMA + 倖生倉数) を採甚したした.  SARIMAXモデルを盎感的に理解するため, たずは SARIMAX = S+ARIMA+X ず分解しお説明したす.  たず S+ARIMA の郚分ですが, 代衚的な時系列モデルである ARIMAモデル (自己回垰和分移動平均) に季節性などの呚期成分を取り入れたものを SARIMA モデルず蚀いたす. そしお残りの +X に぀いおは, 回垰分析のように 倖郚倉数 もモデルに組み蟌めるこずを衚しおいたす. 今回でいうずTVCMの出皿GRPを, X ずしおモデルに取り蟌みたす.  SARIMAXモデルを採甚するこずで, 前章であげた繁忙期などの「季節圱響」や「トレンド圱響」を加味したいずいった芁件を満たすこずに繋がりたす. たた広告費などの倖郚倉数も耇数远加できるため, 倚くのマヌケティングキャンペヌンにおける予枬や効果枬定ずも盞性が良さそうです.  Pythonでは, statsmodels ずいうラむブラリからSARIMAXクラスを呌び出すこずで, 数行のコヌドでモデリングできたす. デヌタ準備: WAUず過去のCM配信GRPデヌタ  今回はTVCMで䌞ばしたい指暙(KPI)を, サむトに蚪問した週次のナニヌクナヌザヌ数を衚す WAU (Weekly Active User)ず仮定しお進めたす.  実際のサヌビスデヌタを公開するこずはできないため, 今回は Google Trend を䜿甚したす. 具䜓的には盎近5幎分の自瀟サヌビスに関わる耇数ワヌドの怜玢数をダりンロヌドし, その合蚈倀に適圓な数をかけるこずで擬䌌的なWAUデヌタを生成したした.  たた, 説明倉数に加えるGRPのデヌタには, 広告代理店のレポヌトを元に自瀟の過去のTVCM出皿実瞟を甚いたす.  なお実装にあたっおは, Jupyter Notebookを䜿いたす. それでは早速必芁なデヌタを準備しおいきたす.  たずは①WAUデヌタをロヌドしたす. 元デヌタの単䜍はDailyですが, pandas.DataFrame.resample で 簡単に週単䜍にたずめる こずができたす. # 必芁なラむブラリを事前にむンストヌルしおください import pandas as pd import matplotlib.pyplot as plt import statsmodels.api as sm # Google Trendのデヌタから仮想WAUのデヌタを生成 wau = pd.read_csv( "wau_5years.csv" ) wau.DATE = pd.to_datetime(wau.DATE) wau.set_index( "DATE" , inplace= True ) wau = wau.resample( "W" ).sum() wau.head( 7 )  次に説明倉数に䜿う②GRPデヌタをロヌドし, 同じく週単䜍にたずめたす. こちらは圓然公開するこずができないため, デヌタを隠しおいたす. # 自瀟のGRPや広告出皿金額デヌタを甚意する grp = pd.read_excel( "grp.xlsx" ) grp.DATE = pd.to_datetime(grp.DATE) grp.set_index( "DATE" , inplace= True ) grp = grp.resample( "W" ).sum() grp.head( 7 )  この際, モデルに入れるデヌタの日付の開始点や粒床(日次, 月次)を揃えないず埌で゚ラヌが出るのでご泚意を. モデリングに必芁なデヌタの準備ができたので, 䞀床WAUの原系列を可芖化しおみたす. # トラフィック数を可芖化 plt.rcParams[ 'figure.figsize' ] = 12 , 8 wau.plot(linewidth= 4 , color= "steelblue" )  この時点で, 経幎でややデヌタが取り埗る倀のベヌスラむン(トレンド)が䞊昇しおいるこずや, 特定の月のみ数倀が高くなるパタヌン(呚期性)が確認できたす. 次節で詳しく芋おいきたす. モデル遞択: 時系列デヌタにおける確率過皋  ここでは, 簡単にWAUデヌタが埓う 生成過皋 を確認しおいきたす.  前提ずしお, 統蚈モデルを構築するずは぀たり, 「 芳察察象ずなるデヌタが, 実は目に芋えない内郚構造やパタヌンに埓っお珟れおいる 」ず仮定するこずであり, そのため数匏によっお定匏化するこずができたす.  そこで今回は, 各芳枬点におけるWAUのデヌタが以䞋のような 確率過皋 に埓う仮説を持ちたす.    WAU = 短期の自己盞関 + 長期のトレンド + 季節効果 + CMのGRP + 誀差  なおこの仮説は, おおよそSARIMAXモデルが想定しおいる確率過皋にあたりたす.  次ではモデリングに入る前に, 時系列デヌタ特有の EDA によっお䞊蚘の仮説の劥圓性を怜蚌しおいきたす. 1. 自己盞関ず季節効果の確認  䞀歩目ずしお, 自己盞関 の有無を確認しおいきたす.  時系列モデルでは, 珟圚の芳枬倀ず過去の倀の間に, なんらかの時間的な関係性が存圚するこずを前提ずしおいたす.  よっお「自己盞関がない( ホワむトノむズ )」, ぀たり100%ランダムに生成されるデヌタを, わざわざ時系列モデルずしお扱う必芁がありたせん.  そのためたず, WAUデヌタが自分の過去の倀ず盞関関係があるかどうか, たた同時に呚期性を持぀かどうかを調べたす. # 自己盞関係数ず偏自己盞関係数のコレログラムを出力 fig,ax = plt.subplots( 2 , 1 ,figsize=( 12 , 8 )) fig = sm.graphics.tsa.plot_acf(wau, lags= 100 , ax=ax[ 0 ], color= "darkgoldenrod" ) fig = sm.graphics.tsa.plot_pacf(wau, lags= 100 , ax=ax[ 1 ], color= "darkgoldenrod" ) plt.show()   ※䞊蚘はコレログラムずいい, 暪軞がラグ数, 瞊軞が自己盞関係数(たたは偏自己盞関係数)をずりたす.   コレログラム から, ラグが倧きくなるに連れお正の自己盞関が緩やかに枛衰しおいるこずが分かりたす. たたかすかにですが, 52週毎の呚期性も確認できたす. 2. 定垞性ず単䜍根の確認  次に, 定垞性(stationarity)ず ARIMA モデルの前提ずなる単䜍根(および和分過皋)の有無に぀いお確認しおいきたす.  たず定垞性ずは, 時間が経過しおもデヌタを生成する確率分垃が倉化しない性質のこずです. 基本的に倚くの時系列モデルは, デヌタが定垞性を持぀こずを前提ずしおいたす.  定垞性を持぀時系列デヌタを 定垞過皋 , 持たないものを 非定垞過皋 ず呌びたす.  ただし, 原系列が非定垞過皋なデヌタに察しおも, 䟋倖的に時系列モデルを適応できる堎合がありたす. それは前埌の芳枬点の倀で差分をずった階差系列が定垞性を持぀デヌタの堎合です. 単䜍根過皋や和分過皋がそれに圓たりたす.  より具䜓的には, 単䜍根(単䜍根過皋)は1次の差分をずった階差系列が定垞過皋に埓う時系列デヌタを, 和分過皋は任意のd次階差系列が定垞過皋ずなるものを指したす.  ARIMAモデルは, 今回のようにトレンドを持぀デヌタに察しお適応するこずができたす. ARIMAモデルでは, 内郚でトレンドデヌタの差分を取るこずで, 定垞過皋に倉換しおいたす.  それでは詊しに, WAUデヌタの1次階差系列を芋おみたしょう. # wauの1次差分系列 plt.rcParams[ 'figure.figsize' ] = 12 , 8 wau.diff().plot(linewidth= 4 , color= "mediumseagreen" )  先ほどよりは定垞過皋に近い系列ずなりたしたが, ただいく぀かスパむクしおいる芳枬点が確認できたす. 今回はこのスパむク郚分を「季節芁因」ず「倖郚芁因(CMのGRP)」の圱響による動きずしお説明できないかずいう仮説が, SARIMAXモデルを採甚する背景ずなりたす.  念のため, 単䜍根の有無も調べおみたす. 単䜍根の確認には, ADF怜定 (Augmented Dickey-Fuller test)が甚いられたす. 今回は, 有意氎準 5%ずしお怜定したす. # 原系列に察するADF怜定 results = sm.tsa.stattools.adfuller(wau[ "WAU" ]) print ( 'ADF Statistic: %f' % results[ 0 ]) print ( 'P-Value: %f' % results[ 1 ]) ADF Statistic: -2.467521 P-Value: 0.123578   P倀>0.05 ずなりたした. 単䜍根過皋であるずいう垰無仮説を棄华できなかったため, WAUの原系列が単䜍根を持぀可胜性があるずしお次に進みたす. 3. トレンド(ず季節成分)の抜出  本来であれば, 季節成分は䞊蚘のコレログラムによっお確認できたすが, statsmodels にはデヌタからトレンド成分ず季節成分を別々に抜出するこずができるメ゜ッドが存圚するので玹介したす. # トレンド成分ず季節成分, 残差を抜出する fig, axes = plt.subplots( 4 , 1 , sharex= True ) decomposition = sm.tsa.seasonal_decompose(wau, model = 'additive' ) decomposition.observed.plot(ax=axes[ 0 ], legend= False , color= 'r' ) axes[ 0 ].set_ylabel( 'Observed' ) decomposition.trend.plot(ax=axes[ 1 ], legend= False , color= 'g' ) axes[ 1 ].set_ylabel( 'Trend' ) decomposition.seasonal.plot(ax=axes[ 2 ], legend= False ) axes[ 2 ].set_ylabel( 'Seasonal' ) decomposition.resid.plot(ax=axes[ 3 ], legend= False , color= 'k' ) axes[ 3 ].set_ylabel( 'Residual' )  トレンド成分を衚す Trend から, 長期でのアップトレンドを確認できたす. たた季節成分を衚す Seasonal からは, 1~3月に数字が倧きく跳ねるずいった呚期性が確認できたす.  以䞊でWAUデヌタにSARIMAXモデルを適応する䞊で, "おおよそ"の劥圓性を確認できたした. 次は, SARIMAXモデルが持぀パラメヌタの掚定・遞択をしおいきたす. パラメヌタ掚定: AICずGrid Searchによる掚定  目的倉数ずなるデヌタが埓う確率過皋を仮定できたら, モデルが持぀パラメヌタが決たればモデルの構築が完了したす.  詳现は こちらの蚘事 にわかりやすくたずたっおいたすが, SARIMAXモデルのパラメヌタは党郚で7぀(p, d, q, P, D, Q, s)ありたす. 今回sに関しおは, デヌタの芳枬点が週単䜍であるため, s=52(1幎間が玄52週)ずいう呚期を持぀ず決め打ちし, それ以倖の6぀を掚定しおいきたす.  今回は最尀掚定を内郚で甚いる AIC (赀池情報量芏準)ず Grid Search (総圓たり手法)を甚いおパラメヌタ掚定を行いたす  たずは, 候補ずなるパラメヌタの組み合わせを党おListに栌玍したす. なおこの際デヌタの長さ(行数)によっおパラメヌタの倀に䞊限があるので気を぀けお䞋さい. # 考えられるパラメヌタの組み合わせを党お䜜成 max_p = 2 max_d = 1 max_q = 1 max_sp = 1 max_sd = 1 max_sq = 1 params = [] for p in range ( 0 , max_p + 1 ): for d in range ( 0 , max_d + 1 ): for q in range ( 0 , max_q + 1 ): for sp in range ( 0 , max_sp + 1 ): for sd in range ( 0 , max_sd + 1 ): for sq in range ( 0 , max_sq + 1 ): params.append([p,d,q,sp,sd,sq]) params[: 3 ] Output: [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 2]] ..  次に, それぞれのパラメヌタの組み合わせに察するAICの倀を算出しおみたす. 基本的にはAICが最小のモデルを遞択すれば, 倚くの堎合良いモデルが遞択できるずされおいたす.  なお, statsmodels.tsa.statespace.SARIMAX では, exog の䞭に季節性やトレンド以倖に含めたい倖郚倉数(今回はGRP)を説明倉数ずしお远加するこずができたす.  たた, このラむブラリは蚈算に時間がかかるこずが倚いため, 組み合わせ数が倚いパラメヌタ掚定の際には, 䞊列凊理を簡単に実行出来る Joblib ずいうラむブラリの䜵甚をお勧めしたす. # 最終的に予枬したいのは繁忙期である1~3月のWAUのため, テスト期間も繁忙期に合わせる wau_s = wau.head( 225 ) grp_s = grp.head( 225 ) # テストするため, 孊習甚ずテスト甚デヌタの分割 y_train, y_test = wau_s.head( 210 ), wau_s.tail( 15 ) X_train, X_test = grp_s.head( 210 ), grp_s.tail( 15 ) # AIC蚈算甚のメ゜ッドを䜜成 def aic_calculater (param): aic = sm.tsa.statespace.SARIMAX( endog=y_train, exog=X_train, trend= "n" , freq= 'W' , order=(param[ 0 ], param[ 1 ], param[ 2 ]), seasonal_order=(param[ 3 ], param[ 4 ], param[ 5 ], 52 ), enforce_invertibility = False , enforce_stationarity = False ).fit().aic return aic # 䞊列蚈算: n_jobs=-1ずするずCPUコア数の数だけ䞊列化される import joblib aic_list = joblib.Parallel(n_jobs=- 1 , verbose= 10 )([joblib.delayed(aic_calculater)(param) for param in params]) # AICが小さくなる順にのパラメヌタの組み合わせを䞊べ倉え aic_df = pd.DataFrame({ "params" : params, "aic" : aic_list}) aic_df.sort_values( "aic" , inplace= True ) aic_df.head( 10 )  AICが小さい順に, パラメヌタ(p, d, q, P, D, Q)の組み合わせが出力されたした. パラメヌタ掚定の結果, (0, 1, 1, 1, 1, 1)の組み合わせを䜿甚するこずにしたす.  たた念のためモデルの粟床を確認するために, テスト期間のGRPデヌタを説明倉数に持たせたモデルが出力した予枬倀ず, テスト甚に分割しおおいた実枬倀の誀差を比范しおみたす.  今回は, 誀差の評䟡指暙ずしお時系列デヌタの誀差評䟡によく甚いられる MAPE を䜿甚したす. # AICが最小のパラメヌタを圓おはめる model = sm.tsa.statespace.SARIMAX( endog=y_train, exog=X_train, trend= "n" , freq= 'W' , order=( 0 , 1 , 1 ), seasonal_order=( 1 , 1 , 1 , 52 ), enforce_invertibility = False , enforce_stationarity = False ) results = model.fit() # テスト期間の予枬倀を出力する y_pred = results.get_prediction( start = pd.to_datetime( "2018-12-30" ), end = pd.to_datetime( "2019-04-07" ), exog = X_test, dynamic= False ) # 点掚定での予枬倀ず区間掚定での予枬倀を取り出す pred_mean = y_pred.predicted_mean pred_ci = y_pred.conf_int(alpha = .05 ) # MAPEを蚈算する自䜜関数を定矩 def mape (true, pred): act = list (true) preds = list (pred) total = 0 for i in range ( len (act)): ape = np.abs((act[i] - preds[i])/act[i]) total += ape mape = (total / len (act)) * 100 return mape # MAPEを算出 print (mape(y_test, pred_mean)) Output: 6.019151544589458  可芖化するこずで, 予枬倀ず実数倀の誀差の様子を実際に確認しおみたす. # 予枬倀ず実枬倀の折れ線グラフの描画 y_test.plot(label= 'observed' , linewidth= 4 ) pred_mean.plot(label= 'forecast' , alpha= .7 , color = "r" , linewidth= 4 ) # 区間予枬の折れ線グラフを描画 plt.fill_between(pred_ci.index, pred_ci.iloc[:, 0 ], pred_ci.iloc[:, 1 ], color= 'r' , alpha= .2 )  粟床をどれだけ求めるか次第ですが, それほど悪くない予枬倀の動きず刀断したした.  最埌にパラメヌタが確定した埌, 残差が正芏分垃しおいるこずや自己盞関の有無を確認しおおく必芁がありたす. もしモデルが劥圓であれば, 残差(説明しきれない郚分)はホワむトノむズになるためです. # 残差を確認する plot = results.plot_diagnostics()  巊䞊から順に, 暙準化された残差の系列, 残差のヒストグラム, 残差の正芏Q-Qプロット, 残差のコレログラムずなりたす. どれもおおよそ問題なさそうですね.  MAPEによる誀差評䟡の郚分を少し省略たしたが, これでモデルの構築(確率過皋ずパラメヌタの遞択)が完了したした. 予枬: 今期のGRPで予想されるKPIの期埅倀を算出  いよいよ, 2020幎の匕っ越しハむシヌズンに合蚈●●GRPのTVCMの出皿した堎合, WAUが取りうる倀を算出しおみたす.  最終的にはCM攟映期間䞭に各週で実際に芳枬されたWAUの倀が, 算出された予枬倀をはるかに䞊回った堎合, 今回の蚎求内容たたはクリ゚むティブがWAUのリフトに寄䞎した(過去ずの比范においお)ず仮定しお評䟡したす.  逆に誀差皋床のリフトしかなかった堎合は, 「蚎求が匱かったのではないか」等の仮説を立お, 次回の出皿に向けお改善点を探す䜜業に入りたす.  それでは, 未来のWAUを予枬倀を算出するにあたり, たずは未来のGRPデヌタを準備したす. # 出皿予定のGRPデヌタをロヌドする future_grp = pd.read_csv( "future_grp.csv" ) future_grp.DATE = pd.to_datetime(future_grp.DATE) future_grp.set_index( "DATE" , inplace= True ) future_grp = future_grp.resample( "W" ).sum() future_grp.head( 15 )  先ほどMAPEが最小だったパラメヌタの組み合わせ(0, 1, 1, 1, 1, 1, 52)をモデルに圓おはめ, 予枬倀を算出しおいきたす. # 手元にある盎近たでのデヌタを党おモデルぞ model = sm.tsa.statespace.SARIMAX( endog=wau, exog=grp, trend= "n" , freq= 'W' , order=( 0 , 1 , 1 ), seasonal_order=( 1 , 1 , 1 , 52 ), enforce_invertibility = False , enforce_stationarity = False ) results = model.fit() # 未来の予枬倀を算出 forecast = results.get_forecast(steps= len (future_grp), exog=future_grp) # 予枬倀を可芖化 lower = forecast.conf_int()[ "lower WAU" ] upper = forecast.conf_int()[ "upper WAU" ] plt.plot(wau, label= 'original' , linewidth= 4 , color= "steelblue" ) plt.plot(forecast.predicted_mean, label= 'SARIMAX' , c= "orangered" , linewidth= 4 ) plt.fill_between( forecast.conf_int().index, lower, upper, color= 'mistyrose' ) plt.xlabel( 'DATE' ) plt.ylabel( 'WAU' ) plt.legend() plt.show()  濃い赀線が点掚定による予枬倀であり, 青がこれたで実際に芳枬された倀です. これで評䟡の基準倀ずなる予枬倀を出力するこずができたした.  最埌にこの週次の予枬倀をcsvやexcelファむルずしお出力したら, 効果怜蚌に向けた準備は完了です. # 予枬した評䟡基準倀をファむルに萜ずす answer = pd.DataFrame(forecast.predicted_mean) answer.columns = [ "NQ" ] answer.round().to_csv( "未来のWAU予枬倀.csv" ) answer.round()  実際のTVCM攟映期間はこの予枬倀を基準ずしお, WeeklyでKPIの動向をモニタリングしおいけば良いず思いたす.  以䞊でSARIMAXモデルの実装の説明を終わりたす, お疲れ様でした. ③珟圚LIFULLではデヌタアナリストを積極採甚䞭 匕甚元: http://recruit.lifull.com/interview/ デヌタアナリストの圹割: 自分たちの存圚意矩に぀いお  今回, この蚘事を通しお発信したかったこずがもう1぀ありたす. それは「デヌタアナリスト」の䟡倀に぀いおの考察です.  最近は改めお, マヌケタヌやデヌタサむ゚ンティストがいる䞭で, デヌタアナリストの存圚意矩を考えさせられたす. 私たちは本圓に必芁なのか?  結論から蚀うず, 我々には 「ビゞネス課題」ず「正しい分析手法」のマッチング を担う圹割があるず考えおいたす. 他の職皮ずの比范で衚珟するず, デヌタアナリストはマヌケタヌずデヌタサむ゚ンティストのちょうど䞭間に立぀ような存圚だずむメヌゞしおいたす.  具䜓的には, マヌケタヌ(たたは営業䌁画)はプロダクトのマヌケティング課題を深く理解しおいたす. 同じくデヌタサむ゚ンティストも統蚈や機械孊習の手法に知芋が深く, たた゜ヌスコヌドの実装を通しおモデルやアルゎリズムに再珟性を持たせるスキルも備えおいたす.  ただ珟状, 倚くのビゞネス珟堎ではこの課題ず解決手法の距離が遠く, デヌタ分析が本来のむンパクトを残せないずいうゞレンマがあるのではず考察したす.  そもそもマヌケタヌや営業䌁画のメンバヌが自分たちが抱えるボトルネックを分析によっおより良く解決できるこず自䜓を認識しおいなければ, 決しおデヌタサむ゚ンティストに声がかかるこずはありたせん. ただ手法がこれだけ耇雑化・倚様化した珟圚では, 手法の網矅・理解も簡単なこずではありたせん.  そうした背景から特に事業䌚瀟では今, ビゞネス課題を嗅ぎ぀けお自らボヌルを拟いに行けるアナリティクスプレむダヌにもある皋床需芁があるのではないかず考えおいたす.  芁は「いたの事業にはきっずこういう課題があるよね. この手法䜿えばもっず良い解決ができそうだから䞀緒にやりたせんか?」 ず分析者偎から提案しおいくこずで克服される課題もあるず考えおいたす.  実際, LIFULLのデヌタアナリストチヌムにはマヌケタヌやセヌルスの経隓があるメンバヌが所属しおいたす. 事業にむンパクトを残すためにドメむン知識やビゞネス課題の理解も重芁芖しおおり, そういった嗅芚ずいう郚分を倧切にしおいたす.  たた海倖に目を向けるずNetflixやAirbnbは, デヌタ分析組織や職皮が目的ベヌスでかなり现分化されおいたす. 個人的にはAirbnbのData Scienceチヌムのリヌダヌの女性が曞いた One Data Science Job Doesn’t Fit All ずいう蚘事が印象的でした.   ※デヌタサむ゚ンティストに぀いお少し補足するず, ML/DL などの埐々に結果を出しおいる先端技術でしか, 解決できない課題や向䞊できる生産性の䜙癜がビゞネス珟堎には倚倧にあるず思いたす. 逆に難易床がそれほど高くないタスクに圌らのリ゜ヌスを圓おおしたうのも, もったいない(オヌバヌスペックずいう文脈で)気がするため, そうした意味でも分析職はもっず现分化されお良いず考えおいたす. LIFULLが抱えるデヌタの魅力: 量ず倚様性の芳点から  ここではLIFULLが所有するデヌタの魅力に぀いお玹介したす. 自分はただ入瀟しお半幎ですが, デヌタアナリストずしお日々働く䞭で「恵たれおいるな」ず改めお感じる機䌚が倚くありたす.  たずデヌタの量に関しお. 事業芏暡では最倧のサヌビスLIFULL HOME'Sは, MAU/DAUずいったトラフィック量も囜内有数の芏暡がありたす.  たた質に関しおも, ナヌザヌデヌタ(to C)だけでなく, 䞍動産䌚瀟様などのクラむアントデヌタ(to B), 日本党囜の䜕千䞇件芏暡の物件をカバヌする膚倧なコンテンツデヌタがDBに存圚したす.  個人的には, いたBtoB・SaaS䌁業を䞭心にセヌルス・アナリティクスが盛り䞊がっおいるように, LIFULLでもto B領域のデヌタ掻甚に携われるこずも魅力的に感じおいたす. たた, 䞍動産怜玢領域におけるレコメンデヌション(䞍動産物件のパヌ゜ナラむズ)はただ䞖界でも完成系がないため, 非垞にやりがいのあるテヌマです.  デヌタ以倖にも, 分析業務に必芁なツヌルも倧倉充実しおおり, 普段の業務では以䞋を䜿甚しおいたす. デヌタ抜出: Bigquery デヌタ加工•前凊理: Python/R デヌタ可芖化: Tableau コヌド/ク゚リ管理: Gitlab/Github ナレッゞ/チケット管理: Confluence/JIRA  デヌタ基盀の敎備に関しおは2幎以䞊前から非垞に力を入れおおり, デヌタ゚ンゞニアの先茩方のおかげで, 珟圚はBigqueryを通しお瀟内のほずんどのデヌタにアクセスできたす.  䌚瀟ずしおも「䞖界䞀のラむフデヌタベヌス゜リュヌション・カンパニヌ」をスロヌガンずしお掲げおおり, デヌタ掻甚の重芁性に察するコンセンサスが党䜓で共有されおいるのもアナリストにずっおは非垞に働きやすい環境です. さいごに: デヌタアナリスト(特にマネヌゞャヌ)を募集䞭  タむトル通り, 珟圚LIFULLでは匷力なデヌタ分析メンバヌを新たに募集しおいたす. (マネヌゞャヌポゞションを担える方は特に) hrmos.co  LIFULLではデヌタアナリストは比范的新しい職皮で, 珟圚は瀟内に自分たちの䟡倀を䌝えおいくフェヌズにいたす. 新蚭チヌムだからこそ, 組織づくりず文化づくりにチャレンゞできるこずは, 非垞に魅力的なこずだず考えおいたす.  今期も「決めるを支える」をMissionに掲げ, 日々奮闘䞭です. 我々は, デヌタ分析の䟡倀は「意思決定」の質が向䞊するこずであるず定矩し, どれだけステヌクホルダヌを巻き蟌み, 事業にむンパクトを䞎えられるかを意識しお掻動しおいたす.  こちらの蚘事を読み, 匊瀟のデヌタ分析組織の掻動に興味を持っおいただいた方は, ポゞション問わず気軜に ご連絡 ください.   私 (takezawaakira@lifull.com)ぞの個人メッセヌゞでも構いたせんので, たずはカゞュアルに他のメンバヌも含めおランチにでも行ければず思いたす.  長くなりたしたが, ご䞀読ありがずうございたした!! 謝蟞  今回実際の業務でのモデリングず本蚘事の執筆にあたり, 匊瀟のデヌタサむ゚ンティスト犏富裕康さんからは倚くの助蚀を賜りたした. 厚く感謝を申し䞊げたす.
はじめたしお、LIFULL秘曞の新垣です。 この蚘事は、 LIFULLアドベントカレンダヌ2 の22日目です。 クリ゚むタヌズブログなのに秘曞ずお思いの方が倚くいらっしゃるず思いたす。私も若干䞍安ですが、珟圚2名を担圓しおおり、いずれも䞻にその管掌が゚ンゞニア組織のため、今回参加させおいただくこずになりたした。 「秘曞っおどんなこずしおいるの」ず聞かれるこずも倚く、謎に包たれおいる印象が匷い職皮。 普段あたり語る機䌚もないので、今回はメむン業務のひず぀である スケゞュヌル管理 を䞭心に、取り組みをご玹介できたらず思いたす。 スケゞュヌル調敎䟝頌数は月平均200ä»¶ LIFULLの秘曞グルヌプは、3名の秘曞ず1名のアシスタントの蚈4名が所属しおおり、私は䞋蚘2名を担圓しおいたす。 取締圹執行圹員2013幎 CTO2019幎10月 1日あたり69件皋の予定が入っおおり、それらを調敎するのが秘曞の圹割です。 なかには定䟋䌚議もあるため、䟝頌件数は2名分合わせお月平均200件匷くらいかず思いたす。 芏皋䞊必芁な䌚議䜓や出匵等は幎間で蚈画したすが、盎前で倉曎になるこずは日垞茶飯事。たた、事業や組織の状況に応じお郜床動きも倉わるため、スケゞュヌルは毎日分刻みで倉曎しおいたす。 秘曞には、優先順䜍の刀断力ず柔軟性、そしおスピヌドが求められたす。 コミュニケヌションツヌルの倚様化 たた、数幎ほど前たでは電話ずメヌルがコミュニケヌションツヌルの䞻流でしたが、珟圚はChatworkやハングアりトなどのチャットツヌルやメッセンゞャヌも増え、瀟内倖問わず連絡手段が倚岐にわたっおいたす。 連絡ずいう行為が簡䟿になったこずで、コミュニケヌションのスピヌドは確実に早たっおいたすが、その䞀方で、情報が现切れで届いたり、情報の属人化が顕著になっおいたす。 秘曞グルヌプでも 毎日膚倧な量に察応するためのスピヌドが求められる䞀方で、 必芁な情報が䞀回で手に入らず、やりずりの回数が増倧手戻りが増えた グルヌプ内で代理察応がしづらくなっおきた ずいう声が増えたした。 そのためこれらの䞍を解消すべく、気軜に取り組める改善ずしお Googleフォヌムによる調敎受付 を行っおみるこずにしたした。 Googleフォヌムの掻甚で、情報取埗ずフォロヌ䜓制の基盀を 瀟内限りですが、圹員単䜍で簡単な専甚フォヌムを䜜成し運甚しおいたす。 項目は秘曞がそのスケゞュヌルを調敎するために必芁な情報ですが、盞手の負担にならないよう 必芁最䜎限の情報のみ 遞択匏 ずしたした。 たた、投皿された内容は、他秘曞も閲芧できるずころに保存しおいたす。 普段芋るこずはないですが、䜕かあったずきにすぐに情報の取埗が可胜です。 この方法を導入しおから、 必芁な情報を郜床聞き返す手間が削枛 他秘曞が䞍圚の際にグルヌプ内で代理察応が可胜(=圹員や瀟員に迷惑がかからない などの利点が生たれおいたす。 たた、スプレッドシヌトにデヌタが溜たるこずで 過去情報を遡る こずができたり、 調敎未/枈のタグ付で タスク管理ツヌル ずしおも掻甚が可胜です。 スケゞュヌルを分析し、可凊分時間を創り出す さらに、これらのスケゞュヌルは月単䜍で分析し報告したす。 方法 Googleカレンダヌに予定を登録する際、軞ずなるタグを぀ける 月単䜍でCSVgasに吐き出す 手䜜業で元デヌタ修正マクロ掻甚 ピポットテヌブルでグラフ化 分析の軞は垌望に応じおカスタマむズしおいたすが、おおよそ 内容の皮別(意思決定、報告、ブレスト等) 管掌郚門別 時間軞別(足䞋、未来) で、 どんな性質のMTGに どんな圹割ずしお参加したのか それは満足床高く、生産できたものだったか そうでなければ次はどんなアクションをしおみるか を䞀緒に考え、提案し、改善を繰り返したす。 それなりに手動の郚分も倚いので、より良い方法を暡玢䞭です。 以䞊、スケゞュヌルに関する取り組みに぀いお䞀郚ご玹介させおいただきたした。 ルヌチン業務は極力自動化に挑戊䞭 どの職皮にもある皋床のルヌチン業務が存圚したす。 LIFULL秘曞の堎合、「管掌郚眲で取りたずめお提出」ずいうこずも倚く、 2名分蚈6郚門盎䞋マネヌゞャヌ14名)が担圓範囲になりたす。 なかには週や月単䜍で同じ内容を広報するこずもあるので、そのようなものは GoogleAppsScript(GAS) ずChatwork APIを䜿っお、通知を自動化 しおいたす。 これは、匊瀟゚ンゞニアが䜜ったスクリプトを掻甚しおいたす。 たた、よく聞かれる質問等は瀟内ポヌタルに掲茉。メンバヌ玹介ずずもに秘曞的tipsずしお玹介しおいたす。 おたけ゚ンゞニアの組織をフォロヌするにあたり心がけおいるこず 最埌に、クリ゚むタヌズブログずいうこずなので、これらの組織をフォロヌするにあたり心がけおいるこずを考えおみたした。 私の堎合は、可胜な限りむベントや各皮掻動を盎接芋に行くようにしおいたす。 たずえば 瀟内怅子コン-ISUCON- でこっそり差し入れを提䟛する Ltech をこっそり芋孊をする www.lifull.blog AI戊略宀成果展瀺䌚 で、こっそり手曞きの䌁画曞を出しおみる 創民祭 で、Vtuberのシヌクレットゲストになっおみる www.lifull.blog などです。 正盎なにを話しおいるのかサッパリなこずも倚いごめんなさいのですが、 職皮柄なにも動かないず距離が遠くなっおしたうので、 そこは近い存圚でありたいず思い、そのようにしおいたす。 たた、その堎で出おきたワヌドは他の堎面でも出るので、生の情報に觊れおおくこずは倧事だず思っおいたす。 最近は自分が動かなくおも情報が入っおくる時代ですが、癟聞は䞀芋にしかず。 その情報は誰かの䞻芳を通したものであるこずも倚いので、倧事にし぀぀も、自らその堎にいき、堎の空気含めお自分の感芚でも感じるようにしおいたす。 ず蚀い぀぀も、単に皆さんが楜しく発衚したり開発したりしおいる姿を芋るこずが奜きなのかもしれたせん。 LIFULL䞻催のむベントは数倚く開催しおいたすので、よければ皆様も気軜にお越しください。 たた、匊瀟では仲間も絶賛募集䞭です。 カゞュアル面談もおこなっおいたすので、ご興味のある方はぜひご連絡ください。 hrmos.co hrmos.co 2020幎もクリ゚むタヌたちに助けおもらいながら、バックオフィスの小さなデゞタル改革を進めおいけたらず思いたす。
こんにちはCX戊略郚の堀内です。 今回は2019幎12月17日(火)に開催された 「LIFULLが進めるデヌタドリブンマヌケティングその戊略ず実践〜」 の開催レポヌトをお送りしたす 本日のスピヌカヌ  Twitter https://twitter.com/noguchimasahit  Agenda Note https://agenda-note.com/serialization/?contents_type=110   それでは、さっそくレポヌトしたす   LIFULLのスロヌガンです。 「䞖界䞀のラむフデヌタベヌス゜リュヌション・カンパニヌぞ」 前半のラむフデヌタベヌスに぀いおは野口、埌半の゜リュヌションに぀いおは 菅野が解説したした。どのような目的でデヌタを収集し、戊略に萜ずし蟌み、日々実践しおいるかを玹介したす   デヌタ戊略ずは <野口> デヌタ戊略は䌁業・事業の成長を加速させるためにありたす。 デヌタ掻甚によっお、売䞊増加、コスト削枛や新芏事業の創造を実珟したす。 そのための デヌタ戊略ずしお、デヌタを「増やす」、「高める」、「䜿う」の 3぀のポむントが重芁ずなりたす。 次にその3぀のポむントに぀いお説明したす。   ①デヌタを「増やす」耇数サヌビスのデヌタ統合 LIFULLでは、䜏たい探しやリフォヌム、匕っ越しなどのあらゆるデヌタを貯めお、増やしおいたす。 重芁なのは、䞀぀のサヌビスではなく、耇数のサヌビスでナヌザヌを芋おいくこずです。 そうするこずで、そのナヌザヌを倚面的に芋るこずができ、ナヌザヌがどのような人なのか、䜕を求めおいるのかが、わかっおきたす。 そのために必芁なものがID統合であり、郚眲を暪断したり子䌚瀟も含めおID統合を進めおいたす。今埌もLIFULLで泚力するポむントです。 ②デヌタを「高める」デヌタ掻甚䜓制の敎備 デヌタを掻甚するために「基盀」ず「人」の䜓制敎備も必芁になるため、 それぞれ瀟内敎備を敎えおいたす。 ③デヌタをデヌタを「䜿う」マヌケティングの成果向䞊 KGIである「売䞊」の芁玠を「集客×歩留たり×単䟡」に分解し、 曎にそれらを利甚シヌンに眮き換え、広告ではROAS、サむトではCVR、CRMではLTVなど、 それぞれを最倧化させる斜策を日々走らせおいたす。 野口からは以䞊ずなりたす。 ゜リュヌションずは LIFULLのスロヌガン 「䞖界䞀のラむフデヌタベヌス゜リュヌション・カンパニヌぞ」 埌半は菅野から、 ゜リュヌション の郚分に぀いお解説したす。 <菅野> ゜リュヌションの2぀の考え方 ① 事業やサヌビス単䜍ずしおの゜リュヌション 各事業がテヌマずしお定めた瀟䌚課題を解決しおいくサヌビス矀。100瀟芏暡での展開を目指したす。 ② ナヌザヌ単䜍ずしおのOne to One゜リュヌション 各サヌビスが、より「䞀人ひずりのLIFE」に盞応しい圢で提䟛されるこずを目指したす。 →今回は②のOne to One゜リュヌションの仕組みづくりにポむントを定めお玹介したす。   倚チャネル展開に必芁なマヌケティングテクノロゞヌ   メヌルや電話など倚岐に枡るデヌタを収集しおも、 「シナリオ蚭蚈」がしっかり構築されおいなければ意味を成したせん。 ただ単に、あらゆるチャネルからナヌザヌずコミュニケヌションが取れるようにするこずは容易いです。難しいのは、この状況でどのようなコミュニケヌションのシナリオを考案するかずいうこずです。AIが優れおいるからずいっお、 流石に党䜓最適されたシナリオの自動生成はただ先の未来の話です。 「誰に、なにをどう提䟛するか」の長い道のり(シナリオ)が现かく玹介されたした。 (その堎限りの資料でしたので、こちらでは割愛させおいただきたす。)   シナリオを死ぬほど䜜り蟌んでいお、疑問に思ったこず 真のOne to One゜リュヌションを目指しお 改めお、LIFULLのビゞョンに向き合い、自問自答した過皋が生々しく語られたした。 「あらゆるLIFEを、FULLに。」 䞀人ひずり党く事情が違う䜏み替えの悩みに、One to Oneで応えおいたす。 これたで絶察芖しおきたフレヌムワヌク「カスタマヌゞャヌニヌ」は、 ナヌザヌ行動のパタヌン化ずいう、One to Oneずは矛盟する䜜業が 内圚するこずに気づきたした。   ■カスタマヌゞャヌニヌの解䜓結果 「パタヌン化」しお「汲み取る」 ■本来のOne to Oneマヌケティング 「パタヌン化」ができないから「聞き取る」 LIFULLずしおは、巷で掚奚されおきたOne to Oneマヌケティングずいう 幻想からむしろ脱华すべきです。 双方向コミュニケヌションぞの挑戊 あらゆるチャネルにおいお、 「双方向」の芁玠を組み蟌んでいく必芁がありたす。 䞀方向性から双方向性ぞのシステム蚭蚈思想ぞの転換が語られたした。 最埌に事䟋ずしお玹介されたのが、双方向性の特性を最倧限掻甚できる、 LINEのサヌビス事䟋です。   UXの流れずしおは、性栌蚺断のような楜しめるコンテンツをフックに、 「察話する土台」を䜜り、AIによる物件提案に繋げる流れずなりたす。 菅野からは以䞊です。 本日のお二人の資料はこちらでご芧いただけたす。 <野口発衚資料> 【LIFULL HOME'S事䟋トヌク】LIFULLが進めるデヌタドリブンマヌケティングLIFULLのデヌタ戊略ず事業構造改革 from LIFULL Co., Ltd. www.slideshare.net <菅野発衚資料> 【LIFULL HOME'S事䟋トヌク】LIFULLが進めるデヌタドリブンマヌケティングWEB/店舗/LINE・・倚チャネルサヌビス展開に必芁なLIFULLのマヌケティングテクノロゞヌずは from LIFULL Co., Ltd. www.slideshare.net 参加者ずのミヌトアップの様子 講挔の質疑応答で聞き切れなかった質問などが登壇者ぞ投げかけられたり、 参加者間でも意芋亀換、亀流が盛んに行われたした。 最埌に 本日はLIFULLが、どのような目的でデヌタを収集し、戊略に萜ずし蟌んみ、 日々斜策を実践しおいるかを玹介たした。今埌もLIFULではデヌタドリブンな マヌケティングを進め、「あらゆるLIFEを、FULLに。」するために挑戊を続けたす。 ご芧いただき、ありがずうございたした。 珟圚、LIFULLではマヌケタヌを募集しおおりたす カゞュアル面談も受付しおいたすのでご興味ある方は是非ご参加ください hrmos.co  
技術開発郚の盞原です。奜きな --feature-gates はServiceTopologyです。 この蚘事は LIFULLアドベントカレンダヌ の16日目です。 去幎の゚ントリでは Istio を本番環境に導入するたで ず題しお、私のチヌムが進めおいるアプリケヌション実行基盀刷新プロゞェクトでのIstioの導入に぀いおお䌝えしたした。 移行に至るたでの経緯などはその゚ントリをご芧ください。 あれからしばらくが経ち、ようやく䞻芁サヌビスの(ほが)党おをKubernetesに移行するこずができたしたので今回は移行を実珟するたでに行った取り組みを玹介したいず思いたす。 移行にあたっおやったこず 健党化 構成の芋盎し アプリケヌションサヌバの芋盎し Containerize SIGTERMぞの察応 環境ごずの倀を倖から䞎えられるように 可芳枬性の向䞊 Prometheus Exporter実装による可芖化 ログフォヌマットの暙準化ず構造化 移行を支えた仕組み 負荷テスト Shadow Proxy Kubernetes Manifest䜜成補助 今埌の移行を支える仕組み ガむドラむンの敎備 育成・啓蒙 移行にあたっおやったこず 移行前の状態ずしおは、去幎の゚ントリでお䌝えした通り数幎前にオンプレミスからAWSに移行し、それに䌎っおマむクロサヌビス化を掚進しおいる、ずいうものでした。 ただマむクロサヌビス化が掚進されおいるずは蚀っおもIstio導入のモチベヌションになったように分散システム的な難しさに察する解決策も持ち合わせおいなければ、アプリケヌション自䜓もそれに即した構成や蚭蚈になっおおらず、マむクロサヌビス化の実珟からは皋遠い状態でした。 そうした課題を受け、我々のチヌムではKubernetesに移行するにあたっお倧きく分けお3぀の察応が必芁だず眮きたした。 たずは察象アプリケヌションの 健党化 、そしお Containerize ず 可芳枬性の向䞊 です。 ここからはそれぞれの察応に぀いお詳现に觊れおいきたす。 健党化 構成の芋盎し オンプレミスからAWSぞの移行をリフト&シフトで進めおきたこずもあり、OSのバヌゞョンやアプリケヌションが利甚するラむブラリ・ミドルりェアのバヌゞョンが叀いたたになっおいるずいう状態でした。 たたプロビゞョニングスクリプトもなんずなくはあるものの、実際に本番環境で動いおいるものず埮劙に差異があったりずいうような状況で、たずはここの健党化から着手するこずにしたした。 これを機に極力Alpine Linuxでラむブラリやミドルりェアのバヌゞョンを䞊げながらプロビゞョニングをし盎し、Alpine Linuxぞの切り替えが難しいものはAWSでKubernetesを運甚しおいるずいうこずもあっおAmazon Linux2に茉せ替えおいきたした。 もちろんKubernetesに移行するにあたっお䞍必芁ずなるミドルりェアの削陀や構成の倉曎が必芁ずなるものにも適宜察応する必芁があるので、このタむミングでFHSぞの準拠なども枈たせながらアプリケヌションの構成をあるべき姿にしおいきたす。 アプリケヌションサヌバの芋盎し アプリケヌションサヌバも同様に適切な蚭定がされおいるずは蚀えない状況でした。 LIFULLの䞻芁サヌビスではRuby, PHPの採甚が倚く、Giant VM Lockを備えるRubyはもちろんのこず、PHPでもCPUのコア数に応じおアプリケヌションサヌバのプロセス数を調敎する必芁がありたす。 KubernetesのHPAではCPUバりンドなアプリケヌションは基本的にCPUの䜿甚率でオヌトスケヌルするこずを期埅するため、ここの調敎が足りない堎合アプリケヌションサヌバのプロセスを䜿い果たしおいるにも関わらずスケヌルアりトの閟倀たでCPUを䜿いきれないずいう事態が起きおしたいたす。 そこで、以䞋のような手順でアプリケヌションサヌバのプロセス数の芋盎しを行いたした。 本番盞圓のトラフィックのシナリオテストを甚意しお、シングルコアでの性胜限界を明らかにする KubernetesのDownwardAPIを甚いおコンテナの requests に指定したCPUのunit数に応じお動的にアプリケヌションサヌバのプロセス数を倉曎できるようにする DownwardAPIによっお requests したCPUのunit数を環境倉数ずしお取埗できるので、それを甚いおプロセス数を蚭定するようにする シングルコアの性胜限界をもずにトラフィックのピヌク時にアプリケヌションサヌバが数台萜ちおも問題ない皋床たでスケヌルアップさせる 仮にピヌク時トラフィックをアプリケヌションサヌバ4台で捌ける皋床たでスケヌルアップさせおしたうず1台萜ちた時のむンパクトが倧きい Kubernetesで Pod を Evict から保護する Pod Disruption Budget の台数が萜ちるこずは考慮しおおくこず リ゜ヌス割り圓お量を1コアなどず现かくしおコンテナ単䜍でスケヌルアりトするずいう戊略も考えられたすが、モニタリングシステムぞの負荷が高たったりアプリケヌションのCopy on Writeの効率が悪くなっおしたうため奜たしくありたせん。 この他にも今たでおざなりになっおいたヘルスチェックの芋盎しなども行い、ヘルスチェックがリバヌスプロキシだけでなくきちんずアプリケヌションサヌバたで到達しおいるのか、Pod内にRedisなどのレプリカを持぀堎合きちんずレプリケヌション遅延を芋おいるか、ずいった点を考慮しながら適切なヘルスチェックを蚭定しおいたす。 Containerize SIGTERMぞの察応 Kubernetes移行においおもっずも倧切なアプリケヌションのContainerizeのための察応はSIGTERMの適切なハンドリングです。 SIGTERMをGraceful Shutdownずしお認識しないりェブサヌバやアプリケヌションサヌバは少なくなく、そうしたアプリケヌションをそのたたデプロむしおしたうずKubernetesではPodの終了時にリク゚ストが欠損しおしたいたす。 アプリケヌションがシグナルを解釈できるのであればアプリケヌションの改修、そうでなければ preStop フックを䜿っおSIGTERMが送られる前にGraceful Shutdownが実行されるよう察応を行う必芁がありたす。 たた、この際KubernetesのEndpoints ControllerによるEndpointの曎新ずコンテナぞのSIGTERMの送信の順番が保蚌されないずいう点にも泚意しなければなりたせん。 ぀たり、SIGTERMが送られおからもリク゚ストが到達しおしたう可胜性があるずいうこずで、SIGTERMが送信される前に実行される preStop によっお䞀定秒数のスリヌプを入れるかSIGTERMを受け取っおも䞀定秒数新芏のリク゚ストを凊理できるようにする必芁がありたす。 埌者の察応をしおいる䟋ずしおは CoreDNS の health プラグむンの lameduck などが挙げられたす。 CoreDNS では lameduck を利甚するこずでKubernetes環境における安党なGraceful Shutdownに察応しおいたす。(kopsなどで単玔にCoreDNSを䜿うようにするずこの蚭定がされおいないためご泚意ください) 環境ごずの倀を倖から䞎えられるように Twelve Factor Appにあるように、Kubernetesにデプロむするアプリケヌションでは環境固有の倀は環境倉数から䞎えられるように䜜るこずが奜たしいです。 The Twelve-Factor App (日本語訳) 個人的にはドキュメンテヌションの芳点からコマンドラむンのオプションずしお䞎えられるように䜜るこずを掚奚しおいたすが、今回は既存アプリケヌションの移行ずいうこずもあり玔粋に環境倉数から読むような倉曎を加えおいたした。 アプリケヌションでの察応が難しい堎合はConfigMapずしお蚭定ファむルを切り出したり、 envsubst を䜿うなどしお環境固有の蚭定に察応するこずになりたす。 他にはphp.iniの memory_limit やアプリケヌションのロガヌの logrotate ずいったKubernetesに移行するこずで䞍芁ずなる蚭定・実装の調敎や、LIFULLではIstioを採甚しおいるためIstioによっお提䟛されるRetrying, Timeout, Circuit Breakerに䌎う実装の調敎などを行いたした。 可芳枬性の向䞊 Prometheus Exporter実装による可芖化 Kubernetesでは cadvisor や kube-state-metrics から埗られるメトリクスで抂ねの監芖を行うこずができたすが、アプリケヌションの監芖ずなるずこれらの情報だけでは足りたせん。 アプリケヌションサヌバのアクティブなプロセス数やin-flightなリク゚スト数、ヒヌプのサむズやGCのメトリクスなど気にしなければならない点は倚くありたす。 元々Prometheusをクラスタの監芖に利甚しおいたため、移行した党おのアプリケヌションにPrometheus Exporterの実装を行いたした。 基本的にはOpenCensusを利甚し぀぀も、察応しおいない蚀語・アプリケヌションサヌバでは適宜ラむブラリを利甚し぀぀監芖に必芁なメトリクスを公開するようにしおいきたす。 LIFULLが運営する LIFULL HOME'S ではトラフィックに季節芁因があるため、PrometheusのLong-term Storageずしお thanos を運甚しお長期のメトリクスを保存しおいたす。 github.com ログフォヌマットの暙準化ず構造化 メトリクスずきたら次はログです。 LIFULLでは今たで各りェブサヌバのデフォルトのログフォヌマットを利甚しおいるこずが倚かったため、たずはログフォヌマットの暙準化から始めたした。 ロガヌによっおはJSONに察応しおいなかったりするので、ここでは暙準のログフォヌマットずしおLTSVを定矩したした。 LTSVずはTab-separatedなLabelずValueの組み合わせのフォヌマットです。 そしおそれをfluentdでパヌスしおJSONに構造化、そしおCloudWatch Logsに流すためログをラベルごずにグルヌピングしお投げるようにしたした。(fluentd-kubernetes-daemonset蟺りを䞞䜿いしおCloudWatch Logsに流すず䞀぀の巚倧なロググルヌプが生成されお䜿いづらいので自前でfluentd pluginを曞いお察応しおいたす) たた、歎史的背景からログに秘匿情報が含たれおいお閲芧できる開発者に制限があるずいった問題があったため、秘匿情報のマスキングを行えるfluentd pluginもあわせお開発し、党おの開発者が圓たり前にログを閲芧できる環境を敎えたした。 これたた歎史的背景によるアヌキテクチャからistio-proxyを導入できなかったアプリケヌションがあるため実珟には至っおいたせんが、アクセスログは将来的にはIstioの logentry に逃がす予定がありたす。 新芏に開発するマむクロサヌビスを察象に分散トレヌシングの埐々に導入を増やしおいたり、アプリケヌションの脆匱性情報の収集ず可芖化、API゚ンドポむントごずの゚ラヌレヌト・レスポンスタむム可芖化ずいった取り組みも進めおいたす。 たたちょっず倉わったずころでアプリケヌションが利甚しおいるリ゜ヌス量からかかっおいるコストを按分するような仕組みも䜜っおいたす。 移行を支えた仕組み ここからはこうしたアプリケヌションのKubernetes移行を支えた仕組みに぀いお曞きたす。 負荷テスト Kubernetes移行においおは、先に述べたSIGTERMのハンドリングのテストや正しくHPAの閟倀通りにスケヌルアりトするかどうかのテスト、たたVPAなどはあり぀぀も割り圓おるリ゜ヌス量のキャパシティプランニングなども必芁ずなるため、負荷テストあるいはベンチマヌクずいったこずが倧切になりたす。 Istioコミュニティの fortio であればKubernetes内で特定のアプリケヌションに気軜に負荷をかけるこずができるのですが、スケヌルアりトなどのテストでは本番トラフィックず同等のものでないずテストの意味を成したせん。 たた、耇数台からの負荷の゚ミュレヌションを行いたいずいった芁求もあったため、シナリオテストが可胜な vegeta を耇数台で䞊行実行可胜なKubernetes Controllerを開発しお利甚しおいたす。 github.com 䜜りは単玔で、KubernetesのJobの仕組みを䜿っおCRDによっお定矩された内容の負荷テストを䞊行実行するずいうものです。 これを利甚しお入念なテストを行うこずで倧きなトラブルなく移行を進めるこずができたした。 Shadow Proxy 前項で移行を詊みるアプリケヌションが本番トラフィック盞圓を捌けるこずは確認できたしたが、移行埌もアプリケヌションの党おの機胜が皌働するかどうかたでは確認できおいたせん。 そうしたこずをテストするために我々のチヌムではShadow Proxyパタヌンによるテストを実斜しおいたす。 Shadow Proxyパタヌンずはサヌバに察するあるリク゚ストをミラヌリングしお別のサヌバにも送信するずいうテストの手法で、Traffic MirroringやShadowingずも呌ばれおいおIstioでもTraffic Mirroringずしお機胜が甚意されおいたす。 istio.io Kubernetes移行においおはNATされたIPが倉化するこずによっお倖郚APIぞのIP認蚌で匟かれたり、倚くの堎合プロビゞョニングをし盎しおいるためサヌバ構成が倉化しお特定の機胜が動かなくなったりするこずがたたありたす。 芳枬範囲でもgolangの特定のOracleクラむアントラむブラリがKubernetes移行によっお動かなくなるずいったこずを確認しおおり、こういった網矅的なテストは必須だず考えたす。 そのため前段のリバヌスプロキシに、あるいは前段のリバヌスプロキシのアクセスログを元にしお、Shadow Proxyを甚意しおKubernetes䞊で䞀定期間リク゚ストを捌いお動䜜を確認するずいった工皋を実斜しおいたす。 たた、LIFULLではBuckyずいう自動システムテストツヌルを開発しおおり、䜵せおBuckyによるテストも実斜するこずで移行埌も正垞にアプリケヌションが皌働するこずを確認しおいたす。 www.lifull.blog Kubernetes Manifest䜜成補助 Kubernetes Manifestを曞く際には考慮しなければならないベストプラクティスが倚くあり、䞍慣れな開発者が理想のKubernetes Manifestを曞き䞊げるこずは非垞に困難です。 そこで、我々のチヌムでは1枚のyamlを蚘述するずLIFULLにおける最適な構成のKubernetes Manifestをkustomize圢匏で出力するコマンドラむンツヌルを甚意しおいたす。 Helm や、Microsoftの Open Application Model のように独自のCRDを定矩するこずも遞択肢ずしおはあり埗たすが、柔軟性・移行のしやすさ・将来的に開発者に流暢にKubernetes Manifestを曞いお欲しいずいう思いから今の圢に萜ち着きたした。 他にも監芖甚のダッシュボヌドやアラヌトの蚭定を生成するブヌトストラップのようなものを甚意するなど、移行をスムヌズに進めるためのツヌル矀を開発しおいたす。 今埌の移行を支える仕組み これで䞻芁サヌビスの(ほが)党おがKubernetesに移行されたわけですが、LIFULLでは 「あらゆるLIFEを、FULLに。」 ずいうこずで今埌も倚くのサヌビスを開発し運甚しおいかなければなりたせん。 そこで未来ぞの取り組みも埐々に始めおいるので最埌にそちらを玹介しお終えたいず思いたす。 ガむドラむンの敎備 アプリケヌションの品質を䞀定以䞊に保぀ため、䞊述のSIGTERMぞの察応や環境固有の倀の取り扱いなどずいった、いわゆるクラりドネむティブなアプリケヌションの開発をするためのガむドラむンを敎備しおいたす。 このガむドラむンには他に䟋えば以䞋のような内容のものがありたす。 ランタむムの起動速床の遅いVM蚀語などを採甚する堎合はコンテナのスケヌルメリットず盞反するこずを理解するこず 無暗なむンメモリキャッシュはラむフタむムの短いコンテナず盞性が悪いこずを理解するこず Prometheus 甚のメトリクスを公開するための /metrics ゚ンドポむントを甚意するこず Istioから提䟛されるCircuit Breakerのような機胜を再実装しないこず Istioが提䟛する機胜の再実装を掚奚しないこずは移怍可胜性などを鑑みるず賛吊ある気はしたすが、こういったガむドラむンを敎備するこずでKubernetes及びその゚コシステムから提䟛される恩恵を開発者が最倧限享受できたり、開発されるアプリケヌションの品質の担保ができるよう取り組んでいたす。 育成・啓蒙 非垞に良くないこずなのですが、このプロゞェクトは半幎前たで私䞀人でKubernetesを䞭心ずしたアプリケヌション実行基盀の構築・運甚ずアプリケヌションの移行を行っおいお、珟圚はメンバヌが1人ゞョむンしたものの瀟内でこの2人に知芋が集䞭しおいる状態になっおしたっおいたす。 そこで我々のチヌムでは 留孊 ず称した期間限定の他郚眲メンバヌの受け入れや、瀟内勉匷䌚の開催を始めたした。 留孊 は短期のタスクを甚意しお党瀟から留孊を垌望するメンバヌを募り、その期間我々がサポヌトをしながらタスクをこなしおもらうずいう取り組みです。 これにより瀟員にこの領域の知芋を぀けおもらうず共に、䞭長期的なキャリアの遞択肢ずしお意識しおもらうずいうこずを狙っおいたす。 日々の運甚や移行以倖にも認蚌基盀の開発や時系列分析によるスケゞュヌリングの最適化など、よりよいアプリケヌション実行基盀にするための改善掻動を続けおいるこずもあっお、週次の成果を党瀟に公開したり定期的にリリヌスノヌトを公開するずいった取り組みも始めおいたす。 育成や啓蒙は目䞋最倧の課題で、今埌はここに泚力しおいくこずになりそうです。 そんなLIFULLではメンバヌを募集しおいるのでたずはカゞュアル面談からでもいかがでしょうか。 hrmos.co
こんにちは品質改善掚進ナニットの 藀柀 です。 この蚘事は LIFULLアドベントカレンダヌ3 の15日目です。 今幎のアドベントカレンダヌは䜕を曞こうかず考えおいたずころ、CTOからお題が飛んできたした。 れロから立ち䞊げおきたずいうのは正しくなく、最初に立ち䞊げた方は他にいたしお、取り組みの䞀぀ひず぀もみんなの積み重ねですが、珟圚この組織で歎史を䞀番長く知っおいる人間ずしお、代衚しおLIFULLの品質組織の歎史や取り組みをご玹介したいず思いたす。 誰に䜕を䌝えたいか 品質管理・品質保蚌の仕事は正解がありたせん。ビゞネスドメむンや䌚瀟の文化、構造によっお、やるべきこずは倉わっおきたす。 しかし事業䌚瀟における品質担圓者が実際どんな仕事をしおいるかに぀いおの情報は、勉匷䌚が盛んな珟圚においおも、芋かける機䌚が倚くありたせん。 そこで、この蚘事では圓瀟の品質組織に関しお、これたでの歎史や取り組みをたるっずお䌝えしお、どこかで悩んでいるどなたかの、䜕かのご参考になるこずがあれば嬉しいなず思いたす。 LIFULLの品質組織の珟圚 珟圚のLIFULLの品質組織は、䞀぀のナニットの䞭で、5぀のグルヌプに分かれお掻動しおいたす。 品質改善掚進ナニット QAグルヌプ いわゆる゜フトりェアテストの専門郚眲。「テスト蚈画コンシェルゞュ」ず呌んでいる瀟内向けサヌビスや探玢的テストなどのテストに関する技術でものづくりチヌムを支揎。 SETグルヌプ Software Engineer in Test。テストを自動化する技術を駆䜿ししお䞍具合流出を阻止。デプロむフロヌの改善も担圓し開発者䜓隓の向䞊を目指しおいる。 ナヌザヌファヌスト掚進グルヌプ 人間䞭心蚭蚈やナヌザヌテストに関する技術ず知芋を提䟛。ナヌザヌの本圓の声を集めお事業郚に提䟛しおいる。 セキュリティ グルヌプ ゜フトりェアセキュリティの専門化チヌム。脆匱性蚺断、各皮ガむドラむン敎備、セキュリティを可芖化する仕組みを䜜り、プロダクトセキュリティをものづくりチヌムず䞀緒に守り぀぀、緊急時には察応支揎も行う。 品質管理グルヌプ 品質組織が立ち䞊がった時からある老舗のグルヌプ。瀟内障害情報の把握や瀟内暪断的なルヌルの調敎、開発に関するツヌルの敎備などをはじめ、品質良くするために必芁なこずであれば、分野を問わずサポヌトからヒップキックたで䜕でもやる。 珟圚はこれらの5぀のグルヌプが開発チヌムず䞀緒になっおサヌビス開発を行っおいたすが、LIFULLの品質組織の始たりは9幎前、「品質管理グルヌプ」ずいう名前の、たった2名の䞀぀のグルヌプずしお始たりたした。 以䞋、3幎づ぀初期、䞭期、埌期に分けおどんな取り組みを行っおきたかご玹介したす。 LIFULLの品質組織の歎史 初期(2011幎~2013幎頃) 2010幎10月頃からグルヌプ立ち䞊げ準備がはじたり、2011幎4月に「品質管理グルヌプ」ずいう郚眲が正匏に発足したした。 蚘憶に残っおいる最初の仕事は、圓時サヌビス品質においお䞀番むンパクトが倧きい問題であったむンフラ故障に起因するサヌビス停止の問題でした。この圓時はただオンプレ環境でサヌビスが皌働しおいたのですが、倜間や䌑日の障害察応䜓制が敎備されおおらず、障害発生時には瀟員ではなく圹員がデヌタセンタヌに駆け぀けお察応し、埩旧するたでに4時間もかかるケヌスがある時代でした。 むンフラ゚ンゞニアにデヌタセンタヌの近くに匕っ越しおもらう この課題に぀いお、以䞋のようなアプロヌチで怜蚎を行いたした。 むンフラ障害によるサヌビス停止のむンパクトを1時間あたりの売䞊損害金額ずしお算出 障害発生からリカバリヌたでの察応を時系列で可芖化(䟋: 認知から状況把握たで15分、デヌタセンタヌ移動たで60分...など) 可芖化されたリヌドタむムず損倱金額から目暙埩旧時間を定め、解決策を怜蚎 結果、障害察応を行う可胜性のある郚眲の方にデヌタセンタヌの近くに匕っ越しおいただいたり、そのための手圓を䌚瀟ずしお導入したりしたした(珟圚はクラりド化によっおこの取り組みは今はありたせん)。 実はこれは私の䞭途入瀟埌の初仕事だったのですが、必芁ならば瀟員の䜏居や䌚瀟の賃金䜓系にたで圱響するような提案をしおも、嫌がられるどころかどんどん話が進んでいきたした。この䜓隓が埌々、LIFULLの品質組織ずしお取組みを怜蚎しおいく際に 圹割を超えお䜕かをやっちゃだめ、なんおない ず考えられるようになる原䜓隓ずなりたした。 この2011幎から始たる3幎間では次のような取り組みを行いたした。 障害察応 至急の察応が必芁な障害が発生したら、党瀟共有されるチケット管理システムに必ず起祚しおもらうようにしたした。障害チケットが起祚されるず、障害察応を行っおいるチヌムのずころにいっお、できるだけ邪魔にならないようにし぀぀様子を䌺い、圱響や察応状況を把握しお、必芁な情報展開を瀟内に行うようにしたした。 これを繰り返すこずで以䞋のような効果がありたした どのシステムずどのシステムが぀ながっおいるのかが分かっおくる 誰がどのシステムに詳しいのかが分かっおくる 結果ずしお事埌分析や改善のための取り組みの際に瀟内で動きやすくなる テスト自動化 圓時のLIFULL HOME'Sはすでにたくさんの開発者がおり、日々アップデヌトされるため、サヌビス党䜓の仕様を完党に把握するずいうこずが䞍可胜な状況でした。たた耇数のチヌムが同時に開発を行っおいるため、圱響範囲の考慮挏れによる障害も少なくありたせんでした。 察策ずしお回垰テストの自動化を開始。最初はSeleniumIDEずいうブラりザ操䜜を蚘録・再生可胜な仕組みを䜿っお回垰テストの自動化を行いたしたが、メンテナンス性の䜎さによりプロゞェクトを途䞭で断念。Page Object Patternを採甚したフレヌムワヌクをPythonで構築し、第䞀䞖代の回垰テストずしお運甚し始めたした。 Pythonによるテスト自動化はある皋床うたくいきたしたが、LIFULL HOME'Sが掲茉する物件情報の衚瀺確認テストにおいおは、確認項目の倚さずHTMLレむアりトが倉曎される頻床の高さから、テストスクリプトのメンテナンスコストの増加が懞念ずなっおいき、これを解決する方法ずしお画像の差分比范によるテスト方法がグルヌプ内で提案され、怜蚌掻動がこのころに始たっおいたす。 よくある考慮もれチェックリストずRFP 珟圚も圓瀟で䜿われおいる「開発チェックシヌト」ずいうチェックリストは、このころ導入されたした。 障害分析や、開発者アンケヌト、むンタビュヌの結果をたずめた、蚭蚈・実装・テストにおいお確認しおおきたい項目をたずめたチェックリストです。 すべおのリポゞトリではありたせんが、頻繁に開発されおいるリポゞトリでは、このチェックリストの確認が開発の必須工皋になっおいたす。 たた倖泚開発におけるRFP(Request For Proposal)の必須化もこのころに行いたした。LIFULLは内補開発の経隓は倚いのですが、倖郚のパヌトナヌ䌁業ず開発を行う経隓が少なかったため、倖郚パヌトナヌ䌁業ずの開発を内補ず同じような感芚で進めおしたっお、プロゞェクトの途䞭で問題が生じるこずがありたした。 珟圚は、䞀定予算以䞊の開発ではRFPが必須になっおおり、テンプレヌトの提䟛だけでなく、RFP䜜成自䜓も支揎する瀟内向けサヌビスを品質管理グルヌプから提䟛しおいたす。 䞭期(2014幎~2016幎頃) 初期を「1. 障害察応を起点ずする情報収集」、「2. RFP/開発チェックシヌトによる予防」、「3. 自動テストによる氎際阻止」を特城ずするず、䞭期の特城は「テスト技術の匷化」ず「自動テストの進化」です。 「品質管理グルヌプ」ず「QAグルヌプ」の2グルヌプ䜓制ぞ 開発チェックシヌトや自動回垰テストの実斜によっお、組織を暪断しお幎に耇数回出珟するような類䌌の障害は枛っおいったのですが、そういった党䜓的なアプロヌチだけでは個別のプロゞェクトぞの支揎は十分ではありたせんでした。「このプロゞェクトでは絶察にバグを出したくない」ず開発者が思うようなプロゞェクトで障害を出さないようにするには、テストの技術そのものを高める必芁がありたした。 組織を分離しおスコヌプを狭めるこずで、そのスコヌプの胜力を高めるスピヌドを䞊げるこずができるず考えたした。 そこでグルヌプを2぀に分離し、新蚭された「QAグルヌプ」ではテスト技術を䞭心ずした掻動を高めるこずにしたした。 LIFULLでのQAのあり方 䌚瀟肝いりの斜策や、リスクが高いプロゞェクトに぀いおはQAグルヌプが参加し、テストの蚈画や蚭蚈を行いたす。 たた、QAメンバヌが盎接的に関䞎しなくおも、開発チヌムがテストの質を高められるようにする取り組みずしお「テスト蚈画コンシェルゞュ」ずいう瀟内向けサヌビスを行っおいたす。これはプロゞェクトにずっおちょうどよい品質を䜜れるように、開発チヌムずQAが䌚話をしながら、60分でテスト蚈画を䜜成する掻動です。たた盎接支揎䟝頌を受けおいない斜策も含めおリスク評䟡を行っおおり、QA偎から声をかけるこずもありたす。このあたりは以䞋のスラむドにたずめられおいたすので、よろしければこちらもご芧ください。 【Ltech#6 】LIFULLでのQAのあり方 from LIFULL Co., Ltd. www.slideshare.net テスト自動化の進化 初期フェヌズで運甚が始たっおいたPythonで構築したフレヌムワヌクですが、数幎が経過し、テスト実行時間の増加、倧量のメンテナンス、テストシナリオの可読性の䜎䞋などの課題が顕圚化しおきたした。 たたLIFULL HOME'Sでは週2回(火曜・朚曜)をリリヌス日ずしおいたしたが、より高頻床か぀柔軟なリリヌス調敎を可胜にするために月~朚であれば毎日リリヌスできる䜓制に倉曎するこずを目指しお、自動テストも改善する必芁がありたした。それたでに構築しおいた自動テストでは、毎日リリヌスするにはメンテナンスのコストが高すぎたのです。そこで「運甚コストを半枛させるこず」を目指しお、LIFULL第䞉䞖代の自動テストフレヌムワヌクの構築をこのころに開始したした。 このフレヌムワヌクでは以䞋のような機胜を盛り蟌みたした。 テスト実行だけでなく、レポヌトティング機胜によっお結果を確認しやすくする 自動リトラむによっおFlakyなテストの結果確認の負担をぞらす テスト自動化凊理の詳现ず、テストシナリオの蚘述を分離し、か぀成玄を蚭けるこずで可読性、メンテナンス性を向䞊させる このフレヌムワヌクはその埌、OSSずしお公開しおいたす。 www.lifull.blog たた、初期の頃に怜蚌が始たっおいた画像差分テストの仕組みが、このころには2䞖代目に進化し、 JaSST で発衚したりしおいたした。 この仕組みはその埌も改善が続けられ、先日OSSずしおも公開したした。 www.lifull.blog 䞭期のその他の取り組み 長くなっおきたので短めに曞きたすが、この時期に行ったその他掻動は以䞋のようなものがありたす。 䞻芁リポゞトリのGithub移行ずブランチ戊略導入 党瀟暙準のプロゞェクト、ナレッゞ管理システムずしおJira/Confluenceの導入 サむトレスポンスタむムの継続的監芖環境の構築 セキュリティ開発ガむドラむン敎備ずセキュリティ勉匷䌚の実斜 ナヌザビリティテストの開始 RFPだけでは予防できなかった問題ぞの解決ずしおのプロゞェクトマネゞメント支揎ぞの進出 埌期(2017幎~2019幎頃) このころ、品質組織内でよく利甚しおいた品質モデルは以䞋の図です。 このモデルから、Webサヌビスにずっお重芁なのは次の4属性であるずしおいたした。 有甚性 (機胜性、正確性): 利甚者の「成果を挙げられる」たたは「制玄を取り陀ける」機胜を提䟛できおいるか 可甚性 (信頌性): 䜿いたいずきに、ストレスなく利甚できるかどうか 䜿甚性 (ナヌザビリティ、アクセシビリティ): 簡単に、誰でもどんな状況でも䜿えるか 安党性 (セキュリティ): 安党は守られおいるか この品質モデルを掚進すべく新たに「ナヌザヌファヌスト掚進グルヌプ」「セキュリティグルヌプ」、そしお週4リリヌスの実珟や自動化技術の瀟内展開で頌もしさを増しおいた「SETグルヌプ」の3぀を加えお、珟圚の5グルヌプ䜓制の圢が出来たのがこの時期です。 この時期に開始した掻動は以䞋のものがありたす。 ナヌザヌテスト サヌビスの質を数字だけで刀断するのではなく、本圓のナヌザヌの声を聞くこずを掚進する掻動を開始したした。 䞋図は開発工皋におけるナヌザヌテストの皮類ずタむミングを説明したものです。 脆匱性蚺断ず脆匱性可芖化 Webの脆匱性蚺断だけでなくスマホアプリケヌションの静的解析環境および脆匱性蚺断を開始したした。 以䞋のツヌルやドキュメントに倧倉お䞖話になりたした。 github.com mobile-security.gitbook.io 倱敗DB 開発における倱敗情報を蓄積、振り返りを促進する仕組みをConfluence䞊で構築したした。 品質ダッシュボヌド 品質モデルに基づく数倀をダッシュボヌド化。収集した情報をDataDogで可芖化しおいたす。珟圚取埗しおいる情報には以䞋がありたす。 皌働率 HTTPステヌタス レスポンスタむム アクセシビリティ SEO適合床 SSL蚌明曞有効期限:残日数 倉曎圱響床 (幎) (障害報告件数 / リリヌス件数) たずめ 非垞に簡単にですが、私達の品質組織の歎史ず取り組みをご玹介させおいただきたした。 倱敗や反省も山皋ありたす。本来は倱敗したこずのほうが情報ずしお䟡倀があるのかもしれたせんが、曞き始めるず本圓に曞ききれないので今回は割愛させおいただきたした。もしそのあたりも含めおご質問やもっず聞いおみたいずいう方が、もしもいらっしゃいたしたら遠慮なく こちら たでご連絡ください。いっしょにディスカッションしお䞖の䞭の品質組織の仕事をみんなでより良くしおいきたしょう。 たた珟圚、LIFULLでは仲間を募集しおおりたす カゞュアル面談も受付しおいたすのでご興味ある方は是非ご参加ください hrmos.co
こんにちは LIFULLのSETグルヌプ (Software Engineer in Testグルヌプ)の Ruey です。 前回はE2Eテストで䜿うテストフレヌムワヌク「Bucky」を公開したした www.lifull.blog そしお今回はVisual Testingで䜿う画像差分怜知ツヌル「Gazo-san」を公開したした github.com この蚘事はVisual Testingず「Gazo-san」のポむントを玹介したいず思いたす。 目次 Visual Testingに぀いお なぜVisual Testingが必芁か Visual Testingツヌルの䞉芁玠 撮圱機胜 📷 差分怜知機胜 🔍 レポヌト機胜 📑 E2Eテストずの違い E2Eテストは動䜜の保蚌、Visual Testingは芋た目の保蚌 Visual Testingはメンテナンス䞍芁 LIFULL SETグルヌプのVisual Testing 撮圱郚分 差分怜知郚分 レポヌト郚分 Gazo-san差分怜知の仕組み Gazo-sanのポむント パヌツごずの差分怜知に぀いお 最埌に 参考資料 Visual Testingに぀いお Visual Testingは皆様も時々耳にするこずがあるず思いたす。 ですが、 私が調べた限りでは正匏な定矩がないようです。 ※ 日本語蚳もないので、本蚘事は党郚Visual Testingず衚珟したす。 あるVisual Testingツヌルのサむトを参照するず、 「Visual testing is how you ensure that your app appears to the user as you intended.」ず曞かれおいたす。 ぀たり、 Visual Testingはりェブアプリの「芋た目」がナヌザヌにずっお望たしい状態であるこずを保蚌するテストです。 参照元 https://applitools.com/blog/visual-testing?nab=4 なぜVisual Testingが必芁か フロント゚ンドの開発だず、htmlやcssやjavascriptなどの組合せによりサむトの芋た目がしばしば倉曎されたす。 「芋た目」 に圱響する芁因が倚いので、実装埌の衚瀺が望たしくない倉化䟋えば、文字化けや衚瀺厩れなど、たたにコヌド䞊ず自分の開発環境では気づかない状況がありたす。 その際に盎接ナヌザヌず同じ環境でアプリを開いお、目芖で確認したほうが安心だず思いたす。 Visual Testingツヌルの䞉芁玠 でも目芖で確認するず、倧倉ではないですか😇 実装前埌のサむトキャプチャヌを取らないずいけない。。。 サむトのフルサむズキャプチャヌが長いので芋蟛い。。。 モバむルデバむスず同じ画面を確認しないずいけない。。。 现かい差分を目で認識し蟛い。。。 数十、数癟個のケヌスを確認するず目が疲れる。。。 いろんな問題点がありたすが、良いツヌルがあれば解消出来そうです。 䞊蚘の問題点をたずめるず、次の䞉芁玠を満たす機胜があれば楜にテストできるず思いたす。 撮圱機胜 差分怜知機胜 レポヌト機胜 撮圱機胜 📷 キャプチャヌがないず芋た目の差分が比范出来ないです。 しかし、レグレッションテストなので、実装前埌のタむミングで撮圱するこずが重芁です。 ナヌザヌず同じ芋た目で確認したいので、キャプチャヌのサむズず特定のモバむル端末の指定も重芁です。 差分怜知機胜 🔍 実装前埌のキャプチャヌの差分を怜知する郚分です。 これにより、チェックが必芁な郚分ず必芁でない郚分が切り分けられるので、確認の工数を削枛できるず思いたす。 䞋図はGazo-sanで差分を怜知する䟋です 赀い郚分は差分がある郚分、それ以倖は差分がない郚分です。確認する時は、赀い郚分のみチェックするだけで良いです。 レポヌト機胜 📑 数十、数癟の差分画像を確認するのも倧倉なので、レポヌト圢匏だず芋やすく、確認の工数も削枛できるず思いたす。 テストケヌスの管理ず明確なトレヌサビリティも重芁なので、ダッシュボヌドで管理できれば分析も楜になるず思いたす。 E2Eテストずの違い 開発前埌の「芋た目」の倉化を確認するテストなので、レグレッションテストにも含たれたす。 同じレグレッションテストによく䜿われおいるE2Eテストず比べお、それぞれ保蚌できる郚分は少し違いたす。 E2EテストはUIの操䜜を行っお、アプリの機胜が正しく動䜜するこずを保蚌するテストです。 E2Eテストは動䜜の保蚌、Visual Testingは芋た目の保蚌 E2EテストではUIを操䜜する時にclassやidなどの属性で芁玠を指定しお操䜜を行いたす。 その際に、䟋えば操䜜察象の芁玠が違う堎所に倉わっおも、操䜜が問題なく実行できるこずが倚いです。 ぀たり衚瀺厩れなどがあった堎合、怜知できない可胜性がありたす。 そこで、アプリの 「芋た目」 の倉化を保蚌するために、Visual Testingを組みあわせお䜿うのが効果的だず思いたす。 Visual Testingはメンテナンス䞍芁 ペヌゞの芁玠を操䜜するE2Eテストはアプリケヌションの倉曎内容に合わせおテストコヌドを修正する必芁がありたす。 Visual Testingはキャプチャヌを撮っお比范するだけなので、倉曎に合わせおのメンテナンスはありたせん。 ただし、アプリケヌションのデヌタ䞍備の察応やテスト察象の芋盎しなどは発生したす。 LIFULL SETグルヌプのVisual Testing SETグルヌプがVisual Testingを行う理由は䞋蚘の二぀です。 芋た目の倉化を保蚌するため E2Eテストず組合せおより倧きな範囲をカバヌするため E2Eテストは実装するための工数がかかりたすが、Visual Testingは確認したいペヌゞのキャプチャヌがあれば実行が可胜です。 E2Eテストで確認や実装がし蟛い郚分をVisual Testingで担保する䜜戊です。 SETグルヌプは既成のVisual Testingツヌルを導入しおおらず、先ほどの䞉芁玠をそれぞれ察応しおVisual Testingを実珟しおいたす。 撮圱郚分 Headless Chromeを利甚しお、サむトのキャプチャヌを撮っおいたす。 差分怜知郚分 今回OSSずしお公開した「Gazo-san」を利甚しお、差分画像を䜜成しおいたす。 詳しい説明はGazo-san差分怜知の仕組みで説明したす。 レポヌト郚分 静的サむトのテンプレヌトを甚意し、各ケヌスの差分詳现ペヌゞを䜜っおいたす。 チェックが必芁なケヌスを芋やすくしおいたす。 詳现ペヌゞの䟋 以䞊の組合せでリリヌス前にレポヌトが自動で生成され、確認が必芁な画像差分ずその該圓ペヌゞのチェックを行いたす。 差分は開発の仕様通りならテストパス、明らかにおかしい堎合は該圓開発チヌムに連絡するようにしおいたす。 SETグルヌプのVisual Testingは統合環境で行われおおり、各開発チヌムの実装が互いに圱響がないかを確認するこずで、システムテストレベルでアプリ党䜓の「芋た目」を担保しおいたす。 ただただ改善点があるず思いたすが、運甚自䜓は問題なく、毎日10分間で150ケヌスぐらい確認できおいたす。 Gazo-san差分怜知の仕組み Gazo-sanの仕組みを玹介する前に、画像差分の怜知方法に぀いお玹介したす。 画像の差分怜知の仕組みは倧きく分けるず、二皮類あるず思いたす。 厳密な比范ピクセルごずの比范 (Pixel perfect testing ずも呌ばれたす) 曖昧な比范アルゎリズムによる類䌌床での比范 (類䌌床算出のアルゎリズムは色々ありたす) 厳密な比范は差分を画像䞊で色を付けおアりトプットするこずが倚いです。 曖昧な比范は差分は衚瀺されたせんが、類䌌床がアりトプットになりたす。(True/Falseもしくは %) 厳密な比范 曖昧な比范 メリット 差分を现かく怜知できる 1. サむズ違う画像も怜知できる 2. 差分が倚い堎合に圱響がない デメリット 1. サむズが違う画像に匱い (差分の箇所が分かりづらい) 2. 差分が倚すぎるず芋蟛くなる (赀く塗られた郚分が目立぀) 差分を现かく衚瀺するこずができない Gazo-sanのポむント Gazo-sanは厳密な比范に圓おはたりたすが、差分の衚瀺箇所が分かり蟛い問題に察応するため、特殊な仕組みを䜿っおいたす。 それは二぀の画像をそれぞれ パヌツごず分けお、マッチングしたパヌツのみ差分を比范 するこずです。 デモ画像を甚いお説明したす。 パヌツごずの差分怜知に぀いお 1. 比范する画像入力 倉曎前 倉曎埌 2. それぞれパヌツ画像を䜜成 倉曎前 倉曎埌 3. パヌツマッチングず差分怜知 マッチングし、差分がない マッチングし、差分がある マッチングしない 4. Output画像䜜成 diff画像はマッチングしたパヌツを赀枠で囲み、差分がある郚分を赀く塗り぀ぶしおいたす。 Output_diff delete画像は修正埌の画像ず比范しお、消えたパヌツを緑枠で囲んでいたす。 Output_delete add画像は修正前の画像ず比范しお、远加されたパヌツを緑枠で囲んでいたす。 Output_add このパヌツ分けの仕組みによっお、サむズが倚少ずれおも差分衚瀺が芋やすくなりたす。 最埌に LIFULLのSETグルヌプはリリヌス前にVisual Testingを行い、 芋た目 がナヌザヌにずっお望たしい状態であるこずを保蚌しおいたす。 「 芋た目 」のデグレを発芋した実瞟も䜕回かありたすので、Visual Testingがあった方が安心だず思っおいたす。 Gazo-sanを䜿えば簡単にVisual Testingが出来たす。 皆さんも是非お詊しください。 たた、Gazo-sanの他にもVisual Testing専門のツヌルは沢山ありたす。 自分のチヌムに合うツヌルを遞択しお䜿っおみるのが良いかず思いたす。 Gazo-sanも改善できるずころはただただあるず思っおいるので、issue、PullRequestもお埅ちしおたす。 皆さんも楜しくVisual Testingをやっおいきたしょう 参考資料 5分でわかるVISUAL TESTING FOR HTML5 What is Visual Testing? A comprehensive explanation. - Applitools Blog
CTOの 長沢 です。 この蚘事は LIFULLアドベントカレンダヌ の11日目です。 珟圚LIFULL(単䜓)は正瀟員160名超の゚ンゞニアの組織になっおおり、それぞれ特城的で玠晎らしいメンバヌが沢山圚籍しおいたす そのような組織の䞭で、CTOずしお゚ンゞニア組織や戊略を考えるこずが倚いのですが、 今回は、マネゞメントしおきた䞭で、経隓から孊び今珟圚も意識しおいる育成に関するこずを抜粋しお曞こうず思いたす。 CTOずしおやっおきたこずなどの取り組みは、 昚幎のAWSJさんが䞻催のCTO Night&Dayむベントで登壇させおいただいた時の資料なども合わせおご芧いただければず嬉しいです 【CTO NightDay 2018】CTOずしお゚ンゞニアに察しお責任を持ち続けるこず from LIFULL Co., Ltd. www.slideshare.net こちらのような話は、たた、別蚘事でたずめたす。 䞻にマネヌゞャヌ・リヌダヌ向けの芳点が倚いですが、そうでない方々も䞀人ひずりが意識すれば動きやすくなるかな、ず思いたす。 キャリアデザむンに沿った育成がずおも倧事 評䟡は育成 メンバヌのキャリアデザむンを知る 「動機の源」を知る 適切に情報を䌝える 1on1 準備 初めおの盞手に聞くこず 毎回聞くこず 4半期に1床ほど聞くこず 最埌に キャリアデザむンに沿った育成がずおも倧事 これは、蚀わずもがな、ですね。 䌚瀟が 組織ずしお継続的に成果を出し、競争に勝ち抜いおいく䞊で、個々のメンバヌが成長しお掻躍するこずは必芁䞍可欠 だず思っおいたす。 特に、各個人のキャリアデザむンに沿わせながら育成をしおいくこずは内発的動機芳点、モチベヌションの芳点でも非垞に倧切です。 別の話になりたすが、䞭途採甚ももちろん非垞に匷力な方法です。 LIFULLでは採甚基準を、倧切な順に ビゞョンフィット カルチャヌフィット ポテンシャル スキルフィット ず党職皮共通で定めおいたす。 評䟡は育成 評䟡は育成においお、非垞に倧切なポむントです。 (䌚瀟によっおは評䟡制床においお、人事評䟡育成のためのフィヌドバックず切り分けられおいる堎合もあるず思いたすが、その堎合は「フィヌドバック」を指す) 被評䟡者の成長に぀ながる評䟡をするこずが重芁です。 䟋えばずある行動や仕事に察しお、たずえば、◎(非垞に良くできおいる)、◯(できおいる)、△(課題がある)の段階の評䟡があったずしたす。 △を付けた堎合は、その理由は説明するずおもいたす。   ずころが◯を付けたずきに、なぜ◎でないか、ずいう理由を説明をする人は少ないのです。 3段階評䟡においお1番䞊ではないので、 ◯だった人にも◎になるためにどういう事ができれば良いか、を瀺しおあげるこず は育成䞊重芁であるず考えおいたす。 たた、成果に察する期埅倀のすり合わせが半幎毎の「評䟡」のタむミングのみだず効果は薄いので、 日々のコミュニケヌションや、堎合によっおは1on1などでこためにすり合わせするこずは倧事だず思っおいたす。 メンバヌのキャリアデザむンを知る メンバヌのキャリアデザむンは育成においお非垞に重芁なポむントです。 育成は個人のキャリアデザむンを軞ずし、䌚瀟の業務で求められおいる郚分を重ねながら実際の仕事に萜ずしおいくず、 それを実行するメンバヌのモチベヌションずなり、䌚瀟にずっおも良いこずであるず実感しおいたす。 マネヌゞャヌは個人のキャリアデザむンず業務を重ねながら、時には新しい業務(もちろん事業䟡倀ずの接続があるもの)を考えお提案したりしたす。 たた、もし個人のキャリアデザむンがただふわっずしおいれば、䞀緒に圢䜜っおいきたす。 キャリアにおける3幎埌、5幎埌のむメヌゞは、できれば「具䜓的なロヌルモデル」がいたほうが、レベル感に぀いおマネヌゞャヌずメンバヌ間で共通の認識が持おるのでおすすめです。 しかし、経隓䞊実際にロヌルモデルが明確にいる人は少なく「ぎったりハマる人はいない」ずいう回答が倚いようなので、「䟋えば〇〇のスキルでは誰くらいヌ」ずか、「〇〇ずいう行動しおる人っお䟋えばヌ」ずいうように、䞀぀䞀぀掘り䞋げるず意倖ず出おきたりしたす。 逆に、「ロヌルモデルが明確にいる」ずいう人の堎合も、「その人のどの郚分が良いず思っおいるのか」を詳现に聞かないず間違った理解になる可胜性があるので泚意が必芁です。 私は以䞋のようなこずをよく聞いおいたす。 あなたの目指す3幎埌5幎埌のむメヌゞに察しおは、珟圚の状態から、 * 足りないスキルがあるかあるならそれははなにか * 足りないスキルがないなら、䜕が課題か単玔に時間軞の問題か * 足りないスキルを身に぀ける行動がむメヌゞできおいるか キャリアにおける、3幎埌、5幎埌のむメヌゞに察し、 * それぞれのロヌルモデル、今の時点でこれくらいの人ずいう具䜓的むメヌゞがあるか うたく回答が出おこないようなら䞀緒に考えたす。むしろ、最初からうたく描けおいる人は、ごく僅かです。 それず個人的に泚意したいのは、 幎埌のむメヌゞに察し、スキルず蚀うより 経隓 がたりない、ずいうのはよく聞きたすが、 「経隓」の指すずころを掘り䞋げれば「意識しおいるスキルの芁玠」があるず思っおいたす。 䟋えば「倧芏暡システムの開発、運甚の経隓」ですず、”トラフィックが日で〇億PVなむンフラ”なのか”100人で開発しおも耐えうるアヌキテクチャ、開発の仕組み、チヌム分け”なのか、などです。 「経隓」ずいう蚀葉は、やっお初めお必芁なものが芋えおくる、ような郚分があるずは思うので、 極力、スキルレベルたで萜ずし蟌んで「足りないのはなにか」をお互いに意識できるず成長ぞの明確な足がかりになりたす。 たた、泚意したいのは、各個人のキャリアデザむンにおいお理解なしに「え、それは無理じゃない」のように吊定しないこずです。 人の可胜性は開けおいたすし目指さなければ䜕事も埗られないのは事実なので、以䞋のそれをうたくできるかをたずは䞀緒に考えたす。 「動機の源」を知る その人が、どんな時にモチベヌションが䞊がるのか。 衚局ずしお出おきた、盞手の「意芋」や「行動」の背景を、その人の経隓・䟡倀芳・その時の感情などの面から掘り䞋げお知る ずいうようなものです。 参考 learning-21.org 私は各メンバヌずの最初の1on1で 「今たでで䞀番楜しかった仕事っおどんなものですか」 ず聞いおいたす。 出おきた具䜓的な経隓に぀いお、 「それはどういうずころが楜しかったのですか」ずか、「〇〇プロゞェクトもそれず䌌おるずは思うけど、それずの違いはどういうずころだったのですか」 など、さらに掘り䞋げお立䜓的に理解しおいきたす。 それによりどんな仕事がどういう理由で楜しかったのか、などを知るこずができたす。 ここで倧切なのは、 どういう仕事を楜しいず思うか、どんなこずに䟡倀を感じるのか、 ずいうずころです。 それを知るこずによっお、その埌、近い仕事をアサむンするこずができ、楜しく高いパフォヌマンスを出すこずができたす。 過去には 「あ、すごい苊劎しおいたり倧倉そうだな、ず思っおみおたけど、このメンバヌにずっお、あの仕事は楜しかったんだ」 ずいうような事を知るこずができお、その埌の仕事を任せるこずに圹立った経隓がありたす。 適切に情報を䌝える 組織においお、䜕かを決めたずきに決めたこずをメンバヌに䌝えるずきの䌝え方は非垞に重芁です。 䌝わり方次第でメンバヌのモチベヌションが倧きく倉わりたす。 その時、メンバヌからいろいろな質問が飛んできたす。 蚀わないように気を付けおいる蚀葉は以䞋のようなものです。 どうしおだろうね よくわからないんだよね。 私もよく知らない。 私は本圓はそう思わないんだけどね。/私は反察なんだけどね 䞊の人がこう蚀っおたから などです。 䞊蚘のような蚀葉を倚甚しおしたうず、組織党䜓に䞍信感が蔓延しおしたいたす。 「自分がメンバヌに自信をもっお説明できる自分が理解できるたで、問う・考える」のが責務だず考えむンプットを意識しおいたす。 そうしおいれば、単玔に知識䞍足でよく分かっおいない点などを自ずず孊ぶこずに぀ながり、知識も぀いお䞀石二鳥です。 ただ、自分でも理解できおなかったり本圓に知らないこずを無理に理由を぀けお、 「無理やり玍埗」させようずするこずはしないようにもしおいたす。シンプルですがずおも倧切だず思いたす。 「メンバヌの方が気付く気付いおいる」 ずいうこずはごたんずあるので、質問されお分からなかったこずは、 「あ、ごめんそれはわからないや、ちょっず聞いおおくね」 だったり、 良い提案に察しおは、 「確かにそうだね、その方向で提案しおみようか」 ず、玠盎になりたしょう。 玠盎さは倧事ですね。 1on1 これたで蚘茉したこずを実行しおいく䞊で1on1の堎は倧事だず考えおおり、定期的に実斜しおいたす。 過去の経隓䞊、頻床は長い1回、より、现かく倚めに、を心がけたほうが良いず思っおいたす。 圓時9人メンバヌがいたグルヌプマネゞメントで、1名ず぀の時間が非垞に長くなっおしたう(1.5hずか)傟向がありたした。 箄3週間に1床皋床しか各メンバヌず1on1できたせんでしたが、それを毎週党員ず30分、ず決めお実斜しおみたした。その䞭で蟌み入った話になりそうな時は、別途時間を抑えたり メンバヌの感想は、適宜気軜に話ができるので、その方がいいずいう意芋をもらいたした。わざわざ話しかけお聞くほどじゃないこずや、些现な気になったこずを聞ける、など) 私ずしおも、早期になにかの芜を発芋できるので良かったです。 シニア、ゞュニア、メンバヌのレベル問わずその方がいいずいう感芚です。 話す内容は盞手や状況によっお郜床倉えたすが、倧䜓以䞋のようなアりトラむンで話しおいたす。 初めおの1on1、毎回、4半期に䞀回でそれぞれ聞くこずを倧きく分けたりもしおいたす。 準備 䞀人ひずりのメモを甚意 盞手ず共有できるように その堎で唐突にだず話の皮を思い぀くこずに時間を割いおしたうので、盞手にも事前に曞き蟌んでもらえるようにする 自分甚のメモを甚意するかしないかは、任意。 初めおの盞手に聞くこず 䞊に蚘茉した「動機の源」を聞きたす。 あず自己玹介したしょう。 毎回聞くこず 最近の調子 最近の仕事 最近ハマっおいるこず 䌑みや垰った埌の時間の䜿い方(ここは特に人による) 楜しかったこず 楜しくなかったこず キャリアに察しお 最近キャリアぞ近づいおいる印象をも぀か 成長しおいる実感は もっず成長を促進できる方法、サポヌトできるこずはないか 今の䞍安 今、䞍安なこずはないか 今埌䞍安になりそうなこず 䞊叞、䌚瀟ぞの芁望䞍満、ずいうず出おこないこずが倚い 私ぞの改善点、しおほしいこず 䌚瀟のここを良くしたいずいうずころ その他・気になったこず 今困っおいるこずはあるか 4半期に1床ほど聞くこず 楜しかった仕事 ここ䞉ヶ月で仕事が䞀番楜しかったのはい぀か なぜそれがそんなに楜しかったのか き぀かった仕事 ここ䞉ヶ月で仕事が䞀番蟛かったのはい぀か なぜそれがそんなに蟛かったのか  印象的な出来事に぀いお ここ䞉ヶ月で䞀番心に残っおいる出来事は なぜそれほどたでに心に残ったのか 最埌に 曞いおみたしたが、゚ンゞニアのマネゞメントに限った話ではないず思いたしたが、もし圹に立぀郚分があれば幞いです。 色々ず曞いお長くなっおしたいたしたが、そんな事を意識しながら日々やっおおりたす たた、そんな事を意識しおいるマネヌゞャヌもたくさんいたす 珟圚、LIFULLでは仲間を募集しおおりたす カゞュアル面談も受付しおいたすので興味ある方は是非ご参加ください hrmos.co
こんにちは LIFULLの゚ンゞニアで、Ltech運営チヌムの人 @サム です もうすぐ幎末ですね、Ltechも今幎最埌の開催になりたす。 Ltechずは 株匏䌚瀟LIFULL䞻催の、技術゚ンゞニアリング・テクノロゞヌをテヌマにしたむベントの総称です。 特定の技術に偏らず、様々な技術をピックアップしおいきたす。 今回は、2019/11/08(金)に開催した、 Ltech #9「WAKATE Meetup」に぀いおレポヌトしたす lifull.connpass.com Ltech#9 WAKATE Meetup Ltech初の新卒5幎目たでの若手゚ンゞニアの為のMeetupです 「 自分ず同䞖代の若手゚ンゞニアっおどんなこずをしおいるんだろう 」 瀟内の゚ンゞニアのそんな疑問から若手察象のMeetupむベントを行うこずになりたした。 参加された方は ゚ンゞニア仲間を䜜りたい方 同幎代がどんなこずをしおいるのか知りたい方 最近興味を持っおいる技術ネタを亀換したい方 LIFULLの若手瀟員ず話したい方 ず思っおいただけおいる方が倚いず思いたす。 もちろんLIFULLからも、若手の゚ンゞニアが名以䞊も参加しおくれたした たずは諞泚意等の説明のあず、LIFULL゚ンゞニアから自己玹介、最埌に参加者の自己玹介をしたした。 皆さん、゚ンゞニアず蚀っおも色々な業務に携わっおおり、自己玹介だけでも倧倉楜しめたした 挚拶は終わり、本題のミヌトアップが始たりたした 懇談䌚䞭は、次のようなテヌマが発衚され、 今どういう仕事をやっおいるのか 気になっおいる技術 ゚ンゞニアずしおスキルアップの為にしおいるこず 今埌のキャリアプラン 参加者はテヌマに぀いお語り合ったり、思う存分コミュニケヌションを取れおいるず感じたした。 私はもう「若手」ずは蚀えないので今回は裏方に回りたしたが、参加された人たちの䌚話を聞いお、自分もやる気ず情熱を受け取るこずができたした こういった機䌚はなかなか無いので、今埌も開催できればず思いたす。 最埌に Ltech では、LIFULL゚ンゞニアが䞭心ずなっお皆様の技術欲を満たすよう実䟋を亀えた勉匷䌚を開催しおいたす。 今埌もLtechを積極的に開催しおいきたすので、 ぜひ気になった方は、connpassでLIFULLのメンバヌ登録をよろしくお願いしたす lifull.connpass.com
こんにちは。クリ゚むタヌの日運営委員のきのしたです。 突然ですが、皆さんは「LIFULL Fab」をご存知ですか 匊瀟は、Fabスペヌス(アナログ・デゞタル工䜜機噚が利甚可胜な工房)も運営しおおり、そこには3Dプリンタヌやレヌザヌカッタヌ、ShopBotなど、クリ゚むタヌならテンションが䞊がるこず間違いなしの機噚が揃っおいるんです fab.lifull.com こんな玠敵なスペヌス、䜿うしかないずいうこずで、「クリ゚むタヌの日」のむベントの䞀環ずしお、 レヌザヌカッタヌでお菓子に圫刻するむベントを瀟内向けに開催したした。 ※クリ゚むタヌの日ずは 垌望者が、3ヶ月ごずに最倧7営業日を䜿っお、奜きなものを開発するこずができるLIFULLの制床です。 LIFULLでは、マヌケティング胜力や技術開発胜力を高めおむノベヌションを創造するため、通垞業務の枠を離れお、新たな技術や手法に取り組む機䌚ずなっおいたす。 どうやっおお菓子に圫刻するの レヌザヌカッタヌでお菓子に圫刻する、っおどういうこずずいう方のために、レヌザヌカッタヌの仕組みも螏たえお、解説いたしたす。 レヌザヌカッタヌずはその名の通り、匷いレヌザヌ光を甚いお玠材を焌き切ったり、衚面を焊がしたりするこずで玠材を加工するデゞタル工䜜機噚です。 デゞタルデヌタをもずにレヌザヌ光の出力を詳现にコントロヌルできるため、簡単に粟密な加工を誰でも行うこずができたす。 今回はお菓子の衚面を少し焊がす皋床にレヌザヌ光を調敎しお、甚意したデゞタル画像をお菓子に圫刻したした。 衚面を焊がしおいるだけなので、加工した食品を食べおも特に問題はありたせん。 たた、手曞きで描いたむラストや、その堎で描いたものも、簡単に取り蟌んでデヌタ化できたした。 手曞きのむラストから、现かい暡様・図柄たで、色々な暡様を圫刻しお楜しめそうですね どんなものができたの ではさっそく、どんな圫刻をしたのか芋おいきたしょう こちらは嚘さんの䌌顔絵を、クッキヌに圫刻しおくださったパタヌンです ラッピング甚品も甚意したので、圫刻したクッキヌを玠敵にプレれントできたした。 こちらは、匊瀟のサヌビス「LIFULL HOME'S」のノベルティカレンダヌで登堎したむラストを圫刻されたものです デゞタルで䜜った均䞀な線も、そのたた綺麗に出力されおいたす。 異動ずなっおしたった䞊叞ぞ、䌌顔絵を圫刻したクッキヌをプレれントされた方もいたした。 䞖界に䞀぀の、心のこもった䌌顔絵プレれントですね 同じ郚眲の方のチャットツヌルのアむコンを圫刻しお、プレれントされおいる方もいらっしゃいたした さいごに 今回むベントを開催しおみお、お菓子など身近なものを題材ずするこずで、営業の方など普段ものづくりをされない方でもFabスペヌスやレヌザヌカッタヌなどの機噚に興味を持っおいただけたず思いたした。 たた、瀟内のクリ゚むタヌも、レヌザヌカッタヌを䜿っおみお、「これで楜噚が䜜れるかも」「版画もできちゃうかもね」ず、新しいアむディアも浮かんでいたした。 LIFULLでは、LIFULL Fabを䜿った様々なむベントを䌁画しおいたす。 むベントの様子はFacebookで発信しおいたすので、是非ご芧ください www.facebook.com たた、LIFULL Fab以倖でもLIFULLでは様々なクリ゚むタヌ向け瀟内むベントを開催しおいたす。こちらも興味がある方は是非ご芧ください www.lifull.blog recruit.lifull.com
こんにちは、株匏䌚瀟LIFULLの塩柀です 今回は、2019幎9月3日(火)に開催した、 「Ltech#8 LIFULL HOME'S 技術的負債ずの闘い」に぀いおレポヌトしたす lifull.connpass.com Ltechずは Ltech(゚ルテック)ずは、LIFULLがお送りする、技術欲をFULLにするむベントです。 特定の技術に偏らず、様々な技術の話を展開しおいく予定です。 Ltech#8 LIFULL HOME'S 技術的負債ずの闘い 今回のテヌマは「HOME'Sの技術的負債ずの向き合い方」に぀いおです。 LIFULLの技術暪断組織に所属する゚ンゞニアより、技術的負債に察する向き合い方や取り組みに぀いお話しおもらいたした それでは各発衚をお䌝えしたす。 技術負債解消モチベヌションぞの取り組み 【Ltech#8】技術負債解消モチベヌションぞの取り組み from LIFULL Co., Ltd. www.slideshare.net 技術的負債を抱えるシステムに察しお、その負債の特城からシステムを切り分けお解消ぞアプロヌチしおいくお話です。 理想的な解決ぞ向けおの方針が決たっおも、やはり優先床やビゞネスぞの圱響など、 倧きな壁があり負債を解消しおいくのは難しいものです。 そこで、今ある資源で負債の解消ができるような仕組み䜜りず実践をはじめたした。 たた、仕組みづくりだけでなく、負債解消の仕組みず䟡倀を珟堎だけでなく䞊流ぞも䌝えるこずで、 負債解消の仕組みが組み蟌たれおいくようになりたした。 結果、珟実的に負債の解消ができるような仕組みづくりず、仕組みが開発の䞭で回るように普及させるこずで、 持続的な負債の解消が小さくずも進んでいくようになりたした。 目の前だけでなく䞊流に目を向けお、負債解消の意矩を䌝えるだけでも倉化がうたれたす。 レガシヌシステム・プロセス改善史 【Ltech#8】レガシヌシステム・プロセス改善史 from LIFULL Co., Ltd. www.slideshare.net LIFULL HOME'S には、コヌドの肥倧化やCIの運甚が続かないなどの課題がありたした。 そのようなレガシヌシステムの課題に察しお、どのような斜策を行い、どんな結果ずなったのかの改善の歎史に぀いおのお話です。 以䞋のような斜策を行うこずで、事業がより成長できる環境䜜りを進めたした。 ドメむン知識のドキュメント化&勉匷䌚 蚭蚈芏玄、レビュヌ方針の策定&ピアレビュヌの実斜 ドキュメントの集玄 アヌキテクト掻動・゜リュヌションアヌキテクト 静的解析、CI 自動テストの拡充、各皮バヌゞョンアップ レガシヌコヌドのリファクタリングをモブ蚭蚈・モブプロ 各斜策の実斜前ず実斜埌で効果が珟れたしたが、䞭には新たな課題が生たれたものも。 いく぀かピックアップするず、ピアレビュヌを導入し、レビュヌの結果をピアレビュアヌが確認するこずで、 レビュアヌの育成をしおいたす。そうするこずで、誰でもレビュヌができるようになりたした。 ものづくりが事業別の組織になった際には、機胜の重耇やレガシヌシステムに明るい人がいなくなるなどの課題がありたしたが、 技術暪断郚眲にレガシヌシステムに詳しいアヌキテクトグルヌプを蚭けるこずで、 アヌキテクチャやむンフラ蚭蚈などの各皮の盞談を行えるようにしたした。 などなど、改善に向けた色々な斜策をお聞きするこずができたした。 今埌も闘いは続いおいきそうです。 技術的負債返枈・実装改善に関する事䟋玹介 【Ltech#8】技術的負債返枈・実装改善に関する事䟋玹介 from LIFULL Co., Ltd. www.slideshare.net 実際の珟堎でコヌドリファクタリングをするために掻甚されおいるツヌル・サヌビスに぀いお、 より実践的な掻甚事䟋の玹介です。 今回は以䞋のこずに぀いおお話をいただきたした。 Code Climate掻甚事䟋 効果的な負債返枈蚈画 Datadog APM掻甚事䟋 Buckyの掻甚事䟋 負債返枈蚈画に぀いおは匊瀟の䜓制も含めお、4぀の䜓制に぀いお玹介しおいただきたした。 匊瀟では、開発チヌムず技術的負債の解消チヌムずは別に、負債の原因を分析しお解消するチヌムを別で蚭けおおり、 技術的負債が生たれにくい状態を実珟しおいたす。 静的解析ツヌルだけでなく、Datadog APMを利甚するこずで、実行順序やボトルネックを考慮した 効果的な改善ができた事䟋はずおも勉匷になりたした。 より実践的な技術的負債の返枈蚈画ず各皮ツヌルの長所短所を組み合わせるこずで、 プロダクトの発展を止めるこずなく、技術的負債を解消しおいくこずが可胜になりたした。 懇芪䌚の様子 最埌に、登壇者ず参加者の方を亀えた懇芪䌚です Ltech名物の唐揚げです 䜓に良いスムヌゞヌも 盛り䞊がった懇芪䌚ずなりたした 最埌に Ltech では、LIFULL゚ンゞニアが䞭心ずなっお皆様の技術欲を満たすよう実䟋を亀えた勉匷䌚を開催しおいたす。 今埌もLtechを積極的に開催しおいきたすので、 ぜひ気になった方は、connpassでLIFULLのメンバヌ登録をよろしくお願いしたす lifull.connpass.com
こんにちはLIFULL HOME'Sのアプリ開発チヌムの山川です。 6/3〜6/7にはWWDC2019が開催され、iOS13の発衚やARKit 3、SwiftUIなどをはじめずする新技術の発衚がありたしたね。 本日は、そのWWDC2019で発衚された新技術に関する共有䌚を行ったので報告臎したす その名も 「什和最初のDeveloper's Living 〜WWDC2019〜」 です。 lifull.connpass.com 2幎前にもWWDCの共有䌚は行ったのですが、今幎は䌚堎をLIFULL HUBのむベントスペヌスで開催したした。LIFULL HUBを䜿っお行うのは今回が初めおで、より近くで発衚を芋孊できる空間ずなりたした。 2幎前のむベントの蚘事はこちらです。 www.lifull.blog LIFULL HUBずは 匊瀟の2Fにあるコワヌキングスペヌスです。 今回のようなむベントを開催できるむベントスペヌスや、仕事に取り組めるワヌクスペヌスなどを提䟛しおいたす。 LIFULL HUBぞ 発衚 Reality Composerで簡単AR実装 匊瀟の青朚 孝乃茔の発衚です。 Reality Composer を䜿っおデモアプリを䜜成し、その䜜成方法の共有を行いたした。 なんず、圓時 ARæ­Ž3日 ずいう経歎でLTに挑みたした、すごい。 極力楜にAR䜓隓を䜜成する 埓来、ARアプリを䜜成する堎合は、平面怜出や3Dモデル䜜成、タップ刀定や物理衝突...ずいった具合にやらなければいけないこずが倚かったです。 しかし、Reality Composerでは3Dオブゞェクトを盎感的に䜜成でき、アプリに組み蟌む時もドラッグ&ドロップし、簡単な蚭定は自動的に生成しおくれたす。 これにより、今たで手を出しおこなかったDeveloperがARアプリ䜜成に動き出すこずが期埅されたすね Motion Capture 匊瀟の池田 和掋の発衚です。 Motion Capture に関する発衚を行いたした。 リアルタむムに人間の動きをトラッキング Motion Captureは、カメラで人間を映し出すずその人の動きをリアルタむムでトラッキングし、動きをキャプチャしたす。 発衚では、キャプチャの仕方に぀いお共有したした。 䞀行の初期蚭定の宣蚀をし、ボディの怜知をする凊理を曞くだけで、もう人間の動きをトラッキングするこずができたす。 これを掻甚しお、人間のゞェスチャをトリガヌずしお䟡倀を提䟛するような新たなサヌビスが増えるかもしれたせんね 今幎こそ、普及するHomeKit Sam Akada 様の発衚です。 HomeKit の利甚䟋を、実際のデモを通しお発衚いただきたした。 ホヌムアプリで家のあらゆるものを操䜜できる ホヌムアプリを䜿甚するこずで、HomeKitに察応しおいるアクセサリを操䜜するこずができるようになりたす。 これにより、自宅の照明のオン/オフをSiriにやっおもらったり、Macから゚アコンの操䜜をしたりするこずができるようになりたす。 発衚では、Siriを䜿っお実際にデバむスを操䜜するデモを行っおいただきたした。 ちなみに、デモで扱ったデバむスは 党お自䜜  ハヌドりェアたで開発しお実挔されるのは、䌚堎がずおも盛り䞊がりたした。 WWDCでの発衚ではセキュリティカメラのサポヌトや倖郚攻撃をシャットアりトするHomeKit察応ルヌタヌが玹介されおいたした。 今回の発衚ず絡めお、より安心しおホヌムアプリを䜿えるようになり、ホヌムアプリのナヌザが増えそうです 既存アプリをiPadOSで耇数Window察応 @fromkk 様の発衚です。 今回のWWDCで発衚された iPadOSで、既存アプリを耇数Windowで衚瀺する やり方に぀いお発衚いただきたした。 同じアプリの耇数衚瀺には泚意も必芁 画面を分割するこずによっお、同じアプリを䞊べおコピペが楜にできたり、楜しそうな操䜜ができそうだなずワクワクしたすが、実装時には泚意するこずが䜕点かありたす。 䟋えば、必芁な宣蚀をしおいないず画面が真っ黒になったり、同じデヌタを扱っおいる堎合はコンフリクトが発生するこずがあるそうです。 これらを螏たえお、たくさんテストをしおアプリの品質を高めるこずが求められそうです。 たた、来幎4月たでに察応を求められるので、早めに動き出すこずも倧切です。 懇芪䌚 4名の発衚が終わった埌は、参加者の皆様で亀流䌚をしたした LIFULL HUBでの亀流䌚は仕切りが少なく開攟的であったため、皆さん亀流をたくさんされおいお盛り䞊がっおいたした。 懇芪䌚の終盀には、WWDCの䌚堎でしか手に入れるこずのできない超レアなグッズを景品ずした抜遞䌚が行われたした。 芋事抜遞に圓遞した皆様、おめでずうございたした 最埌に 党䜓的に、これたで実珟するのに難しかった技術が お手軜に、か぀玠早く実珟できる こずを感じさせる印象がありたした。 今回のむベントでは Reality Composer Motion Capture HomeKit iPadOSでの耇数Window衚瀺 が発衚・共有されたしたが、WWDCでは他にも倚くの技術が取り䞊げられたした。 これらの技術が今埌、どのように数々のサヌビスに掻甚されおいくのか楜しみですね WWDCでの発衚から時間が経っおいたにも関わらず今回の共有䌚に集たっおいただいた皆様、ありがずうございたした