エムスリーテックブログ

エムスリー(m3)のエンジニア・開発メンバーによる技術ブログです

Auto Layout の警告を Stack View で全部修正した話

エンジニアリンググループの田根です。主にiOSエンジニアをやっていますが、サーバサイド(Java, Scala, Rubyなど)もやったり、Tableauでレポートを見える化したりと何でもやっています。

弊社では医療従事者向けにいくつかのiOSアプリをリリースしています。
今回はこの中のm3.comアプリの話になります。

m3.comアプリとは

f:id:y-tane-m3:20181129140210p:plain
m3.comアプリ
弊社が運営している日本最大級の医療従事者専門サイトm3.comのアプリ版になります。
1stリリースは2014年ですので Objective-C で作られていましたが、現在は9割近くが Swift に書き換えられています。

経緯

事の発端は iOS 12 のリリース直後、アプリがフリーズするという問い合わせが急増したことです。
とはいえ社内の検証端末でいくらテストしてもフリーズするようなことが発生しませんでした。
そもそもそんなに簡単に再現するようであれば iOS 12 beta の頃から動作確認していたのですぐに発覚するはずです。
諦めかけていたところ、たまたま別件で開発中にエンジニアがフリーズする現象に遭遇し原因が判明することになります。

フリーズの原因

フリーズの原因は Auto Layout の補完によるものでした。
なぜ Auto Layout の補完によってフリーズするのかというと、Auto Layout には制約に不足や不整合な制約があると自動で制約を補完してくれる機能があります。
このため適当にレイアウトしても、補完により崩れることなくiOSは表示してくれます。
この機能により、 ある Cell の中の View に不整合が起き、補完により自動で制約が追加されました。
この追加された制約により今度は隣り合っている別の View の制約に不整合が起き、更に補完しようと制約を追加します。
これにより今度は最初に補完された View の制約に不整合が起き補完、そしてまた隣の View の制約に不整合と補完とループしてフリーズしてしまったようです。

原因の特定が遅れた理由

弊社ではパーソナライズして記事を配信しているため、一人として同じ画面になることはありません。
ある特定の記事がある位置に表示されたときに別の記事の制約が影響を受け今回のような事象になってしまったためなかなか再現しなかったのでした。

再発防止策

2014年にリリースされたアプリなので、その頃は Auto Layout の機能も貧弱で Stack View ももちろんありませんでした。 このため実行時に Auto Layout の警告が出ていても動いているので問題ないと放置してきました。
しかし iOS12 で上記の様な問題が発生したため、Auto Layout の警告が出ているところを全部修正することにしました。

Auto Layout の警告箇所の特定

Auto Layout の警告があると以下のようなログが出力されるのですが、複雑な画面だと View が無数にありこれがどの View で発生しているのか特定するのが非常に難しいです。

[LayoutConstraints] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
        (1) look at each constraint and try to figure out which you don't expect; 
        (2) find the code that added the unwanted constraint or constraints and fix it. 
