Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

LODEO開発ストーリー

2,026 views

Published on

動画広告プロダクトLODEO

Published in: Technology
  • Be the first to comment

LODEO開発ストーリー

  1. 1. 動画広告プロダクト LODEO開発 Story 株式会社サイバーエージェント 新田 智啓 JavaエンジニアがScalaでプロダクトを開発した話
  2. 2. Topic • LODEOとは?アドテクとは? • LODEOとは? • オンライン広告のテクノロジー • アドテクスタジオについて • LODEOの開発を支えたアドテクスタジオの紹介 • LODEO開発のStory • 開発はどのように進んだのか?開発プロセス概要 • アドテクスタジオの関わり • JavaからScalaへ • ScalaとJavaの違いのポイント • Scalaを選んだわけ
  3. 3. ! 新田 智啓 (shinden tomohiro) ! LODEO開発責任者 ! 2014年2月サイバーエージェント入社 シニアJavaエンジニア(十数年) 初級Scalaエンジニア(実務5ヶ月) ! 元SIer顧客先常駐型 開発業務 在庫管理システム・交通系ICカード・契約管理システム POSシステム・SNSサイト・ソーシャルゲーム などなど ! 好きな言語 : Java、Scala
  4. 4. LODEOとは ! ・動画広告配信プロダクト ! ・スマートフォンで動画再生 ! ・高速な動画再生開始
  5. 5. 動画広告市場予測 2014年の動画広告市場は前年比約2倍の300億円規模 2014/10/22 発表記事
  6. 6. 広告配信システム 1日に数十億リクエスト以上捌く ユーザマッチした配信ロジック データ分析・推論 数十ミリ秒の世界と数ミリ秒の改善
  7. 7. アドテクスタジオとは 広告でのアドテクに関するアドテク本部という集まりの中で その中でもプロダクト開発を中心とした集まり ! メンバーはエンジニアが中心となっており 会社やプロジェクトに縛られず アドテクの開発をキーワードに集まった職場 ! エンジニア総勢 200名くらい
  8. 8. アドテクスタジオの雰囲気
  9. 9. LODEO開発 Story
  10. 10. LODEO開発 • 2014/10 プロジェクトスタート • 2014/10 中旬に開発の承認 • 2014/11 開発開始(この時点でのエンジニア3名) • 2015/1 リリース(この時点でのエンジニア12名) • 開発期間 2014/11∼2015/1 (3ヶ月) ! • リリースまでに開発するもの ・配信サーバ・計測サーバ・集計バッチ ・スマートフォン用動画プレイヤーモジュール ・インフラなどなど
  11. 11. LODEO開発メンバー ◆Scala経験ありメンバー Scala 読書半年・実務1ヶ月(私) 入社後の配属からずっとScala(新卒) Scala 実務半年(ムードメーカー) 開発後半にさらに2名追加 ! ◆Scala経験なしメンバー Javaシニアエンジニア(3∼5人) ・プログラム好き、Scala興味あり ・火事場もOK
  12. 12. LODEOのScala率 (2015年2月時点) Scala 91.3%
  13. 13. 技術と開発環境 Scala Spray Scalikejdbc Gatling SBT GitHub HuBoard Slack Chatwork AeroSpike MySQL RedShift Fluentd AWS OpenStack GoogleAppsScript Chef Capistrano CircleCI Flyway TypeScript Vue.js TwitterBootStrap
  14. 14. LODEOの開発スタイル
  15. 15. 開発前半期 • KPTを週1回 • 人が少ないので直接やりとり • チケット管理などは無し • コードの中で大きな流れを作る • スタジオの他のチームの知見をあつめる • チームビルディング • GitHubに情報を集約 • スケジュールベースのタスク割り当て
  16. 16. 開発中盤∼後半期 ! • KPTを週1回 • Huboardによるチケット管理 • コミュニケーションツールをSlackに移行 • エンジニアがコラボレーションし易い環境 • コードの中で他機能とのインターフェイス整理 • 個人の知識に合わせたスケジュール&タスク • コードレビューベースのマージ
  17. 17. 再利用回数を考える コミュニケーションコストと開発 ! 開発開始時3人 最終的に関わっているエンジニアは12人 ! ↓ 見える化する・集約する・蓄積する
  18. 18. 見える化・集約・蓄積 GitHubへの集約とコラボレーションツール ! 仕様・作業 → Issue → チケット看板管理 数日単位で移動できるチケット粒度 Ready - Working - Done Workingになった時に終了予定を記入 プルリクエスト → レビュー → マージ 仕様確認 → GitHub Wiki (Wiki検索プラグイン) 項目整理やテスト仕様書はGoogle Spred Sheet
  19. 19. 開発サイクルの最大化 デプロイなどの自動化 朝会での流動的な優先度変更 KPTで上がったTODOの実行 ↓ フィードバックのキャッチアップ と 動き出しを早くする
  20. 20. 開発サイクルの最大化 何を作るかでなく何をしたいかと伝える ! 開発リーダーだけが 考えた改善案では限界がある ! 現場で感じている不満やアイデアを どれだけ素早く取り込んで実行出来るか
  21. 21. ReleaseDevelopers UnitTests & Deploy Builds Changes Planning Tasks Commits 開発サイクル
  22. 22. 個人に焦点を当てる 今までの経験値を最大限に活かす方法 スケジュールの中で貯まる個々のナレッジ 期待と結果の検証 クリティカルパスの察知度 開発だけでなくビジネスを考えた優先順位 ! ビジネスの価値を理解するエンジニア
  23. 23. アジャイルという型なのか? アジャイルなのか? ! 型に囚われた時点で 最大パフォーマンスでは無くなる ! 目的と手段が逆転してはならない
  24. 24. JavaからScala 開発 Tips
  25. 25. 移行しやすさ ! 静的型付け言語 Javaのライブラリなどをそのまま活用できる コードを簡潔に記述できる 型変換なども明示的、暗黙的に出来る 関数っぽく書けなくてもJavaっぽく書けば動く 修飾子や演算子などが似ている JavaからScala
  26. 26. class Person { private Integer id; private String name; public void setId(Integer id) { this.id = id; } public String getId() { return this.id; } public void setName(Integer id) { this.id = id; } public String getName() { return this.name; } } Java Scala case class Person( id:Int , name:String )
  27. 27. interface class static import void equals == switch - case a > b ? a : b Java Scala trait class object import + static import Unit == eq match - case if (a > b) a else b implicit val ・ var
  28. 28. JavaからScala 意識するべき基本ポイント ! イミュータブルな値(val)を徹底 関数型を意識する javaのライブラリを使うときはラッパーを作る nullの使用禁止(Optionの使用) scalaのimportはjavaのimportとちょっと違う  便利と誘惑 implicit
  29. 29. JavaからScala 便利と誘惑 implicitの機能 ! 暗黙の型変換 (implicit conversion) Javaでのオートボクシングを無限にパワーアップさせたような機能 ! 暗黙クラス (implicit class) newで型変換されることなく型にメソッドを追加したように使える機能 ! 暗黙のパラメータ (implicit parameter) 引数を渡すことを省略出来だけの機能と思ったら大間違いな機能
  30. 30. JavaからScala 難しいポイント ! JavaよりIDEが助けてくれない モナドなどを考えだすと敷居が上がる 完全に関数型寄りにしてはScalaの意味がない implicit の黒魔術化 フルでScala機能を使うと新規の未経験メンバの敷居が上がる
  31. 31. Scala経験無しメンバー ! Scalaはやったことがないが 大丈夫だったのか? ! ↓ ! 結果、Scala言語的な問題なし!
  32. 32. Scala経験無しメンバー • Scalaっぽい書き方が出来るようになるまでには少し 時間がかかった。 • 今見ると直したい(どんな言語でコードを書いても
 一緒なのでScalaのせいじゃ無いかも?) • プロジェクトの進め方や仕様確認のほうが重要だった • うまく関数っぽく書けない時でもJavaっぽく書いて 動かせるのでクリティカルパスにはならない
  33. 33. JavaからScala 感想 ! • シンプルに書けていい! • 値を途中で書き換えないので、狭いスコープだけを 意識すればよく読みやすい • やっぱり静的型付け言語はうれしい • 記号が調べれない・・・
 (Googleさん記号を検索出来るようにして・・・) • コンパイル遅い・・・
  34. 34. JavaからScala機能 難しい implicit >>>モナド>>> ファーストクラス関数の使いこなし> ! >>>> [本当のscalaの壁] >>>> ! 主流のフレームワークの知識>>>scala特有の修飾子 >>>val(定数)など再帰記述 >> java to scalaの修飾子置き換え理解 易しい
  35. 35. 困ったらコミュニティ活用 アドテクスタジオでは 物理的な場所が1箇所にプロダクトが集合しているため 別プロダクトの知見を気軽に聞ける ! 雑談の機会
  36. 36. 勉強会 Scala勉強会 Akka勉強会 Functional Programming in Scala読書会 Q & A サイト
  37. 37. Scalaの導入障壁 ! 導入障壁への対応方法 ! Scala導入が目的にならず 手段としてのScalaを説明できるようになること ! メリットを理解した上で Javaを採用するべきかScalaを導入するべきか判断する ! 人に説明出来るだけの算段が必須
  38. 38. なぜScalaを選んだか?
  39. 39. やってみたかったから!
  40. 40. なぜScalaを選んだか? 導入実績の多さ ! 簡潔でバグの入りにくいコード ! アドテクで良くあるシンプルなロジックと 低レイテンシにマッチした言語設計 ! Javaの資産のほとんどを活かせる
  41. 41. エンジニアの権限と信頼 アドテクスタジオではScalaの導入障壁はなかった ! 利用する技術を全てエンジニアだけで決めることができる (メンバー内でコンセンサスを取ることは必須) ! 信頼されていないということは 最も大きなコスト ! エンジニアならプロダクトで返す 信頼を積み重ねるサイクルを探す
  42. 42. Scala試してみませんか? Javaエンジニアであれば 馴染みのある型の強さを得ながら モダンで簡潔なコードを書くことが出来ます ! プログラミングの違った側面やデザインを学べます キャリアとして次のステップを探れます 採用されているされているプロダクトも沢山あります 実績も出てきています ! この流れに乗ってみてはどうだろうか?
  43. 43. LODEO開発 短期開発のまとめ ! アドテクスタジオというコミュニティの支え JavaエンジニアならScalaを恐れる必要はない エンジニアとしてScalaをやるチャンス 開発体制の変化と改善サイクル ビジネス側とエンジニア側の信頼関係

×