SlideShare a Scribd company logo
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 使いましょう!

More Related Content

What's hot

プロダクトにおけるScala
プロダクトにおけるScalaプロダクトにおけるScala
プロダクトにおけるScala
Yuto Suzuki
 
Do you like scala
Do you like scalaDo you like scala
Do you like scala
Yuto Suzuki
 
ネタじゃないScala.js
ネタじゃないScala.jsネタじゃないScala.js
ネタじゃないScala.js
takezoe
 
PlayFramework1.x基礎編
PlayFramework1.x基礎編PlayFramework1.x基礎編
PlayFramework1.x基礎編
Asami Abe
 
Atami
AtamiAtami
Zabbixによるオートスケーリングクラスタ監視とオペレーション自動化
Zabbixによるオートスケーリングクラスタ監視とオペレーション自動化Zabbixによるオートスケーリングクラスタ監視とオペレーション自動化
Zabbixによるオートスケーリングクラスタ監視とオペレーション自動化
真乙 九龍
 
ビッグじゃなくても使えるSpark Streaming
ビッグじゃなくても使えるSpark Streamingビッグじゃなくても使えるSpark Streaming
ビッグじゃなくても使えるSpark Streaming
chibochibo
 
RxSwiftを“チーム開発に”導入する話
RxSwiftを“チーム開発に”導入する話RxSwiftを“チーム開発に”導入する話
RxSwiftを“チーム開発に”導入する話
LINE Corporation
 
第1回名古屋Android勉強会Lt用資料
第1回名古屋Android勉強会Lt用資料第1回名古屋Android勉強会Lt用資料
第1回名古屋Android勉強会Lt用資料
tantack
 
CTOが語るUI/UX
CTOが語るUI/UXCTOが語るUI/UX
CTOが語るUI/UX
Satoshi Yokoi
 
Good-Bye Swagger
Good-Bye SwaggerGood-Bye Swagger
Good-Bye Swagger
katada-yuki
 
新事業がどんどん出来て組織が拡大中のフェーズのランサーズがどんな感じでプロジェクトを回しているのかまとめてみました
新事業がどんどん出来て組織が拡大中のフェーズのランサーズがどんな感じでプロジェクトを回しているのかまとめてみました新事業がどんどん出来て組織が拡大中のフェーズのランサーズがどんな感じでプロジェクトを回しているのかまとめてみました
新事業がどんどん出来て組織が拡大中のフェーズのランサーズがどんな感じでプロジェクトを回しているのかまとめてみました
Satoshi Yokoi
 
Zabbixによるオートスケーリングクラスタ監視とオペレーション自動化
Zabbixによるオートスケーリングクラスタ監視とオペレーション自動化Zabbixによるオートスケーリングクラスタ監視とオペレーション自動化
Zabbixによるオートスケーリングクラスタ監視とオペレーション自動化
真乙 九龍
 
Skinny framework勉強会
Skinny framework勉強会Skinny framework勉強会
Skinny framework勉強会
Yusuke Arakaki
 
DWANGO by ドワンゴ
DWANGO by ドワンゴDWANGO by ドワンゴ
DWANGO by ドワンゴ
scalaconfjp
 
AndroidStudioとGradleを利用したScala言語によるAndroidアプリの開発
AndroidStudioとGradleを利用したScala言語によるAndroidアプリの開発AndroidStudioとGradleを利用したScala言語によるAndroidアプリの開発
AndroidStudioとGradleを利用したScala言語によるAndroidアプリの開発
Mogi Isamu
 
Laravel Livewire の紹介
Laravel Livewire の紹介Laravel Livewire の紹介
Laravel Livewire の紹介
t Dash
 
Swiftで、Webサーバにデータを送信・登録しよう!
Swiftで、Webサーバにデータを送信・登録しよう!Swiftで、Webサーバにデータを送信・登録しよう!
Swiftで、Webサーバにデータを送信・登録しよう!
Kanako Kobayashi
 
