Link and Motivation Developers' Blog

リンクアンドモチベーションの開発者ブログです

型付け合宿!🏄みんなでsigを書いてみた。

はじめに

こんにちは、葛葉(くずば)です。

僕たちのチームではモチベーションクラウドの型検査導入のため、「Sorbet」というgemを導入、運用できるよう日々楽しくワイワイ( ̄▽ ̄)活動しています。

今日は、Sorbet導入の一環で、型宣言する方法の1つであるsigメソッドを書く合宿を開催した話をします。

「Sorbetを導入した理由」や型検査の方法については、以下の記事を参照下さい。

qiita.com

みんなで型を付けた話(通称: sig合宿)

2024/1/18(木)にバックエンドの開発者と一緒に実施しました。

当日のアジェンダ

  • 13:30~ 先輩エンジニアによる型付け講座
  • 14:00~ グループに分かれてsigを書く(参加した方には実装してmasterマージまで行う)
  • 17:00~ 感想戦

先輩エンジニアのsig講座

合宿の冒頭には、先輩エンジニアに実際にsigを書いてもらいながら、 sigメソッドを付ける実演をしてもらい、型宣言する手順を説明してもらいました。

↑バーチャルオフィス上に集まり説明を聞いています。


少し内容を紹介すると、sigメソッドを書く手順は以下のようです。

  1. LSP(VScodeRuby Sorbetという拡張機能)を活用し、サジェストされる型宣言を書く

  2. コードを辿ったり実行しながら、T.untypedになってしまったsigを正しい型に修正する

  3. bin/srb tcコマンドを使用し、静的型検査が通ることを確認する

  4. RSpecを使い動的型検査が通ることを確認する

  5. PRを作成する

sig合宿の結果発表!

コード上には14882個のメソッドがあるので、全てに型が付けばカバレッジ100%となります。

果たしてsig合宿ではどれだけ型宣言が増えたのでしょうか.....

カバレッジが0 → 1 %に増えました!🎉👏(🙀)

メソッドの数でいうと、 58個 → 86個(28個増) でした。

偉大な一歩を歩み始めました...が道のりは遠いです。

感想戦で話したこと

合宿の最後には、sigメソッドを実際に書いてみての感想や気づきを共有しました。 以下のようなコメントをいただきました。

良かった点

  • 型付けの体験ができて、楽しかった
  • sigを書くことで、コードが読みやすくなると感じた
  • 難しいメソッドにsigを書く作業は、メソッド自体の見直しにも繋がった
  • 文字列の数字("1")と整数(1)の認識を間違えているコードに気づくことができた

困った点

  • sigメソッドが初めてで、書き方に苦労した
  • 環境構築やLSP(Language Server Protocol)の設定でつまずいた
  • どのファイルから型を付け始めればいいのか迷った

この合宿を通じて、意図しない型の混入を防げるだけでなく、コードが読みやすくなるなどの副次的なメリットもあることがわかりました。

しかし、sigメソッドの書き方に戸惑ったり、環境設定で困ることがあるなど、改善すべき点も明らかになりました。

これらの経験を踏まえ、sigを書くハードルを可能な限り低くして、より簡単に型宣言ができるような仕組みを整えていきたいと思います。

GPTsを活用した型宣言トレーニン

sig合宿の振り返りからGPTで型宣言のトレーニングができる「Sorbet先生」をつくりました! まだsigを書いたことがない人でも、Sorbet先生を使うことで、sigメソッドの書き方を簡単に理解することができます。

こちらは誰でも使えるので、ぜひ使ってみてください!💁

chat.openai.com

使用方法

まずは、簡単(かんたん)、普通(ふつう)、難しい(むずかしい)、とても難しい(鬼)の4つの難易度から選んで、クイズに挑戦しましょう。

すると、Sorbet先生がクイズを出してくれるので、 回答して採点してもらいましょう。

間違えても大丈夫です! Sorbet先生が優しくヒントをくれるので、それを参考にして再挑戦できます。

おわり

僕は型を付けるプロジェクトに取り組めて、本当に良かったなと思っています。

これまでに

  • どのライブラリを導入するか
  • 導入するにあたってどんな課題があるのか
  • 安定運用するためのベストプラクティスは何か

を考えてきましたが、毎回新たな学びがあり何より楽しいです。

最近エンジニアイベントに参加して、他社のエンジニアと話す機会が多いのですが、 型付けの話をすると興味を持ってくれるエンジニアの方が多く、 バックエンドエンジニアとして自信持って人に話せる領域があることに誇りを感じています。

これからも型付けの推進者として、引き続き頑張っていきたいと思います!