mcpField
A
active-storage-setup

active-storage-setup

github.com/thibautbaissac開発67156 回インストール21 週間前に更新
リポジトリ

active-storage-setup について

Rails 8 開発者向けの Active Storage 設定スキルです。Rails プロジェクトのファイル処理に必要なアップロード、ストレージ、添付、画像バリアント、テストを扱います。

主な機能

  1. 01クラウドまたはローカルストレージの設定
  2. 02単一または複数の添付ファイル追加
  3. 03画像バリアントの定義
  4. 04アップロード、ダウンロード、削除の処理
  5. 05添付ファイルのテストとバリデーション

活用シーン

  1. 01モデルへのアバターや写真の添付
  2. 02ローカルまたはクラウドストレージの設定
  3. 03画像サムネイルやプレビューの作成
  4. 04アップロードと添付のバリデーションのテスト

インストール

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

$npx skills add https://github.com/thibautbaissac/rails_ai_agents --skill active-storage-setup

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

同梱ファイル

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

references/
controller-and-service.md
testing.md
validations.md
variants-and-views.md

詳細

Rails 8 の Active Storage セットアップ

概要

Active Storage は Rails でのファイルアップロードを処理します。

  • クラウドストレージ(S3、GCS、Azure)またはローカルディスク
  • 画像バリアント(サムネイル、サイズ変更)
  • ブラウザーからのダイレクトアップロード
  • ポリモーフィックな添付ファイル

クイックスタート

# Install Active Storage (if not already)
bin/rails active_storage:install
bin/rails db:migrate

# Add image processing
bundle add image_processing

設定

ストレージサービス
# config/storage.yml
local:
  service: Disk
  root: <%= Rails.root.join("storage") %>

test:
  service: Disk
  root: <%= Rails.root.join("tmp/storage") %>

amazon:
  service: S3
  access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
  secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
  region: eu-west-1
  bucket: <%= Rails.application.credentials.dig(:aws, :bucket) %>

google:
  service: GCS
  credentials: <%= Rails.root.join("config/gcs-credentials.json") %>
  project: my-project
  bucket: my-bucket
環境設定
# config/environments/development.rb
config.active_storage.service = :local

# config/environments/production.rb
config.active_storage.service = :amazon

モデルへの添付

単一の添付ファイル
# app/models/user.rb
class User < ApplicationRecord
  has_one_attached :avatar

  # With variant defaults
  has_one_attached :avatar do |attachable|
    attachable.variant :thumb, resize_to_limit: [100, 100]
    attachable.variant :medium, resize_to_limit: [300, 300]
  end
end
複数の添付ファイル
# app/models/event.rb
class Event < ApplicationRecord
  has_many_attached :photos

  has_many_attached :documents do |attachable|
    attachable.variant :preview, resize_to_limit: [200, 200]
  end
end

TDD ワークフロー

Active Storage Progress:
- [ ] Step 1: Add attachment to model
- [ ] Step 2: Write model spec for attachment
- [ ] Step 3: Add validations (type, size)
- [ ] Step 4: Create upload form
- [ ] Step 5: Handle in controller
- [ ] Step 6: Display in views
- [ ] Step 7: Test upload flow

添付ファイルのテスト

モデルの spec、ファクトリーの trait、リクエスト spec については、testing.md を参照してください。

主なパターン:

  • リクエスト spec では fixture_file_upload を使用します
  • after(:build) を使って :with_avatar ファクトリー trait を定義します
  • モデルの spec では be_attached とバリアントの存在をテストします

バリデーション

宣言的なバリデーションには active_storage_validations gem を使用するか、手動で validate メソッドを記述します。両方の方法については、validations.md を参照してください。

# Gemfile
gem 'active_storage_validations'

画像バリアント

モデルの添付ファイルに対して、resize_to_fill、resize_to_limit、または resize_to_cover を使って名前付きバリアントを定義します。バリアントの操作、ビューのヘルパー、フォームの例については、variants-and-views.md を参照してください。

コントローラーとサービスでの処理

  • 単一のアップロードでは :avatar、複数のアップロードでは photos: [] を許可します
  • 添付ファイルを削除するには purge を使用します。必要に応じて Turbo Stream のレスポンスを返すこともできます
  • ダウンロードには rails_blob_path または send_data を使用します

コントローラーの完全な例、サービスメソッド、ダイレクトアップロードのセットアップ、パフォーマンスのヒントについては、controller-and-service.md を参照してください。

チェックリスト

  • Active Storage をインストールし、マイグレーションを実行する
  • ストレージサービスを設定する
  • 画像処理 gem を追加する(バリアントを使用する場合)
  • モデルに添付ファイルを追加する
  • バリデーションを追加する(種類、サイズ)
  • バリアントを定義する
  • コントローラーで添付ファイルのパラメーターを許可する
  • フォームでファイルアップロードを処理する
  • 添付ファイルのテストを作成する
  • ダイレクトアップロードを設定する(必要な場合)

参考資料

  • testing.md - モデルの spec、ファクトリーの trait、リクエスト spec
  • validations.md - gem を使ったバリデーションと手動バリデーションの例
  • variants-and-views.md - バリアントの定義、ビューのヘルパー、アップロードフォーム
  • controller-and-service.md - コントローラー、サービスメソッド、ダイレクトアップロード、パフォーマンス

コメント