RubyKaigi2017レポート
こんにちは。開発チームの大原です。
2017年9月18日~20日に広島国際会議場で開催されたRubyKaigi2017に参加してきました。
弊社には技術サポート制度があり、カンファレンス参加費用を出してもらったり、業務として参加させてもらいました。感謝!
(ついでに宮島観光もしてきました。鳥居やまわりの景色が壮大でした!)
各発表を話題ごとに整理して簡単に紹介します。
概要
- 日付
- 2017-09-18..2017-09-20
- 場所
- 広島国際会議場(平和記念公園内)
- 講演一覧
- http://rubykaigi.org/2017/schedule
- 発表のスライドや動画が見られます
- 資料
パフォーマンス
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%
- Busting Performance Bottlenecks: Improving Boot Time by 60% - RubyKaigi 2017
- Shopifyは起動するのに8秒かかっていた
- 自作のタイミングヘルパーでボトルネックを測定
- bootsnap gemでキャッシュを最適化
- Bundlerをアップデート
How to optimize Ruby internal.
- How to optimize Ruby internal. - RubyKaigi 2017
- 最近Rubyコミッターになった @watson1978 さんがHashやTimeを高速化した話
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
- How to write synchronization mechanisms for Fiber - RubyKaigi 2017
- 発表者が書いた、絶版になったdRubyの本がWebで読めるようです
- Fiber入門
- Process→メモリは共有したい→Thread→コンテキストスイッチは自分でやる→Fiber
- 便利なイディオム Fiber.newしたらすぐresume、行き詰まったらyield
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
- Regular Expressions Inside Out - Ruby Kaigi 2017
- Rubyコミッターでもある、青山学院大学のMartin先生の正規表現の話
- // は何にマッチするか?
- 資料は日本語原稿付きで読みやすい
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
- Gemification for Ruby 2.5/3.0 - RubyKaigi 2017
- Rubyライブラリには、標準添付ライブラリ(Starndard library)、Default Gems、Bundled Gemsがある
- ライブラリにバグがあったときにRuby本体を更新しなくても良くなるように、標準添付ライブラリをgemにする活動をしている(Gemification)
- Ruby2.5からbundlerがdefault gemsに追加された
- RubyKaigi 2017 に登壇します & GMO ペパボがスポンサードします - ペパボテックブログ
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
- Mapping your world with Ruby - RubyKaigi 2017
- 放射線データを集めたサイトSafecastの紹介とRubyの使用事例
Handling mails on a text editor
- Handling mails on a text editor - RubyKaigi 2017
- ターミナル上で動作するテキストエディタをRubyで作った
dRuby on Browser
- dRuby on Browser - RubyKaigi 2017
- ブラウザからサーバーのdRubyオブジェクトとWebSocketで通信できるライブラリを作った
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
- mruby gateway for huge amount of realtime data processing - RubyKaigi 2017
- TreasureDataでは大量のストリームデータのインポートに、H2Oとmrubyでgatewayサーバを作って対応している話
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 Parser In IRB 20th Anniversary...Now Let Time Resume - RubyKaigi 2017
- RDocはIRBのRubyパーザを使っていたが、標準添付ライブラリのRipperを使うようにした
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
- Smalruby : The neat thing to connect Rubyists and Scratchers - RubyKaigi 2017
- 日本のプログラミング教育、Python製のビジュアルプログラミング言語 Scratch の紹介
- Scratch のRuby版 Smalruby の概要、実装
Irb 20th anniversary memorial session: Reish and Irb2
- Irb 20th anniversary memorial session: Reish and Irb2 - RubyKaigi 2017
- Ruby操作ができるshell、Reish を開発中
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
- Development of Data Science Ecosystem for Ruby - RubyKaigi 2017
- PyCallでPythonの科学計算ライブラリを呼び出す
- Apache Arrowでメモリ上のデータフォーマットを共通化
- 発表者によるワークショップにも参加しました
Do Androids Dream of Electronic Dance Music?
- Do Androids Dream of Electronic Dance Music? - RubyKaigi 2017
- 機械学習でEDMを作って、デモ
Food, Wine and Machine Learning: Teaching a Bot to Taste
Progress of Ruby/Numo: Numerical Computing for Ruby
- Progress of Ruby/Numo: Numerical Computing for Ruby - RubyKaigi 2017
- PythonのNumpyのような、Ruby製の数値計算用ライブラリNumoの特徴と実装状況について
組み込み機器
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
- C how to supercharge Ruby with Rubex - RubyKaigi 2017
- Ruby風の言語RubexでRubyのC拡張を書く
I quit my job to write my own language: Goby
- I quit my job to write my own language: Goby - RubyKaigi 2017
- Goで実装されたRuby風のプログラミング言語Gobyを作った
Introducing the Jet Programming Language
- Introducing the Jet Programming Language - RubyKaigi 2017
- マルチコアCPUに最適化された言語として Jet を作った
- Erlang VM上で動作するRuby風言語
その他
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 Ruby Module Builder Pattern - RubyKaigi 2017
- これも参考に Module Builder Patternと出会う – NET BIZ DIV. TECH BLOG
The Curious Case of Wikipedia Parsing
Bending The Curve: Putting Rust in Ruby with Helix
Flor - hubristic interpreter
API Development in 2017
- API Development in 2017 - RubyKaigi 2017
- REST の次に来るかもしれない GraphQL について
LT
感想
- VladmirさんのMJITはRubyを3倍速くするのに現時点で最も有力な候補だと感じました
- 小規模なアプリやスピードが求められるときRailsでさくっと作り、長期的で大規模なアプリはHanamiを使うと良さそう
- Hanamiはファイル数やディレクトリは多くなるがアプリをシンプルに書けそう。Controllerのテストも簡単にかけそう
- Rubyで機械学習も頑張れば書けそうだし、Apache Arrowの開発にも期待。
- RubyでPythonの科学計算ライブラリを使うワークショップは面白いので興味ある人は是非やってみてください
- https://github.com/RubyData/rubykaigi2017