読者です 読者をやめる 読者になる 読者になる

しまてく

学んだ技術を書きためるブログ

[scala][勉強会] Scala会議#1に参加してきました。

Scala会議とは

恐らく日本で行われているScalaの勉強会の中でもっとも大きい規模のものと
なったのではないでしょうか。

以下のURLで録画が見れます。
http://www.ustream.tv/channel/scala-kaigi

以下、僕がメモった事や感じた事をまとめていきます。

イントロ : @j5ik2o さん

http://www.slideshare.net/j5ik2o/scala-9039767

オラクル青山センターにて行われたのですが、いきなりJavaをDisったのでビビりましたw
あとPHPはいつもの扱いな感じ。

会の方針として、「内輪で盛り上がらない」というのを全面に押し出していたのが
とても好感がもてました。

sbt徹底解説 : @xuwei_k さん

http://www.slideshare.net/KenjiYoshida/scalakaigi1sbt

sbtとは

ビルドツールの一種で、sbt自体がScalaで作られている。
sbtには以下の2系統ある。今後は0.10系統を使っていくのがいいだろう。

  1. 0.7系統
  2. 0.10系統

SBTを使う理由として、早いというのももちろんあるが、akka, scalaz, scalate, unfiltered等多くのプロジェクトがSBTを利用しているという事実がある。

jarファイル1つだけなので用意から起動が楽チン

バージョンの設定が超簡単
set scalaVersion := "2.9.0-1"

とするだけでコンパイルに使用されるScalaのバージョンが2.9.0-1になる。

sbtコンソールはコマンドの補完が聞いたり履歴を保存してくれたりするので便利。

注意点

以下をちゃんと設定しないと結構落ちるらしい。

  1. CSMClassUnloadingEnabled
  2. MaxPermSize
IDEとの連携

開発、デバッグIDEから行い、ビルドはsbtでやるのが正しいみたい。
※タイムラインを見ていると
IDEからデバッグしたい時は、sbt起動時に「-Xdebug」を指定するとEclipseからリモートでバッグできる。とのお告げが。
TODO:後で試してみよう。

設定ファイルのDSL

よく使われる、ライブラリ依存定義の構文

val twitter4j = "org.twitter4j" % "twitter4j" % "2.2.4"

というのは

val twitter4j = sbt.toGroupID("org.twitter4j").%("twitter4j").%("2.2.4")

と等価。
「%」というメソッドが存在しており、scalaメソッド呼び出しの為の「.」を省略できるのでこういったDSLが書けるんですね。

UnfilteredとかFinagleの話。そしてScalaの闇について : @yuroyoro さん

http://dl.dropbox.com/u/261418/20110828_scalaconf01_introducing_unfiltered_and_finagle/index.html#0

いきなりウキャス語で解読不能w

Unfiltered

https://github.com/n8han/Unfiltered
http://unfiltered.lessis.me/

非同期I/Oを対象としたツールキット。静的コンテンツは特に考えられてない。
以下のようなところで使われている。

  1. Remember The Milk
  2. Novus
  3. Trust Metrics

このプレゼン資料もUnfilteredのPicture-showというのを用いて作成されている。

コンセプト

パターンマッチング
関数合成
疎結合コンポーネント
組み込みサーバ

Unfilteredを使うと素早く・強力なサーバが書ける。

Finagle

https://github.com/twitter/finagle

twitter検索APIのバックエンドに使用されている。
JVM / NIO / Netty という環境で動作するもの。

プロトコルには依存しないので以下ようなものが使える。

  1. HTTP/HTTPS
  2. HTTP streaming (Comet)
  3. Thrift
  4. memcached
  5. ... more

Futureをやり取りする作りになっているので、すべての処理はFutureのチェーンとして実装され、型安全に非同期処理が保証される。
※node.jsでは開発者が"気をつけ"なければならない。

まとめ

Scalaは並行や同時実行がと相性が良い!
日本人エンジニアは英語に怯んでアーリーアダプターまかせになっているので、文句を垂れ流す前に自分らがアーリーアダプターになって情報発信していこう!
周りの環境のせいにして、自分が努力をする事を怠るな。

Scalaz - とある型クラスのライブラリ : @kmizu さん

http://scalaz.github.com/scalaz/

Scalazでは☆とか★とか∧とか∨とかのUnicode記号が多用されている!

Scalazとは?

Scalaの標準ライブラリにないアレコレを集めた便利パッケージ(Haskellian御用達)
I/O モナドまである。
Option / Listなんかも便利に拡張されているので使うと幸せになれるかも。

サンプルいっぱい
https://github.com/scalaz/scalaz/tree/master/example/src/main/scala/scalaz/example

とりあえず以下の2行をimportしとけば使える。
import scalaz._; // 小文字のscala
import Scalaz._; // 大文字のScala

List#toNel

NotEmptyListを返す。
NonEmptyListを使えば空リストでは無いことが保証されるのでhead, tailが必ず成功する。
reduceLeft, reduceRightでも同様に確実に成功する。

Option#orZero

OptionのorZeroは型ごとのゼロ相当の値(Zero[T] traitをextendsしたもので定義した値)が返る。

いろんなZero
http://scalaz.github.com/scalaz/scalaz-2.9.0-1-6.0.1/doc/index.html#scalaz.Zero$

i.orZero は ~i とも書ける。

Option#getOrElseの短縮

opt.getOrElse(false) と書くところを opt | false と書ける。
直感的!!

Zipper

純粋関数型イテレータ。要素更新もO(1)で高速にできる。

ParatialApply

型パラメータの部分適用(カリー化)ができる。

まとめ

Scalaは仕様がしっかりしてるので公式から仕様書を読むべき。
日本語でまとまった情報が欲しい場合は以下のURLへ。
https://sites.google.com/site/scalajp/

全体のまとめ

LTまでまとめる力がなかったのでセッションだけの振り返りで。
全体を通してすごくクオリティの高い発表者の方々でとても刺激を受けました。


個人的に斬新だったのが「スイーツ募金」というもの。
このお金で買い出しに行ってセッションの間のおやつやジュースに充てるというものでした。合理的ですね。


Scala会議は今後も継続して行っていく方針なので、これからScalaを始める方は要チェックですね。
内輪ネタで盛り上がらない!宣言をしている勉強会なのでとても安心して参加できると思います。


ただこの会を通して一つ残念だったのが女性エンジニアが一人もいないこと!
そのせいで会場がややスメリーな感じでした><


次回は女性Scalalianが参加してくれるといいなー。スイーツタイムあるし。