id:masawadaにScala+Playのおすすめ情報サイトを聞かれたのでまとめてみる。随時追加の方針です。
@windymelt Scala+Playしたいのだけど、オススメの情報サイトとかありますか?なお、Scala未経験です。
— Masayoshi Wada (@masawada) December 4, 2014
追記(12/5 16:56)
id:nkgt_chkonkさんにコメントでご助言を頂きました。Akkaの項で紹介しているid:nkgt_chkonkさんの記事中で紹介されているIO周りのインターフェイスは既に古くなってしまい、Akka 2.3では削除されてしまっているとの事でしたので、その旨について該当の項に追記しました。
ご助言をくださったid:nkgt_chkonkさん、ありがとうございました。
訂正(12/5 01:00)
id:xuweiさんにコメントでご指摘を頂いた通り本文を訂正します。訂正項目は以下の3点です。
- scctはscoverageになっています。
- PlayにはSlickは付いて来ません。
- Play 2.3より
play
コマンドではなくなり、activator
になっています。
調査が不十分でいい加減に書いていました。お詫びして訂正いたします。コメントを下さったid:xuweiさん、ありがとうございました。
総合
Scala CookbookはScalaの実践的なレシピを紹介している。
Scalaメモ(Hishidama's Scala Memo)はScalaのメソッド・クラス・コレクションなどを子細に渡り解説している。必読。
Scala で書く tetrix — Scala で書く tetrixは、関数型アプローチを用いてScalaの簡単なゲームを作成していく。Scalaらしさが全面に出たコードが登場する。
次はTypesafe Activator。
Build Reactive Applications with Typesafe Activator | Typesafe
Scalaやフレームワークをチュートリアル形式で試したり、開発環境無しでScalaプログラムをコンパイルできる。もちろんPlayも使える。すごすぎる。
Scalaの記事を数多く書かれている良質なブログ。勉強になります。
Scalazの記事が豊富。「こんな機能があったのか!」と驚くことが多い。
Scala界の巨人。コンパイラや型システム周りの専門的な記事が多い。
開発環境
僕のScala開発の流れは、
- giter8でプロジェクト作成
project/plugin.sbt
にidea-plugin
を記述(もしくは既にテンプレに記述されてる)build.sbt
に依存関係やプラグインの設定を記述sbt gen-idea
の実行- 生成されたIDEA用プロジェクトデータをIDEAに読ませる
- おめでとう
といった感じ。ちなみにIDEA CE 13からはidea-plugin
は不要となったが、このことについては後述する。
ここで使われるツールキットを概説する。
Intellij IDEA
Scalaの強力な型システムはIDEを使うことで真価を発揮できると言っても過言では無いだろう。そして、Scalaがまともに使えるIDEは実質的にIntellij IDEAしかない。Eclipseでも動くには動くが、従来からScalaがきちんと動くのはIDEAという印象である。
IDEAではプラグインを利用してScalaでの開発が可能となる。これによりシンタックスハイライトや入力アシストが使えるようになる。ただし、コンパイル周りは素直にsbtを使ったほうがよいと感じる。僕はIDEAではあくまで書くだけで、都度、端末からコンパイルしている。
以下の情報はIDEAのバージョンが古かったりするが、操作内容にほぼ変わりは無いのでこれらを参考にインストールするとよいだろう。
Intellij IDEA/Scala/Playframework2.0 での環境構築に関するメモ #play_ja - Shinya’s Daily Report
【図解】Scala 2.10 + IntelliJ IDEA 12 で「Hello World」する - Qiita
sbt
ScalaのsbtはJavaのantである。パッケージの依存関係を自動的に解決し、自動で対応するパッケージを指定したレポジトリからダウンロードする。Scalaのビルドツールはsbt以外にありえないwwwんんwwwww。
sbtのインストール自体は簡単で、最初にブートローダ的なプログラムをインストールしておき(これがsbt
というコマンドを叩いた時に最初に呼ばれる)、ブートローダが設定ファイルで定義されているsbtのバージョンを読み取り、対応するsbt本体をプロジェクトにダウンロードする。この動作は初回起動でのみ行われ、それ以降はそのsbtプロジェクトでのsbtプログラムは使い回される。
sbtのサイトはhttp://www.scala-sbt.org/である。インストールもMacであればbrewやportが使えるので、サイトの詳細な解説を参照。
ちなみにPlay! Frameworkではsbtを改変したplayコマンドがsbtの代わりとなる。PlayプロジェクトではPlay2.3よりplay
を使う。activator
に変更となっていました。訂正してお詫びします。設定はsbtと大差無い。
sbt 0.13のチュートリアルはこちら。
どちらかというとチュートリアルより人のbuild.sbtを見るのが一番分かりやすい気がする。拙作プログラムのbuild.sbtはこちら。
lacquer/build.sbt at master · windymelt/lacquer · GitHub
便利なTips。
sbt で github にあるライブラリを直接使う方法 - YoshioriのBlog
sbt-idea plugin
sbtにIDEA用のExternal Libralies設定を吐かせて、IDEAが正しく依存関係のあるモジュールを処理できるようにするプラグイン。IDEAはCE 13でsbtからの依存関係読み取りに対応したのでこのプラグインは不要となった。
IntelliJ IDEA 13 で SBT がサポートされたので試してみた。 - Qiita
念のため、sbt-idea plugin。
giter8
giter8はコマンドラインツール。Github上のテンプレートから自動的にファイル・ディレクトリ構造を生成する。sbtのプロジェクト作成では良く使うのでインストールしておくとよい。
sbtはディレクトリ構造と設定さえ合っていれば動くので絶対に導入したい。
良い感じのsbtプラグイン
このへん見とけば大体大丈夫です。
Scala/sbt+Jenkinsで継続インテグレーション環境を構築する (+specs2+scalariform+scalastyle+scct) - Qiita
sbt-assembly
sbtに実行可能JARを吐かせるプラグイン。プログラムを配布したいなら必須。
Scala - SBTで実行可能なjarファイルを作る - Qiita
scalariform
Scalaのコードを自動整形するプラグイン。=>
を⇒
に書き換えたりと芸が細かい。
チームのコードを均一化したい!Scalariformで自動的に美しくコードを作る方法 #Scala|CodeIQ MAGAZINE
scalastyle
Scalaのコード規約チェッカ。
Scalastyle - Scala style checker
scctscoverage
Scalaのカバレッジ測定ツール。
sqality/scct · GitHub
scctはscoveraeになったようです。訂正します。
愉快なフレームワークたち
Play Framework
フルスタックなWebフレームワーク。最強感があるがSJISとかに対応してなくてつらいときがある。ちゃっかりWebSocketが使えたりと、いろいろ積みまくって無双している。
Play Framework - Build Modern & Scalable Web Apps with Java and Scala
Playは公式が最強なのでそこを見ておけば大体なんとかなる。『Scala逆引きレシピ』にもそこそこ解説がある。ただし内容が既に古くなっていたりする。こういう界隈にはよくあることだが。
Scala逆引きレシピ (PROGRAMMER’S RECiPE)
- 作者: 竹添直樹,島本多可子
- 出版社/メーカー: 翔泳社
- 発売日: 2012/07/03
- メディア: 単行本(ソフトカバー)
- 購入: 6人 クリック: 54回
- この商品を含むブログ (13件) を見る
Slick
Typesafe謹製の変な"F/Rマッパ"。関数型らしいfor-yield
やmap
などを用いてSQLを発行できる。Anormとかいうデータベース用のプロジェクトがあったけど祿に使えなかったので辞めた。Playを使うと勝手にSlickが付いて来るっぽい。Anormと誤認していました。訂正してお詫びします。(ScalaAnorm)
Akka
アッカリーン。
アクターモデルという仕組みを利用して安定した分散システムとかが構築できるフレームワーク。Erlangのアクターがベースになっている。ネットワークプログラムとかに向いている。その他トランザクショナルメモリが使えたりするので便利。高速で大量のデータを並行処理するのにも向いている。なんとも説明しがたいフレームワーク。これも頻繁にバージョンアップするので注意。
mumoshu: ScalaでMMOのサーバを書くための技術
Scala + akka で簡単なチャットサーバーを書いてみたので解説してみるよ - 猫型の蓄音機は 1 分間に 45 回にゃあと鳴く
注: 上記記事でid:nkgt_chkonkさんにより紹介されているAkka IOのインターフェイスはAkka 2.2の時点で既にold-io扱いとなり、さらにAkka 2.3からは削除されてしまっているため、IOに関してはI/O — Akka Documentationを、TCPまわりに関してはUsing TCP — Akka Documentationを参照したほうがいいとの事です。
Spray
Playよりも軽量なHTTPフレームワーク。Akkaベース。モジュール化されているので欲しい部分だけ使える。拙作のプロキシはこれで実装している。
spray | REST/HTTP for your Akka/Scala Actors
Scalaz
言わずと知れた闇のライブラリ。関数型言語としてのScalaを最大限に強化するライブラリ。面倒な記述をシンプルにまとめることができるようになるが、いかんせんライブラリが重いのと、使いこなせなければコードが醜くなるだけという難点を持つ、トリッキーなライブラリ。誰もその全機能を把握していないという...(うそ。でも僕は定期的に未知の機能と遭遇する)。
奥が深くて勉強したくなるライブラリです。
独習 Scalaz — 独習 ScalazはScalazの様々な機能を実装面から解説する。