この国では犬が

本と芝居とソフトウェア

鑑賞記録 2016 年 1 月(書く女、夫婦 ほか)

新年は芝居が 4。

観た芝居

十一人の少年

色々な劇があるのだ、ということが最近(まともに見始めてから 1 年経ってようやく……)わかってきました。

イスラ! イスラ! イスラ!

  • 岡崎藝術座
  • 1/15(金)20:00~@早稲田小劇場どらま館

これも色々な劇のうちのひとつ。

遠くて、むずかしかった。

役者が全員ずっと仮面をつけていたので、自然とからだの微細な動きに注意が向くのが面白かった。
でも、それ自体に大きな意味はなかったような気もします。

こうやって遠いものがふとした拍子に近くに来ることがあるのは知っているけど、でもやっぱり遠かったなあ。

書く女

最近あまり「美しい」という言葉を使いすぎないようにしようと心がけているのだけれど、書く女の黒木華はじつに美しかったので。

夫婦

ハイバイは今までに観たどの演劇とも少しずつ似ているようで似ていなくて、にもかかわらず観劇体験が高水準で(それこそ「遠い」みたいなことも全然なくて)、不思議な魅力でした。
今度の『おとこたち』もぜひ観に行きたい。

以上、絞って絞って 4 本でした。

スカラ祭 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 で開発しています

スカラ祭 2016 1 日目 : Scala を掘り下げたくなりました #ScalaMatsuri

この土日で開催されている ScalaMatsuri 2016 に参加しています。

日常業務ではほぼ 100% Java を使っていて、Java はそのエコシステムまで含めた総合力ではとてもナイスな言語だと思うのですが、どうしても他のよりモダンな言語に比べるともう一つ……というところもあって*1、じんわりと Scala の可能性を探る日々です。

そんなじんわりじんわりした中、一発大きなカンファレンスに参加したら色々とコトが前進するのでは、と一念発起して 1 万円の参加費をはたいて、スカラ祭に参加しています。
まだ 1 日目ですが、参加してとてもよかったと感じています。

以下、参加したセッションの感想を述べます。

セッション

本当は朝の 10:00 からがくぞさん(@gakuzzzz)のセッションがあったのですが、寝坊しました……。
土曜日に早起きはできない。

せめてもの罪滅ぼし(?)に、セッション資料だけでも紹介させてもらいます。

なぜリアクティブは重要か

というわけで、一発目は岡本 雄太さん(@okapies)のセッション。

Java 界隈でも著名な岡本さんのセッションを初めて見たのですが、噂に違わぬハイテンポなセッションでした。
わずか 40 分でリアクティブひとめぐり!

www.slideshare.net

とてもよく整理された内容と語り口で、聞いているときはなるほどなるほどと思っていたのですが、終わってしばらくたってみるとよく覚えていません。笑

記憶が追いついていないだけだと思うので、……スライドで改めて復習します。
スライドもやはりよく整理されていて、あとで見返すこともしやすいのがありがたいと感じます。

楽しく役立つ Scala リファクタリング

Wix 社の Tomer Gabel さん(@tomerg)のセッション。

表題の通り、Scala で書かれたあんまりいけてないコードを Scala の機能を活用しながらいけてるコードにリファクタリングする、という内容で、ライブコーディングも交えながらほどよいテンポで(笑)進みました。

www.slideshare.net

実際僕は Scala を始めたばっかりで、公式のチュートリアルをようやく七割がた終えたところという体たらくなのですが、そのレベルでも Scala らしいコードの書き方、Scala のよさを感じられるありがたいセッションだったと思います。

具体的には、ざっくり以下の二本立てでした。

  • "Stringly Typed"(「書式」を取り決めた文字列を引き回してあれこれするようなコード)を改善する
    • 文字列を渡して内部でパースするコンストラクタを、ファクトリ関数に置き換える
    • そのオブジェクトの使用箇所も、いい感じにパターンマッチを用いるように書き換える
  • Collection Abuse(コレクションの乱用)を改善する
    • インラインで処理をつなぎすぎているところへ、一時変数を導入したり、ローカルな関数を定義して名前をつける
    • タプルをやめ、ケースクラスを定義して要素に名前をつける

