この国では犬が

本と芝居とソフトウェア

スカラ祭 2016 2 日目 : Scala コミュニティはあります #ScalaMatsuri

ScalaMatsuri の 2 日目は、一日を通して行われるアンカンファレンスの題目を決める朝会から始まります。

アンカンファレンスというのは事前に登壇者や内容を決めず、参加者がテーマを持ち寄って、有志が発表したり、パネルディスカッションをしたり、議論をしたりといったことを、その場で決めてから行うカンファレンス、いやアンカンファレンス、のやり方です。
ScalaMatsuri では数年前からこのやり方を取り入れているようです。

詳しくはこの記事の「2日目にアンカンファレンス」のところを読んでいただければよくわかるかなと思います。

blog.scalamatsuri.org

なお 1 日めのレポートはこちら。

enk.hatenablog.com

朝会

というわけで、朝の 10 時から 1 時間、ワイワイと朝会を行い、一日のセッションを決めました。

f:id:enk_enk:20160131101157j:plain
モデレータの岡本さん(右)と、もう一人運営の方(申し訳ありません、お名前がわかりません……)岩永さん(左)(ご本人からメンションいただきました、ありがとうございました!)

テーマは前日のうちにあらかじめホワイトボードに各自で貼り付けておいて、シールで投票する形式だったので、その得票数の多いものから順に取っていくのですが……。

  • 貼った人が(朝だから)いない
  • そのテーマで話してくれるはずの人が(朝だから)いない
  • (朝会に)日⇔英翻訳が必要で、うっかりマイクを通さずに話すと翻訳してもらえないので、何かと混乱が生じる
  • 主に日本人が話すセッションで英語で聞きたい人がいる場合に通訳が必要になるので部屋の制約が生じる

などなどでやたらとワイワイして最後バタバタしました。笑

実際、かなり(このように)複雑度の高い朝会だったので、バタバタしたのも仕方ないというか、むしろその複雑な仕事をとてもうまく回していたと思います。壇上のお二人以外のフォローも的確で、運営の実力を感じました。

こうやって決まった 2 日目のセッションは、50 分 × 6 コマ。
順に感想を述べていきます。

セッション

Domain-Specific Languages with Scala / Model-based testing with Modbat

一発目は、産総研(AIST)の Cyrille Artho さんによる 2 本立てのセッション。

朝会では NASA が何とか(?)言っていたのでドキドキしていたのですが、結果としては NASAドメインにかかわる話は特になかったように思います。笑

内容は、前半が ScalaDSL を作るということについて、外部 DSL と内部 DSL を対比させながら詳しく見ていくものでした。
全体として、Scala は(Ruby などにも似て)言語そのものの表現力が高いので、内部 DSL にする方がとにかく実装が楽だし、コンパイル時チェックも効くし、十分便利に使えてよいのかな……という印象を持ちました。
Scala 自体が DSL をつくるのに向いている言語だと思うので、Scala を本格的に使うことになったらそういう方面も視野に入れることができて、楽しそうだなと思います。

後半は Modbat というツールを使ったモデルベースのテストの話だったのですが、駆け足で例も少なかったこともあり、いまいち飲み込めずじまいでした……。

Spark 入門

続いては、お名前を聞きそびれてしまったのですが日本人の方と、午後に Spark で日本語テキストマイニングをするというセッションを持たれていた Eduardo Gonzalez さんによる Spark の入門セッション。

前半が Spark の概要の説明で、短い時間で Spark がどういうもので、何ができるのかざっくり掴めてありがたかったです。

後半は Azure 上に用意された環境でのハンズオンでしたが、ネットワークがちょっと不安定なこともあってか参加はできず。
見ていました。

Spark shell(ほぼ Scala の REPL みたいなもの)上で実行していたのですが、途中 Ctrl + C で終了してしまう場面があって、作った人が UNIX をよくわかっていないから……みたいなことを言ってウケていました。笑

Spark の考え方自体はわかりやすくて使いやすそうだなと感じるのですが、やはり分散処理基盤のことを考えるときにいつも感じる、「本当にやりたいこと」ができるのか(ノード内で外部リソースと I/O できるのかとか、I/O をさせないとしたら今度は大きなデータをノード間で引き回すことになってネットワーク的に非効率になるのではとか)という疑問は解けなくて、個人的にもやっとします。
実際にある程度使ってみればわかるようになるのでしょうか。できない、ような、そもそも考え方が違う、ような気はするのですが。

リアクティブシステム入門

お昼をはさんで、午後の一発目。
SBT わからないので「SBT 人間」と迷ったのですが、SBT 人間には同僚が出てくれるということでこちらに来ました。

TIS の前出祐吾さんによるセッションです。

大きく分けて「リアクティブシステムとは」ということを説明する前半と、それを実装した例である「Reactive Solar Farm monitor」(多数のソーラーパネルから情報を収集してモニタリングするシステム)を実動させてみる後半という構成で、とてもわかりやすくまとまっていたと思います。

