ScalaMatsuri 2017 に参加してきました(2日目:午前の部)

ScalaMatsuri 2017 2日目はアンカンファレンスでした。

朝食~朝会

ScalaMatsuriの会場の近場に宿を取ったこともあり、完全に朝食をあてにしてましたw

それで朝食のサンドイッチをもぐもぐして「飲み物のこと考えてなかったわ-」「あー、あそこにオレンジジュースがー。もらっとこー」みたいなフリーダムな感じで朝を過ごしつつ、その日行われる発表に投票したりしてました。

朝会はそんな感じでみんなの投票結果を拾いつつ、その日やる発表をみんなで決めていきました。こういうのも楽しいですね。

🍣(Sushi)

この日の目玉のひとつが本職の寿司職人による出張寿司バーでした。

11:00オープンだったので、朝会が終わってすぐに行きました。寿司大好き。4貫いただきました。けっこうサビが効いていました。美味しかったです。海外からいらっしゃった人も寿司バーにならんでいました。

1コマめ:Lens の基本

MonocleのコミッタでもあるAoyama(@AoiroAoino)さんの発表です。Monocleは知っていたのですが、発表を聞くまで発表者がMonocleのコミッタだとは知りませんでした。

スライド

Lens自体は「Lensっていう便利なのがあるらしいよ」みたいなのをTwitterのTLでみかけて「そうなんだすごいね!」という軽い気持ちでHaskellとScalaのShapelessでちょっと触ってみたぐらいで、ネストの深いデータ構造であまり苦労したことがなかったこともあり、あまり深く理解していませんでした。ということで、本当に基本的なところから説明していただいたのでよく理解することができました。

2コマめ:Performance tuning for Scala and/or JVM

Amayaさんの発表で、本当は彼がJVMに詳しい人にいろいろ聞きたかったらしいのですが、お客様の中にJVMに詳しい方がおらず、Amayaさん手持ちの主にコレクションに関するパフォーマンスネタを披露していただきました。たぶんコップ本とかにも書いてある内容もあったと思いますが、初心に帰ってコレクションのパフォーマンスの特徴をおさらいするのにちょうどいい内容でした。これからScalaを使っていくぞ!という初学者にもちょうどいい内容だったと思います。

ランチ

なんと寿司はおやつだったらしいw さらに弁当が支給されました。

美味しゅうございました。ご飯はたけのこご飯でした。

 

ということで、次回の2日目午後の部レポートで完結の予定です。

ScalaMatsuri 2017 に参加してきました(1日目:午後の部)

ちんたら更新してすいません。ScalaMatsuri レポートつづきます。

4コマめ:次世代Scalaコンパイラー Dottyの今

Guillaume Martresさんの発表です。カッコづきでEPFLってさらって書いてありますけど、EPFLってあの「スイス連邦工科大学ローザンヌ校」ですよね? あのScalaの父、Martin Odersky先生の。

すいません。スライドはどこにあるかわかりませんでした。

初めて同時通訳で聞きました。さすがプロのかたは違いますね。しかし、体質的なものなのか、同時通訳のレシーバのイヤホンをつけていると何故か猛烈な睡魔に襲われるのです! なんでなんだろう?

さておき、内容についてですが、私としては合併型ってのができるというのが驚きポイントでした。TypeScriptやflowにもある Int | String みたいな書き方ですね。これ、flowみたいな型推論も効くとコーディングスタイルがガラッと変わることになりますね。

それから、ついにenumが言語レベルでサポートされるというのも期待ポイントでした。

5コマめ:プログラムを Free にする: 関数型プログラミングの本質への開眼

Paul Szulc(@rabbitonweb)さんの発表で、いきなりハイテンションな感じでした。

それで、なんか青いTシャツ着てて、胸の真ん中に赤い文字が……あれはスーパーマン? いや!!

※ひとのツイートを利用してすいません