こうして見ると、普段から Scala を使っている人にとってはだいぶ基本的だったのかもと思いますが、僕のような初心者にとってはまさに求めていた内容でした!
英語がゆっくりでとても聞き取りやすかったのも助かりました。*2

バッチを Akka Streams で再実装したら100倍速くなった話

TIS の根来 和輝さん(@negokaz)のセッション。

MySQL からその日の取引情報を取り出して時刻順に並べて CSV ファイルに書き出す、という夜間バッチを、Rails による実装から Akka Streams に置き換えたことで 100 倍……どころか 295 倍速くなった、という話でした。295 倍。笑

www.slideshare.net

テスト用の環境とデータを用意して、ボトルネック(メモリ)を特定して、解消して、新しいボトルネック(CPU)を特定して……というパフォーマンス改善の正道をいくプロセスで Akka Streams に行き着いた、といったストーリーで、納得感のある内容でした。

ただ、15 分しかない枠だったこともあり、個人的には Akka Streams ならではの話というか、苦労したところとか、こういう問題があってこう解決したとか、なぜ他の言語やツールキットではなく Akka Streams を採用したのか、みたいな話を期待していたけれどそういうのがなかったのが、ちょっと惜しかったかな……という感もありました……というところまで書いて、そういえば最後に Tips のスライドがあったけれど時間がなくなって飛ばされていたことを思い出しました。
15 分では仕方ない、とは思いますし、この 15 分の枠というもの自体は、お昼すぎの眠たくなりがちな時間帯に軽いテンポをもたらしていてよかったと思うので、なかなか難しいところです。

アジアから Scala OSS に貢献するということ

退職にともなう連日の飲み会で声が……と言いながら始まった、瀬良 和弘さん(@seratch)のセッション。
退職自体はセッションの内容とは(たぶん)関係ありませんが、「エムスリーの瀬良さん」というイメージだったのでちょっとびっくりです。今後のご活躍も楽しみです。

さて、内容はというと、一言でいうと、日本人はもっと世界に出た方がいい、というメッセージを伝えるものだったと思います。英語で。*3

www.slideshare.net

瀬良さん自身は海外に住んだことがない、「ふつうの」日本人プログラマだけれど、Skinny FrameworkScalikeJDBC といった OSS を自ら開発・公開されたり、様々な OSS に貢献されたりしていて、みんなにもできるはずだ、やっていこう、という話でした。
もし自分のプロダクトを公開したら README も英語で書こう、ブログも英語で発信していこう、といったこともおっしゃっていました。

個人的に、「たしかに」と思ったのは、日本では日本語で読める技術書が豊富に出ていて、日本語のコミュニティも活発だけれど、それは(日本人一般が)英語が苦手であることの裏返しだ、ということです。英語が苦手だから、日本語の書籍が充実するし、充実しているから、英語が読めなくてもやっていける。
でも、また同時に、やはり英語ができた方が得られる情報も発信できる情報も増えるのは確かだと思います。この業界、とにかく第一線の一次情報が英語という場合が割合として非常に大きいので、英語を使ってコミュニケーションしていくということは、それが大きなコストのかかることであっても、やる価値があるし、これから先どんどんやらないといけなくなっていくだろうな、と感じています。

Scala コードは JVM でどのように表現されているのか

午後から始まった 15 分セッションの 3 本目にして最後は、関ジャバの会長である阪田 浩一さん(@jyukutyo)のバイトコードセッション。

www.slideshare.net

恥ずかしながら、このセッションに参加するまで Scala コンパイラが最終成果物として何を出しているのかのイメージをきちんと持っていませんでした。

ああ、言われてみれば当たり前なのですが。.class ファイルとして、JVMバイトコードを出しているのですね。
CAFE BABE から始まる、Java プログラマにはおなじみのやつです。

15 分セッションだけあってさすがに駆け足で進むのですが、バイトコードの基礎知識に始まって、trait、パターンマッチ、カリー化といった Scala ならではの記法がバイトコードでどう表現されるのかの解説までを、無駄なく、漏れなく駆け抜ける、見事なセッションでした。

