mcpField
R
ruby-coder

ruby-coder

github.com/majesticlabs-dev開発5047 回インストール7 週間前に更新
リポジトリ

ruby-coder について

ruby-coder は、Ruby 開発者向けに Ruby 3.x の記法とコード構成の指針を示すスキルです。クラスやメソッドの小規模化、引数の制限、スレッドセーフ性を重視し、例外の理由も記録します。

主な機能

  1. 01Ruby 3.x の記法ガイド
  2. 02Sandi Metz の 4 つの開発ルール
  3. 03共有状態のスレッドセーフなパターン
  4. 04冪等な操作の指針
  5. 05リファクタリングの基準と例外

活用シーン

  1. 01Ruby コード構成の確認
  2. 02大きすぎるクラスやメソッドのリファクタリング
  3. 03安全に繰り返せる操作の設計

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/majesticlabs-dev/majestic-marketplace --skill ruby-coder

インストール後、Claude Code で/ruby-coderを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
ruby-style-conventions.md
ruby-tips.md
sandi-metz.md

詳細

Ruby コーダー

Ruby 3.x のモダン構文

キー名が変数名と一致する場合は、ハッシュの省略記法を使用します。

age = 49
name = "David"
user = { name:, age: }

一般的な命名規則、セマンティックメソッド、Enumerable のパターンについては、references/ruby-style-conventions.md を参照してください。

Sandi Metz の開発者向け 4 つのルール

これらのルールでは、コード品質を維持するために厳格な制限を設けています。ルールに違反する場合は、明確な正当化が必要です。

ルール 1:クラスは 100 行を超えてはならない

制限:クラスごとのコードは最大 100 行です。

確認方法:クラスがこの制限を超えた場合、補助的な関心事を新しいクラスに切り出します。

# When exceeding 100 lines, extract secondary concerns:
class UserProfilePresenter  # Presentation logic
class UserProfileValidator  # Validation logic
class UserProfileNotifier   # Notification logic

例外:単一責任の原則(SRP)に基づく正当な理由が必要です。

ルール 2:メソッドは 5 行を超えてはならない

制限:メソッドは最大 5 行です。各 if/else 分岐も行数に含まれます。

# Good - 5 lines or fewer
def process_order
  validate_order
  calculate_totals
  apply_discounts
  finalize_payment
end

# Avoid - extract when too long
def process_order
  return unless items.any?
  return unless valid_address?
  self.subtotal = items.sum(&:price)
  self.tax = subtotal * tax_rate
  self.total = subtotal + tax
  charge_customer
  send_confirmation
end

例外:ペアでの承認が必要です(ルール 0:合意のうえでルールに違反します)。

ルール 3:パラメーターは 4 つまでにする

制限:メソッドのパラメーターは最大 4 つです。それ以上のデータが必要な場合は、パラメーターオブジェクトまたはハッシュを使用します。

# Parameter object when data is related
def create_post(post_params)
  Post.create(user: post_params.user, title: post_params.title, content: post_params.content)
end

例外:link_to や form_for などの Rails ビュー ヘルパーは対象外です。

ルール 4:コントローラーでインスタンス化するオブジェクトは 1 つまでにする

制限:コントローラーでインスタンス化するオブジェクトは 1 つだけにし、ほかのオブジェクトはファサードパターンを介して取得します。

# Good - single object via facade
class DashboardController < ApplicationController
  def show
    @dashboard = DashboardFacade.new(current_user)
  end
end

# Avoid - multiple instance variables
class DashboardController < ApplicationController
  def show
    @user = current_user
    @posts = @user.posts.recent
    @notifications = @user.notifications.unread
  end
end
  • 未使用のインスタンス変数には、アンダースコアを接頭辞として付けます:@_calculation
  • ビューからコラボレーターに直接アクセスするのは避けます:@user.profile.avatar → ファサードメソッドを使用します

コード品質基準

スレッドセーフ

共有された可変状態には Mutex を使用します。

class Configuration
  @instance_mutex = Mutex.new

  def self.instance
    return @instance if @instance
    @instance_mutex.synchronize { @instance ||= new }
  end
end
冪等な操作

安全に繰り返し実行できる操作を設計します。

def activate_user
  return if user.active?
  user.update(active: true)
  send_activation_email unless email_sent?
end

リファクタリングのきっかけ

次の場合はクラスを切り出します:

  • クラスが 100 行を超える(Sandi Metz のルール 1)
  • クラスが複数の責務を持つ
  • クラス名に "And" または "Or" が含まれる

次の場合はメソッドを切り出します:

  • メソッドが 5 行を超える(Sandi Metz のルール 2)
  • 条件分岐が複雑である
  • ネストしたループや条件分岐がある
  • コメントでコードの動作を説明している(コードは自己説明的であるべきです)

次の場合はパラメーターオブジェクトを使用します:

  • メソッドに 4 つを超えるパラメーターが必要である(Sandi Metz のルール 3)
  • 関連するパラメーターが常に一緒に渡される
  • パラメーターのリストが徐々に増えている

次の場合はファサードを作成します:

  • コントローラーで複数のオブジェクトが必要である(Sandi Metz のルール 4)
  • ビューからネストしたコラボレーターにアクセスしている
  • 複雑なデータ集約が必要である

ルールに違反する場合

Sandi Metz の「ルール 0」:4 つのルールに違反する場合は、ペアでの承認を得るか、明確な正当化を行います。

ルール有効な例外
100 行SRP に基づく明確な正当化が必要
5 行複雑だが、これ以上分割できないアルゴリズム
4 パラメーターRails ビューヘルパーは対象外
1 オブジェクトファサードを使わないシンプルなビュー

例外にはすべて、明確な理由をコードコメントに記録します。

参考資料

  • references/sandi-metz.md - コードの不吉な臭い、リファクタリング、テストの原則
  • references/ruby-tips.md - 型変換、ハッシュのパターン、Proc の合成、Refinements
  • references/ruby-style-conventions.md - 命名、セマンティックメソッド、Enumerable、合成

コメント