Developing an Akka Edge1-3
Developing an Akka Edge1-3Developing an Akka Edge1-3
Developing an Akka Edge1-3
saaaaaaki
 
Serverless apps on aws using scala
Serverless apps on aws using scalaServerless apps on aws using scala
Serverless apps on aws using scala
Yoshitaka Fujii
 

What's hot (20)

プロダクトにおけるScala
プロダクトにおけるScalaプロダクトにおけるScala
プロダクトにおけるScala
 
Do you like scala
Do you like scalaDo you like scala
Do you like scala
 
ネタじゃないScala.js
ネタじゃないScala.jsネタじゃないScala.js
ネタじゃないScala.js
 
PlayFramework1.x基礎編
PlayFramework1.x基礎編PlayFramework1.x基礎編
PlayFramework1.x基礎編
 
Atami
AtamiAtami
Atami
 
Zabbixによるオートスケーリングクラスタ監視とオペレーション自動化
Zabbixによるオートスケーリングクラスタ監視とオペレーション自動化Zabbixによるオートスケーリングクラスタ監視とオペレーション自動化
Zabbixによるオートスケーリングクラスタ監視とオペレーション自動化
 
ビッグじゃなくても使えるSpark Streaming
ビッグじゃなくても使えるSpark Streamingビッグじゃなくても使えるSpark Streaming
ビッグじゃなくても使えるSpark Streaming
 
RxSwiftを“チーム開発に”導入する話
RxSwiftを“チーム開発に”導入する話RxSwiftを“チーム開発に”導入する話
RxSwiftを“チーム開発に”導入する話
 
第1回名古屋Android勉強会Lt用資料
第1回名古屋Android勉強会Lt用資料第1回名古屋Android勉強会Lt用資料
第1回名古屋Android勉強会Lt用資料
 
CTOが語るUI/UX
CTOが語るUI/UXCTOが語るUI/UX
CTOが語るUI/UX
 
Good-Bye Swagger
Good-Bye SwaggerGood-Bye Swagger
Good-Bye Swagger
 
新事業がどんどん出来て組織が拡大中のフェーズのランサーズがどんな感じでプロジェクトを回しているのかまとめてみました
新事業がどんどん出来て組織が拡大中のフェーズのランサーズがどんな感じでプロジェクトを回しているのかまとめてみました新事業がどんどん出来て組織が拡大中のフェーズのランサーズがどんな感じでプロジェクトを回しているのかまとめてみました
新事業がどんどん出来て組織が拡大中のフェーズのランサーズがどんな感じでプロジェクトを回しているのかまとめてみました
 
Zabbixによるオートスケーリングクラスタ監視とオペレーション自動化
Zabbixによるオートスケーリングクラスタ監視とオペレーション自動化Zabbixによるオートスケーリングクラスタ監視とオペレーション自動化
Zabbixによるオートスケーリングクラスタ監視とオペレーション自動化
 
Skinny framework勉強会
Skinny framework勉強会Skinny framework勉強会
Skinny framework勉強会
 
DWANGO by ドワンゴ
DWANGO by ドワンゴDWANGO by ドワンゴ
DWANGO by ドワンゴ
 
AndroidStudioとGradleを利用したScala言語によるAndroidアプリの開発
AndroidStudioとGradleを利用したScala言語によるAndroidアプリの開発AndroidStudioとGradleを利用したScala言語によるAndroidアプリの開発
AndroidStudioとGradleを利用したScala言語によるAndroidアプリの開発
 
Laravel Livewire の紹介
Laravel Livewire の紹介Laravel Livewire の紹介
Laravel Livewire の紹介
 
Swiftで、Webサーバにデータを送信・登録しよう!
Swiftで、Webサーバにデータを送信・登録しよう!Swiftで、Webサーバにデータを送信・登録しよう!
Swiftで、Webサーバにデータを送信・登録しよう!
 
Developing an Akka Edge1-3
Developing an Akka Edge1-3Developing an Akka Edge1-3
Developing an Akka Edge1-3
 
