👌

Clineを使い意識低くRailsで型を始める

2025/01/29に公開

こんにちは、みてねコールドドクターでエンジニアマネージャーをしている遠藤です。
今日は意識低く、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