itsukushima

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

2017年9月18日~20日に広島国際会議場で開催されたRubyKaigi2017に参加してきました。

弊社には技術サポート制度があり、カンファレンス参加費用を出してもらったり、業務として参加させてもらいました。感謝!

(ついでに宮島観光もしてきました。鳥居やまわりの景色が壮大でした!)

各発表を話題ごとに整理して簡単に紹介します。

概要

パフォーマンス

Towards Ruby 3x3 performance

  • Towards Ruby 3x3 performance - RubyKaigi 2017
  • Red Hatの Vladmir さん
    • GCCの開発を20年。Rubyは2年前から
  • Stack instructions を RTL insns に置換
    • Register Transfer Language - GNUコンパイラコレクションの使用する中間言語
    • IR 中間表現
  • JITとして、広く使われていて最適化されたコンパイラ GCC, LLVM を使った
    • スクラッチでJITを作るのは時間がかかる
    • 既存のJIT(JVMなど)を使うのはライセンス的に難しい
  • Optcarrotのベンチマークで、FPSが2.8倍になった
  • まだ開発中。安定するには少なくとも1年はかかる

How Close is Ruby 3x3 For Production Web Apps?

  • How Close is Ruby 3x3 For Production Web Apps? - RubyKaigi 2017
  • Rails製のディスカッションプラットフォームDiscourseの開発者、Noah さん
  • 実際にユーザに使われているRailsアプリでRubyのベンチマークを行った
    • HTTPリクエストに関しては、2.0から2.4で1.5倍の改善
  • ベンチマークのコードを公開したので、各自のAWS上で再現できる

Busting Performance Bottlenecks: Improving Boot Time by 60%

How to optimize Ruby internal.

Compiling Ruby

Improve extension API: C++ as better language for extension

Automated Type Contracts Generation for Ruby

Static Typo Checker

Type Checking Ruby Programs with Annotations

並行性

Fiber in the 10th year

  • Fiber in the 10th year - RubyKaigi 2017
  • CookpadのフルタイムRubyコミッター Koichi Sasada さん
  • Fiberの仕組み、歴史、実装、新しい提案の話
  • Threadとは違い、明示的に指定しない限りFiberのコンテキストは切り替わらない
  • Fiberという名前は、Windows APIにあったものを借りた
  • 最近Fiberの性能改善をしたが、その知見がGuild(検討中の次の並行性の仕組み)に役立ちそう

How to write synchronization mechanisms for Fiber

Asynchronous and Non-Blocking IO with JRuby

High Concurrent Ruby Web Development Without Fear

Rubyの実装

Making Ruby? - ゆるふわRuby生活

  • Keynote - RubyKaigi 2017
  • HerokuのフルタイムRubyコミッターNobuさんのキーノート
  • Ruby開発の話(リポジトリ、ビルド、バグレポート)
    • RubyをビルドするにはRubyが必要(BASERUBY, MINIRUBY)
    • Ruby2.5から並行ビルドが速くなった
  • 下記の1行目のコメントを外すと2行目の挙動が変わる
    • 実際にはバグではなくて古い仕様
# p = 2
p (-1.3).abs #=> 1.3
  • 上記の修正を、登壇中にライブコミットして会場が沸く。自動でテスト実行、チケットクローズ

Ruby Committers vs the World

  • Ruby Committers vs the World - RubyKaigi 2017 http://rubykaigi.org/2017/presentations/rubylangorg.html
  • Rubyコミッターが参加者からの質問に答えるコーナー
  • CookpadにRubyフルタイムコミッターとして、超絶技巧プログラミングの @mametter さんが入社
  • 型注釈に関してMatz曰く、Rubyにnominal type、すなわち型チェックのための構文を導入するのは決して無い。最低でもコメントレベル
  • 右代入は、あっても良いけど記号どうするとか多重代入とか、いろいろケアすることがあって大変
    • メソッドチェーンをしていって最後の返り値を変数に代入するのに右代入があると便利

The Many Faces of Module

  • Keynote - RubyKaigi 2017
  • Matzのキーノート
  • プログラミング言語と継承に関する歴史
  • RubyのModuleにはいろいろな使われ方がある
  • mixin, namespace, singleton, a set of methods, an unit of method combination, refinements, structural signature
  • 提案段階だが、ModuleにStructural type checkの役割を持たせようかと思っている

Regular Expressions Inside Out

Pattern Matching in Ruby

  • Pattern Matching in Ruby - RubyKaigi 2017
  • Elixirにおけるパターンマッチングの解説
  • Rubyにパターンマッチングの提案実装をしてみた
    • 記号に %p を使ってみた ← Matzは別の記号を推奨

Compacting GC in MRI

Memory Fragmentation and Bloat in Ruby

Ruby Extension Library Verified using Coq Proof-assistant

Improving TruffleRuby’s Startup Time with the SubstrateVM

Rubyエコシステム

Gemification for Ruby 2.5/3.0

