SlideShare a Scribd company logo
1 of 41
Download to read offline
Java エンジニアチームが始めやすい
Scala コーディングスタイル
瀬良 和弘 @seratch_ja

#ichigayageek
自己紹介
• Scala を初めて触ったのは 2009 年
• ScalikeJDBC プロジェクトリード(2011∼)
• Skinny Framework プロジェクトリード(2013∼)
• Scalatra、json4s、Scalate メンテナ
はじめに
• この発表の内容は「Java を得意とする Scala 初学者の
プログラマ」を想定してそうした方々が馴染みやすそ
うな一つのスタイルを紹介するものです
• 既に世の中には様々な Scala のコーディングガイドが
ありますので、そちらもご参照ください
• Scala Style Guide
• Databricks Scala Coding Style Guide
• PayPal Scala Style Guidelines
• Twitter's Effective Scala (ちょっと古い)
アジェンダ
• まず、私が関わる OSS の宣伝を少しだけ..
• 重厚な設計を忘れて、まずシンプルに書き始める
• Java プログラマらしい整然としたプロジェクト
• 文でなく式であることを意識して if/else も使う
• 例外を否定するかどうかはスタンスをとる
• Future はスレッドプールを強く意識する
• Java モジュールの知識を活かす
• チームが目指したい Scala プロジェクトとは
アジェンダ
• まず、私が関わる OSS の宣伝を少しだけ..
• 重厚な設計を忘れて、まずシンプルに書き始める
• Java プログラマらしい整然としたプロジェクト
• 文でなく式であることを意識して if/else も使う
• 例外を否定するかどうかはスタンスをとる
• Future はスレッドプールを強く意識する
• Java モジュールの知識を活かす
• チームが目指したい Scala プロジェクトとは
まず、私が関わる OSS の宣伝を少しだけ..
• ScalikeJDBC - シンプルな DB アクセスライブラリ、
GitHub スター数では Slick に次いで 2 位
• Skinny Framework - Rails に強く影響を受けた Web フ
レームワークを中心としたプロジェクト、Scaffolding
をはじめ必要なものは一通り っている
• Skinny Micro New! - Skinny Framework 2 のコア部分を
切り出したマイクロフレームワーク、Sinatra 風の DSL
で簡単に Scala で Web アプリを作りことができる
• Scalatra、json4s、Scalate も PR 待っています
Skinny Micro はこれだけで動く
Servlet だから Future 使いづらいを過去のものに
ぜひお試しください(気に入ったら star を)
それでは、本題へ・・
アジェンダ
• まず、私が関わる OSS の宣伝を少しだけ..
• 重厚な設計を忘れて、まずシンプルに書き始める
• Java プログラマらしい整然としたプロジェクト
• 文でなく式であることを意識して if/else も使う
• 例外を否定するかどうかはスタンスをとる
• Future はスレッドプールを強く意識する
• Java モジュールの知識を活かす
• チームが目指したい Scala プロジェクトとは
アジェンダ
• まず、私が関わる OSS の宣伝を少しだけ..
• 重厚な設計を忘れて、まずシンプルに書き始める
• Java プログラマらしい整然としたプロジェクト
• 文でなく式であることを意識して if/else も使う
• 例外を否定するかどうかはスタンスをとる
• Future はスレッドプールを強く意識する
• Java モジュールの知識を活かす
• チームが目指したい Scala プロジェクトとは
重厚な設計を忘れて、まずシンプルに書き始める
• 特に Java の人はあえて Scala を静的型を持つ Ruby と
捉えて、バランス感覚を養うとよい
• case class を value object の入れ物としてまず慣れる
(Java beans より楽!→パターンマッチの理解へ)
• 単純な結果のキャッシュはメソッド定義の代わりに
lazy val を使うだけで済むことも多い
• Scala は言語機能だけでテスタビリティを保てる
• val で定義したメンバも override できる
• 必ずしも DI の仕組みに頼る必要はない
サンプル例
サンプル例
アジェンダ
• まず、私が関わる OSS の宣伝を少しだけ..
• 重厚な設計を忘れて、まずシンプルに書き始める
• Java プログラマらしい整然としたプロジェクト
• 文でなく式であることを意識して if/else も使う
• 例外を否定するかどうかはスタンスをとる
• Future はスレッドプールを強く意識する
• Java モジュールの知識を活かす
• チームが目指したい Scala プロジェクトとは
Java プログラマらしい整然としたプロジェクト
• sealed を使うとき以外は 1 ファイル 1 モジュール
(class/companion or trait)
• public なメンバ・メソッドは型を明示する
• 適当にトップレベルに放り込まず package 階層を持つ
• 暗黙の型変換を使った既存 class 拡張を乱用しない(デ
フォルトで有効になる使い方を安易にやらない)
• 「とりあえず interface 定義」をやるなら中途半端にや
らない(実装を適切に分離/隠 する)
型の明示に IntelliJ IDEA が便利
型の明示に IntelliJ IDEA が便利
アジェンダ
• まず、私が関わる OSS の宣伝を少しだけ..
• 重厚な設計を忘れて、まずシンプルに書き始める
• Java プログラマらしい整然としたプロジェクト
• 文でなく式であることを意識して if/else も使う
• 例外を否定するかどうかはスタンスをとる
• Future はスレッドプールを強く意識する
• Java モジュールの知識を活かす
• チームが目指したい Scala プロジェクトとは
文でなく式であることを意識して if/else も使う
• 再代入不可で var を書かない制約はさほど厳しくない
• メソッド・コードブロックが返すべき型を明示する
• ローカル変数でもコードブロックをうまく使う
• 返すべき型の値を返す if/else 式やパターンマッチ
(early return しない、else のない if を書かない)
• try/catch でも値を返せる特性を活かす
• Option(..).map(..).getOrElse(..) というイディオム
• チェインしすぎず、適度に名前をつける
サンプル例
サンプル例
アジェンダ
• まず、私が関わる OSS の宣伝を少しだけ..
• 重厚な設計を忘れて、まずシンプルに書き始める
• Java プログラマらしい整然としたプロジェクト
• 文でなく式であることを意識して if/else も使う
• 例外を否定するかどうかはスタンスをとる
• Future はスレッドプールを強く意識する
• Java モジュールの知識を活かす
• チームが目指したい Scala プロジェクトとは
例外を否定するかどうかはスタンスをとる
• Scala は Java と違ってチェック例外の仕組みがない
(理由:Open-Closed Principle に従う)
• 例外を保持しうるデータ型:Try、Either、Future
• 例外を否定した API と決めたなら徹底的にやる(Try/
Either/Future を返すメソッドが例外投げるのは最悪)
• 常に標準のデータ型である必要はなく、成功・失敗を
反映した結果オブジェクトを返してもよい
サンプル例
サンプル例
サンプル例
アジェンダ
• まず、私が関わる OSS の宣伝を少しだけ..
• 重厚な設計を忘れて、まずシンプルに書き始める
• Java プログラマらしい整然としたプロジェクト
• 文でなく式であることを意識して if/else も使う
• 例外を否定するかどうかはスタンスをとる
• Future はスレッドプールを強く意識する
• Java モジュールの知識を活かす
• チームが目指したい Scala プロジェクトとは
Future はスレッドプールを強く意識する
• 標準で提供される ExecutionContext.global は一つの
ForkJoinPool が裏で動いている
• 用途ごとにプールを分けた方がよければ implicit で渡す
ExecutionContext を自前で作って使い分ける
• Future と同期処理を包んだものを混ぜるときはただ型
を合わせるだけでなく、挙動を理解し想像する
• Future の中の同期処理がスレッドプールを浪費する
リスクはないか、そのプール設定は妥当か
サンプル例
サンプル例
アジェンダ
• まず、私が関わる OSS の宣伝を少しだけ..
• 重厚な設計を忘れて、まずシンプルに書き始める
• Java プログラマらしい整然としたプロジェクト
• 文でなく式であることを意識して if/else も使う
• 例外を否定するかどうかはスタンスをとる
• Future はスレッドプールを強く意識する
• Java モジュールの知識を活かす
• チームが目指したい Scala プロジェクトとは
Java モジュールの知識を活かす
• 目的を達成するために Java の既存コードを組み合わせ
ることは何ら問題ない
• 手元の既存コードの流用だけでなく JDBC など標準
規格、主要サービス提供 Java SDK の利用
• Java っぽくなるが、局所的に使えばよい(完全に
ラップするのはそれなりにコストがかかる)
• バイナリ互換問題から解放されるメリット
• Collection API 変換は JavaConversions ではなく
JavaConverters を使う(asScala で明示的変換)
サンプル例
サンプル例
サンプル例
アジェンダ
• まず、私が関わる OSS の宣伝を少しだけ..
• 重厚な設計を忘れて、まずシンプルに書き始める
• Java プログラマらしい整然としたプロジェクト
• 文でなく式であることを意識して if/else も使う
• 例外を否定するかどうかはスタンスをとる
• Future はスレッドプールを強く意識する
• Java モジュールの知識を活かす
• チームが目指したい Scala プロジェクトとは
チームが目指したい Scala プロジェクトとは
• 長くメンテしていきたい Scala プロジェクト? or 使い
捨てのプロジェクト?
• 一つのプロジェクトに専念? or 更新頻度のまちまちな
小さなアプリケーションを複数かけもち?
• 依存ライブラリがどんどん互換性崩してもコンパイル
エラーになるから大丈夫?
• 何でも Scala でやりたがる病..(皆かかります)
• 最近、自分の中で流行っている新しいスタイル..
• このプロジェクト、後任はどう思うか?
たまには精神論でも..
• チームの納得感 + 客観的な目線
• この発表のスタイルがしっくり来るチームもあれば、
ほとんど納得できないチームもあるはず
• 組織の中で排他的なチームをつくってしまうと、中
長期的には負債になる(みんなが追いつくべき?)
• Scala は楽しい、なぜなら・・
• 自分の好きなようにやっていて楽しい?
• チームで開発しやすいから楽しい?
• Scala にしてよかったと認識される状況とは?
まとめ
• 凝りすぎず、シンプルに書く
• Java プログラマ的美徳は Scala でも活きる
• 基本 return を書かない、全ては式
• 例外を保持するデータ型はその設計に慣れてから
• Future はマルチスレッドプログラミング
• Java を流用するのは全然アリです
• チームのための Scala コードを書く