バイトコードはこうやって読むんだよ」とか「javap 使おう!」とか、それだけなら 15 分でもやれると思うのですが、それらの内容もきっちりおさえつつ、Scala コードとの対応関係までわかるように解説するというのは……。

やはり、(なぜか)「イメージをきちんと持っていなかった」僕が「わかった!」という感動を得られたのは、実際の Scala コードとそのコンパイル結果のバイトコード(の javap -v の結果)をバシッと見せてもらったからだと思います。
おみそれしました。

あなたのScalaを爆速にする7つの方法

井上 ゆりさん(@iyunoriue)(と、インケンさん)のセッション。

爆速、爆速……と思いながら参加しましたが、がっつりベンチマーク取っての骨太な、でありながらかつクイズ形式で和やかに進むというお得なセッションでした。

www.slideshare.net

SSD 上の 2GB の Memory Mapped File の方が(同サイズのデータを扱う)memcached 1.4.0 より速い(memcached 1.4.0 では 1 キーあたりのデータサイズが 1MB 以下という制約がある!)とか、フィボナッチ数列の生成で Stream による実装の方が Array による実装の方が圧倒的に速い(Stream の方は値を 1 つしか取り出していなかったから! ずるい!)とか、なかなか意表を突くクイズも取り入れながら、単なる豆知識にとどまらない、Scala の奥深さを感じられる内容だったと思います。

個人的には、コレクションの性能周りの問題に、(Scala のコレクションのことはほとんど知らなかったのですが)C++ 時代の知識とコレクション名からの推測でだいたい正解できたのがなんかちょっと嬉しかったです。笑
でもまじめな話、データ構造なんてのは言語によってそうそう大きく変わるものではないので、こうやって知識が応用できる場合があるのもさもありなんで、プログラマというのは経験をきちんと積めば報われる職業だな、ということもちょっとだけ思ったりします。

あと、Scala はコレクションの性能特性が公式ページに一覧化されている、というのもステキですね。

一目瞭然です!

The Zen of Akka

JavaOne 2015 では Java 9 に入る予定の Reactive Streams の話をされていた、Typesafe 社の Konrad Malawski さん(@ktosopl)のセッション。

同時間帯の関数型ドメインモデリングのセッションもちょっと気になっていたのですが、概要に「ドメインの代数がモノイド、函手、モナドといった圏論的な構造から構築できるか試してみる」みたいな文字列を見つけて(あっ……)と思ってこちらに逃げてきました。

このセッションは、「Akka という考え方」とでもいうべき、Akka とうまく付き合うためにどう考え、どうすればいいかが詰まった内容でした。

www.slideshare.net

そもそも Akka を使ったことも使おうと思ったこともないので*4、Akka そのものとのマッピングはできていないのですが、それぞれの特徴的な考え方から Akka の輪郭が浮かび上がってくるようなセッションでした……いや、まじめな話。笑

実際に使っている人にとっては、なおさら面白い内容だったのではと思います。
いつか使う(使おうとする)日が来たら、きっと思い出すことになるでしょう。

Scalaドメイン駆動設計に真正面から取り組んだ話

本日最後は、MOTEX の藤井 善隆さん(@yoshiyoshifujii)のセッション。

www.slideshare.net

藤井さんは Scala を始めてからまだ 7 か月、チームも似たような感じということで、にもかかわらずドメイン駆動設計というチャレンジも重ねて、苦労しながらの、進行中の知見を共有する、ということで、かえって僕のように知識も経験もない人にも共感できるところの大きい内容だったと思います。

特に面白いと感じたのは、「どうしてもレイヤ感で責務が漏れてしまう」といった課題に対して「チームでどうするか決める」「コードレビューやモデリング(のレビュー)で対処する」「定常的にリファクタリングし続ける」といったプロセス的な解決策が色々上がってきたところです。現場感がありました。

一方で、CQRS(Command Query Responsibility Segregation)の考え方を適用して、クエリ(データの取得)については限定的に Query Model としてレイヤ間を飛ばして扱えるようにする、という技術的な解決策も出ていたり、Query Model に対して Command Model はあくまでレイヤー化アーキテクチャを守る、という判断があったり、結局こちらも現場感なのかもしれませんが……ドメイン駆動設計で開発することになったらきっと同じことで悩むのだろうな、と感じられる、学ぶところの大きい内容だったと思います。

