SlideShare a Scribd company logo
1 of 19
Download to read offline
Scala@SmartNews
Ad Frontend を Scala で書いた話
@kjim
自己紹介
• 村石恵示
• スマートニュース (2014/09入社)
• SmartNews Ads Engineer
• 基本は Java な人
アドチームのミッション…
12月に最高の広告
プロダクトをリリースする
Ads as Content
Web Framework ?
• クラスのオートリロード(ホットリローディング)は必須。
• 静的型付けによるサポート欲しい。

動かす前にある程度動く担保を作りたい。DB拡張に追随する時にコンパイラにエラーでナビゲートして欲しい。
• 宣言的ルーティング定義。
• 宣言的フォームバリデーション定義。
• DBスキーマからDataAccess層を生成したい。
• パフォーマンスはそんなに追求しない。
• Scala アリでは…
Scala + Play2 + Slick
Play2
宣言的なルーティング設定
Play2
宣言的なフォームバリデーション定義
Slick
DataAccess層を自動生成
• スキーマのバージョン管理は flyway

Evolution は使ってない
• flyway で管理しているスキーマから Slick のテーブルクラスをリバースで
自動生成。生成するクラスはSourceCodeGeneratorをカスタマイズして
複数の .scala ファイルを生成するようにしている。
• ただし、自動生成したクラスは直接サービス層から使わずRepository層の
内側で利用
• 更新系は普通にSlickのメソッドを利用するが、参照系は普通にSQL書い
てる。
Scala
On the fly なコードを瞬時に書ける
• Option

Some(true), Some(false), Some(null), None

メソッドの仕様を明示できる

NullPointerException回避
• case class

パターンマッチ

便利メソッド、永続化など
• Collection, Future, …
• 業務系アプリを作るのにも最適な言語
ただし、
Scala最大のツラミは
コンパイル速度
まとめ
まとめ
• Scala + Play2 + Slick は開発のリズムを作りやすい
• 型の安心感
• 宣言的プログラミング
• 言語標準の豊かなAPI
• Scala業務系アプリを作るのにも最適な言語
• Scalaはマジでコンパイルが遅い
SmartNews
世界中の良質な情報を必要な人に送り届ける
• 一緒にスマートニュースを作ってくれる仲間を
募集しています。

http://about.smartnews.com/ja/careers/
• オフィススペースを提供していますのでお声掛
けください。
ありがとうございました

More Related Content

What's hot

20170210 jawsug横浜(AWSタグ)
20170210 jawsug横浜(AWSタグ)20170210 jawsug横浜(AWSタグ)
20170210 jawsug横浜(AWSタグ)Toshihiro Setojima
 
6リージョン同時75万接続のメッセージ配信基盤をCloudFormationとCapistranoで3日で構築した話
6リージョン同時75万接続のメッセージ配信基盤をCloudFormationとCapistranoで3日で構築した話6リージョン同時75万接続のメッセージ配信基盤をCloudFormationとCapistranoで3日で構築した話
6リージョン同時75万接続のメッセージ配信基盤をCloudFormationとCapistranoで3日で構築した話Ryuta Otaki
 
JAWS DAYS 2017 LT 古きを捨て新しきに近づける
JAWS DAYS 2017 LT 古きを捨て新しきに近づけるJAWS DAYS 2017 LT 古きを捨て新しきに近づける
JAWS DAYS 2017 LT 古きを捨て新しきに近づけるTetsuya Mase
 
20181108 kashiwa chamberofcommerce
20181108 kashiwa chamberofcommerce20181108 kashiwa chamberofcommerce
20181108 kashiwa chamberofcommerce桂一 中山
 
JavaからScalaへ
JavaからScalaへJavaからScalaへ
JavaからScalaへtakezoe
 
jawsdays 2017 新訳-とある設計士の雲設計定石目録_3
jawsdays 2017 新訳-とある設計士の雲設計定石目録_3jawsdays 2017 新訳-とある設計士の雲設計定石目録_3
jawsdays 2017 新訳-とある設計士の雲設計定石目録_3a kyane
 
