upsilon’s blog

備忘録なので内容は限りなく薄いです。

DevSumi 2019 聴講録

DevSumi 2019

2019/02/14-15 於 雅叙園

TL;DR

例年雅叙園で行われるオープン・Web系技術カンファレンス
今回は2日目の午後のみ参加 

聞いた講演

これをまだ知らない Web エンジニアへ贈る - 私が愛する Elixir/Erlang の楽しさと辛さ -
Elixirを実際に使い込んだ人ならではの本当の楽しさ、辛さが滲み出ていた。自分もElixir使ってみようかな
プロダクトをGrowthさせるデータ駆動戦略の基礎知識~DMM.comにおけるユーザーレビュー基盤のKPIツリー公開~
プロダクトオーナー の立場で データドリブンなグロースハックをする話。KPIを設定する際の選定基準について詳しく話していて参考になった
セキュアな環境でDevOpsを実現する厳選ツール
セガゲームスにおける github Enterprise の導入事例。 git自体は今更感があるが、新しい技術を会社組織に導入した事例としては、大いに参考になった
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方
講演者のエンジニアとしてのリタイアするまでの約40年のキャリアを、コンピューターの歴史と共に振り返る講演
 

これも聞いてみたかった

ゲームQAを支える技術~前処理・後処理は大変だが役に立つ~(太田 健一郎[スクウェア・エニックス])
中国・深センのテクノロジー最新事情(ちゃんとく[dotstudio]/寺尾 英作[SBクラウド])
システムエンジニアは空を飛ぶ夢を見れるのか~普通のSEがドローン系SEになるまで~(佐藤 明)
Webアプリのチューニングバトル「(社内)ISUCON」の魅力と楽しさ(櫛井 優介[LINE]/古川 陽介[リクルートテクノロジーズ]/南 直[Wantedly]
Site Reliability Engineering at Google(中井 悦司[グーグル・クラウド・ジャパン])
 

これをまだ知らない Web エンジニアへ贈る - 私が愛する Elixir/Erlang の楽しさと辛さ -

 

発表者

幾田 雅仁
gumi Inc. CTO

Erlangとのつきあい

2007年 Erlangと出会う
2011年 Erlangでクレジット決済サービスを構築
2013年 Erlangでゲーム認証/課金サービスを構築
2014年 Elixirと出会う

私が愛するElixir/Erlangの楽しさ

Web開発者の悩み

  • 複雑化するコード
  • 肥大化するサーバー構成
  • 増え続けるクライアント
  • 素早くリリースしたい
  • 複雑化するサーバー構成

Web開発の辛さを改善し、以下の3つを実現するのが Elixir/Erlang

  • 並行性
  • 耐障害性
  • メンテナンス性

gumiでの利用実例

  • マイクロサービス群
    • 認証サーバー
    • 課金サーバー
  • ゲームサーバー群

流行ってない

Elixir/ErlangはWeb開発のための優秀なツールが完備されているのに…
  • サーバー構成をシンプルに保てるのに
  • コードをシンプルに保てるのに
  • 夜寝れるのに
  • 流行ってない
  • 転職サイトの求人数でみるとRubyの100分の一

なぜ流行らない?

  • 学習コストが高い(と思われている)× 実際のWeb開発では納期が短い
  • =Elixir採用されない
学習コストが高い(とも思われている)要素
  • 並行処理
  • 関数型
  • マクロ
  • Erlang

実は、Webシステムの開発に限定すれば、学習コストは高くも低くもない

  • Elixirは学習コストの割には恩恵が大きい
学ぶことと学ばないことを取捨選択して学習コストする
  • 学習コストを割くこと
    • リストの扱い方
  • しばらく学習コストを割かないこと
Phoenix(Elixirで作られたWebフレームワーク)でWebサービスを開発するなら
  • 逐次処理を書くだけで軽量プロセスの恩恵を享受できる
  • よって、しばらく、並行処理は忘れてよい
  • 学習コストを払うのも後回しでよい

並行処理

独立したCPUを持つ
  • ErlangVM(EVM)上で動くPhoenixの動作
    • PhoenixではEVM上にCowboyプロセスが常駐
    • Cowboyプロセスがhttpリクエストを受けたら、個別のリクエスト毎に軽量プロセスを生成して軽量プロセスがリクエストに対する処理を行う
    • この動きは、OS上でApacheが動く仕組みと似ている
      • EVM = OS
      • Cowboy = Web Server(Apache)
      • 軽量プロセス = CGI
      • iex = Shell
    • コンテキストスイッチはEVMに任せ、軽量プロセス上で動く処理は逐次処理として書くだけでよい
    • 一つの逐次処理の負荷が他の処理に影響しにくい
ネットワーク上の一意なアドレスを持つ
  • EVMは軽量プロセスに一意なアドレスを割り当てる
  • アドレスを使って軽量プロセス間で通信できる
  • 軽量プロセス同士をlinkすることができて、片方で異常が起きたらもう一方へと知らせてくれる
    • 不要なプロセスが残り続けるということがない
EVM(Erlang VirtualMachine)=OSと似たプロセスの仕組みを持つ
  • 軽量プロセスは耐障害性を向上する
  • 速さは…中程度
  • 結果として、並行処理の学習コスト不要で、ほどほどに遅くない、とても楽で安全

関数型

巷で噂されている良い話
    • 副作用が少ない
    • データ処理に集中できる
    • gotoは処理フローの迷子
    • OOは状態の迷子
そのような話は前提条件が誤り
  • Elixirは純粋な関数型ではないから…
    • 関数型由来の仕組みが少ない
    • OO由来の仕組みが少ない
    • 複雑さが排除されていて、理解するための文脈が少ない
そもそも、純粋な関数型言語の条件
  • 参照等価な関数で表現できることが多い
  • e.g. 演算子、例外、IOなどが関数で表現されている
 
Elixirはあまり純粋ではない
 
Elixirらしいコードの読み書きを学ぶおすすめの学習方法
 
初歩 - プログラミングElixirを読む前に…
  • リスト
    • 活用のカギは構造と再帰
    • リストを再帰でどう使うか解説
  • Enum
    • filter, map, sort  等
    • 関数がたくさんあるが、よく使うものから覚える
    • まずは、プログラミングElixirやElixirSchoolで紹介されている関数を覚えるとよい
    • _by, _while, _every サフィックスを覚える
  • パイプライン
    • パイプラインの存在意義は、関数定義に一貫性が生じること
    • パイプラインが使えるように関数を定義する癖をつけよう
      • 第一引数=操作前データ、戻り値=操作後データ
    • パイプラインはJavaScriptにも入るかも
      • Elixirで先行体験してライバルに差をつけよう
  • do
    • do内にはスコープがあるのでif文が読みやすくなる
 

私が愛するElixir/Erlangの辛さ

EVMについて

EVMは高機能
機能があると使いたくなる…が、Webシステム開発ではほぼ必要ない
  • そもそも私のモチベーション=楽をしたい
Elixirの用途を割り切るため断捨離

関数型とOOについて - 混線する関数型とOO

OOにどっぷり漬かっている人はモジュールをクラス定義のように使ってしまう
  • モジュール単位で抽象化するのはやめよう>やるなら関数単位で
プロトコルとビヘイビアを混同する
と覚える

マクロは高機能

まとめ

  • EVMは高機能だが断捨離しよう
  • モジュールで設計(抽象化)するな、関数中心で考えよう
 

プロダクトをGrowthさせるデータ駆動戦略の基礎知識~DMM.comにおけるユーザーレビュー基盤のKPIツリー公開~

 

講演者

  • Masato Ishigaki
    • Product Owner at DMM

プロダクトをGrowthさせる

  • プロダクトのグロースはS字カーブをたどる
  • 複数回の改善で連続したS字カーブをたどるのが理想
  • プロダクトグロース = 改善の繰り返し = データドリブン
 

データ駆動戦略とは何か?

  1. データドリブンに戦略を組み立てていく
  2. 不確実性に強い組織へ

Why

なぜデータドリブン?
  • 直観に頼る仮説は量産されがち > 開発者を圧迫する
  • リリース後にデータがないと学習できない、次の仮説が立てづらい

What

データ駆動戦略で何ができるのか
  1. プロダクトの状態を可視化できる
  2. 仮説/施策を作り、売り上げに貢献できる
  3. 意思決定を最速化できる
  4. 意思決定を定量的に共有できる
  5. 未来を予測して戦略が作れる

How to

データ駆動戦略における3種の神器 を駆使して行う
  1. データ分析基盤
  2. 優れた指標 - 指標に基づくKPI
  3. 開発プロセス - リーン・アジャイルアジャイルマーケティング

DMM.comにおけるデータ駆動戦略

DMMには40以上のサービスがある
事業ドメインごとに自己組織(スクラムチーム)化している
自己組織化したチームにおいて、Product Owner の強い味方が  データアナリスト である
データアナリストはプロダクトオーナーとデータを見ながら日々会話する

DMM.comのデータ基盤

購買ログ、レコメンド履歴、行動ログなどのBigDataに蓄積
データアナリストがデータ分析を行って仮説立案する
データアナリスト×プロダクトオーナー が、データドリブンで仮説立案→意思決定する

ユーザーレビュー基盤プロダクトについて

コンテンツに対するユーザーレビューは購入決定の強力な動機
70%以上のユーザーが、レビューを見て購入の決定をしているという統計結果もある
 
DMMでは、サービスで利用されるユーザーレビューの仕組みは一つのプロダクトチームが専門で開発、運用している
データを一元管理することにより、データドリブンな開発が可能になる
 
どんな行動ログをトラッキングしているか
  • 星の数・コメント・平均評価
  • 参考になった数・いいね押下ユーザー
  • レビューのどこまでスクロールしたか
  • レビューを見た後の行動(購入・カード追加・離脱)

データ分析基盤について

データ駆動戦略は組織として進行しないとビジネス価値が集まらず、効果は薄い
データ駆動がもたらすメリットを定量的にデータを使って提示しなければいけない
データアナリストが分析しやすいデータ分析基盤を構築しなければならない
  • データ基盤の規模
    • テーブル数:数千テーブル
    • 総レコード数:数億レコード(感想:DMMの規模で数億は少なくない?)
    • BIツール:Redash
 

優れた指標でないとデータは「駆動」しない

 
再掲:三種の神器 - 2. 優れた指標
  • データが駆動する とは?
    • データを見ることで 次の行動 につながること
    • Action → Result → Next Action
 
優れた指標の3つの土台と4つの指標
 
3つの土台
  1. 優れた指標は 比較 ができる
  2. 優れた指標は わかりやすい
  3. 優れた指標は 比率割合 である
 
4つの指標
  1. 定量的指標 vs 定量的指標
    • 定性的 = 主観的で感覚的な指標 インタビュー・調査・クレームなど
    • 定量的 = 科学的数値な指標 - 会員登録数・売上金額など
      • ユーザーレビューにあてはめて考えると
        • 書く人の定量的指標は
          • レビュー増加率(CV)
          • レビュアー増加率(CV)
          • レビュアー種別増加率
        • 見る人の定量的指標は
          • レビュー経由購入率(CVR)
  2. 虚栄の指標 vs 本物の指標
    • 虚栄の指標 = 次の行動につながらない指標
      • ex. 会員登録数 - 時間とともに上がるだけ
    • 本物の指標 = 次の行動につながる指標
      • ex. 会員登録数+離脱率+アクティブユーザー率
        • 会員登録数だけ見ると虚栄だが、他の指標と合わせてみると次の行動につながる
    • ユーザーレビューに当てはめて考えると
      • 虚栄の指標
        • レビュー増加率
        • レビュアー増加率
      • 本物の指標
        • 新規レビュアー率
        • アクティブレビュアー率
  3. 先行指標 vs 遅行指標
    • 先行指標 = 未来を予測した指標
    • 遅行指標 = 変動後の数値を示す指標
  4. 相関指標 vs 因果指標
    • 相関指標 = AとBが関係していること
      • これから起こることが予測できる
    • 因果指標 = AtoBであること
      • 未来を変えることができる
    • ex. 「交番の量」が多いほど「犯罪件数」が多い → 鋼板を減らしても犯罪は減らない。相関関係であっても因果関係ではない
 
未来を変えたい指標があって、その指標と因果関係になっている指標を見つけたい!
  • 因果関係を探すために、相関関係がありそうな数値をグラフ化してモニタリングし続ける
 
ユーザーレビューで使っているKPIツリーを公開!(ここが本講演の目玉)
  • レビュー増加率
    • レビュー投稿増加率(星のみ)
    • レビュー投稿増加率(コメントあり)
    • レビュー掲載コンテンツ率
    • レビュー投稿→承認タイムラグ日数
  • レビュアー増加率
    • 購入者レビュー数/率
      • 新規レビュアー増加率
      • アクティブレビュアー増加率
    • 未購入者レビュー数/率
      • 新規レビュアー増加率
      • アクティブレビュアー増加率
  • レビュー閲覧率
    • レビュー先頭閲覧率
    • レビュー末端閲覧率
    • レビュー「次へ」閲覧率
    • レビュー経由購入率
 

データ駆動を実現する開発プロセスとは

 
 
リーンスタートアップとして有名なBMLループを使う
  • LEARN → IDEA
    • 仮説に妥当性を持たせる検証 (ex. A/Bテスト等)
    • 仮説立案
    • 事前に検証をすることで、開発しなくていい機能を減らす
  • BUILD → PRODUCT
    • アジャイルでリードタイムを短くMVPを開発 → リリース
  • MEASURE → DATA
    • データサイエンスをもとにデータを計測 → KPIに落とし込む
 

アジャイルマーケティングを用いたキャンペーン手法

アジャイルマーケティングとは、従来のマーケティングアジャイルやリーンを適用したマーケティング手法であり、アジャイル・リーン開発との親和性が高い
  1. キャンペーン中に「ニアタイム」でデータを取得。小さく初めて、小さく改善をデータ駆動で高速で繰り返す
  2. 過去のキャンペーンのデータを必ず蓄積して計測する。そこから計測→学習して次のキャンペーンにつなげる
アジャイルマーケティングで可視化するべき指標
事例:購入した商品にレビューするだけで、1レビュー10ポイントをプレゼント
  1. 想定される効果
    • レビューが増えると購入意欲が上がるので売り上げが伸びると予想される
    • レビュー数0→ 1、 1→2、 2→3でコンテンツ当たりの売り上げ増加見込みは違う
    • それぞれのパターン×コンテンツ当たり売上増加見込み×コンテンツ数で増加額を予測する
  2. キャンペーンを終了させる基準
    • 予算に対して費用がペイしているかを毎月確認していく
    • ROI や ROAS を指標とする
  3. 大きく成功した際、どこにリソースを再配分するか
 
 

セキュアな環境でDevOpsを実現する厳選ツール

講演1

GitHub Enterprise 導入から定着までにやってきたこと

講演者

上田 展生[セガゲームス]
 

はじめに

  • 3年前(2016/1)は…
    • 全員がSVNを利用(Gitも使ってない)
  • 今現在は…
    • 全員がGitHubEnterpriseを利用
    • アカウント数 450
    • Organization数 35
    • リポジトリ数 630
    • CircleCIなどとも連携
 

本日伝えたいこと

  • 何をして導入を進め定着させたか
  • 人員・サポート方法・会社への説明・現場の声・活用方法
導入から定着させるまでの参考になれば
 

試験導入

2016/2 導入委員会立ち上げ
  • 3名で片手間
  • 小さいチームへの導入サポート
  • VMサーバー整備
  • 自分たちもGitHubの勉強をしながら
 
2016/5 新規プロジェクトで導入開始
  • 新プロジェクト立ち上げ時に導入
  • 50ライセンス購入
  • 利用者向けの説明会などサポート開始
 
2016/9 導入規模の拡大
  • 利用プロジェクトの規模拡大に合わせて100ライセンスに増量
  • 委員会3人中、1人はGitHub専任に
  • 物理サーバー整備
 
採用プロジェクトを増やすよりも、同プロジェクトの人数が増える方が導入がスムーズ
プロジェクトメンバー同士で教えあってくれるので。
 
2016/10 正式な物理サーバーを導入
  • CPU 8コア
  • メモリ 128GB
  • ディスク 4TB SSD
  • トラブルなし
 

会社に対し正式導入を提案

2016/12 正式な導入へ向けて
  • もうすでにSVNへは後戻りできないプロジェクトができ始めている
  • 利用しているプロジェクトからのポジティブな意見
  • サポート人数も増やす必要がある
ネガティブ意見への対応
  • SVNではダメなのか
    • 検索キーワードのトレンドグラフでSVNGitHubの推移比較を見せた
    • すでに2013年にはGitHubの方が上回っている と説得した
  • レビューの価値がよくわからない
    • ゲームアプリのビルドは数時間かかるので、ビルド前にレビューすることによって手戻りの時間コストを減らせる と、具体的なコスト見積もり数字を出して説得した
  • 無料のGitHubクローンではだめなのか
    • デファクトスタンダードで一番情報が得られやすい
    • 他のツールと連携しやすい(BTS/CI)
    • 代理店からサポートを受けられる
    • 無料のクローンがいいのであれば、OpenOfficeを皆使っているはずだが、使ってないでしょ? と説得
説明の結果、本格導入決定となった
 

正式導入

2017/1 新規プロジェクトはすべてGitHub
  • 改めてサポートを強化した
    • 使い方ドキュメントとの拡充
    • 社内ハンズオンの実施
      • 新しく使い始める人全員に実施
      • 1時間程度
      • 概要、プルリク、ツールの使い方
      • 教わる人は理解しやすくなるし、サポート側はその後のサポートコストが減る
    • トラブル対応
      • Gitのトラブル
      • 巻き戻り、コミットできない、プルできない
      • 呼ばれたらすぐに飛んで行って解決
 

アンケートからの振り返りと対策

2018/1 アンケート実施
  • Gitの理解度 - ほぼ全員が普段の操作は支障なく行えるようになった
  • 作業フロー - プルリクを作成する人が全体の85%
  • まあまあ使えている
 
エンジニア以外のGitHub利用について
  • ゲーム開発ではすべてのファイル(ゲームパラメータの設定ファイル、画像ファイル、コード)がリポジトリに入っているので、プランナーやデザイナーもGitHubを利用せざるを得ない
 
アンケートではエンジニア以外のメンバーからはネガティブなコメントも
  • 概念が難しい
  • 操作が大変
  • 衝突時やマージ時の解決が大変
  • 良く巻き戻りが発生して大変
  • ローカルの変更ファイルでプルできない
  • SVNに戻してほしい
 
非エンジニア向けに独自のGitHubクライアント(Pengit)を作成して対応した
  • Gitの学習コストの大幅な削減
  • 行える操作をある程度絞って簡略化
  • プルリク発行までの簡潔な作業フロー
  • 分かりやすい競合解決
  • 親しみやすいエクスプローラー風画面
  • 日本語によるUIやエラーメッセージ
 

定着へ

2018/10 ひととおりGitHubが浸透した状況
  • 社内ハンズオン依頼が減少
  • エンジニア以外からのトラブル対応依頼も減少
  • 終了PJの振り返りで効果が認められ始める
 
CircleCI Enterpriseの導入
  • Enterprise版(社内サーバー)
  • ローカルのDockerレジストリ
  • ローカルでセキュアな環境
  • GHEとの最高の組み合わせ
 
GHEとPengitの持つデータの活用
  • 作業内容の可視化
    • プルリク数、Issue数、コメント数
  • プロジェクトごとの特性などを分析
    • うまく進んでいるPJとの比較など
  • データは蓄積しつつある状態
    • 何が改善につながるのか分析中
 

まとめ

  • 規模が拡大しそうな小さいPJへの導入がおすすめ
  • ネガティブ意見への丁寧な説明の準備
  • 利用し始める人へのハンズオンの実施
  • アンケート、振り返りの実施
  • (理解が深まらないなら)サポートツールで対応
  • CircleCIなど他のシステムとの連携
  • GHEの持つデータの活用
 

講演2

根本 竜也[マクニカネットワークス]
 
代理店の講演
内容は、ソフトウェアリリースプラットフォーム JFrog の宣伝
 
JFrogはソフトウェアリリースのための複数のツールの集合である
 

エンジニア人生と定年退職、人生100年時代のエンジニアの生き方

 

講演者

よしおかひろたか[東京大学大学院]
DEC, Oracleに勤務後、MiracleLinux創業メンバーとなる
未踏クリエータ
楽天 技術理事
60歳で定年退職後は大学院に入りひたすら論文を読み、問題を発見する訓練を続ける
 
散漫とした講演だったが、70’以降のコンピュータ歴史年表は感慨深いものがあったのでまとめておく
できごと
 
1971
マイクロプロセッサ Intel 4004
世界初の1チップマイクロプロセッサ
パーソナルコンピューター発展の基礎
1975
Microsoft BASIC
使いやすいインタプリタ言語
1977
初期のパーソナルコンピューター
1977
信用できないネットワーク上でもセキュアな通信ができるように
1980
LAN
1981
豊富なソフトウェアでエコシステムを形成、企業向けコンピューター製造販売最大手がPC市場に殴り込み
個人向けのグラフィカルなユーザーインターフェースのコンピュータ
1988
Unicode 提案
ソフトウェア国際化の嚆矢
1989
HTML, HTTP, UML 提案
Webの起源
1991
Web site が作られるように
 
1993
NCSA Mosaic
グラフィカルなブラウザ
1994
1995
 
1998
大事なソースコードOSSにしちゃってどうやって儲けるの?講演者は当時は理解できなかった
2000
ITバブル
 
2004
 
2007
講演者は出た当時、影響力を過小評価してしまった
2009
 
2012
深層学習
画像認識の分野で画期的な精度を実現したことで一気にブームに