ann-toque’s diary

@YASU11552288 の思うことをつらつらと

【BigQuery Advent Calendar 2020】二標本t検定の実装

この記事は BigQuery Advent Calendar 2020 - Qiita 17日目の記事です。

こんにちは。@YASU11552288 です。今回はBigQueryでt検定を実装したいと思います。pythonやRでライブラリは提供されているので、わざわざなんでと思う方もいらっしゃると思います。

ただBigQueryの便利なWEBエディタとコードエディタを行ったり来たりするのはめんどくさく、BigQuery上で簡単に効果検証をできるようにしたいと考えました。

※t検定の細かい話は他サイトにまとまっているのでここでは割愛させていただきます。参考のリンクは以下の通りです。

大まかな流れ

  1. テスト用のデータを用意
  2. 統計量を計算(自由度、平均、母集団標準偏差、不偏分散、プールされた不偏分散)
  3. 統計量からt値を計算し、該当する自由度を結合キーにしてt分布表と結合
  4. P < 0.05のt値と比較して、帰無仮説を棄却するかしないかを判定

t分布表テーブルの用意

工程の3番のに必要なテーブルは以下のようなものです。今回はp値が0.05を基準にするため、自由度とそれに対応したt値のみを保持しています。

df p005
1 12.706
2 4.303
3 3.182
14 2.145

コード

WITH
/* 1. テスト用のデータを用意 */
  sample_data_a AS(
  SELECT
    *
  FROM
    UNNEST([49,40,52,37,55,38,45]) AS score ),
  sample_data_b AS(
  SELECT
    *
  FROM
    UNNEST([60,52,68,55,65,47,45,62,53]) AS score ),

/* 2. 統計量を計算(自由度、平均、母集団標準偏差、不偏分散、プールされた不偏分散) */
  stat AS (
  SELECT
    DISTINCT size_a,
    size_b,
    avg_a,
    avg_b,
    std_a,
    std_b,
    var_a,
    var_b,
    size_a + size_b -2 AS df_ab,
    SQRT(((size_a -1)*var_a + (size_b -1)*var_b) / (size_a + size_b - 2)) AS var_ab
  FROM
    sample_data_a
  CROSS JOIN (
    SELECT
      DISTINCT STDDEV_POP(score) OVER() AS std_a,
      VAR_POP(score) OVER() AS var_a
    FROM
      sample_data_a)
  CROSS JOIN (
    SELECT
      COUNT(score) AS size_a,
      AVG(score) AS avg_a
    FROM
      sample_data_a)
  CROSS JOIN (
    SELECT
      DISTINCT STDDEV_POP(score) OVER() AS std_b,
      VAR_POP(score) OVER() AS var_b
    FROM
      sample_data_b)
  CROSS JOIN (
    SELECT
      COUNT(score) AS size_b,
      AVG(score) AS avg_b
    FROM
      sample_data_b) )

/* 3. 統計量からt値を計算し、該当する自由度を結合キーにしてt分布表と結合 */
SELECT
  (avg_a -avg_b) / (var_ab * SQRT(1/size_a + 1/size_b)) AS t,
  df_ab,
  t_map.p005,
  CASE
    WHEN ABS((avg_a -avg_b) / (var_ab * SQRT(1/size_a + 1/size_b))) > t_map.p05 THEN 'p<0.05で帰無仮説を棄却'
  ELSE
  'p<0.05で帰無仮説を棄却しない'
END
  AS result
FROM
  stat
JOIN
  `play-ground-f0737.t_test.t_map` AS t_map -- 4. P < 0.05のt値と比較して、帰無仮説を棄却するかしないかを判定

ON
  stat.df_ab = t_map.df

結果

t(t値) df_ab(自由度) p005(自由度に該当するp=0.05のt値) 帰無仮説を棄却するかどうか
-3.1234277309172747 14 2.145 p<0.05で帰無仮説を棄却

うまく計算することができました!

挫折と裏話

関数化したい人生だった

UDFで永続化できればもっと楽だと思い「t_test(a,b)」という形で実装を試みたがそもそもUDFの思想と違うみたいで、挫折。 ARRAYやSTRCTを利用し力押しで行こうとしたが、サブクエリが記述できないのでやめた。でも、UDFのできること・できないことがわかったのは収穫だった!

ネタが!!

本当は12月初旬にネタを仕込んでいたのですが、まさかの6日目の記事の方と内容が丸かぶりして、慌ててテーマ見直して書きました笑 qiita.com

最後まで読んでいただきありがとうございました( ̄▽ ̄)

【Python】分析と開発のプロジェクト間を切り替え容易な環境を構築(pyenv + poetry + VScodeでJupyter Notebook)

こんにちはann-toqueです。この記事を書こうと思ったのはPythonを利用した業務改善のための開発を行い、かつ分析案件も並行して抱えてた際に、Jupyter Notebookを利用したインタラクティブな分析環境と前述の開発環境の両立を図りたく、タイトルの構成になったので紹介したいと思います。