クラウドネイティブ化する未来
クラウドネイティブ化する未来クラウドネイティブ化する未来
クラウドネイティブ化する未来Keisuke Nishitani
 
JAWS-UG アーキテクチャ専門支部(ハイブリッド分科会) #9 EC2 Run Commnadのいいところ
JAWS-UG アーキテクチャ専門支部(ハイブリッド分科会) #9 EC2 Run CommnadのいいところJAWS-UG アーキテクチャ専門支部(ハイブリッド分科会) #9 EC2 Run Commnadのいいところ
JAWS-UG アーキテクチャ専門支部(ハイブリッド分科会) #9 EC2 Run CommnadのいいところNobuhiro Nakayama
 
はじめてのBluemixでシングルサインオン ~ 希望編!
はじめてのBluemixでシングルサインオン ~ 希望編!はじめてのBluemixでシングルサインオン ~ 希望編!
はじめてのBluemixでシングルサインオン ~ 希望編!Kazumi IWANAGA
 
Azure Functionsでサーバーレスアプリケーション構築
Azure Functionsでサーバーレスアプリケーション構築Azure Functionsでサーバーレスアプリケーション構築
Azure Functionsでサーバーレスアプリケーション構築ryosuke matsumura
 
Serverless Architecture Overview #cdevc
Serverless Architecture Overview #cdevcServerless Architecture Overview #cdevc
Serverless Architecture Overview #cdevcMasahiro NAKAYAMA
 
Swaggerで始めるモデルファーストなAPI開発
Swaggerで始めるモデルファーストなAPI開発Swaggerで始めるモデルファーストなAPI開発
Swaggerで始めるモデルファーストなAPI開発Takuro Sasaki
 
20170111above the cloud_vol2
20170111above the cloud_vol220170111above the cloud_vol2
20170111above the cloud_vol2Naomi Yamasaki
 
IoT(Bluetooth mesh) × サーバーレス
IoT(Bluetooth mesh) × サーバーレスIoT(Bluetooth mesh) × サーバーレス
IoT(Bluetooth mesh) × サーバーレスMasahiro NAKAYAMA
 
マイクロサービス運用の所感 #m3dev
マイクロサービス運用の所感 #m3devマイクロサービス運用の所感 #m3dev
マイクロサービス運用の所感 #m3devKazuhiro Sera
 
AWSで始めるサーバレスな RESTful API システム
AWSで始めるサーバレスな RESTful API システムAWSで始めるサーバレスな RESTful API システム
AWSで始めるサーバレスな RESTful API システムMasayuki Kato
 
Single Command Deployのための gradle-aws-plugin講座
Single Command Deployのための gradle-aws-plugin講座Single Command Deployのための gradle-aws-plugin講座
Single Command Deployのための gradle-aws-plugin講座都元ダイスケ Miyamoto
 

What's hot (19)

20170210 jawsug横浜(AWSタグ)
20170210 jawsug横浜(AWSタグ)20170210 jawsug横浜(AWSタグ)
20170210 jawsug横浜(AWSタグ)
 
6リージョン同時75万接続のメッセージ配信基盤をCloudFormationとCapistranoで3日で構築した話
6リージョン同時75万接続のメッセージ配信基盤をCloudFormationとCapistranoで3日で構築した話6リージョン同時75万接続のメッセージ配信基盤をCloudFormationとCapistranoで3日で構築した話
6リージョン同時75万接続のメッセージ配信基盤をCloudFormationとCapistranoで3日で構築した話
 
JAWS DAYS 2017 LT 古きを捨て新しきに近づける
JAWS DAYS 2017 LT 古きを捨て新しきに近づけるJAWS DAYS 2017 LT 古きを捨て新しきに近づける
JAWS DAYS 2017 LT 古きを捨て新しきに近づける
 
