見出し画像

RubyKaigi2018に参加してみて気持ちが高まった話

こんにちは。
COUNTERWORKSでエンジニアをしている疋田(@h1kita)です。
業務では Ruby/Rails, ES6/React などをメインで書いたりしています。

先週、仙台で行われたRubyKaigi2018に業務として参加してきました!


最初、個人的に有給&自費で行こうとしてたのですが、業務として行っていいよと言っていただき参加費や交通費、宿泊費など会社に負担してもらいました!感謝です😭

今回、RubyKaigiは初参加だったのですが、セッションの内容も、Rubyコミュニティのつながりも、運営のスムーズさもすごくよくて、本当楽しかったです。

このブログでは、RubyKaigiで印象に残ったセッションと、RubyKaigiを通じて自分自身の心境にどんな変化があったかについて書いてみたいと思います!

どんな人がこの記事を書いたか

本題に入る前に、自分についてちょっと紹介しますね。

前職・現職ともにRubyを使っていてRuby経験は4年くらいです。その他にもJavaやReactNativeでAndroidアプリ作ったり、C#やVB使って.NETやったり、PHPでのWebアプリ開発経験などもあります。
ですが、一番多いのはRailsを使ったWebアプリ開発で、現職になってからはずっとRailsでやってきてます。
Rubyを好きになったのは、2年半くらい前に「メタプログラミングRuby」を読んだことがきっかけで、そこから興味を持って勉強を始めて、Rubyの自由さと生産性の高さ、表現力の豊かさに惹かれて好きになりました。Rubyは書いてるのが楽しい!

昨年もRubyKaigiには行ってみたいと思ってたのですが、場所的に遠くて断念しました。
なので、今年こそはと思っていて、何も考えずにすぐに申し込みました!

そんな感じで、これまでRubyを利用する側としてRuby/RailsでWebアプリを作ってきたエンジニアがRubyKaigiに参加してみてってのを書いていきたいと思います。

印象的だったセッション

まずは、印象に残ったセッションをいくつかご紹介します。

Hijacking Ruby Syntax in Ruby

まずは、 @joker1007 さん, @tagomoris さんによる「Hijacking Ruby Syntax in Ruby」です。
この発表ではお二人が自作したGemを例にしながら、BindingやTracePoint, RefinementsやいろんなMethodHookなどを駆使した強力なメタプログラミング機構についてお話されました。

Binding#local_valiable_set を使うと任意の場所のコンテキストの既存の変数を上書きでる。TracePoint を使うと、あらゆるイベントにhookをかけて、イベント発生元の Binding オブジェクトと共に取得できるってのはこれまで知らなくて、これかなりいろいろできそうですごい面白かったです。

普段業務などメタプロを使うことはないので、なにかしらGemを作りたい気持ちになりました。Rubyを使い倒して思いっきり楽しんでる感じがまたよかったです。

メタプログラミングを駆使しながらRubyをHackするのはすごく楽しい!でもデバッグはすごく大変。「覚悟は出来てるか?俺は出来ている!」
でかっこよく締めてくれました。

以下、コードも見てみるといろいろ参考になって面白いです!

joker1007/overrider
https://github.com/joker1007/overrider
joker1007/finalist
https://github.com/joker1007/finalist
joker1007/abstriker
https://github.com/joker1007/abstriker
tagomoris/with_resources
https://github.com/tagomoris/with_resources
tagomoris/deferral
https://github.com/tagomoris/deferral

RubyGems 3 & 4

@hsbt さんからは、僕たちの生活を支えるRubyGemsの話で「RubyGems 3 & 4」でした!
このセッションでは、RubyGems2.7と今後のRubyGems3, 4の計画についてお話されました。

RubyGems2.7はRuby1.8もサポートしててRubyのバージョンとの兼ね合いやbundlerとの兼ね合いがあって、RubyGemsの開発すごい大変そうだと思いました。
RubyGemsはRubyを使う人達にとってのインフラなので、何を Depelecated にするかを慎重に判断する必要があって、そのため使っているのが以下Gemだそうです。

akr/gem-codesearch
rubygems.orgのミラーをローカルに構築して全文検索します
https://github.com/akr/gem-codesearch

akr/all-ruby
どのバージョンでRubyGemsのAPIが使われているかを確認できます
https://github.com/akr/all-ruby

こういったクリティカルな部分の開発の話はあまり聞けないので参考になりました!

Architecture of hanami applications

@anton_davydov さんからは、クリーンアーキテクチャ&モノリスファーストを掲げるHanamiのお話で「Architecture of hanami applications」でした。

Webアプリのコードを分離してテスタブルなものとして構築する話や、DI Contaierを利用したInteractorのオブジェクト管理、QueryObjectじゃなくてRepositoriを使う話、アプリケーション単位でのビジネスロジックの共通化する話などがあり、Hanamiはそういった思想で作られてるって話でした。(だったと思います。英語自信ない...)

ユースケース毎に整理されたビジネスロジックとドメインモデルがアプリケーションからちゃんと分離できていれば、アプリケーションにどんなものがきたとしても基本的には共通化できるし、ドメインはアプリケーションの変化による影響を受けなくできる。
それをやっていくとイベント駆動とかも適応できそうだし、やっぱりHanamiの思想は好きだなーと思いました。

Railsでやる場合にも考え方として大いに参考になります!

My way with Ruby

