seasar ユーザだったプログラマが目指す oss の世界展開 #seasarcon

46
Seasar ユーザだった プログラマが目指す OSS の世界展開 瀬良 和弘(@seratch) #seasarcon 2015/09/26 https://event.seasarfoundation.org/sc2015/

Upload: kazuhiro-sera

Post on 17-Jan-2017

13.229 views

Category:

Software


1 download

TRANSCRIPT

Page 1: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

Seasar ユーザだった プログラマが目指す OSS の世界展開

瀬良 和弘(@seratch) #seasarcon 2015/09/26

https://event.seasarfoundation.org/sc2015/

Page 2: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

自己紹介

•@seratch / @seratch_ja • ScalikeJDBC(2011 ~) • Skinny Framework(2013 ~) • Skinny Micro (2015 ~) • Scalatra、json4s、Scalate メンテナ •エムスリー株式会社 ソフトウェアエンジニア

Page 3: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

アジェンダ

•Seasar プロジェクトと私 • Scala OSS のこれまでと現状 • ScalikeJDBC の紹介 • Skinny Framework の紹介 • OSS を世界で認知してもらうために •まとめ

Page 4: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

Seasar プロジェクトと私

Page 5: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

Seasar2 と私•数年前 SAStruts、S2JDBC で Web 開発 • SAStruts の @PreExecute/@PostExecute インタセプタ(社内ライブラリ)

• SAStruts 向けに S2Unit を拡張 • Mobylet でガラケー公式サイト対応 • Slim3 をちょっとだけ使っていた •前職の SI 業界で関わっていた基幹システムの開発現場でも S2 は多く使われていた

Page 6: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

かつて S2 が中心にいた

Page 7: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

当時を振り返る

•2011 年からは新規採用されなくなった、S2 で実装された一部サービスは今も現役

• SAStruts + S2JDBC だけでも後継が育ったらよかったのかもしれない

•「たられば」だが、最盛期が GitHub 時代だったらまた違った展開だったかもしれない

Page 8: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

今後について

•Seasar プロジェクトが全面的に GitHub 移行、前よりも貢献はしやすくなった

•とはいえ、今後の方針発表は移行する理由としてよいきっかけかもしれない

Page 9: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

Scala OSS の これまでと現状

Page 10: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

Scala OSS の登場人物

•Typesafe 社の Reactive Platform 関連 • Finagle をはじめとする Twitter 社 OSS • Lift や Scalatra など古参の OSS • Meetup 社を中心とした New York のコミュニティ(unfiltered/dispatch/cs/g8)

•世界中の Scala Enthusiast 達(私を含む)

Page 11: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

Scala 製 OSS の流れ

•Scala 最初のムーブメントは Twitter 社の Finagle の流行(Tumblr、Pinterest)

• 2011 年 Typesafe 社設立、Reactive をキーワードに Twitter 社 OSS とは別の流れ

• Reactive Streams 標準化に向けた流れ •新たな Apache プロジェクトの登場:Apache Spark、Apache Kafka..

Page 12: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

2006 20102009 20122011... 2013 2014 2015

Scala 2.0 2.102.92.8 2.11

Apache Spark 1.0

Akka 1.0Play 2.0

sbt 0.7 sbt 0.13sbt 0.12sbt 0.11

Finagle

Zipkin

Apache Kafka

Summing Bird

gitbucket

ActiveMQ Apollo

Kestrel

scalaz 5.0

scalaz 7.1

Lift

Scalatra

Unfiltered

Spray

http4s

Reactive Manifesto

RxScala

conscript gitter8

activator

Scalate

Page 13: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

Scala と私

•近年 Scala はデータ分析・ストリーミング処理に注目が集まることが多いが、私が(今のところ)関わっているのは主に Web 開発の部品となるライブラリ

• DB ライブラリである ScalikeJDBC • Web 開発スタック Skinny Framework • Scalatra を fork した Skinny Micro

Page 14: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

RDB ライブラリ

•ScalaQuery、Squeryl 二択時代 • ScalaQuery が Typesafe の Slick へ • Squeryl の開発がアクティブでなくなった • ScalikeJDBC も知名度・ユーザを獲得 • non-blocking の流れも出てきてはいる • Slick 3 は Reactive Streams の潮流

Page 15: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

2006 2010

Lift Mapper

2009 20122011... 2013 2014 2015

ScalaQuery 0.9

Squeryl

ScalikeJDBC

Slick 1.0

Activate

Circumflex ORM O/R Broker

Anorm

Querulous

Slick 2.0 Slick 3.0

ScalikeJDBC Async

postgresql-async mysql-async

doobie

Scala 2.0 2.102.92.8 2.11

Skinny ORM

Reactive Manifesto

Scala ActiveRecord

SORM sqlτyped

Page 16: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