その他雑感と一日目のまとめ

そんなわけでスカラ祭初日はとても充実した一日でした!
セッション終了後の懇親会も楽しみました。

参加費 1 万円を支払った甲斐は十分あったと感じます。
冒頭や本文中にも述べたように Scala は全然始めたばかりなのですが、初心者でもそれなりに理解できて、かつ奥行きもある質の良いセッションが多かったのではないかと思いますし、会場も全体としては広く、時間的なゆとりもあり、水や、お菓子やコーヒーといったちょっとしたサービスもとてもありがたかったです。

何といっても Scala を使っている・使おうとしている人たちが 500 人ばかりも一堂に会する場所に集まって(そんな場所が日本にあるのです!)、その空気を吸うことがとてもいい刺激になっています。
この辺は JavaOne に参加したときの感想にも近いところがありますね。

それから、Scala やっぱりいい言語だな、と思います。
まだ半分お試しのつもりでしたが、Scala をちょっとまじめに掘り下げてみたくなりました。

二日目は主にアンカンファレンス形式ということで、いったいどうなるのか若干不安もありますが笑、それ以上に楽しみです!

追記 : 2 日目も行ってきました

enk.hatenablog.com

*1:Java に限らず、Scala も含むすべての言語には得意不得意があるわけですが

*2:僕は利用しませんでしたが、今回の ScalaMatsuri では、多くのセッションで同時通訳もついていました

*3:ScalaMatsuri のセッションはそもそもだいたい日英半々で、日本人で英語の発表をされている方もいたのですが、瀬良さんの場合は特にそのメッセージと重ねていたところが大きかったのだろう、と思います

*4:Scala 界で有名なライブラリ群、くらいの認識

2016 年の目標

2016 年の目標を立てます。

2016 年の目標

2016 年になってから、実家でごろごろしたり、ごろごろしたり、ごろごろごろごろごろごろしたり、さすがにごろごろするのに飽きてちょっと散歩したり、フェリーと電車と新幹線を乗り継いで 10 時間かけて東京に戻ってきながら本を 1 日に 5 冊読んだりするなかで*1、ぼんやりぼんやりと今年の目標について考えてきました。

ぼんやりぼんやりした中から浮かび上がってきた、次の 2 つのことを今年の目標にしようと思います。

  • 全力で走る
  • 手入れして生きる

全力で走る

比喩です。

全力で走るというのは、ものごとをやって、やって、やり抜くという意味です。

ものごとというのは、今のところ、主にしばいとソフトウェア、です。(うたはお休み中)

もちろん、生きていると、しばいとソフトウェア以外のことも色々とあります。
それらについても、手を抜かない。

ここ 3 年ほど、色々と助けてくれた人たち、力になってくれた人たちや、まあ自分でも自分なりに行った努力などのおかげで、心身が安定して、全力で走っても大丈夫になったと感じます。
しばいとソフトウェアのことを、充実してきた心身にまかせて、ビシバシやりたいと思っています。やりたいことがひとつの 2 倍でふたつあるから、余計にリソースを突っ込まなくては、という思いもあります。

それから、この一年でだいぶものごとがよく見えるようになってきて、もちろん昔に比べたらということですが、あまり細かく目標を決めたり、管理したりしなくても、うまく走れるんじゃないか、これもたとえですが、うまく行きたいところへ、もし目標を決めるとしたらそうと決めていたようなところ、そのちょっと先くらいのところへ、自然と行けるんじゃないか、という予感があります。*2

一度これでやってみようと思います。

走って、走って、あわよくばたまに飛ぶことができれば。

手入れして生きる

これはあながち比喩というわけでもないです。

全力で走れるようになった(と思う)とはいえ、そんなことをすると、走る速さにおそらく比例して、色々なクズやらほころびやらが出ます。これは比喩です。
たとえば部屋は荒れるでしょうし、頭の中も荒れるでしょうし、下手をすると人間関係も荒れるかもしれません。