Serverless apps on aws using scala
Serverless apps on aws using scalaServerless apps on aws using scala
Serverless apps on aws using scala
 

Similar to Skinny Framework で始めた Scala

とりあえず使えるSBT
とりあえず使えるSBTとりあえず使えるSBT
とりあえず使えるSBT
Kiyotaka Kunihira
 
20150207 何故scalaを選んだのか
20150207 何故scalaを選んだのか20150207 何故scalaを選んだのか
20150207 何故scalaを選んだのか
Katsunori Kanda
 
いるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevio
いるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevioいるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevio
いるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevio
fd0
 
【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js
Yuto Suzuki
 
ScalaでASICやFPGA用の回路を設計するChisel
ScalaでASICやFPGA用の回路を設計するChiselScalaでASICやFPGA用の回路を設計するChisel
ScalaでASICやFPGA用の回路を設計するChisel
Kei Nakazawa
 
Spark Streamingで作る、つぶやきビッグデータのクローン (2015-11.10版)
Spark Streamingで作る、つぶやきビッグデータのクローン (2015-11.10版)Spark Streamingで作る、つぶやきビッグデータのクローン (2015-11.10版)
Spark Streamingで作る、つぶやきビッグデータのクローン (2015-11.10版)
Junichi Noda
 
Apache Sparkを利用した「つぶやきビッグデータ」クローンとリコメンドシステムの構築
Apache Sparkを利用した「つぶやきビッグデータ」クローンとリコメンドシステムの構築Apache Sparkを利用した「つぶやきビッグデータ」クローンとリコメンドシステムの構築
Apache Sparkを利用した「つぶやきビッグデータ」クローンとリコメンドシステムの構築
Junichi Noda
 
Databricks の始め方
Databricks の始め方Databricks の始め方
Databricks の始め方
Ryoma Nagata
 
DevOpsを支える原則、3つの道
DevOpsを支える原則、3つの道DevOpsを支える原則、3つの道
DevOpsを支える原則、3つの道
Arata Fujimura
 
Overview of Scala ~ Hacker Tackle
Overview of Scala ~ Hacker TackleOverview of Scala ~ Hacker Tackle
Overview of Scala ~ Hacker Tackle
Daisuke Kasuya
 
Rubyで作るクローラー Ruby crawler
Rubyで作るクローラー Ruby crawlerRubyで作るクローラー Ruby crawler
Rubyで作るクローラー Ruby crawler
Takuro Sasaki
 
Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題
Kota Mizushima
 
GitHub Actions と Azure PaaS でプルリクエストごとに環境を ~ Azure Static Web Apps と Containe...
GitHub Actions と Azure PaaS でプルリクエストごとに環境を ~ Azure Static Web Apps と Containe...GitHub Actions と Azure PaaS でプルリクエストごとに環境を ~ Azure Static Web Apps と Containe...
GitHub Actions と Azure PaaS でプルリクエストごとに環境を ~ Azure Static Web Apps と Containe...
Kazumi IWANAGA
 
2015 10 24_spark_osc15tk
2015 10 24_spark_osc15tk2015 10 24_spark_osc15tk
2015 10 24_spark_osc15tk
Junichi Noda
 
Hatena blogdevelopmentflow
Hatena blogdevelopmentflowHatena blogdevelopmentflow
Hatena blogdevelopmentflow
Yasuhiro Onishi
 
