今回は、Rails開発中によく使うコマンドをまとめてみました。新しくRails案件を立ち上げる方や、コマンドの使い方初心者の参考になれば幸いです。
一、Rails アプリ
1. プロジェクトの作成
# 基本的な作成
rails new myapp
# APIモードで作成
rails new myapp --api
# データベースを指定して作成
rails new myapp -d postgresql
# Docker開発環境
rails new backend -r 8.0.0 --devcontainer -d mysql --api --skip-kamal
Docker開発環境のパラメータ説明
-
backend
: プロジェクト名 -
-r 8.0.0
: Railsのバージョンを8.0.0に指定 -
--devcontainer
: VS Code用のdev container設定を追加(Docker開発環境用) -
-d mysql
: データベースにMySQLを使用 -
--api
: APIモード(フロントエンド用のビューファイルなどを作成しない) -
--skip-kamal
: Kamal(デプロイツール)の設定をスキップ
2. devise_token_authのインストール
rails g devise_token_auth:install User auth
パラメータ説明
-
User
: 認証用のモデル名(この場合はUser
モデルを作成) -
auth
: URLのパスに使用される。例:/auth/sign_in
よく使用される認証エンドポイント
このセットアップにより、以下のエンドポイントが自動的に生成されます:
- サインアップ:
POST /auth
- サインイン:
POST /auth/sign_in
- サインアウト:
DELETE /auth/sign_out
- パスワード変更:
PUT /auth/password
- アカウント更新:
PUT /auth
3. サーバーの起動
# サーバーを起動
rails server
# サーバーを起動の省略形
rails s
# ポートを指定して起動
rails s -p 3001
# バインドするIPアドレスを指定
rails s -b 0.0.0.0
4. コンソール操作
# Railsコンソールを起動
rails console
# 省略形
rails c
5. ルーティング確認
# 一覧の確認
rails routes
# APIのルートを確認
rails routes | grep api
# Railsのルーティング一覧から "auth" という文字列を含むルートだけを抽出して表示する
# 特に `devise_token_auth` を使用している場合、このコマンドは非常に便利です
rails routes | grep auth
説明
-
|
は「パイプ」と呼ばれ、左のコマンドの出力を右のコマンドの入力として渡します。 -
grep
は「全体から (Global)正規表現 (Regular Expression) に一致する行を表示(Print)する」というその名の由来のとおり、文字列を複数ファイルから検索するコマンドです。
二、モデル・データベース関連
1. モデルの作成
2. マイグレーション
# マイグレーションの実行
rails db:migrate
# 一つ前の状態に戻す
rails db:rollback
# DBの削除 → 作成 → 初期データ投入
rails db:reset
# DBを作成
rails db:create
# DBを削除
rails db:drop
DBに初期データを投入
rails db:seed
注意
- リセットの
rails db:reset
は、開発環境のみ使用してください! -
rails db:reset
やrails db:drop
などの破壊するコマンドの実行前に、必ず正しい環境(development/test)で実行しているか確認しましょう -
rails generate
コマンドで作成したファイルは、rails destroy
で削除できます
3. コントローラーの作成
例えば:
# namespace付き、かつ、アクションを指定
rails generate controller api/client/media create
# 省略形
rails g controller api/client/media create
このコマンドを実行すると、以下のファイルが生成されます:
app/controllers/api/client/media_controller.rb
そして、routes.rb
には以下のようなnamespace付きのルーティングを追加します:
Rails.application.routes.draw do
namespace :api do
namespace :client do
# ※POSTしたいなら、手動で編集してください
# post "media", to: "media#create"
get "media/create"
end
end
end
実際のコントローラーの中身は以下のようになります:
module Api
module Client
class MediaController < ApplicationController
def create
end
end
end
end
案件によるけど、バージョン管理(v1, v2など)は最初から導入しておくと後が楽
# APIバージョン管理用
rails g controller api/v1/users
rails g controller api/v2/users
三、Rails ConsoleでのDBのCRUD
まずはRailsコンソールを起動
rails c
1. データの作成(Create)
# 方法1: newとsave
user = User.new(email: "tanaka@example.com", password: "tanakapassword")
user.save
# 方法2: create(一行で作成)
user = User.create(name: "山田花子", email: "yamada@example.com")
# 方法3: create!(エラー時に例外を発生)
user = User.create!(name: "佐藤次郎", email: "sato@example.com")
# 複数のレコードを一度に作成
users = User.create([
{ name: "User1", email: "user1@example.com" },
{ name: "User2", email: "user2@example.com" }
])
2. データの検索(Read)
# 特定のテーブル一覧
User.page
# 最初と最後
User.first
User.last
# 並び順
User.order(created_at: :desc)
# 並び順(複数)
User.order(email: :asc, name: :desc)
# 件数制限
User.limit(5)
findを使った検索
# IDを絞って検索
User.find(1)
User.find_by(id: 1) # 見つからない場合はnil
# 条件を絞って検索
User.find_by(email: "tanaka@example.com")
User.find_by!(email: "tanaka@example.com") # 見つからない場合は例外
# 複数の条件を絞って検索
User.find_by(name: "山田花子", email: "tanaka@example.com")
whereを使った検索
# 複数のレコードを取得
users = User.where(active: true)
users = User.where("age >= ?", 20)
# OR条件
users = User.where("age = ? OR age = ?", 20, 30)
users = User.where(age: [20, 30])
# AND条件
users = User.where(age: 20).where(active: true)
集計
# レコード数のカウント
User.count
3. データの更新(Update)
単一レコードの更新
# 方法1: 属性を変更してsave
user = User.find(1)
user.name = "新しい名前"
user.save
# 方法2: update
user = User.find(1)
user.update(name: "新しい名前", email: "new@example.com")
# 方法3: update!(エラー時に例外を発生)
user.update!(name: "新しい名前")
複数レコードの一括更新
# 条件に合うレコードを全て更新
User.where(active: false).update_all(active: true)
# 特定の値を増減
User.where(active: true).update_all("points = points + 10")
4. データの削除(Delete)
単一レコードの削除
user = User.find(1)
# 方法1: destroy(コールバックが実行される)
user.destroy
# 方法2: delete(コールバックが実行されない)
user.delete
複数レコードの削除
# 条件に合うレコードを全て削除
User.where(active: false).destroy_all # コールバックあり
User.where(active: false).delete_all # コールバックなし
# 全レコード削除
User.destroy_all
5. その他
# レコードの存在確認
User.exists?(id: 1)
User.where(age: 20).exists?
# 条件に一致するレコードを探すか作成
user = User.find_or_create_by(email: "test@example.com")
四、Bundlerでよく使うコマンド
1. 基本的な使い方
bundlerは、「gemの依存関係とバージョンを管理するためのツール」です。
インストール
bundle install
アップデート
# 全てのgemをアップデート
bundle update
# 特定のgemだけアップデート
bundle update rails
# 複数のgemをアップデート
bundle update rails devise
Bundlerで管理されているコマンドを実行
bundle exec rspec
2. Gemfile操作
新しいGemfileを作成
bundle init
Gemfileに新しいgemを追加してインストール
bundle add devise
bundle add rspec-rails --group development,test
特定のgemを削除
bundle remove devise
3. 確認
インストールされているgemの一覧表示
bundle list
# 特定のgemの情報を表示
bundle list | grep rails
特定のgemの詳細情報を表示
bundle info rails
bundle info devise
必要なgemが全てインストールされているか確認
bundle check
使用していないgemを削除
bundle clean
# 強制的に削除
bundle clean --force
注意
-
bundle install
vsbundle update
-
install
: Gemfile.lockの内容を元にインストール -
update
: 最新バージョンに更新してGemfile.lockを書き換え
-
-
環境ごとの管理
# Gemfileでの書き方 group :development, :test do gem 'rspec-rails' end
まとめ
この記事を手元に置いておくと、開発作業がスムーズに進めます。