記事について

対象者:

  • Jupyter Notebookを利用して分析を行うし、python単体のちょっとしたコードも書く方
  • 分析の時はJupyter Notebook、開発の時は別のエディタ、IDEと使い分けててスイッチングコストが高いなと感じている方

内容:

  • プロジェクト毎にpythonのバージョン、モジュール管理を行い、Visual Studio Code上でJupyter Notebookを利用する方法

触れないこと:

  • Windows版の構築方法(まぁ大きな流れはそんなに変わらんとは思います)
  • インストール方法の詳細などは参考記事が多数あるので触れません

概要

今回はエディタをVScodeで統一し、pyenvとpoetryで開発環境と分析環境を分けて、分析環境のみでVScodeのJupyter Notebookを利用できる構成を作りました。構成のそれぞれの説明・役割については以下の通りです。

構築の流れ

  1. poetryのインストール
  2. pyenvのインストール
  3. VScodeのインストール
  4. VScodeでpoetryで追加したモジュールを読み込めるようにする
  5. VScodePythonインタプリンタにpyenvのPythonを追加
  6. poetryでJupyter Notebookを追加

※ 1-3は特に依存関係ないのでどれからインストールしれも構いません

poetryのインストール

以下の記事にpoetryの解説・インストール方法の記載がありますので、ここでは大まかな利用方法だけ記載します。 Poetry: Python の依存関係管理とパッケージングを支援するツール | org-技術

プロジェクトの作成

__init__.py や README.md、testディレクトリなどのディレクトリやファイルが生成されます。pyproject.tomlが構成管理ファイルにあたります。

$ poetry new playground-analytics

モジュールの追加

今後poetryを利用し、モジュールを追加していくとpyproject.tomlの [tool.poetry.dependencies] が更新されていきます。

$ poetry add sklearn@latest
[tool.poetry]
name = "playground-analytics"
version = "0.1.0"
description = ""
authors = ["anntoque <???@email.com>"]

[tool.poetry.dependencies]
python = "^3.7"
sklearn = "^0.0"
pandas = "^1.0.3"
matplotlib = "^3.2.1"
jupyter = "^1.0.0"
seaborn = "^0.10.1"
scipy = "^1.4.1"
statsmodels = "^0.11.1"

[tool.poetry.dev-dependencies]
pytest = "^4.6"