Web 開発

•Scala といえば Lift だったが Typesafe 社設立後 Play 2 が広く知名度・ユーザを獲得

• Netty、Akka ベースの実装がトレンド • Servlet ベースの系譜も続いている(Lift、Scalatra、Skinny Micro)

•近年、この領域に新たな課題は少なく、ニーズを満たすものが出揃ってきた感はある

Page 17: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

Scala 2.0

2006 2010

Lift

2009

Play 1 (Java) Play 2

20122011... 2013 2014 2015

ScalatraCircumflex

Spray

Unfiltered

Xitrum Finatra

akka-http

2.102.92.8 2.11

http4s

Skinny

Reactive Manifesto

Page 18: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

ScalikeJDBC の紹介

Page 19: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

ScalikeJDBC

•GitHub スター数で世界第 2 位 • “Scala らしく JDBC を扱う” • RDB、JDBC に関する基礎知識があれば誰でも使える敷居の低さ

• 2011 年から開発開始、私の身近や自社で多くの実績を積み重ねながら安定させてきた

•今では国内外で豊富な本番稼動実績

Page 20: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

S2JDBC からの影響

•S2JDBC からの影響はいくつもある • Scala 2.9 時代に 2Way-SQL 簡易版を提供 • scalikejdbc-gen:ソースコードの自動生成 •流れるようなインタフェース、QueryDsl に影響を受けた QueryDSL API

• Scala なので JPA とは決別、JDBC だけ • Scala なので APT なし、代わりに少しマクロ

Page 21: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

設定

sbt があれば、本当にこれだけで試せます

Page 22: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

コネクションプール

JDBC の設定を指定するだけ

Page 23: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

 DDL

JDBC の Statement#execute です

Page 24: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

insertJDBC の Statement#executeUpdate

実行した SQL と、それがどこで発行されたかを追うために stacktrace を出力します

Page 25: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

select

とりあえず Map[String, Any] で出力してみる

Page 26: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

case class へのマッピング

#map[A](ResultSet => A) で何にでもマッピングできる

Page 27: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

QueryDSL

ある程度型安全でほぼ SQL そのままの DSL です

Page 28: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

使いたくなりましたか?

Page 29: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

Skinny Framework の紹介

Page 30: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

Skinny Framework

• GitHub スター数 463 • 2014 年 3 月に 1.0.0 リリース • “Scala on Rails” • フルスタック(自動生成、OAuth、ORM、DB マイグレーション、入力バリデーション、メール送信、非同期ジョブ、JSON 処理 etc)

• war として Servlet コンテナにデプロイ

Page 31: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

新しいプロジェクト1

2

3rails new のイメージ

Jetty が起動します

Page 32: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

scaffold 生成

rails g scaffold と基本は同様

Page 33: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

DB マイグレーション

Flyway を使った DB マイグレーションrake db:migrate と同様のイメージ

skinny-task で rake と同様のことができます

Page 34: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

scaffold 生成結果

Page 35: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

バリデーション生成済

Page 36: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

ページネーション生成済

Page 37: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

ActiveRecord 的 API + 静的型

sbt console で REPL を起動して挙動を簡単に確認できます

Page 38: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

既存 DB からの自動生成

レガシー DB の CRUD 管理画面が一瞬で生成できます

Page 39: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

使いたくなりましたか?

Page 40: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

OSS を世界で 認知してもらうために

Page 41: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

最低限のこと

•コメントを絶対に日本語で書かない、英語で書くことがまずスタートライン

•公式ドキュメントは英語、日本語より英語での情報発信を優先する(少なくとも日本語で情報を出したら英語でも出す)

•開発者に直接会える国内で誰にも使ってもらえないのは話にならないが、かといって「日本でしか流行っていない」と思われたら負け

Page 42: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

日本でしか(ry

Page 43: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

やっている・できてきたこと

•着実なコードの改善の継続、定期リリース •国内に閉じない情報発信とその継続 •とにかくオンラインの迅速なレスポンス(最近は stackoverflow/gitter で自分以外が勝手に回答してくれることも増えた)

•創始者でない他の OSS にも関わって、自分の経験値と界隈での認知度を高める

Page 44: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

できていないこと

•プロダクト自体の知名度をさらに高めて、より多くの人に使ってもらう

•国際的な場において、私自身が個人として認知される必要性を感じている

•無理にという必要はないが、日本語話者以外のメンテナも迎えたい(チームの成熟度の証左)

Page 45: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

まとめ

Page 46: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon

まとめ

•S2 を使っていた&一部でメンテしている • Seasar2 が「OSS は誰が始めてもよい」という機運を見せてくれたことに感謝している

•良いコードを書くこと・知ってもらう努力をすること、どちらも必要でどちらも足りてない

• Scala に興味がある方、一緒にやりましょう