Skinny Framework で始めた Scala
Skinny Framework Meetup Tokyo 2
2015/12/22
@roundrop
自己紹介
• 山下 竜司
• (株) アットウェア
• @roundrop
• Facebook4J
• 普段は主に Java で Web アプリ開発
• Scala は全然やっていない
アジェンダ
• 事例紹介
• なぜ Skinny を選んだか
• 実際 Skinny を使ってみてどうだったか
Scala先駆者インタビュー
http://www.atware.co.jp/blog/2015/11/1/scala-vol2-sera
にちょっと出てくる
社内ナレッジ共有ツール
•某人気サービスと同じよ
うなインターフェイス
•社内事情とScalaの練習
も兼ねて自作
(2014年8月∼約2週間)
•採用したフレームワーク
Skinny Framework
•1.2 -> 1.3 -> 2.0
主な機能
• Google アカウントでのログイン
• skinny-oauth2-controller を使用
• 記事の表示・投稿・編集・プレビュー
• 複数のタグ付け
• 新規投稿時は Typetalk に通知
• 画像ファイルアップロード
• コメントの投稿
• 記事のストック
• 検索
• ストックやコメントされたりのイベントで通知
• Contribution の計算・ランキング
• i18n 対応
demo
はじめての実装のおすすめ
• scaffold
または
• DB を固めてから reverse-scaffold
• 生成されたソースを弄る
• すると、そのうち慣れてくる
はじめての実装のおすすめ
• ビューテンプレートは ssp で
• 最初はまず ssp 使っとけばハマらない
• Controller は SkinnyResource を継承し
ない方式で
• のほうが最初はわかりやすい(と思う)
• example の CompaniesController
• https://github.com/skinny-framework/skinny-framework-example/
blob/master/src/main/scala/controller/CompaniesController.scala
はじめての実装のおすすめ
• 最初から Skinny ORM で狙ったとおりの
SQL を発行するのは難しい
• トライ&エラーを繰り返すよりも Model の
テストを書いての試行錯誤が効率的
• 複雑なクエリは無理をせず生SQLで
• ScalikeJDBC のドキュメントを読もう
社内ナレッジ共有ツール
•某人気サービスと同じよ
うなインターフェイス
•社内事情とScalaの練習
も兼ねて自作
(2014年8月∼約2週間)
•採用したフレームワーク
Skinny Framework
•1.2 -> 1.3 -> 2.0
今では社内の情報共有インフラに定着
なぜ Skinny を選んだか
Scala
• Scala、はじめてみたいけど
• 環境構築めんどくさそう
• Scala のバージョンや sbt
• activator って何者・・・
• FW/ライブラリ事情がわからない
• FW いっぱいある・・・
• Play framework が無難?
• DB アクセスライブラリいっぱいある・・・
Scala
• とりあえず普通の Web アプリがつくりた
いだけなんだけど・・・
• アクターモデルとか
• 非同期前提とか
• Reactive とか
そういうのはあとでいいので・・・
Scala
• とりあえず普通の Web アプリがつくりた
いだけなんだけど・・・
• アクターモデルとか
• 非同期前提とか
• Reactive とか
そういうのはあとでいいので・・・
Rails みたいなフルスタックでわかりやすいのがほしい
Skinny Framework で始める Scala
http://www.java-users.jp/?page_id=1048#R2-4
Skinny Framework で始める Scala
  ( ゚д゚) ガタッ
  /   ヾ
__L¦ / ̄ ̄ ̄/_
  \/   /