[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"

pyproject.toml の読み込み

pyproject.toml さえあればGitHubなどのリモートリポジトリ上で共有されているプロジェクトをローカルに落とした際も環境の再現が可能です。

poetry install

pyenvのインストール

Homebrewを利用する場合は以下の通りです。

$ brew install pyenv

bashを利用したインストール方法も用意されています。
pyenv/pyenv-installer: This tool is used to install pyenv and friends.

利用方法

まず pyenv installで利用したいバージョンのpythonをダウンロードし、pyenv localでそのディレクトリ配下で利用したいpythonのバージョンを指定できます。以下に先ほどpoetryで作成したプロジェクトに移動し、そのプロジェクト内で指定するpythonのバージョンを指定するコマンドを記載します。

$ pyenv install 3.7.6
$ cd playground-analytics
$ pyenv local

$ python --version
Python 3.7.6

以下記事に基本利用方法が平易に書いてあるので、参考になります。
Pyenvの使い方 - Qiita

VScodeのインストール

こちらからダウンロードし、インストールしてください
Download Visual Studio Code - Mac, Linux, Windows

VScodeでpoetryで追加したモジュールを読み込めるようにする

このままpoetryでモジュールを追加していき、VScode上の.pyや.ipynb内で import したとしても読み込まれることはありませんので、以下Qiitaの記事の通りpoetryの設定を変更し、作成したプロジェクト内のvirtualenvに追加していく変更を行います。この変更をかけることでVScodeからpoetryで追加したモジュールの読み込みを行えるようになります。

$ poetry config virtualenvs.in-project true

VScodePythonインタプリンタにpyenvのPythonを追加

デフォルトの設定だとVScodePythonインタプリンタの参照先にpyenvで追加したPythonを利用する設定になっていないので、VSCodeの設定ファイルであるsettings.jsonpython.pythonPathに追加します。以下Qiita記事の「VSCodePython Interpreter の指定」の部分を参考にしました。

{
    "python.pythonPath": "/Users/anntoque/playground-analytics/.venv/bin/python3",
}

poetryでJupyter Notebookを追加

poetryはプロジェクト毎にモジュール管理ができるので、分析系のプロジェクトではjupyterを入れて、開発系のプロジェクトには入れないという選択が可能になります。 Jupyter Notebookを利用したい場合はjupyterモジュールの追加が必要ですので、追加しましょう。

$ poetry add jupyter@latest

VScodeでのJupyter Notebookの機能などは以下を参考にしてください。

完成!!とまとめ

以上で作業は終了です。pyenvでインストールしたPythonのバージョンを利用し、poetryでモジュール管理をpyproject.tomlで行い、VScode上でJupyter Notebookを利用することでインタラクティブな分析環境を構築することができました!!

f:id:ann-toque:20200508102216p:plain

構成の変更前と後の比較

  • エディタ:開発の時はVScode + 分析の時はJupyter Notebook →開発・分析どちらも VScode(Jupyter Notebook)
  • python環境:単一 → プロジェクト毎に複数バージョン利用
  • モジュール管理: 一括管理 → プロジェクト毎に管理

Appendix:他検討

JupyterLab

Jupyter Notebookにはないファイルの構成管理・デバッグなど行える環境もありますが、あくまでも分析向けな気がしています。
※ 利用したことがないのでイメージ違ったらすいません

自分向け備忘録:2019年の振り返り

1月

1年間参加したPJTの引き継ぎ始まる

部署の役割がR&Dで運用保守サービスを持たないという理由で、ETLアプリケーションの制作として参加したPJTの引き継ぎが決まった。全然理由は納得してるし、そうあるべきだと思うが半年前に外されたプロダクトオーナーと約束した機能が自分で実装できないのだけ悔しかったかな。

社内インタビュー

もう5年目になる新卒入社の1年目が運営しているSNSのインタビュー記事。本当よく頑張ってると思うし、運営側だったじぶんが今度はインタビューされる側ってのは感慨深い。

other

  • 結婚式①

2月

社内勉強会で発表

12・1月と続けてチームにいた尊敬・お世話になった人たちがほぼいなくなり、それに伴い仕事中の技術的インプットが激減した。インプット減らさないために、毎日コード書くことに挑戦しようと思い、モチベーションを仕組みで担保しようとしてGithubAPIとLINE利用して、毎日コミットしてるかの監視アプリを作った。結局書かなくなってた笑 speakerdeck.com

Laravel JP Conferenceに1 DAY STAFFとして参加した

初カンファレンススタッフ!PHPもLaravelもチュートリアルぐらいしかやったことないけど、技術のレイヤーが異なっても思想など学べることが多かった。エンジニアのカンファレンスって「会社」ではなく「技術」を通してコミニュティが形成されるのが離れていても繋がってる感あるなと感じた(ナニイッテンダコイツ) ann-toque.hatenablog.com

other

  • 学生向けハッカソン運営
  • 次世代社内育成プログラム(運営ではなく対象)キックオフ
  • エンジニア研修運営キックオフ

3月

LT枠 勉強会参加

Data Driven Developer Meetup #5 - connpass に LT枠で以下を発表。機械学習のETL基盤やPJTの進め方、 この後何度かお会いする方とも知り合えていい勉強会だった。 speakerdeck.com

embulkでよくisuueやプルリク出してる人とTwitterからお会いすることになった

いい話できたし今自分が難しい環境にいるんだなってことも実感。

other

  • 同期1名やめる
  • スペース借りて友人ともくもく会
  • いい買い物:FILCOキーボード購入
  • 結婚式②

4月

待望のBIチームメンバー増員

BIチームの冬が明け、待望のメンバー加入。これは本当に精力的に動いてくれた部長に感謝しかない。 同じ年代、モチベーションも近しい人と働くのは1人で働くよりも議論機会が増えるし、本当よい。

社内初のSNS新卒採用説明会開催

地方学生に弊社を知ってほしいなと思ってTwitter,instagram,facebook上のライブ配信で説明会開催。 細かい反省もあったけど、目標としてた閲覧数は突破したし、質問から地方学生と感じれる学生さんも見てくれたみたいでやってよかった。

人事が語らない会社説明会兼選考会|istyle RECRUIT

other

5月

社内公募PJTに参加表明

20代限定で参加できる部署横断型PJTに参加表明。 普段関わらない人たちと仕事できるのは本当いい経験だった。 ただ思ったものとは全然違うもので、自分の実力も足りず最終的には残念な形で終えた。

other

  • 野毛で初飲み。是非また行きたい。
  • scala接触:1週間くらいだけど色々教えてくれた同僚に感謝
  • めちゃめちゃマッチングアプリで会った
  • 28歳になりました

f:id:ann-toque:20200103150948j:plain

6月

マンモス展

控えめに言って最高でした。永久凍土から発掘されたマンモスが化石とかではなく毛も皮膚もそのままの状態で展示されるのは圧巻だった。 結局2回も行った。 www.mammothten.jp

other

7月

エンジニア向け新卒研修始まる

属人化している新卒研修を仕組み化しようとPJTリーダー的なことやり始めて3年目。ようやく自分の目指す形にできた。 新卒5名に対して運営メンバーが総勢30名くらいでうまく負荷分散、質の向上ができたと思う。フォーマット化してあるので同様の内容であれば準備の時間はだいぶ削れるし、ようやく運用フェーズに入れた気がする。新卒研修は1年に1回しか訪れないイベント型で、試行錯誤の繰り返し回数が増やせないのが難しくここまで時間がかかった。

other

  • 茅ヶ崎駅から小田原駅まで散歩部として歩く。結構良かった
  • 社内公募PJTメンバー決定:まさかこの後半年も続き二転三転するとはつゆ知らず…。
  • 同期2名やめる
  • 後輩エンジニア2名が社内で表彰。嬉しい出来事

8月

社内公募PJT 保留に

提案が完了し、実施とはいかず保留で再提案に。今思えば予算もなにもつかない自由提案型なのに、通った案の決め手に予算の低さがあげられた時にこのPJTの予算感を把握しなきゃダメで、再提案の際に考慮できる要素だったと思う。反省としてやりたいことをやるってより、決裁者達の見えない要望を叶えるという目的を一番最初に捉えるべきだった。そこらへんはリアリストではなくロマンを求めがちな自分の把握能力が甘かったと反省。

勉強会:白熱プロダクト教室参加

同僚のプロデューサーの方々と参加。CTO陣に「どれくらいコード書いている時間あるか」と聞いたところがっつりの人もいたし、マネジメント中心の方もいたのだけど、どの方も「会社がCTOの方々に快適な環境を提供している」ようなイメージを持った。まぁ需要と供給があってるってことなんだろうけど、それが普通だよねーという感じ。 connpass.com

炎上PJTが始まる

今の会社はエンジニア部署と事業部が別れているのだが、一部事業部が数名エンジニア?アナリスト?を採用し始めた。 そこから1年でチーム崩壊。そして抱えてるレポート案件をうちのチームでなんとかできないかと相談がきた。 「何を作るか決まってはいる。物はないがもう売ってきた。だから作って欲しい」 やべーと思った。このあともちろん物がないのでできてくると、これが欲しいあれが欲しいがでてきて納期間に合わず怒られ発生。今思うと最初に断るべきだったんだけど…自分はチーフでもマネージャーでもないのにそれより上のレイヤーの人達にそれ言えたかというとどうだろう…。自分にはそこまでの強さもない。いいように会社に使われてるなと感じ始めたのはこれがきっかけかな。

スキルのバランスの大切さに気づく

外部コンサルからある部署に来ていた人の契約終了でお疲れ様会があった。ビジネス寄りの人でSQLはお世辞にも綺麗なものではないのだけど、周りからの評価はすごかったし、確かに推進力とかキレとか周りを巻き込む能力とかすごかった。データサイエンティストの3要素に「ビジネス」「データサイエンス」「エンジニアリング」があるのだけど、Lv3,Lv1,Lv1という感じ。複合スキルを持ってる人って市場で貴重だよなと改めて感じさせてもらった人だった。

データサイエンティストのミッション、スキルセット、定義、スキルレベル

other

  • 給料大幅に上がる:世の中の同世代の平均年収ぐらいになり人権を得る
  • マンモス展2回目
  • いつかティファニーで朝食を(漫画)にハマる

9月

帰省

亡くなったおばぁちゃん家に自分の子供自体のおもちゃの整理をしに行った時に、人が住んでた家って独特の雰囲気があると感じた。ベイブレード懐かしすぎ。

f:id:ann-toque:20200103160910j:plain

PHPカンファレンス北海道 助っ人

行く予定の人がいけなくなり、さらに代役もいけなくなり、ちょうどその時に北海道に帰る自分が代役の代役に。PHPなにもわからないマンだけど、自分が就活している時にはこんなカンファレンスが北海道でやってなかったと思うので、北海道でweb系企業増えたなーと感じた。 コネヒトの方々にめちゃくちゃお世話になりました。ありがとうございました。

f:id:ann-toque:20200103150846j:plain

other

  • エンジニア研修終了
  • 攻殻機動隊作品全て見た
  • 結婚式④

10月

redash meeet up 4.0.0に登壇

初のLT以外の20分枠での発表。カンファレンスではないけど、昨年LT以外で喋ること目標にしていたのでこれで達成。 redash-meetup.connpass.com speakerdeck.com

SQLなんでも答えるマン開始

社内SQL勉強会を始めたので同時に「SQLなんでも答えるマン」を開始。SQLじゃない分析相談も来たりとかするけど、BIメンバーに他の人に教えるという経験を提供できたことが各々の成長に繋がった気がした。

BIチームのメンバー1人退職

退職理由がチームというよりは会社視点なので防げた感じはしないのだけど、それでも自分とチームの関係に反省はあったかなと思った出来事。すごく優秀な人だったので痛いし、あきらかにチームの業務スピードは減速した。

other

  • 以下の勉強会に参加。メルカリの分析組織の話の中で「アナリストをPJTに事前にインストールしておく」という表現が面白かった techplay.jp

11月

Connehito Marché vol.6 〜機械学習・データ分析市〜 LT枠

コネヒトさんで開催の勉強会にLTでAzure関連で発表。 connehito.connpass.com speakerdeck.com

炎上PJTの元チームにBIツール導入を検討し始める

プロダクトではなく業務フローに問題があると感じた。ヒアリングなどを通してアナリストスキルのない方に、アナリストスキルが必要な業務を任せ、データ抽出・分析などが依頼として発生。クライアントの要求に即座に答えれない、業務スピードが遅くなることが根本原因だと仮説立てた。SQL勉強会の経験からモチベーションある人でもSQL覚えるのは大変と感じたので、BIツールでカバーできないか検討し始めたのがこの頃。自分のチームが被害受けるからと言って、なーんで俺が他部署の業務・組織構成のあり方まで気にしなきゃならんのか。でも、考えないと自分のチームメンバーが大変になるし…というジレンマ。

新規事業計画を書いてみる

次世代社内育成プログラムでPLなりKPIなり見る機会が増えたので、自分で事業計画書を書いてみようと思い書いてみる。自分がアイディア先行型で市場調査がおざなりにする節があるなということがわかる。最終的には書ききることなく終了。今の会社の事業ではなく新規事業で自分も知らない業界に対しての事業計画は精度高めるのが大変で難しいなと感じた。

自分の仕事で大事にしているもの

お世話になっている人の家で「仕事のモチベーションに関わる単語が書かれたカードをババ抜き的に選んでいき、本当に大事にしているものを残すことで自分のモチベーションを気づける」というゲームをやって以下の3枚になった。 f:id:ann-toque:20200103150802j:plain

other

  • 初のクリスマスコフレ商戦に参加
  • Fate Grand Orderやり始める。どハマり中
  • 結婚式⑤

12 月

チームの業務マインドを「自分たちの意思決定のために分析」「抽象化して解決方法を探る」に変えていった

抽象的な話なのだが今のチームは「依頼される業務」が7割り方を占めている。残り3割もその業務で生み出されたものの運用保守になるので、新しいことができない。直近半年は「分析」を行いたく、無理にチームにプロダクト分析などをやってみたが、やるやらない判断は事業部なのでうまく実施まで繋がらなかった。

反省として自分が「分析=プロダクト・マーケット分析」と捉えていてしまって、BIのためのデータ分析をBIチームにいながらできてなかったなと気づいたので、自分たちの業務の中にまずは分析を取り入れていった。簡単な例だとGoogle Analyticsのイベント管理を行うスプレッドシートの更新頻度を決めるために新規イベントの追加計測日を調査するとか。

あとは「データ抽出」という依頼できた業務の解決方法が「クエリを書く」だけなので、抽象的に「依頼元の業務課題の解決」と捉え直し、「データ抽出という枠を超えて」考える機会を作っていくことで、メンバーの新たな技術に挑戦する機会をスムーズに作っていった。

半年もかかったけどメンバーの成長機会と業務改善を重ねることができ始めたのでマネージャーに近づけたかなと感じた。まぁ今の会社にそんなことしてるマネージャーいるかは知らん。自分の思うマネージャー像が具体化、実践できてることが大事だと思う。来年もこの2軸で続けていきたい。

Data Platform Meetup 【vol.2】に参加

自分はアナリストでもないし、データエンジニアでもないし強いて言えばBIエンジニアだけど、この枠でコミュニティを探すのはすごい難しい。今年あった「Data Platform Meetup」や「データ整備人について前向きに考える」が今まで参加した勉強会の中では一番合ってるコミュニティだなと感じた。 data-platform-meetup.connpass.com

話とか聞くと以下のような属性があるからじゃないかなと思うんだけどどうだろう。

以下のスライドに共感・議論できる人たちと働きたい or お会いしたいです。しんゆうさんはDMしたら話聞いてくれるらしいので年明けにしてみよう。

speakerdeck.com

アドベントカレンダー

今年も運営を行った。去年書いたメンバーがだいぶいなくなったので埋まらないんじゃないかと思ったけど、すんなり埋まってよかった。 qiita.com

自分の記事はチームの業務について書いたけど、アドベントカレンダー用に書いたわけではなくストックから出したものなのでアウトプット駆動の成長機会として生かせなかった。 techblog.istyle.co.jp

other

2019年の目標達成度

  • 仕事としてはリアルタイム×大量データへの低レイテンシなデータ基盤作り終えたら、アナリスト・サイエンティストにジョブチェンジします→できなかった。転職活動通して叶えたいと思います。
  • そのためにアナリストに近い副業を探し始めようと思います→副業はしたけどエンジニア寄りで失敗。副業するなら本業で年収・業務を変えた方が自分のキャパ的に合ってると学んだ。
  • 何かのカンファレンスで15分以上喋る→達成

2020年の目標

  • 文化的に過ごす。芸術、読書など仕事以外のものに触れていく
    • 毎月博物館か美術館は行きたい
  • 体脂肪15%以下!!
  • 彼女作るための活動はゆるりと続ける
  • 業務内容チェンジ・年収アップ。アナリスト・サイエンティストで550-700希望

Amazon ECSでdocker-compose.ymlのdepends_onが立ち上げの際に、warningを出す場合の対処法

この記事はAmazon ECSのタスク定義のdepends_onに関するまとめです。
Amazon ECSに関しての説明は省きます。

docker-compose.ymlのdepends_onって何?

docker-compose.ymlには「depends_on」と呼ばれるコンテナ間の起動の依存関係を設定できる項目がある。

Compose file version 3 reference | Docker Documentation

以下のようなdocker-compose.ymlの場合、dbredisweb の前に起動される。

version: "3"
services:
  web:
    image: nginx:alpine
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres

Amazon ECSでdocker-compose.ymlのdepends_onがwarningを出す

ここからが本題で、上記ファイルがあるディレクトリ上で ecs-cli compose --file docker-compose.yml up を叩くと以下のようなwarningがでる。

$ecs-cli compose --file docker-compose.yml up
WARN[0000] Skipping unsupported YAML option for service...  option name=depends_on service name=web
...

何が起きているか

ECSは指定されたdocker-compose.ymlから、コンテナに関する設定を タスク定義 というJSONファイルに書き起こす。 この際にdepends_onは書き起こしに未対応のため、warningがでる。

解決方法

ecs-cli compose からは依存関係の書き起こしがされないが、2019年3月からコンテナ間の依存関係に対応したよというAmazonからのお知らせがある。タスク定義の項目に dependsOnが追加されている。

aws.amazon.com

docs.aws.amazon.com

設定方法

タスク定義をGUI以外から編集する方法を知らないためGUI上での変更をまとめていく。 (タスク定義ってローカルに落として、アップロードできる方法あるのかな…ありそうなんだけど)

  1. 実行されたタスクを表示
  2. 「新しいリビジョンを作成」を選択
  3. depends_on:が記載されているコンテナを選択 f:id:ann-toque:20190505205841p:plain
  4. 「STARTUP DEPENDENCY ORDERING」に依存関係のあるコンテナを選択 & 選択したコンテナがどの状態になったら対象のコンテナを起動するか選択 状態はSTART, COMPLETE, SUCCESS, HEALTHYの4つ f:id:ann-toque:20190505205904p:plain

ハマりどころ

「ECS depends on」でググると上記のURLのようにAmazonから「コンテナの依存関係設定できるようにした」という記事か見つかるのだが、リンク先のタスク定義の日本語ページにはそう言った項目がなかった。 英語にすると dependsOn の項目が出てきた…。これに行き着くまでに時間をだいぶ掛けてしまった…。

ハッカソンで自社APIを開放した事例集

仕事で調査する機会があったのでまとめました。

学生向け

line-hr.jp corp.retty.me a3rt.recruit-jinji.jp robtstart.connpass.com techplay.jp adndevblog.typepad.com www.istyle.co.jp

参加年齢の制限なし

chatbot.userlocal.jp about.moi.st swtokyo.doorkeeper.jp techplay.jp mashupawards.connpass.com qiitahackathon07.peatix.com techblog.yahoo.co.jp supporterzcolab.com

Laravel JP Conferenceに1 DAY STAFFとして参加した & 一部セッションの感想

どもどものども、やすです。昨日2/17に開催された「Laravel JP Conference 2019」に 1 DAY STAFFとして参加してきました!ちなみにLaravelは新卒研修の時以来ほぼ触っていないです😆

conference2019.laravel.jp

1 DAY STAFF編

f:id:ann-toque:20190217144533j:plain
OP Talkの様子

今回の1 DAY STAFFは大きく役割が「設営」「受付」「誘導」「進行」に分けられ、僕の担当は進行でした!

進行としての仕事は大きく「アナウンス」で、セッションの開始時にスピーカーの発表内容を 紹介したり、終了時にアンケートの案内をするなど難しいものではありませんでした。

参加してよかった点

個人的に1 DAY STAFFに参加してよかった点は

  • スタッフ内で色んなエンジニアの方と知り合える
  • 今半の弁当がうまうま
  • 技術コミュニティに貢献した満足感を得られる
  • スピーカーの方と雑談できる
  • 思ったより多くのセッションを見れる

最後の「思ったより多くのセッションを見れる」は予想外でした。 今回1 DAY STAFFへの事前のアンケートの中で「どのセッションが見たいか」という項目が あり、正直「まぁ1個くらい見れれば良いかなー」くらいに考えていた結果なんと 8セッション(OP,ED セッション除く)を見れました。

ほとんどのスタッフの大きな仕事は朝~午前中に終えてますし、僕の「進行」の仕事もセッション会場に いながらするものなので、おそらくほとんどのスタッフが思ったとよりもセッションを見れたのではないでしょうか。

f:id:ann-toque:20190217144445j:plain
うまうまの今半の弁当

懇親会について

今回のLaravel JP Conference 2019は懇親会があり、懇親会チケットも販売されていたので、 スタッフでなくても交流ができる機会があるのはとても良いと思いました。 もちろん懇親会はスタッフも参加OKで、スタッフ同士で労をねぎらったり一般参加の方と 交流できたので、本当1 DAY STAFFの恩恵が多くてコアスタッフの方々には感謝しかありません。

印象に残ったシーン

スピーカーと実行委員長、コアスタッフに「PHPフレームワーク Laravel Webアプリケーション開発 バージョン 5.5 LTS対応」の 著者の方々がいたので、懇親会の中で本についてのトークセッションが行われ「どの章が思い入れあるか」などを話して下さりました。

www.socym.co.jp

いやー、このトークセッションで話している弊社CTOと著者の方々が めちゃくちゃ楽しそうだったんですよ!! 会社などではなく技術でつながってあんなに楽しそうに話しているのは羨ましいと思いました。めちゃめちゃいい笑顔だった…。

セッションの感想編

フレームワークとの付き合い方 / 新原 雅司(@shin1x1)さん

speakerdeck.com

感想

  • 話し方うますぎて「個人の考えですよ」って伝える部分ですら会場で笑いが起きてた
  • slim3 知らなかった
  • eloquentのメソッドにSQLで実装する方法は、生SQLを普段書いてる職種としてはやりやすいなと思った

SimpleとEasyは違う / 株式会社クラシコム 廣瀬健(@takeru0757)さん

speakerdeck.com

感想

  • 創味のつゆに例えるセンスがすごい。#laraveljpcon ツイートに「創味のつゆ」が流れてるのは面白かった
  • easyとsimpleの違いに納得。使い分けを大事にしなきゃなと思った。

最後に

Laravel JP Conference 2019…とても良い経験をさせてもらいました。 技術で他者がつながる場所を提供したいし、技術軸の仲間も欲しいなと思ったので 分析SQL Nightという勉強会やろうと思います。 まだconpassページも作ってないですけど!!やります!!分析する際にSQLを使用したことがある方のその際の知見をLTを主なコンテンツとして交流する勉強会です。 例えば

現在勉強会の中身を詰めてる最中です。今週中にconpassのページ作りますので、LT興味ある人、運営手伝いたいという方などいらっしゃいましたら やーすー (@YASU11552288) | Twitterまでご連絡ください 😁 モチベーション出すためにとりあえずロゴだけ作りました笑

f:id:ann-toque:20190217143814p:plain

2018年の振り返り

1月

仕事はtableauやredash、Google AnalyticsといったBIツールの管理者とデータ抽出、BigQueryにembulkで突っ込んだデータウェアハウスの運用をやってた。

LTデビュー

SQL実践入門Night - connpass でLTに参加しました。これが人生初のLTでした。 聴衆の方々にあたたかい目で見ていただけたおかげもあり、無事LTデビューを終えました。
speakerdeck.com

輪読会提案

チームの人数が3人から6人と増えた時期でもありDBAやクエラー、BIツールマンなど技術スタックがバラついてきたので、輪読会を行いました。以下書籍でデータを取り巻く技術の概要をつかめました。

ビッグデータを支える技術 刻々とデータが脈打つ自動化の世界 WEB+DB PRESS (著:西田 圭介)

尊敬していた同期がやめる

今の会社には新卒で入社したのですが、尊敬していた営業の同期がやめました。やめる背景も含めて、入社して一番ショックな出来事だった。

2月

データといえばこの人みたいなブランディングも浸透し始めたし、WEBのデータだけでなく、小売のデータ理解も進み、別部署からの重要な話も結構相談が来た月だった。

新卒採用

この頃から新卒採用のリクルーターとしてアサインし始められ、初出張で岩手県に行った。本場の冷麺は最高でした。

f:id:ann-toque:20181231230818j:plain

3月

モバイルアプリのユーザーの行動計測をGoogle Analyticsで行なっていて、スキーマ自由に決めれないし、サポート今後切れるしで、Firebase Analyticsの導入をしたくて、企画・各サービス担当チーム間を奔走し始めた月。まさかここから導入完了までに半年もかかるとつゆ知らず…。ウェブビューに色々やらしちゃいかん…。

presto環境構築

分析用と本番のWeb APPから使用されるprestoサーバーが併用されていたため、移行作業を行なった。当時はオンプレの仮想サーバーでの運用が基本で、ハイメモリで割り当てをもらうためにはインフラチームへのスペックの根拠の説明が必要で、ふわっとしていたインフラ周りの知識がすごく深まった時期。

ブログ投稿

作ったデータウェアハウスがBigQueryにただデータ突っ込んだもので、WEBアプリケーションから叩かれることもなかったので、大量データにクエリで答えてくれるDBを探していたときに試してみた。 ann-toque.hatenablog.com

4月

初サービスの開発メンバーにJOIN!!化粧品メーカー向けマーケティング支援サービス「ブランドオフィシャル」のETL処理部分を担当することになり、8ヶ月たった現在も継続中。サービスに関しては以下の記事から。 blog.istyle.co.jp

新卒OJTのデータ理解向上の研修担当

4月に入社した新卒1年目の社員にデータを理解してもらうための研修を計画・実行。内容はwebサイトのアクセスログやサービスデータをcsvで提供して、エクセルで分析してもらうってもの。ユーザーの行動データの生の状態がどんなものかを知ってもらって、サービスで作り出す「口コミ」「予約」「購入」がどんなデータ形式かをイメージできるように組んだ。

エクセルの仕様理解が浅くて反省点があったので、来年もやるなら改善してまた行いたい!!

5月

執行役員に立候補しました

枠としては新設でChief Data Officer (CDO)。結果はダメでした。社長からは「それ執行役員じゃなきゃできないの?」とフィードバックもらいました。確かにって思った時点で組織とポジションの理解が甘いところを認めざる終えなかった。ただこれを機に分散されていたやりたいことが「データライフサイクルの円滑化」と一文にまとめることができた。

非エンジニアも参加できる社内LT大会を開催

昨年はエンジニアのみのLT大会を開催したのですが、開催後に企画やプロデューサーの方から「私も参加したい!!」との声があったので開催。社内イベントは結構やったので問題なく運用はできたのだが、開催側を増やすためにどうしたらいいかなとか考え始めた。

6月

心理・教育のための統計法(著:山内 光哉) をjupyter notebookでpythonコード化して、自分用の教科書を作っていた。途中で止まっているので2019年も進めたい。

7月

異動した。「一緒に働きたい」と思っていた Yuuki Takezawa@ytake (@ex_takezawa) | Twitter さんの下にいけたので結果オーライ。

ゲーム作った

昨年作った忘年会で作ったWEB APPが人事部長にうけて、「全社総会でも何かやって欲しい!!」と依頼されて、同じメンバーで一緒に作った。Firebaseのプランを従量課金にするのを忘れていて、Firebase Realtime Database の同時接続数上限に引っかかりゲームが止まる場面もあったが、無事終えれたのでよかった笑 blog.istyle.co.jp

↓ 昨年つくったやつ blog.istyle.co.jp

8月

母校の学生に絞ったインターン開催

初めてReact Native触ったが、普段データ周辺の技術にしか触らない自分にとっては新鮮だった。 blog.istyle.co.jp

阿波踊り(踊る側)に参加

昨年も参加して今年で2回目。同期や社長とゆっくり話す時間があって、すごいよかった。社長と前からは近い距離ではあったけど、社長も人間なんだなと実感した。四国のうどんはうまい。 f:id:ann-toque:20190101001921j:plain

9月

4月にJOINしたサービスの要求・要件定義がひっくり返りもあり4ヶ月後にFIXというまさかの事態。PJT・事業の進め方に疑問を持ち始める。

buildersconを見に行った

Kyle Kingsburyさんの分散システムの種類別にCAPの担保の使用に関する発表。リサーチエンジニア?だったかな。そういうエンジニアもいるんだなと知った。 builderscon.io

10月

新卒2年目でやめたエンジニアの同期に飲んだ際に「お前はエンジニアだよ」と人権をいただけたので、僕はエンジニアです。

Redash Meetup 4.0.0にLTで参加

詳細は以下記事から techblog.istyle.co.jp

11月

PJT炎上。リリースに間にあわせるためにめっちゃ働いたがリリース前日にバグが見つかる。リリース後にもバグが見つかる。泣きながら仕事した。そんななか、優しい彼女ができた。

Apache Kuduを理解し始める

9月くらいからkudu + impalaに興味を持ち始めてAWSインスタンス立てて構築していたのだが、わからない部分が多々あった。cloudera world tokyo 2018に参加した際、apache kuduのよく見るスライド作者の人と話す機会があり、kuduのわかりみがすごかった。 www.clouderaworldtokyo.com

12月

アドベントカレンダーは2本書いた

ann-toque.hatenablog.com

techblog.istyle.co.jp

ラムダアーキテクチャとの出会い

めちゃめちゃ良書。データエンジニアに限らず、アプリケーションのエンジニアでもRDB以外の選択肢を取る際裏側がどうなるべきかをイメージするために知っておいた方がいいと思う。CTOさん、早く教えて欲しかったです。 最近はカッパもあるらしいので、どなたか良書があれば教えてください。

スケーラブルリアルタイムデータ分析入門 ―ラムダアーキテクチャによるビッグデータ処理(著:Nathan Marz)

まとめ

今年

  • マネージャーに「成長したよ」と言われていまいち信じれなかったけど、振り返ると確かに1月より確実に成長してる

来年

  • 仕事としてはリアルタイム×大量データへの低レイテンシなデータ基盤作り終えたら、アナリスト・サイエンティストにジョブチェンジします
  • そのためにアナリストに近い副業を探し始めようと思います
  • 何かのカンファレンスで15分以上喋る

2018年も家族・同期・先輩・後輩・友人・ハロプロ・izone・新日本などなどみなさんお世話になりました ( ・∇・)