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

Post on 17-Jan-2017

13.229 Views

Category:

Software

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

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

自己紹介

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

アジェンダ

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

Seasar プロジェクトと私

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

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

かつて S2 が中心にいた

当時を振り返る

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

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

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

今後について

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

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

Scala OSS の これまでと現状

Scala OSS の登場人物

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

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

Scala 製 OSS の流れ

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

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

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

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

Scala と私

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

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

RDB ライブラリ

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

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

Web 開発

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

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

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

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

ScalikeJDBC の紹介

ScalikeJDBC

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

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

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

S2JDBC からの影響

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

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

設定

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

コネクションプール

JDBC の設定を指定するだけ

 DDL

JDBC の Statement#execute です

insertJDBC の Statement#executeUpdate

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

select

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

case class へのマッピング

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

QueryDSL

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

使いたくなりましたか?

Skinny Framework の紹介

Skinny Framework

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

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

新しいプロジェクト1

2

3rails new のイメージ

Jetty が起動します

scaffold 生成

rails g scaffold と基本は同様

DB マイグレーション

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

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

scaffold 生成結果

バリデーション生成済

ページネーション生成済

ActiveRecord 的 API + 静的型

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

既存 DB からの自動生成

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

使いたくなりましたか?

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

最低限のこと

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

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

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

日本でしか(ry

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

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

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

できていないこと

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

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

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

まとめ

まとめ

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

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

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

top related