More Related Content

What's hot

PlayFramework1.x基礎編
PlayFramework1.x基礎編PlayFramework1.x基礎編
PlayFramework1.x基礎編Asami Abe
 
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略takezoe
 
Scala界隈の近況
Scala界隈の近況Scala界隈の近況
Scala界隈の近況takezoe
 
Scalaはじめました!
Scalaはじめました!Scalaはじめました!
Scalaはじめました!Asami Abe
 
Scala.js触ってみた
Scala.js触ってみたScala.js触ってみた
Scala.js触ってみたAsami Abe
 
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回Asami Abe
 
Scalaの現状と今後
Scalaの現状と今後Scalaの現状と今後
Scalaの現状と今後Kota Mizushima
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発Kota Mizushima
 
Do you like scala
Do you like scalaDo you like scala
Do you like scalaYuto Suzuki
 
プロダクトにおけるScala
プロダクトにおけるScalaプロダクトにおけるScala
プロダクトにおけるScalaYuto Suzuki
 
おっさんES6/ES2015,React.jsを学ぶ
おっさんES6/ES2015,React.jsを学ぶおっさんES6/ES2015,React.jsを学ぶ
おっさんES6/ES2015,React.jsを学ぶdcubeio
 
Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題Kota Mizushima
 
Introduction of SQL Anti-pattern at Phpcon Hokkaido
Introduction of SQL Anti-pattern at Phpcon HokkaidoIntroduction of SQL Anti-pattern at Phpcon Hokkaido
Introduction of SQL Anti-pattern at Phpcon HokkaidoKenta Kawai
 
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
TDD BootCamp in JJUG CCC - レガシーコード対策編 -TDD BootCamp in JJUG CCC - レガシーコード対策編 -
TDD BootCamp in JJUG CCC - レガシーコード対策編 -Shuji Watanabe
 