だから、こまめに手入れをして生きようと思います。

具体的には部屋の掃除だってするし、ものの手入れもするし、古くなったものは入れ替えるし。心身の状態にもこまめに気を配る。
積みすぎている本やら CD も何とかする、まとめてじゃなくて、少しずつ。人づきあいも、ここしばらくちょっとルーズにしすぎた感もあるので、もう少しだけ気を使ってみる。

こまめに手を入れることは、走ることに対しては、少なくとも走ることが持ちうるエネルギーの総量に対しては多少のブレーキになる可能性もありますが、この先も続けていくために必要なことだと考えます。
本当は少し荒らしてみたい気もしているのですが。まあ、本当に本当に全力で走れば、自ずと荒れるでしょう。荒れすぎると、壊れます。それはまずい。

手入れ、という言葉は養老孟司さんの何かの本からもらいました。
里山はほったらかしの自然ではなくて、人間が手入れすることでできあがる、みたいな話だったと思います。

この一年で、全力で走ることと、手入れして生きることのバランスを高いところでうまく取れるようになって、この一年の先も生きていけたらいいなと思っています。

今年も生きます

というわけで、2016 年の目標は、

  • 全力で走る
  • 手入れして生きる

の 2 つです。

すごくシンプルなのでちょっと不安もありますが、まあこの先もしばらく続く(蓋然性がそれなりに高い)人生のうちの 1 年間、これでやってみるのも悪くないでしょう。

続くといいなあ。

本編が短くすんだので久々に言っておくと*3、生きることは大前提、当たり前ということではなくて、まず第一に行うべきことです。

2016 年も生きます。

補遺

補遺 1 : 忘れていたもう一つの目標(のかけら)

先にあげた二大目標に並べるまでではないのですが、少し社会に目を向けたい、ということも思っています。
社会に目を向けるというのはまた漠然とした言い回しですが、年末にふりかえりをするときのフックになればいいと思って、書き残しておきます。

自分のことはすっかり充足してきたので社会を見た方がいいな、という感じがここしばらくしているのですが、まだ入口も出口も見つかっていないのが現状です。
まあ、社会とか大きなことを言う前に、もう一度身のまわりの人たち、近しい人たちに目を向けることから……なのかな。

補遺 2 : 最後に一つだけいらないことを

今年の目標、特に「手入れして生きる」の方は我ながら実に常識的でまっとうな目標だなと思っていて、それがなんだかつまらないな、ということを少し思います。
「本当は少し荒らしてみたい」と言ったのも、たぶんそういうことです。

それなりに足掻いてようやく獲得した(つもりの)常識、まっとうさを「つまらない」というのはまったく……という感じもしますけど。
一年後にどう感じているか、どう考えや行動が変わっているか見てみて、また考えたり、あるいは考えなかったりしたらいいかなとも思います。

*1:記憶にある限りでは自己新記録でした

*2:一方で、これを書きながら、逆に言うといま一年後の具体的な目標が定まっていないんだな……ということに気づきましたが、まあ……大丈夫でしょう、たぶん

*3:3 年くらい前は「生きます」みたいなことばっかり言っていた気がします

2015 年 11 月~ 12 月に読んだ本(Soft Skills、究極の鍛錬、融けるデザイン ほか)

11 月から英語の本を読み始めたらガクンとペースが落ちてしまいました……。
ので、2 ヶ月まとめてお届けします。

終わってみれば、クリティカルヒットがバシバシ出て、すばらしい読書生活でした。

11 月~ 12 月のよかった本

Soft Skills

Soft Skills: The Software Developer's Life Manual

Soft Skills: The Software Developer's Life Manual

これはたいへんな本でした。
詳細は以下の記事にて。

enk.hatenablog.com

究極の鍛錬

究極の鍛錬

究極の鍛錬

かつてゲーム音楽を作る人になりたいと思って、自分なりに才能みたいなものと格闘してきました。

当時考えていたのは、「とにかくプロになりたい」ということで、なぜなら、プロになれば、生きることのリソースの大部分をそれに注ぐことができて、長期間にわたって能力を開発し続けることができて、やがてよりよいものを生み出せるようになると考えたから。
でも、努力が足りなくて、プロにはなれませんでした。