発表の内容は、Freeモナドの解説で、私もFreeモナドに興味があったもののどこから手を付けたら良いかわからなかったのでいいきっかけになりました。それから、同時通訳の人すごい! 「Coproduct」をその場で「余積」と訳しちゃう!(コプロダクトって言ってくれても良かったのに!)ちらっと同時通訳の人がいるボックス席見ましたけど、その手の人(数学等を特に専門にしている)には見えなかったけどなぁ。おみそれしました!

6コマめ:メタメタにしてやんよ。(メタプログラミングもしくは Shapeless のすすめ)

Chris Birchall(@cbirchal)さんの発表です。けど、この邦題考えたの誰なんでしょう?(笑)

スライド

私はTwitterでも公言しているとおり、未だScalaのマクロを使うようなコーディングをしたことがありません(マクロを利用したライブラリは利用したことはありますが)。そんな私のScalaの経歴の恥部を埋めるべくこの発表を聞きました。たへんわかりやすくScalaマクロによるメタプログラミングとそれと同じようにScalaマクロの後釜にある予定のScala Metaを紹介いただきました。

ただ、やっぱり同時通訳をイヤホンで聞いてると猛烈な眠気に襲われるんです! Shapelessの話も楽しみにしていたのですが、まったく記憶にありません。

7コマめ:Serverless ArchitectureをScalaで構築するぞ

藤井 善隆(@yoshiyoshifujii)さんの発表です。私はサーバレスアーキテクチャって最近良く聞くけどなんだっけ?ぐらいのレベルなのでその無知が少しでも埋まるようにこの発表を聞きました。

スライド

やっぱり基本知識がない、自分の中に課題がないということで、あまり理解が及ばず残念でした。サーバレスアーキテクチャってRPCとは違うの?と思ったぐらいでしょうか。この分野はもっと勉強しないといけないなと痛感しました。

8コマめ:ChatWorkのScala採用プロダクト “Falcon” リリースまでの失敗と成功の歴史

かとじゅん(@j5ik2o)さんこと、加藤 潤一さんの発表です。

ChatWorkさんがPHPからScalaへ乗り換えやたという話は結構有名な話だと思うですが、それを推し進めた当事者による発表ということで一番大きな部屋で開催されたにも関わらず超満員でした。内容としては特にScalaがというような話は少なかったのですが、このシステムデベロッパの一端を生業としている身としてはとても興味深く聞かせていただきました。

ChatWorkさんのこの乗り換え劇が多くのScala推進派の強い味方になったと聞きます。私も話のタネにさせていただいております。今後もChatWorkさんに続く大型実例が出て来るといいなぁと思いました。

懇親会

1日目の最後は懇親会がありました。懇親会では、割りと人見知りな私ですが話しかけてくれる人もおり、ありがたかったです。それから、勇気を出してがくぞさんに前々から気になっていたPlay2-Auth行く末なども直接聞くことができてよかったです。

オードブルや缶ビールを囲んでの立食形式でしたが、ここでもハラールに対応していて流石だなと感心しました。

それと、スポンサーブースに出展していた「株式会社エフ・コード」さんがクロスワードクイズに答えるて応募すると抽選でMacBook Proが当たるというなんとも太っ腹な企画をしていて、その抽選結果の発表がありました。私も応募していたのですが、なんとなんと、それに当たっちゃいました!

ScalaMatsuriにはたくさんの協賛企業があり、それぞれがそれぞれの立場でScalaコミュニティを応援したい気持ちがあったと思います。その中でエフ・コードさんのこの企画は、その気持を表す上でこの上なく目立ったわけで、私も会社経営の一角を担う身としてこの企画者は流石だなと思いました。

尚、頂いたMacは、すでに私の開発環境の一翼を担うようにセットアップされております。

 

次回は2日目について書きます。

 

ScalaMatsuri 2017 に参加してきました(1日目:午前の部)

昨日に引き続き ScalaMatusri 2017 のレポートです。

