moai-lang-ruby について
Ruby 3.3以降とRails 7.2を扱う、Rubyアプリの開発・テスト向けスキルです。モダンなRubyの書き方に加え、Rails、Hotwire、ActiveRecord、Sidekiq、RSpecの実践パターンをまとめています。
主な機能
- 01Ruby 3.3の言語パターン
- 02Rails 7.2のアプリパターン
- 03Hotwire TurboとStimulus
- 04ActiveRecordのモデルとクエリ
- 05RSpecのテストとファクトリー
- 06Sidekiqのバックグラウンドジョブ
活用シーン
- 01Railsのコントローラーとモデルの構築
- 02Turboによる画面更新の追加
- 03RubyコードのRSpecテスト作成
- 04バックグラウンドジョブのワークフロー設定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ modu-ai/ moai-adk --skill moai-lang-rubyインストール後、Claude Code で/moai-lang-rubyを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
modules/advanced-patterns.mdtesting-patterns.mdreferences/examples.mdreference.md詳細
クイックリファレンス(30秒)
Ruby 3.3 以降の開発スペシャリスト — Rails 7.2、ActiveRecord、Hotwire/Turbo、RSpec、最新の Ruby パターン。
自動トリガー:拡張子が .rb のファイル、Gemfile、Rakefile、config.ru、Rails または Ruby に関する議論
主な機能:
- Ruby 3.3 の機能:YJIT の本番環境対応、パターンマッチング、Data クラス、無限メソッド
- Web フレームワーク:Turbo、Stimulus、ActiveRecord を備えた Rails 7.2
- フロントエンド:SPA のような操作性を実現する Turbo と Stimulus を含む Hotwire
- テスト:ファクトリー、リクエストスペック、システムスペックを使用する RSpec
- バックグラウンドジョブ:ActiveJob と Sidekiq
- パッケージ管理:Gemfile を使用する Bundler
- コード品質:Rails cop を備えた RuboCop
- データベース:マイグレーション、関連付け、スコープを備えた ActiveRecord
クイックパターン
Rails コントローラーパターン:
ApplicationController を継承する UsersController を作成します。show、edit、update、destroy アクションでのみ呼び出される set_user の before_action を追加します。index メソッドを定義し、User.all をインスタンス変数に代入します。user_params を使って新しい User を作成する create メソッドを定義します。respond_to ブロックを使用し、format.html では成功時にリダイレクトし、それ以外の場合は unprocessable_entity ステータスで new をレンダリングします。また、Turbo のレスポンスには format.turbo_stream を使用します。params の id で検索する set_user の private メソッドを追加します。user を必須とし、name と email を許可する user_params メソッドを追加します。
ActiveRecord モデルパターン:
ApplicationRecord を継承する User モデルを作成します。dependent destroy を設定した posts の has_many と、dependent destroy を設定した profile の has_one を定義します。email に対し、presence、uniqueness、および URI::MailTo::EMAIL_REGEXP を使用した format のバリデーションを追加します。name に対し、presence と最小 2、最大 100 の length のバリデーションを追加します。active が true のレコードを絞り込む active スコープを定義します。created_at の降順で並べ替える recent スコープを定義します。first_name と last_name をスペースで結合して空白を除去した値を返す full_name メソッドを作成します。
RSpec テストパターン:
User モデルの type を指定して RSpec.describe を作成します。describe の validations ブロック内に、email に対する validate_presence_of と validate_uniqueness_of の期待値を追加します。full_name の describe ブロック内で let を使用し、first_name が John、last_name が Doe の user を作成します。user.full_name が John Doe と等しいことを期待する it ブロックを追加します。
実装ガイド(5分)
Ruby 3.3 の新機能
YJIT の本番環境対応:
YJIT は Ruby 3.3 でデフォルトで有効になり、Rails アプリケーションのパフォーマンスを 15~20 パーセント向上させます。ruby を yjit フラグ付きで実行するか、環境変数 RUBY_YJIT_ENABLE に 1 を設定して有効にします。RubyVM::YJIT.enabled? メソッドを呼び出して状態を確認します。
case/in によるパターンマッチング:
response パラメーターを受け取る process_response メソッドを作成します。パターンマッチングには response と in を使った case を使用します。status が ok の場合は data にマッチさせ、data 変数を取り出して成功メッセージを puts します。status が error の場合は message にマッチさせ、msg 変数を取り出します。pending または processing かを確認するガード条件付きで status にマッチさせます。不明なレスポンスには else を使用します。
不変の構造体向け Data クラス:
name と email のシンボルを指定して Data.define で User を作成します。ブロックを追加して、name を含む挨拶メッセージを返す greeting メソッドを定義します。キーワード引数で User インスタンスを作成します。name プロパティにアクセスし、greeting メソッドを呼び出します。
無限メソッド定義:
Calculator クラスを作成し、単一の式からなるメソッドに等号構文を使用して add、multiply、positive? メソッドを定義します。
Rails 7.2 のパターン
Gemfile でのアプリケーション設定:
ソースを rubygems.org に設定します。rails のバージョン制約として 7.2、pg は 1.5、puma は 6.0 以降を指定し、turbo-rails、stimulus-rails、sidekiq は 7.0 を追加します。development と test のグループには、rspec-rails 7.0、factory_bot_rails、faker、require false を指定した rubocop-rails を追加します。test グループには capybara と shoulda-matchers を追加します。
Concern を使ったモデル:
ActiveSupport::Concern を拡張する Sluggable モジュールを作成します。included ブロックに、create 時に generate_slug を呼び出す before_validation と、slug の presence および uniqueness を検証する処理を追加します。slug を返す to_param を定義します。title が存在し、slug が空の場合に、title をパラメーター化して slug に設定する private メソッド generate_slug を追加します。Sluggable を include する Post モデルを作成し、belongs_to user、dependent destroy を指定した has_many comments、has_many_attached images を追加します。バリデーションと published スコープも追加します。
サービスオブジェクトパターン:
user_params を受け取る initialize を持つ UserRegistrationService を作成します。User を作成し、ActiveRecord::Base.transaction を使ってユーザーを保存し、プロフィールを作成してウェルカムメールを送信する call メソッドを定義します。success が true、user を含む Result を返します。RecordInvalid を rescue し、success が false、errors を含む Result を返します。create_profile と send_welcome_email の private メソッドを追加します。success、user、errors を持つ Data.define として Result を定義し、success? と failure? の述語メソッドを追加します。
Hotwire Turbo と Stimulus
Turbo Frames パターン:
index ビューで、posts を id とする turbo_frame_tag を使い、posts を反復処理してそれぞれを描画します。post パーシャルでは、post の dom_id を使った turbo_frame_tag を使用し、h2 のリンクと省略表示した内容の段落を含む article を配置します。
Turbo Streams パターン:
コントローラーの create アクションで、current_user.posts から post を構築します。respond_to を使い、format.turbo_stream と、保存の成功に応じてリダイレクトまたは描画する format.html を指定します。create.turbo_stream.erb ビューでは、post を使った turbo_stream.prepend で posts に追加し、new_post フォームのパーシャルを使った turbo_stream.update でフォームを更新します。
Stimulus コントローラーパターン:
JavaScript のコントローラーファイルで、hotwired/stimulus から Controller をインポートします。input と submit の配列を static targets に指定し、Controller を拡張するデフォルトクラスをエクスポートします。validate を呼び出す connect メソッドを定義します。すべての input ターゲットに値があるかを確認し、それに応じて submit ターゲットの disabled を設定する validate メソッドを定義します。
RSpec テストの基本
Factory Bot のパターン:
ファクトリーファイルで、email の sequence、name 用の Faker::Name.name、password 用の password123 を指定した user ファクトリーを定義します。role を admin シンボルに設定する admin trait を追加します。デフォルト値を 3 とする transient な posts_count を持つ with_posts trait を追加し、after create コールバックでユーザーの post を create_list で作成します。
高度な実装(10 分以上)
以下を含む包括的な内容については:
- Docker と Kubernetes の本番環境デプロイパターン
- ポリモーフィック、STI、クエリーオブジェクトなどの高度な ActiveRecord パターン
- Action Cable のリアルタイム機能
- パフォーマンス最適化手法
- セキュリティのベストプラクティス
- CI/CD 統合パターン
- RSpec テストの完全なパターン
以下を参照してください:
- 本番環境のパターンと高度な機能については modules/advanced-patterns.md
- RSpec テストの完全なガイドについては modules/testing-patterns.md
Context7 ライブラリのマッピング
- Ruby on Rails のウェブフレームワークについては rails/rails
- RSpec テストフレームワークについては rspec/rspec
- Rails 向け Turbo については hotwired/turbo-rails
- Rails 向け Stimulus については hotwired/stimulus-rails
- バックグラウンドジョブ処理については sidekiq/sidekiq
- Ruby のスタイルガイド適用については rubocop/rubocop
- テストデータのファクトリーについては thoughtbot/factory_bot
相性の良いツール
- REST API とウェブアプリケーションアーキテクチャについては moai-domain-backend
- SQL パターンと ActiveRecord の最適化については moai-domain-database
- DDD とテスト戦略については moai-workflow-testing
- AI を活用したデバッグについては moai-essentials-debug
- TRUST 5 の品質原則については moai-foundation-quality
トラブルシューティング
よくある問題:
Ruby のバージョン確認:
バージョンフラグを指定して ruby を実行し、バージョンが 3.3 以降であることを確認します。ruby -e コマンドで puts RubyVM::YJIT.enabled? を実行して、YJIT の状態を確認します。
Rails のバージョン確認:
バージョンフラグを指定して rails を実行し、バージョンが 7.2 以降であることを確認します。bundle exec rails about を実行すると、環境の詳細情報を確認できます。
データベース接続の問題:
- config/database.yml の設定を確認します
- PostgreSQL または MySQL のサービスが実行中であることを確認します
- データベースが存在しない場合は、rails db:create を実行します
アセットパイプラインの問題:
rails assets:precompile を実行してアセットをコンパイルします。コンパイル済みアセットを消去するには、rails assets:clobber を実行します。
RSpec のセットアップに関する問題:
初期セットアップでは rails generate rspec:install を実行します。単一のスペックを実行するには、特定のファイルパスを指定して bundle exec rspec を実行します。詳細な出力を表示するには、bundle exec rspec に format documentation を指定して実行します。
Turbo と Stimulus の問題:
JavaScript をセットアップするには、rails javascript:install:esbuild を実行します。Turbo をインストールするには、rails turbo:install を実行します。
最終更新日:2026-01-11 ステータス:アクティブ(v1.1.0)