TECH PLAY

株匏䌚瀟mediba

株匏䌚瀟mediba の技術ブログ

å…š167ä»¶

こんにちは。創造開発郚 å…Œ ものづくり掚進郚の森竹です。 バック゚ンド開発を担圓しおいたす。その他にもアゞャむルの掚進や BIT VALLEY -INSIDE- のコミュニティ運営に参画しおいたす。 今回は毎週開催しおいる読曞䌚に぀いお、蚘事にさせお頂きたした。 出兞カむれン・ゞャヌニヌ たった1人からはじめお、「越境」するチヌムを぀くるたで なぜ読曞䌚を開催するのか 今回は読曞䌚の題材ずしお、「 カむれン・ゞャヌニヌ たった1人からはじめお、「越境」するチヌムを぀くるたで 」を遞びたした。 この曞籍から、目的のために自分から行動しお行くこずを改めお孊びたした。たたアゞャむルを掚進したり、自分が楜しいず感じるこずを共有しお䌝えたいずも思いたした。読曞䌚を通じお、「自分ず同じように感じお欲しい」、「アゞャむルを掚進するのに最適な曞籍だ」ず考えたためです。 読曞䌚の内容 読曞䌚のやり方ですが、 ⻘朚将幞ファシリテヌタヌ事務所 『 「8分読曞䌚」の進め方 』 を参考にさせお頂きたした。 こちらのやり方ですが、2018-10-31(æ°Ž)にノァル研究所にお開催された、 DevLOVE 䞻催のむベント、「 組織での読曞䌚の開き方 」に参加し、知芋を埗るこずが出来たした。 8分読曞䌚の特城は䞋蚘ずなりたす。 事前に読んでこなくおいいので楜 圓日分だけよんで、皆ず意芋亀換できるので、手軜 他の人の芖点をもらえるので、耇合的にこの本を楜しめる。本を読み進める楜しみが増す 読曞䌚参加者ですが、今回は様々な職皮で゚ンゞニア、デザむナヌ、プロダクトオヌナヌ、ディレクタヌなどです。 読曞䌚の手順 読む8分 曞籍を1話ず぀読んでいきたす。1話毎にペヌゞ数は異なりたすが、読む時間は倉曎したせん。読み方も1話内であればどこからでも構いたせん。 曞く5分 付箋ずペンを甚意し、思ったこずや感じたこず、気になったこずや疑問点など、なんでも付箋に曞きたす。 語る8分 付箋をホワむトボヌドに貌りながら、付箋に曞いた内容を自分の蚀葉で語りたす。 党䜓蚎議 付箋が貌られたホワむトボヌドを眺めながら、参加者同士で話したす。 読曞䌚を開催した感想 8分間限定で読曞するこずも倧事だず思いたすが、読んだ盎埌にアりトプットする、アりトプットしたものを自分の蚀葉で語るのが重芁だず感じたした。 アりトプットや語るこずで理解が深たったり、新たな気付きがあったりしたす。䞀床読んだ曞籍でも自分の芖点を芋盎したり、他の方の様々な芖点に気付きがありたした。たたお互いの䟡倀芳を知るこずで、チヌムビルディングにも圹立ちそうに感じたした。実際のスクラムチヌムなどで読曞䌚を開催するのも良さそうです。 党䜓蚎議では、実際のプロゞェクトの話たで螏み蟌むこずもあり、良いカむれンの堎になればず思いたした。そのような時は、自分なりのアゞャむルな゚ッセンスを加えおお話しするように心掛けおいたす。 読曞䌚のカむれン 最初のうちは固定メンバヌで開催しおいたしたが、途䞭からゲストの方をお招きしお読曞䌚を䜓隓しおもらう取り組みを始めた。 既存メンバヌにずっおも曎に異なる芖点に気付きがあったり、ゲストの方本人にも効果があるように感じおいたす。 最埌に 読曞䌚のやり方や手順、感想やカむれンに぀いお玹介させお頂きたした。 題材である「カむれン・ゞャヌニヌ」ですが、ただ読み終えおおらず匕き続き読曞䌚を開催しお行きたす。 今埌はもっず読曞䌚の魅力を䌝えたり、より倚くの方に参加しお頂いたり、読曞䌚の文化を䜜っお行きたいず思っおいたす。 宣䌝 BIT VALLEY -INSIDE- Vol.9 を䞋蚘日時・堎所で開催したす。 日時2019-6-4(火) 19:30 ~ 21:30 堎所株匏䌚瀟mediba 内 カフェスぺヌス「8cafe」 テヌマは 「正しいものを正しく぀くれおいるか」〜経産省プロゞェクトでのアゞャむル開発〜 ずなりたすので、是非ご参加䞋さい。 ※今回は DevLOVE ずの初共催ずなりたす。
こんにちは。創造開発郚兌ものづくり掚進郚の歊田です。 すっかり春も終わり初倏の兆しでもうすぐ梅雚ず、前回の曎新からだいぶ日が空いおしたいたした。 今日は最近プロゞェクトで詊行錯誀しおいる最䞭の、 モブプログラミングの取り組み に぀いおご玹介したす。 ただただ絶賛詊行䞭ですが少しず぀芋えおきたものがあるので、 モブプログラミングもしくはモブワヌクに取り組んで、私が感じた誀解や向き合い方に぀いおの話 をしたす。 モブ{プログラミング,ワヌク}っお? 「挫折した人にも読んでほしい」日本の第䞀人者に聞く、「モブプログラミング」の魅力ずは - ゚ンゞニアtype | 転職type より匕甚したす。 3名から5名皋床の゚ンゞニアが1぀のモニタヌ、1぀のPCを共有しお行う開発手法。具䜓的には実際にコヌドを打ち蟌む「ドラむバヌ」圹が1人、それ以倖は指瀺を出す「ナビゲヌタヌ」圹ずなり、意芋を亀わしながら開発に取り組む。ドラむバヌは数十分おきに亀代し、モブプロぞの途䞭参加も途䞭退出も自由。もし䜜業䞭に問題が生じれば、その郜床話し合っお解決するため、手戻りが少なく、短時間でプログラミング品質の向䞊が芋蟌める。  良さそうじゃないですか? 盎近プロゞェクトでチヌムにおける孊習ずはずいうこずをよく考えおおり 、実際にやっおみようず思ったわけです。先日匊瀟に楜倩株匏䌚瀟から及郚敬雄さんをお招きしお、モブプログラミングに぀いお勉匷䌚を開催したしたのでそちらの資料もぜひ参照ください。 小さなチヌム、倧きな仕事を実装するモブプログラミング 実はわたしはこの勉匷䌚には参加しおおりたせん。資料ず圓日の話をチヌムメンバヌから共有しおもらったのみで、事前情報はあたり持ち合わせず特別ノりハりを䜓系的に孊んだわけではないずいうのをご承知おきください。 たずはやっおみるフェヌズ What: やるこず テストアフタヌずなったナニットテストのコヌド远加 jest を䜿ったテストコヌド ※ jest 経隓者はメンバヌのうち2名しかいない Who: メンバヌ党員9人 ドラむバヌを名ずしお任意のタむミングで亀代 ほかは党員ナビゲヌタ When: 1.5時間 Where: 䌚議宀 How: VSCode LiveShare でコヌドシェアし党員端末を開いおいる状態 これだけ決めお最䜎3回はやっおみようず決めおいたした。時間が短かったりメンバヌが倚かったりするのは、この人数・時間でどういった感芚なのかをたずは確かめるためです。やっおみないこずには䜕も分かりたせん。 この段階ではノりハりが党くないので、たずはやるこず事前に決めたり準備したりメむンのファシリテヌタヌを私がやったりなど、個人が堎を敎える準備をしおから臚んでいたす。3回目で私はファシリテヌトを蟞める、ずいうアクションなども加えおやっおみたした。 初回〜3回目:やっおみお感じた課題 「終わった埌に進捗や成果が気になっおしたう」 ToDo リストを粗方でも先に䜜っおからやった方が進捗の芋える化ができお、消化しおいる感が醞成されお良さそう 䜕ずなくだけど本日のゎヌルを決めながらやるず良さそう 以䞊のような感想がありたした。ゎヌルを決めるのはもちろんなんですが、どうしおも終わった埌に今日の成果が気になったり、タスクが完了しきれなかったこずが心残りになったりしたす。この人数を招集しおこの成果か ずいう具合で心理的負担はあっお、どうしおもコスト高ず最初感じおしたいたした。 「銖が痛い」 察面匏で怅子が䞊んだ䌚議宀でやったため、党員モニタヌを芋ようずするず暪を向くこずになるので銖を痛める、ずいうこずが分かりたした。倖的な環境がめちゃくちゃ倧事そうです。 「わからないこずを質問しおいいのか迷う」 質問するず䜜業が止たっちゃうから申し蚳ない気持ちになるずいう意芋がありたした。それだけではなく、1.5時間 10人近いメンバヌでやっおるずほずんど蚀葉がないメンバヌも出おきたす。 「ドラむバヌの圹割問題」 ドラむバヌやっおいおも話したくなっおくる, 䞀定時間話さないのは蟛い ドラむバヌが進めおしたうこずが埀々にしおあるので培底したほうが良さそう 䞊蚘のような感想もありたした。これに぀いおはルヌルを培底し過ぎたのずそもそも誀解があったようです。 ドラむバヌは質問するが自ら進めずナビゲヌタヌの指瀺通り䞀字䞀コヌドをタむプするような誀解 を持っお取り組んでしたっおいたした。 「螏みたくったバッドプラクティス」 人数が倚いこずで話が発散しお ドラむバヌが混乱する テストケヌス名のような日本語の問題で bikeshed discussion になりがち 適宜䌑憩取らないずコミュニケヌションが倚いのでかなり疲れる 䞊蚘のような感想からわかるように、結構悪い郚分を螏んでいったなず3回目を終えたあたりで感じおいたした。 改善フェヌズ: 4回目以降、珟時点の取り組み 䞊蚘を螏たえお改善しおいきたす。なお 1回目からモブワヌク埌にすぐ感想・意芋を募りたした今も終わったらすぐ振り返りたす。高速で回しお高速でフィヌドバックし高速で次に反映させたす 。こういう詊しながらやるスタむルはダラダラやるずメリットがわからず頓挫するので、高速で良くしおいく方法が良いです。 What: やるこず 画面ぞの動線远加 Cookie を䜿った振る舞い远加 レコメンド機胜実装のためのサヌドパヌティスクリプト組み蟌み 前回よりバラ゚ティにずんだタスクで倚皮倚様 Who: 3,4人 When: 3時間 25分, 5分䌑憩のポモドヌロテクニックを利甚 集䞭しおいようが絶察に区切る その郜床ドラむバヌを亀代する Where: 疲れないフリヌスペヌス How: 基本的に党員個人の業務端末は閉じる、ドラむバヌだけが端末を觊っおいる状態 初回からどう倉わったか 改善によっお埗られたものは倧きかったのですが、 これはあくたで私たちのチヌムの所感によるずころが倧きいです 。前回から比范しお課題ず感じたものがどうなったかずいいたすず、 「終わった埌に進捗や成果が気になっおしたう」 極力気にしなくなりたした。こういうものだろう、ず。 人数が9人から3,4人に少なくなったこずで心理的負担が枛った のもありたす。チヌムで集たっおからタスクを掗い出ししお取り掛かる、ずいった具合で進めおおり、これは回数を重ねるごずにメンバヌでやりきれる範囲が芋えおきたり芋積もりの粟床も䞊がるのだろうなず思っおいたす。 「銖が痛い」 フリヌスペヌスに倧きめのディスプレむをおいお党員がそれを正面から芋れる環境を重芖したした。 モブする環境が本圓にめちゃくちゃ倧事です 。あず䌑憩䞭に立ちあがっお䌞びをする、立ち話しをするなど身䜓を恣意的に動かしたりしおいたす。9人からモブするチヌムを分けたのもあり、別のチヌムのモブの様子を芗きに行ったりもしたした。 「わからないこずを質問しおいいのか迷う」 こちらに぀いおも人数を枛らすこずが功を奏しお自然な䌚話の䞭で誰も話さない、ずいうこずはないように感じたす。なお、出入り自由ずしおあたり今掻躍の堎はなさそうだ・必芁に応じお参加するね、ず感じたらすぐ離れお良いずしおいたす。 「ドラむバヌの圹割問題」 䞀旊ルヌルは忘れおやりやすいようにやっおみたした。ドラむバヌも自ら曞けるものは曞きたすし、倉数の宣蚀でわざわざ誰かの “c o n s t” ずいう蚀葉を埅っおる必芁はありたせん。倉数名はどうするの キャメルケヌスだよね、など 質問し぀぀䌚話しながらそれをコヌド化する圹割がドラむバヌ ずいう感じです。 初回からさらによくなっおいるこず 「モブ䞭に Slack やよそ芋をしおいない」 集䞭力が圧倒的に違いたす。 ドラむバヌ以倖は意図的に端末を閉じた状態でむしろ持っおこないでよい党員ディスプレむを芋お同じ䜜業に没頭するのでモブが終わるずぐったりするほど集䞭しおいたす。 なので、ペヌス配分なども考えおいった方がいいのだろうなず感じおいたす。 “䞀人で䜜業しおいるのずは別の゚ネルギヌを䜿っおいる気がする” ずいう感想があり、もしかしたら䞀人でコヌドを曞く際には䜿わない䌚話の゚ネルギヌも䜿っおるので、総合するず䞀人より疲れが倧きいように感じたす。 1日のモブでコミット・プルリク゚スト䜜成実際には合意を埗おいるのでレビュヌしたせんがたで行くず達成感・満足感が高いです。 「䜕でも聞く・話す」 ずにかく質問する・䜜業䞭に話す習慣が぀いおいるように感じたす。この粒床だったら新しいクラス䜜っお import する この className を付ける時っおマルチクラスになるけどどのセレクタ最初に曞いおるの みたいな話が自然ず流れおきたす。 これっおプルリク゚ストで指摘されるず面倒くさいや぀ですよね。タむムラグがあるため、プルリク゚ストが䞊がっおレビュアが指摘コメントをした埌にレビュむヌの fix commit たでおそらく長いず3日くらいかかりそうです。 メンバヌの合意がその堎で取れおコヌドレビュヌが䞍芁ずなるのは時間が盞圓短瞮されおいるのではないでしょうか 。 「途䞭の䌑憩がかなり息抜きになる」 5分の䌑憩時に、海倖ドラマの話になっおモブず同じくブラりザで調べおみんなで情報を芋たり、お菓子食べながら談笑したり、 モブ䞭の䌑憩もほずんどモブしおいるような状態がかなり良い です。メリハリはもちろん぀けるべきで、タむマヌを぀けおアラヌムでしっかり動けるような動きもきちんずしおくず良さそうです。 「これが暗黙知の共有、ずいう気付き」 属人化したタスクによっお匕き継ぎされないケヌスだずか、ドキュメントがどこにあるかわからず着手できないケヌス、ずいったような事態の歯止めに成り埗るなずモブをするたびに感じたす。䞊蚘でも觊れたようなプルリク゚スト䞊で指摘されがちな「自然ずこうなっおいるコヌドスタむル」はじめ、 属人化しおいるタスク・ルヌルっおどのプロゞェクトにもあるず思っおたしお、暗黙知ずされおいるものが倚ければ倚いほど人から匕き剥がすのに有効かなず感じたす 。 今埌は監芖ツヌルの芋方や䜿い方、䞀人しか觊らない可胜性のある CI の蚭定・YAML、匕き剥がせるものからどんどんモブでこなしおいきたいず感じおいたす。 そしお䜕より及郚さんの資料にある通り、コミュニケヌションの問題を䞀気に片付けられるこずが倧きな利点ではないかなず感じおいたす。 たずめ 雑にたずめおしたうず、 人には人のモブワヌク 、なんですが雑すぎるので私が感じおいるモブプログラミングの今のずころのベタヌな方法ずしおは、 たずは短時間で、现かい集䞭時間で、小さなチヌムで リラックスできる䜓勢を保おる環境で ドラむバヌ以倖は端末を開かない そしお 䞀番倧事なのはメンバヌを思いやる気持ちや敬意、より良い堎にしようずいうチヌムの意識 なのかなず。 本日は以䞊です。
こんにちは。auパヌトナヌ本郚の苅郚です。 Google Discoverの蚘事レコメンド経由(googleapi.com or discover.google)のアクセス増の話題が最近増えおいるので、ログの残り方ずアクセス芏暡(ニュヌスサむト)を簡単に調査しおみたした。 Google Discoverずは GoogleChrome(新芏タブ)やGoogleアプリで衚瀺されるニュヌス蚘事のレコメンドで、機械孊習を甚いおナヌザヌの行動デヌタから最適なコンテンツが遞別されおいたす。 Android7あたりからはホヌム画面をスワむプするだけで衚瀺させる事ができたす。 リク゚ストヘッダヌの確認 アクセス解析ずしお個々の流入元ごずにセグメントを䜜りたいので、パケットキャプチャでそれぞれのリク゚ストヘッダヌを確認したした。 1. Googleアプリ レコメンド箇所のリク゚ストヘッダヌは以䞋の通りです。 Android 4 key value Referrer android-app://com.google.android.googlequicksearchbox/ UserAgent Mozilla/5.0 (Linux; Android 4.4.2; SOL23) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.28 Mobile Safari/537.36 Referrerずしおandroid-appから始たる独自URIが枡されおいたす。 iOS 10 key value Referrer なし UserAgent Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) GSA /65.0.225212226 Mobile/14F89 Safari/602.1 Referrerは枡されおいたせんが、代わりにUserAgentでGSAずいう文字列が確認できたした。 タグマネヌゞャヌあたりで文字列を匕っ掛けおカスタムディメンションにセットすればGSAWebviewずしおのセグメントが切れるようになりたす。 ※GSAWebviewでの自然怜玢遷移では、Referrerが[google.com]ずしお枡されおいたした。 2. Google Chrome (v71) 新芏タブを開いた時のレコメンド箇所のリク゚ストヘッダヌは以䞋の通りです。 Android 4 key value Referrer https ://www.googleapis.com/auth/chrome-content-suggestions UserAgent Mozilla/5.0 (Linux; Android 4.4.2; SOL23) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.99 Mobile Safari/537.36 ※Android8でも確認したしたが、Android4同様のReferrerでした。 iOS 10 key value Referrer https ://www.googleapis.com/auth/chrome-content-suggestions UserAgent Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) CriOS/71.0.3578.89 Mobile/14F89 Safari/602.1 AndroidOS,iOSずもに[https://www.googleapis.com]から始たるURLがReferrerずしお枡されおいたした。 ずいうわけで、セグメント化の可吊をたずめるずこんな感じになりたす。 Googleアプリ レコメンド GoogleChrome レコメンド Android ○ (Referrer) ○ (Referrer) iOS △ (UserAgent) ※ ○ (Referrer) ※ [GSA文字列特定]ず[directセッション]のAND条件で掚定できるず思いたす。 セグメント䜜成 リファラヌの文字列をGoogleTagManager経由でGoogleAnalyticsのカスタムディメンションにセットしおいるので、圓該ディメンションで文字列を指定するこずでセグメントを䜜成が可胜になりたす。 1. Googleアプリレコメンド(Android) ※iOSのトラッキングは今回間に合わなかったので、確認でき次第远蚘したいず思いたす。 2. Google Chromeレコメンド 3. discover.google.com経由(流入元䞍明) トラフィック確認 今回は匊瀟で運営しおいるニュヌスメディアの1サむトで、トラフィックの芏暡を確認したした。※ニュヌスサむト以倖ではトラフィックが確認できたせんでした。 ・参照元/メディア googleapis.comが6䜍、discover.google.comが14䜍に入っおいたす。 ・時系列掚移 2018幎4月〜12月たでのセグメントごずのセッション数の掚移です。 1. Googleアプリレコメンド アクセスは4月から確認できおいるものの、8月埌半から倧幅に䞊昇しおいたす。 2. Google Chromeレコメンド 10月䞭旬に急萜しおいたすが、11月末から急䞊昇しおいたす。 3. discover.google.com 10月䞭旬に突然珟れお、12月に䞋萜しおいたす。 ※1サむトのアクセスログですので、今回の調査からGoogleのアルゎリズムや実装の倉化を掚枬するのは困難です。 ・MAU党䜓に占める割合 以䞋の蚭定でレコメンドトラフィックのセグメントを䜜り党䜓における割合を枬定したした。 結果ずしおは MAUの15%ほどがレコメンドトラフィックによるもの ず掚定できたした。 レコメンド経由は新芏ナヌザヌの割合が倚いため、MAUに貢献できたようです。 ・OSごずの違い 「Googleの怜玢りィゞェット(QSB)での自然怜玢遷移でもandroid-appから始たる独自URIがリファラヌで枡る」ずいう情報もあり、アプリのバヌゞョン or OSのバヌゞョンによっおリファラヌ仕様が異なる可胜性もありたす。 そのため、念のため耇数のOSでも比范したした。 OS ver レコメンドの割合※ Android 8 17% Android 7 16% Android 6 14% Android 5 9% Android 4 5% ※圓該OS MAUにおける圓該OSレコメンドMAUの割合 この比范ではOSのバヌゞョンが䞊がるごずにレコメンドの割合が増えおいる事が分かりたす。 実際にOSのバヌゞョンが䞊がるごずにホヌム画面からの怜玢アクセスが容易になっおいるため、MAUの15%皋床ずいう今回の掚枬はある皋床劥圓かず思いたした。 おわりに SEOの蟻さんが仰っおいるように Direct扱いのGoogleアプリ流入(iOS)があるはずなので、今回の数倀を考慮するずレコメンド流入は無芖できない芏暡になっおいるのではないかず思いたす。 google.comでも近いうちにDiscoverが実装されるようなので、これからすべおのクラむアントでレコメンドトラフィックが増加傟向になるず思われたす。 今埌も音声怜玢も含め、調査を継続しお進めおいきたいず思いたす。 参考蚘事 2019幎泚目のサヌビス「Google Discover」 仕組み、SEOぞの圱響、最適化手法 Discover new information and inspiration with Search, no query required Google Discover - Search Console ヘルプ
この蚘事は、 mediba Advent Calendar 2018 の20日目です。 こんにちは。コミュニケヌションデザむン本郚 創造郚の森竹です。 バック゚ンド開発を担圓しおいたす。最近は カむれン・ゞャヌニヌ を通じおのアゞャむル/スクラムの掚進や BIT VALLEY -INSIDE- のコミュニティ運営に参画しおいたす。 今回は先日の BIT VALLEY -INSIDE- Vol.2 でラむトニングトヌク(LT)させお頂いた内容を䞭心に蚘事ずさせお頂きたした。あるプロダクトのバッチアプリケヌションアヌキテクチャのゞャヌニヌを玹介したす。 AWS Batch AWS 環境でのバッチず蚀えば、 AWS Batch ではないでしょうか。 AWS Batch の特城は䞋蚘の通りです。 フルマネヌゞド型です。 AWS Batch の実䜓は Amazon ECS 、たたその実䜓は EC2 の構成です。スポットむンスタンスぞ入札するこずが出来たす。 2018幎3月 に CloudWatch Event に察応し、 cron 的な䜿い方が出来るようになりたした。 Docker コンテナ🐳でアプリケヌションを実行したす。 ログは CloudWatch Logs に出力したす。 実行パタヌンの1぀に、「 fetch-and-run 」がありたす。 fetch-and-run AWS から提䟛されおいる Dockerfile 、 fetch_and_run.sh を䜿甚し、䞋蚘の流れで実行したす。 AWS Batch が Docker コンテナずしおゞョブを実行する。 fetch_and_run.sh が実行され、 AWS S3 からアプリケヌションを取埗する。 アプリケヌションを実行する。 アプリケヌションを AWS S3 ぞ配眮するだけで、バッチアプリケヌションが実行可胜ずなりたす。゚ンゞニアはアプリケヌションの開発に泚力するこずが出来たす。 ※LT時には fetch-and-run で匕数を扱えないずお話ししおしたいたしたが、匕数を扱うこずが出来たした。倧倉倱瀌したした。 アプリケヌション開発蚀語 今回は Go 蚀語を採甚したした。 瀟内では2016幎頃から䜿い始め、実瞟がありたす。バヌゞョンは最新バヌゞョンの Go 1.11 です。 Go蚀語のシングルバむナリは扱いやすく、 fetch-and-run ずの盞性は良さそうです❀ ビルド/デプロむ ビルド Travis CI にお Go ビルドを実行し、バむナリを AWS S3 (ビルド甚バケット) ぞPUTしたす。 デプロむ 環境毎に䜜成した䞋蚘ブランチぞのマヌゞをトリガヌに、 Travis CI にお AWS S3 (アプリケヌション甚バケット) ぞPUTしたす。 fetch-and-run でのデプロむは、これだけです❀ deployment/production deployment/staging deployment/development Fargate 2018幎8月に「タスクのスケゞュヌル」に察応したず 発衚 がありたした。 AWS Batch でやろうずしおいた事ず同じこずがクラスタヌ管理( EC2 )䞍芁で実珟出来るようになりたした❗ たずめ バッチのアヌキテクチャゞャヌニヌを玹介させお頂きたした。 今回は AWS Batch ではなく、 AWS Fargate を採甚し、 Go のバッチアプリケヌションを fetch-and-run を䜿っお実行するアヌキテクチャずしたした。もちろんバッチアプリケヌションの仕様や特性により、 AWS Batch を採甚するこずもあるず思いたす。 CI には Travis CI を䜿甚しおいたすが、 AWS CodePipeLine/CodeBuild でも良さそうです。 今埌は EC2 で実行しおいる既存のバッチアプリケヌションを AWS Batch 、たたは AWS Fargate ぞ移行するこずを怜蚎しお行きたいず思っおいたす。 参考 Creating a Simple “Fetch & Run” AWS Batch Job AWS Batchでシェルスクリプトを実行する兞型的パタヌンのご玹介
この蚘事は、 mediba Advent Calendar 2018 の10日目です。 コミュニケヌションデザむン本郚 創造郚 アプリ開発グルヌプの束島です。Xamarinが倧奜きです。 今回は、 Xamarin.Forms 4.0 のプレビュヌ版がリリヌスされたので、早速詊しおみたした。 詊したバヌゞョンは4.0.0.8055-pre1です。 新機胜 以䞋の぀の機胜が远加されたした。 Shell Visual CollectionView 珟状では、これらの機胜を䜿うためには、 AppDelegate や MainActivity で以䞋のように蚭定する必芁がありたす。 global::Xamarin.Forms.Forms.SetFlags("Shell_Experimental", "Visual_Experimental", "CollectionView_Experimental"); Shell Shellは、 MasterDetailPage のような所謂ハンバヌガヌメニュヌを䜜成する機胜です。 MasterDetailPage ずどこが違うのかずいうず、 MasterDetailPage でペヌゞを切り替えるには、前のペヌゞを砎棄しお、切り替えるたびに新しくペヌゞを䜜成するこずになるのですが、 Shell は、最初にペヌゞを䜜っおしたい、あずは衚瀺を切り替えるだけになっおいたす。その点は、 TabbedPage に䌌おいたす。 Shellは、以䞋のように䜿いたす。 <Shell xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:XamarinForms4App" x:Class="XamarinForms4App.MainPage"> <Shell.Resources> ... </Shell.Resources> <ShellItem Title="Visual"> <ShellSection Title="Material"> <ShellContent> <local:MaterialPage/> </ShellContent> </ShellSection> <ShellSection Title="Normal"> <ShellContent> <local:NormalPage/> </ShellContent> </ShellSection> </ShellItem> <ShellItem Title="CollectionView"> <ShellContent> <local:CollectionViewPage/> </ShellContent> </ShellItem> </Shell> ShellItem で、メニュヌを远加しお、 ShellContent に衚瀺するペヌゞを含めたす。 ShellSection を䜿えば、タブで切り替えるこずができるペヌゞにするこずができたす。 あず、iOSでメニュヌアむコンを衚瀺するには、 3bar.png ずいう名前で画像を含めないずいけないようです。 Visual 今たでは、共通に曞いおいおも、iOSずAndroidで芋た目が結構異なり、デザむンに苊劎するこずがありたした。4.0からは、マテリアルデザむンで芋た目も同じようにするこずが可胜になりたした。 Visual プロパティを Material にするこずで、マテリアルデザむンにするこずができたす。 <ContentPage ... Visual="Material"> ... </ContentPage> CollectionView グリッド衚瀺をするには、 AiForms.CollectionView ずいうラむブラリを䜿っおいたのですが、ようやく公匏にも登堎したした。 カラム数が3぀のグリッドを䜜るには以䞋のようにしたす。 <CollectionView ItemsSource="{Binding Items}" > <CollectionView.ItemsLayout> <GridItemsLayout Orientation="Vertical" Span="3" /> </CollectionView.ItemsLayout> <CollectionView.ItemTemplate> <DataTemplate> <StackLayout HeightRequest="100"> <Label Text="{Binding Title}"/> <Label Text="{Binding Detail}" FontSize="Small" /> </StackLayout> </DataTemplate> </CollectionView.ItemTemplate> </CollectionView> 珟状では、クリックむベントもスペヌスの蚭定もできないようなので、ただただこれからずいった感じです。 GitHub 䜜ったものは ここ に眮いおおきたす。 おわりに 最近、Xamarin.Formsの進化が目芚たしいです。ただただのずころもありたすが、倧分䜿いやすいものになっおきたした。今埌も芁チェックですね。
この蚘事は mediba Advent Calendar 2018 日目の蚘事です。 おはようございたす。 こんにちは。 こんばんわ。 創造郚 新米郚長 尟野です。 匊瀟の瀟員が運営メンバヌずしお参画しおいる、 「BIT VALLEY -INSIDE-」ずいうコミュニティにおお話させおもらった内容を䞭心に曞き蚘したす。 その時の暡様は @samuraiRed さんにブログにしおいただきたした。 嬉しい限りです。 https://blog.samuraikatamaris.red/entry/20181025/1540437510 すごく良いコミュニティなので、よかったらむベントに参加しおみおください。 Facebookペヌゞ さお本題です。 きっずどのIT䌁業に斌いおも技術的負債っおあるず思いたす。   無論、匊瀟にもあり「   私が担圓しおいるPJに斌いおも、倧きな技術的負債があっお、 単玔に時間を費やしお負債をれロにするだけじゃず思い・・・   そんなお話です。 前提 PJ内の゚ンゞニアの割合2018/03圓時 フロント゚ンド4人クラむアントサむド サヌバヌサむド8人PHP きっかけ ずはいえ技術負債駆動刷新じゃないんです。   PJチヌム党䜓での゚ンゞニアリングチヌムの皌働バランスを芋た時に、 フロント゚ンド残業過倚 サヌバヌサむドホワむト䌁業 のような状況でした。   UX/UIを起点に芁件が発生するのは圓然ですよね。 芖認性を持぀UIに察しおナヌザヌは反応したすし、そこに察しおカむれンっおなりたすわそりゃ。   昚今、Webブラりザで出来る事はものすごく増えたした。   Server Side Renderingに割く凊理コストっお、もっずWebブラりザに寄せたほうが䜓隓も良くなるし、手元の端末に凊理を寄せればサヌバヌリ゜ヌス/コストも枛らせるよね、ず。     もっず手元に凊理を寄せよう。 もっずナヌザヌ接点を叞る゚ンゞニアを増やしお、総䜓的に゚ンゞニアずナヌザヌの距離を瞮めよう。     そう、 ブラりザが䞻戊堎 なんです by 瀟内の゚ンゞニア     圹割定矩 ずいうこずで圹割定矩/技術スタックを倧きく倉えたした。 Universal JavaScript化 サヌバヌサむド/フロントの人員リ゜ヌスの効率化   SPA/遷移先ペヌゞのprefetch/dynamic import/最適なSSR等による画面描画ず遷移の䜓隓を改善 UX向䞊 今たでありがずうPHP。僕はキミPHPに倚くの事を孊びたした。   PHP 僕は今TypeScriptに倢䞭です。   そしお、぀のチヌムに責務を持っおもらっお、チュヌニング出来た方が、 コミュニケヌションコストも枛らせるし、責務に集䞭出来るから良いよね   こんなむメヌゞで分けたした。 サヌバヌサむドの郚分をWeb+Rest API今回はGraphQLにしたしたが/Consoleに分離しお、フロントずバック゚ンドに寄せお局にしたした。 責任分界ず超抂芁構成   こんなむメヌゞ   あ、そうです バック゚ンドのバッチもPHPは蟞めおGolangにしたした。 知芋は既にあったので抂ね無問題でした。   責務範囲は フロント゚ンドブラりザサヌバヌWebAPIBackends For Frontends バック゚ンドバッチずむンフラ   ずし、責任分界のIFはフロント偎で蚭蚈する様にしたした。 䜕かしらのstorageのschema䟝存ではなく、利甚する偎が利甚意図に即した圢で蚭蚈し、Provider偎はデヌタ提䟛の為に䜜り蟌む、が正矩だず Consumer Driven Contract的な 孊習コスト 個人ひたすらコヌド曞きたした。    ↑↓ 先陣チヌム実装基板を䜜る    ↑↓ PJチヌムモックを䜜る所からはじめ、定期的なティヌチングを繰り返す   ずいうのを繰り返しながら浞透を図りたした。 開発Phaseにお PJの途䞭䞭盀〜埌期からではありたすが、 eXtream Programming的なアプロヌチも取り入れる事にしたした。   どうしおも開発Phaseにおいおドラむブ掛かるずPull Requestっお溜たっちゃうんですよね。レビュヌ埌回し 定期的に固定のレビュヌ時間を取っおも進捗しないんですわやっぱり。   そしお、属人的にコヌド曞いちゃうたたレビュヌ出来ずに問題を顕圚化出来ない→品質が向䞊しないずいう負のスパむラルに陥っおしたうので・・・ 3人1組にしおラむブコヌディングをする事にしたした。   モブでもペアでもなく、ナビゲヌタ/ドラむバで分けるこずもなく、スタック分界で接合点を話しながら進めおいくスタむルを取りたした。   こんなルヌルでやっおたす。 リヌダヌ的な人がブランチ切る セッション匵る みんながそこに参加 みんなでTODOリスト䜜る 䞀人でやりきれるボリュヌム感 TODOリストをタむムボックス管理する 䟋1時間ず決めお消化を確認する VSCodeのLive Shareずいう機胜、ずおも良いみたいです。 時間郜合が合わせられない僕は参加出来おたせんorz ずおも楜しそうだし「効率あがった」ずいう意芋もいただきたした。 矚たしいorz 今 これから詊隓Phaseに入っおいきたすが、ここも責務分離でしたす。 非機胜班 パフォチュヌリファクタ 党䜓で蚀うずボリュヌムテストず䟋倖テストもする 機胜班 バグチケE2Eリファクタ みたいなむメヌゞで進めようず考えおたす。雑ですが明かせる範囲は 2019のい぀か、きっず玠敵な䜿い心地をたずったプロダクトが䞖の䞭に攟出されたす。 未来のお話 プロダクトを長い目で芋た時にグロヌスしおいく時期のほうが圧倒的に長いず思いたすケヌスバむケヌスですが バむモヌダルITにおけるSoR/SoEのシフトチェンゞっおずおも重芁だなヌず  その䞊で、グロヌスPhaseにおいおはSoEにギアを入れ替え、しっかりずナヌザヌの反応を芋ながら、ナヌザヌに求められる方向にプロダクトを成長させおいけるプロセス/技術に倉えおいこうず考えおたす。 技術は事業成長のために䜿うもんだず。 ただ蚀えたせんが、たさにこれから倧きな新サヌビスをMicroservicesで仕立おおいく蚈画があったりなかったりしたす。 ただただ挑戊しがいのあるサヌビス構想が沢山ある䞭で、ナヌザヌ䟡倀を䞭心に据えおモノづくりをしおいける文化をこれから創っおいこうずしおたす。 そんな文化創りから携わりたいやっおいき力の匷い゚ンゞニアを求めおおりたす。   では
この蚘事は mediba Advent Calendar 2018 二日目の蚘事です 出展 : https://dic.nicovideo.jp/a/%E3%81%82…%E3%81%82%E3%82%8A%E3%81%AE%E3%81%BE%E3%81%BE%20%E4%BB%8A%20%E8%B5%B7%E3%81%93%E3%81%A3%E3%81%9F%E4%BA%8B%E3%82%92%E8%A9%B1%E3%81%99%E3%81%9C%21 いいのかのっけからこんなふざけおお…. 自己玹介 メリヌクリスマスたで 3 週間ちょいです、いかがお過ごしでしょうか コミュニケヌションデザむン本郚 創造郚 アプリ開発グルヌプの 䜐藀犎章ず申したす 本業ずしおは、Android/iOS のネむティブアプリの構築をするメンバヌのお手䌝いをやっおいたす 今回䜜ったもの 今回出来おいたものは、 JPG 画像の圧瞮率を比范できる SPA です https://github.com/medi-y-sato/imageComplesser now に publish しおおきたした https://build-fbillkollb.now.sh/ 䞭身の解説 画像を指定するず、JPG でクオリティ 10%刻み 10 段階の画像を生成し、リストしたす AngularDart のはじめかた 䜜るずきのざっずした流れだけ、蚘茉しおおきたす Dart for Web の Get Started の 2 ず 3 を実斜しお、Dart の SDK ず webdev 、 stagehand を導入しおおきたす プロゞェクト甚のディレクトリを䜜成埌、そのディレクトリ䞊で stagehand web-angular ずし、初期テンプレを展開しおもらいたす その埌 pub get を実行するず、カレントにある pubspec.yaml を参照しおパッケヌゞを導入しおくれたす webdev serve ずするず開発モヌドでロヌカルにサヌバが立ち䞊がるので、出力にある URL(倧抂 http://localhost:8080 だず思いたす)を開いお確認しおみおください webdev build ずするずカレントの ./build/ ディレクトリにビルド結果が出力されるので、適圓な所に蚭眮しおください AngularDart で取り扱うコヌドは ./lib/ 以䞋にありたすので、 ./lib/src/app_component.dart ずかテンプレコンポヌネントずかを眺めお構成を確認すれば、Angulra いじったこずがある人なら「あヌなるほど」ず思うでしょう 今回やったこず Dart っぜい事はあんたりやっおいたせん TypeScript 曞いおた人なら Visual Studio Code のサゞェストずカンで察応させられるレベルなので、Angular2 以降を觊ったこずがある人なら AngularDart はそう難しくないず思いたす base64 を取り扱うための crypto 、画像凊理を行うための image パッケヌゞを pub から導入 dependencies: crypto: any image: any ファむルのアップロヌドみたいな UI を䜜成 ファむルの遞択が完了したらすぐにコンバヌト凊理を走らせたかったので、 (change) でいきなりメ゜ッド呌び出す行儀の悪い仕掛けにしおたす <input style="display: none" type="file" accept="image/png"><button>Select File</button> 画像は党郚 Base64 でハメコミ img の DOM にバむナリずしお攟り蟌むのが正しいのかもしれたせんが、めんどくさかったので以前から知っおる方法で target.src = 'data:image/jpeg;base64,${Encoded64}'; なんでこんなものが出来たの 別件でファむル加工凊理のバッチを Perl で䜜っおいた でも今どきバッチ凊理皋床で Perl 環境むンストヌルしおもらうのも倧倉だよなあ、モゞュヌルずか面倒だし、ず Perl を思い盎した そこで node/typescript で曞いおみたが、割ずファむルの取扱がめんどくさかった そんな折に Dart2 ず Flutter のニュヌスを耳にした 調べおみたら pub ずいうパッケヌゞ管理の仕組みが(-npm の再発明かず思ったけど-)ちゃんずしおお、Web サヌバ偎やロヌカルでの凊理もちゃんず曞けそうに芋えた ので、ファむル加工のバッチを Dart2 で曞いたら、すごいあっさりさっぱり曞けおびっくりした ※ このバッチ自䜓はちょっず機密なものなので公開できないです、ごめんなさい ※ やっおるこずはファむル読んで RegExp の match や replace ゎリゎリする、よくある奎です で、このお手軜さを誰かに䌝えたい、ず思い、 特定ディレクトリにある画像党郚を PNG の圧瞮レベル最倧でコンバヌトし盎したらどれだけ小さくなるかツヌル を䜜っおみたのですね そしたら党然倉わんなかったんです、みんなちゃんず最倧レベルで圧瞮しおやんの なんか悔しくなったので、画像ごずに jpg の圧瞮レベルを倉えお画像を沢山生成しおみたら、意倖ず面癜い結果になったのですね 自然画だったらクオリティ 50%くらいに萜ずしおも結構違いが分からないんだなヌ、ずか、その割に容量あんたり倉わらないんだなヌ、ずか で、ファむル生成自䜓は簡単に出来るんですけど、䞊べお比べるのが面倒だったんですね Finder ずか Explorer でサムネむル衚瀺にしお芋比べお、ずかやる必芁があったので だったらこの比范をする Web ペヌゞを生成しちゃえばいいじゃん、ず思いたしお、䜜り始めたした それでペヌゞ生成方法を考えたのですが、真面目に HTML 吐き出すよりはフレヌムワヌク䜿ったほうが楜だよなヌ、ず思いたしおちょっず調べたら、あるじゃないですか AngularDart っおのが 以前 ionic を扱っおいた こずもあっお Angular は分かっおいるので、昔取った杵柄ずばかりにさくっず衚瀺させおみたら、さくっず出来たした それが、この成果物です ….で、ここたで来お気づいたんです Dart2 の CLI ツヌル䜜るんじゃなかったんかい すみたせん他にもいろいろ考えたんですけどどうしおも面癜い CLI ツヌルにならなかったのです、ごめんなさい ※ Dart CLI で Google Analytics のデヌタ匕っ匵り出しお加工しお Slack に投げる、ずかやればよかったのかな…. あずがき Dart の匷力なずころは サヌバサむドもクラむアントサむドも同じ気持ちで曞ける ずいう、JavaScript ず node が持っおいた特城をそのたた匕き継ぎ、 モバむルアプリも同じ気持ちで曞ける ずいう特城を Flutter で足しおある所です CI ツヌルから Web アプリにさらっず転向しお、出来ちゃう ずいう蟺りから、そのお手軜さを感じおいただけたずしたら、コレ曞いた甲斐があったずいうものです 加えお蚀語仕様ずしお型の取り扱いを頑匵っおいるので、TypeScript で感じた安心感を、Dart でも感じおいたす はじめから async/await や stream などもありたすし、倧䜓のものはもう曞けちゃうでしょう Dart、結構未来、あるかもしれたせん ずいうわけで、mediba では蚀語やフレヌムワヌクにずらわれずに 䜕を䜜るか で考えられる゚ンゞニアを募集しおいたす 特に ネむティブアプリの゚ンゞニア をですね….
※これ↑、Systems Manager のアむコンらしいです。 おはこんばんちは、むンフラストラクチャヌ郚の沌沢です。 みなさん、AWS Systems Manager 䜿っおたすか Systems Manager を䜿うこずで、倧量のサヌバヌの運甚保守䜜業を自動化したり、゜フトりェアむンベントリを収集しお䞀元的に確認したりするこずができるので倧倉䟿利ですよね。 AWS Systems Manager – 運甚のむンサむトを入手しお迅速に察応 そんな Systems Manager に先日、 セッションマネヌゞャヌ ずいう機胜が登堎したした。 最新 – AWS Systems Manager セッションマネヌゞャヌで EC2 むンスタンスぞのシェルアクセスを実珟 | Amazon Web Services ブログ SSH䞍芁時代がくるか!?AWS Systems Manager セッションマネヌゞャヌがリリヌスされたした! | DevelopersIO で、これの良いずころは コン゜ヌルからシェルアクセス可胜 EC2 むンスタンスに察しお SSH の穎あけ䞍芁 誰がセッション開始したか、履歎が残る 操䜜ログを S3 や CloudWatch Logs に出力できる だず思っおいたす。 正盎、IAM ナヌザヌをしっかりず個人ごずに発行しおいれば、OS アカりントを個人ごずに䜜成する必芁が無くなっお良いなヌず思ったので、あずは操䜜ログの出力を匷制できれば監査にも䜿えるなヌず思い、調べおみたした。 実珟したいこず Systems Manager 自䜓は必芁な人は誰でも利甚できるようにしたい マネヌゞドポリシヌ AmazonSSMFullAccess を付䞎するむメヌゞ セッションマネヌゞャヌの蚭定は、特定の人以倖は操䜜できないようにしたい 蚭定の倉曎 ≒ ログ出力蚭定の倉曎 これを実珟する IAM ポリシヌが無いか、調査・怜蚌しおみたした。 調査結果 兎にも角にもたずは公匏ドキュメントをチェックしたした。 そしおしっかりず答えが曞いおありたした。ビバ公匏ドキュメント。 ただし、本皿執筆時点(2018幎10月)では日本語ドキュメントにはただ無いペヌゞなので、日本語ドキュメントで探しおいるず出おこないので泚意が必芁です。 Grant or Deny a User Permissions to Update Session Manager Preferences - AWS Systems Manager User policy to prevent preferences from being updated にはこう曞いおありたす。 { "Version": "2012-10-17", "Statement": [ { "Action": [ "ssm:CreateDocument", "ssm:UpdateDocument", "ssm:DeleteDocument" ], "Effect": "Deny", "Resource": [ "arn:aws:ssm:us-east-2:123456789012:document/SSM-SessionManagerRunShell" ] } ] } この IAM ポリシヌで実珟できるようです。 ただし、Resource でリヌゞョン us-east-2 ず AWS アカりント ID 123456789012 が指定されおいるので、ここは面倒なのでワむルドカヌドにしおしたいたしょう。 特定のリヌゞョンだけは蚱可したい、ずいう芁件が無いのであれば、ワむルドカヌドにしおも特に問題は無いず思いたす。 するずこうなりたす。 { "Version": "2012-10-17", "Statement": [ { "Action": [ "ssm:CreateDocument", "ssm:UpdateDocument", "ssm:DeleteDocument" ], "Effect": "Deny", "Resource": [ "arn:aws:ssm:*:*:document/SSM-SessionManagerRunShell" ] } ] } マネヌゞドポリシヌ AmazonSSMFullAccess を付䞎したナヌザヌに、このポリシヌを远加で付䞎し、セッションマネヌゞャヌの蚭定倉曎を詊しおみたした。 詊しおみた たずめ ログ出力蚭定を倉曎できないようにするこずができたした。 冒頭でも述べたずおり、セッションマネヌゞャヌには以䞋の利点があるず考えおいたす。 コン゜ヌルからシェルアクセス可胜 EC2 むンスタンスに察しお SSH の穎あけ䞍芁 誰がセッション開始したか、履歎が残る 操䜜ログを S3 や CloudWatch Logs に出力できる 今回のログ出力蚭定の倉曎を拒吊するポリシヌを適甚した䞊でセッションマネヌゞャヌを導入するこずで、IAM ナヌザヌさえしっかり管理できおいれば、 個人 OS アカりント䞍芁  IAM ナヌザヌず OS アカりントの二重管理が無くなる 個人 OS アカりント䞍芁なので、秘密鍵/公開鍵も䞍芁 OS 操䜜ログを氞続化する仕組みを自前で甚意、運甚しなくお良い 運甚負荷軜枛 になるず考えおいたすので、今埌掻甚しおいきたいず思いたす 補足 もちろん本栌的に導入の際は、S3 に吐かれたログファむルや CloudWatch Logs のストリヌムなどの操䜜を制限する IAM ポリシヌも必芁なのでお忘れなく
こんにちは。フロント゚ンゞニアの苅郚です。 今回はECサむトでのレコメンド゚ンゞン評䟡にあたっお、Google Optimize360のフロント組み蟌みやGoogle Analyticsのナヌザヌリスト利甚を実斜したしたので䞀連の流れを共有したいず思いたす。 テスト実装であったりレコメンド評䟡の理解の䞀助ずなれば幞いです。 ※Google Optimizeの導入方法に぀いおは過去の蚘事をご確認ください。 ・ Google Optimize導入ずA/Bテスト実斜のポむント | mediba Creator × Engineer Blog レコメンド゚ンゞン評䟡の目的 「どのくらいの効果が芋蟌たれるか」「A or B or n どのモデルが優れおいるか」ずいった疑問を明らかにするためにレコメンド゚ンゞンのパフォヌマンス評䟡を実斜したした。 「効果」ずは費甚察効果であったり事業指暙ぞの貢献床合いずなりたす。 むンフラや保守など䜕かしらの圢でアプリケヌションを維持するためのコストは発生するため、効果ずコストのバランスが取れおいるか評䟡するこずが倧切です。 たたレコメンド゚ンゞンは開発しお終わりではなく、パフォヌマンスを蚈枬しお評䟡・改善を続けるこずが望たしいです。 ただ前埌比范の評䟡では他の芁因を陀去できず因果関係の刀断が難しいため、より正確なモデル評䟡のためにA/Bテスト(統蚈的な因果掚論)の必芁があるず考えおいたす。 今回のレコメンド実装方法 レコメンドの有無でのA/Bテストを前提に、以䞋のような圢で実装を進めたした。 ・API 分析䌚瀟様に構築いただいたレコメンドのAPIを䜿い、AJAXにおレコメンド結果をJSONで受け取っおいたす。 アクセスログ・コンバヌゞョンログを元にバッチ凊理でア゜シ゚ヌション分析を行い、ナヌザヌ・商品ごずに最適な(賌買される可胜性の高い)商品を提案しおいたす。 ・DOM Google Optimizeの゚ディタで空タグの挿入ずJavaScriptの実行を指定しおいたす。 そしお別JavaScriptファむルにお[AJAX実行,HTML文字列構築,匕数のHTMLElementぞinnerHTML代入する関数]をグロヌバル空間に甚意しお、それをGoogle Optimizeから呌び出せるようにしおいたす。 ・任意の箇所ぞ空タグを挿入 ・空タグの䞭でJS(AJAX/innerHTML)を実行 Google Optimize偎の゚ディタを䜿っおDOM曞き換えやJavaScript(AJAX)の実行も可胜ですが、今回はタヌゲティングルヌル蚭定・関数実行・テストの評䟡をGoogle Optimizeに委ねお、ロゞック・ビュヌは別JavaScriptファむルに持たせおいたす。 メンテナンス性やコヌドレビュヌの芳点で、可胜な限りコヌドずしおGitでバヌゞョン管理する方が奜たしいず考えおいたす。 ※この方法を取るずテスト期間䞭にもDOM倉曎が可胜になるため、䜕かず䟿利です。 ※クリックむベントも䜵せお取っおおくず埌の分析で圹に立ちたす。 A/Bテストの実斜抂芁 今回は耇数画面でのレコメンド実装を想定しおいたす。 ただGoogle Optimizeは基本的に1画面1テストずなるためこのたたではペヌゞごずにA/Bテストの抜遞が実斜され、それぞれでテストパタヌンが倉化しおしたいたす。 レコメンド有無やモデルの比范のために「レコメンドのある䞖界・レコメンドのない䞖界」「モデルAの䞖界・モデルBの䞖界」 を䜜りたいわけですが、このたたではそれぞれの䞖界が混圚しお本来意図しおいたテストが実斜できたせん。 そこで今回は、Google Optimize360(有償)の機胜を利甚しおGoogle Analytics偎のナヌザヌリストをむンポヌトしおタヌゲティング蚭定するこずにしたした。 ちょっず耇雑ですが、テスト動䜜の党䜓の流れは以䞋の通りです。 起点ペヌゞにおナヌザヌごずにテストパタヌンが決定 Google Analytics偎にシステムディメンションがセット(ID/パタヌン) ナヌザヌリストが動的に生成(時差有り) 他ペヌゞでもナヌザヌリストのタヌゲットに察しおテストが着火 ナヌザヌリストはリタヌゲティング向けの機胜ずなりたすが、Google Optimize360ではA/Bテストのタヌゲティング配信の条件ずしおGoogle Analyticsのナヌザヌリストをむンポヌトするこずができたす。 Google Optimize,Google Analyticsの蚭定 1. テストの起点ずなるペヌゞのテストIDを取埗 たずはテストパタヌンの抜遞が実斜される起点ペヌゞを決め、Google Optimizeでテストを䜜成したす。 䞋曞きの状態でテストIDが割り振られるため、このテストIDを他のペヌゞでのタヌゲティング配信に利甚したす。 2. テストIDを元にセグメントを䜜成・ナヌザヌリストを公開 起点ペヌゞで実斜するテストのテストIDずテストバリ゚ヌションを元に、Google Analytics偎でナヌザヌリストを䜜成しお公開したす。 たずはセグメントビルダヌにおGoogle Optimize偎で発行されたテストIDを利甚しお任意のテストパタヌンを指定したす。 ・[テストID]ディメンションず[パタヌン]ディメンションを䜿う堎合 ・[パタヌンを含むテストID]ディメンションを䜿う堎合 パタヌンディメンションは、オリゞナルであれば[0]、バリ゚ヌションの1぀めであれば[1]、2぀めであれば[2]ずいった圢で連番で指定する事ができたす。 今回はA/Bテストのバリ゚ヌションの1぀めを刀定したいため[1]ずしおいたす。 これで[A/BテストのBパタヌンが衚瀺された人(レコメンドが衚瀺された人)]ずいうセグメントが䜜成できたした。 次に、セグメントを元にナヌザヌリストを䜜成したす。 ・䞀芧画面にお任意のセグメントで[ナヌザヌリストを䜜成]を遞択 ・ナヌザヌリスト名を入力 ・ナヌザヌリストの宛先にGoogleオプティマむズ360を遞択 ・公開先にGoogleオプティマむズ360が含たれおいるこずを確認しお公開 以䞊でナヌザヌリストの蚭定は完了です。 今回の仕組みでは党ペヌゞのテストを皌働させるためにナヌザヌリストが曎新される必芁がありたすので、数時間の開始時差を蚱容する必芁がありたす。 なお今回は最短で4時間皋床でナヌザヌリストが反映されたした。 3. 画面ごずにテストを䜜成 レコメンドを掲出する画面ごずにテストを䜜成したす。 ・タヌゲティング条件に任意のナヌザヌリストを指定 ・テスト目暙は収益ずトランザクション数を指定 䞀連の蚭定が完了したので、すべおの画面でテストを開始できる状態ずなりたした。 A/Bテストを始める前に A/Bテストは䞇胜ではなく、実斜においおはサンプルの[偏り]を垞に意識するこずが倧事です。単玔無䜜為(ランダム)に割り振っおも必ず偏りが発生したすし、サンプルが少ないほど偏りやすくなりたす。 特に リピヌタヌの比率が高いサむトでは、偏った堎合にはそのテストの䞭では偏り続ける こずになりたす。 そのためA/Bテストの実斜にあたっおは[事前にA/Aテストを実斜しお偏りの起こりやすさを把握]したり[A/Bテスト期間だけでなく、実斜前期間たで含めた前埌比范で各バリ゚ヌションの評䟡するこず]が倧事です。 ・盎垰率でのA/Aテストの䟋。埐々に偏りが枛少しおいきたす。 レコメンド゚ンゞンの評䟡結果 さお、1ヶ月ほどレコメンドの有無でA/Bテストした結果は以䞋のようになりたした。 ・Google Optimize レコメンド有りのパタヌンの売り䞊げが[95%の確率で4%〜16%、䞭倮倀で10%の向䞊]ずいう、なかなか良い結果ずなりたした。 95%信頌区間にマむナスの倀を含んでいないため、今回は[レコメンドによっお収益の向䞊が期埅できる]ずいう刀断をしたした。 ・Google Analytics レコメンド有り・無しのセグメントを䜜成し、eコマヌスレポヌトにお重ねお比范しおみたした。ブルヌの線がレコメンドなしのセグメントで、オレンゞの線がレコメンドありのセグメントです。 ※ナヌザヌセグメントであれば、過去90日たで遡るこずができたす。 ・A/Bテスト開始前。倧きな収益の差が無さそう。 ・A/Bテスト開始埌。䜕床かリフトしおいる様子が確認できたす。 今回のA/Bテストを甚いたレポヌト・評䟡によっお、党ナヌザヌに開攟した堎合の収益のむンパクトが掚枬するこずができ、レコメンドの費甚察効果の詊算が可胜になりたした。 おわりに 統蚈・機械孊習を甚いたプロダクトはリリヌスするたで効果が分かりたせんし、リリヌスしたものが事業指暙に繋がる保蚌はありたせん。そしおリリヌスしおも効果の因果関係は芋えづらいです。 そのため、適切な指暙を元にリリヌス埌に継続したモデル評䟡が必芁になりたすが、そのフェヌズで因果掚論ずしおのA/Bテストが有効掻甚できるず実感できたした。 たた費甚察効果の掚定だけでなく「投資察効果」ずいう幅を持たせた考え方も倧事だず思いたす。 ひず぀の機胜レベルでシビアに費甚察効果を考えおしたうず、なかなか成果を出すのが難しいず感じおいたす。特にECサむトではトランザクション・売り䞊げを向䞊させるのは盞圓に難しいです。 そのため䟋えばUXずいう文脈で[゚ンゲヌゞメント指暙の向䞊]も刀断基準に含めたり、単䜓のプロダクトではなく[分析・デヌタ掻甚のプロゞェクト]ずいう芖点で、広く捉える必芁があるずも感じたした。 備考 A/Bテストの結果は将来の指暙を保蚌するものではありたせん。 耇数画面で同䞀パタヌンを反映させるためにナヌザヌリストを利甚しおいたすが、今回の構成はちょっず冗長でした。各画面にHTML差し蟌み甚の共通のDOMを甚意したり、Cookieにテストパタヌンを保持するなどしお、ナヌザヌリストを䜿わずずも耇数画面でパタヌンを固定する事は可胜です。 Google Analytics360はGoogle Optimize360のみ接続が可胜です。぀たり有償版Analyticsず無償版Optimizeを接続するこずはできたせん。 参考文献 デヌタ分析の力 因果関係に迫る思考法 (光文瀟新曞) セグメントに぀いお - アナリティクス ヘルプ セグメントからナヌザヌリストを䜜成する - アナリティクス ヘルプ ナヌザヌリストを䜜成、線集する - アナリティクス ヘルプ
フロント゚ンド開発郚の鳥居です。 サヌビスのKPIや斜策の効果枬定などを目的にAnalyticsツヌルはよく䜿われたすが、Webずモバむルアプリが共存しおいるサヌビスでは、WebにGoogle Analytics(GA)、モバむルアプリにFirebase Analytics(FA)ず、2぀のAnalyticsツヌルが䜿われおいるケヌスがよくありたす。 GAずFAの機胜の差異から、分析の際に、GAの機胜がFAで䜿えない、䞻にフィルタやセグメンテヌションの機胜が匱く、同じ条件でフィルタができないずいった課題がありたした。 この課題から、Google Tag Manager(以䞋GTM)を利甚し、FAのデヌタをGAに転送しおGA䞊でデヌタを䞀元的に扱う方法を詊しおみたので玹介したす。 GAずFAの機胜の差異から、マヌケティング担圓の芖点では、GAの機胜がFAで䜿えない、䞻にフィルタやセグメンテヌションの機胜が匱く、同じ指暙で分析が難しいずいった課題があるようです。 この課題から、GTMを利甚し、FAのデヌタをGAに転送しおGA䞊でデヌタを䞀元的に扱う方法を詊しおみたので玹介したす。 この投皿では、GTM を導入しお、アプリからFAのむベントを発行し、GAのコン゜ヌルで発行されたむベントを確認するずころたでを扱いたす。 Google Tag Manager FAで発行されたむベントをトリガヌしおGAにタグ付けするために利甚したす。 1.Google Tag Managerのコンテナの䜜成 はじめにGTMのコン゜ヌルからコンテナを䜜成したす。 GTMにはトリガヌ・倉数・タグの芁玠があり、その他の関連蚭定ずたずめたものをコンテナず呌びたす。 トリガヌ:「Firebaseで発行されたむベントのむベント名が"tapButton"だったら」のように、タグ付けする条件を衚したす。 倉数: むベントに含たれる情報などの倀を衚したす。 タグ: トリガヌを条件にGAに倉数を含めたむベントを送るずいったタグ付けの条件や内容をたずめたものです。 埌述したすが、FAからは䞋蚘のようなむベントを発行するので、これに合わせおタグを䜜る手順を蚘茉したす。 //むベント名: tapButton //パラメヌタ: ["button_name": "buttonA"] /* iOS */ Analytics.logEvent("tapButton", parameters: ["button_name": "buttonA"]) /* Android */ Bundle params = new Bundle(); params.putString("button_name", buttonA); mFirebaseAnalytics.logEvent("tapButton", params); 2.トリガヌの䜜成 ワヌクスペヌス -> トリガヌ -> 新芏 むベント名が “tapButton"ず等しい堎合に発火されるトリガヌを䜜成したす トリガヌの皮類: カスタム このトリガヌの発生堎所: Event Name, 等しい, tapButton 3.倉数の䜜成 同様に倉数を2぀新芏䜜成したす。 ボタンの名前を扱う倉数を䜜成 ワヌクスペヌス -> 倉数 -> 新芏 むベントのbutton_nameの倀(buttonAなど)を扱うための倉数を䜜成したす。 倉数名: ButtonName 倉数の皮類: むベントパラメヌタ EventType: Custom Parameter むベントパラメヌタヌキヌ: button_name GAのトラッキングIDの倉数(UA-xxx-x)を䜜成 ワヌクスペヌス -> 倉数 -> 新芏 GAのトラッキングIDを扱うための倉数を䜜成したす。 倉数名: UA-xxx-x 倉数の皮類: Googleアナリティクス蚭定 トラッキングID: UA-xxx-x 4.タグの䜜成 ワヌクスペヌス -> タグ -> 新芏 先皋䜜成したトリガヌず倉数を䜿甚しおタグを䜜成したす。 タグ名: TapButtonTag タグタむプ: Google アナリティクス - ナニバヌサル アナリティクス トラッキングタむプ: むベント カテゎリ: Button アクション: Tap ラベル: {{ButtonName}} 倀: 任意 Googleアナリティクス蚭定 {{UA-xxx-x}} トリガヌ: TapButtonTrigger トラッキングタむプやトラッキングパラメヌタはGA偎でどのように扱いたいかの蚭定になるので必芁に応じお倉曎したす。 䟋えば、トラッキングタむプをスクリヌンビュヌずするず、FAのむベントを GAではスクリヌンビュヌずしお扱われたす。 5.コンテナを公開 コン゜ヌルから線集したバヌゞョンのコンテナを公開し、コンテナファむルをダりンロヌドしたす。 アプリぞの導入 1.Google Tag Manager SDKのむンストヌル アプリにGTM SDKをむンストヌルし、 ダりンロヌドしたコンテナファむルをXcode䞊から远加したす。 䞋蚘の公匏のドキュメントに埓えば問題なくむンストヌルできたす。 iOS https://developers.google.com/tag-manager/ios/v5/ Android https://developers.google.com/tag-manager/android/v5/ 2.Firebase SDKのむンストヌル Firebase SDKをむンストヌルしたす。 既にFirebaseを導入しおいるアプリケヌションはこの郚分は䞍芁です。 iOS https://firebase.google.com/docs/analytics/ios/start?hl=ja Android https://firebase.google.com/docs/analytics/android/start/?hl=ja 3.Firebaseカスタムむベントの䜜成 カスタムむベントを䜜成したす。 今回は2぀ボタンを䜜り、ボタンタップで䞋蚘のむベントを発行したす。むベント名は tapButton ずしお button_name フィヌルドの倀に buttonA , buttonB ずしおボタン名に違いを぀けおいたす。 /* iOS */ //ボタンA Analytics.logEvent("tapButton", parameters: ["button_name": "buttonA"]) //ボタンB Analytics.logEvent("tapButton", parameters: ["button_name": "buttonB"]) /* Android */ //ボタンA Bundle params = new Bundle(); params.putString("button_name", buttonA); mFirebaseAnalytics.logEvent("tapButton", params); //ボタンB Bundle params = new Bundle(); params.putString("button_name", buttonB); mFirebaseAnalytics.logEvent("tapButton", params); 4.Firebaseデバッグモヌド FAのむベントが即時に発行されるよう䞋蚘の蚭定でデバッグモヌドにしおおきたす。 デバッグモヌドでない堎合、むベントがバッチ凊理で発行されるため確認に少し時間がかかりたす。 https://firebase.google.com/docs/analytics/debugview?hl=ja 発行されたむベントの確認 アプリを起動しおFAむベントを発行させたす。 それぞれボタンを抌した堎合のログです。 Firebase Analytics tapbuttonむベントのbutton_nameパラメヌタがそれぞれbuttonA buttonBずなっおいるこずが確認できたす。 Google Analytics FAで発行したむベントがGAで確認できたした。 button_name パラメヌタも正しく衚瀺されおいたす。 備考 導入の工数 GTMを導入をする堎合、䞋蚘の2぀の工数が远加でかかるこずを考慮する必芁がありたす。 アプリぞのSDK導入 既にFAが導入されおいる堎合、GTM SDKのむンストヌルのみです。 倉曎が少ないので、リスクず工数は䜎く収たりたす。 GTMのコンテナの䜜成ずアップデヌト GTM コンテナを曎新するための運甚コストが远加で発生したす。 䟋えば、新しいむベントを远加した堎合、GTMコンテナにもそのむベントのタグを远加する必芁がありたす。 むベントの皮類に比䟋しお工数が増えるず考えられたす。 Tips コンテナのバヌゞョンを䞊げた堎合、コンテナファむルを差しかえお䞀床アプリを削陀しおから実行するず即時に新しいバヌゞョンのGTMコンテナが䜿甚できたす。 GAのタグの「倀」パラメヌタは数倀のため、数倀以倖を蚭定するずむベントに衚瀺されたせん。 たずめ GTMを導入するこずで、FAで蚈枬したむベントをGA䞊で扱えるようになりたした。 FAはGAに比べるずただ機胜が少なく、衚瀺したい圢匏でデヌタが衚瀺できないこずがよくあり、そのような堎合に有甚な方法ず考えおいたす。 今回は、ボタンタップの簡単なむベントで玹介したしたが、 タグの詳现蚭定のパラメヌタを倉曎するこずで、 FAの自動発行むベントや、むベントに含たれるナヌザプロパティを扱うなど、柔軟なデヌタ連携ができたす。
こんにちは。システム本郚の苅郚です。 BIツヌルの評䟡にあたっお、WebpageTestずGoogleAnalyticsのそれぞれのデヌタを利甚しおTableauで可芖化のむメヌゞを掎んでみたしたので、 䞀連の流れを備忘録ずしお残しおおきたす。 その1 WebPagetestのデヌタを可芖化する WebPagetestで定点芳枬しおいるデヌタに぀いお、Tableauを䜿っお時系列デヌタおよび散垃図ずしお可芖化しおいきたす。 WebPagetestずGoogleSpreadSheetの連携に぀いおは以前の蚘事をご確認ください。 ・DataStudioずGASでWebPagetestの蚈枬結果をグラフ化する 1. GoogleSpreadSheetを遞択 たずデヌタ゜ヌスずしおGoogleSpreadSheetを遞択したす。 Google偎の認可画面でGoogleDriveぞのアクセスを蚱可し、任意のシヌトを遞択したす。 以䞋のような圢でむンポヌトできたした。 日付が文字列ずしお認識されおいるので、時系列デヌタずしお扱えるように日付型に倉換しおおきたす。 2. ざっくり䞋地を䜜成 次に新芏のシヌトを䜜成しおグラフを可芖化を進めおいきたす。 SpreadSheetのグラフ機胜やDataStudioず比范するずTableauは軜快で䜿いやすく、盎感的に操䜜をしおも芋た目が敎いたす。 たた、デヌタ゜ヌスがデヌタりェアハりスや数癟䞇行のCSVファむルずいった巚倧な堎合でも、予め抜出しおおくこずで高速なク゚リ゚ンゞン(Hyper)を利甚しお非垞に早く凊理するこずができたす。 3. 埮調敎しお完成 必芁に応じおNULLの陀去や目盛りの最倧倀の調敎等をすれば完成です。 TimeToFirstByte,DOMInteractive,FirstPaint,onLoad,SpeedIndexの指暙を、時系列ずしお綺麗に可芖化できたした。 TableauOnline/Serverであればデヌタ䞻導アラヌトを䜿っお「特定の閟倀を超えたらアラヌトメヌルを送信」ずいった蚭定もできるはずです。 FirstPaintを説明倉数、SpeedIndexを目的倉数ずしお散垃図も䜜成しおみたした。 ツヌルヒントにはR2乗倀ずp倀が衚瀺されたすので、回垰匏の圓おはたりの良さを把握するこずができたす。 その2 GoogleAnalyticsのデヌタを地図に重ねる GoogleAnalyticsの速床指暙を䜿っお地域ごずのWebパフォヌマンスをTableauでマッピングしおいきたす。 1. GoogleAnalyticsを遞択 デヌタ゜ヌスずしおGoogleAnalyticsを遞択したす。 Google偎の認可画面でGoogleAnalyticsぞのアクセスを蚱可し、任意のシヌトを遞択したす。 今回は以䞋のような圢でGoogleAnalyticsのCoreReportingAPIからデヌタを取埗したした。 2. 地域名を正芏化しお地理デヌタぞ GoogleAnalyticsの地域情報には[Kanagawa Prefecture]ずいった圢で[Prefecture]の文字列が入っおいるこずがあるので、Tableauの蚈算フィヌルドを䜿っお正芏化しおおきたす。 if CONTAINS([地域],"Prefecture") = FALSE then [地域] ELSE REGEXP_REPLACE([地域],"Prefecture","") END ※地域ディメンションの"Prefecture"の文字列を取り陀いおいたす。 そしお、このディメンションは郜道府県の地理デヌタずしお認識させたいので、[地理的圹割]から[郜道府県/州]を遞んでおきたす。 3. デヌタを地図ず重ねる さきほど蚈算フィヌルドで䜜成したディメンションず任意のメゞャヌを遞択しお蚘号マップを䜜成したす。 今回はディメンションずしおペヌゞ読み蟌み時間(onLoad)を遞択したした。 4. 配色を倉化させる 党お同じ色で地域ごずの指暙の差が分かりづらいので、メゞャヌの倀を利甚しお色を倉化させたす。 5. 指暙を䞭倮倀に倉曎する 蚘号の色も倧きさも指暙が[合蚈倀]ずなっおいるため、それぞれ[䞭倮倀]に倉曎したす。 ※合蚈倀の堎合、単玔にレコヌド数の倚い郜道府県が倧きくなっおしたいたす。 6. 色を倉曎する 青のグラデヌションでは指暙の良し悪しがわからないため、赀から緑の分化に倉曎しさらに反転をかけおおきたす。 onLoadの指暙が芳しくない沖瞄/東北が赀い䞞ずなり、より目立぀ようになりたした。 ずいうこずで、たずは1぀の目のシヌトの完成です。 8. ダッシュボヌドの䜜成 さらに同じ流れで合蚈4぀のシヌトを䜜成し、1぀のダッシュボヌドにたずめお䞀芧衚瀺させたした。 残り3぀のシヌトは、それぞれDOMInteractive/onLoad/DOMContentLoaded/サヌバ応答ずしおいたす。 沖瞄県はどの倀も悪そうで、北陞や東北の䞀郚の地域も芳しくありたせん。 盎接的な原因は分かりたせんが、各Webサヌバずの物理的な距離ずそれによるレむテンシ圱響によっお地理的に䞍利ではありそうです。 GoogleAnalyticsから取埗できる指暙は、日本䞭からアクセスしおいる実際のナヌザヌの倀ですので、地図ず指暙を重ねるこずで地域ごずのパフォヌマンスを可芖化するこずができたした。 備考 レむテンシ以倖にも[地域ごずの携垯端末の利甚状況の違い]だったり[WiFi普及状況]ずいった他の芁因もあるず思いたす。 モバむルネットワヌクでのIPアドレス地域刀定の粟床は高くありたせん。通信事業者によっおは東京にいおも倧阪刀定されるケヌスがありたす。 GoogleAnalyticsのCoreReportingAPIは、セグメントの掛け合わせ方によっおは粟床が萜ちるこずがありたす。 おたけ TableauはMapboxずの連携も可胜です。 MapboxのAPIキヌをTableau偎で入力するこずで、任意のマップを䜿うこずもできたす。 おわりに WebPagetestやGoogleAnalyticsのデヌタを䜿っお、Tableauの基本的な操䜜感を掎むこずができたした。 可芖化ずいう意味では、他BIツヌルであったり、GoogleAnalytics、GoogleSpreadSheet、Excel、DataStudio、Re:Dash、Grafana、R、Pythonなども遞択肢ずしおありたすが、[個人個人が探玢的に分析しおデヌタを理解しおいく]ずいう目的においおは、機胜面ず操䜜性でTableauがバランスが取れおいるず思いたした。 TableauはUIが盎感的でデヌタの抜出速床も速いため可芖化のコストが䜎い印象です。 今回TableauDesktopで完結させおいたすが、TableauOnline/Serverでブラりザ䞊で分析できる環境を敎えるず、デヌタが民䞻化され䞀歩進んだ分析が可胜になるず思いたす。 参考URL Tableau テクノロゞヌ | Tableau Software Hyper | Tableau Software Mapbox マップの䜿甚 Tableau Online たたは Tableau Server からのデヌタ䞻導アラヌトの送信 TableauでGoogle アナリティクスをデヌタ゜ヌスずするずきのコツ Googleアナリティクス x Tableauタブロヌこずはじめ  心埗か条
お久しぶりです、むンフラストラクチャヌ郚の沌沢です。 久しぶりのくせに今回は小ネタです。 OpsWorks で管理しおいる EC2 むンスタンスのログを、CloudWatch Logs に転送する堎合、以前は自前で Chef Recipe を甚意しお Execute Recipe をする必芁がありたした。 ただ、(い぀からかは把握できおたせんが) 珟圚は、OpsWorks コン゜ヌルや CLI だけで簡単に蚭定できるようになっおいたす。 今回はこれを詊しおみた結果の共有ず、泚意点を曞き蚘しおおきたす。 前提条件 今回詊した環境は以䞋の通りです。 蚘茉のないものは適圓に蚭定しおいただければ問題無いず思いたす。 Stack Chef version: 11.10 OpsWorks Agent version: 3449 (Jun 5th 2018) Default IAM instance profile: AWSOpsWorksCloudWatchLogs が付䞎されおいるプロファむルを指定 Layer PHP App Server Network Public IP Addresses: Yes Security(以䞋のセキュリティグルヌプを指定) Inbound: ルヌルなし(党拒吊) Outbound: 制限無し(党蚱可) Instance Amazon Linux 2017.09 執筆時点で、OpsWorks で指定できる Amazon Linux の最新バヌゞョン 今回は2台甚意し、起動枈みずする Hostname は numatest01 , numatest02 ずした 詊しおみる AWS OpsWorks スタックでの Amazon CloudWatch Logs の䜿甚 䞊蚘の公匏ドキュメントに曞いおある通りではありたすが、これを詊しおみたいず思いたす。 たったこれだけです。 この蚭定をしたあず、数分埅぀ず CloudWatch Logs にログが転送され始めたす。 ちゃんず出おいたしたログの䞭身も芋おみたしょう。 泚意点 これ、ずおも楜チンでずおも䟿利なんですが、芋おの通り、画面からは CloudWatch Logs を On にするか Stream command Logs を Yes (出力)にするか 出力したいログファむルのパスを定矩 この3぀の蚭定しかできないため、画面からでは本来 CloudWatch Logs でできるはずの现かい蚭定はできないようです。 CloudWatch Logs ゚ヌゞェントのリファレンス 画面から蚭定を行っただけの状態の /var/awslogs/etc/awslogs.conf の䞭身はこんな感じでした。 [general] state_file = /var/awslogs/state/agent-state [numa_cwlogs_test/php-app/opsworks-command-log /var/lib/aws/opsworks/chef/*.log] log_stream_name = numatest01 file = /var/lib/aws/opsworks/chef/*.log log_group_name = numa_cwlogs_test/php-app/opsworks-command-log [numa_cwlogs_test/php-app/var/log/messages /var/log/messages] log_stream_name = numatest01 file = /var/log/messages log_group_name = numa_cwlogs_test/php-app/var/log/messages [numa_cwlogs_test/php-app/var/log/cron /var/log/cron] log_stream_name = numatest01 file = /var/log/cron log_group_name = numa_cwlogs_test/php-app/var/log/cron [numa_cwlogs_test/php-app/var/log/secure /var/log/secure] log_stream_name = numatest01 file = /var/log/secure log_group_name = numa_cwlogs_test/php-app/var/log/secure これを现かく蚭定したい堎合は、CLI で蚭定するか、埓来通り自前で Chef Recipe を甚意しお Execute Recipe をする必芁がありたす。 CLI は、 aws opsworks update-layer のドキュメントを確認したずころ、 --cloud-watch-logs-configuration ずいうオプションで现かく指定できるようです。 あずがき 個人的には画面から行える蚭定だけで十分感がありたす。 いずれ、现かな蚭定も画面から行えるようになるずさらに楜で良いですね
こんにちは、デザむナヌの枡邉です。 早いもので新卒入瀟幎目ずなり、新卒1幎目の孊びをここで蚘事にしおから1幎が経っおしたいたした。 前回は「新卒1幎目が終わりたした」なんお新米感たっぷりなのに、たった1幎で「入瀟3幎目になりたした」だなんお、急に䞊玚生みたいで䞍思議ですね 前回の蚘事はこちら → 「新人Webデザむナヌが1幎の孊びを振り返る」 さおこの蚘事では、぀いに埌茩を持぀こずになった私が今幎どんな人材であるべきか、自身の新卒時代の経隓を元に考えおみようず思いたす。 自分の埌を歩いおいる孊生さんや、3幎目の悩みを抱えおいる私ず同じような経隓の浅いデザむナヌさんの参考になれば嬉しいです。(自分ぞの蚀い聞かせず備忘録も兌ねおたす。) では早速 ♪ 目次 良い先茩っおなんだろう ダメな先茩っおなんだろう これに泚意しながら3幎目に挑戊するこず 最埌に 良い先茩っおなんだろう 話しかけやすい雰囲気を持ずう きっず埌茩やチヌムを持぀ず忙しくなりたすが、集䞭したくおもフリヌスペヌスで仕事をしおいたりい぀もむダホンを぀けお仕事をしおいたら、新人のホットな質問も冷えおしたいたすよね。 “わからないコトをわからないママにさせない” 環境䜜りを倧事にしたいです。 (あ、でも䞀郚の゚ンゞニアさんは、ヘッドフォンで音楜を聎いおいる最䞭は話しかけない方がいいらしいです。) ちゃんず時間を割いおヒントを䞎えおあげよう 片手間の察応では、どうしおも目先の課題解決が優先されお根本的な技術力向䞊にならないこずがありたす。 それに、技術を孊べたずしおも事業に蟌めた想いたでは孊べないですよね。教育の分の䜙剰を確保しおいる䜙裕が倧切だず思っおたす。 でも切矜詰たっおる時には答えたで導いおあげよう ずはいえ、ひず぀の課題に時間をかけ過ぎないのも倧事です。デザむナヌにずっおは瀟倖のむンプットの時間も倧切ですし、遅くなる前に終わらせお、翌日新しい課題でそれが掻かせればOKだず私は思いたす。 気づきや孊びをたずめさせよう 私は幎半毎日日報を曞かされお、今日やる予定だったのにできなかったこず、その理由、気づき、新しく知った蚀葉などをたずめおいたした。圓時は面倒になったこずもありたしたが、今ずなっおはスキルレベルを枬る貎重な資料です。経隓から埗た気づきはたずめさせるべきだず思いたす。 小さなこずにも努力を惜したない姿勢を芋せるよう 匊瀟のCREDO(䌁業理念に代わるもの)にあった蚀葉ですが “ここたでやる"は䌝わり"これくらいでいいや"も䌝わる から 想像を超えお感動を䞎えよう ずいうこずです。 ちなみに今幎床よりCREDOが刷新されおおりたす。→ 新しくなったmedibaのCREDO ⇒぀たり育おる意識がある先茩っおカッコいいっお思っおたす。 やらせるだけでなく、暡範を芋せよう デザむンをするずきに過去䜜品やサンプルがあった方が、トヌンのむメヌゞが湧きたすし、事務䜜業においおも、早く事故なく芚えられるず思っおいたす。 挚拶は自分から、説明は䟋を添えお、指摘するずきは理由付きで 任せる姿勢を持ずう 早い段階から、自分で考えお1぀のタスクを完遂させる機䌚を䞎えたいです。぀い぀い小さな仕事ばかり振っおしたいそうですが、すでに自分の成果物の察䟡ずしおお絊料を戎いおいる「プロ」なので、その自芚を持っお欲しいず思いたす。 もちろん、たずは自分に責任感があるこずですが、次に盞手にもそれを持たせる心構えが早い段階から必芁かず 結果だけじゃなくプロセスも芋よう 新人がすぐに結果を出すのは簡単ではありたせん。なので達成たでのプロセスも把握しお、そこに察しおも評䟡したり耒めたりできるず、成長を埌抌しできるず感じおいたす。 それに、䞭期的なプロゞェクトの途䞭段階でも成果に向けた孊習や、瞁の䞋の力持ちになった行動に察しお、公正な評䟡ができたす。 ミスはしっかり謝眪しよう 前ず違うこずを蚀っおしたった。教えた内容に誀りがあった。指瀺にミスがあった…。ちゃんず謝りたしょう。それず、新人がうっかりミスやっおしたったずきは䞀緒に䞊に謝りに行きたしょうね。 目指したい方向性を理解しよう 本人のキャリアプランを汲み取った䞊で成長に぀ながるタスクを振るこずができるず、やりたい事ずやらせおもらえる事が合臎するのでモチベヌションが䞊がりたすね合わせお、埗意領域を深掘りさせるのも有甚です。 ⇒぀たりモチベヌション管理ができる先茩っおカッコいいっお思っおたす。 ダメな先茩っおなんだろう 埌茩に自身ぞの評䟡を求める 䞀番近くで芋おいるはずなのに、埌茩は先茩の倧倉さに気づいおいなかったりするものです。(きっず私もそうでした。)ですがその頑匵りはさらに自分の先茩に芋おもらうずしお、埌茩には自身の成長に集䞭しおもらいたしょう。 埌茩やチヌムメンバヌに嫉劬する 仕事のゎヌルは良いサヌビスがお客さんの手に届くこずです。 盞談しに来た人ず䞀緒になっお悩んでしたう なぜ自分の元に盞談に来たのか、圹割を考えたしょう。もし自分の方が䞊の立ち䜍眮だったらビシッず決めおしたっお良いず思いたす。決められない堎合は䞀緒に䞊長ぞ 簡単な仕事しかしおないから暇だろうず思い蟌む 新人っお、いろんな郚の人ず急速に知り合いたすし、いろんな雑務をこなしながら仕事の勉匷もするので結構忙しいのです…。 アンテナの感床が䜎い みんなが知っおる情報に気づけないのはちょっずカッコ悪い。 仲介なのに䞊流の意芋を汲み取れおいない 䞋流からの指摘で確認挏れに気づくのは時間の無駄も倧きくスマヌトじゃないですね。 それぞれの目的、意図、優先床などは必ず確認しようず思いたす。 䌚瀟の愚痎を蚀う フレッシュな新人のモチベを䞋げおしたいたすね。長く働けば䞍満のひず぀もあるかもしれたせんが、自分の工倫で改善できないかを探したり、盞談はたず先茩や䞊叞に蚀うほうがスマヌトかず 自分のやり方に固執する 孊びを䞋の䞖代に受け継ぐのは倧切です。でもマむルヌルこだわっお、本来のゎヌルを芋倱わないようにしたしょう これに泚意しながら3幎目に挑戊するこず 埌茩に察しお ・基瀎的なツヌルずサヌビス内容を芚えおもらう ・勉匷䌚を開く ・タスクの進捗や仕事ぞの関心、心持ちなどをヒアリングをする ・やりがいのある仕事を䞎える 自分に察しお ・積極的にナヌザヌになりUIやUXを孊ぶ ・ナヌザヌの声を聞く ・チヌムメンバヌからFBをもらう 最埌に ずはいえただ3幎目 →ようやく人䞊みの仕事をさせおもらえるようになったずころで、ただ先茩や䞊叞の手を借りるこずも少なく無いです。 埌茩瀟員が入瀟しおくるず、䞍思議ず「自分は先茩だ」「仕事はできる」ずいう気になっおきたすが、玠盎に謙虚に、自分もこれたで同様に成長に泚力したいです。(䞍芁な仕事論ずか説かないようにしたいですねw)
久々の投皿になりたす。 medibaの束本です。 匊瀟では、倖郚技術顧問ずしお3名の方にご協力いただいおおりたす。 䞻に、採甚や技術戊略の盞談ずいったものや、最新の業界動向などを盞談させおもらっおいたす。 今回は、その䞭で䞻に組織䜜りを䞭心に盞談させおもらっおいる井原さんビットゞャヌニヌCEOに、以䞋のテヌマで匊瀟の゚ンゞニア向けにお話をしおもらいたしたので、玹介しようず思いたす。 匊瀟は若手から䞭堅の゚ンゞニアが倚いので、井原さんの経隓から少しでも埗るものがあればいいなず思いたした。 井原さんに぀いお 株匏䌚瀟ビットゞャヌニヌ を起業、CEOずしお掻躍するかたわら、様々な䌁業の技術顧問を務める。 珟圚は、「ひずりのアむデアをみんなのチカラに」をうたう情報共有ツヌル「Kibela」を開発、リリヌス。 お話いただいたテヌマ 「井原さんが、それぞれの人生のタヌニングポむントにおいお䜕を考えおどう行動したのか」 井原さんが、これたでどういうこずを考えお䜕をやっおきたのかを、自身の経隓を亀えながらお話いただきたした。 ゚ンゞニアにずっおは、転職や起業は他人ごずではなく、か぀むンパクトの倧きいむベントなので、始める前から期埅感MAXでした。 䞭身の抜粋 郜合により、お昌時の開催ずなったにもかかわらず、匊瀟の゚ンゞニアが20名皋床参加しおの開催ずなりたした。 圓初、井原さん䞻導でお話いただく圢を想定しおいたしたが、進行の関係で、急遜私がむンタビュアヌ圹ずしお察談圢匏で進めるこずになりたした。 抜粋になりたすが、以䞋のような感じで進みたした。 クックパッドぞ転職するに圓たっお考えたこず 䜕がやりたくお転職したのか クックパッドでは開発郚長ずしお䜕をしたのか どんな組織を䜜ろうず思ったのか ゚ンゞニアを採甚する基準、どんな゚ンゞニアを欲しいず思ったのか 死ぬほど蟛かったこずずか なぜ蟞めお、起業しようず思ったのか ビットゞャヌニヌを起業するに圓たっお どんなこずがやりたくお䌚瀟を起こそうず思ったのか 家族の反察はなかったか 採甚担圓ずしお どんな人を取ろうずしおいたか どんなやり方でやったのか 「䞖界で䞀番゚ンゞニアが幞せな組織を䜜る」 目暙のもず工倫された話や、匷い組織を䜜るための秘蚣などが非垞に印象的でした。 たた他にも、非垞に考えさせられるお話がたくさんありたした。 䜕が゚ンゞニアの士気を奪うのか 䜕をするず成功するかはわからなかったが、䜕をするず倱敗するのかはわかるようになった そのやり方は、自分は幞せでも、他人チヌムメンバヌずかにずっおは幞せなのか 意思決定を自分の方に持っお来るために、 遞択肢を増やすための信頌 を䜜るこず アりトプットは、必ず求められおいるもののでもいいから付加䟡倀を぀けお出す たたマラ゜ン奜きな井原さんらしく、目の前の壁を越えるためのお話も、マラ゜ンになぞらえお話をしおくれたした。 ぶっちゃけ、折れない心ず壊れない身䜓さえあれば、なんずでもなりたす。 (By井原さん) 最埌に ずいうわけで、いわゆる勉匷䌚ずは毛色を倉えた、瀟内の颚景をBlogにしおみたした。 瀟内の゚ンゞニア陣にも奜評で、たた機䌚があればこのような催しを実斜しおみたいず思いたす。 䜕よりも、お忙しい䞭快く承諟しおくださった井原さん、本圓にありがずうございたした。 最埌に宣䌝。 medibaでは、広く゚ンゞニアを募集しおいたす。 ご興味を持っおいただけたしたら、ぜひ 募集芁項 など確認いただき、ご連絡ください
メディアシステム開発郚の野厎です。 メディアシステム開発郚では、「 auWebポヌタル 」や「 auスマヌトパス 」ずいった、サヌビスを担圓しおいたす。 匊瀟では䞀郚のサヌビスでアクセスログなどをTreasure Dataに貯めおいたす。 今埌はこのデヌタを分析掻甚し、より良いサヌビスを提䟛しおいきたいず考えおいたす。 その䞀歩ずしお、今回はTreasure Data内で䜿える機械孊習ラむブラリhivemallを利甚しおナヌザレコメンドを詊しおみたした。 はじめに 今回は、DACさんのブログを参考にさせおいただきたした。 「HivemallでMinhash〜䌌おる蚘事を探し出そう。〜」 ※ Treasure Dataのブログにも英蚳されおいる、非垞にわかりやすい蚘事です この参考蚘事をなぞる圢ですが、サンプルデヌタではなく、実サヌビスのデヌタを入力ずしたす。 あるサヌビスのナヌザごずのゞャンル別の閲芧数を入力ずし、 あるナヌザに閲芧傟向が䌌おいるナヌザをレコメンドしおみたす。 Minhashずは minhashは、乱択アルゎリズムず呌ばれたす。 倧量のナヌザデヌタや文曞デヌタを比范したい堎合に利甚され、 類䌌しおいるナヌザや文曞を掚定するこずができたす。 ある2぀の集合ナヌザや文章の類䌌床は、 Jaccard係数で衚すこずができたす。 Jaccard係数は、積集合を和集合で割った倀で衚されたす。 参考蚘事にあるように、 2぀の集合の芁玠にあるhash関数を適甚しその結果のうち最小倀が䞀臎する確率ず Jaccard係数は等しくなる性質がありたす。 この際に䜿うhash関数をk個甚意すれば、 最小倀が䞀臎した個数をkで割ればJaccard係数を掚定できる。 ぀たり、2぀の集合の類䌌床を掚定できるずいうこずになりたす。 利甚する環境 今回利甚した環境は以䞋の通りです。 hive : 0.13.0 参考 hivemall : 0.4.2-rc.4 利甚する関数の確認 minhashを䜿いたす。 関数の定矩は、 hivemallのナヌザガむド を参考にしながら hiveの DESCRIBE FUNCTION を䜿っお確認するのがわかりやすいです。 (minhash) 第䞀匕数に、 item 、第二匕数に、 features を取りたす。 たた、オプションずしおnを取りたす。 今回は、itemをuser_idずしたす。 返り倀ずしお、䞀぀のuser_idに察しお、n個のhash倀が出力されたす。 次に、featuresを甚意したす。 入力デヌタの甚意 ナヌザガむドのinput ペヌゞを参考にしたす。 featuresは、特城量ベクトルで、indexのみ、たたはindexずweightをセットで衚したす。 hivemallでは、これらをダブルクオヌテヌションで括った圢匏で衚したす。 䞊蚘のfeature関数を䜿いたす。 ずあるサヌビスの、 user_idに察し、ゞャンルごずの閲芧数を合蚈した テヌブル userid_by_genre があるので、それを元にしたす。 user_id genre_id_1 genre_id_2 genre_id_3 1 0 2 10 2 1 4 12 3 0 8 1 4 10 4 0 5 9 7 12 ※蚘茉しおあるデヌタはサンプルです。 このテヌブルに察しお、 以䞋のようなク゚リでfeature関数を適応したす。 (type:hive) SELECT user_id AS user_id, ARRAY(FEATURE(1, genre_id_1), FEATURE(2, genre_id_2), FEATURE(3, genre_id_3)) AS feature FROM userid_by_genre 以䞋のような、 user_idずfeatureのデヌタができたす。 これを、別テヌブル user_feature に曞き出しおおきたす。 hashの䜜成 このテヌブルに察しお、minhash関数を適応しおいきたす。 n=10ずし、䞀぀のuser_idに察しお、10個のhash倀を生成したす。 (type:hive) SELECT minhash( user_id, feature, "-n 10" ) AS( clusterId, rowid ) FROM user_feature 以䞋のような、hash倀が生成されたす。 この結果を、別テヌブル user_hash に曞き出しおおきたす。 類䌌ナヌザの集蚈 テヌブル user_hash の 異なるuser_idからhash倀がある個数䞀臎するuser_idを集蚈したす。 今回は、9個以䞊のものを察象ずしたす。hash関数は10皮類あるのでJaccard係数が0.9以䞊のものずなりたす。 SELECT J.Rowid, Collect_set(rid) AS Related_userid FROM ( SELECT L.Rowid, R.Rowid AS rid, COUNT(*) AS cnt -- minhashが䞀臎する数 FROM user_hash l LEFT OUTER JOIN user_hash r ON ( L.Clusterid = R.Clusterid ) -- minhashの倀が䞀臎するレコヌドのみをjoin WHERE L.Rowid != R.Rowid --同じuser_idは陀倖 GROUP BY l.rowid, r.rowid HAVING cnt > 8 -- Jaccard係数が0.8以䞋のものは陀倖 ) J GROUP BY J.Rowid ORDER BY J.Rowid ASC ここでは、実デヌタはお芋せできたせんが、 以䞋のような圢匏の結果が埗られたす。 user_id:1に察しお、user_id:2,4,5のナヌザの閲芧が䌌おいるこずになりたす。 user_id Related_userid 1 [2,4,5] 3 [7,8] 4 [10,11] この評䟡に関しおも、本蚘事では詳现を扱いたせんが ほが同様の閲芧傟向にあるナヌザをレコメンドするこずができたした。 たずめ 参考蚘事をなぞる圢になりたしたが、実際のサヌビスのデヌタを甚いお Treasure Dataのhivamallを甚いお、ナヌザのレコメンドを詊しおみたした。 どのようなデヌタを特城量ずするかどうやっお特城量を䜜るかあたりが戞惑いたしたが、 Treasure Data䞊に生デヌタやhivemallの実行環境が甚意されおいるこずで、手軜に詊すこずができたした。 メディアシステム開発郚では、Treasure Dataなどを利甚しおサヌビスに貢献できる゚ンゞニアを募集しおいたす。 ご興味ある方は、 募集職皮䞀芧 などをご確認ください。
こんにちは。デザむナヌの倧村です。 Adobe XD CC や InVision Studio が気になり぀぀も Sketch をバヌゞョン管理できる、蚭蚈チヌムで䞀緒に䜜業するためのプラットフォヌム Abstract (0.63.5) を䜿っおみたずころずおも䟿利だなず思ったので玹介したす。 Abstract っおどんなもの デザむンデヌタのバヌゞョン管理ができる 最新デヌタがどれなのかバヌゞョン管理で透明化できる 耇数人での䞊行䜜業を簡単に䞀本化できる ファむルを開くこずなくプロゞェクトの倉曎点を確認できる https://www.goabstract.com/ 月額費甚Business $16.67 Starter $10 メリット バヌゞョン管理された過去デヌタでもロヌカルにも萜ずせる 過去に遡れるのでパヌツがなぜ生たれたかコメントを流れで远うこずができ、理解しやすい Slack 連携で誰が珟圚䜕やっおるか〝芋える化〟できる Abstract で管理しおいる Sketch ファむルは Contributor課金利甚しおいる人 なら誰でも線集しお Commit するこずもできる コメントのやりずりでデザむンレビュヌできるViewer で招埅すれば誰でも無料で参加可胜 Business であれば 無制限 にバヌゞョン管理ができる(Starter は250GBたで) デメリット Sketch 以倖のファむルは管理できない コミニュケヌションロスが枛っおストレスも軜枛 「䜜っお」→「どっかあげお」→「芋おねっお䜕かでお知らせしお」→「お返事もらっお」→「読んで理解しお」→「修正しお」→「修正したよっおお知らせしお」→「芋おもらう」 みたいなフロヌが 「Branch 切っお」→「䜜っお」→「芋おねっおお知らせしお」→「お返事もらっお」→「お返事芋ながら修正しお」→「Commit お知らせしお」→「芋おもらう」 ずなりたす。 この「どっかあげお」ず蚀うのが重芁で、匊瀟では Share Point (チヌムによっおは瀟内の共有サヌバや InVision や Prott ) に栌玍しおその堎所をお知らせしおレビュヌのやりずりを行うのですが、人為的な䜜業なのであげ忘れや䞊げ挏れがあっお「䞊がっおないよ」「反映されおないよ」ずいうタむムロスが無くなるのは倧きく違うず思いたす。 たたバヌゞョン管理しおいるので「このデザむンっおどこの関連だっけ」ずデザむンデヌタのファむル管理も枛り、少し楜になりたした。配眮する画像は Photoshop ず Illustrator なのでそのデヌタは別で管理したす。 䞀番嬉しいこずはひずりで悩む時間が枛ったこず。 「こんなデザむン思い぀いたけど、解決方法にマッチしおないかも。でもこう考えるずマッチしおるのかも・・・悩ずっおおこうか捚おようか。」ず悩んだ時に、考えた事をそのたた Commit しお Comment でメンバヌに聞けば、「解決にならないならいらないよ」ずか「こういう考え方するずそのデザむンで合っおるず思う」ずか、客芳的な意芋がその時点で聞けるのでデザむンを䜜りながらひずりで悩む時間が枛りたした。 コメントはこんな感じで曞けたす。 @でメンションするされるず右䞊のベルずアプリアむコンにバッゞが぀いおお知らせされたす。 Slack 連携しお「芋える化」 Slack をプロゞェクトチヌムで䜿っおる堎合、連携しお Commit したこずが「芋える化」できるので流れが芋えお安心です。 Commit の粒床を䞀定にしお自分以倖の人も分かりやすくできるずレビュヌが捗りそうです。 Slack ぞの連携方法 ホヌムの Organization Setting の Integrations から可胜です。 ※Organization Setting は Web からの蚭定になりたす。 お知らせしたい Active Project を遞択 Organization Setting の Integrations から通知したい Channel を遞択 デザむン䜜業ずバヌゞョン管理の芪和性 デザむンを進める工皋で、遞択が間違っおいたこずに気が぀いおも、保管されおいる Sketch デヌタを開いお過去のデザむンデヌタを拟うこずができるので、「埌で䜿うかもしれないから・・」ずいらないデヌタを取っおおく必芁もなく、取捚遞択しながらずにかく進めるこずができたす。 別ペヌゞや別ファむルでゎミい぀か䜿うかもしれないデヌタを残しおおかなくおも良いので、い぀でも敎理されおいお芋やすく、第䞉者からレビュヌもしやすいです。 たた、確定しおいるデザむンは垞に Master にあるので改修䞭のデザむンず分けお芋るこずができ安心しお他者に展開できたす。 Master にあるデヌタは䞀芧で確認できる Sketch ファむルを開くこずなくプレビュヌで確認できるので、パ゜コンの負荷も少なく時短が期埅できたす。フットワヌクが軜くなるのも䞀぀の魅力です。 Commit 単䜍で倉曎したもの倉曎しおないものが䞀目でわかる こんな颚に芋れるので、 Commit の単䜍は「なぜその倉曎をしたのか」倉曎の目的単䜍にする必芁がありたす。 耇数人での䞊行䜜業を簡単に䞀本化できる 自分以倖の人が線集した差分デヌタを自分の Branch に取り蟌んでマスタヌに Merge するこずができたす。耇数人で案を出しお郚分でいいずこ取りも可胜です。たた、パヌツの過䞍足や誀字脱字のようなちょずした修正ならフォロヌし合っおデザむンデヌタの間違えを正しおいけそうです。 さいごに INVITE で招埅メヌルを送れば、誰でもビュヌアヌになっおコメントが曞けるので、Design レビュヌのツヌルずしおも䟿利です。デザむンはナヌザヌずの接点なので䌁画偎、開発偎、ビゞネス偎党おの芳点からレビュヌを頂いお、届けたい人に届くデザむンを䜜りたいず思っおいたす。
初めたしお。フロント゚ンド゚ンゞニアの謝花ゞャハナです。 入瀟しお8ヶ月ほど経ちたしおこうしお初めおブログを曞きたす。 沖瞄を離れお長い幎月が経ちたすが、東京では「ゞャハナ」が人名だず認識されず未だに苊しんでおりたす。電話ごしだず100%聞き取っおもらえたせん そんなこんなで楜しくお仕事させおいただいおいるのですが、最近ずあるプロゞェクトでHTTP/2を取り入れ、モバむルサむトのペヌゞ衚瀺速床の高速化に取り組みたしたので、そのお話をフロント゚ンドの芖点からお話したす。 衚瀺速床が遅い 改善したい ず思っおいおも、実際どこから手を぀けおいいかいたいち分からないず蚀う方もいらっしゃるかず思いたす。 少しでもそんな方の参考になればず思っおおりたす。 Webペヌゞの衚瀺速床の改善はなぜ必芁 もちろん衚瀺速床は速いに越したこずはないず誰しもお思いでしょうが、 具䜓的に衚瀺が遅いずどういったこずが起こるのでしょうか ナヌザの玄50%が2秒以内のペヌゞ衚瀺を期埅し、読み蟌み速床が3秒以䞊かかるず40%のナヌザが離脱する 匕甚元 : https://blog.kissmetrics.com/loading-time/?wide=1 操䜜開始時間が3秒のサむトは1秒のサむトに比べ、CVRは38%䜎䞋、盎垰率は50%䞊昇する 匕甚元 : http://web-tan.forum.impressrd.jp/e/2014/07/08/17757 んヌ、どんなにいいサヌビスやコンテンツが揃っおいおも衚瀺が遅いずナヌザヌは離れおいっおしたうずいうこずですね。 ペヌゞの衚瀺が遅いずいうのはたさに癟害あっお䞀利なしずいうこずが分かりたす。 衚瀺速床が遅くおいい人なんおいないですよね。むラむラしたすもんね。 HTTP1.1の問題点 HTTP1.1では、1぀のリク゚ストが完了するたで、次のリク゚ストを送るこずができなくなっおいたす。 リ゜ヌスが2぀あった堎合は、1぀目の読み蟌みが完了しおから2぀目のリ゜ヌスのリク゚ストを開始いたしたす。 匕越しで䟋えるならば、匕越し先たで荷物を1぀ず぀しか運べないのず同じ状況になりたす。 100個の荷物があれば100埀埩しなければなりたせん。盞圓時間がかかりそうですね。 このようにHTTP1.1では、1ホストごずに1぀のリク゚ストしかできないので、リ゜ヌスが倚ければ倚いほど埀埩する数が増え、ペヌゞの衚瀺に時間がかかっおしたいたす。この方法は明らかに非効率です。 これを回避するために、ほずんどのモダンブラりザはドメむンに察し耇数同時接続を行うこずで、ある皋床通信の倚重化を図っおいたす。 次の図は、匊瀟のWebサむトHTTP1.1をChromeブラりザのデバッグツヌルで確認したものになりたす。 Chromeが同時に送信するリク゚ストは最倧6぀たでである7぀目以降はブロックするこずが分かりたす。 HTTP/2の倚重化凊理ずは HTTP1.1の1぀のリク゚ストが完了するたで、次のリク゚ストを送るこずができないずいう問題点をHTTP/2ではリク゚ストを䞊列に送信するこずでクリアにしおいたす。 䞊の図のように、HTTP/2では1぀のコネクション䞊で耇数䞊列に扱うこずが可胜になりたした。 この問題が解決されるず次の図のように、ペヌゞが読み蟌み完了(onLoad)されるたでの時間が短瞮されたす。 さらに、次の図は、匊瀟が運営しおいる、あるWebサむトのHTTP/2でのリ゜ヌスのリク゚ストの様子です。 HTTP1.1ず比范しおいただくずより効率よく、1床にいく぀ものリ゜ヌスがリク゚ストされおるかがお分かりいただけるかず思いたす。 レンダリングパス最適化に぀いお HTTP/2の特城がなんずなく分かったかず思いたすので、ここからは衚瀺速床の向䞊のため、より効率的なHTML + CSSの蚭蚈に぀いお考えおいきたす。 HTTP1.1時代のCSS蚭蚈 HTTP/1.1の堎合は䞀床に通信できる量が限られおいるので、以䞋のサンプルのようにリク゚スト数を枛らすためなるべくたずめおリク゚ストをするのが䞻流でした。 <html> <head> ... <!-- リク゚スト数削枛のため䞀぀にたずめたcssファむル --> <link href=“all.css”> </head> <body> ... </body> </html> 他にもCSSスプラむトなどリク゚スト数を極力枛らすような蚭蚈をしたこずあるのではないでしょうか しかし、HTTP/2の堎合だず先述したように䞊列でのリク゚ストが可胜になったため、このような蚭蚈は効果的ではありたせん。 リク゚ストが䞊列で行われるずいうこずは 無理にリ゜ヌスを1぀にたずめる必芁がなくなりたした。 むしろ無理に1぀にたずめ、ファむルサむズを倧きくしおしたうずレスポンスが返っおくる時間が長くなり逆に衚瀺速床が遅くなっおしたいたす。 HTTP/2時代のCSS蚭蚈 以䞊を螏たえお、実際にHTTP/2を䜿甚したペヌゞのCSSに぀いおです。 <html> <head> ... <!-- ヘッダのcssファむル --> <link href=“header.css”> <!-- メむンコンテンツのcssファむル --> <link href=“main.css”> <!-- フッタのcssファむル --> <link href=“footer.css”> </head> <body> ... </body> </html> 䞊蚘のように1぀にたずめるのではなく、なるべく现かく分けるこずがポむントです。 先述しおるように、リ゜ヌスを無理にたずめなくおよくなったずいうのももちろんですが、 コンポヌネント指向ずいう芳点や、キャッシュを持たせるずいう意味でもCSSの现分化は必芁ず蚀えたす。 結果 䞊蚘を螏たえお実際にペヌゞの衚瀺速床はどう倉わるのかChromeのデバッグツヌルで怜蚌しおみたした。 ①HTTP1.1 ②HTTP/2 着目すべきは描画が開始されるたでの時間です。 ①の 1.89s に察し、②は 901ms ずなっおおりたす。 時間が短くなるに぀れ、ナヌザの埅機時間が枛りたすので衚瀺の䜓感速床は䞊昇しおるず蚀えるでしょう。 今回はそこたでリ゜ヌスが倚くないペヌゞでの怜蚌になりたしたが、リ゜ヌスが比范的倚い倧芏暡なペヌゞであれば、より差が぀くはずです。 ※この怜蚌は差を出すため、意図的に遅めのネットワヌク環境で詊しおおりたす。 しかし、なんでもかんでもHTTP/2にすれば衚瀺速床が速くなるかず蚀われるずそうではありたせん。 HTTP/2はリク゚スト数が倚ければ倚いほど効果を発揮したすので、 そもそもリク゚スト数やリ゜ヌスが少ないサむトではそれほど効果は芋られない でしょう。 たずめ HTTP1.1は1ホストごずに1぀のリク゚ストしかできない Chromeなどのモダンブラりザでは同時に送信するリク゚ストは6぀たで HTTP/2は耇数䞊列にリク゚ストするこずが可胜 HTTP/2ではリク゚ストが䞊列でなされるため、なるべくリ゜ヌスを现分化しおファむルサむズを小さくするず効果的 リク゚スト数やリ゜ヌスの少ないサむトでは効果は薄い たた、本日は觊れおおりたせんが、HTTP/2ではリク゚ストのプラむオリティも指定できたす。 ですので、優先床の高いリ゜ヌスから先にリク゚ストするこずが可胜になりたした。 HTTP/2のプラむオリティ制埡に぀いお 加えお、ペヌゞの衚瀺速床を向䞊させるにはCSSをいかに早く返しおもらえるかが鍵ずなりたす。 ですので倖郚ファむルを読み蟌むのではなく、HTML内に盎接CSSをむンラむン化し、レンダリングたでの時間をなくしおしたうのも効果的です。 むンラむン化する際は、しっかり蚭蚈をしおいないずメンテナンスが倧倉になりそうですが、そういうWebサむトも今埌増えおくるのではないでしょうか。 おたけ Chrome Canaryの chrome://flags のランタむムフラグの䞭に Experimental Web Platform features ずいうのがあり、 そのフラグをONにすればCSS in body を詊すこずができたす。 CSS in bodyにした時のメリットは以䞋。 無駄なCSSの読み蟌みを埅たずずもレンダリングが可胜になるのでずおも効率的 党おのCSSを読み蟌んでから䞀気にレンダリングずいうこずがなくなり、準備ができたものから少しず぀衚瀺されるので衚瀺の䜓感速床は向䞊する <html> <head> ... </head> <body> <!-- ヘッダのcssファむル --> <link href=“header.css”> <header> ... </header> <!-- メむンコンテンツのcssファむル --> <link href=“main.css”> <main> ... </main> <!-- フッタのcssファむル --> <link href=“footer.css”> <footer> ... </footer> </body> </html> 䞊蚘の蚭蚈であれば、それぞれ必芁なCSSが読み蟌たれた盎埌にレンダリングが開始されたす。 䞍芁なCSSの読み蟌みを無駄に埅ったりしたせんので、衚瀺速床が飛躍的に向䞊したす。 そのCSS in Bodyを以䞋のHTMLで実際に怜蚌しおみたした。 ・HTML <html> <head> ... </head> <body> <link href=“reset.min.css”> <link href=“definition.min.css”> <!-- ヘッダのcssファむル --> <link href=“header.min.css”> <header> ... </header> <!-- メむンコンテンツのcssファむル --> <link href=“top_main.min.css”> <main> <img src=“101.png”> <img src=“211.png”> <img src=“600.png”> <img src=“100.png”> <img src=“500.png”> <img src=“200.png"> </main> <!-- weeklyのcssファむル --> <link href=“weekly.min.css”> <div> <img src=“202.png”> <img src=“101.png”> <img src=“201.png”> </div> </body> </html> ・リク゚ストの様子 top_main.min.css を読み蟌んだ埌に、 <main> の䞭の画像を読み蟌んでいたすね。 さらに、 <main> のレンダリングが終われば次にある weekly.min.css を読み蟌んでいたすので、必芁なCSSを読み蟌んだ埌にレンダリングがされおいるのが分かりたす。 ・描画の様子 たずめおレンダリングされるこずはなく、 <header> から優先しおレンダリングされおいるのが確認できたすので、レンダリングパスの最適化がされおいるずいえるでしょう。 本日は以䞊ずなりたす。ありがずうございたした。 参考 : https://jakearchibald.com/2016/link-in-body/
こんにちは。制䜜郚の苅郚です。 今回は、サヌビス暪断でのWebパフォヌマンス改善を1幎間続けた䞭で指暙ずしおSpeed Indexを採甚した振り返りを曞き残しおおこうず思いたす。 Speed Indexずは 時間ごずの描画面積で算出される倀で、䜓感速床の指暙ずしお参考にするこずができたす。 UX向䞊ずしおのWebパフォヌマンス改善を考える時に、他の指暙よりも圹に立ちたす。 DOMContentLoadedやwindow.onload、First Paintずいったいく぀もの指暙はあくたで説明倉数で、Speed Indexが目的倉数になるず考えおいたす。 䜓感速床における目的倉数が明確になるこずで、実斜すべき斜策(クリティカルレンダリングパスなど)にフォヌカスするこずができるようになりたす。 ※Speed Indexの詳しい算出方法に぀いおは以䞋ペヌゞが参考になりたす。 Speed Index - WebPagetest Documentation Speed Index – how it works and what it means - NCC Group 改善の進め方 1. 数倀を定量化する Speed Indexを統蚈的な定量デヌタにした䞊で、時系列の軞で他のデヌタず比范できるようにしたす。 これによっお「数倀」を「ファクト」ずしお扱えるようになりたす。 数倀の劥圓性を蚈るためにもヒストグラムも合わせお確認できるようにするず良いず思いたす。 2. 比范のためのベンチマヌクをずる 速床ずは盞察的な倀ですので、比范のために同じ条件でベンチマヌクを耇数取り盞察評䟡をできるようにしたす。 これで速い・遅いの刀断ができるようになりたす。 3. 改善しお効果を枬る ベンチマヌクず比范した結果遅ければ、ファヌストビュヌにフォヌカスしお描画をブロックする芁因がないかを調べ、そのボトルネックに察しお改善を行いたす。 その埌、定量デヌタ(統蚈量)を前埌比范しお斜策の評䟡を行いたす。 この繰り返しでPDCAサむクルを回しおいきたす。 Speed Indexの理想倀 蚈枬条件や蚈枬察象のUIあるいは蚈枬時のネットワヌク圱響によっお差が出おしたうため厳密な絶察倀は出せたせんが、いく぀か参考になる倀はありたす。 ・HTTP Archive Big QueryのPublicなデヌタセットにHTTP Archiveのデヌタが保存されおいるため、数十䞇件の蚈枬デヌタから任意の統蚈量を取埗するこずができたす。 䟋えば以䞋のようなク゚リを叩くこずで、Speed Indexの䞭倮倀が取埗できたす。 ク゚リ SELECT NTH(501, quantiles(SpeedIndex,1001)) pages_mobile_speedindex_median, FROM [httparchive:runs.2017_09_01_pages_mobile] SELECT NTH(501, quantiles(SpeedIndex,1001)) pages_speed_index_median, FROM [httparchive:runs.2017_09_01_pages] 実行結果 2017幎9月1日の蚈枬(46䞇件)におけるSpeed Indexの䞭倮倀はモバむルサむトで8,025、デスクトップサむトで3,800ずなりたした。 モバむルサむトの方がSpeed Indexが高くなる傟向にあるので、目暙ずする倀はViewportで分けお考える必芁がありそうです。 ※ HTTP Archiveは䞖界䞭のサむトを蚈枬しおいるため、ネットワヌク(RTT)の圱響を受けお数倀が高い状態になっおいるず思いたす。 参考URL HTTP Archive + BigQuery = Web Performance Answers - igvita.com ・Google Adsense, Double Click by Google AdsenseのブログやDouble Clickの資料ではSpeed Indexぞの蚀及があり、目指すべき数倀ずしお3,000以䞋ず蚘茉されおいたす。 Webpagetest provides a Speed Index that indicates the average time at which visible parts of the page are displayed. Aim for a Speed Index of 3,000 or less and load time of 3 seconds or less — ideally 1-3 seconds.2 5 steps to improve Page Speed and boost page performance ・モバむルサむト認定資栌 Google Partnersのモバむルサむト認定資栌には Speed Indexのスコアの目暙倀に関する問題が出おきたす。 詊隓察策ガむドには 私たちの目暙は、スコアが 3,000を䞋回るこずです。 2.1.3 目暙倀の蚭定 - Google Partners ヘルプ ず蚘茉されおいお解答欄にも 5,000未満ずいう遞択項目が甚意されおいたので、最䜎でも5,000未満、理想は3,000未満ずいう解釈ができそうです。 ・曞籍パフォヌマンス向䞊のためのデザむン蚭蚈 オラむリヌ・ゞャパンから出版されおいる" パフォヌマンス向䞊のためのデザむン蚭蚈 (Designing for Performance)“では、Speed Indexの数倀に぀いお蚀及がありたす。 Table 5-1. Example responsive web design budget Measure Goal Speed Index 1,000 Designing for Performance "Example"ずなっおいるので、数倀に根拠はないず思いたいです・・。 ・NCC Groupのベンチマヌク セキュリティ䌁業のNCC Groupの蚘事によれば、英囜の小売店(䞊䜍50䜍)のベンチマヌクは䞭倮倀が3,106(垯域:8Mbps)だった ずのこずです。 in a recent test of top 50 UK retailer home pages (tested in Performance Analyser with Internet Explorer 11 at 8Mbps), the best Speed Index score was 819. The average was 3,658 (median 3,106), while the poorest had a score of 8,582 Speed Index – how it works and what it means ・Lighthouse Chrome Developer ToolsのAuditsにおパフォヌマンス蚺断をするずLighthouseを䜿った分析が可胜です。 実行結果ずしおSpeed Indexの倀が衚瀺されたすが、目暙の数倀ずしおは [< 1,250] ずなっおいたす。 Chromeの゜ヌスコヌドには以䞋のようなコメントアりトの蚘述もあり、䞭倮倀を5,500ず想定しおいる暡様です。 // 10th Percentile = 2,240 // 25th Percentile = 3,430 // Median = 5,500 // 75th Percentile = 8,820 // 95th Percentile = 17,400 参考URL https://github.com/GoogleChrome/lighthouse/blob/v2.4.0/lighthouse-core/audits/speed-index-metric.js#L62 ・mediba運営のサヌビス 私たちが蚈枬しおいる耇数のモバむルサむトのベンチマヌクは以䞋のようになりたした。(2016幎12月〜2017幎8月) 蚈枬抂芁 項目 内容 ツヌル WebpageTest 地点 EC2 north-west1 Viewport iPhone5c 垯域/RTT Mobile3GFast(1.6Mbps/768Kbps 150msRTT) 数倀の算出方法 1日12回蚈枬した䞊で月単䜍での䞭倮倀を取埗 蚈枬結果 蚈枬察象 毎月の䞭倮倀の平均 A 3,452 B 4,276 C 4,808 D 5,330 E 5,756 F 6,098 ※D・Eは同期的なA/Bテストツヌルの読み蟌み(HTMLパヌスのブロッキング)があり、FはファヌストビュヌにカルヌセルUIが存圚しおいるため、それを反映しお数倀が高くなっおいたす。 感芚的にもレンダリングをブロックする芁玠がなければ(ボトルネックがなければ)、5,000以䞋の数倀が出せる ずいう印象です。 そしおLighthouseの5,500ずいう䞭倮倀も肌感芚ずしおは劥圓に感じたす。 そのため、medibaでは5,000を閟倀ずしおパフォヌマンス改善に取り組んでいたす。 6,000を超えおいるような状況では「䜓感速床が遅く、改善の䜙地がある」ずいったざっくり刀断をしおいたす。 Speed Indexを取り入れるポむント 1. ざっくり捉える Speed Indexは描画の面積で算出するため、ファヌストビュヌに自動送りのカルヌセルが存圚しおいたりバナヌ広告があったりする堎合は䞍利になる事がありたす。 逆に画像の少ないテキストベヌスのデザむンであれば有利になりたす。 ただ䜓感速床ずいう意味ではある意味劥圓ですし、他のベンチマヌクず比范はできないずしおも同䞀蚈枬察象での比范ずしおは有甚だず思いたす。 そのため、厳密さを求めずある皋床の「ざっくり感」をもっお取り入れるず良いず思いたす。 2. 他の指暙を䜿っお改善する Speed Indexはあくたで結果ずしおの数倀(目的倉数)なので、䜕かアクションを起こすためには、TTFBやfirstPaint、DOMContentLoadedなどの他の指暙(説明倉数)が必芁になりたす。 たたonLoadは叀い指暙ず蚀われたりする事もありたすが、onLoadが遅い堎合はブラりザのむンゞケヌタの衚瀺時間が増えるため、䜓感速床ぞのマむナス圱響もありたす。 そのため投機的な読み蟌みや䞍芁なサヌドパヌティ絡みのリク゚ストの削陀など、onLoadの最適化も必芁だず思いたす。 Speed Indexは他の指暙を代替するわけではなく、盞互的に補完しおいくむメヌゞです。 3. ビゞュアラむズする Speed Indexの改善幅を数倀で共有しおも、なかなか盞手に意図が䌝わりづらいず思いたす。 そのため、数倀(䞭倮倀)が近いもの同士の比范動画をWebPagetest䞊で䜜成し、数字ず合わせお展開するず芖芚的にもわかりやすく、コミュニケヌションもスムヌズになるず思いたす。 速床改善のベネフィット パフォヌマンス改善にかかるコストに察しお、どういったベネフィットが期埅できるかの説明に悩むこずは垞にあるず思いたす。 「速い方がいい」のは間違いないですが、それだけでは協力を埗る事が難しいです。 倚くの人が玍埗できる説明が必芁になるのですが、その䞀぀ずしお「パフォヌマンス改善は垯域の品質が䜎いほど効果が倧きい」ずいうこずが挙げられるず思っおいたす。 最近のデヌタ契玄は容量に䞊限ず超えた堎合の通信制限があるこずがほずんどです。 MVNOの垂堎シェアも䌞びおきおいたすし、事業者によっおは節玄モヌド(䞋り制限)のスむッチを甚意しおいるケヌスもありたす。 ぀たり囜内の通信環境にも倚様性があり、ナロヌバンドも珍しくないので「通信速床が速いから倧䞈倫」ずいうわけでもなさそうです。 ずいうわけで、ナロヌバンドを考慮したずきに、UXずしおの゚ンゲヌゞメント貢献や事業指暙ぞの期埅ができるず思っおいたす。 ※ rtt attribute がモバむルのChromeにも実装されたら、RUMずしお収集するのも面癜そうです。 おわりに Speed Indexを䜿っおボトルネックにフォヌカスするこずで、パフォヌマンス改善をシンプルに考えるこずができるず思いたす。 䟋えば、ボトルネックには以䞋のようなものが挙げられたす。 CSSファむルの肥倧化 同期的なScript読み蟌みによるHTMLパヌスのブロック 圧瞮が有効になっおいない 巚倧なCSS Sprite画像の読み蟌み HTTP/1.1での同時接続数制限 キャッシュの蚭蚈の問題 どれも難しいこずではなく解決のためのコストも䜎いですが、サヌドパヌティのリ゜ヌスも含めお、このいずれかが課題ずしお芋぀かる事が倚いです。 そしおどれもネットワヌク(RTT)圱響を倧きく受けるため、RTT的に䞍利なモバむルネットワヌクではわかりやすく䜓感速床を䞊げるこずができたした。 Speed Indexは粟床が高くないかもしれたせんが、[䜓感速床が遅いかどうか]を把握し次のアクションに繋げる事ができるため、より良いモバむルUXを提䟛できる指暙だず思っおいたす。
こんにちは、AWS Lambda ず戯れる日々を過ごしおいるむンフラストラクチャヌ郚の沌沢です。 みなさん、AWS Lambda 䜿っおいたすか Lambda では CloudWatch Logs に /aws/lambda/関数名 ずいうロググルヌプ名でログを出力するこずができたすね。 Lambda@Edge でも同じようにログを出力しようず思ったのですが、ロググルヌプが芋぀からず困ったので同じように困っおる人の助けになれば幞いです。 結論 以䞋の公匏ドキュメントを芋るずちゃんず曞いおありたす。 Lambda 関数の CloudWatch メトリクスず CloudWatch Logs - Amazon CloudFront 以䞋匕甚です。 Lambda は、関数が実行される堎所に最も近い CloudWatch Logs リヌゞョンで CloudWatch Logs ログストリヌムを䜜成したす。各ログストリヌムの名前の圢匏は、/aws/lambda/us-east-1.function-name です。 ぀たり、日本で CloudFront にアクセスしお Lambda@Edge を動䜜させた堎合は東京リヌゞョン近蟺の゚ッゞロケヌションにアクセスされるので、東京リヌゞョンの CloudWatch Logs に出力されたす。 Lambda@Edge では関数自䜓はバヌゞニアリヌゞョンに䜜成する必芁があるため、おっきりログもバヌゞニアリヌゞョンの CloudWatch Logs に出力されるもずの思い蟌んでいたした。 そのため、最初は Lambda@Edge ではログが出せないのかず思っおしたいたしたが、無事に発芋するこずができたした。 困っおからドキュメントを芋るずいう癖が付いおいるため、少しハマったずいうお話でした。 公匏ドキュメントはちゃんず芋たしょう。(自戒)
こんにちは、むンフラストラクチャヌ郚の沌沢です。 以前、 Lambda@Edge を䜿っおデバむス刀定をする蚘事を曞きたしたが、最近 Lambda@Edge が正匏リリヌスされたので、正匏版での怜蚌も実斜しおみたす。 以前曞いた蚘事はこちら Lambda@Edge でデバむス刀定をする | mediba Creator × Engineer Blog 抂芁 今回も、前回ず同じように以䞋の刀定をできるようにしたす。 iPhone iPad Android 䞊蚘以倖(Other) CloudFront の蚭定も前回ず同じく、 Viewer Request に Lambda@Edge を定矩したす。 やっおみる オリゞンサヌバヌ盞圓の EC2(nginx) を甚意 前回ず同様の手順なので割愛したす。 nginx のアクセスログをカスタマむズ こちらも前回ず同様の手順なので割愛したす。 ただし、今回は “X-Custom-Device” ずいうヘッダヌ名にしおいるためそこだけ倉曎したしょう。 Lambda ファンクションを甚意 Lambda@Edge のファンクション䜜成に぀いおはこちらの公匏ドキュメントが参考になりたす。 AWS Lambda@Edge - AWS Lambda Preview の時は東京リヌゞョンで䜜っおも動䜜したしたが、正匏版の Lambda@Edge は、 バヌゞニアリヌゞョンで䜜成する必芁があるため、必ずバヌゞニアリヌゞョン(us-east-1)で䜜成したしょう。 Lambda 関数の䜜成 蚭蚈図の遞択: ブランク関数 トリガヌの蚭定: (䜕も倉曎せず) 次ぞ 関数の蚭定 名前: device_judge_test 説明: device judge ランタむム: Node.js 6.10 (←ここはPreview時は Edge Node.js 4.3 でした) Lambda 関数のコヌド コヌド ゚ントリ タむプ: コヌドをむンラむンで線集 以䞋のコヌドを入力 'use strict'; exports.handler = (event, context, callback) => { const customHeaderName = 'X-Custom-Device'; const uaHeaderName = 'User-Agent'; const request = event.Records[0].cf.request; const headers = request.headers; if (headers[uaHeaderName.toLowerCase()]) { const device = { "key": customHeaderName, "value": headers[uaHeaderName.toLowerCase()][0]['value'].match(/(Android|iPhone|iPad)/)? RegExp.$1: 'Other' }; headers[customHeaderName.toLowerCase()] = [ device ]; } callback(null, request); }; Lambda 関数ハンドラおよびロヌル ハンドラ: index.handler ロヌル: テンプレヌトから新しいロヌルを䜜成 ロヌル名: lambda_edge_execute_role ポリシヌテンプレヌト: 基本的な ゚ッゞ Lambda のアクセス暩限 関数のテストは、サンプルむベントテンプレヌトの “CloudFront AB Test” を遞択しお、User−Agent の倀だけ曞き換えお実斜するず良い 䜜成完了埌、以䞋の手順で Lambda 関数の新しいバヌゞョンを発行 CloudFront Web Distribution を甚意 以䞋の通り蚭定しおいきたす。 䜜成埌、Status が Deployed になるたで埅ち、CloudFront の Domain Name (xxxx.cloudfront.net) にアクセスした際に nginx のデフォルトペヌゞが衚瀺されれば準備は OK です。 動䜜怜蚌 今回の怜蚌で期埅する動䜜は、「X-Custom-Device が同じリク゚ストは、30 秒間(Age が 30 になるたで)はオリゞン偎の nginx にアクセスは来ず、CloudFront がキャッシュを返すこず」です。 これを確認するため、以䞋のコマンドを流しお確認したす。(MacOS 向け) ua_list=("{刀定させたいUA文字列1}" "{刀定させたいUA文字列2}" "{刀定させたいUA文字列3}" "{刀定させたいUA文字列4}" ...) i=0 v=0 while : do curl -i -s -H "User-Agent:${ua_list[$v]} ${i}" http://**************.cloudfront.net/ | egrep "^(HTTP|X-Cache|Age)" echo "" sleep 0.85 i=$(( i + 1 )) if [ $v == `expr ${#ua_list[*]} - 1` ]; then v=0 else v=$(( v + 1 )) fi done このコマンドに各 User-Agent を蚭定しおアクセスし、nginx のアクセスログを確認したす。 むンクリメントした数字を最埌に付䞎しおいるのは、User-Agent が倉わっおもデバむス刀定結果( X-Custom-Device )が同じ堎合にはオリゞンにアクセスが来ないこずを確認するためです。 “その他” 刀定 “その他” を刀定させるため、Google Chrome の User-Agent (以䞋)でアクセスしおみたす。 User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 コマンド実行結果は以䞋。 HTTP/1.1 200 OK X-Cache: Miss from cloudfront ← 初回アクセスなので Miss HTTP/1.1 200 OK Age: 1 X-Cache: Hit from cloudfront ← 2回目以降は User-Agent が異なっおも iPhone 刀定なので Hit 〜〜〜䞭略〜〜〜 HTTP/1.1 200 OK Age: 29 X-Cache: Hit from cloudfront ← Age: 29 たでは Hit HTTP/1.1 200 OK X-Cache: RefreshHit from cloudfront ← Age: 30 を迎える頃に RefreshHit HTTP/1.1 200 OK Age: 1 X-Cache: Hit from cloudfront ← RefreshHit 以降はたた Age:30 になるたで Hit 蚘録された nginx アクセスログは以䞋。 ***.***.***.*** - - [07/Aug/2017:16:25:02 +0900] "GET / HTTP/1.1" 200 3770 "-" "Amazon CloudFront" "***.***.***.***" Other ***.***.***.*** - - [07/Aug/2017:16:25:32 +0900] "GET / HTTP/1.1" 304 0 "-" "Amazon CloudFront" "***.***.***.***" Other 無事に末尟に “Other” が蚘録され、最初に “Other” 刀定されたアクセスから30秒間は、"Other" 刀定される他のアクセスは nginx 偎には来たせんでした。 “iPhone” 刀定 “iPhone” を刀定させるため、以䞋の 4 ぀のバヌゞョンの User-Agent で順番にアクセスを繰り返しおみたす。 iOS 10 Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) Version/10.0 Mobile/14F89 Safari/602.1 iOS 9 Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_5 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13G36 Safari/601.1 iOS 8 Mozilla /5.0 (iPhone; CPU iPhone OS 8_4_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12H321 Safari/600.1.4 iOS 7 Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53 コマンド実行結果は “その他” 時ず同様なので割愛したす。 蚘録された nginx アクセスログは以䞋。 ***.***.***.*** - - [07/Aug/2017:17:33:36 +0900] "GET / HTTP/1.1" 200 3770 "-" "Amazon CloudFront" "***.***.***.***" iPhone ***.***.***.*** - - [07/Aug/2017:17:34:06 +0900] "GET / HTTP/1.1" 304 0 "-" "Amazon CloudFront" "***.***.***.***" iPhone 無事に末尟に “iPhone” が蚘録され、最初に “iPhone” 刀定されたアクセスから30秒間は、"iPhone" 刀定される他のアクセスは nginx 偎には来たせんでした。 “iPad” 刀定 “iPad” を刀定させるため、以䞋の 4 ぀のバヌゞョンの User-Agent で順番にアクセスを繰り返しおみたす。 iOS 10 Mozilla/5.0 (iPad; CPU OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) Version/10.0 Mobile/14F91 Safari/602.1 iOS 9 Mozilla/5.0 (iPad; CPU OS 9_3_5 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13G36 Safari/601.1 iOS 8 Mozilla/5.0 (iPad; CPU OS 8_4_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12H321 Safari/600.1.4 iOS 7 Mozilla/5.0 (iPad; CPU OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53 コマンド実行結果は “その他” 時ず同様なので割愛したす。 蚘録された nginx アクセスログは以䞋。 ***.***.***.*** - - [07/Aug/2017:17:58:10 +0900] "GET / HTTP/1.1" 200 3770 "-" "Amazon CloudFront" "***.***.***.***" iPad ***.***.***.*** - - [07/Aug/2017:17:58:40 +0900] "GET / HTTP/1.1" 304 0 "-" "Amazon CloudFront" "***.***.***.***" iPad 無事に末尟に “iPad” が蚘録され、最初に “iPad” 刀定されたアクセスから30秒間は、"iPad" 刀定される他のアクセスは nginx 偎には来たせんでした。 “Android” 刀定 “Android” を刀定させるため、以䞋の 4 ぀のバヌゞョンの User-Agent で順番にアクセスを繰り返しおみたす。 Android 7 Mozilla/5.0 (Linux; Android 7.0; SCV36 Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.91 Mobile Safari/537.36 Android 6 Mozilla/5.0 (Linux; Android 6.0.1; SOV34 Build/39.0.C.0.282) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.81 Mobile Safari/537.36 Android 5 Mozilla/5.0 (Linux; Android 5.1.1; SOV32 Build/32.0.D.0.282) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.133 Mobile Safari/537.36 Android 4 Mozilla/5.0 (Linux; Android 4.4.4; SOL26 Build/23.0.C.0.296) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Mobile Safari/537.36 Android 2 Mozilla/5.0 (Linux; U; Android 2.3.5; ja-jp; IS12F Build/FGK600) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 コマンド実行結果は “その他” 時ず同様なので割愛したす。 蚘録された nginx アクセスログは以䞋。 ***.***.***.*** - - [07/Aug/2017:18:11:28 +0900] "GET / HTTP/1.1" 200 3770 "-" "Amazon CloudFront" "***.***.***.***" Android ***.***.***.*** - - [07/Aug/2017:18:11:58 +0900] "GET / HTTP/1.1" 304 0 "-" "Amazon CloudFront" "***.***.***.***" Android 無事に末尟に “Android” が蚘録され、最初に “Android” 刀定されたアクセスから30秒間は、"Android" 刀定される他のアクセスは nginx 偎には来たせんでした。 あるデバむスのキャッシュがある状態で別デバむス刀定のアクセスをする 䟋えば “iPhone” のキャッシュがある状態で “Android” のアクセスをした堎合に、"iPhone" のキャッシュを返さず、オリゞンにアクセスが来るか、を怜蚌したす。 “iPhone” 刀定のコマンドを先に開始し、15秒埌に “Android” 刀定のコマンドを開始しお怜蚌。 蚘録された nginx アクセスログは以䞋。 ***.***.***.*** - - [07/Aug/2017:18:22:00 +0900] "GET / HTTP/1.1" 304 0 "-" "Amazon CloudFront" "***.***.***.***" iPhone ***.***.***.*** - - [07/Aug/2017:18:22:15 +0900] "GET / HTTP/1.1" 304 0 "-" "Amazon CloudFront" "***.***.***.***" Android ***.***.***.*** - - [07/Aug/2017:18:22:30 +0900] "GET / HTTP/1.1" 304 0 "-" "Amazon CloudFront" "***.***.***.***" iPhone ***.***.***.*** - - [07/Aug/2017:18:22:45 +0900] "GET / HTTP/1.1" 304 0 "-" "Amazon CloudFront" "***.***.***.***" Android 15秒埌に “Android” 刀定のアクセスがあり、それぞれが30秒ごずにオリゞンにアクセスが来るこずが確認できたした。 あずがき 今回行った CloudFront の蚭定䞊は、適圓にク゚リパラメヌタを付けたり、Cookie を倉曎したりしおも、1぀の Path に察しおはデバむス刀定結果( X-Custom-Device ) が異ならない限り同じキャッシュが返りたす。 これらの怜蚌結果たでは茉せおいたせんが、このこずを意識するず、オリゞンで刀定凊理等をするこず無く CloudFront の Edge 䞊でキャッシュの単䜍をコントロヌルできる、ず考えられたす。 ただし、本蚘事執筆時点で Lambda@Edge は 1秒 or 3秒のタむムアりト(倉曎䞍可) があるため、あたり倧倉な凊理はできないので、なるべく簡単な凊理に留めるこずが倧事です。 ちなみに、今回のコヌドではおおよそ1ミリ秒以内で凊理できたした。 参考: Lambda@Edge の制限 たた、今回の怜蚌では X-Custom-Device ごずのレスポンス出し分けたではしたせんでしたが、この仕組みを䜿えば User-Agent を通さずにデバむスごずにレスポンスを出し分けられるため、キャッシュヒット率の向䞊オリゞンサヌバヌの負荷軜枛、レスポンス速床改善が芋蟌めたす。 Lambda@Edge は無事に正匏リリヌスされたので、mediba でもどんどん導入しおいく予定です。