昨日の岡本さんのセッションとかぶる部分もあればかぶらない部分もありで、あわせて聞いたことでだいぶ理解が深まりました。

個人的に「届けたい価値は高レスポンス、支える原理が伸縮性と耐障害性、手段がメッセージ駆動」という説明がとてもわかりやすかったです。
この説明で初めて(ようやく)Reactive Manifesto のあのよく引用される図の意味が腑に落ちました。

腑に落ちて、なるほどもっともだ、と思ったので署名しておきました。笑
理念自体は、(当たり前といえば当たり前ですが)結局これに全部書いてあるのですね。

やや余談ですが、WEB 上のリソースでは伊藤直也さんの Qiita の記事が、僕がこの 2 日間で得た理解とだいたい同じで、納得感がありました。

qiita.com

後半のデモはというと、マシンスペックの問題でやや動作が重たくはあったものの、Akka で動作させている各ノードが協調しながら動作する様子は見事でした。
たとえば、Master Analyzer(単数)と Worker Analyzer(複数)があって、Worker は増減できるし(立ち上がったら自動的にシステムに参加する)、Master が落ちたら生きている Worker が Master に自動で昇格する、というのもうまくいっていました。
かっこいい。

IntelliJ IDEA で Scala をマスターする

続いて JetBrains の Alexander Podkhalyuzin さん(@Safela)によるセッション。

IntelliJ IDEA の便利な使い方をひたすら披露し続ける実に充実した 50 分間でした。

いや実際、こんな機能もあるんだ、こんなこともできるんだ、と発見の連続でした。僕がそもそもほとんど使ってないというのもあるとは思いますが。
Alexander さん自身「IntelliJ IDEA はすごく便利なのに機能を知らない人が多すぎるから discoverability を上げることに力を入れている」みたいなことを言っていて。大事です。そういう活動。
余談ですが僕(たち)が会社で開発している DataSpider Servista *1 も一種の開発ツールみたいな側面があるので、ユーザミートアップのようなところで Tips を教えるコーナーみたいなのがあっても面白いのかな、と思ったりします。

なかでも以下の 2 つがヒットでした。(ショートカットキーは Windows の場合)

  • Find action(Shift + Ctrl + A)で、名前からアクションを探せる
    • 極論を言うと、ショートカットはこれと「Search everywhere(Shift 2 回)」だけ覚えておけば何とでもなる! すごい!
  • Intention action(Alt + Enter)でとにかく賢くコードの変換候補を出してくれる
    • for 式をガシガシ分解して Scala でどう解釈・実行されるかを見られるのは衝撃的

自分用のメモも兼ねるので、取ったメモは以下にそのまま残しておきます。

IDEA Part

  • focusing performance, general usability, and more discoverability!
  • Run : Shit + Ctrl + F10
  • Find action : Shift + Ctrl + A
  • Use distraction free mode!
  • Search everywhere : Double Shift
    • File : Shift + Ctrl + N
    • Context : Shift + Ctrl + Alt + N
  • Recent Files : Ctrl + E
    • Recently Changed Files : Ctrl + Shift + E
  • Switcher : Ctrl + Tab
  • Class Structure : Ctrl + F12
  • Hide All Windows : Ctrl + Shift + F12
  • Presentation mode as super

Scala Part

  • Use Alt + Enter to improve your scala code
  • Inspection for multiple files is also available
  • Worksheet function : light worksheet interactive mode works like REPL!
  • Intention action : Alt + Enter
    • for 式をガシガシ分解できる!
  • Delete Line : Ctrl + Y
  • Smart Completion : Shift + Ctrl + Space
    • When using Option, it's useful
  • Copy Reference : Ctrl + Shift + Left
  • Toggle Breakpoints : Ctrl + F8

Hidden Gems

  • Variables の右クリックメニューからの Mark Object でオブジェクトを追跡する
  • _DebugLabel で Marked Object を取得する(Watches に追加もできる)

DDD + CQRS + EventSourcing 実装する会 / Akka パフォーマンスチューニングについて話してみよう会

ここで僕にとっては今日初めてのパネルディスカッションです。
ChatWork の加藤さんをモデレータに、Scala で DDD を実践されている人たちとして、ゲヒルンのまつしたさん、昨日もセッションを持たれていた MOTEX の藤井さん、Socket のおくださんが登壇されました。

はじめに加藤さんから DDD の概要をさらっと紹介したあとは、ひたすらディスカッションでした。

全体的な印象として、実際にやっている人が集まるとさすがに議論が深いな、ということと、Scala も DDD もやっていないとなかなかついていけないな、ということを感じました。笑
とはいえ、やっている人たちがこれだけいるということには、それだけで勇気づけられる気がします。

それ以外に得たものとしては、(昨日の藤井さんのセッションでも聞きましたが)CQRS(Command Query Responsibility Segregation)や Event Sourcing というキーワードや、それらの使い方と使ったときのイメージ(どう実装して、どういうところが課題になって……)といったところでしょうか。