(
    "<NSLayoutConstraint:0x2825840f0 UILayoutGuide:0x283f9cb60'UIViewSafeAreaLayoutGuide'.trailing == UILabel:0x119e1dad0'Label'.trailing + 200   (active)>",
    "<NSLayoutConstraint:0x2825842d0 UILabel:0x119e1dad0'Label'.leading == UILayoutGuide:0x283f9cb60'UIViewSafeAreaLayoutGuide'.leading + 200   (active)>",
    "<NSLayoutConstraint:0x282584550 'UIView-Encapsulated-Layout-Width' UIView:0x119e1d8f0.width == 375   (active)>",
    "<NSLayoutConstraint:0x282584190 'UIViewSafeAreaLayoutGuide-left' H:|-(0)-[UILayoutGuide:0x283f9cb60'UIViewSafeAreaLayoutGuide'](LTR)   (active, names: '|':UIView:0x119e1d8f0 )>",
    "<NSLayoutConstraint:0x282584230 'UIViewSafeAreaLayoutGuide-right' H:[UILayoutGuide:0x283f9cb60'UIViewSafeAreaLayoutGuide']-(0)-|(LTR)   (active, names: '|':UIView:0x119e1d8f0 )>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x2825840f0 UILayoutGuide:0x283f9cb60'UIViewSafeAreaLayoutGuide'.trailing == UILabel:0x119e1dad0'Label'.trailing + 200   (active)>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.

その場合以下の記事の SymbolicBreakpoint によるデバッグが非常に役立ちました。 qiita.com

Auto Layout の警告の解読

Viewの特定が出来たら警告ログの解読なのですが、非常に読むのがつらいです。
この場合は WTF Auto Layout? というサイトにログを貼り付けると視覚化して表示してくれるのでこれを見ながら修正しました。
上記のログを WTF Auto Layout? に貼り付けたリンクがこちらです。
www.wtfautolayout.com

† This constraint was added by a table or collection view to enforce its cell size. と書かれている部分が制約に問題が発生したために自動で追加された制約になります。
この部分を解消するように修正します。

Stack View化

リリース当初は UIStackView なんてものはなかったので古くからある View は Stack View を使っていませんでした。
iOS 9以降であれば UIStackView が使えるので、どんどん Stack View化していきます。
これにより View を非表示にした時の制約を書かなくて済むようになり、かなりシンプルになります。(これだけで大部分の警告が解消できました)

最後に

動いているからといって警告を放置するのよくないということを学びました。
皆様もログに警告が出力されていたら出来るだけ早く対応するように心がけましょう。

We are hiring

エムスリーではiOSエンジニアも募集中です。
興味を持たれた方はぜひ以下のリンクからご応募ください:

jobs.m3.com

M3 USA 出張記 #7: JS サーバーサイドの足回りの試行錯誤録

エンジニアリンググループの矢崎(id:Saiya)です。年末まで M3 USA に出張しております。

昨日は NY の地元の NBA チーム New York Knicks と Portland Trail Blazers の試合を仕事後に観戦してきました。

f:id:Saiya:20181122030401j:plain

抜きつ抜かれつつのかなりの接戦が最後まで続き、特に終盤は地元民の盛り上がりも半端ではなく、非常に印象に残る良い体験でした。観客の参加度合いが高く、声掛けやリアクション等の一体感も相当なものでした。

また技術面では、あちこちに入っている液晶パネル、開幕演出で使われるプロジェクション、気球ドローンからの撮影 *1、T シャツを打ち出すメガ空気砲 *2など、さまざまなテクノロジーが使われている点が印象的でした。個々の技術そのものは普通の技術なのですが、技術が浮くことなく、エンターテインメントとしての一貫した流れのなかで自然に使われている点に本場のレベルの高さを感じました。

ともあれ、そのように余暇も楽しみつつも Headless CMS Contentful の導入 にあたり編集部向けの運用ツールを試作・整備しているのですが、今後のための知見獲得も兼ねて、プロトタイピングの合間に以下の技術スタックを試しています:

SPA 側とサーバーサイドのロジックに共通点がある点 *4、サーバーサイドレンダリングも可能性として考慮している点、それにスキルセットや利用ライブラリなどを共通化したい点があるため、サーバーサイドを node.js で作りつつあります。

そういった JS のサーバーサイド整備する過程でケアしたほうが良い点、悩ましい点などがいくつか見えてきたため書いてみました。同じようなことで悩んでいる方の参考になれば幸いです。ただし試行錯誤中なので、クリアな解が見えているわけではないです。マサカリを投げる場合はやさしく投げてください。

*1:結構観客席を写しており、観客参加型のネタがいろいろあります

*2:待ち時間などに T シャツを投げて配るのは伝統行事だそう

*3:k8s も手だったのですが、JavaScript 側とインフラの両面からのチャレンジは片手間には厳しかったのと、k8s にするまでもない単一種類のコンテナを立てるだけの構成であったため取り敢えず ECS にしました

*4:どちらも Headless CMS に強く依存しているため

続きを読む

エンジニア内定者がビジネスサイドでインターンしてみて

こんにちは、2019年新卒ソフトウェアエンジニア内定者の金山(@__tepppei__)です。以前、「学生から見たエムスリー」という記事で、就活インターンの様子を書きました。今回は、内定後に再度内定者インターンをしてみて見えてきたことを書きます。

時系列を整理すると、

  • 2017年 4月 大学院進学
  • 2017年 7月-8月 AIチームにてエンジニアインターン(←前回記事
  • 2017年 9月 内々定
  • 2018年 6月-9月 AIラボにてビジネスインターン(←今回記事)
  • 2019年 4月 入社予定

という感じです。

今回のインターンでは自分の希望を汲んでいただき、ビジネス色が強い業務を担当しました。インターン期間の前半1ヶ月は、マーケットリサーチやエムスリーが運営するメディアの施策検討など幅広く様々な業務に携わりました。後半3ヶ月は、主に医療画像診断AIプロダクトのマネジメントを担当させていただきました。この記事では、後者の内容を振り返りたいと思います。

概要

今回私が担当したプロジェクトは、「シンガポールのIT企業と協力して画像診断AIを開発し、臨床試験を経て、日本市場に売り出す」というものでした。ワクワクしますね。開発自体はエムスリー社内では行わず、いわゆるオフショア開発に近い形態でした。私は将来的にはプロダクトのライフサイクル全てに関わる仕事がしたいと思っているので、プロダクトの全貌が俯瞰できる今回の業務は大変良い経験となりました。

私の業務は、はじめのうちは本プロジェクトにメインで携わっているビジネスサイドの中島さん・AIラボ所長の高木さんの指示に従ってお手伝いする形で始まり、徐々に裁量の範囲を広げていただきました。具体的な業務内容としては、プロダクトの仕様書・ページ遷移図・ワイヤーフレームの作成/ブラックボックステストのためのテストケースの作成/開発者への仕様の伝達と確認/改善案の提案と検討、などです。

f:id:tepppei:20181119201816j:plain

難しかった点

以下、実際に業務を通じて難しいと感じた点をまとめます。(注意:まだプロダクトがリリースされたわけではないので抽象的な話が多くなっています。実際に市場に出る頃にはもっと具体的な話が書けると思います。)

コミュニケーション

まず第一の困難として、当然ですが日本語が通じないという点が挙げられます。必然的に英語でコミュニケーションを取ることになるわけですが、自分も相手もネイティブではないため、意思疎通が難しかったです。特に自分にとってはインド訛りの早口な英語を聞き取るのが非常に困難で、文面でのやりとりは自分で行いましたが、口頭でのオンライン会議はほぼ社員の方に任せきりになってしまいました。

また、言語の問題はある意味表面的な問題で、時間をかければなんとかなりそうな感じがするのですが、文化的違いも一筋縄ではいかないと感じました。例えば、先方がメールで「要求された箇所の実装が終わったから確認してくれ」と送ってきたので確認すると、こちらの要求の半分程度しか終わっていないことも多々ありました。これは先方が怠惰という話ではなく、「終わった」と見なす基準が異なるのだと考えられます。逆に、ただ単にこちらの要求をこなすだけでなく、真意を汲み取ってより良いプロダクトになるように提案してくださることもありました。これらは文化の違いに起因するのか、それとも彼ら特有の気質によるものなのかは一概には判断できませんが、いずれにせよ相手の性質をよく観察して最適な方法でコミュニケーションを取ることが重要だと感じました。

技術

今回は自分で開発をするわけではなかったのですが、それでも技術に対する相応の理解が必要だと感じました。特に今回のような医療AIプロダクトは会社としても初めての取り組みという側面が強く手探り状態で試行錯誤しながら進める必要があったため、一旦仮決めした仕様をあとから改変・追加する必要が出てきます。その際、例えば仕様の改善案がいくつかあった場合、開発コストに対する効果がどの程度かを常に考える必要がありました。

開発系の仕事との並行作業

実は今回のプロジェクトと並行して、深層学習を用いた別のプロジェクトも並行して任されていました。こちらはほぼプログラミングのタスクで、自分が普段大学でやっていることとかなり近かったのですぐに終えられると思っていたのですが、その考えが甘かったです。作業が全然進まない…!プロダクトマネジメントの業務は多くの人とコミュニケーションを取る必要があるため断続的に作業が進行していくことになりますが、一方でコーディングは一気に集中してやりたいものです。この両者を自分の中で両立するのはかなり難しいと感じました。

f:id:tepppei:20181120134642j:plain
インターン終了時の送別会にて、AIラボの方々からプレゼントをいただきました。

得たもの

以下、今回のインターンを経て得たものをまとめます。

何が得意かが分かった

今回のプロジェクトは、多くの人たちと関わりながら進めていく性質が強い業務でした。前回のインターンは「論文を読んで追実装し、性能評価を行う」という内容だったため、コミュニケーションという観点では対照的な内容でした。多くの人と関わりながら進めていくプロジェクトの場合、余計なオーバーヘッドが生じやすく自分のペースで進められないため技術者からは敬遠されることも多いと聞きますが、自分はそういう点も含めて、人と関わるプロジェクトが好きだということが改めて分かりました。また、プロダクトを良くしていくために必要なことであれば、どんな業務でも(は言いすぎかもしれませんが)苦にならないということも分かりました。

得意を活かすために必要なことも分かった

今回の取り組んだ内容はとても楽しかったのですが、入社してすぐにこれだけをずっとやり続けたいかというとそうは思いませんでした。もっともっと自分が見ている世界を広げていきたいです。例えば、単に「プロダクトマネージャ」と言うと自分自身がプロダクトを作れる必要は必ずしも無いわけですが、私は今回の経験をふまえて、自分自身の手でプロダクションコードを書けるようになりたいと強く思うようになりました。また、コミュニケーションに関しても、もう少しで業務に活かせるレベルの英語が身につきそうな感じがしたので、こちらも継続して練習しようと思いました。

最後に

今回のインターンを経て、自分が今後やりたいこと/そのためにやるべきこと が改めて分かりました。 ビジネスもエンジニアリングも理解している、野球で言うところの大谷翔平のような二刀流になるか、それともどちらも中途半端にしかできない草野球のおっちゃんになるか、今後の行方にご期待ください。

インターン募集

私はこの2年でAIチーム/AIラボともに見てきましたが、どちらもスピード感を持ちつつ世の中にインパクトを与えられるようなとても面白い時期にあるように思います。エムスリーでのインターンに興味を持たれた方は、下記リンクからご応募ください!

jobs.m3.com

また、エムスリーのエンジニアインターンについてより詳しく知りたい方は下記のブログも御覧ください。

www.m3tech.blog

M3 USA 出張記 #6: Arrayの差分を検出するJavaScriptライブラリ array-diff-itemsを開発・公開しました

エンジニアリンググループの冨岡(@jooohn1234)です。年末までM3USAの開発をサポートするため、USに滞在しています。

f:id:jooohn:20181119052101j:plain
とにかくハンバーガーがうまい

現在、M3USAが運営するMDLinxにて利用するCMSサービス(Contentful)をサポートする内部向け機能を作成しています。その一環で、Contentfulが提供するRichTextのバージョン間の差分を検出・表示するというエンジニアっぽいことをやったのでそれを紹介します。

続きを読む

どこでもKotlin #6 〜Kotlin 1.3の新機能に触れる〜 を開催しました

こんにちは、エムスリー エンジニアリングGの大和です。

11/7 (水) にCrowdWorksさん *1 のオフィスをお借りして、「どこでもKotlin #6 〜Kotlin 1.3の新機能に触れる〜」を開催しました。

m3-engineer.connpass.com

今回は、私も登壇者として参加させていただきました。 当日はたくさんの方にお集まりいただきまして、ありがとうございました。

発表内容

今回はタイトルにもありますが、10月末にリリースされたKotlin 1.3 にまつわるテーマでの発表となりました。 当日の発表順に紹介します。

藤原 聖(LINE株式会社所属 / エムスリー株式会社技術顧問)

トップバッターとして、Kotlin Conf 2018 と Kotlin 1.3 リリースの2つのトピックについてそれぞれお話しいただきました。 特に、Kotlinの進化のためにFeedback loopが大事であるという思想が、ExperimentalとしてKotlin 1.3リリースに反映されているという内容が印象的でした。

続きを読む

推薦システムの改修と機械学習システムの開発プロセス改善、実施中!

こんにちは、エムスリーエンジニアリングG・AIチームの大瀧です。

この記事では、推薦システムの改修/プロセスの改善に至ったエピソードをお話させて頂こうと思います。

現在機械学習を活用したシステムを開発・運用している方や、 これから開発・運用を行おうとする方と知見を共有できれば幸いです。

大瀧は今年2月にエムスリーにジョインし、 Archimedesというシステムで初めてプロダクションレベルのコードを書くことになりました。

振り返ってみるとWEB × 機械学習な領域なら当たり前に発生し得ることばかりなのですが、 SIerで研究開発をしていた私の目線からは学び・知見に満ちた経験でした。

f:id:g329:20181108220006j:plain

Archimedesについて

この記事の主役は、Archimedesという名前で呼ばれているシステムです。 M3 Tech Blogを見てくださっている方の中には、覚えてくださっている方がいるかもしれません。 2018年1月に紹介させて頂いた、ニュース記事推薦システムです。

www.m3tech.blog

推薦アルゴリズムの性能が認められ、エムスリーにおけるいくつかのメディアで利用されています。 そんなArchimedesに、パフォーマンス上・モデル開発効率上の問題が発見されました。

1. パフォーマンス上の問題

Archimedesはリリース以降、多くのメディアに関わらせて頂いております。ニュース・臨床記事・掲示板、それらのメルマガにサイト内での記事推薦...などなど、多くの場所で急速に活用されるようになりました。 活用されていく中で、理想と現実の間に乖離が生まれてきました。

理想のArchimedes

  • 活用場所が増えても、学習・推論時のパフォーマンスに影響がない。AWSを利用しているので、インフラの機能で負荷の変化に対していい感じに動作してくれる。

現実のArchimedes

  • 推論時に要求されるパフォーマンスを満たせなくなった。

Archimedesは社内のメール配信システムから呼び出され、ユーザーごとに事前に計算しておいたオススメ記事を出力する形で動作しています。

メルマガ配信システムはユーザーにとって都合の良い時間(仕事が終わる時間など、様々)を逃さぬよう、並列にArchimedesを呼び出します。

そのためArchimedesには、短時間に高い負荷がかかることになります。

Archimedesは事前にjmeterを用いた負荷試験等を実施しておりましたが、

コミュニケーション上のミスからある時間帯において負荷試験時に想定していた以上の負荷がかかるようになってしまいました。

負荷増に伴いArchimedesのレスポンス時間が伸び(メルマガが届くのが遅くなり)、コネクションプールを使い尽くし...様々な事件が起きました。

対策

実際には実施していないものも含め、メリット・デメリットの2側面からAIチームが検討した対策を見ていきましょう。 皆様のチームなら、どの対策を実施するでしょうか?

メルマガ配信の並列度を下げる

Archimedesへのアクセスの並列度が想定以上に大きい...せや、小さくすればええんや!

  • メリット:実施コストがとても低いです。初期対応として実施されたのも、この対策。
  • デメリット:送信対象数を変化させずに並列度を下げるため、メルマガ送信にかかる時間は伸びてしまう。メルマガの送信は早すぎても遅すぎても良いことがない。特に遅い場合は迷惑に感じることも多いため、この対策を長期に渡って継続することはビジネスに悪い影響を与えることが予想される。
メルマガ配信のタイミングをうまいことズラす

1つの配信だったメルマガを複数の時間帯に分割したり、同時に送信される複数のメルマガ同士で送信時間を調整したりすることで並列数を下げよう!  

  • メリット:実装が発生せず、設定の変更で実施することが可能。
  • デメリット:新しいメルマガが追加されるたび、再スケジューリングする必要が生まれる。サービスがスケールしなくなるため、未実施。
APIサーバーの再実装

Archimedesには、事前に計算しておいた推薦記事リストをDBから引っ張りレスポンスを作る/返す箇所があります。 パフォーマンス低下の一因であるにも関わらず、チューニングできる人が現在のAIチームにいない「危ない」部分でした。 パフォーマンスの問題が起きるまでは触る必要のない箇所でしたが、ビジネスに関わる問題が発生したなら話は別です。

  • メリット:活用場所がさらに増えても、推論時のパフォーマンスには影響が出ない。メンテナンスすることが可能な人がチーム内に複数人いる状態を作ることができる。
  • デメリット:新規実装が必要。

エムスリーのAIチームでは最終的に、この選択肢をとることとしました。

学んだこと

"話には聞いたことがあるけど自分の周りで起きるとは思っていなかったこと" である、

"想定以上の負荷がかかりシステム障害が発生"

を経験した私(スケールアウトはしているのに!)。

類似事例を発生させないためにも、振り返りを実施しました。

関係者との(本当に小さな)合意形成のミスから急速に負荷が高まり、障害に至りました。

「タスクの終了/開始の合意の形成に失敗した」と捉えると、私はあるタイミングではプロジェクト管理の基本の「キ」で躓いていたように思います。

(少し遠くから見た)タスクの状態・プロジェクトの状態を確認するタイミングが開発プロセスには必要であると私は考え、

現在はJIRAのチケットに合意状態を書く、プロジェクト開始前にも合意先を明確にするなど対策を実施しています。

きっとこの対策も、近い将来私に新たな学びを与えてくれるハズです。

2. モデル開発効率上の問題

現在活躍中のArchimedesですが、改善の余地はまだまだ存在します。 日々改善にチャレンジしているのですが...理想と現実の間に乖離があることが見えてきました。

理想のArchimedes モデル開発スタイル

モデルが追加された場所、パラメータが変更された部分、データが追加された場所だけ再実行

現実のArchimedes モデル開発スタイル

一部データ、一部条件でのみキャッシュが有効

Archimedesについて性能改善のアイデアが湧いた際はオフラインテストを実施することになっており、 その中でより良い結果を出すため/より正確に検証するために様々なパラメータの組み合わせを試します。

モデルのハイパーパラメータやテストの設定を変更するたびにデータの読み込みや全モデルの学習が発生する状態になっており、 キャッシュの弱さがモデル開発のボトルネックになっていました。

対策

Archimedesのコードに修正を加えて、必要な部分にキャッシュ機能を加える

 Archimedes専用に、必要な機能をきめ細やかに作成する方針がこちらです。

  • メリット:目的を達成するための工数は(比較的)小さい。
  • デメリット:他のシステム・プロジェクトで同様の問題が発生する。
機械学習向けのフレームワークを作成する

 キャッシュ機能等、共通で必要になる機能を提供するモジュールを作成する対処方法ですね。

  • メリット:複数のプロジェクトで恩恵を受けることができる。
  • デメリット:目的を達成するために必要な工数 +αが必要。

この問題に関しては、チームの状況によって正解が異なると思います。 エムスリーのAI・機械学習チームは複数のプロジェクトを進める/システム・モデルを開発するチームであるため、 機械学習システム全般での利用を考えたモジュールを作成することにしました。

現在もluigiをベースとしたパイプラインフレームワーク/module群を開発しております。 Archimedes以降に開発されたシステムには既に採用され、モデル開発の効率は格段に向上しました(Archimedesは移行中)。

↓チームリーダーによる解説記事↓

www.m3tech.blog

学んだこと

このケースにおける本当の失敗は、私は改善に至るまで時間がかかった点/改善せずにモデル開発を進めていた時期があった点であると考えています。

2月にジョインした頃、私はエムスリーの開発/ビジネススピードはまさに目が回るようだと感じていました。

スピードが不足しているなら、高速化するための策を練るべきだと当然考えることでしょう。

振り返り、記事を書いている今は当たり前に発見できるこの対策が、しばらくの間私には見えていなかったのです。

現在は広い視野でタスクの洗い出し/優先順位決定が行えるよう、少し異なるプロジェクトを担当しているメンバーと共に振り返りを実施しています。

(こちらの施策の効果は現在確認中です...!)

最後に

Archimedesに色々な問題が発生し、改修/プロセス改善を実施することになったエピソードを紹介致しました。 みなさまのチームなら、開発初期にどのような検討/プロセスの策定を行うでしょうか?   機械学習システムの開発プロセスはまだまだ未開拓な領域であると思いますが、 それ故切り拓く面白さがあると思います。   機械学習システム開発についての苦い思い出を共有することで、 より良い機械学習システム開発プロセス誕生の一助になれれば幸いです。

merpayさんと機械学習の活用状況について共有させて頂いたイベントのレポート記事も合わせてどうぞ

www.m3tech.blog

We are hiring

 エムスリーでは、共に医療 × テクノロジーの未来を切り拓いてくれる仲間を募集中です!

 jobs.m3.com

M3 USA 出張記 #5: M3 USAでデータ基盤環境整備とKPIモニタリングツールの導入を実施しました

エムスリー エンジニアリングG AI・機械学習チームの笹川です。 10/31から 出張 でM3 USAのNYオフィスに来ています。 NYオフィスはNYのタイムズスクエアのすぐそばにあり、アーティストのライブなどが行われる会場としても有名なマディソンスクエアガーデンも徒歩5分ほどの距離です。 この時期はNBA観戦が捗りますね!(最高の職場です!)

このところは、休日にルームメイトの冨岡とNew Yorkらしいところに行ってニューヨーカー感を高めたり、平日にはオフィスの部屋を追われて、タイムズスクエアでコーディングをするなどしています (フィクションかもしれません)。

f:id:hsasakawa:20181113004247p:plain
タイムズスクエアで作業する我々 (?)

今回は、M3 USAのプロダクト向けにデータ分析環境の整備を兼ねて、KPIモニタリングのためのダッシュボードツールを導入したので、そこで利用したデータ連携ジョブの実装、ダッシュボードツールなどの技術スタックや運用部分での工夫について説明します。

続きを読む