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.
オプトグループ Demand Side Science ㈱
代表取締役 平岩 二郎
Scala採用の背景とその後
at hitomedia night 2015/12/16
株式会社オプト
Demand Side Science ㈱(以下DSS)
インターネット広告代理店
- 業界2位
エンジニア向けイベントも
定期的にやってます
- 市ヶ谷Geek★Night
オプトグループのアドテク系開発会社。オプトとの関係値...
Scalaとは
Scalaはオブジェクト指向言語と関数型言語の特徴を統合したマルチパラ
ダイムのプログラミング言語である。名前の「Scala」は英語の
「scalable language」に由来するものである。(wikipediaより)
主な...
Scalaコード例(playframework利用)
type TagId = Int
case class SampleTagForm(
tagId: TagId,
layoutId: Option[LayoutId],
mode: Opti...
Scalaを採用した理由(創業当時)
新しく会社もプロダクトも作りはじめる時期だったので
自由に決められた
(オプトグループ入りする前は、オーダーメイドでDSPを作る会社でした)
DSS創業時にScala採用を決定
Scalaを選んだ理由(創業...
Scalaを採用している理由(いま)
- Scala本体、sbt、各種ライブラリ
- Javaの資産も使える(maven centralなど)
- Scala Matsuri
- 利用者も増えてきているかも
エコシステムやコミュニティの充実
-...
Scalaコード例(再掲)
type TagId = Int
case class SampleTagForm(
tagId: TagId,
layoutId: Option[LayoutId],
mode: Option[Int],
widt...
改善点や課題
- ベストプラクティスが確立されていない分野が多い
- Scala本体も含めアップデートがよくある
- 大分安定してはいるが、バグもなくはない
- (新しいもの好きか、ruby文化に慣れている人だと良いかも)
枯れてない
- We...
まとめ
- 打算がないと導入する意味がない
- ある程度勢いがないと導入できない
新言語導入は打算と勢いで
- 実際にその言語を使う人達が
幸せになれないと意味がない
現場の人たちが
幸せになれる選択を
Scala非公式マスコットキャラクター「...
オプトテクノロジーズに参画したい
Scala(などの)エンジニア大募集中!
オプトでは横断的なエンジニア組織である
オプトテクノロジーズ
を組成中です
ご清聴ありがとうございました!
さいごに
Upcoming SlideShare
Loading in …5
×

Scala採用の背景とその後 @ hitomedia night #5

636 views

Published on

hitomedia night #5 2015/12/16 登壇資料

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Scala採用の背景とその後 @ hitomedia night #5

  1. 1. オプトグループ Demand Side Science ㈱ 代表取締役 平岩 二郎 Scala採用の背景とその後 at hitomedia night 2015/12/16
  2. 2. 株式会社オプト Demand Side Science ㈱(以下DSS) インターネット広告代理店 - 業界2位 エンジニア向けイベントも 定期的にやってます - 市ヶ谷Geek★Night オプトグループのアドテク系開発会社。オプトとの関係値急上昇中。 自己紹介 平岩 二郎 @hiraiva Demand Side Science ㈱ 代表取締役 兼 PM 兼 エンジニア
  3. 3. Scalaとは Scalaはオブジェクト指向言語と関数型言語の特徴を統合したマルチパラ ダイムのプログラミング言語である。名前の「Scala」は英語の 「scalable language」に由来するものである。(wikipediaより) 主な特長 - 関数型にもオブジェクト指向にも書ける - JVM上で動く言語 - 静的型付けかつ型機能が強力 - 言語機能が多い - シンタックスに多様性がある - Javaの資産が使える - コンパイルが遅い
  4. 4. Scalaコード例(playframework利用) type TagId = Int case class SampleTagForm( tagId: TagId, layoutId: Option[LayoutId], mode: Option[Int], width: Int, height: Int ) { val tagMode = mode.flatMap(m => TagMode.valueOf(m.toShort)).getOrElse(TagMode.Production) } val sampleTagForm = Form( mapping( "pid" -> number, "lid" -> optional(number), "md" -> optional(number), "w" -> number, "h" -> number )(SampleTagForm.apply)(SampleTagForm.unapply)) def sampleTag = Action.async { request => val browser = makeBrowser(request) sampleTagForm.bindFromRequest(request.queryString).fold( { _ => Future(respondHtml(bodyHtml("エラーレスポンス"))) }, { formData => for { tag <- tagService.getTag(formData.tagId) po <- tagService.getTagOption(formData.tagId) layout <- selectLayout(tag, formData.layoutId) } yield { val body = (for { p <- tag; ly <- layout } yield { SampleTag.sampleTag(p, ly, po, browser, Protocol(Some(browser.location)), formData.tagMode, DateTime.now) }) getOrElse { "エラーレスポンス” } respondHtml(bodyHtml(body)) } }) } フォーム定義 コントローラ アクション
  5. 5. Scalaを採用した理由(創業当時) 新しく会社もプロダクトも作りはじめる時期だったので 自由に決められた (オプトグループ入りする前は、オーダーメイドでDSPを作る会社でした) DSS創業時にScala採用を決定 Scalaを選んだ理由(創業当時) - やりたい人がいた - 技術ベンチャーとしてアピールポイントになると思った - なんかすごそうと思った(勢い)
  6. 6. Scalaを採用している理由(いま) - Scala本体、sbt、各種ライブラリ - Javaの資産も使える(maven centralなど) - Scala Matsuri - 利用者も増えてきているかも エコシステムやコミュニティの充実 - 型安全にでき、型安全を奨励する仕組みや文化がある - ボイラープレートが減らせる便利な言語機能がある - 関数型・オブジェクト型の両面による抽象化ができる - (コンパイル中は別タスクをすることで自己マネジメント能力UP) エンジニアとしてメリットを感じる - Scalaがきっかけで応募してくれる層がある - 候補者の量を増やすことは難しいが、質は上げやすい DSS的には採用にプラスに働いている
  7. 7. Scalaコード例(再掲) type TagId = Int case class SampleTagForm( tagId: TagId, layoutId: Option[LayoutId], mode: Option[Int], width: Int, height: Int ) { val tagMode = mode.flatMap(m => TagMode.valueOf(m.toShort)).getOrElse(TagMode.Production) } val sampleTagForm = Form( mapping( "pid" -> number, "lid" -> optional(number), "md" -> optional(number), "w" -> number, "h" -> number )(SampleTagForm.apply)(SampleTagForm.unapply)) def sampleTag = Action.async { request => val browser = makeBrowser(request) sampleTagForm.bindFromRequest(request.queryString).fold( { _ => Future(respondHtml(bodyHtml("エラーレスポンス"))) }, { formData => for { tag <- tagService.getTag(formData.tagId) po <- tagService.getTagOption(formData.tagId) layout <- selectLayout(tag, formData.layoutId) } yield { val body = (for { p <- tag; ly <- layout } yield { SampleTag.sampleTag(p, ly, po, browser, Protocol(Some(browser.location)), formData.tagMode, DateTime.now) }) getOrElse { "エラーレスポンス” } respondHtml(bodyHtml(body)) } }) } フォーム定義 コントローラ アクション
  8. 8. 改善点や課題 - ベストプラクティスが確立されていない分野が多い - Scala本体も含めアップデートがよくある - 大分安定してはいるが、バグもなくはない - (新しいもの好きか、ruby文化に慣れている人だと良いかも) 枯れてない - Webアプリならサーバ側とクライアント側を分離する(SPA) - プロジェクトを適切に分割する - コンパイル時間が特に長くなる機能の利用はほどほどに - (気にしない。コンパイル時間を潰す用のタスク等を常に用意する) コンパイルが遅い - scalazやshapelessの利用 - ある程度、圏論などの前提知識が必要 - チーム内でコンセンサスが取れれば良い Functional Programmingをどこまで奨励するか
  9. 9. まとめ - 打算がないと導入する意味がない - ある程度勢いがないと導入できない 新言語導入は打算と勢いで - 実際にその言語を使う人達が 幸せになれないと意味がない 現場の人たちが 幸せになれる選択を Scala非公式マスコットキャラクター「Scalaちゃん」
  10. 10. オプトテクノロジーズに参画したい Scala(などの)エンジニア大募集中! オプトでは横断的なエンジニア組織である オプトテクノロジーズ を組成中です ご清聴ありがとうございました! さいごに

×