[Rails]よく使うコマンド
ルーティングを作成しない
bin/rails generate controller Articles index --skip-routes
[Rails]modelを作成する
bin/rails generate model User user_name:string email:string password_digest:string
bin/rails db:migrate
[Rails]システム全体の共有Gem環境にパッケージをインストール
bundle install
#プロジェクトごとの環境にパッケージをインストール
bundle install --path vendor/bundle
# パスファイルを作成される
.bundle/config
[Rails]マイグレーション履歴を見る
$ bin/rails db:migrate:status
Running via Spring preloader in process 61992
database: db/development.sqlite3
Status Migration ID Migration Name
--------------------------------------------------
up 20230615044726 Create users
up 20230621083727 Create articles
[Rails]一番最近のマイグレーションをやり直す
bin/rails db:migrate:redo
[Rails]マイグレーションを一から全てやり直す
bin/rails db:migrate:reset
db:drop
db:create
db:migrate
# schema.rbを活用して再構築するもの
bin/rails db:reset
db:drop
db:setup
マイグレーションダウンだけ実行する
3個前のマイグレーションをダウンする
rails db:rollback STEP=3
rails db:migrate:down VERSION=20211208123456
[Rails] テーブルにカラムを追加する
bin/rails generate migration AddColumnNameToTableName column_name:data_type
bin/rails generate migration AddUserIdToArticles user:references
class AddUserIdToArticles < ActiveRecord::Migration[6.0]
def change
add_reference :articles, :user, foreign_key: true
end
end
bin/rails generate migration AddUserIdToArticles user:references
は、Railsのマイグレーションジェネレータを使用して、articles
テーブルにuser_id
カラムを追加するためのマイグレーションファイルを生成するコマンドです。
このコマンドを実行すると、db/migrate
ディレクトリ内に新しいマイグレーションファイルが作成されます。ファイル名はタイムスタンプとadd_user_id_to_articles.rb
の形式であり、生成されるマイグレーションファイルには以下のようなコードが含まれます。
class AddUserIdToArticles < ActiveRecord::Migration[6.0]
def change
add_reference :articles, :user, foreign_key: true
end
end
bin/rails db:migrate
このマイグレーションファイルのchange
メソッド内でadd_reference
メソッドを使用して、articles
テーブルにuser_id
という外部キーを持つカラムを追加しています。user:references
という引数を指定することで、user
テーブルとの関連付けを自動的に行うための設定が追加されます。
このマイグレーションファイルを実行すると、articles
テーブルにuser_id
カラムが追加され、users
テーブルとの関連付けが行われます。これにより、articles
テーブルの各レコードが特定のユーザーに関連付けられるようになります。
booleanタイプ
bin/rails generate migration AddActiveToUsers active:boolean
class AddActiveToUsers < ActiveRecord::Migration[6.1]
def change
add_column :users, :active, :boolean, default: false, null: false
end
end
bin/rails db:migrate
[Rails]テーブルからカラムを削除する
bin/rails generate migration RemoveDescriptionFromProducts
class RemoveDescriptionFromProducts < ActiveRecord::Migration[6.1]
def change
remove_column :products, :description
end
end
bin/rails db:migrate
[Rails]テーブルのカラム名を変更する
bin/rails generate migration ChangeColumnNameInProducts
class ChangeColumnNameInProducts < ActiveRecord::Migration[6.1]
def change
rename_column :products, :old_name, :new_name
end
end
bin/rails db:migrate
rake assets:precompile
アセットのプリコンパイルは、アプリケーションのデプロイ時に行われ、パフォーマンスを向上させるために最適化されたアセットファイルが生成されます。この設定を使用することで、特定のアセットファイルをプリコンパイルの対象として明示的に指定することができます。
一般的には、カスタムのJavaScriptやCSSファイル、サードパーティのライブラリやテンプレートのアセットファイルをプリコンパイルする必要がある場合に、この設定を使用します。
Rails.application.config.assets.precompile += %w[admin.js admin.css]
Rails.application.config.assets.precompile += %w( admin.js admin.css )
の設定は、admin.js
と admin.css
という名前のファイルをアプリケーションのアセットプリコンパイル対象に追加するものです。
この設定を使用することで、これらのファイルをプリコンパイルしてアプリケーションに組み込むことができます。
具体的には、admin.js
と admin.css
という名前のファイルを作成し、それらのファイルを app/assets/javascripts
ディレクトリと app/assets/stylesheets
ディレクトリに配置します。その後、上記の設定を config/initializers/assets.rb
ファイルに追加します。
この設定により、アプリケーションがアセットのプリコンパイルを行う際に、admin.js
と admin.css
が結合・圧縮されたアセットファイルに含まれます。
bundle exec
[Rails]bundle exec
は、Rubyプロジェクトで依存関係管理に使われるBundlerを実行するためのコマンドです。主な使用シーンは以下の通りです:
-
Gemのインストールと実行:
bundle exec
はGemfileに定義されたGemのインストールと実行を行います。通常、bundle install
を使用してプロジェクトの必要なGemをインストールした後、bundle exec
を使ってそのGemを実行します。これにより、プロジェクト固有のバージョンのGemが実行されることが保証されます。 -
コマンドの実行:
bundle exec
を使用して、プロジェクトにローカルにインストールされたGemを実行することができます。これにより、グローバルなGemと競合することなく、プロジェクト内で特定のバージョンのGemを使用できます。
たとえば、Railsアプリケーションの場合、bundle exec rails console
というコマンドを使用することで、プロジェクトのローカルなGemを使用してRailsコンソールを起動できます。
また、テストやジョブの実行など、プロジェクトの他のタスクでもbundle exec
を使用して、プロジェクトに固有の環境で実行することが推奨されます。
bundle exec
を使用することで、プロジェクト内のGemのバージョン管理が容易になり、依存関係の問題を回避できます。
中間モデルを作成する
bin/rails generate model ArticleTags references :articles references :tags
中間モデルArticleTags
を作成するためのRailsジェネレータのコマンドです。
このコマンドは、articles
テーブルとtags
テーブルへの参照を持つ中間モデルを生成します。
references
キーワードは、Railsのマイグレーションファイル内で使用される特別なキーワードです。references
キーワードを使用することで、外部キー制約と関連付けを持つカラムを作成することができます。
具体的には、references
キーワードを使用してカラムを定義すると、そのカラムは外部キー制約として扱われ、指定したテーブルへの参照を表現します。これにより、関連するモデル間の関連付けを実現することができます。
class CreateArticleTags < ActiveRecord::Migration[6.0]
def change
create_table :article_tags do |t|
t.references :article, null: false, foreign_key: true
t.references :tag, null: false, foreign_key: true
t.timestamps
end
end
end
上記のマイグレーションでは、article_tags
テーブルにarticle_id
とtag_id
という外部キー制約付きのカラムが作成されます。references
キーワードによって、それぞれのカラムがarticles
テーブルとtags
テーブルへの参照を表現しています。
このように定義された外部キー制約を持つカラムを使用すると、Railsはデータベースレベルで関連付けを管理し、関連モデル間の一貫性を維持します。
DBの初期化
rails db:drop db:create db:migrate db:seed
rails db:drop db:create db:migrate db:seed
は、Railsアプリケーションでデータベースの削除、作成、マイグレーション、およびシードデータのロードを行うためのコマンドです。これらのコマンドは、以下のような順序で実行されます:
rails db:drop
データベースを削除します。これにより、現在のデータベースが破棄されます。データベースに格納されているすべてのデータが失われますので、慎重に使用してください。
rails db:create
新しいデータベースを作成します。このコマンドにより、Railsアプリケーションの設定に基づいて新しいデータベースが作成されます。
rails db:migrate
マイグレーションを実行します。マイグレーションファイルに定義されたデータベースのスキーマ変更を適用します。新しいテーブルの作成や既存テーブルの変更など、データベースの構造を更新するために使用されます。
rails db:seed
シードデータのロードを実行します。シードファイルに定義された初期データをデータベースに挿入します。一般的には、テストデータや初期設定データなどをロードするために使用されます。
初期データ(seed.rb
)がなければ rails db:seed
を実行する必要がないです。
これらのコマンドを順番に実行することで、データベースをリセットし、新しいスキーマを適用し、必要なシードデータをロードすることができます。
ポリモーフィック関連付け
コメントテーブルがあることを前提にします。
bin/rails generate migration CreateComments body:text user:references
bin/rails generate migration AddCommentableToComments commentable:references{polymorphic}
invoke active_record
create db/migrate/20230719063423_add_commentable_to_comments.rb
class AddCommentableToComments < ActiveRecord::Migration[7.0]
def change
add_reference :comments, :commentable, polymorphic: true, null: false
end
end
bin/rails db:migrate
== 20230719063423 AddCommentableToComments: migrating =========================
-- add_reference(:comments, :commentable, {:polymorphic=>true, :null=>false})
-> 0.0294s
== 20230719063423 AddCommentableToComments: migrated (0.0295s) ================
commentable_type
とcommentable_id
が追加されました。
create_table "comments", force: :cascade do |t|
t.text "body", null: false
t.integer "user_id", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "commentable_type", null: false
t.integer "commentable_id", null: false
t.index ["commentable_type", "commentable_id"], name: "index_comments_on_commentable"
t.index ["user_id"], name: "index_comments_on_user_id"
end
production環境でサーバーを起動する
rails server -e production
Booting Puma
Rails 7.0.6 application starting in production
...
* Environment: production
RAILS_ENV=production bin/dev
production環境でDBを作成する
rails db:create RAILS_ENV=production
サーバーを終了させる
➜ lsof -i:3000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ruby 39164 ct 17u IPv6 0x76c93e9d173bfe97 0t0 TCP localhost:hbci->localhost:61649 (CLOSED)
➜ kill -9 39164
➜ bin/rails s
=> Booting Puma
=> Rails 7.0.6 application starting in development
=> Run `bin/rails server --help` for more startup options
Puma starting in single mode...
* Puma version: 5.6.6 (ruby 3.2.2-p53) ("Birdie's Version")
* Min threads: 5
* Max threads: 5
* Environment: development
* PID: 39751
* Listening on http://127.0.0.1:3000
* Listening on http://[::1]:3000
Use Ctrl-C to stop
webpack
バージョン
➜ npx webpack --version
4.46.0
webpackをバージョン5にアップグレードしましたが、webpacker
gemがまだ対応していないため諦めました。webpacker
のリポジトリを確認したところ、rails 7のリリースと伴ってwebpacker
が更新されなくなります。
マイグレーションファイルを削除する
コマンドがあるので手動で削除するよりコマンドを使いましょう。
rails destroy migration CreateComments
invoke active_record
remove db/migrate/202308020444004_create_comments.rb
クレデンシャルファイルを開く
EDITOR="code --wait" rails credentials:edit -e production
EDITOR="code --wait" rails credentials:edit -e development