株式会社ドワンゴにおけるScala教育の現状
株式会社ドワンゴにおけるScala教育の現状株式会社ドワンゴにおけるScala教育の現状
株式会社ドワンゴにおけるScala教育の現状Kota Mizushima
 
ScalaでBacklogの通知bot作ったで
ScalaでBacklogの通知bot作ったでScalaでBacklogの通知bot作ったで
ScalaでBacklogの通知bot作ったでAsami Abe
 
Oracleがnode.jsをやり始めたというのだが!
Oracleがnode.jsをやり始めたというのだが!Oracleがnode.jsをやり始めたというのだが!
Oracleがnode.jsをやり始めたというのだが!Hiroshi Hayakawa
 
The Essence of Using Ruby on Rails in Corporations
The Essence of Using Ruby on Rails in CorporationsThe Essence of Using Ruby on Rails in Corporations
The Essence of Using Ruby on Rails in CorporationsKoichiro Ohba
 
No sql with mysql cluster (MyNA・JPUG合同DB勉強会)
No sql with mysql cluster (MyNA・JPUG合同DB勉強会)No sql with mysql cluster (MyNA・JPUG合同DB勉強会)
No sql with mysql cluster (MyNA・JPUG合同DB勉強会)Shinya Sugiyama
 
Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Daysに行ってみて - あるいはスイス旅行記 -Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Daysに行ってみて - あるいはスイス旅行記 -Kota Mizushima
 

What's hot (20)

PlayFramework1.x基礎編
PlayFramework1.x基礎編PlayFramework1.x基礎編
PlayFramework1.x基礎編
 
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
 
Scala界隈の近況
Scala界隈の近況Scala界隈の近況
Scala界隈の近況
 
Scalaはじめました!
Scalaはじめました!Scalaはじめました!
Scalaはじめました!
 
Scala.js触ってみた
Scala.js触ってみたScala.js触ってみた
Scala.js触ってみた
 
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
 
Scalaの現状と今後
Scalaの現状と今後Scalaの現状と今後
Scalaの現状と今後
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発
 
Do you like scala
Do you like scalaDo you like scala
Do you like scala
 
プロダクトにおけるScala
プロダクトにおけるScalaプロダクトにおけるScala
プロダクトにおけるScala
 
おっさんES6/ES2015,React.jsを学ぶ
おっさんES6/ES2015,React.jsを学ぶおっさんES6/ES2015,React.jsを学ぶ
おっさんES6/ES2015,React.jsを学ぶ
 
Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題
 