オープニング

初めての ScalaMatsuri 参加です。見られるものは全部見ようという腹積もりで、ほぼ開場時刻ジャストに会場に入りまして、オープニングから参加しました。

それで、司会者の方が海外から参加された方に向けて英語で語りかけていて「あー。やっぱ、これからの時代、英語ができないエンジニアは三等市民やなー(私は英語できない)」と危機感をつのらせました。

そう! ScalaMatsuri にはたくさんの海外からの参加者がいらっしゃいました。思ったよりずっと国際的なカンファレンスなんだなとこの時すでに感じました(その後そう思いしららされるできごとはいくつも出てきました)。

しかし、司会者さん、自己紹介忘れてる! 一体誰なんだこの人?! 2日間の日程のなかでこの方が一番聞き取りやすい話し方するのにもったいない!

1コマめ:Readable Scala

まずはがくぞ(@gakuzzzz)さんこと中村学さんの発表を聞きました。彼が開発しているPlay2-Authにたいへんお世話になっていますし、その開発者がどんな発表をするのかとても興味がありました。

スライド

Scalaのコードって読みにくいよ!って言われることがあるけど、ちょっと待てコラ(※そこまで喧嘩腰ではない)という話です。私もScalaやり初めの頃同じようなこと(Scalaって可読性低くね?みたいなこと)をTwitterでぶつくさ言っていたので、言われる立場になってのカウンターをこれで学びました。

特にimplicitについて「HowとWhatの分離」のためにあるというのは簡潔で示唆に富んだまとめだと思いました。帰ってからよく考えてみたら、つまりそれって型クラスですよね、先生。と思ったのでありました。

すいません。それは私が型クラスが好きだからそう思っただけです。がくぞさんはそこまで言っていません。

2コマめ:Scala WarriorにおけるScala.jsとタイプセーフなWeb開発

竹添 直樹(@takezoen)さんの発表です。2コマ目は水島さんの発表とどっちにするか迷っていたのですが、水島さんが体調不良(あとで知った)だったらしく、残念ながらキャンセルとなってしまったのでこちらに来ました。竹添さんは、私がSeasar Projectに熱を上げていたときから意識しておりまして、私の中では「脅威の短工期の人」というイメージです。竹添さんが「○○つくってる」っていってるのをブログやTwitterで見るたびに「そんなの一人で作ってていつになったらできるんだよwww」と私は思うのですが、私の想像を遥かに超える速度で「できました」と来るのでいつも驚かされているのです。

スライド

ちょうど私もScalaによるフロントエンドを模索していたので大変刺激的でした。私の場合、厳密にはフロントエンドというか、業務アプリのUIをScalaを絡めて作れないかってことなんですけど。

竹添さんは、この発表で現実的には、まさしくUI(プレゼンテーション層)はJavaScriptでReactなりなんなりつかって書いてScala.jsはそれとサーバとのインタフェースにするのがいいんじゃないかとおっしゃっていましたが、私的にはそれはないわーと率直に思いました。

それ用のフルスタックフレームワークが整備されているのならまだしも(もしかしたら整備する前提で話していたのかもしれませんが)、そんなことやったら多分工数爆発します。フロントエンドとバックエンドって分けただけでもかなり手間かかるのに、さらにもう一層って、辛すぎますよ。

あと、reduxでアクションタイプとか文字列で定義するのすげーダサいと私は思ってて、それに対してDiodeって素敵だなって思っているので、ぜひともScala.js界隈はJavaScriptとは違うエコシステムの中で発展していってほしいと思います。

3-1コマめ:必殺(本当に死ぬ)!ブロッキング&ハイパーコンテキストスイッチングパターン

島本 多可子(@chibochibo)さんの発表です。私の愛読書の著者の一人として名を連ねている人の発表は是非とも聞きたいと思い、これを選びました。

スライド