この本を読むと、その考えや当時していたことの一部が当たっていて、一部が間違っていたということがわかります。

才能は過大評価されている

この本の原題は「Talent is overrated」で、「才能は過大評価されている」という意味です。

「才能」という言葉を聞いて人が思い浮かべるものは案外様々だと思いますが、この本で「Talent」とされているものは、割と限定的で、「(遺伝的な理由などで)生まれつきその身体に備えている能力」のことです。
そして、今の世の中ではそれが過大評価されている。

明らかに生まれ持った才能が溢れ出しているみたいに見える人でも、実は「生まれつきその身体に備えている能力」よりはむしろ、その生まれ育った環境、そしてその環境が可能にした「究極の鍛錬」がその能力をかたちづくっている、ということを著者は明らかにします。

究極の鍛錬の 5 要素

著者は「究極の鍛錬」が備える 5 つの要素を説明します。それは、以下の 5 つです。

  • 実績向上のために特別に考案されていること
  • 何度も繰り返すことができること
  • 結果へのフィードバックが継続的にあること
  • 精神的にはとてもつらいこと
  • あまりおもしろくないこと

これだけだとなんのことかわからないかもしれません。

でも、この本の論理を丁寧に追うと、能力を得るために

  • 長時間の努力が必要であること(若くして成功する人は幼少期から鍛錬を始めている)
  • ただ時間をかければよいわけでもなく、よく工夫されたものである必要があること(年をとれば誰でも能力が身につくわけじゃない)
  • その努力ははっきり言って苦痛であること(だから誰にでもできるわけじゃない)

そして、

  • 世の中で素晴らしい能力を発揮している人は誰でもこの「究極の鍛錬」を経ていること

がよくわかります。

この本の主張に照らすと、僕が当時思っていたことで当たっていたのは「(かけた時間が成果につながるから)とにかくプロになるべし」ということ、間違っていたのは「自分にはそれほどの才能がなさそうだ」と思って(あるいは、矛盾するようですが、「才能があればいずれにせよ芽が出るはずだ」と思って)、どこかプロになるための努力を中途半端にしてしまったこと、です。

才能について悩んだことのある人、また今悩んでいる人はぜひ一度読んでみるべき本だと思います。

融けるデザイン

融けるデザイン ―ハード×ソフト×ネット時代の新たな設計論

融けるデザイン ―ハード×ソフト×ネット時代の新たな設計論

融けるというのはどういうことだろう、「透明なインタフェース」や、直前に読んだ『さよなら、インタフェース』で主張されていた「NoUI」のようなことだろうか、と考えながら読み始めました。

結果として、そのどちらにも似ているようで少し違った、しかし僕の考え方、ものの見方の深いところを触って、変えてくれるようなスゴい本でした。

情報の身体化

本の中では、著者自身が行った実験の成果を踏まえながら、色々な考え方を紹介していくのですが、中でも「情報の身体化」という考え方には衝撃を受けました。

短い言葉で説明することは難しいのですが、あえて言うなら、「よい UI は、インタフェースそのものをデータ側に移動させるようなものである」ということだと思います。

たぶん全然うまく説明できていないと思いますが……。
身体と対象物(情報)の二元論で捉えるのではなくて、両方をひとまとめでとらえる(情報の身体化)という考え方ができるということに震えました。
それもただ机上で考えただけのことではなくて、実践をともなっているので、理解もしやすく、また想像力もかきたてられます。

人間の生活をよくするものを生み出すために

小難しい概念をこねくり回す本かといえば、決してそんなことはなかったと思います。

繰り返すようですが、具体的な実験やプロダクトを例にあげながら、基本的には身近なところで議論が展開されます。

僕がソフトウェア業をしているのは、(お金を稼ぐためということを除けば)人間の生活をよりよくすることに大きく貢献できる(可能性がある)と信じているからなのですが、同じような理由でソフトウェア業をしている人は(あるいは、ハードウェア業をしている人も、産業によらず何かをつくる人は誰でも……)、ぜひとも読んでほしい本です。

