seasar ユーザだったプログラマが目指す oss の世界展開 #seasarcon
TRANSCRIPT
![Page 1: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/1.jpg)
Seasar ユーザだった プログラマが目指す OSS の世界展開
瀬良 和弘(@seratch) #seasarcon 2015/09/26
https://event.seasarfoundation.org/sc2015/
![Page 2: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/2.jpg)
自己紹介
•@seratch / @seratch_ja • ScalikeJDBC(2011 ~) • Skinny Framework(2013 ~) • Skinny Micro (2015 ~) • Scalatra、json4s、Scalate メンテナ •エムスリー株式会社 ソフトウェアエンジニア
![Page 3: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/3.jpg)
アジェンダ
•Seasar プロジェクトと私 • Scala OSS のこれまでと現状 • ScalikeJDBC の紹介 • Skinny Framework の紹介 • OSS を世界で認知してもらうために •まとめ
![Page 4: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/4.jpg)
Seasar プロジェクトと私
![Page 5: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/5.jpg)
Seasar2 と私•数年前 SAStruts、S2JDBC で Web 開発 • SAStruts の @PreExecute/@PostExecute インタセプタ(社内ライブラリ)
• SAStruts 向けに S2Unit を拡張 • Mobylet でガラケー公式サイト対応 • Slim3 をちょっとだけ使っていた •前職の SI 業界で関わっていた基幹システムの開発現場でも S2 は多く使われていた
![Page 6: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/6.jpg)
かつて S2 が中心にいた
![Page 7: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/7.jpg)
当時を振り返る
•2011 年からは新規採用されなくなった、S2 で実装された一部サービスは今も現役
• SAStruts + S2JDBC だけでも後継が育ったらよかったのかもしれない
•「たられば」だが、最盛期が GitHub 時代だったらまた違った展開だったかもしれない
![Page 8: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/8.jpg)
今後について
•Seasar プロジェクトが全面的に GitHub 移行、前よりも貢献はしやすくなった
•とはいえ、今後の方針発表は移行する理由としてよいきっかけかもしれない
![Page 9: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/9.jpg)
Scala OSS の これまでと現状
![Page 10: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/11.jpg)
Scala 製 OSS の流れ
•Scala 最初のムーブメントは Twitter 社の Finagle の流行(Tumblr、Pinterest)
• 2011 年 Typesafe 社設立、Reactive をキーワードに Twitter 社 OSS とは別の流れ
• Reactive Streams 標準化に向けた流れ •新たな Apache プロジェクトの登場:Apache Spark、Apache Kafka..
![Page 12: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/12.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/13.jpg)
Scala と私
•近年 Scala はデータ分析・ストリーミング処理に注目が集まることが多いが、私が(今のところ)関わっているのは主に Web 開発の部品となるライブラリ
• DB ライブラリである ScalikeJDBC • Web 開発スタック Skinny Framework • Scalatra を fork した Skinny Micro
![Page 14: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/14.jpg)
RDB ライブラリ
•ScalaQuery、Squeryl 二択時代 • ScalaQuery が Typesafe の Slick へ • Squeryl の開発がアクティブでなくなった • ScalikeJDBC も知名度・ユーザを獲得 • non-blocking の流れも出てきてはいる • Slick 3 は Reactive Streams の潮流
![Page 15: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/15.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/16.jpg)
Web 開発
•Scala といえば Lift だったが Typesafe 社設立後 Play 2 が広く知名度・ユーザを獲得
• Netty、Akka ベースの実装がトレンド • Servlet ベースの系譜も続いている(Lift、Scalatra、Skinny Micro)
•近年、この領域に新たな課題は少なく、ニーズを満たすものが出揃ってきた感はある
![Page 17: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/18.jpg)
ScalikeJDBC の紹介
![Page 19: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/19.jpg)
ScalikeJDBC
•GitHub スター数で世界第 2 位 • “Scala らしく JDBC を扱う” • RDB、JDBC に関する基礎知識があれば誰でも使える敷居の低さ
• 2011 年から開発開始、私の身近や自社で多くの実績を積み重ねながら安定させてきた
•今では国内外で豊富な本番稼動実績
![Page 20: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/20.jpg)
S2JDBC からの影響
•S2JDBC からの影響はいくつもある • Scala 2.9 時代に 2Way-SQL 簡易版を提供 • scalikejdbc-gen:ソースコードの自動生成 •流れるようなインタフェース、QueryDsl に影響を受けた QueryDSL API
• Scala なので JPA とは決別、JDBC だけ • Scala なので APT なし、代わりに少しマクロ
![Page 21: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/21.jpg)
設定
sbt があれば、本当にこれだけで試せます
![Page 22: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/22.jpg)
コネクションプール
JDBC の設定を指定するだけ
![Page 23: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/23.jpg)
DDL
JDBC の Statement#execute です
![Page 24: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/24.jpg)
insertJDBC の Statement#executeUpdate
実行した SQL と、それがどこで発行されたかを追うために stacktrace を出力します
![Page 25: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/25.jpg)
select
とりあえず Map[String, Any] で出力してみる
![Page 26: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/26.jpg)
case class へのマッピング
#map[A](ResultSet => A) で何にでもマッピングできる
![Page 27: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/27.jpg)
QueryDSL
ある程度型安全でほぼ SQL そのままの DSL です
![Page 28: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/28.jpg)
使いたくなりましたか?
![Page 29: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/29.jpg)
Skinny Framework の紹介
![Page 30: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/30.jpg)
Skinny Framework
• GitHub スター数 463 • 2014 年 3 月に 1.0.0 リリース • “Scala on Rails” • フルスタック(自動生成、OAuth、ORM、DB マイグレーション、入力バリデーション、メール送信、非同期ジョブ、JSON 処理 etc)
• war として Servlet コンテナにデプロイ
![Page 31: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/31.jpg)
新しいプロジェクト1
2
3rails new のイメージ
Jetty が起動します
![Page 32: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/32.jpg)
scaffold 生成
rails g scaffold と基本は同様
![Page 33: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/33.jpg)
DB マイグレーション
Flyway を使った DB マイグレーションrake db:migrate と同様のイメージ
skinny-task で rake と同様のことができます
![Page 34: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/34.jpg)
scaffold 生成結果
![Page 35: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/35.jpg)
バリデーション生成済
![Page 36: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/36.jpg)
ページネーション生成済
![Page 37: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/37.jpg)
ActiveRecord 的 API + 静的型
sbt console で REPL を起動して挙動を簡単に確認できます
![Page 38: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/38.jpg)
既存 DB からの自動生成
レガシー DB の CRUD 管理画面が一瞬で生成できます
![Page 39: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/39.jpg)
使いたくなりましたか?
![Page 40: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/40.jpg)
OSS を世界で 認知してもらうために
![Page 41: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/41.jpg)
最低限のこと
•コメントを絶対に日本語で書かない、英語で書くことがまずスタートライン
•公式ドキュメントは英語、日本語より英語での情報発信を優先する(少なくとも日本語で情報を出したら英語でも出す)
•開発者に直接会える国内で誰にも使ってもらえないのは話にならないが、かといって「日本でしか流行っていない」と思われたら負け
![Page 42: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/42.jpg)
日本でしか(ry
![Page 43: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/43.jpg)
やっている・できてきたこと
•着実なコードの改善の継続、定期リリース •国内に閉じない情報発信とその継続 •とにかくオンラインの迅速なレスポンス(最近は stackoverflow/gitter で自分以外が勝手に回答してくれることも増えた)
•創始者でない他の OSS にも関わって、自分の経験値と界隈での認知度を高める
![Page 44: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/44.jpg)
できていないこと
•プロダクト自体の知名度をさらに高めて、より多くの人に使ってもらう
•国際的な場において、私自身が個人として認知される必要性を感じている
•無理にという必要はないが、日本語話者以外のメンテナも迎えたい(チームの成熟度の証左)
![Page 45: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/45.jpg)
まとめ
![Page 46: Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon](https://reader033.vdocuments.pub/reader033/viewer/2022051318/587dcc871a28ab5b5b8b4999/html5/thumbnails/46.jpg)
まとめ
•S2 を使っていた&一部でメンテしている • Seasar2 が「OSS は誰が始めてもよい」という機運を見せてくれたことに感謝している
•良いコードを書くこと・知ってもらう努力をすること、どちらも必要でどちらも足りてない
• Scala に興味がある方、一緒にやりましょう