これはヤバイですよ。実際の経験からのアンチパターンの紹介だったのですが、はい、私ももろにこのアンチパターンやってました。今になって思えば、ボトボト落ちてた私のあのサービスってこれが原因だったのかしら……なんてのが。まぁ、個人的に遊び半分でやってたやつなので大事にも至ってないし、そのせいで真面目に検証しなかったのですが。とにかく15分コマでしたが、短いながらに大変参考になる発表でした。

3-2コマめ:広告配信システムで積み重ねてきたパフォーマンスTips

小紫 弘貴(@petitviolet)さんの発表で、初めての(失礼ながら)まったく存じ上げない方の発表で、会場の流れでこの発表を聞きました。

スライド

端的に言えば良い! 私はそのとき「リアルブログ良記事みたいな発表」とツイートしましたが、すぐに使えるテクニックがいくつも簡潔にまとまっていてまさに15分コマ発表の鏡のような内容でした。これはすぐにでも社内全員に共有できる/したい内容でした。スライドを見ただけでもわかりやすいですし。

ランチ

このカンファレンスは食事付きです。お弁当が、鳥、魚、ベジタリアン向け、ハラールと4種類あるのは国際カンファレンスとして考えられているなと感心しました。私は魚の弁当をいただきましたが、とても日本らしい弁当で、海外から参加された方も日本を感じてもらうのにも良かったと思います。

 

次回は1日目午後の部について書きます。

ScalaMatsuri 2017 に参加してきました(プロローグ)

ScalaMatsuri 2017 に参加してきました。そこで何かと刺激を受けましたので、この3年以上も放置しているブログにレポートを載せたいと思います。いろいろ書きたいことがあるので、何回かに分けようかと思っています。

先に一番言いたいことを言っておく

いつまでモチベーションが保てるかわからないので、先に一番言いたいことを言っておきます。それは「ScalaMatsuri 最高に楽しいから参加したことないなら来年こそ参加しなよ!」ということです。

私自身もそうなので、特に地方の人にこそ参加して欲しいと思います。何故ならば、私は今回ScalaMatsuriに参加して自分が如何に孤独だったのかということを自覚し、そして満たされたからです。片田舎において、自分の力を総動員できる機会がどれほどあるでしょうか? 様々な仕事のしがらみや、自分以外の技術者のレベルの関係で不完全燃焼な毎日を送ることが常態化している地方在住の技術者のみなさん! ScalaMatsuri はそんな自分の力を総動員してあまりある話題で盛り沢山です! ネット越しでよくお見かけする、あの人やこの人! やっぱり生で見てもすごいです! 私が井の中の蛙であることはわかっていました。それでも、打ちひしがれることなんてないです。むしろ、満たされます!

自分についてと何故参加したのか

私は、コップ本第1版の和書が出た頃にScalaに本格的に取り組み始めたので、2009年がスタートの年です。それまではSeasar Projectに熱を上げていました(関連プロジェクトも含め、コミッタをしていたわけではありませんが、Exampleかなにかのクレジットに私の名前が入ったのもあったと思います)。その熱が少し落ち着いて次に食指を伸ばしたのがScalaだったのです。

当時はWebアプリケーションフレームワークとしてLiftが取り沙汰されていましたが、私にはピンと来ませんでした。ですのでもっぱらCubbyやWicketと言ったJava用のWebアプリケーションフレームワークでScalaを使っていました。社内や個人で使うツールやサービスを作るのに使用する程度でフルタイムで使っていたかと言えばそうでもありませんでした。あ、JOGLでゲームも作りました。

その後Play2がリリースされ、業務でもScalaプロジェクトが走り、納品まで至ることもありました。ですが、依然として「100%Scalaバリバリ!」という状態には残念ながら(業務では)なりませんでした。

ですから、私自身も「超最高Scalaプロフェッショナル!ばっちこい!」ってぐらいのスキルには到底達することはできませんでした。しかし、決して消えることのない火がありました。それは「Scala愛」です。