@ktou さんによるKeynoteで「My way with Ruby」です。
このKeynoteでは @ktou さんが実際に行っている活動の「Rubyでできることを増やす」「ライブラリーをメンテナンスする」についてやっていることをお話されました。

まず、メンテナンスしているライブラリ 130 くらいってやばい...。

基本的に自分が欲しいものを作っていて、「Rubyでできることを増やそう」っていう思想もあったため、RubyでいろいろなOSSを作っていたらメンテナンスしている数がこうなったみたいです。

こういった必要なものを作って、それをRubyのエコシステムの一部として公開していけるような活動はしたいなーと思えるKeynoteでした。

あと groonga は知らなかったですが、何かで使ってみたいです!

Ruby Programming with Type Checking

@soutaro さんによるsteepというRubyの型チェックを行うGemのお話です。
デモを見せてくれながら、steepをどのうように使うかを説明してくれました。
soutaro/steep: Gradual Typing for Ruby
https://github.com/soutaro/steep

steepを使うと、別途 .rbi ファイルを作成して、 型を定義したり、そのままのRubyファイルにアノテーションコメントで型チェックをスキップするように書くことができるみたいです。

class Person
  @name: String
  @contacts: Array<Email | Phone>

  def initialize: (name: String) -> any
  def name: -> String
  def contacts: -> Array<Email | Phone>
  def guess_country: -> (String | nil)
end
class Personattr_reader :name
  # @dynamic name
  attr_reader :name
end

Ruby3.0で型がどうなっていくかも含めて注目していきたいです!普通に実用レベルな気がしました。

Type Profiler: An analysis to guess type signatures

@mametter さんによる「Type Profiler: An analysis to guess type signatures」という話でTypeProfilerの話です。

まず、Ruby2.6でやったことの紹介で endless rangeの紹介でした。

(1..) #が使えるように!
ary=['a', 'b', 'c']

# こう書いてたのが
ary[1..-1]
ary.drop(1)

# こうかけるよ!
ary[1..]```rb

# こう書いてたのが
i = 1 
loop{  i += 1 }
(1..Float::INFINITY).each{ }
# こうかけるよ!
(1..).each{ }

次にRuby3.0で検討中の型の仕組みについてです。

現状一番近そうなのが steep みたいです。型をコードベースに書きたくないし。でも、すべてに型注釈を入れなくちゃいけないの大変。型は今後プログラムで生成される未来ありそう。(これはMatzのKeynoteでもありました)それを管理するためにTypeDBつかうのどうかな。そして、TypeDBに保存する情報をどう生成するかについてはTypeProfilerを使う。TypeProfilerは既存のRubyコードから型情報を抽出する(いろいろな条件から考える)!って流れみたいです。

いま、そのTypeProfilerを使えるようにするためにいろいろとやっている最中でどの方法も難しさはあるみたいで、今後どうなっていくかがすごく楽しみです!

その他

スポンサー企業のノベルティ

スポンサー企業さんがいろいろなノベルティを配布していました。ヨーヨーとかプランニングポーカーとか!お弁当や朝食も含めていろいろな企業がスポンサーとして支援してくれていました。
いろいろな有名企業がRubyを使っていて、そういった企業がRubyコミュニティへの感謝や今後の期待も込めてサポートしていると考えるとRubyコミュニティの強さを感じました。

すごくいっぱいノベルティもらったw

考え方が変わった

RubyKaigiには初参加でしたが、いろいろな収穫があって本当に参加してよかったと思えるものでした!自分自身の考え方としてRubyKaigi参加前後で変わったことをいくつか紹介します。

Rubyの仕組みに興味を持った

これまでRubyの字句解析や構文解析、ASTやYARV、コンパイラの仕組みなどあまり興味をもって勉強したことがありませんでした。でも、RubyKaigiで話を聞いているうちにそのあたりの仕組みも知りたい気持ちが強くなりました。(正直JITコンパイラ周りの話とかはよく分からなかったので...)今は寝かせておいた「Rubyのしくみ」を読んでます。2年前とかは全然読めなかったのに今は楽しく読めてます!

作って公開しようと思った

これまで、自分で作った何かを公開するってことはしてきませんでした。でも、いろんなOSS活動をしている方の話を聞いて、ちゃんと作って公開する、そしてフィードバックをもらってまた改善するって流れをやってみたいなーと感じました。@koicさんの話にもあった、OSSコミュニティ同士で横断的な影響があったとかもすごく面白いと思います。
あと、Rubyのエコシステムの中でみんなに使われるようなライブラリ作るのなんか純粋にかっこいいなと。

Rubyをもっと好きになった

「Rubyの今の一番の強みは聞きたいときに聞ける人が近くにいること」とMatzもおっしゃってましたがRubyのよさはコミュニティも含めてなんだなと思いました。また、みんなすごく楽しそうに発表にされていてやっぱりRubyは楽しいよなーと思いました!

最後に

関係者の皆様、スポンサー企業のみなさま本当にありがとうございました。そして、業務として参加させてくれたCOUNTERWORKSに感謝です!!
本当楽しいRubyKaigiでした!

来年も参加したいです!

おまけ

COUNTERWORKSではRubyが好きなエンジニアを募集しています。
ただただRubyについて熱く語りたい、Railsの設計について意見交換したいなどの方も歓迎なので、ぜひ一度カジュアルに話しましょう!

Twitterとかで直接連絡くれても大丈夫です!(@h1kita

この記事が気に入ったらサポートをしてみませんか?