Introduction of SQL Anti-pattern at Phpcon Hokkaido
Introduction of SQL Anti-pattern at Phpcon HokkaidoIntroduction of SQL Anti-pattern at Phpcon Hokkaido
Introduction of SQL Anti-pattern at Phpcon Hokkaido
 
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
TDD BootCamp in JJUG CCC - レガシーコード対策編 -TDD BootCamp in JJUG CCC - レガシーコード対策編 -
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
 
株式会社ドワンゴにおけるScala教育の現状
株式会社ドワンゴにおけるScala教育の現状株式会社ドワンゴにおけるScala教育の現状
株式会社ドワンゴにおけるScala教育の現状
 
ScalaでBacklogの通知bot作ったで
ScalaでBacklogの通知bot作ったでScalaでBacklogの通知bot作ったで
ScalaでBacklogの通知bot作ったで
 
Oracleがnode.jsをやり始めたというのだが!
Oracleがnode.jsをやり始めたというのだが!Oracleがnode.jsをやり始めたというのだが!
Oracleがnode.jsをやり始めたというのだが!
 
The Essence of Using Ruby on Rails in Corporations
The Essence of Using Ruby on Rails in CorporationsThe Essence of Using Ruby on Rails in Corporations
The Essence of Using Ruby on Rails in Corporations
 
No sql with mysql cluster (MyNA・JPUG合同DB勉強会)
No sql with mysql cluster (MyNA・JPUG合同DB勉強会)No sql with mysql cluster (MyNA・JPUG合同DB勉強会)
No sql with mysql cluster (MyNA・JPUG合同DB勉強会)
 
Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Daysに行ってみて - あるいはスイス旅行記 -Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Daysに行ってみて - あるいはスイス旅行記 -
 

Similar to Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek

Scala.jsはじめました!
Scala.jsはじめました!Scala.jsはじめました!
Scala.jsはじめました!K Kinzal
 
Scalaz-StreamによるFunctional Reactive Programming
Scalaz-StreamによるFunctional Reactive ProgrammingScalaz-StreamによるFunctional Reactive Programming
Scalaz-StreamによるFunctional Reactive ProgrammingTomoharu ASAMI
 
Skinny Framework で始めた Scala
Skinny Framework で始めた ScalaSkinny Framework で始めた Scala
Skinny Framework で始めた ScalaRyuji Yamashita
 
20150207 何故scalaを選んだのか
20150207 何故scalaを選んだのか20150207 何故scalaを選んだのか
20150207 何故scalaを選んだのかKatsunori Kanda
 
PHP フィールドインジェクションに挑戦する PHP勉強会2014
PHP フィールドインジェクションに挑戦する PHP勉強会2014PHP フィールドインジェクションに挑戦する PHP勉強会2014
PHP フィールドインジェクションに挑戦する PHP勉強会2014Yuuki Takezawa
 
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Taisuke Shiratori
 
勉強会用資料:Javaアプリ作成
勉強会用資料:Javaアプリ作成勉強会用資料:Javaアプリ作成
勉強会用資料:Javaアプリ作成ssuser331f24
 
Overview of Scala ~ Hacker Tackle
Overview of Scala ~ Hacker TackleOverview of Scala ~ Hacker Tackle
Overview of Scala ~ Hacker TackleDaisuke Kasuya
 
Type scriptのいいところ
Type scriptのいいところType scriptのいいところ
Type scriptのいいところKazuhide Maruyama
 
20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)Masayuki Kanou
 
JavaScriptトレンド総括(2014)
JavaScriptトレンド総括(2014)JavaScriptトレンド総括(2014)
JavaScriptトレンド総括(2014)VOYAGE GROUP
 
WikiWikiアジャイル
WikiWikiアジャイルWikiWikiアジャイル
WikiWikiアジャイルFumio Kawakami
 

Similar to Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek (20)

Scala.jsはじめました!
Scala.jsはじめました!Scala.jsはじめました!
Scala.jsはじめました!
 
Scala is-unscared
Scala is-unscaredScala is-unscared
Scala is-unscared
 
こわくないScala
こわくないScalaこわくないScala
こわくないScala
 
Scala入門
Scala入門Scala入門
Scala入門
 
Scalaz-StreamによるFunctional Reactive Programming
Scalaz-StreamによるFunctional Reactive ProgrammingScalaz-StreamによるFunctional Reactive Programming
Scalaz-StreamによるFunctional Reactive Programming
 
Modeling Workshop
Modeling WorkshopModeling Workshop
Modeling Workshop
 
Skinny Framework で始めた Scala
Skinny Framework で始めた ScalaSkinny Framework で始めた Scala
Skinny Framework で始めた Scala
 
20150207 何故scalaを選んだのか
20150207 何故scalaを選んだのか20150207 何故scalaを選んだのか
20150207 何故scalaを選んだのか
 
PHP フィールドインジェクションに挑戦する PHP勉強会2014
PHP フィールドインジェクションに挑戦する PHP勉強会2014PHP フィールドインジェクションに挑戦する PHP勉強会2014
PHP フィールドインジェクションに挑戦する PHP勉強会2014
 
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009
 
