TakayukiKoyama Geek Blog

Create, Entertain, Experience

RubyKaigi2018の学び

 RubyKaigiで学んだことをまとめてみる。2019に行くときになった場合のための備忘録。かなり初心者(初参加)目線で書いてるので予めご了承を。

rubykaigi.org

RubyKaigi2018参加時の自分の状態

  • Ruby2.1 Goldを取得する程度の知識
  • Ruby on Rails のお仕事は計1.5年ぐらい
  • メタプログラミングRubyRuby部分は読んだ
  • RubyKaigiは初参加
  • 英語にあまり触れていなかったので英語セッションはあまり理解できていない

RubyKaigiに対する主観

 Rubyを改善したお話などはC言語レベルのお話しなのでCRubyを理解する必要がある。C自体は理解しているものの、CRubyはコードを読まないと話しについていけない。最新版Ruby(今年は2.6)に導入される機能や改善、mruby、gemなどのお話が多い印象。Railsのセッションはナシ、セッションに関連してRailsの話しをすることはある。

自分が分かってなかった用語

AST : Abstract syntax tree

 ソースコードをパースするための抽象構文木

parse.y

 ASTにも関連するが、Rubyコードの構文木構築や意味解析をしている。

https://github.com/ruby/ruby/blob/trunk/parse.y

Ripper

 RubyRubyコードをパースする。

 参考:Rubyの標準添付ライブラリripperでRubyのソースをパースする -- ぺけみさお

style, lint の違い

  • style は潜在的なバグを含まないコード記述
  • lint は潜在的なバグを含む直さなければならないコード記述

ISeq

 RubyVM::InstructionSequence。Rubyコードから VM の命令シーケンスを取得できる。RubyVM上 でどのような動きをするか確認したいときに使える。

 参考:class RubyVM::InstructionSequence (Ruby 2.5.0)

brainf*ck

 ISeqに関連して話題になる用語。

 8つの命令 ><+-.,[] だけで動くプログラミング言語。開発者は Urban Müllerコンパイラのサイズはわずか123バイト、インタプリタは98バイト。

 以下、 Hello World が出力されるソースコード。なぜこれで Hello World になるのか...

+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+
++.>-.------------.<++++++++.--------.+++.------.--------.>+.

 参考:Brainfuckとは (ブレインファックとは) [単語記事] - ニコニコ大百科

ruby3x3

 Ruby3.0は2.0より3倍早くするということらしい。

 参考:Ruby 3x3: Ruby 3 will be 3 times faster — Appfolio Engineering

JITコンパイラ

 プログラムの実行時に、予め用意された中間コードを プログラムの実行時機械語コンパイルすることである。

 Ruby2.6では @k0kubun 氏が実装してPreview版に組み込まれている。

 Ruby 2.6にJITコンパイラをマージしました - k0kubun's blog

 ちなみにC/C++はAOTコンパイラ

Guild

 今までのスレッドの並列処理はかなり限定的だったが、 @_ko1 氏が Guild というプロジェクトで今よりもCPUコアを有効活用できるように実装を目指している。

 参考:もしOSに断絶があればRubyは死んでいた可能性が高い、まつもと氏がRuby25周年で講演 - SideCI Blog

$SAFE

 プログラムをセキュアに保つため、汚染されたオブジェクトを使わないように制限する変数。通常は 0。1にするとKernel系のメソッドに制限がかかる。メソッドを実行しようとするとSecurityErrorになる。

$ irb
irb(main):001:0> p $SAFE
0
=> 0

 参考:ルービー3分クッキング「今日はオブジェクトを汚染していきます」

autoload

 Rubyの資格本で勉強したけど、使わないので振り返り。

 requireはファイル実行時に読み込まれるが、使用しない場合はメモリのコストになるので、クラスやモジュールを使用するときに初めて読み込まれるようにしたいときに使う。

 参考:autoload (Module) - Rubyリファレンス

Kubernetes

Kubernetesは、コンテナ化されたアプリケーションの展開、スケーリング、および管理を自動化するためのオープンソースシステムです。コンテナアプリケーションのワークロードを自動化することで、開発の生産性を向上させ、柔軟な運用を容易にします。

 Webアプリを運用してスケールさせたいときに便利そう。

 参考:Kubernetesを始めよう! - DMM inside

trick2018

GitHub - tric/trick2018

 超絶技巧 Ruby 意味不明コンテスト。なぜそのコードが動くのかを理解するのが難しい。

 ちなみに1位のソースコード

alias    BEGIN    for      unless   def      class
super    true     or       return   defined? next
break    while    begin    undef    do       end
rescue   then     retry    else     undef    module
nil      ensure   case     if       yield    __LINE__
self     and      redo     elsif    not      __FILE__
alias    END      in       end      when     __ENCODING__
end      until    false    end

 Ruby予約語は。。。

BEGIN    class    ensure   nil      self     when
END      def      false    not      super    while
alias    defined? for      or       then     yield
and      do       if       redo     true     __LINE__
begin    else     in       rescue   undef    __FILE__
break    elsif    module   retry    unless   __ENCODING__
case     end      next     return   until

 すごく似ててすごい(特に __XXX__ 系)

Rubocop issues

 Rubocopのバグ報告を日本語で行える場所。

 参考:GitHub - rubocop-hq/rubocop-jp

RubyGem3,4に関する話

 @hsbt 氏が各Rubyバージョンで正常に動くように苦労して作っていることを知った。お世話になっております。

www.slideshare.net

RubyKaigiの流行り

 RubyKaigiで流行っているっぽいことについて

  • 長いコードを上へスライドアニメーションして「ね?簡単でしょ?」って言う。
  • Rubyをキメると気持ちいい(?)
  • Rubyは何度も死ぬ。C言語も死んだ。

今後の主なスケジュール

  • RubyKaigi2019:4/18-20(木-土)、福岡
  • Ruby2.6.0:クリスマスプレゼント

今後やろうと思っていること

  • Rubyのしくみを読もう
  • 英語セッション聞き取れるレベルまで英語力戻そう

f:id:tkoyama1988:20180603230028j:plain:w400

Rubyのしくみ -Ruby Under a Microscope-

Rubyのしくみ -Ruby Under a Microscope-

RubyでつくるRuby ゼロから学びなおすプログラミング言語入門

RubyでつくるRuby ゼロから学びなおすプログラミング言語入門

その他、資料関連

Rubyソースコード完全解説

github.com