Scala Daysというイベントをご存知でしょうか。Scala Daysはプログラミング言語Scalaの国際的な技術 イベントです。2010年から開催され、今年で三回目を迎えます。筆者はこれまですべてのScala Daysに参加・発表してきました。本記事では、Scala Days 2012の様子やScala Daysというイベントの雰囲気等を 写真を交えて紹介したいと思います。この記事を読んで、来年のScala Daysに参加したいという読者が増えれば幸いです。
なお、Scala Daysでは同時間帯に複数(最大で四つ)の発表が行われたため、すべての発表を紹介すること はできませんがご容赦ください。また、Scala Days 2012は多くの発表録画が既にほとんどの発表動画が サイトskillcast video pageで公開されています。この記事等を読んで、詳しい内容に興味を持った方はそちらをご覧になることをお勧めします。
プログラミング言語Scala
Scalaは近年普及し始めている、オブジェクト指向と関数型のパラダイムを統合した言語です。処理系がJVM上で動作し、Javaと同等の実行速度を誇ることや並列・分散処理のためのフレームワークが豊富な点、Domain Specific Language(DSL)を記述しやすい事などが評価されています。
海外ではTwitter、LinkedIn、Amazon.com、Foursquare、Tumblrなどの日々大規模なトラフィックを 処理するインターネット企業を中心に採用が進んでいます。特に、TwitterはScalaをもっとも積極的 に採用しており、社内インフラの多くでScalaが使われています。国内では海外ほど採用事例は多くありませんが、中小規模の会社を中心に採用事例が増えています。
Scala Days の会場
今年のScala DaysはロンドンにあるBarbicanで行われました。Barbicanは国際的に有名なホールで、劇場や多目的ホールなど多くの設備があります。楽団による演奏会がBarbicanで行われることもあるようです。
このBarbicanですが、会場が非常に広大で、別の発表を聴くために部屋を移動するのが 非常に手間でした。今年は、「Space Invader」、「Zen Warrier」、「Scramble」、「Tetris」 という四つの部屋に分けて発表が行われ、会場の端から端まで移動するのに5分くらいかかることもありました。この点は来年は改善して欲しいところです。
これらの部屋名はBarbicanに元々付けられていたわけではなく、Scala Days開催にあたって 便宜上付けられた名前です。各部屋名は古典的なゲームに由来しています。
Scala Days 1日目
Keynote: 『What Scala and Fortress can learn from each other』(Guy Steele)
Scala Daysの初日は、Guy Steele博士によるキーノートで幕を開けました。例年、Scala Days は作者のMaritn Odersky教授によるキーノートで幕を開けるのですが、今年は少し違う形になりました。
Guy Steele博士をご存知無い方も多いと思いますので説明しておきます。Guy Steele 博士は、プログラミング言語Schemeの作者として知られており、コンパイラの分野において 多大な業績を上げている人物です。また、多くのプログラミング言語の言語仕様策定作業に参加しており、Fortran、C、C++、Javaなど多くの言語仕様策定作業に携わっています。特に、Javaの言語仕様はGuy Steele博士による貢献が大きいものです。
発表は、彼が現在携わっている新プログラミング言語FortressとScalaを比較して、それぞれのアプローチの利点・欠点を述べるというものでした。FortressはFortranの後継言語を目指して開発中の言語です。特徴として、並列処理に向いた言語仕様、演算子オーバーロードに関する斬新なアプローチをとっていることなどが挙げられます。
この発表では、特にFortressとScalaの構文に対するアプローチに焦点をあて、それぞれの得失を 説明していました。非常に印象的だったのは、プログラミング言語の構文という説明が難しい分野 について、空白の使い方から個々の演算子の文法まで、かなり詳細に考察されていた事でした。プログラミング言語の構文について強い興味を持っている筆者にとっては非常に興味深い発表でした。
また、個人的な趣味の話になりますが、Guy Steele博士は私がコンピュータサイエンスの分野で最も尊敬する人物の一人であり、その発表を聴けたのは非常に有意義でした。
Anti XML in anger (Ben Parker)
ここからは、私が聴講した発表の一部について紹介します。
最初の発表は、Scala標準のXMLサポートに不満があるため、新しいXMLライブラリAnti XML を作成したというものです。ScalaはXMLを文法レベルでサポートしている言語ですが、XML の属性に対するパターンマッチができないなどいくつもの欠点がある事が指摘されていました。
Anti XMLでは、XMLの要素の属性を指定したマッチングを簡単に行うことができます。また、 Scalaの標準XMLには、要素の個数に比べ、多くのメモリを消費するという欠点がありますが、 Anti XMLではこの点についても改善を行っています。
残念ながら、この発表については途中までしか聴くことができませんでした。Anti XMLの二つ後の発表が直前でキャンセルになったため、筆者が代打として発表することになったからです。
Scala and Ruby - Differences and Similarities (Kota Mizushima)
キャンセルした方の代理として筆者が発表したものです。元々、Proposalとして投稿していたのがリジェクトされたものの、キャンセルがあったため、私の発表が採用される事になったようです。Scala とRubyという全く異なるように見える二つの言語について、類似点と相違点を比較するという発表でした。発表は今一つとはいえ、代打という形で発表の機会をもらえた事は素直に良かったといえます。
Keynote: Towards Haskell in Cloud (Simon Peyton-Jones)
コンピュータ科学の研究者として、また、Haskellの開発者として著名なSimon Peyton-Jones (通称SPJ)による、Haskellに関する発表です。内容は、Akkaなどに少し触れたほかは清清しいほどScalaとは関係無いものでした。また、タイトルにCloudとついていますが、実際の内容は、 Haskell自体の紹介や、Haskellが提供する分散モデル等に関するものが大半だったように思います。 Guy Steele博士の静かで落ち着いた発表と対照的に、情熱的で非常に饒舌であったのが一番印象的 でした。
IntelliJ IDEA Scala Plugin: strengths and weaknesses (Alexander Podkhalyuzin)
Scala用IDEとして人気のあるIntelliJ IDEA Scala Pluginの開発者による発表です。現時点の Scala Pluginの機能と制限事項の紹介が主な内容でした。普段からIntelliJ IDEAを使っている ため、発表自体にはそれほど新鮮味はありませんでしたが、パターンマッチにおけるパターン 変数、たとえば
"foo" match { case foo => }
のようなコードがあったとき、fooの値をデバッガからインスペクトできない等の制限がある事は 知らず、ためになる情報もありました。また、式を入力中にその式の型がOptionである事が期待 されている場合、SomeやNoneを補完候補で出す機能の存在もこの発表で初めて知りました。
また、今後の予定として、Play 2.0サポート、デバッガの改善、リファクタリング機能のさらなる 追加、エラーハイライティングの追加などを行うそうです。IntelliJ IDEAはScala用IDEとして、 もっとも高機能で安定しているので、これらの機能のサポートも期待したいところです。
レセプション
Scala Daysでは、例年、開催初日に趣向を凝らしたレセプションを行ってくれます。2010年(スイス)は、スイスのレマン湖を貸切の船で遊覧しながら会場に向かうというものでした。2012年 (アメリカ)は、コンピュータ科学博物館の建物を貸切り、2階をレセプション会場として、参加者が 好きなときに、1階にある博物館を見学できるようになっていました。
今年は、ロンドンの街中をやはり貸切のバスで一回り観光した後、会場へ向かうというものでした。 以下が貸切バスの写真です。「Scala Bus」というラベルが張ってあるのがわかります。
私を初め多数の参加者がバスの中からロンドンの町並みを写真で撮影していました。以下は、バス の中から私が撮影した一枚です。
レセプション会場は、Lincolns INNという場所で、料理はそれほど特別なものではありませんでした が、とても楽しいひとときでした。ちなみに、会場はステンドグラスがとても美しいものでした。
Scala Days 2日目
Keynote: Where is Scala going? (Martin Odersky)
Scala Daysの2日目はOdersky教授による基調講演で幕を開けました。例年、Odersky教授による 基調講演は、Scalaの発展の歴史、新バージョンで追加される機能の説明、Scalaの今後の方向性 について概要を語るのが基本構成です。今年もその基本構成には違いはありませんでしたが、 言語の機能についてより詳細に話していました。特に、Scala 2.10で追加されるScala用リフレク ションライブラリについては、詳細な実装に踏み込んだ話になっていました。
Binary Resilience (Joshua Suereth)
TypesafeのJosh Suerethによる発表です。この発表は、Scalaを使ったライブラリ開発において、 ライブラリの後方互換性を壊す要因とそれを避ける方法の解説が主なものでした。
Javaではインタフェースへのメソッド追加や、メソッドシグニチャの変更などをしなければ、 ライブラリのバージョンアップに伴ってバイナリの後方互換性が壊れる事はありません。一方、 Scalaでは、気をつけなければ、ソース互換性は保たれてもバイナリの後方互換性が壊れてしまう ケースがいくつも存在します。
- トレイトへの変更に関する問題
- lazy valを定義する事の問題
- どうすればバイナリ互換なScalaライブラリを開発できるか
などについて詳しく解説されており、とてもためになりました。たとえば、
trait A { val foo() }
class B extends A
というトレイトを、
trait A { def foo() }
class B extends A
のように変更すると、B(およびAを継承しているほかのクラス)のバイナリ互換性が壊れてしまいます。 Scalaでメンバをvalとして宣言しても、getterメソッドが生成されるだけである事を考えるとこれは 奇妙な事に見えます。この変更がバイナリ互換性を壊す理由は、トレイトがJVM上では、インタフェース とその実装クラスの組という二つに分けてコンパイルされる事にあります(JVMには、トレイトに相当する 機能が無いため、これは仕方ない事に見えます)。
いずれにせよ、変更によってバイナリ互換性が壊れるかどうかは自明ではないため、Typesafe社は Scala本体のバイナリ互換性をチェックするために、MIMA(MIgration Manager)というツール を使ってマイナーバージョンアップによってバイナリ互換性が壊れていない事をチェックしているそうです。
発表後、Joshに対してMIMAをオープンソース化しないのかたずねた所、その予定は無いという答えがあり、少しがっかりしていました。しかし、この記事を書いている5月下旬ごろ、MIMAがオープンソースソフトウェアとして公開されたという発表がありました。MIMAのオープンソース化に関してはJoshの働きが大きかったようで、感謝しています。
Project Kepler: Compile-Time Metaprogramming for Scala (Eugene Burmako, Christopher Vogt)
Scala 2.10で追加される(かもしれない)新機能の一つ、マクロについての解説です。マクロというと、 C言語のプリプロセッサマクロのようなものを思い浮かべる方も居るかもしれませんが、それよりはるかに強力で、安全なものです。歴史的には、Lispマクロをより発展させて組み込んだNemerle言語があり、ScalaのマクロはNemerleからアイデアの多くを借りて来ています。
これまでも、コンパイラプラグインという形でScalaを拡張する事ができましたが、マクロによって、それがより簡単にできるようになります。Scalaのマクロの実用例として、Scala Language Integrated Connector Kit (SLICK)という、リレーショナルデータベース等にアクセスするための汎用言語拡張が挙げられていました。C#を知っている方には、LINQのようなものと言えばわかりやすいかもしれません。
ScalaはDomain Specific Language(DSL)に向いた言語として宣伝され、事実、かなりそれに向いた 文法や機能を持っていました。しかし、やはり文法のレベルなどの工夫には限界があったため、マクロに相当する機能は是非とも欲しいと感じていました。また、現在のScalaでは、マクロが無いために、いくつかの基盤ライブラリで多くの重複コードができており、マクロが導入される事によって、より実装が簡潔になる事が期待できます。
マクロ機能はScala 2.10の最新マイルストーンである2.10 M3で既に実験的なバージョンが利用可能で、 興味のあるユーザは公式ページからダウンロード して試してみる事ができます。
An Engineer's Guide to the Scala Community (Dick Wall)
Scalaコミュニティに対する問題提起、という、これまでのScala Daysでは見られなかった発表です。 私自身、日本のScalaコミュニティ活動に大きく関わっている事もあり、この発表は大変気になって いました。Dickは発表の前に、個人的な経験によるものと前置きしていましたが、発表はScala コミュニティを考える上で非常に意義深いものでした。
Dickの発表は、Scalaコミュニティは初心者に優しくない、というある意味手厳しい批判から始まりました。もちろん、全ての人がそうではありませんが、実例を挙げて、初心者からの質問に対して難解な回答をする事がある点を批判していました。
また、Scala初学者にScalaを触ってもらうためには、Scalaz(ScalaでHaskellのようなプログラミングを行うライブラリ。Scalaエキスパートの一部に人気がある)のような難解なライブラリを最初に見せてはいけない、sbtを最初に触らせてはいけない、という趣旨のアドバイスもありました。Scalazは、最初に必要なライブラリではなく、素直にうなずけましたが、sbtは現在のScala環境の標準的なビルドツールであるため、この見解は少し考えさせられるものでした。
とはいえ、初学者の多くはその言語を使って何かを作ってみたいのであって、言語を勉強したいわけではないのだ、という指摘ははっとさせられるものでした。これは、Scalaだけでなく多くの 言語コミュニティでも同様に当てはまる話だと思います。自分も含めて、初学者という段階を抜けて しまうと、ついつい自分がどういう道筋をたどってそこまで来たかを忘れて、言語や環境の基本から 学ばせようとおせっかいを焼く人は多いですが、それが果たして正しいのか考え直すいいきっかけ になりました。
また、現在のScalaには、目的をすばやく達成するための「クックブック」が無いことや、初学者に厳密に物事を教えようとし過ぎることも戒めていました。その他にも、教える対象の人が主に使っている言語を否定し過ぎないことなど、言われてみると基本的ではあるものの、ついつい忘れがちな事を 丁寧に説明していました。日本・海外を問わず、改めて言語コミュニティや初学者への教え方を 再考させる良い発表でした。
参加者同士の交流
Scala Daysの大きな意義の一つは、他の参加者やScala開発者との交流にあると言っても過言 ではありません。この項では、どのような形で参加者同士の交流があったかを述べてみます。
今年の会場であるBarbicanは、あちこちに屋内テラスがあり、参加者はそこでコーヒーやドリンクを飲んだり、パンを食べながら、多くの人が議論や談笑していました。
また、室内にも同様の休憩所がありました。私は英語のリスニング能力が低いため、それほど 積極的に議論には加わりませんでしたが、(毎年の参加者であるためか)私の事を覚えている参加者やTypesafe社のメンバーが何名も居て、嬉しいものでした。
休憩所だけでなく、レセプションなどでも盛んに参加者同士の議論が交わされ、このイベントに 参加している人たちの熱意の高さを実感しました。
ちなみに、今年のScala Daysの日本人参加者は私一人だと思っていたのですが、日本人のScalaコミッタの一人である加藤さんも参加されていました。日本人参加者が少ないこのようなイベントでは心強かったものです。
Scala Days 2010~2012の変遷
筆者は初年度からScala Daysに参加してきました。その中で感じたScala Daysの雰囲気の変遷について書いてみたいと思います。Scala Days 2010は初回ということもあり、比較的こじんまりとした中にScala好きな人たちがお祭り騒ぎをやっているという印象でした。発表もちょっとしたライブラリを作ってみたというものから、Scalaを会社に導入するにはどうすればいいか、などまだまだ黎明期という雰囲気を感じさせるものでした。一方で、トラック数が二つしか無かった事もあり、参加者の多くが話題を共有でき、皆、和気あいあいとScalaについての話題に花を咲かせていました。このときの参加者は150名程度でした。
Scala Days 2011は、ちょうどScalaの開発者たちによるTypesafe社が発足したばかりということもあり、より「実用」という側面にフォーカスがあたることになりました。参加者も250名程度と大幅に増え、トラック数も六に増えました。この事自体は良かったのですが、反面、人気の無いセッションにはほとんど人が集まらないという非常に寂しい状態も生まれました。Scalaを実用している人が増えた事もあり、実用志向の強い発表を多くの参加者は好んで聴いていたようです。トラック数が増えた反動か、参加者同士のコミュニケーションは、同じセッションを聴講していた人同士によるものが増えたように感じられました。
今年のScala Days 2012は、「実用」志向がより強まっていました。Scala Days 2010のときは、 どのようにしてScalaを仕事で使うか、という事自体が発表テーマになっているくらいでしたが、今年はScalaを実用している企業による、どのような場面でScalaを使っているか、という 発表が大幅に増えていました。また、今年はリクルータが活発に活動していたのも印象的でした。Scala採用企業による発表スライドの最後にしばしば「We are hiring」という文言があったりと、Scalaエンジニアの需要は(少なくともUnited Kingdomにおいては)増加しているものの、供給がそれに追いついていないように見受けられました。
さて、このように書いておきながら何ですが、Scala DaysにはScalaに関する国際イベントの他に、Scalaの学術的ワークショップという側面もあるため、学術よりの発表枠は毎年一定数確保されています。Scala Daysの魅力は、学術的なワークショップとScala技術者の祭典が組み合わさったところにあるのではないかと思います。
Scala Daysに参加するためには、渡航費や滞在費など少なくない費用がかかりますが、 Scala Days主催者側もそれを考慮してか、毎年趣向を凝らしたレセプションを行って います。初年度は、レマン湖を貸切クルーザーで移動しながらレセプション会場まで移動するというものでした。昨年度は、Computer History Museumを丸ごと貸し切って、参加者はレセプションの合間にComputer History Museumを好きに見学することが できました。今年は、Scala Days専用バスを2台貸切り、ロンドンをバスで観光しながら レセプション会場まで移動しました。参加者のために毎年凝った趣向のイベントを企画 してくれる主催者側の姿勢には好感を持ちます。
Scala Days に参加したい人へのアドバイス
この記事を読んでScala Daysに参加してみたいと思った方に対して、例年の参加者として 僭越ながら少々アドバイスをさせていただきたいと思います。
- 英語のリスニング能力を鍛えよう
Scala Daysに参加する大きな意義の一つは、参加者同士の交流にあります。このとき、 一番重要なのは英語のリスニング能力です。せっかく参加者同士が技術的に面白い 話をしていても、それをうまく聴き取れなくては、その輪に加わる事が難しくなって しまいます(私はある程度開き直って声をかけたりしますが)。また、発表の質疑応答 でもリスニング能力は重要です。参加者はネイティブスピーカーばかりではないので それほど高いリスニング能力は必要とされませんが、技術系イベントのPodCastなどを 日頃から聴いておくと良いでしょう。
英語のスピーチ能力はあるに越したことはありませんが、こちらはカタコトでも十分 なんとかなります。意図が伝わらなかった場合、ちゃんと聞き返してくれますから、 それを繰り返せば意思疎通は取れます。しかし、リスニング能力が欠如している場合 この意思疎通が難しくなります。
- Scalaコミュニティへ貢献しよう
Scala本体やsbtなど、Scala関係の主要ツール群に貢献しておけば、他の参加者から 声をかけてくれる事もあります。現在、Scala関係のツール群は主にgithubで行われて いますから、貢献する事はそれほど難しくありません。たとえば、scaladocのドキュ メントに不足があったら、それに少し文言を追加する事から始めても構いません。
- 参加者/開発者との個人的な親交を持とう
これは、別に対面でなくとも良いのですが、TwitterやgithubへのIssue登録などを 通じて、個人的に参加者の一部を親交を持っておくと良いです。特に、マイナー なライブラリの作者はフィードバックを欲しています。そういった事を通じて 個人的な親交を持っておくと、Scala Daysに参加したときに見知った名前があれば 声をかけやすくなります。
- 旅の恥は掻き捨て
これは元の意味とは違いますが、話しかけてうまく行かない事を恐れる必要 は無いということです。あなたがScalaの有名人でなければ、コミュニケーション がうまく行かなくても忘れ去られるだけです。最低限のマナーを失しなければ 何も恐れる必要はありません。また、英語のリスニング等が苦手な方は、あらかじめ 話し相手にその事を伝えておき、ゆっくりしゃべって欲しい旨を正直に話すのが良いでしょう。経験上、そういった事を言って明確に嫌がられたことはありません。 表面上わかった風に相槌を打ち続けた結果、コミュニケーションが成立していないと相手にとられる可能性すらあります。
Scala Days 2012 諸経費
さて、Scala Days 2012についてこれまで紹介してきましたが、実際問題どのくらいお金 がかかるのか気になる人も居ると思いますので、東京在住の私がScala Days 2012参加に かかった費用の概算を以下に示します。
- Scala Days 2012 参加費: 約35000円
- 往復航空機代(成田 <-> ヒースロー空港): 約135000円
- ホテル宿泊費(三泊): 約50000円
- その他雑費: 約10000円
- 合計: 約230000円
ただし、Scala Daysの開催地は毎回変わるため、滞在費(特に航空機代、ホテル宿泊費) は年によって大きく変動することに注意してください。また、ホテルについては、Scala Days推奨ホテルの場合、早期予約をすることで割引が効きます。
まとめ
Scala Days 2012および、Scala Daysというイベントについて概要を紹介してみましたが、いかがでしたでしょうか。この記事をきっかけに、来年のScala Daysに参加してみたい、という人が一人でも増えれば筆者としては幸いです。来年の開催地はまだ決まっていませんが、 ひょっとしたらアジアになるのではという噂もあります。アジアの場合、日本が開催地になる 可能性もあるわけで、日本でScala Daysが開催されたらとてもうれしいですね!