RubyKaigi2019 1日目レポート

RubyKaigi2019(1日目) に参加してきました!

オクト プロダクトチームのrjgeです。普段はパフォーマンスを始めとした性能改善やセキュリティに関する機能改善を担当しています。
4/18(木)〜4/20(土)に開催されているRubyKaigi2019の1日目レポートです。

オクトは今年初めて RubyKaigi にRuby Sponsorsとして協賛させていただいています。
5-11(5階D会場付近)にてブースも出しているので、是非スタンプラリーを回りつつ遊びにきてください!
ブースではステッカーやスマホスタンドにもなるバッグハンガーをお配りしています✨
バッグハンガーは残数わずかとなっているため欲しい方はお早めに!

f:id:oct88:20190419005224j:plain

ブース

f:id:oct88:20190419005309j:plain

ノベルティ バッグハンガー

f:id:oct88:20190419005439j:plain

スタンプラリー

Matzさんにも立ち寄っていただきました!

f:id:oct88:20190419005545j:plain

Matzさんと

ということで、ここまで宣伝でした。ここからは1日目の参加レポートです。

今回の会場である福岡国際会議場ですが、各セクションごとに階が異なるという仕様のため、10分で階をまたいで移動!といったことも発生します。
特にセッション終わりは人の出入りでエスカレーター周辺が混み合うため、余裕を持った移動がおすすめです!
ref. 福岡国際会議場 施設案内en

セッション

ここからは私が拝見したセッションのレポートとなるのですが、今回は4会場でセッションが同時進行している
ため予定を組む段階でとても悩みました。というのも、どのセッションも面白そうで全部聞きたいんですよね。
(分身とか分裂とかして同時に4つのセッション聞ける体になりたい。)

Matz Keynote

10:00 - 11:10 / Main Hall (3F) @ rubykaigiA

f:id:oct88:20190419005636j:plain

Matz Keynote

1日目のKeynoteは、Rubyの生みの親であるMatzさんからです。
今回はRuby 3に関するお話がメインでした。Rubyの良い点・悪い点に触れた後、Ruby 3でのメイン変更点についてのお話がありました。

Static Typing

最近の言語では静的解析が利用できるものが多いという話題から始まり、何故今まで入れていなかった静的解析を入れることにしたのかという話に続きました。
本当はテストが嫌い(テストはDRYでないし、私たちはプログラムを書きたいのであってテストを書きたいわけではない)という発言では場内に笑い声が響きます。
できるだけテストの実装にかける時間を減らしたいし、それができるならそれに越したことはないということで静的解析を入れることを考え出したということでした。
普段テストを書くことにそれなりの時間を費やしている私としても、確かにそこが楽になるなら静的解析もありかなと思ってしまいました。
ただ、型宣言自体はできるだけ入れたくないとのこと。人間がわざわざ型宣言をする=コンピュータに働かされている感じがするので逆が良いというのは、言われてみると確かにという気もします。

f:id:oct88:20190419005909j:plain

静的解析導入に当たって検討している4点

ここで話されたType Profilerについては、個人的にはものすごくテンションが上がりました。
導入されるとある意味イコールテストを書くということにはなりますが、テストで想定挙動を先に定義するのは割と普段からやっているので、恩恵100%という感じでした。

Performance

こちらはRuby2.6から導入されたJITに関するお話がメインでした。
JITを入れるとエミュレーター等では速くなるものの、まだRailsを始めとしたWebアプリケーションでは遅くなってしまうので、ネックになっている点をいくつか取り上げられました。

Concurrency

Rubyはマルチコアのことを今まであまり取り上げてきませんでしたが、今後はそちらにも注力されていくということでした。
スレッドは色々と難しい(使うのが難しい、効果を出すのが難しい、極め付けに不具合を直すのも難しい)という後悔のお話も。

上記以外にも、Ruby 3で変更*されない*点や、パターンマッチングのような新たに入れることを検討している機能の紹介と盛りだくさんでした。
かなりワクワクする話題が多く、俄然Ruby 3が楽しみになりました。来年12月が待ち遠しいですね!

Ruby 3 Progress Report

11:20 - 12:00 / Main Hall (3F) @ rubykaigiA

Keynoteに続いて、MatzさんとRubyコアチームからRuby 3 の進捗発表がありました。
こちらはもRuby 3で加わる3大ポイントについての概要説明がメイン担当のコミッターの方からそれぞれありました。

上記以外では、RubyGemsとBundlerの話もありました。
こちらでは、BundlerがいずれRubyGemsにマージされるだろう点と、前日bootstrap-sassで発生したアカウント乗っ取りに関連した注意喚起がありました。
RubyGems.orgを利用されている方はマルチファクター認証を利用しましょう!
Setting up multi-factor authentication