Scalaノススメ
ScalaノススメScalaノススメ
Scalaノススメ
 
勉強会用資料:Javaアプリ作成
勉強会用資料:Javaアプリ作成勉強会用資料:Javaアプリ作成
勉強会用資料:Javaアプリ作成
 
Overview of Scala ~ Hacker Tackle
Overview of Scala ~ Hacker TackleOverview of Scala ~ Hacker Tackle
Overview of Scala ~ Hacker Tackle
 
Beginners scala 20121113
Beginners scala 20121113Beginners scala 20121113
Beginners scala 20121113
 
Type scriptのいいところ
Type scriptのいいところType scriptのいいところ
Type scriptのいいところ
 
20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)
 
とりあえず使えるSBT
とりあえず使えるSBTとりあえず使えるSBT
とりあえず使えるSBT
 
JavaScriptトレンド総括(2014)
JavaScriptトレンド総括(2014)JavaScriptトレンド総括(2014)
JavaScriptトレンド総括(2014)
 
TypeScript超入門
TypeScript超入門TypeScript超入門
TypeScript超入門
 
WikiWikiアジャイル
WikiWikiアジャイルWikiWikiアジャイル
WikiWikiアジャイル
 

More from Kazuhiro Sera

All I learned while working on a Scala OSS project for over six years #ScalaM...
All I learned while working on a Scala OSS project for over six years #ScalaM...All I learned while working on a Scala OSS project for over six years #ScalaM...
All I learned while working on a Scala OSS project for over six years #ScalaM...Kazuhiro Sera
 
Skinny Meetup Tokyo 2 日本語スライド
Skinny Meetup Tokyo 2 日本語スライドSkinny Meetup Tokyo 2 日本語スライド
Skinny Meetup Tokyo 2 日本語スライドKazuhiro Sera
 
Future on Servlet #scala_ks
Future on Servlet #scala_ksFuture on Servlet #scala_ks
Future on Servlet #scala_ksKazuhiro Sera
 
Servlet と Future の関わり方 #scala_ks
Servlet と Future の関わり方 #scala_ksServlet と Future の関わり方 #scala_ks
Servlet と Future の関わり方 #scala_ksKazuhiro Sera
 
マイクロサービス運用の所感 #m3dev
マイクロサービス運用の所感 #m3devマイクロサービス運用の所感 #m3dev
マイクロサービス運用の所感 #m3devKazuhiro Sera
 
Scala が支える医療系ウェブサービス #jissenscala
Scala が支える医療系ウェブサービス #jissenscalaScala が支える医療系ウェブサービス #jissenscala
Scala が支える医療系ウェブサービス #jissenscalaKazuhiro Sera
 
Scala on Rails #rakutentech
Scala on Rails #rakutentechScala on Rails #rakutentech
Scala on Rails #rakutentechKazuhiro Sera
 
Solid And Sustainable Development in Scala
Solid And Sustainable Development in ScalaSolid And Sustainable Development in Scala
Solid And Sustainable Development in ScalaKazuhiro Sera
 
Beginning Scala with Skinny Framework #jjug_ccc
Beginning Scala with Skinny Framework #jjug_cccBeginning Scala with Skinny Framework #jjug_ccc
Beginning Scala with Skinny Framework #jjug_cccKazuhiro Sera
 
Skinny Framework 1.0.0
Skinny Framework 1.0.0Skinny Framework 1.0.0
Skinny Framework 1.0.0Kazuhiro Sera
 
Skinny Framework Progress Situation
Skinny Framework Progress SituationSkinny Framework Progress Situation
Skinny Framework Progress SituationKazuhiro Sera
 
Skinny Framework 進捗どうですか? #fud_scala
Skinny Framework 進捗どうですか? #fud_scalaSkinny Framework 進捗どうですか? #fud_scala
Skinny Framework 進捗どうですか? #fud_scalaKazuhiro Sera
 
テストの運用について #m3dev
テストの運用について #m3devテストの運用について #m3dev
テストの運用について #m3devKazuhiro Sera
 
歌舞伎座.tech 1 LT - ScalikeJDBC Async & Skinny Framework #kbkz_tech
歌舞伎座.tech 1 LT - ScalikeJDBC Async & Skinny Framework #kbkz_tech歌舞伎座.tech 1 LT - ScalikeJDBC Async & Skinny Framework #kbkz_tech
歌舞伎座.tech 1 LT - ScalikeJDBC Async & Skinny Framework #kbkz_techKazuhiro Sera
 
Kabukiza.tech 1 LT - ScalikeJDBC-Async & Skinny Framework #kbkz_tech
Kabukiza.tech 1 LT - ScalikeJDBC-Async & Skinny Framework #kbkz_techKabukiza.tech 1 LT - ScalikeJDBC-Async & Skinny Framework #kbkz_tech
Kabukiza.tech 1 LT - ScalikeJDBC-Async & Skinny Framework #kbkz_techKazuhiro Sera
 