http://www.java-users.jp/?page_id=1048#R2-4
実際 Skinny を使ってみて
どうだったか
Skinny で始めた Scala
• はじめやすさ
• わかりやすさ
• 生産性
Skinny で始めた Scala
• はじめやすさ
• わかりやすさ
• 生産性
環境構築
•Java プログラマなら
お馴染みのSAStruts
よろしく解凍すれば
すぐに使えるブラン
クプロジェクト
•依存ライブラリ込み
版もあり
http://skinny-framework.org
環境構築
• 解凍して IntelliJ IDEA に放り込めば OK
環境構築
• sbt 、Scala のバージョン等もろもろ設定完了
• めんどくさくなかった!
• Skinny が始めやすいのは本当
Skinny で始めた Scala
• ○ はじめやすさ
• わかりやすさ
• 生産性
Skinny で始めた Scala
• ○ はじめやすさ
• わかりやすさ
• 生産性
Skinny のドキュメント
• ドキュメント
• 公式 http://skinny-framework.org
• Example
• https://github.com/skinny-framework/
skinny-framework-example
• ScalikeJDBC 公式
• http://scalikejdbc.org
• ScalikeJDBC の GitBook
• https://www.gitbook.com/book/seratch/
scalikejdbc-cookbook/details
Skinny のドキュメント
• Play framework のドキュメントよりも直
感的だし読みやすい構成・内容
• サイトトップに Overview -> 詳細へリンク
• 局所的でなく一定の流れのあるサンプルコー
ド + コメント
• 適切な順序・粒度で書かれている
Scala on Rails
• Play と違って仕組みやメソッド等の命名が
Rails ライクなので独自の世界観が少なく
スッと入ってくる感じ
• params とか render とか strong parameter とか
• それ故、他のメンバーもすんなり開発に入っ
て来れています
Servlet ベース
• Servlet コンテナ上で動く
• Filter とか HttpServletRequest とかあると
妙に安心する
• 困ってもなんとかできそう感
• コンフィギュレーションやデプロイも想像が
つく
Skinny で始めた Scala
• ○ はじめやすさ
• ○ わかりやすさ
• 生産性
Skinny で始めた Scala
• ○ はじめやすさ
• ○ わかりやすさ
• 生産性
コンパイル時間問題への対策
• 開発時は最小限のコンパイルのみ行うよう
になっている
• 基本、変更したものだけ差分コンパイル
• ビューの変更であればアプリサーバーの再起
動不要
• 今回程度のアプリでは特に大きなストレスは
感じなかった
近道 - scaffolding
• Rails と同じく scaffold がある
• 最初は、とりあえず scaffold でソース生成
して、それを弄るスタイルが捗る
• 既存 DB スキーマから CRUD 生成する
reverse-scaffold もある
近道 - scaffolding
• 私の場合、
1. DB 設計する
2. db:migrate してスキーマつくる
$ ./skinny db:migrate
3. reverse-scaffold
$ ./skinny g reverse-scaffold articles articles article
4. 生成されたソースをいじる
5. 3, 4 を繰り返す
よくやるアレコレ入ってる
• Web アプリでよくやるあれやこれやが予め
用意されてる
• i18n 対応
• CSRF プロテクション
• 監査カラム自動更新、楽観的排他制御
• OAuth モジュール
:
• 何より、何も知らない Scala 素人が仕事し
ながらの2週間程度でそこそこ使えるアプ
リができたので、生産性はよいほうだと思
います
Skinny で始めた Scala
• ○ はじめやすさ
• ○ わかりやすさ
• ○ 生産性
Skinny で始めた Scala
• ○ はじめやすさ
• ○ わかりやすさ
• ○ 生産性
今回のケースでは
Skinny を選んで正解だった
まとめ
• Scala 未経験者が Skinny を使って社内ナ
レッジ共有ツールをつくりました
• Skinny の始めやすさのおかげで Scala を
はじめるキッカケになった
• フツーの Web アプリであれば Skinny は
わかりやすいし生産性もよいのでオススメ
まとめ
• Scala 未経験者が Skinny を使って社内ナ
レッジ共有ツールをつくりました
• Skinny の始めやすさのおかげで Scala を
はじめるキッカケになった
• フツーの Web アプリであれば Skinny は
わかりやすいし生産性もよいのでオススメ
Skinny Framework 使いましょう!

Skinny Framework で始めた Scala