また、Ruby 3でキーワード引数が変わる点についてもアナウンスがありました。
こちらは非互換の変更となり、Ruby 2.7から警告が出るようになるようです。
もともと動作が微妙な点(@mametterさん曰く「バグっている点」)を徐々に綺麗にしていく構想のようでした。
参考: Feature #14183

直近のリリース情報として、本日4/18に新元号(令和)で追加されたUnicodeの対応をRuby2.6.3としてリリースしたとのアナウンスもありました。

Performance Improvement of Ruby 2.7 JIT in Real World

13:30 - 14:10 / Main Hall (3F) @ rubykaigiA

@k0kubunさんの発表です。
こちらは、Ruby2.6から2.7でどのようにJITを改善しているかという内容でした。

スライドが上がっているので、是非そちらをチェックされてみてください!
https://speakerdeck.com/k0kubun/rubykaigi-2019

## Pragmatic Monadic Programming in Ruby
14:20 - 15:00 / International Conference Room (5F) @ rubykaigiD

@joker1007さんの発表です。
Proc楽しい!というところからMonadをRubyで実装するにはどうするか?というトリッキーなセッションでした。

こちらも早速スライドが上がっています!
https://speakerdeck.com/joker1007/pragmatic-monadic-programming-in-ruby

また、発表にあったMonarのレポジトリも下記で公開されているようです。
https://github.com/joker1007/monar

A Type-level Ruby Interpreter for Testing and Understanding

15:40 - 16:20 / Main Hall (3F) @ rubykaigiA

@mametterさんの発表です。
Ruby 3に関する発表でもあったType Profilerに関する内容でした。
テストを含めてどこからも呼び出しがないメソッドは解析ができない(型情報が取得できない)等の問題もありましたが、そこはテスト書こうぜ!と言える理由が増えるのでありだなという感想でした。
※テストを書くのは特別好きではないですが、テストがないプロジェクトは精神衛生上好ましくないのでテスト書きたい派です。

スライドです!
https://www.slideshare.net/mametter/a-typelevel-ruby-interpreter-for-testing-and-understanding

ちなみに上記の発表に関する質疑応答を明日4/19にクックパッドさんのブースで行われるようです。

RMagick, migrate to ImageMagick 7

16:30 - 17:10 / International Conference Room (5F) @ rubykaigiD

@watson1978さんの発表です。
RMagickの最近の活動についての発表でした。
RMagick×Homebrewで悩まされたことがあるので、そちらのバグ修正に関する発表の際には心の中で拍手喝采でした👏

発表スライドです!
https://speakerdeck.com/watson/rmagick-migrate-to-imagemagick-7-number-rubykaigi-number-rubykaigi2019

Pattern matching - New feature in Ruby 2.7

17:20 - 18:00 / Main Hall (3F) @ rubykaigiA

@k_tsjさんの発表です。
Ruby2.7のパターンマッチングに関するお話でした。
`case/in`、色々なところで使えそうでしたね!パターンを網羅する必要がある(定義されていないパターンが来るとエラーが発生する)というのもセーフティでいいなと思いました。

サンプルケースが充実したスライドです(見直していたらまたテンションまた上がりました)
https://speakerdeck.com/k_tsj/pattern-matching-new-feature-in-ruby-2-dot-7

RubyKaigi 2019 Official Party

今年の公式アフターパーティはなんと商店街貸し切り!
中洲川端商店街は全長400mにも及ぶ規模の大きな商店街ということです。
今回はその商店街を貸し切りという何とも小粋なアフターパーティーでした。

f:id:oct88:20190419010005j:plain

f:id:oct88:20190419010038j:plain

f:id:oct88:20190419010100j:plain

f:id:oct88:20190419010121j:plain

ということで、RubyKaigi 1日目の速報でした。聞けなかったセッションのスライドや他の方のレポートを見るのが楽しみです。
明日明後日とRubyKaigiは続くので、みなさん引き続きenjoyしましょう!

最後にまた宣伝になるのですが、明日4/19(金)は弊社でもDrinkUpを企画しています!
場所は磯ぎよし 天神店さんで、セッション終了後、19:00開始予定です。
すでに参加登録いただいている方はもちろん、当日飛び入り参加したい!といった方がいらっしゃりましたら是非弊社ブーススタッフ or 会場内にいる「&ANDPAD」ロゴ入りの服を着た人間までお声がけください!
(お席に限りがあるため、もし満席になってしまった場合はすみません…!)

積極採用中

弊社では、業務拡大中でソフトウェアエンジニアを積極採用しております。みなさまのご応募お待ちしております!!エンジニア採用サイトに募集職種や、会社の雰囲気の分かるインタビュー記事があります。是非ご覧ください。

engineer.88oct.co.jp