テストを書くのが嫌いな君へ #m3dev
テストを書くのが嫌いな君へ #m3devテストを書くのが嫌いな君へ #m3dev
テストを書くのが嫌いな君へ #m3devKazuhiro Sera
 
Skinny Controllers, Skinny Models
Skinny Controllers, Skinny ModelsSkinny Controllers, Skinny Models
Skinny Controllers, Skinny ModelsKazuhiro Sera
 
ScalikeJDBC Tutorial for Beginners
ScalikeJDBC Tutorial for BeginnersScalikeJDBC Tutorial for Beginners
ScalikeJDBC Tutorial for BeginnersKazuhiro Sera
 
A Test Code Generator for RSpec Users
A Test Code Generator for RSpec UsersA Test Code Generator for RSpec Users
A Test Code Generator for RSpec UsersKazuhiro Sera
 

More from Kazuhiro Sera (20)

All I learned while working on a Scala OSS project for over six years #ScalaM...
All I learned while working on a Scala OSS project for over six years #ScalaM...All I learned while working on a Scala OSS project for over six years #ScalaM...
All I learned while working on a Scala OSS project for over six years #ScalaM...
 
Skinny Meetup Tokyo 2 日本語スライド
Skinny Meetup Tokyo 2 日本語スライドSkinny Meetup Tokyo 2 日本語スライド
Skinny Meetup Tokyo 2 日本語スライド
 
Skinny 2 Update
Skinny 2 UpdateSkinny 2 Update
Skinny 2 Update
 
Future on Servlet #scala_ks
Future on Servlet #scala_ksFuture on Servlet #scala_ks
Future on Servlet #scala_ks
 
Servlet と Future の関わり方 #scala_ks
Servlet と Future の関わり方 #scala_ksServlet と Future の関わり方 #scala_ks
Servlet と Future の関わり方 #scala_ks
 
マイクロサービス運用の所感 #m3dev
マイクロサービス運用の所感 #m3devマイクロサービス運用の所感 #m3dev
マイクロサービス運用の所感 #m3dev
 
Scala が支える医療系ウェブサービス #jissenscala
Scala が支える医療系ウェブサービス #jissenscalaScala が支える医療系ウェブサービス #jissenscala
Scala が支える医療系ウェブサービス #jissenscala
 
Scala on Rails #rakutentech
Scala on Rails #rakutentechScala on Rails #rakutentech
Scala on Rails #rakutentech
 
Solid And Sustainable Development in Scala
Solid And Sustainable Development in ScalaSolid And Sustainable Development in Scala
Solid And Sustainable Development in Scala
 
Beginning Scala with Skinny Framework #jjug_ccc
Beginning Scala with Skinny Framework #jjug_cccBeginning Scala with Skinny Framework #jjug_ccc
Beginning Scala with Skinny Framework #jjug_ccc
 
Skinny Framework 1.0.0
Skinny Framework 1.0.0Skinny Framework 1.0.0
Skinny Framework 1.0.0
 
Skinny Framework Progress Situation
Skinny Framework Progress SituationSkinny Framework Progress Situation
Skinny Framework Progress Situation
 
Skinny Framework 進捗どうですか? #fud_scala
Skinny Framework 進捗どうですか? #fud_scalaSkinny Framework 進捗どうですか? #fud_scala
Skinny Framework 進捗どうですか? #fud_scala
 
テストの運用について #m3dev
テストの運用について #m3devテストの運用について #m3dev
テストの運用について #m3dev
 
歌舞伎座.tech 1 LT - ScalikeJDBC Async & Skinny Framework #kbkz_tech
歌舞伎座.tech 1 LT - ScalikeJDBC Async & Skinny Framework #kbkz_tech歌舞伎座.tech 1 LT - ScalikeJDBC Async & Skinny Framework #kbkz_tech
歌舞伎座.tech 1 LT - ScalikeJDBC Async & Skinny Framework #kbkz_tech
 
Kabukiza.tech 1 LT - ScalikeJDBC-Async & Skinny Framework #kbkz_tech
Kabukiza.tech 1 LT - ScalikeJDBC-Async & Skinny Framework #kbkz_techKabukiza.tech 1 LT - ScalikeJDBC-Async & Skinny Framework #kbkz_tech
Kabukiza.tech 1 LT - ScalikeJDBC-Async & Skinny Framework #kbkz_tech
 
テストを書くのが嫌いな君へ #m3dev
テストを書くのが嫌いな君へ #m3devテストを書くのが嫌いな君へ #m3dev
テストを書くのが嫌いな君へ #m3dev
 
Skinny Controllers, Skinny Models
Skinny Controllers, Skinny ModelsSkinny Controllers, Skinny Models
Skinny Controllers, Skinny Models
 
ScalikeJDBC Tutorial for Beginners
ScalikeJDBC Tutorial for BeginnersScalikeJDBC Tutorial for Beginners
ScalikeJDBC Tutorial for Beginners
 
