Open18

[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
db/migrate/xxx_remove_description_from_products.rb
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ファイル、サードパーティのライブラリやテンプレートのアセットファイルをプリコンパイルする必要がある場合に、この設定を使用します。

config/initializers/assets.rb
Rails.application.config.assets.precompile += %w[admin.js admin.css]

Rails.application.config.assets.precompile += %w( admin.js admin.css ) の設定は、admin.jsadmin.css という名前のファイルをアプリケーションのアセットプリコンパイル対象に追加するものです。

この設定を使用することで、これらのファイルをプリコンパイルしてアプリケーションに組み込むことができます。

具体的には、admin.jsadmin.css という名前のファイルを作成し、それらのファイルを app/assets/javascripts ディレクトリと app/assets/stylesheets ディレクトリに配置します。その後、上記の設定を config/initializers/assets.rb ファイルに追加します。

この設定により、アプリケーションがアセットのプリコンパイルを行う際に、admin.jsadmin.css が結合・圧縮されたアセットファイルに含まれます。

🦓🦓

[Rails]bundle exec

bundle execは、Rubyプロジェクトで依存関係管理に使われるBundlerを実行するためのコマンドです。主な使用シーンは以下の通りです:

  1. Gemのインストールと実行: bundle execはGemfileに定義されたGemのインストールと実行を行います。通常、bundle installを使用してプロジェクトの必要なGemをインストールした後、bundle execを使ってそのGemを実行します。これにより、プロジェクト固有のバージョンのGemが実行されることが保証されます。

  2. コマンドの実行: 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_idtag_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
db/migrate/xxx_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_typecommentable_idが追加されました。

db/schema.rb
  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にアップグレードしましたが、webpackergemがまだ対応していないため諦めました。webpackerのリポジトリを確認したところ、rails 7のリリースと伴ってwebpackerが更新されなくなります。

https://github.com/rails/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