Scala Conference in Japan 2013に参加してきました

3/2に開催されたScala Conference in Japan 2013に参加してきました。自分はScalaについてはまだまだ勉強中の身ですが、ためになる情報が色々得られてとても楽しかったです。

このScala Conf、実はチケット販売が始まっていることを知ったときには既にSold Outになっていたのですが、たまたま以下のようなお話しがあり、

申し込んでみたところ、何とチケットが大当たりし、参加したという次第です (サムライズム様、ありがとうございました!) 。

参加者は200名に達していたとのことで、Scalaが徐々に盛り上がってきていることを実感しました。
Scalaコミュニティってちょっと怖い、というイメージを持っている人が結構いると時々聞いていますが、このカンファレンスではそんな雰囲気はなく、むしろこれからScalaの世界に飛び込んでいこうとしている人を歓迎する雰囲気がありました。
各セッションも、これからScalaを学ぶ人に丁度良い内容になっており、それでいてdeepな人も楽しめるようにバランスの良い内容になっていたものが多かったと感じました。
また、カンファレンスを通して感じたのが、日本語を上手に話せる海外のエンジニアの方が多いということです。これは自分が今まで見てきた他のコミュニティでは余り見られなかった事なので新鮮でした。日本でもScalaを積極的にに採用しているような先進的な現場では国籍の違いが余り関係なくなってきているということなのでしょうかねえ。
当日は花粉に苦しめられましたが、様々な発見があり、一日とても楽しめました。

それでは以下に自分が参加したセッションについて軽くコメントでも。

オープニングスピーチ

水島さんによるオープニングスピーチ。今回、このような場を設けようとしたのはScalaコミュニティが日本と海外で断裂しているという課題を感じていたからとのことです (具体的には日本からのコントリビュートが少ない) 。
そこで本家Typesafe社からScala、Akka、Playなどのコアメンバーに来日して頂き、日本のScalaエンジニアと交流を深めてもらおうと言うことでこのカンファレンスを立ち上げたとのこと。
いや、ホント素晴らしいイベントを立ち上げて頂いたと思っています。あっという間にチケットが売りきれるほどの盛況ぶりでしたし、Typesafe社の方々も日本のScalaコミュニティの盛り上がりを実感したのではないかと思っています。

Up up and Out: Scaling Software with Akka