この本には、世界から人間の生活を悪くするプロダクトやサービスを減らして、よくするプロダクトやサービスを増やす力があると思います。

読書メーター

11 月

2015年11月の読書メーター
読んだ本の数:4冊
読んだページ数:758ページ
ナイス数:12ナイス

考えるヒト (ちくま文庫)考えるヒト (ちくま文庫)
読了日:11月4日 著者:養老孟司
やわらかな言葉と体のレッスンやわらかな言葉と体のレッスン
読了日:11月7日 著者:尹雄大
新エバンジェリスト養成講座新エバンジェリスト養成講座
読了日:11月9日 著者:西脇資哲
True and False: Heresy and Common Sense for the Actor (Vintage)True and False: Heresy and Common Sense for the Actor (Vintage)
読了日:11月12日 著者:DavidMamet

読書メーター

12 月

2015年12月の読書メーター
読んだ本の数:24冊
読んだページ数:6348ページ
ナイス数:16ナイス

方法序説 (岩波文庫)方法序説 (岩波文庫)感想
およそ400年前に真実を探し求め、また伝えようとした人の記録、というか苦闘そのものでした。
読了日:12月5日 著者:デカルト
ミステリヤ・ブッフ (マヤコフスキー叢書)ミステリヤ・ブッフ (マヤコフスキー叢書)
読了日:12月6日 著者:マヤコフスキー
反応しない練習  あらゆる悩みが消えていくブッダの超・合理的な「考え方」反応しない練習 あらゆる悩みが消えていくブッダの超・合理的な「考え方」感想
この本に書いてあることは本当です。(体験談)
読了日:12月7日 著者:草薙龍瞬
読書の腕前 (光文社知恵の森文庫)読書の腕前 (光文社知恵の森文庫)
読了日:12月10日 著者:岡崎武志
エンジニアとして世界の最前線で働く選択肢 ~渡米・面接・転職・キャリアアップ・レイオフ対策までの実践ガイドエンジニアとして世界の最前線で働く選択肢 ~渡米・面接・転職・キャリアアップ・レイオフ対策までの実践ガイド
読了日:12月10日 著者:竜盛博
Soft Skills: The Software Developer's Life ManualSoft Skills: The Software Developer's Life Manual感想
プログラマ向けの自己啓発書です。情熱プログラマーあたりにも通じるものがありますが、より実践寄りというか、ページ数が多いだけあって、読者を説得するところから具体的な実行手順を示すところまで親切にきっちりカバーされている印象でした。また、お金の扱い方のことや健康のことにもそれぞれ章が割かれているなど、技術と直接関係のない領域まで幅広くカバーしているのも特徴的で、まさにlife manualという感じです。
読了日:12月12日 著者:JohnZ.Sonmez
ハイデガー哲学入門──『存在と時間』を読む (講談社現代新書)ハイデガー哲学入門──『存在と時間』を読む (講談社現代新書)感想
とりあえず原著がめちゃくちゃ難解だということがわかった。日本語で読んで理解するのは多分不可能で、解説書を駆使しまくるか、ドイツ語をマスターするか、その両方か、一生読まないかも……。でも、その難しい本でやろうとしたことや、いちいち難しい用語の意図するところは(それなりに)掴めた気がします。根気強く丁寧な入門書だったと思います。
読了日:12月13日 著者:仲正昌樹
僕たちはガンダムのジムである (日経ビジネス人文庫)僕たちはガンダムのジムである (日経ビジネス人文庫)
読了日:12月15日 著者:常見陽平
SNOOPY COMIC SELECTION 70's (角川文庫)SNOOPY COMIC SELECTION 70's (角川文庫)
読了日:12月15日 著者:チャールズ・M・シュルツ
モチベーション3.0 持続する「やる気!」をいかに引き出すか (講談社+α文庫)モチベーション3.0 持続する「やる気!」をいかに引き出すか (講談社+α文庫)感想
アメとムチが前世紀の遺物であり、私たちがふつう期待するようには機能しないことを痛快なまでに喝破する本です。マジかーという感じです。では、どうすれば? ということまでしっかり書いてあるので、すごく便利です。
読了日:12月17日 著者:ダニエル・ピンク
書を捨てよ、町へ出よう (角川文庫)書を捨てよ、町へ出よう (角川文庫)
読了日:12月18日 著者:寺山修司
sisterssisters
読了日:12月19日 著者:長塚圭史
究極の鍛錬究極の鍛錬感想
かれこれ15年くらい、才能や人間の能力についてあれこれ考えては、そう信じたり、あるいは謎に思ったりしていたことごと、それらの点と点のすべてを美しくつないでくれた、僕にとって記念碑的な本でした。そういうことだったんだ、と深く腑に落ちました。わからないことについては「まだわからない」とはっきり記しているところも、誠実で、好感が持てます。
読了日:12月21日 著者:ジョフ・コルヴァン
リモートチームでうまくいく マネジメントの〝常識〟を変える新しいワークスタイルリモートチームでうまくいく マネジメントの〝常識〟を変える新しいワークスタイル感想
「在宅勤務」「リモートワーク」ではなく「リモートチーム」という考え方、そしてその実践のあり方を紹介する面白い本です。
読了日:12月21日 著者:倉貫義人
チームのことだけ、考えた。―――サイボウズはどのようにして「100人100通り」の働き方ができる会社になったかチームのことだけ、考えた。―――サイボウズはどのようにして「100人100通り」の働き方ができる会社になったか
読了日:12月23日 著者:青野慶久
ケラリーノ・サンドロヴィッチ 消失/神様とその他の変種 (ハヤカワ演劇文庫)ケラリーノ・サンドロヴィッチ 消失/神様とその他の変種 (ハヤカワ演劇文庫)
読了日:12月25日 著者:ケラリーノ・サンドロヴィッチ
ウェブ×ソーシャル×アメリカ <全球時代>の構想力 (講談社現代新書)ウェブ×ソーシャル×アメリカ <全球時代>の構想力 (講談社現代新書)
読了日:12月25日 著者:池田純一
さよなら、インタフェース -脱「画面」の思考法さよなら、インタフェース -脱「画面」の思考法感想
その通り、重要なのはインターフェースじゃない。とわかっているつもりでも、やっぱりふだん、知らず知らずのうちにインターフェースを軸に考えてしまっていることに気づかされました。デザイナも開発者も、みんな一度は読んでみてほしい本です。
読了日:12月26日 著者:ゴールデン・クリシュナ
融けるデザイン ―ハード×ソフト×ネット時代の新たな設計論融けるデザイン ―ハード×ソフト×ネット時代の新たな設計論感想
情報の身体化! 今まで自分なりにUIだとかUXだとかのことを考え続けてきたつもりでしたが、強烈なパラダイムシフトを引き起こしてくれるすごい本でした。すべてのデザイナ、エンジニアに読んでほしい。そうすればきっと、世界を悪くするプロダクトが減って、よいものが増えると思います。
読了日:12月27日 著者:渡邊恵太
改訂2版 基礎からわかる Go言語改訂2版 基礎からわかる Go言語感想
Goのことをサクッと学べる良書です。特にC/C++をやったことのある人なら「そういうことね」という感じであっという間に読めて、普通にGoが書けるようになると思います。
読了日:12月27日 著者:古川昇
世につまらない本はない (朝日文庫)世につまらない本はない (朝日文庫)
読了日:12月28日 著者:養老孟司
君は永遠にそいつらより若い (ちくま文庫)君は永遠にそいつらより若い (ちくま文庫)
読了日:12月28日 著者:津村記久子
作家の収支 (幻冬舎新書)作家の収支 (幻冬舎新書)
読了日:12月28日 著者:森博嗣
なぜヤギは、車好きなのか? 公立鳥取環境大学のヤギの動物行動学 (朝日文庫)なぜヤギは、車好きなのか? 公立鳥取環境大学のヤギの動物行動学 (朝日文庫)
読了日:12月29日 著者:小林朋道

読書メーター

量から質へ、さらっと読める本から歯ごたえのある本へ、またインプットからアウトプットへ、徐々に移行していきたいな〜と思っているので、この読書記録のつけ方も今後ちょっと変えるかもしれません。