Scala好きすぎます! 楽しいです! 超活用したいです! 業務でバリバリ!なんて状態なんかまってられません。自分から行くしかないのです!

ということで、30代最後のほとばしりで ScalaMatsuri に参加しました。

ScalaMatsuri 参加まで

ScalaMatsuri のサイト、ニュービーにはわかりづらすぎます! DoorKeeper とかかっぺにはわかりづらすぎます! 「Scalaをテーマとしたカンファレンス」ってアバウトすぎます! 主催が誰なのかもよくわかりません! これ、参加に会社の決済欲しい人、相当苦労するんじゃないかと思います。

ScalaMatsuri 2018 のサイトを作成する際はぜひ「ちょっと頭の固い上司に見せる前提で、そんでもって決済の判断材料にされる」という視点を入れていただけたらと思います。あと、支払い方法もPayPalだから会社の決済降りないという人もいたかもしれませんね。

 

 

ということで、肝心の中身のレポートは次回以降に書きます。

cabal-devとghcmod.vim

[追記] Cabal 1.18 で sandobox という機能が入ったため、cabal-dev はその役目を終えたそうです。トホホ…

VimでHaskellプログラミングをする際、ghcmod.vimには大変お世話になっています。

ただ、cabal-devを使っている場合、なんか上手く動かないな、どうしたら上手く動くように設定できるのだろうなとずっと悩んでいました。その対処法がだいたい見えてきたので紹介します。

localrcとの合わせ技です。

まず、そもそもghc-modをコマンドラインで使うにはどうすればいいかです。かりにhello.hsのチェックをするとすれば以下のようになります。

ghc-mod check hello.hs

これはhello.hs内でcabal-devでinstallしたモジュールを使っているとエラーがでます。なので、cabalは見ないけどcabal-devは見るパッケージのconfを指定してやります(以下はGHC 7.6.3を用い、カレントディレクトリがプロジェクトルートの場合)。

ghc-mod check -g -package-conf=cabal-dev/packages-7.6.3.conf hello.hs

このコマンドラインで追加したオプションは、ghcmod.vimにおいてはghcmod_ghc_optionsで指定できます。ただ、Vimを開いた時にカレントディレクトリがどこになっているのかわかりませんので、できればパッケージのconfは絶対パスで指定したいものです。そこで、開いたHaskellソース・ファイルのパスからルートに向かって順次「cabal-dev/packages-7.6.3.conf」が存在するかを見ていき、存在した場合、フルパスを取得してオプションに引き渡すというやりかたにします。そのための関数が以下です(初めて書いたVimスクリプトなので不格好かもしれませんが)。これを.vimrcに記述します。GHCやcabal-devのバージョンが変わると「cabal-dev/packages-7.6.3.conf」というディレクトリ名が変わってしまうかもしれないので引数でもらうようにしています。

" ghcmod.vimをcabal-dev環境下で使うための設定関数
function! g:add_cabal_dev_conf(cabal_dev_conf)
  let l:kw = '%:p:h'
  let l:path = expand(l:kw)
  while l:path != ''
    if isdirectory(l:path . a:cabal_dev_conf)
      if !exists('b:ghcmod_ghc_options')
        let b:ghcmod_ghc_options = []
      endif
      call add(b:ghcmod_ghc_options, '-package-conf=' . l:path . a:cabal_dev_conf)
      break
    else
      if l:path == '/'
        break
      else
        let l:kw = l:kw . ':h'
        let l:path = expand(l:kw)
      endif
    endif
  endwhile
endfunction

次にcabal-devプロジェクトルートに.local.haskell.vimrcというファイルを以下の様な内容で作ります。これはlocalrcに読み込ませる設定ファイルです。

call g:add_cabal_dev_conf('/cabal-dev/packages-7.6.3.conf')

以上です。もっとCoolなやり方があったらぜひ教えて下さい。