CQRS には提唱者の Greg Young さんが書いた割と大物のドキュメントがあって、それを参照しながら議論するようなものなのだ、ということがわかったのも収穫の一つでした。

Scala の教育について

ScalaMatsuri 2016 最後のセッションは、昨日や朝会でも登壇された岡本さんをモデレータとして、前のセッションから続いての加藤さん、Wix の Tomer さん、ドワンゴの吉田さん、はてなのだいくしーさんによるパネルディスカッション。

実は今日一番気になっていた Scala の教育についてのセッションです。
というのも、何を隠そう(隠してない)僕自身が Scala 入門者で、Scala軽くて(薄くて)、網羅的で、正しくて、楽しくて、手も動かせるような入門用リソースがなかなか見当たらないことに困っていたからです。

色々求めすぎだろという感もありますが、たとえば同じく(?)モダンコンパイル型言語である Go には Go コードの書き方A Tour of Go といった具合に日本語の入門リソースが充実していますし、『改訂 2 版 基礎からわかる Go 言語』もとてもいい本でした。

それに比べると Scala では公式のチュートリアルはありますが英語ですし、入門編として有名な Scala School も英語ですし、日本語の書籍はちょっと古いものが多く、使えるには使えるのでしょうが、いまいち心がときめきません。
仕方なく今は公式チュートリアルを英語でやっていますが、英語が苦手な人に勧めるのはちょっとためらわれます。(昨日の瀬良さんの話にもあったように英語がんばろうよというのはあるにせよ、そのせいで Scala に入門しづらい、というのはなんかもったいない)

Effective Scala が日本語で読めるのはとてもありがたいですね。ただ、その手前がありません。

コンセンサスのない Scala 教育

前置きが長くなりましたが、そんなわけでとても関心の強いトピックだったのです。

昨日公開されたドワンゴの Scala 研修テキストの話を皮切りに、議論はさまざまな方向へ展開しましたが、結論めいたものは出なかったように思います。

そうなのです……。

岡本さんが最後に(時間切れでまとめる時間がなかったこともあり)「コンセンサスがないのが現状ということのようです」といったことをおっしゃっていましたが、それを象徴するように、加藤さんが「Better Java →関数型への傾倒→純粋関数型」というステージが……みたいな話をしていたら Tomer さんから「ステージを上がっていくという考え方には同意できない、Scala では色々な選択ができるのであって、関数型で書くかは選択の問題」といった反論がありました。
反論といっても別に必ずしも対立しているわけではなくて、要は加藤さんのチームが「純粋関数型を選択した」ということ(そういう前提で話していた)なのだと思いますが、Scala には何かにつけこういうところがある、という印象はあります。

スケーラブルな言語で、色々な書き方ができるので、その分学習者が混乱してしまう面もあるように感じます。
帰り道で同僚が「コップ本一通り読んでも(そこに書かれていない機能が使われているから)OSS のコードが読めるようにはならない」と言っていたのも印象的でした。

そんな状況の中、公開されたドワンゴのテキストは、これは、すごくありがたい存在なのでは……? と個人的には思っています。
もちろん「ドワンゴの社員のための」テキストではあるのでしょうが、

  • 2015-2016 年時点でつくられた新しいテキストであること
  • 日本語であること
  • (一見したところ)言語機能の解説にとどまらず、エコシステムや、それこそ前述した「選択」の理由、のようなところまで丁寧に書かれているようだったこと

といった理由から、うまく使えば Scala の入門一般に役立つのでは、と期待しています。 とりあえず、Scala 入門者である僕自身がさっそく使ってみたいと思います。よければ他の人にも勧めます。

https://dwango.github.io/scala_text/dwango.github.io

まとめ : Scala コミュニティはあります

こうして楽しい 2 日間が幕を閉じました。

いや、楽しかったです。
率直に言って Scala エンジニアではないし、Scala プログラマでもないし、そらで Hello World 書けるかっていうと書けないのですが、それでも。
何が楽しかったかといえば、Scala という言語自体の魅力はもちろんあるのですが、同じくらい Scala コミュニティの魅力というものもあったのでは、と思います。

(ソフトウェアエンジニアとして)大人が多いというか、Scala がまだ普及しきっていない言語だから、Java とかに比べるとエッジに比較的近いからということもあるかもしれませんが、成熟している感じがするのです。(年齢とかではなく。年齢では Java の方がよっぽど……)
2 日目をまる一日使ったアンカンファレンスがふつうに成立してしまうことからも、それがうかがえます。

僕はこの 2016 年において Java の魅力の半分……とまでは言いませんが 3 割くらいはコミュニティの魅力だと思うのですが、Scala にもコミュニティあるんじゃん、がっしりしたやつが、という印象をこの 2 日間で受けました。

その面でも、Scala これからが楽しみな言語だな、と思います。
当初の思惑通り(?)、Scala の学習ペースを早めて、何らかのソフトの開発で実用できるようになっていけたら、と思っています。

*1:残念ながら Scala ではなく Java で開発しています