20181108 kashiwa chamberofcommerce
20181108 kashiwa chamberofcommerce20181108 kashiwa chamberofcommerce
20181108 kashiwa chamberofcommerce
 
JavaからScalaへ
JavaからScalaへJavaからScalaへ
JavaからScalaへ
 
jawsdays 2017 新訳-とある設計士の雲設計定石目録_3
jawsdays 2017 新訳-とある設計士の雲設計定石目録_3jawsdays 2017 新訳-とある設計士の雲設計定石目録_3
jawsdays 2017 新訳-とある設計士の雲設計定石目録_3
 
クラウドネイティブ化する未来
クラウドネイティブ化する未来クラウドネイティブ化する未来
クラウドネイティブ化する未来
 
JAWS-UG アーキテクチャ専門支部(ハイブリッド分科会) #9 EC2 Run Commnadのいいところ
JAWS-UG アーキテクチャ専門支部(ハイブリッド分科会) #9 EC2 Run CommnadのいいところJAWS-UG アーキテクチャ専門支部(ハイブリッド分科会) #9 EC2 Run Commnadのいいところ
JAWS-UG アーキテクチャ専門支部(ハイブリッド分科会) #9 EC2 Run Commnadのいいところ
 
はじめてのBluemixでシングルサインオン ~ 希望編!
はじめてのBluemixでシングルサインオン ~ 希望編!はじめてのBluemixでシングルサインオン ~ 希望編!
はじめてのBluemixでシングルサインオン ~ 希望編!
 
IaC事始め
IaC事始めIaC事始め
IaC事始め
 
Jaws days2017-ops jaws-2
Jaws days2017-ops jaws-2Jaws days2017-ops jaws-2
Jaws days2017-ops jaws-2
 
Azure Functionsでサーバーレスアプリケーション構築
Azure Functionsでサーバーレスアプリケーション構築Azure Functionsでサーバーレスアプリケーション構築
Azure Functionsでサーバーレスアプリケーション構築
 
Serverless Architecture Overview #cdevc
Serverless Architecture Overview #cdevcServerless Architecture Overview #cdevc
Serverless Architecture Overview #cdevc
 
Swaggerで始めるモデルファーストなAPI開発
Swaggerで始めるモデルファーストなAPI開発Swaggerで始めるモデルファーストなAPI開発
Swaggerで始めるモデルファーストなAPI開発
 
20170111above the cloud_vol2
20170111above the cloud_vol220170111above the cloud_vol2
20170111above the cloud_vol2
 
IoT(Bluetooth mesh) × サーバーレス
IoT(Bluetooth mesh) × サーバーレスIoT(Bluetooth mesh) × サーバーレス
IoT(Bluetooth mesh) × サーバーレス
 
マイクロサービス運用の所感 #m3dev
マイクロサービス運用の所感 #m3devマイクロサービス運用の所感 #m3dev
マイクロサービス運用の所感 #m3dev
 
AWSで始めるサーバレスな RESTful API システム
AWSで始めるサーバレスな RESTful API システムAWSで始めるサーバレスな RESTful API システム
AWSで始めるサーバレスな RESTful API システム
 
Single Command Deployのための gradle-aws-plugin講座
Single Command Deployのための gradle-aws-plugin講座Single Command Deployのための gradle-aws-plugin講座
Single Command Deployのための gradle-aws-plugin講座
 

Similar to Scala@SmartNews AdFrontend を Scala で書いた話

実践!AWSクラウドデザインパターン
実践!AWSクラウドデザインパターン実践!AWSクラウドデザインパターン
実践!AWSクラウドデザインパターンHiroyasu Suzuki
 
Movable typeseminar 20120925
Movable typeseminar 20120925Movable typeseminar 20120925
Movable typeseminar 20120925Six Apart
 
JAWS-UGアーキテクチャ専門支部 ServerlessConfレポート
JAWS-UGアーキテクチャ専門支部 ServerlessConfレポートJAWS-UGアーキテクチャ専門支部 ServerlessConfレポート
JAWS-UGアーキテクチャ専門支部 ServerlessConfレポート真吾 吉田
 