A Test Code Generator for RSpec Users
A Test Code Generator for RSpec UsersA Test Code Generator for RSpec Users
A Test Code Generator for RSpec Users
 

Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek

  • 2. 自己紹介 • Scala を初めて触ったのは 2009 年 • ScalikeJDBC プロジェクトリード(2011∼) • Skinny Framework プロジェクトリード(2013∼) • Scalatra、json4s、Scalate メンテナ
  • 3. はじめに • この発表の内容は「Java を得意とする Scala 初学者の プログラマ」を想定してそうした方々が馴染みやすそ うな一つのスタイルを紹介するものです • 既に世の中には様々な Scala のコーディングガイドが ありますので、そちらもご参照ください • Scala Style Guide • Databricks Scala Coding Style Guide • PayPal Scala Style Guidelines • Twitter's Effective Scala (ちょっと古い)
  • 4. アジェンダ • まず、私が関わる OSS の宣伝を少しだけ.. • 重厚な設計を忘れて、まずシンプルに書き始める • Java プログラマらしい整然としたプロジェクト • 文でなく式であることを意識して if/else も使う • 例外を否定するかどうかはスタンスをとる • Future はスレッドプールを強く意識する • Java モジュールの知識を活かす • チームが目指したい Scala プロジェクトとは
  • 5. アジェンダ • まず、私が関わる OSS の宣伝を少しだけ.. • 重厚な設計を忘れて、まずシンプルに書き始める • Java プログラマらしい整然としたプロジェクト • 文でなく式であることを意識して if/else も使う • 例外を否定するかどうかはスタンスをとる • Future はスレッドプールを強く意識する • Java モジュールの知識を活かす • チームが目指したい Scala プロジェクトとは
  • 6. まず、私が関わる OSS の宣伝を少しだけ.. • ScalikeJDBC - シンプルな DB アクセスライブラリ、 GitHub スター数では Slick に次いで 2 位 • Skinny Framework - Rails に強く影響を受けた Web フ レームワークを中心としたプロジェクト、Scaffolding をはじめ必要なものは一通り っている • Skinny Micro New! - Skinny Framework 2 のコア部分を 切り出したマイクロフレームワーク、Sinatra 風の DSL で簡単に Scala で Web アプリを作りことができる • Scalatra、json4s、Scalate も PR 待っています
  • 8. Servlet だから Future 使いづらいを過去のものに
  • 11. アジェンダ • まず、私が関わる OSS の宣伝を少しだけ.. • 重厚な設計を忘れて、まずシンプルに書き始める • Java プログラマらしい整然としたプロジェクト • 文でなく式であることを意識して if/else も使う • 例外を否定するかどうかはスタンスをとる • Future はスレッドプールを強く意識する • Java モジュールの知識を活かす • チームが目指したい Scala プロジェクトとは
  • 12. アジェンダ • まず、私が関わる OSS の宣伝を少しだけ.. • 重厚な設計を忘れて、まずシンプルに書き始める • Java プログラマらしい整然としたプロジェクト • 文でなく式であることを意識して if/else も使う • 例外を否定するかどうかはスタンスをとる • Future はスレッドプールを強く意識する • Java モジュールの知識を活かす • チームが目指したい Scala プロジェクトとは
  • 13. 重厚な設計を忘れて、まずシンプルに書き始める • 特に Java の人はあえて Scala を静的型を持つ Ruby と 捉えて、バランス感覚を養うとよい • case class を value object の入れ物としてまず慣れる (Java beans より楽!→パターンマッチの理解へ) • 単純な結果のキャッシュはメソッド定義の代わりに lazy val を使うだけで済むことも多い • Scala は言語機能だけでテスタビリティを保てる • val で定義したメンバも override できる • 必ずしも DI の仕組みに頼る必要はない
  • 16. アジェンダ • まず、私が関わる OSS の宣伝を少しだけ.. • 重厚な設計を忘れて、まずシンプルに書き始める • Java プログラマらしい整然としたプロジェクト • 文でなく式であることを意識して if/else も使う • 例外を否定するかどうかはスタンスをとる • Future はスレッドプールを強く意識する • Java モジュールの知識を活かす • チームが目指したい Scala プロジェクトとは
  • 17. Java プログラマらしい整然としたプロジェクト • sealed を使うとき以外は 1 ファイル 1 モジュール (class/companion or trait) • public なメンバ・メソッドは型を明示する • 適当にトップレベルに放り込まず package 階層を持つ • 暗黙の型変換を使った既存 class 拡張を乱用しない(デ フォルトで有効になる使い方を安易にやらない) • 「とりあえず interface 定義」をやるなら中途半端にや らない(実装を適切に分離/隠 する)
  • 20. アジェンダ • まず、私が関わる OSS の宣伝を少しだけ.. • 重厚な設計を忘れて、まずシンプルに書き始める • Java プログラマらしい整然としたプロジェクト • 文でなく式であることを意識して if/else も使う • 例外を否定するかどうかはスタンスをとる • Future はスレッドプールを強く意識する • Java モジュールの知識を活かす • チームが目指したい Scala プロジェクトとは
  • 21. 文でなく式であることを意識して if/else も使う • 再代入不可で var を書かない制約はさほど厳しくない • メソッド・コードブロックが返すべき型を明示する • ローカル変数でもコードブロックをうまく使う • 返すべき型の値を返す if/else 式やパターンマッチ (early return しない、else のない if を書かない) • try/catch でも値を返せる特性を活かす • Option(..).map(..).getOrElse(..) というイディオム • チェインしすぎず、適度に名前をつける
  • 24. アジェンダ • まず、私が関わる OSS の宣伝を少しだけ.. • 重厚な設計を忘れて、まずシンプルに書き始める • Java プログラマらしい整然としたプロジェクト • 文でなく式であることを意識して if/else も使う • 例外を否定するかどうかはスタンスをとる • Future はスレッドプールを強く意識する • Java モジュールの知識を活かす • チームが目指したい Scala プロジェクトとは
  • 25. 例外を否定するかどうかはスタンスをとる • Scala は Java と違ってチェック例外の仕組みがない (理由:Open-Closed Principle に従う) • 例外を保持しうるデータ型:Try、Either、Future • 例外を否定した API と決めたなら徹底的にやる(Try/ Either/Future を返すメソッドが例外投げるのは最悪) • 常に標準のデータ型である必要はなく、成功・失敗を 反映した結果オブジェクトを返してもよい
  • 29. アジェンダ • まず、私が関わる OSS の宣伝を少しだけ.. • 重厚な設計を忘れて、まずシンプルに書き始める • Java プログラマらしい整然としたプロジェクト • 文でなく式であることを意識して if/else も使う • 例外を否定するかどうかはスタンスをとる • Future はスレッドプールを強く意識する • Java モジュールの知識を活かす • チームが目指したい Scala プロジェクトとは
  • 30. Future はスレッドプールを強く意識する • 標準で提供される ExecutionContext.global は一つの ForkJoinPool が裏で動いている • 用途ごとにプールを分けた方がよければ implicit で渡す ExecutionContext を自前で作って使い分ける • Future と同期処理を包んだものを混ぜるときはただ型 を合わせるだけでなく、挙動を理解し想像する • Future の中の同期処理がスレッドプールを浪費する リスクはないか、そのプール設定は妥当か
  • 33. アジェンダ • まず、私が関わる OSS の宣伝を少しだけ.. • 重厚な設計を忘れて、まずシンプルに書き始める • Java プログラマらしい整然としたプロジェクト • 文でなく式であることを意識して if/else も使う • 例外を否定するかどうかはスタンスをとる • Future はスレッドプールを強く意識する • Java モジュールの知識を活かす • チームが目指したい Scala プロジェクトとは
  • 34. Java モジュールの知識を活かす • 目的を達成するために Java の既存コードを組み合わせ ることは何ら問題ない • 手元の既存コードの流用だけでなく JDBC など標準 規格、主要サービス提供 Java SDK の利用 • Java っぽくなるが、局所的に使えばよい(完全に ラップするのはそれなりにコストがかかる) • バイナリ互換問題から解放されるメリット • Collection API 変換は JavaConversions ではなく JavaConverters を使う(asScala で明示的変換)
  • 38. アジェンダ • まず、私が関わる OSS の宣伝を少しだけ.. • 重厚な設計を忘れて、まずシンプルに書き始める • Java プログラマらしい整然としたプロジェクト • 文でなく式であることを意識して if/else も使う • 例外を否定するかどうかはスタンスをとる • Future はスレッドプールを強く意識する • Java モジュールの知識を活かす • チームが目指したい Scala プロジェクトとは
  • 39. チームが目指したい Scala プロジェクトとは • 長くメンテしていきたい Scala プロジェクト? or 使い 捨てのプロジェクト? • 一つのプロジェクトに専念? or 更新頻度のまちまちな 小さなアプリケーションを複数かけもち? • 依存ライブラリがどんどん互換性崩してもコンパイル エラーになるから大丈夫? • 何でも Scala でやりたがる病..(皆かかります) • 最近、自分の中で流行っている新しいスタイル.. • このプロジェクト、後任はどう思うか?
  • 40. たまには精神論でも.. • チームの納得感 + 客観的な目線 • この発表のスタイルがしっくり来るチームもあれば、 ほとんど納得できないチームもあるはず • 組織の中で排他的なチームをつくってしまうと、中 長期的には負債になる(みんなが追いつくべき?) • Scala は楽しい、なぜなら・・ • 自分の好きなようにやっていて楽しい? • チームで開発しやすいから楽しい? • Scala にしてよかったと認識される状況とは?
  • 41. まとめ • 凝りすぎず、シンプルに書く • Java プログラマ的美徳は Scala でも活きる • 基本 return を書かない、全ては式 • 例外を保持するデータ型はその設計に慣れてから • Future はマルチスレッドプログラミング • Java を流用するのは全然アリです • チームのための Scala コードを書く