👌
Clineを使い意識低くRailsで型を始める
こんにちは、みてねコールドドクターでエンジニアマネージャーをしている遠藤です。
今日は意識低く、RBSを導入した話をします。
背景
社内で、さまざまな開発プロセスを効率化するためにAI活用を進めています。その際、AIに正しくコードの意図や仕様を理解してもらうことが肝心です。
そこで、Rubyの型定義を行うRBSを導入し、メソッドの引数・戻り値といった情報を明示的に管理できるようにしました。AIに豊富なコンテキストを渡すことで、コード補完やリファクタリングなどの提案精度を高めています。
RBSの導入
RBSを導入することで、以下のようなメリットが得られます。
- 型情報を明確に提供: コードだけではあいまいになりがちな部分(引数や戻り値)をAIと人間に伝えやすい形で提示できる。
- 意図・仕様の可視化: RBSの型定義がドキュメント代わりになるので、チーム開発や大規模プロジェクトで役立つ。
- メンテナンス性の向上: 型チェックを活用して、誤った変更を早期に発見できるようになる。
clineで実行してみる
RBSを導入するにあたって、VSCode向けAIアシスタントのclineを使用しました。clineは以下のような特徴を持っています。
- VSCodeと統合されているため、普段の開発環境から離れずにAIアシスタントを利用できる。
- ファイルの編集からコマンド実行まで多様なタスクをサポートし、Model Context Protocol (MCP) による拡張性もある。
- 変更のスナップショットを取り、ロールバックも可能。
- ユーザー承認必須の操作設計により、意図しない自動変更を防げる。
実際の導入では、下記のようなプロンプトをcline上で実行し、AIにRailsモデル用のrbs-inlineコメントを書かせています。
@/app/models/city.rb このファイルにrbs-inlineのコメントとして型情報を追記したい
rbs-inlineをRailsのモデルで使用する場合のサンプルコードを以下に示します。
# frozen_string_literal: true
class User < ApplicationRecord
# @rbs name: String
# @rbs email: String
# @rbs age: Integer?
# @rbs created_at: Time
# @rbs updated_at: Time
# @rbs posts: Post::ActiveRecord_Relation
has_many :posts
# @rbs name: String
# @rbs return: String
def self.find_by_name(name)
find_by(name: name)
end
# @rbs return: String
def full_name
"#{first_name} #{last_name}"
end
private
# @rbs return: bool
def valid_age?
age.present? && age >= 18
end
end
各メソッドに対しても、型情報を追記してください。その際、メソッドの上に記載してください。
すると、以下のようにAIがコメントを補完してくれました。
class City < ApplicationRecord
# @rbs return: String
def fullname
"#{prefecture.name}#{town_name}"
end
使ってみた補足
- 大抵のモデルはrbs-inlineの情報を持っていないので、きちんとサンプルを渡す必要がありそうです。
- モデルによって精度が異なるため、AIが付与したコメントが正しいかどうか、人間のチェックは必須です。特に、コメントの書く場所を間違えるケースもあるので注意が必要です。
- こちらはあくまで「意識低く」始めているため、プロンプトの最適化は行っていません。もっときちんとプロンプトを書けば、精度は上がると思います。
- rbs-inlineは、ファイルに情報がまとまっているため、AIに対してコンテキストが提供しやすそうでした。
まとめ
RBSを導入して型情報を明示することで、AIに伝えられるコンテキストを増やし、コード補完・リファクタリング支援などの質を高めることができます。また、clineのようなVSCode向けAIアシスタントを併用すると、実装時の作業効率が一段と上がりました。
これからも、みてねコールドドクターでは積極的にAI活用を進めていきますので、興味のある方はぜひ参考にしてみてください。
Discussion