May the FaaS be with us!!
May the FaaS be with us!!May the FaaS be with us!!
May the FaaS be with us!!真吾 吉田
 
講演資料「Azure AI Update Ignite Fall 2021を振り返ろう!」
講演資料「Azure AI Update Ignite Fall 2021を振り返ろう!」講演資料「Azure AI Update Ignite Fall 2021を振り返ろう!」
講演資料「Azure AI Update Ignite Fall 2021を振り返ろう!」Kohei Ogawa
 
Service Cloud Trailblazers #5
Service Cloud Trailblazers #5Service Cloud Trailblazers #5
Service Cloud Trailblazers #5sfdc_sctb
 
[VMware Partner Exchange Tokyo 14Apr2014] ネットアップセッション資料
[VMware Partner Exchange Tokyo 14Apr2014] ネットアップセッション資料[VMware Partner Exchange Tokyo 14Apr2014] ネットアップセッション資料
[VMware Partner Exchange Tokyo 14Apr2014] ネットアップセッション資料NetApp Japan
 
サーバーレスの今とこれから
サーバーレスの今とこれからサーバーレスの今とこれから
サーバーレスの今とこれから真吾 吉田
 
サーバーレスの話
サーバーレスの話サーバーレスの話
サーバーレスの話真吾 吉田
 
Microsoft Ignite 2019 最新アップデート - Azure Big Data Services を俯瞰的に眺める
Microsoft Ignite 2019 最新アップデート - Azure Big Data Services を俯瞰的に眺めるMicrosoft Ignite 2019 最新アップデート - Azure Big Data Services を俯瞰的に眺める
Microsoft Ignite 2019 最新アップデート - Azure Big Data Services を俯瞰的に眺めるDaiyu Hatakeyama
 
【日本語版】Styler: Our Journey to GCP
【日本語版】Styler: Our Journey to GCP【日本語版】Styler: Our Journey to GCP
【日本語版】Styler: Our Journey to GCPMichaelFindlater
 
Azure Antenna AI 概要
Azure Antenna AI 概要Azure Antenna AI 概要
Azure Antenna AI 概要Miho Yamamoto
 
2019年9月18日開催AWS Japan × Atlassianセミナー_セッション2「AmazonカルチャーとDevOps」
2019年9月18日開催AWS Japan × Atlassianセミナー_セッション2「AmazonカルチャーとDevOps」2019年9月18日開催AWS Japan × Atlassianセミナー_セッション2「AmazonカルチャーとDevOps」
2019年9月18日開催AWS Japan × Atlassianセミナー_セッション2「AmazonカルチャーとDevOps」アトラシアン株式会社
 
20130226 Amazon Web Services 勉強会(新宿)
20130226 Amazon Web Services 勉強会(新宿)20130226 Amazon Web Services 勉強会(新宿)
20130226 Amazon Web Services 勉強会(新宿)真吾 吉田
 
Realm platform2019
Realm platform2019Realm platform2019
Realm platform2019昌桓 李
 
いるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevio
いるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevioいるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevio
いるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdeviofd0
 
Scala: Mobile Backend on AWS
Scala: Mobile Backend on AWSScala: Mobile Backend on AWS
Scala: Mobile Backend on AWScmaraiyusuke
 
パララックスでレスポンシブでJ query mobileなサイトのつくりかた
パララックスでレスポンシブでJ query mobileなサイトのつくりかたパララックスでレスポンシブでJ query mobileなサイトのつくりかた
パララックスでレスポンシブでJ query mobileなサイトのつくりかたShumpei Shiraishi
 
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】DeNA
 

Similar to Scala@SmartNews AdFrontend を Scala で書いた話 (20)

実践!AWSクラウドデザインパターン
実践!AWSクラウドデザインパターン実践!AWSクラウドデザインパターン
実践!AWSクラウドデザインパターン
 