さくらインターネットにおけるServerspec導入事例(DevOps勉強会 #3 Serverspecの巻)
さくらインターネットにおけるServerspec導入事例(DevOps勉強会 #3 Serverspecの巻)さくらインターネットにおけるServerspec導入事例(DevOps勉強会 #3 Serverspecの巻)
さくらインターネットにおけるServerspec導入事例(DevOps勉強会 #3 Serverspecの巻)
さくらインターネット株式会社
 
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageekJava エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Kazuhiro Sera
 
20120702勉強会 webアプリ作ってみた
20120702勉強会 webアプリ作ってみた20120702勉強会 webアプリ作ってみた
20120702勉強会 webアプリ作ってみた
Shugo Numano
 
Java in the World of Container by David Buck
Java in the World of Container by David BuckJava in the World of Container by David Buck
Java in the World of Container by David Buck
オラクルエンジニア通信
 

Similar to Skinny Framework で始めた Scala (20)

とりあえず使えるSBT
とりあえず使えるSBTとりあえず使えるSBT
とりあえず使えるSBT
 
20150207 何故scalaを選んだのか
20150207 何故scalaを選んだのか20150207 何故scalaを選んだのか
20150207 何故scalaを選んだのか
 
いるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevio
いるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevioいるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevio
いるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevio
 
【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js
 
ScalaでASICやFPGA用の回路を設計するChisel
ScalaでASICやFPGA用の回路を設計するChiselScalaでASICやFPGA用の回路を設計するChisel
ScalaでASICやFPGA用の回路を設計するChisel
 
Spark Streamingで作る、つぶやきビッグデータのクローン (2015-11.10版)
Spark Streamingで作る、つぶやきビッグデータのクローン (2015-11.10版)Spark Streamingで作る、つぶやきビッグデータのクローン (2015-11.10版)
Spark Streamingで作る、つぶやきビッグデータのクローン (2015-11.10版)
 
Apache Sparkを利用した「つぶやきビッグデータ」クローンとリコメンドシステムの構築
Apache Sparkを利用した「つぶやきビッグデータ」クローンとリコメンドシステムの構築Apache Sparkを利用した「つぶやきビッグデータ」クローンとリコメンドシステムの構築
Apache Sparkを利用した「つぶやきビッグデータ」クローンとリコメンドシステムの構築
 
Databricks の始め方
Databricks の始め方Databricks の始め方
Databricks の始め方
 
DevOpsを支える原則、3つの道
DevOpsを支える原則、3つの道DevOpsを支える原則、3つの道
DevOpsを支える原則、3つの道
 
Overview of Scala ~ Hacker Tackle
Overview of Scala ~ Hacker TackleOverview of Scala ~ Hacker Tackle
Overview of Scala ~ Hacker Tackle
 
Rubyで作るクローラー Ruby crawler
Rubyで作るクローラー Ruby crawlerRubyで作るクローラー Ruby crawler
Rubyで作るクローラー Ruby crawler
 
Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題
 
GitHub Actions と Azure PaaS でプルリクエストごとに環境を ~ Azure Static Web Apps と Containe...
GitHub Actions と Azure PaaS でプルリクエストごとに環境を ~ Azure Static Web Apps と Containe...GitHub Actions と Azure PaaS でプルリクエストごとに環境を ~ Azure Static Web Apps と Containe...
GitHub Actions と Azure PaaS でプルリクエストごとに環境を ~ Azure Static Web Apps と Containe...
 
2015 10 24_spark_osc15tk
2015 10 24_spark_osc15tk2015 10 24_spark_osc15tk
2015 10 24_spark_osc15tk
 
Hatena blogdevelopmentflow
Hatena blogdevelopmentflowHatena blogdevelopmentflow
Hatena blogdevelopmentflow
 
さくらインターネットにおけるServerspec導入事例(DevOps勉強会 #3 Serverspecの巻)
さくらインターネットにおけるServerspec導入事例(DevOps勉強会 #3 Serverspecの巻)さくらインターネットにおけるServerspec導入事例(DevOps勉強会 #3 Serverspecの巻)
さくらインターネットにおけるServerspec導入事例(DevOps勉強会 #3 Serverspecの巻)
 
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageekJava エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
 
Spray intro
Spray introSpray intro
Spray intro
 
20120702勉強会 webアプリ作ってみた
20120702勉強会 webアプリ作ってみた20120702勉強会 webアプリ作ってみた
20120702勉強会 webアプリ作ってみた
 
Java in the World of Container by David Buck
Java in the World of Container by David BuckJava in the World of Container by David Buck
Java in the World of Container by David Buck
 

Skinny Framework で始めた Scala