RubyKaigi 2018 参加記録(1日目)

5/21 - 6/2 に仙台で開催中の RubyKaigi2018 に参加しています。

1日目に聞いたセッションについて忘れないように雑にメモっておきます。
本当に雑です。

Keynote

Matz による基調講演。今回は3つのことわざがテーマに。

名は体を表す

名前付けが本当に大事という話、これについては今に限った話ではないが、「なぜ名前付けを難しいと感じるか」に対する「その振る舞いや意図に対する理解が十分ではないから」という答えはとても納得できた。とても見に覚えがある……

ところでyield_selfの微妙感はわかるが、だからといってthenはどうなんだろう……

時は金なり

如何に時間を有効活用できるようにしていくかという話。

Ruby が短時間で価値を生み出せるか、という話はまあ色々とあると思うけど、String, Array を中心に組込みでやりたいことをやるためのメソッドが揃っているのは本当にありがたい。

Ruby に限らず「プログラムが大きすぎない方がいい」というのは本当にソレ。

塞翁が馬

Ruby とハイプ曲線の話。まあ数年前と比べると人気落ち着いてますよね。

Ruby を触り始めたのはちょうど1.9が行き渡り始めた頃なので当時の事情は知らないけど、なんだかんだ言って互換性はほしいので頑張って欲しいところ。
人気とかに左右されず、じっくり腰を据えて前に進み続ける姿勢は見ていて頼もしい。

その他

質疑応答では型についてとパフォーマンス以外の今後の展望について。2018年現在でもやっぱり「型書きたくないでござる」の模様。マクロを入れるつもりがない、というのはちょっと残念なような。

Analyzing and Reducing Ruby Memory Usage

Ruby のメモリ使用量が多い場所を特定するためのテクニックと、2.6に入る予定の$LOADED_FEATURESとISeqに関するメモリ使用率削減について。

メモリ確保の多いコードの特定は malloc stack tracing で場所を絞ってコードを読むというやり方で、これはRubyに限らず活用できるのではという印象。

実際に行った2つの最適化については、言われてみるとわかるんだけどちゃんと実装することを考えるととても根気が要りそう。特にISeqについては、事実上バイトコードインタプリタに近い実装をしているような……

あと「5000兆円ほしい」を使うタイミングがさすがだなぁ、と。

Hijacking Ruby Syntax in Ruby

Binding, TracePoint, Refinement といった黒魔術師御用達の機能を紹介した上で、それをフル活用して final, with, defer などを Ruby で如何に実現するかの黒魔術セッション。

local_variable_setの「既存の変数のみ、同じスコープの他 Binding オブジェクトにも反映される」という仕様は初めて知ったが、将来変更があってもおかしくなさそう。

deferが欲しくなるのはとてもわかる。withのデザインはlambdaを渡すのが微妙に見えたので引数をキーワード引数にするか、ブロックチェーンにするのはどうかと思ったが、訪ねたところキーワード引数では2つ目のキーワード引数の評価時に例外が発生した際に確保済みの1つ目のキーワード引数に対する解放処理ができず、ブロックチェーンは結局見た目も実装も冗長になるので微妙とのこと。なるほど。

All About Rubocop

みんなだいすきRubocopの今昔と1.0に向けて。

0.0時点では正規表現を使っていたという事実にびっくり。1.0ではデフォルトルールの見直しや、ユーザ定義 Cop を作るための正式な API が提供されるようなので期待したいところ。

RubyGems 3 & 4

RubyGems のリリースサイクルや Bundler 統合に関する話と、3.0 と 4.0 がどのような変更になるかについて。

4.0 で入る予定非互換変更は聞いたものについてはどれも妥当に見えるので好印象。特に「初学者の地雷をへらすためにも--user-installをデフォルトにする」という決定はとてもいいな、と。

途中で出てきたgemcode-searchall-rubyは普通のGem開発でもかなり便利そうなので、今後長いスパンで Gem をメンテする必要がある際にはぜひ参考にしたいところ……

Architecture of hanami applications

Web アプリのコードを如何に分離してテスタブルにするかと、それを実現した Hanami のアーキテクチャについて。

前に Hanami を軽く触った時はDI も容易でテスタブルだしDDDも意識してそうだなぁ、と思っていたが、発表を聞く限りその認識で正しかった模様。

dry-contiainerなどは初耳だったので、どこかで時間を作ってdry-rbシリーズにどんなものがあるのか一通り眺めてみたい。


気力が保てたら2日目に続きます。