Typesafe社のCTOであるJonas BonérさんによるAkkaの紹介です。恐らく基調講演的な位置付けだと思うのですが、いきなり技術的な内容全開でいくところが一味違うなーという印象を持ちました。(^^;;
Akkaは並行・分散処理を構築するためのフレームワークです。並行処理というと共有ステートや、スレッドロック、スレッド通知...などなど色んな事に気を使う必要があり、とても大変ですが、AkkaはそれをActor同士のメッセージングパッシングと言う形で抽象化しており、利用者は本来の作りたい処理の実装に注力すれば良いことを分かり易く説明されていました。
特に素晴らしいと思ったのは耐障害の仕組みで、基本的にActor階層の親が障害を検知して回復するようになっており、一般的な並行処理の実装では障害に備えてとても防衛的なプログラミングをしないといけない所を、この仕組みによってエラー処理を分離することができるようになっている点が良いなと思いました。
この講演でAkkaに興味を持った人はとても多かったようで、次に自分が参加したAkkaのセッションでも立ち見が出るほどの人気になっていました。

Akka を用いたデータストリーム処理・解析プラットフォーム

CyberAgentのシュティフ・ロマンさんによる、CA社でのAkkaを使ったOnixというデータストリーム処理プラットフォームについてのお話しでした。Scalaではなく、Java APIを使って作っているようです。
Hadoop/Hive、HBaseで構築したログ処理プラットフォーム (Patriot) を補完する位置付けで、SPAM検出や異常値 (不正利用など) 検出などに活用しているとのことです。
Akkaを採用した理由として、疎結合・ロケーション透過性がある点、容易にスケール可能である点、可視性・レースコンディションの問題を考えなくて良い点、Let It Crashの哲学で防衛的に考えずに作れる点 (クラッシュが怖くない) 、Java APIも利用可能でコミュニティの反応が良い点を挙げていました。
自分自身最近Javaでマルチスレッドなアプリケーションを構築していたのですが、ここで述べられていたAkkaの利点にはとても興味を引かれました。

BRMS開発でのScala利用事例

三菱UFJインフォメーションテクノロジーの土佐さんによる、銀行というお堅いところでのScala活用事例のお話しでした。
BRMS (Business Rule Management System) について、既存製品では規模や機能面で厳しいところがあり、新規開発をすることになったのですが、そこでScalaを採用してみたとのことです。
BRMSはビジネスロジック (ルール) を切り出して組み合わせるためのフレームワークで、普通の製品ではルールをリーフ上に並べるのですが、開発したプロダクトではネットワーク状にして、双方向にロジックをたどれるようにする (逆引きが可能になる) ようにしたようです。
Scalaを使って開発した所感として、生産性が高い、Javaとの親和性が高い (Javaに対しても機能提供ができる) 点をメリットとして挙げていました。
ただ、銀行というお堅い場所ではやはり標準導入するには敷居が高いのも確かで、DSLAPI提供と言ったポイント活用が現実的であろうとのことでした。
いきなりフル採用はやはり難しいでしょうが、こういうお堅い現場でもScalaに注目されるようになったということは、ニッチな立ち位置からは抜け出しつつあるのかなと感じました。

LT

お昼休みにはLTが開催されました。一人あたり10分と長めに設定されていたため、いずれも濃い内容になっており楽しめるものでした。

  • 1つめはベトナム出身のNgoc Daoさんによる、ご自身が開発されているXitrumというWebアプリケーションフレームワークの紹介。知る人ぞ知るという感じのフレームワークだったようで、確かにお話しを聞いているとクラスタ化やWebSocketなどもサポートしており、中々強力なフレームワークであると思いました。
  • 2つめは横田さんによるpull requestの送り方の話。ScalaRubyと似てとてもCommunity Drivenであること、そして信頼関係がとても大事 ("awesome!" と言ってあげよう) であることが印象に残りました。
  • 3つめはシステムアートの益子さんによる就業システムの開発事例のお話し。仕様を日本語DSLで書いて、それをScalaプログラムとして動かしてやろうというチャレンジでした!とても興味深い内容でしたが、スライドの文字が小さかったのが残念。
  • 4つめはChris BirchallさんによるScalaでのAscii Art Generatorのお話し。Oderskyさんや水島さんやきゃりーぱみゅぱみゅ(!)の写真をAAで登場させて大盛り上がり。AWTを使って元の写真をスケーリングし、色の濃さ別に文字種を決めてパターンマッチングで出しているとのことです。LTらしいとても楽しい内容でした。
  • 最後は個人スポンサー(!)の九岡さんによる、Scala開発を行えるようにするために行った行動のお話し。ドキュメント、開発者、ライブラリを揃えていくためにPlayドキュメントの翻訳を行ったり、勉強会を開催したり、ライブラリを作ったりと、自ら行動していくことの大切さを説かれていました。

Coding in Style

Typesafe社のJoshua Suerethさんによる、Scalaのマインドセット、Scala2.10の新機能、そして将来の方向についてのお話しでした。
やはり印象に残ったのはScalaのマインドセットについてでした。「文よりも式を」「言語機能を積極的に利用する」「高階関数などを使い、アルゴリズム部分を抽象化する (「どうするか」を「何をするか」から切り離す)」といった話が印象に残りました。
自分はまだまだScala初心者で、Better Java程度の使い方にとどまっている状態なのでとても勉強になりました。

エレガントなデータベース操作を実現するScala ActiveRecordのすすめ

吉野谷さんによる、ご自身が開発されたScala ActiveRecordのご紹介でした。
ScalaのDBアクセスライブラリはSQLをラップしたものが多く、関数型の方向としては正しいが、マッピングが手動になるのが課題だと感じていたようです。そこでSquerylを拡張してActiveRecordとして開発したとのことです。
説明を聞いていると、すごくActiveRecordですね、という感想でした。結構バランス良くできていると思いました。アノテーションを併用しているあたりはJPAっぽいかなとも感じました。

Effective Actors

Typesafe社のJamie AllenさんによるActorベース開発のベストプラクティスのお話しでした。内容的には午前中のJonas Bonérさんの話と被るところも結構ありましたが、お陰でAkkaについてそれなりに内容をつかむことができたと思います。
Akkaを使った場合の開発のルールのお話しでしたが、ここで話されている内容は「単一責任の原則」「障害に対してはFailureZoneを作って隔離する」「プルではなくプッシュを」「メッセージはイミュータブルで」「意味のあるログを書く」...などなど、並行処理を行うアプリケーション全般に通用するような大事な話が多かったと思います。

オブジェクト指向から視る "Better Java" としての Scala

望月さんによる、オブジェクト指向の側面からのScalaのお話しでした。途中バッテリが尽きてしまうというトラブルが発生しましたが、そのハンデがあったにも関わらず、とても分かり易い良い発表でした。
OOではコンポーネントが適切に抽象化されていることが大事ですが、Javaにはコンポーネントの合成という視点で欠けている機能がある。Javaは単一継承で依存関係を明確にする機能もないため、DIのようにライブラリ、仕組みで解決をするしかない。それに対しScalaではTraitやSelf Type Annotation、Abstract Overrideといった言語が備えている機能で克服しているという内容でした。
特に個人的には今までAbstract Overrideがどういうメリットがあるのがピンと来ていなかったのですが、このお話を聞いてとても良く理解できました。

使ってわかったScalaのここがダメ!Play2によるシステム開発事例

竹添さんによる、Scalaの実開発でハマったポイントをTypesafe社の皆様方が見ている前で (!) 発表するという内容でした。この日一番盛り上がったセッションだったように思います。
Scalaにして良かった点はソースコード量が減る、バグが減る、Javaとの親和性、柔軟性と安全性を両立できる点を挙げていました。
困った点はやはりコンパイルの遅さとのことでした。プロジェクトが大型化するとScalaIDEの補完機能も使い物にならない状態になったそうで、解決策としてはもうとにかくハイスペックマシンを、とのことでしたw
他にはSBTが全然シンプルじゃない、Play2はやっぱりコンパイルが遅い、バリデーションが弱い、Function22問題によるForm定義の問題など、実案件で遭遇しそうな課題にことごとくぶつかったようで、とても貴重な情報だと思いました。
Scala開発の総本山であるTypesafe社の方々にこういった実開発における生の情報を伝えられたことはとても意義があったのではないでしょうか。
また、竹添さんが最後に「今のScalaには昔のJavaの熱気がある」と話されたのがとても印象に残っています。

Play Framework - The modern web framework that packs a punch

最後はTypesafe社のJames Roperさんによる、Playの紹介でした。ライブコーディング中心での解説でしたが、ほとんどIntelliJの宣伝になっていたような感じでしたw
IntelliJにライブコーディングのためのスニペットを多数登録しており、流れるようにコードをぺしぺし展開していく様は見事でした。本人曰くここまでいくにはかなりの練習が必要だとのことです。
Play自体はまさしく「より強力になったRails」という印象ですね。Railsの良さを継承しつつ、Scalaの特性を活かしてよりタイプセーフになっており、WebSocketといった新しい技術も積極的に取り込んでいて、最も進んだWebアプリケーションフレームワークの1つではないかと思いました。何より見ていて「とても綺麗だな」と感じました。(JavaEE とかは長年の歴史的経緯もあって、ごちゃごちゃと機能が付け足されて整理されていないところがありますが、Playは一から作り上げている分とても綺麗に整理されているように感じます)

このような感じで、情報盛りだくさんでとても得られるものが多かったです。
最後になりましたがこのような素晴らしいカンファレンスを開催して頂いた主催者の皆様には厚くお礼申し上げます。ありがとうございました!