SlideShare a Scribd company logo
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

PDF
Scalaと過ごした5ヶ月間
PDF
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
PDF
めんどくさくない Scala #kwkni_scala
PDF
[Scalamatsuri2016]あ、社内コミュニティ
PDF
Contributing to Scala OSS from East Asia #ScalaMatsuri
PDF
頑張りすぎないScala
PDF
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
PDF
Scala警察のすすめ
Scalaと過ごした5ヶ月間
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
めんどくさくない Scala #kwkni_scala
[Scalamatsuri2016]あ、社内コミュニティ
Contributing to Scala OSS from East Asia #ScalaMatsuri
頑張りすぎないScala
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
Scala警察のすすめ

What's hot (20)

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

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

PDF
BOF1-Scala02.pdf
PDF
BOF1-Scala02.pdf
PDF
BOF1-Scala02.pdf
PPT
第1回java実習(helloworld)2011
PDF
Object-Funcational Analysis and design
PDF
プログラミング言語Scala
PDF
Scalaでプログラムを作りました
PDF
ATN No.2 Scala事始め
PDF
Scala勉強会_2014_11_18
PDF
早稲田大学授業 - Java Programing上級
PPTX
Scalatronで楽しく学ぶ関数型プログラミング
KEY
関ジャバ JavaOne Tokyo 2012報告会
PDF
Scalaプログラミング・マニアックス
PPTX
ゼロから始めるScala文法 (再)
PDF
Scala conf2013
PPTX
明日から業務で使うScala
PDF
Scala超入門 - 2014/12/13 Scala関西勉強会
PDF
Scalaで萌える関数型プログラミング[1.1.RC1]
KEY
Beginners Scala in FAN 20121009
PDF
Scalaで萌える関数型プログラミング[完全版]
BOF1-Scala02.pdf
BOF1-Scala02.pdf
BOF1-Scala02.pdf
第1回java実習(helloworld)2011
Object-Funcational Analysis and design
プログラミング言語Scala
Scalaでプログラムを作りました
ATN No.2 Scala事始め
Scala勉強会_2014_11_18
早稲田大学授業 - Java Programing上級
Scalatronで楽しく学ぶ関数型プログラミング
関ジャバ JavaOne Tokyo 2012報告会
Scalaプログラミング・マニアックス
ゼロから始めるScala文法 (再)
Scala conf2013
明日から業務で使うScala
Scala超入門 - 2014/12/13 Scala関西勉強会
Scalaで萌える関数型プログラミング[1.1.RC1]
Beginners Scala in FAN 20121009
Scalaで萌える関数型プログラミング[完全版]
Ad

More from Kazuhiro Sera (20)

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