こんにちは。開発チームの大原です。

今年も弊社の技術サポート制度を利用してRubyKaigi 2018に参加してきました。

各発表をテーマごとに整理し、私が見た発表については要約をつけて紹介します。

ちなみに去年のレポートはこちらです。RubyKaigi2017レポート

概要

全体的なまとめと感想

  • 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

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

JRuby 9.2 and Rails 5.x

  • 発表資料:まだ

mruby

How Ruby Survives in the Cloud Native World

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

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

Fast Numerical Computing and Deep Learning in Ruby with 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

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

It's Rubies All The Way Down

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

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)