こんにちは。転職ドラフトでエンジニアをしている verdy_266 です。
今回は、 RubyKaigi に参加した結果、 OSS にコントリビュートできたよという自慢をさせてください。
irb に redo 機能を実装しました
まずは、今回コントリビュートした内容をご紹介します。
RubyKaigi で以下の発表を聞いたのですが、その中で Future Works として挙げられていたもののひとつを実装しました。
irb を実行した際に、入力内容を表示したり、カーソル移動を制御したりしてくれる Reline というライブラリがあります。
今回はこの Reline に、 redo (やり直し)機能を実装しました。
実装の簡単な解説
こちらがその PR です。
undo のための入力履歴を保持していた @past_lines
というインスタンス変数があった(今回の PR で @input_lines
に改名)のですが、この仕様を微調整して、 redo にも対応できるようにしました。 undo コマンドが control + _
なのですが、 redo コマンドは control + Meta + _
としました。
普通の入力と undo と redo の場合でそれぞれどういう動きになるべきかを整理して、適切にインスタンス変数を更新した形です。
undo を実装した PRも参考にしながら、実装しました。
3回の RubyKaigi が、俺を強くしてくれた
さてここからは、上記の PR に至るまでの過程を振り返っていこうと思います。
1回目: RubyKaigi 2022 @三重
まず早速宣伝ですが、転職ドラフトは3年連続で RubyKaigi の Platinum Sponsor をしています。1人の Rubyist であると同時に、ブーススタッフとして RubyKaigi に参加することができるのは、とてもありがたいことだと思っています。
コロナ禍でしばらくオフラインでのカンファレンスが開催されていなかった中、 RubyKaigi が再開するとのことで、真っ先に行きたいと申し出ました。
そして参加した RubyKaigi ですが……セッションの内容は本当に何もわからなかったです……笑 弊社から RubyKaigi に参加したエンジニアも、「日本語で聞いても何もわからないのに、英語で聞いたら余計わからないに決まっている」と言っていて、ちょっと安心したのを覚えています。
この年は TRICK 2022 の紹介があって、こんな世界があるのかと衝撃を受けたのも記憶に新しいです。
弊社エンジニアの振り返り会を記事にまとめていますので、ぜひそちらもご覧ください。
2回目: RubyKaigi 2023 @松本
この年も転職ドラフトが Platinum Sponsor をするとのことで、行かせてもらうことにしました。
ただ、昨年の過ちを繰り返してしまってはいけないと、予習コンテンツや各社のイベント情報を積極的に収集していました。社外の Rubyist が幹事をしてくださっているシェアハウスに宿泊するなどして知り合いもたくさんできましたし、予習コンテンツに参加したことでどんな内容について話しているのかくらいはわかってきたのがこの年です。
この年も、弊社エンジニアで振り返り会を実施しました。
3回目: RubyKaigi 2024 @沖縄
そして迎えた RubyKaigi 2024 。各セッションがどういう分野について話しているのかは徐々にわかってきたので、今年は自分にもコントリビュートチャンスがありそうな発表を優先的に聞いていました。
初っ端のキーノートでは超絶技巧プログラミングの技を見せつけられ、とても興奮しましたね。 TRICK 2025 の開催が決まったのもアツい。
弊社エンジニアでの振り返り会も記事にする予定ですので、しばらくお待ちください。
RubyKaigi との関わり方
このあたりでちょっと脱線して、3回 RubyKaigi に参加した僕なりに、 RubyKaigi との関わり方について感じたことを書いておこうと思います。
発表内容は、正直難しい
RubyKaigi は Ruby 「で」開発している人のカンファレンスではなく、 Ruby 「を」開発している人のカンファレンスなので、発表内容は正直難しいです。普段の業務に即活かせることを求めて参加すると、おそらく実りは少ないでしょう。
「発表内容が理解できて、発表者と議論できて当たり前だよね」とか言われると、心が折れるタイプのカンファレンスでもあると思います。少なくとも僕は、発表を聞いてパッとわかることはほとんどなくて、いろいろな場で実装を解読して初めてわかることも多かったと感じています。
その一方で、 "「わからない」けど「気にしない」" とオーガナイザーが発信してくださっているのは、とてもありがたいことだと思います。わからないことを楽しんで、いつか自分の先にこんな道が広がっているのかもしれないと妄想することで、モチベーションを喚起してくれるでしょう。
こちらは、 RubyKaigi オーガナイザーの松田さんが、RubyKaigi 2024事前勉強会で登壇した際のスライドです。22ページに "「わからない」けど「気にしない」" との言葉が見られます。
RubyKaigi へのコントリビュート
一方で、そんな RubyKaigi にも、比較的手軽にコントリビュートすることができると思っています。それは、各種媒体での情報発信です。
RubyKaigi に参加することそのものがコントリビュートとも言えそうですし、企業ブースを出したり、イベントに参加して友達を作ったり、 #rubykaigi でツイートしたりする時点で、 Ruby コミュニティの活性化という面では十分コントリビュートと言えるのではないでしょうか。このブログも、その一環として書いています。
ただ、それだけでは物足りなくなってくるのが人情だとも思います。ということで、頑張ってコードでコントリビュートしてみたのが今回の RubyKaigi でした。
コントリビュートするにあたって幸運だったこと
開発合宿という場があったこと
弊社では、 RubyKaigi に参加したメンバーの一部で、翌日と翌々日に開発合宿を実施しました。最終日は成果発表会とチェックアウトでほとんど終わってしまったので、実質的な開発期間は RubyKaigi 翌日の1日のみでしたが、 RubyKaigi で高まったモチベーションをそのまま活かせるのはとてもよかったと思います。(これは来年流行ってしまうなあ……)
開発合宿で開発する内容は各自で自由に決めて良いとしていて、 Ruby に関係ない内容について開発している人もいました。そのうち開発合宿の成果のいくつかもこのブログでご紹介できることでしょう。
すでに類似実装がマージされていたこと
上にも書きましたが、すでに undo の実装がマージされていたので、取り掛かるハードルが高くありませんでした。変更ファイル数も4で収まっていて、実装の解読もしやすかったです。
実装が Ruby で完結していたこと
これもかなりありがたい点ですね。普段 Ruby をメインに触っているので、慣れた言語で開発できるのは嬉しかったです。
ruby-jp slack でメンテナに(日本語で)質問できたこと
irb 関連の話題を扱う slack チャンネルが存在しており、そこで環境構築から実装方法までたくさん相談に乗っていただきました。
特に、一度提出してみた PR に対し、実装方法を考え直してみては? とのコメントをいただいた際、アドバイスをくださって非常に助かったのを覚えています。 ima1zumi さん、 tompng さん、ありがとうございました。
おわりに
irb コマンドを実行すると動く Reline というレポジトリにコントリビュートしたという自慢をさせていただきました。次のマイナーバージョンのリリースで取り込まれると思うので、ぜひ control + Meta + _
コマンドで遊んでみてください!