RubyKaigi2018レポート
こんにちは。開発チームの大原です。
今年も弊社の技術サポート制度を利用してRubyKaigi 2018に参加してきました。
各発表をテーマごとに整理し、私が見た発表については要約をつけて紹介します。
ちなみに去年のレポートはこちらです。RubyKaigi2017レポート
概要
- 日付
- 2018-05-30..2018-06-02
- 場所
- 講演一覧
- Schedule
- しばらくすると、発表のスライドや動画が公開されると思います。
- 資料
- 運営スタッフによる写真
全体的なまとめと感想
- Ruby3に向けての大きな話題である、パフォーマンス、型、並行性については
- Ruby2.6からオプションでJITが使えるようになる。全体的に速度改善の開発が進んでいる
- 言語仕様に型注釈が入ることはなく、Steepのように、コメントや別ファイルで型を指定するような方法が有力。Stripe社のSorbeという型チェッカーの完成度が高いことが話題に。
- 並行性は進捗なし
- mruby系の話題が多く採用されていました。mrubyはそれほど使ったことが無いので、もっと使ってみたいと思いました。
- 休憩時間のプレイリストがジョジョ4部で素晴らしかったです。
- 次回の RubyKaigi2019 は 2019-04-18..2019-04-20 福岡 (詳細な場所は未定)
Keynote
Keynote
- ことわざを引用してプログラミングで大事なことを Matz が解説
- 名は体を表す。yield_self というメソッド名は何をするかは表しているが、「何をしたいのか」がわからない。より良いメソッド名(alias)として then をリリースコミット以外で約5年ぶりにコミットした。
- 時は金なり。開発者が時間を効率よく使えるための改善がRuby3に向けて進んでいる。
My way with Ruby
- 発表資料:My way with Ruby - Kouhei Sutou
- Rubyでできることを増やすためにライブラリを作ってきた
- RSS Parser, Rabbit, Ruby/GI(実行時に自動でバインディングを生成), Rroonga(るりまサーチで使われてる)
- Red Arrow(インメモリ用データフォーマットApache Arrorw の公式Rubyバインディング)
- メンテされなくなったライブラリのメンテナを引き継いできた
- REXML, test-unit, csvnなど
Parallel and Thread-Safe Ruby at High-Speed with TruffleRuby
- 発表資料:Parallel and Thread-Safe Ruby at High-Speed with TruffleRuby
- TruffleRubyの紹介と内部実装の解説
- TruffleRubyとは、Oracle社が開発しているGraalVM上で動くRuby実装の一つ
- OptCarrot(ファミコンソフトを動かすRubyベンチマークソフト)でデモをすると、Ruby2.0.0で28fpsに対し、150fps以上の速度が出た。ただし、起動時はwarmupが必要で遅い。
- Lan Masterというパズルゲームを動かしていて、面白そうだった
- rbenv intall trufflerubyで試せる
パフォーマンス
The Method JIT Compiler for Ruby 2.6
- 発表資料:The Method JIT Compiler
- 登壇者の解説:Ruby 2.6にJITコンパイラをマージしました - k0kubun's blog
- RubyのJITの概要と、MJITの実装内容の解説
- 2.6.0preview2で2.0よりも5.7倍速くなった
- JITするとRailsアプリが遅くなることがある。原因はオーバーヘッド、JITキャンセルが頻発する、呼び出しメソッドの種類が多い
- Integer#timesはCで実装されているが、Rubyで再実装してJITで動かすと、Cよりも2.5倍速くなった。
- JITが安定すれば、速度優先のためにC拡張を書く必要が無くなる
- スライド最後の「C language is dead」を背景にした登壇者の写真が、RubyKaigi中にネタとして使われていました
Analyzing and Reducing Ruby Memory Usage
- 発表資料:まだ
Three Ruby performance projects
- 発表資料:まだ
型
Ruby Programming with Type Checking
- 発表資料:Ruby Programming with Type Checking
- 型チェックライブラリ Steep の紹介
- 型チェックするには、別ファイル(拡張子rbi)にシグネチャを書き、ソースコードにコメントでアノテーションを書き、型チェッカを実行する
- (感想)スライドのDemo Resultを見るとわかるように、多くのシグネチャ、アノテーションを書かないといけないので、個人的には型チェックそのものが辛い
Type Profiler: An analysis to guess type signatures
- 発表資料:まだ
- 型関連の既存ライブラリの紹介
- Rubyの型システムとして Type DB というアイディアがある。何らかの方法で型情報をType DBに蓄積し、型チェッカーやIDEがType DBから型情報を利用する
- コードを静的および動的に解析して型情報を集めるType Profilerのプロトタイプを作っている
A practical type system for Ruby at Stripe.
Improve Ruby coding style rules and Lint
並行性
Guild Prototype
- 発表資料:Guild Prototype
- Ruby3で並行性を実現するための機能 Guild の概要と実装方法について
- 結論、スレッドプログラミングは人類には早すぎるくらい難しい
- 共有オブジェクトの取扱いが並行プログラミングの鍵
- Guild間ではmutableなオブジェクト(String, Arrayなど)は共有できない
- それらのオブジェクトはcopyやmoveメソッドでGuildの所属を変える
Rubyの実装
Exploring Internal Ruby Through C Extensions
- 発表資料:まだ
Faster Apps, No Memory Thrash: Get Your Memory Config Right
extend your own programming language
- 発表資料:Extend your own programming language (RubyKaigi 2018)
- RubyでつくるRuby ゼロから学びなおすプログラミング言語入門 で作成する MinRuby を登壇者が改造した話
Ferrari Driven Development: superfast Ruby with Rubex
RNode with code positions
Grow and Shrink - Dynamically Extending the Ruby VM Stack
- 発表資料:まだ
How to get the dark power from ISeq
- 発表資料:RubyKaigi2018
JRuby 9.2 and Rails 5.x
- 発表資料:まだ
mruby
How Ruby Survives in the Cloud Native World
- 発表資料:How Ruby Survives in the Cloud Native World
- could nativeとは、コンテナ化されていて、動的に管理・配置され、マイクロサービス指向なもの。Cloud Native Computing Foundationという団体がFAQ - Cloud Native Computing Foundationで定義している
- コンテナを管理するツール Hakoniwa を mrubyで作った
- 10kコンテナ問題(ホストOSのbridge作成上限が1024,Namespace作成が遅い)などのために、あらたに marfusha というツールを作っている
How happy they became with H2O/mruby, and the future of HTTP
- 発表資料:How happy they became with H2O/mruby and the future of HTTP
- RoomClipというインテリアSNSの画像リサイズ処理をNginxからH20 + mrubyにリプレースした
- Nginxの設定ファイルに複雑なリサイズロジック
- H20サーバの設定をmrubyで書くことでデバッグしやすく、テストしやすくなった
- 発表後半は、新しいHTTPステータスコード 103 Early Hintsの歴史
20k MRuby devices in production
- 発表資料:20k mRuby devices in Production
- IoT Embedded System Framework cloudwalkio/da_funk
LuaJIT as a Ruby backend.
Design pattern for embedding mruby into middleware
Controlling Droids™ with mruby & Go
- 発表資料:まだ
mruby can be more lightweight
- 発表資料:まだ
Firmware programming with mruby/c
- 発表資料:まだ
科学計算
Deep Learning Programming on Ruby
- 発表資料:Deep Learning Programming on Ruby
- RubyKaigi 2018でDeep Learning Programming on Rubyというタイトルで発表してきました - hatappi.blog
Fast Numerical Computing and Deep Learning in Ruby with Cumo
- 発表資料:Fast Numerical Computing and Deep Learning in Ruby with Cumo
- GPUによる数値計算ライブラリ Cumoの話
High Performance GPU computing with Ruby
- 発表資料:まだ
REPL
Implementing Web Console
- 発表資料:まだ
IRB Reboot: Modernize Implementation and Features
- 発表資料:まだ
Reirb: Reborn Irb
- 発表資料:まだ
応用事例
bancor: Token economy made with Ruby
- 発表資料:bancor-token-economy-made-with-ruby
- Bancor Protocolとは、ある経済圏の売買取引において、売り手が買い手を見つけられない流動性リスクを価格方程式によって解決するプロトコル
- bancor gemを作成し、チケットの枚数を変えると非線形に合計金額が変わるデモを実施
Kiba 2 - Past, present & future of data processing with Ruby
- 発表資料:Kiba ETL v2
- データ処理(extract, transform, load)ライブラリ Kiba の紹介
- 競合ライブラリは Treasure Data 社の Embulk
Hijacking Ruby Syntax in Ruby
- 発表資料:Hijacking Ruby Syntax in Ruby
- binding, TracePoint, refinementsといった黒魔術メソッドを使って、メソッド上書きを禁止するfinalistといったgemを作成
- 黒魔術メソッドを使うと、デバッグが大変なので気をつけて使うべし
All About RuboCop
- 発表資料:All About RuboCop (RubyKaigi 2018)
- Rails用のcopを削除予定
- githubのリポジトリを作者配下から rubocop-hq Organization を作成して移動
RubyGems 3 & 4
- 発表資料:RubyGems 3 & 4
- Ruby2.6.0 に RubyGems3.0、Ruby2.7 と Ruby3.0に RubyGems4.0 が同梱される
- RubyGems2.7はRuby1.8(!)以上をサポートしており、CIが大変なので、RubyGemns3.0からは Ruby2.2以上とした
- RubyGems4.0ではいくつかの非互換な修正が入る予定
- git submodule用のリポジトリを用意した The Ruby Language git repositories
Architecture of hanami applications
- 発表資料:Architecture of hanami applications
- メンテナンス性で大事なことは、分離されていること、シーケンシャルなロジック、グローバルな状態を持たないこと、テストカバレッジ
- hanamiでの基本的な実装方針は、関数的なオブジェクトをインスタンス化して、パラメータを引数にしてcallを呼ぶ
- 関数的オブジェクトの管理が大変→ dry-container gem, gry-autoinject gem
A parser based syntax highlighter
- 発表資料:A_parser_based_syntax_highlighter.pdf
- Ripper(標準ライブラリのパーサ)を使ってシンタックスハイライトgem Iro を作った
- ruby-highlight.herokuapp.com で試せる
It's Rubies All The Way Down
- 発表資料:まだ
- RubyだけでWebアプリスタック(アプリ、Webサーバ、ログなど)を作る
- wyhaines/iowa: A fast, productive, component based web development framework for Ruby.
- プロキシサーバ igrigorik/em-proxy: EventMachine Proxy DSL for writing high-performance transparent / intercepting proxies in Ruby
- DBはRuby製のものが無かった。おそらくパフォーマンスのせい。
- KVS roma/roma: ROMA: A Distributed Key-Value Store in Ruby
Ruby code from the stratosphere - SIAF, Sonic Pi, Petal
- 発表資料:rubykaigi2018/ruby-code-from-the-stratosphere.pdf
- TidalCylesと似たような構文の、Sonic Pi上で動くPetalという言語を作った
- Sonic Piとは、Rubyで書けるシンセサイザー。TidalCylesはHaskellのように書ける、ライブコーディングパターン向けの言語。
- 成層圏まで気球を飛ばし、ラズパイのセンサー値から、Petalのコードを生成してイベントで即興演奏をした、という話。
Build your own tools
- 発表資料:Build your own tools - Shugo Maeda
- ローカルアプリ代替のWebアプリが嫌い。ローカルコンピュータでできることはローカルでやりたい
- キーボードおよびファームウェア(mrubyでは容量制限があったのでCで)を自作した
- ftpup, textbringerなど
Journey of a complex gem upgrade
- 発表資料:まだ
Scaling Teams using Tests for Productivity and Education
- 発表資料:まだ
One cable to rule them all
- 発表資料:[RubyKaigi 2018] AnyCable: One cable to rule them all
- AnyCable: Action Cable on steroids!
- palkan/litecable: Lightweight Action Cable implementation (Rails-free)
Devly, a multi-service development environment
- 発表資料:まだ
Deep into Ruby Code Coverage
- 発表資料:まだ
Karafka - Ruby Framework for Event Driven Architecture
- 発表資料:まだ
What would your own version of Ruby look like?
- 発表資料:まだ
TTY - Ruby alchemist’s secret potion
- 発表資料:まだ
- コマンドラインアプリ用のライブラリ群 tty シリーズの紹介
TRICK 2018 (FINAL)
- tric/trick2018
- 個人的に、11-tompng のクリスマスツリーの作品が視覚的にすごいと思いました(rubyで実行してみてください)