37
1 Scala 2016-09-02(Fri) / @yoshiyoshifujii

20160902 scalaの魅力を話してみる

Embed Size (px)

Citation preview

1

Scalaの魅力を話してみる

社内発表会

2016-09-02(Fri) / @yoshiyoshifujii

2

今日のお話

3

Scalaをはじめて、1年3ヶ月が経ち、それなりに酸いも甘いもあれしてきたので、そろそろその辺りふまえて語ってみて、もしかしたらScalaに興味を持ってもらえて、同じチームでScalaで開発したいねんって直訴する人が出てきたりして、仲間が増えるとうれしいなーなんて狙いを

持って話します。

3

4

とはいえ、私は、言語マニアではありませんので、Scalaはこんな高尚な言語だが、こっちの言語のほーがここは優れていて、といった議論を展開したいわけではなく、ただ純粋にScalaやっててここ楽しいなーっ

ておもうあたりを紹介させていただければと思ってます。

4

5

魅力だと思うところ(スカラステキセブン)

1. sbt2. Akka3. trait4. Syntax Sugar5. 補完6. AWS7. コミュニティ

6 . 1

1/7 sbtかなり強力なビルドツール

Simple Build Tool

ライブラリ依存性の解決

マルチプロジェクト

プラグイン

6 . 2

ライブラリ依存性の解決

6 . 3

6 . 3

6 . 4

一昔前は、全て手でダウンロードしてきた

ライブラリもSVNとかでバージョン管理してた

Pathを間違うと読み込まれないことがあった

最近は、Pythonでpip、Rubyでgem、C#でnugetみたいなやつある

NodeJsならnpmとか

6 . 5

// Specs2val specs2Core = "org.specs2" %% "specs2-core" % "3.6"val specs2Mock = "org.specs2" %% "specs2-mock" % "3.6"val specs2JUnit = "org.specs2" %% "specs2-junit" % "3.6"

// Modules4Lambdaval modulesVersion = "0.10.0"val modulesLambda4Kinesis = "com.hoge" %% "modules-lambda-aws-lambda4kinesis" % modulesVersionval modules3 = "com.hoge" %% "modules-lambda-aws-s3" % modulesVersionval modulesFirehose = "com.hoge" %% "modules-lambda-aws-firehose" % modulesVersion

// spray-jsonval sprayJson = "io.spray" %% "spray-json" % "1.3.2"

6 . 5

6 . 6

バージョンを一括りにして書ける

Scalaで書ける

最新バージョンを自動で見分けたりできる

コンパイラーのバージョンを空気読んでやってくれる

6 . 7

val anticorruptionDeps = Seq( modulesLambda4Kinesis, modules3, modulesFirehose, sprayJson, specs2Core % Test, specs2Mock % Test, specs2JUnit % Test)

val installedapplicationDeps = Seq( specs2Core % Test, specs2Mock % Test, specs2JUnit % Test)

6 . 7

6 . 8

マルチプロジェクト

6 . 9

プラグイン

6 . 10

このまま続けると1時間ぐらい続くのでやめます

7 . 1

2/7 AkkaScalaとJavaのApache2ライセンスで提供されているOSSのライブラリ

アクターモデルを適用したスケーラビルティや耐障害性に優れた並行処理が書けるライブラリ

Scalaなら並行処理が可読性高く書ける

7 . 2

class CheckService(check: ActorRef) extends AkkaHttpService with DefaultJsonFormats {

import akka.pattern.ask import scala.concurrent.duration._

implicit val timeout = Timeout(30.seconds)

implicit val checkRequestFormat = jsonFormat2(CheckRequest)

val route = postCheck

def postCheck = path("check") { originalHeaderExtract { header => post { entity(as[CheckRequest]) { request => onSuccessEx { (check ? convert2Input(header, request)).mapTo[ApiGatewayResponse] } }

7 . 2

7 . 3

class CheckActor extends Actor with ActorLogging { import CheckActor._

override def receive: Receive = { case m: InputModel => { val input = convert2InputStream(m) val output = execute(input)(new App().handleRequest) sender ! output } }}

7 . 3

8

3/7 traitMixin

部品化、再構成、リファクタリング、Unitテストコード

traitで書いておくと、後からどうとでもできる

多種多様な新たなデザインパターンを生み出している

DIがシンプルに実現できる

9 . 1

4/7 Syntax Sugar糖衣構文

自然言語かのごとくコードが書けちゃう

さだまさしコンパイラ

9 . 2

http://qiita.com/seratch@github/items/3be26b584f3d74aa1150https://github.com/seratch/sadamasashi-compiler

9 . 2

10

5/7 補完IDEやREPLが充実している

IntelliJ IDEA

Eclipse

リズムの良い開発ができる

11

6/7 AWS相性が良い

AWS Java SDK がそのまま使える

なんなら、Scalaで扱いやすく、ラップできる

ラッパー書くのも、これまた楽しい

Scalaがあるのに、Javaでやる意味がわからん

12 . 1

7/7 コミュニティ導入企業がとがってる

Scala界隈での有名人とかいる

12 . 2

国内

ドワンゴさん

はてなさん

ChatWorkさん

エムスリーさん

SmartNewsさん

ビズリーチさん

ヌーラボさん

12 . 3

海外だと

Twitter

LinkedIn

FourSquare

Net�ix

13

国内大規模なイベント

14

ScalaMatsuri

16

Scala関西Summit

17

ということで…

18

2016年10月08日(土)

19

大阪産業創造館にて

20

Scala 関西Summit 2016あります!!

21

エントリーは !!こちら

http://skug.connpass.com/event/38349/

22

以上です。