はじめに
RubyKaigi 2019 に参加してきました。自分の聞いた発表のレポートや所感を書いていきます。(現時点で Twitter でスライドが公開されているものは載せておきます)
自分の理解・関心の度合いによって、文量に差が出ていますがご容赦ください。
間違っているところなどあればご指摘いただけると幸いです。
各発表のスライドはドリコムさんの以下の記事がよくまとまっていると思うので貼っておきます(全て揃っているわけではありませんが)
- [RubyKaigi 2019] Day 1 の発表資料をまとめました
- [RubyKaigi 2019] Day 2 の発表資料をまとめました
- [RubyKaigi 2019] Day 3 の発表資料をまとめました
先にまとめ
- Ruby 自体に関する発表は型の話とパフォーマンス改善(並行・並列処理、 JIT コンパイラなど)の話が主だった
- Ruby を用いた実践的な設計・実装やライブラリにまつわる発表(DSLの設計、API クライアント開発、RSpec など)などもあり、とても勉強になった
- mruby 楽しい
- (主に英語力と技術的な基礎知識のなさが原因で)理解できる発表の方が少なかったことが悔しくて英語を学び始め、技術書を5冊ポチった
- 発表に対する理解度は低かったけど、とても良い刺激を受けられたので、このタイミングで RubyKaigi に行けてよかった
Day 1
Keynote: The Year of Concurrency
先にまとめ
で 👆 と書いた通り、 Ruby 3 で導入する(しない)「型」と「パフォーマンス改善策」についての話がメインだった。
あとは新機能としてブロック変数を明示的に書かずとも @1
とか(まだ決まっていない)で参照できる Numbered Block Parameter
や case
~ in
によるパターンマッチ構文の話などをしていた。
Ruby 3 Progress Report
Ruby 3 Progress Report at RubyKaigi 2019: https://t.co/VZnKDpQvaZ
— _ko1 (@_ko1) April 18, 2019
静的解析とか Bundler とかキーワード引数の仕様変更の話をしていた気がする。
Terminal Editors For Ruby Core Toolchain
Ruby 2.7 からは irb
が便利になりますよって話。
Determining Ruby Process Counts: Theory and Practice
英語がほとんど聞き取れなかったので、スライドや Twitter でのハッシュタグツイートで必死に補完していた。
- Request Queue を理解するのが大事
- New Relic を使っていれば LoadBalancer や Nginx で使った時間が見られる
- ここら辺 かな?
- AverageResponseTime x 4 x RequestArrivalRate = Ruby Process Count にするとよい
- Ruby は GVL があるので thread 数でなく process 数で考えるべき
- JRuby は parallel に実行できるので process 数ではなく thread 数で考えるべき
Woker の設定とか全然わかってないな。勉強しよう。
A Type-level Ruby Interpreter for Testing and Understanding
I've published my RubyKaigi talk about Type Profiler. #rubykaigihttps://t.co/OM2LzS3pvI
— Yusuke Endoh (@mametter) April 18, 2019
Type Profiler の話。
Type Profiler を使えば Ruby コードに対して静的解析を行い、実行時エラーを事前に検出したり、型定義を吐き出すことができるようになる。 型定義の出力はあくまでドキュメントとしてのみで Ruby に型注釈は導入しないということを何度も念押ししていた。
Fibers Are the Right Solution
パフォーマンスの高いアプリケーションを書くために Fiber を使おうよという話。理解度は低い。 発表の最初に並行性・並列性についての説明をしてくれていたので、もし動画がアップされたら再度観たい。
GraphQL Migration: A Proper Use Case for Metaprogramming?
Sharing the deck for my talk today! https://t.co/h9I3KTlbiK#rubykaigi
— shawnee gao (@gao_shawnee) April 18, 2019
REST API などから GraphQL API へ移行する際に、メタプロを使って動的に GraphQL の Type 定義を生成するようにするとよいかもね、という話。
肝心のメタプロの実装部分が出てこなかったのと、実際やるとしてもテストがむちゃくちゃ激しくなりそうなので、アプリケーション内に組み込むイメージは出来なかった。(自分の理解が足りないだけかもしれない)
Day 2
All bugfixes are incompatibilities
Ruby の安定版のメンテナンスの話。(そもそも Ruby では安定版メンテナーと開発版メンテナーが分かれているというのを初めて知った)
最近は昔と比べて互換性を意識してやってますよ、という話だった気がする。
終盤で「ほとんど使われない部分のバグ修正に対応するよりも、より多くのユーザに対するメリットを優先する」的な話をしていて、これは SaaS というかアプリケーション全般にも言えることだよな、と思った。
How RSpec works
Hey #rubykaigi, my slides are still processing, but you can get them here: https://t.co/qDOc7QlQO2
— Sam "I have some almighty take" Phippen (@samphippen) April 19, 2019
RSpec 自体の実装の話。(RSpec は Google の中の人が作ってるらしい)
rspce-core
, rspec-mocks
, rspec-expectations
のそれぞれの役割と内部実装に触れていてむちゃくちゃ面白かった。
個人的に今回の RubyKaigi の中で一番プレゼンが上手いと思ったので、動画がアップされたら何度も観直して参考にしたい。
Ovto: Frontend web framework for Rubyists
Ovto: Frontend web framework for Rubyists - Speaker Deck https://t.co/fSj7Uu2HdI
— yhara (Yutaka HARA) (@yhara) April 19, 2019
俺が作った最高の Ruby フロントエンドフレームワークを紹介するぜ。というお話。
Opal をベースに作っているらしい。コードは読みやすかった。
State of Sorbet: A Type Checker for Ruby
I'm at RubyKaigi about to give our talk titled "State of Sorbet: A Type Checker for Ruby". Follow along at https://t.co/P2ko4fQ915 https://t.co/P2ko4fQ915
— Paul Tarjan (@ptarjan) April 19, 2019
Stripe のチームによる静的型解析器 Sorbet の話。
現在はプライベートβ版だが、もうすぐ OSS 化されるとのこと。ここ から触れる。
むちゃくちゃ便利そうだけど、 Type Profiler の発表の時に言ってた「Ruby に型注釈は導入しない」の流れとは反している気がする。
A light weight JIT compiler project for CRuby
既存の MJIT のパフォーマンス改善を主目的とした軽量 JIT 基盤開発プロジェクト(MIR プロジェクト)の話。 今回の RubyKaigi の中で一番理解度が低い発表。聞いてる時はほとんど何も分からなかった。
GCC と LLVM の話が最初にでてきて、「あれ GCC って Ruby と関係あったっけ? LLVM ってなんだ?」ってなっていた。
何も分からなかったがゆえにこの発表が後述する技術書を買う一番のモチベーションになった。
What is Domain Specific Language?
RubyKaigi 2019 で What is Domain Specific Language? という発表をした。 https://t.co/Vs101ulEjY
— Tanaka Akira (@tanaka_akr) April 19, 2019
- なぜ internal DSL は言語と見なされるのか?
- 独自のセマンティクスを持っているから
- なぜ DSL にすると読みやすいのか?
- どうすればよい DSL を設計できるか?
- Ruby の黒魔術を適度に利用する :imp:
そういえばメタプロ Ruby にも「Ruby はその柔軟性ゆえに DSL を書くのに適している」というような記述があった気がする。
Lightning Talks
Posted my slide deck for RubyKaigi 2019 LT / “Invitation to the dark side of Ruby” https://t.co/BOzkWstgnq
— tagomoris (@tagomoris) April 19, 2019
Just published "Dive into middleware with mruby" https://t.co/l1ioaQdfSa #rubykaigi
— y.kaneko (@spikeolaf) April 19, 2019
個人的に良いと思った2つの発表スライドを載せておきます。
Day 3
Ruby Committers vs the World
以下のような議題で公開開発会議が行われていた。
- Range の
()
を省略したときでも良い感じに書くための演算子を導入したい(e.g.a..b |> each
) - 右代入を導入したい
Numbered Block Parameter
をどの記号にするか?
個人的には Numbered Block Parameter
も含めて 👆 全部不要では?と思っている勢です。
このセッションで「Ruby を作る人達は別のパラダイムの言語を知った上でそこからインスピレーションを受けて Ruby を開発しているんだ」ということを知り、後述する Haskell 本を買うモチベーションになった。
(partially) Non-volatile mruby
mruby のメモリ管理の話。
実はこの前夜 mruby のワークショップに行っていて、 mruby にだいぶハマっていたため、とても面白かった。
mruby で遊ぶ用のマイコンが欲しい。
Best practices in web API client development
This is my talk from 13:30 at #RubyKaigiD / Best practices in web API client development #RubyKaigi https://t.co/SpADwcSG4P
— sue445 (@sue445) April 20, 2019
Ruby で書く Web API クライアントのお話。 API クライアント開発におけるアンチパターンとベストプラクティスがだいぶ実践的で、とても勉強になった。
発表内で紹介されていた リファクタリング Ruby 読みたいけどめっちゃ高いので買うか悩む。
The future of the Bundled Bundler with RubyGems
Bundler の話。
Bundler を RubyGems にマージしたいと言っていたが、どういうことかあんまりわかっていない。 library rubygems のコードに組み込むということかな?
Reducing ActiveRecord memory consumption using Apache Arrow
Apache Arrow を使って ActiveRecord #pluck
よりパフォーマンスのよいクエリ実行に成功したよ、という話。
マルチスレッド(10スレッド)の場合で、#pluck
と比べてメモリ消費量は2倍になったが、実行時間は 1/5 になったとのこと。
The send-pop optimisation
ようやくpublishできた The send-pop optimisation https://t.co/HqhlHXmzCo#rubykaigi
— 7594591200220899443 (@shyouhei) April 20, 2019
send-pop
を最適化して Ruby のパフォーマンスを改善したよという話。
send-pop
とは、 Ruby のメソッドで必ず返される(それが使われるかどうかは別として)何らかの返り値について、それが使われなかった時に捨てる、という一連の操作のこと(メッセージを send
したあとに使わなければ pop
する)
結論から言うと、メソッドの返り値を使うかどうかのフラグをもたせて、そのフラグを見て後処理を最適化することで処理速度をアップさせたらしい。(やりたいことは分かったが、実装部分の説明では理解が追いつかなかった)
Optimization Techniques Used by the Benchmark Winners
Slides from my RubyKaigi keynote presentation are now available at https://t.co/zVs6cNDQ9X Thank you so much to the @rubykaigi organizers, speakers, and attendees for the amazing conference.
— Jeremy Evans (@jeremyevans0) April 20, 2019
スピード狂によるスピード狂のための Ruby で究極の速さを追い求める話。
「それ、C言語でいいのでは?」 とか絶対に言えない雰囲気で、可読性完全無視で Ruby で最高のパフォーマンスを発揮する手法について語られていた。
発表されていたご本人が一番楽しそうでなによりでした ^^
所感とか
- 刺激を受けて技術書を 5 冊買いました。
- 並行コンピューティング技法 ―実践マルチコア/マルチスレッドプログラミング
- 今回の RubyKaigi では Ruby のパフォーマンス改善の話が多く、「マルチスレッド、マルチコア、並行処理、並列処理、スレッドセーフ」などいろんキーワードがでてきて、それぞれそれなりにググって調べてみたりしたが、人に教えられるレベルで全然理解できておらず、体系的に学びたいと思った。
- Rubyのしくみ -Ruby Under a Microscope-
- ずっと「あとで買う」リストには入っていた。買うなら今しかないと思って買った。
- コンピュータシステムの理論と実装 ―モダンなコンピュータの作り方
- アンダースタンディング コンピュテーション ―単純な機械から不可能なプログラムまで
- これも「あとで買う」リストには入っていた。抽象解釈とかが学びたくて買った気がする。
- すごいHaskellたのしく学ぼう!
- 並行コンピューティング技法 ―実践マルチコア/マルチスレッドプログラミング
- 半分ぐらい英語の発表でしたが全然聞き取れず、自身の英語力の無さを痛感したので、英語を学び始めました。(まずはリスニングからかなと思っています)
- Web 上のドキュメントを読む分には Google 翻訳さえあればぶっちゃけそんなに困らないが、こういうリアルなカンファレンスや動画コンテンツや活字での情報収集が英語でできるのとできないのとでは、全然情報量が違ってくると思った。 あと、カンファレンスに登壇まではできずとも英語で鋭い質問ができるとかっこいいなという憧れもある。
- mruby で遊ぶ用のマイコンが欲しい。
- 今見返すとレポートというより感想文ですね、おそらく理解度が低いためです。もっと勉強します。