active-storage-setup について
Rails 8 開発者向けの Active Storage 設定スキルです。Rails プロジェクトのファイル処理に必要なアップロード、ストレージ、添付、画像バリアント、テストを扱います。
主な機能
- 01クラウドまたはローカルストレージの設定
- 02単一または複数の添付ファイル追加
- 03画像バリアントの定義
- 04アップロード、ダウンロード、削除の処理
- 05添付ファイルのテストとバリデーション
活用シーン
- 01モデルへのアバターや写真の添付
- 02ローカルまたはクラウドストレージの設定
- 03画像サムネイルやプレビューの作成
- 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.mdtesting.mdvalidations.mdvariants-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 - コントローラー、サービスメソッド、ダイレクトアップロード、パフォーマンス
コメント
Markdown 対応