Movable typeseminar 20120925
Movable typeseminar 20120925Movable typeseminar 20120925
Movable typeseminar 20120925
 
JAWS-UGアーキテクチャ専門支部 ServerlessConfレポート
JAWS-UGアーキテクチャ専門支部 ServerlessConfレポートJAWS-UGアーキテクチャ専門支部 ServerlessConfレポート
JAWS-UGアーキテクチャ専門支部 ServerlessConfレポート
 
May the FaaS be with us!!
May the FaaS be with us!!May the FaaS be with us!!
May the FaaS be with us!!
 
講演資料「Azure AI Update Ignite Fall 2021を振り返ろう!」
講演資料「Azure AI Update Ignite Fall 2021を振り返ろう!」講演資料「Azure AI Update Ignite Fall 2021を振り返ろう!」
講演資料「Azure AI Update Ignite Fall 2021を振り返ろう!」
 
Service Cloud Trailblazers #5
Service Cloud Trailblazers #5Service Cloud Trailblazers #5
Service Cloud Trailblazers #5
 
[VMware Partner Exchange Tokyo 14Apr2014] ネットアップセッション資料
[VMware Partner Exchange Tokyo 14Apr2014] ネットアップセッション資料[VMware Partner Exchange Tokyo 14Apr2014] ネットアップセッション資料
[VMware Partner Exchange Tokyo 14Apr2014] ネットアップセッション資料
 
Infrastructure as Code (IaC) 談義 2022
Infrastructure as Code (IaC) 談義 2022Infrastructure as Code (IaC) 談義 2022
Infrastructure as Code (IaC) 談義 2022
 
サーバーレスの今とこれから
サーバーレスの今とこれからサーバーレスの今とこれから
サーバーレスの今とこれから
 
サーバーレスの話
サーバーレスの話サーバーレスの話
サーバーレスの話
 
Microsoft Ignite 2019 最新アップデート - Azure Big Data Services を俯瞰的に眺める
Microsoft Ignite 2019 最新アップデート - Azure Big Data Services を俯瞰的に眺めるMicrosoft Ignite 2019 最新アップデート - Azure Big Data Services を俯瞰的に眺める
Microsoft Ignite 2019 最新アップデート - Azure Big Data Services を俯瞰的に眺める
 
【日本語版】Styler: Our Journey to GCP
【日本語版】Styler: Our Journey to GCP【日本語版】Styler: Our Journey to GCP
【日本語版】Styler: Our Journey to GCP
 
Azure Antenna AI 概要
Azure Antenna AI 概要Azure Antenna AI 概要
Azure Antenna AI 概要
 
2019年9月18日開催AWS Japan × Atlassianセミナー_セッション2「AmazonカルチャーとDevOps」
2019年9月18日開催AWS Japan × Atlassianセミナー_セッション2「AmazonカルチャーとDevOps」2019年9月18日開催AWS Japan × Atlassianセミナー_セッション2「AmazonカルチャーとDevOps」
2019年9月18日開催AWS Japan × Atlassianセミナー_セッション2「AmazonカルチャーとDevOps」
 
20130226 Amazon Web Services 勉強会(新宿)
20130226 Amazon Web Services 勉強会(新宿)20130226 Amazon Web Services 勉強会(新宿)
20130226 Amazon Web Services 勉強会(新宿)
 
Realm platform2019
Realm platform2019Realm platform2019
Realm platform2019
 
いるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevio
いるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevioいるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevio
いるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevio
 
Scala: Mobile Backend on AWS
Scala: Mobile Backend on AWSScala: Mobile Backend on AWS
Scala: Mobile Backend on AWS
 
パララックスでレスポンシブでJ query mobileなサイトのつくりかた
パララックスでレスポンシブでJ query mobileなサイトのつくりかたパララックスでレスポンシブでJ query mobileなサイトのつくりかた
パララックスでレスポンシブでJ query mobileなサイトのつくりかた
 
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】
 

Scala@SmartNews AdFrontend を Scala で書いた話