An introduction and future of Ruby coverage library

  • An introduction and future of Ruby coverage library - RubyKaigi 2017
  • Rubyのテストカバレッジライブラリ
    • Ruby1.9以上では、カバレッジ計測を実装したものとしては発表者が作成した coverage.so のみ
    • SimpleCov は coverage.so のラッパー
  • カバレッジの種類には funtion, line, branch, condition, pathがある
    • coverage.so は lineカバレッジのみをサポート(完璧ではない)
  • function, branchカバレッジをサポートできるように開発中

Writing Lint for Ruby

  • Writing Lint for Ruby - RubyKaigi 2017
  • Lintは
    • Rubyコードを構文解析してできたASTを使う
    • Rubyコードを実行しないので速い(実行しないとわからないものはわからない)
  • RuboCop のLintルールの書き方

Bundler 2

JRuby at 15 Years: Meeting the Challenges

Rubyの応用事例

Mapping your world with Ruby

Handling mails on a text editor

dRuby on Browser

Hanami - New Ruby Web Framework

  • Hanami - New Ruby Web Framework - RubyKaigi 2017
  • Hanamiの設計思想は「長期的なメンテナンス」
  • Railsと比較すると
    • Model は entity, repository
    • Controllerは 1Actionに対して1Class
    • 素のRubyで書ける(Railsは拡張しすぎ http://railshurts.com/quiz/)

mruby gateway for huge amount of realtime data processing

What visually impaired programmers are thinking about Ruby?

  • What visually impaired programmers are thinking about Ruby? - RubyKaigi 2017
  • 読上げ機能付きの、Ruby製のエディタ VIPER
    • 大文字だと"cap"と直前に発音したり、インデントはビープ音で表現
  • 点字ディスプレイ・キーボード
  • Rubyのドキュメントは日本語なのでとっつきやすく、ターミナルで作業するようなサーバエンジニアには使いやすい

Ruby Language Server

  • Ruby Language Server - RubyKaigi 2017
  • Language Serverとは、補完候補やメソッド定義などの情報をエディタに提供するもの
  • Microsoftが策定したLSP(Language Server Protocol)で通信する
    • JSON-RPC ベース
  • language_server gemを作ったので実装方法を解説

Ruby Parser In IRB 20th Anniversary...Now Let Time Resume

Ruby in office time reboot

  • Ruby in office time reboot - RubyKaigi 2017
  • Redmineをなんにでも使う
    • 借りた物の管理(開封時の写真、開けた・取り出した・戻したの状態管理)
    • 仕事のオファーから納品、請求までを管理
  • Gitlab
    • subversionを使っていたときはデザイナーが自由にリポジトリを作れなかった
    • Gitlabにして誰でもリポジトリを作れ、Web UIからRedmineのチケットの更新設定が可能
  • お客様はエクセルが好き
    • axlsx gemでxlsxファイルを作っている
  • デザイナーにsinatra経由でスクリプトを実行してもらう

Smalruby : The neat thing to connect Rubyists and Scratchers

Irb 20th anniversary memorial session: Reish and Irb2

Ruby for Distributed Storage System

  • Ruby for Distributed Storage System - RubyKaigi 2017
  • TreasureDataの分散キーバリューストレージシステム Bigdam-pool をJavaで作った
  • Bigdamの他のコンポーネントとのテストで
    • モックサーバをSinatraで書いた
    • テストを test-unitで書いた(Javaで型書くのがめんどうだった)
  • 趣味でBigdam-pool-rubyを開発中

機械学習

Development of Data Science Ecosystem for Ruby

Do Androids Dream of Electronic Dance Music?

Food, Wine and Machine Learning: Teaching a Bot to Taste

Progress of Ruby/Numo: Numerical Computing for Ruby

組み込み機器

Tamashii - Create Rails IoT applications more easily

  • Tamashii - Create Rails IoT applications more easily - RubyKaigi 2017
  • IoT アプリ用のフレームワークをRailsをベースに作った
    • WebアプリとデバイスはWebsocketで通信
    • デバイスはRaspberry Pi 3に対応。RFID/NFC、LCD Display、ブザーをRailsのModel風のAPIで操作できる
    • WebアプリはActionCable,Redisを使用

Serial Protocol Analyzer on Ruby

Write once, run on every boards: portable mruby

言語

C how to supercharge Ruby with Rubex

I quit my job to write my own language: Goby

Introducing the Jet Programming Language

その他

Ruby, Opal and WebAssembly

  • Ruby, Opal and WebAssembly - RubyKaigi 2017
  • Ruby-to-JavaScript compilerのOpal、Ruby用2Dゲームライブラリ DXRuby を組み合わせて DXOpal を作った
  • 衝突判定処理が重いのでWebAssemblyを使おうとしている

The Ruby Module Builder Pattern

The Curious Case of Wikipedia Parsing

Bending The Curve: Putting Rust in Ruby with Helix

Flor - hubristic interpreter

API Development in 2017

LT

感想

  • VladmirさんのMJITはRubyを3倍速くするのに現時点で最も有力な候補だと感じました
  • 小規模なアプリやスピードが求められるときRailsでさくっと作り、長期的で大規模なアプリはHanamiを使うと良さそう
    • Hanamiはファイル数やディレクトリは多くなるがアプリをシンプルに書けそう。Controllerのテストも簡単にかけそう
  • Rubyで機械学習も頑張れば書けそうだし、Apache Arrowの開発にも期待。