Lambdaカクテル

Common LISPが好きなWeb屋さんです 自宅サーバやフロントエンドもできます

Scala開発を始める人におすすめのScala関連情報サイトをまとめてみた

id:masawadaScala+Playのおすすめ情報サイトを聞かれたのでまとめてみる。随時追加の方針です。

追記(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 CookbookScalaの実践的なレシピを紹介している。

Scalaメモ(Hishidama's Scala Memo)Scalaメソッド・クラス・コレクションなどを子細に渡り解説している。必読。

日本Scalaユーザーズグループ - ScalaJP

Scala で書く tetrix — Scala で書く tetrixは、関数型アプローチを用いてScalaの簡単なゲームを作成していく。Scalaらしさが全面に出たコードが登場する。

次はTypesafe Activator。

Build Reactive Applications with Typesafe Activator | Typesafe

Scalaフレームワークチュートリアル形式で試したり、開発環境無しでScalaプログラムをコンパイルできる。もちろんPlayも使える。すごすぎる。

( ꒪⌓꒪) ゆるよろ日記

Scalaの記事を数多く書かれている良質なブログ。勉強になります。

ひなたねこ

Scalazの記事が豊富。「こんな機能があったのか!」と驚くことが多い。

scalaとか・・・

Scala界の巨人。コンパイラや型システム周りの専門的な記事が多い。

開発環境

僕のScala開発の流れは、

  1. giter8でプロジェクト作成
  2. project/plugin.sbtidea-pluginを記述(もしくは既にテンプレに記述されてる)
  3. build.sbtに依存関係やプラグインの設定を記述
  4. sbt gen-ideaの実行
  5. 生成されたIDEA用プロジェクトデータをIDEAに読ませる
  6. おめでとう

といった感じ。ちなみに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

Scala環境構築

sbt

ScalasbtJavaの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プロジェクトではplayを使う。Play2.3よりactivatorに変更となっていました。訂正してお詫びします。設定はsbtと大差無い。

sbt 0.13のチュートリアルはこちら。

始める sbt — 始める sbt

どちらかというとチュートリアルより人の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。

mpeltonen/sbt-idea · GitHub

giter8

giter8はコマンドラインツールGithub上のテンプレートから自動的にファイル・ディレクトリ構造を生成する。sbtのプロジェクト作成では良く使うのでインストールしておくとよい。

今更ながらgiter8を使ってみた - おみブロZ

sbtはディレクトリ構造と設定さえ合っていれば動くので絶対に導入したい。

良い感じのsbtプラグイン

このへん見とけば大体大丈夫です。

Scala/sbt+Jenkinsで継続インテグレーション環境を構築する (+specs2+scalariform+scalastyle+scct) - Qiita

sbt-assembly

sbtに実行可能JARを吐かせるプラグイン。プログラムを配布したいなら必須。

sbt/sbt-assembly · GitHub

Scala - SBTで実行可能なjarファイルを作る - Qiita

scalariform

Scalaのコードを自動整形するプラグイン=>に書き換えたりと芸が細かい。

チームのコードを均一化したい!Scalariformで自動的に美しくコードを作る方法 #Scala|CodeIQ MAGAZINE

scalastyle

Scalaのコード規約チェッカ。

Scalastyle - Scala style checker

scctscoverage

Scalaカバレッジ測定ツール sqality/scct · GitHub

scctはscoveraeになったようです。訂正します。

Scoverage

scoverage · GitHub

愉快なフレームワークたち

Play Framework

フルスタックなWebフレームワーク。最強感があるがSJISとかに対応してなくてつらいときがある。ちゃっかりWebSocketが使えたりと、いろいろ積みまくって無双している。

Play Framework - Build Modern & Scalable Web Apps with Java and Scala

Playは公式が最強なのでそこを見ておけば大体なんとかなる。『Scala逆引きレシピ』にもそこそこ解説がある。ただし内容が既に古くなっていたりする。こういう界隈にはよくあることだが。

Scala逆引きレシピ (PROGRAMMER’S RECiPE)

Scala逆引きレシピ (PROGRAMMER’S RECiPE)

Slick

Typesafe謹製の変な"F/Rマッパ"。関数型らしいfor-yieldmapなどを用いてSQLを発行できる。Anormとかいうデータベース用のプロジェクトがあったけど祿に使えなかったので辞めた。Playを使うと勝手にSlickが付いて来るっぽい。Anormと誤認していました。訂正してお詫びします。(ScalaAnorm

Slick

Akka

アッカリーン。

アクターモデルという仕組みを利用して安定した分散システムとかが構築できるフレームワークErlangのアクターがベースになっている。ネットワークプログラムとかに向いている。その他トランザクショナルメモリが使えたりするので便利。高速で大量のデータを並行処理するのにも向いている。なんとも説明しがたいフレームワーク。これも頻繁にバージョンアップするので注意。

Akka

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

Sprayの簡単な紹介 - アドファイブ日記

Scalaz

言わずと知れた闇のライブラリ。関数型言語としてのScalaを最大限に強化するライブラリ。面倒な記述をシンプルにまとめることができるようになるが、いかんせんライブラリが重いのと、使いこなせなければコードが醜くなるだけという難点を持つ、トリッキーなライブラリ。誰もその全機能を把握していないという...(うそ。でも僕は定期的に未知の機能と遭遇する)。

奥が深くて勉強したくなるライブラリです。

独習 Scalaz — 独習 ScalazはScalazの様々な機能を実装面から解説する。