Docs Menu

既存のアプリケーションに Mongoid を追加する

このガイドでは、既存の Sinatra またはRuby on Rails(Rails)アプリケーションに Mongoid を追加する方法を学習できます。 Mongoid を使用する新しいアプリケーションを設定する方法については、次のいずれかのガイドを参照してください。

既存の Sinatraアプリケーションで Mongoid の使用を開始するには、次の手順を実行します。

  1. mongoid の依存関係をアプリケーションの Gemfile に追加します。

  2. クイック スタートガイドの「MongoDB接続の構成 - Sinatra」のステップに示されているように、config/mongoid.yml構成ファイルを作成し、接続ターゲットを指定します。

  3. クイック スタートガイドのMongoDBデータの表示 - Sinatra ステップに示されているように、アプリケーションファイルを作成し、構成ファイルをロードします。

  4. データを操作するための Mongoid モデルを作成します。

既存の Railsアプリケーションに Mongoid を追加すると、他の ActiveRecord アダプターと一緒に実行できます。 アダプターの組み合わせを使用するには、mongoid 依存関係を追加し、構成ファイルに接続情報を入力して、アプリケーションでMongoDBの使用を開始します。

既存の RailsアプリケーションをActiveRecord の代わりに Mongoid のみを使用するように調整するには、次のセクションに記載されているように、他の構成変更を行う必要があります。

mongoid gem をアプリケーションの Gemfile に追加する。

Gemfile
gem 'mongoid'

Mongoid Gemfileを唯一のデータベースアダプターとして使用するには、 や など、 にリストされているRDBMSライブラリを削除するか、コメントsqlite pgアウトします。

次に、次のコマンドを実行中て依存関係をインストールします。

bundle install

次のコマンドを実行中て、デフォルトのMongoid 構成を生成します。

bin/rails g mongoid:config

このジェネレーターは、 MongoDBデプロイへの接続を構成するために使用される config/mongoid.yml構成ファイルと、他のオプションを設定するために使用できる config/initializers/mongoid.rb 初期化ファイルを作成します。

config/mongoid.ymlファイルで、接続文字列とその他の接続オプションを指定します。

config/application.rbファイルを開いて、内容を確認します。 ファイルがrequire "rails/all" ステートメントを使用してすべての Rails コンポーネントをロードする場合は、このステートメントを削除します。 次のサンプルconfig/application.rbファイルに示すように、Rails コンポーネントごとに個別の require ステートメントを追加する必要があります。

config/application.rb
# Remove or comment out rails/all
#require "rails/all"
# Add the following instead of rails/all:
require "rails"
# Comment out unneeded frameworks
# require "active_record/railtie" rescue LoadError
# require "active_storage/engine" rescue LoadError
require "action_controller/railtie" rescue LoadError
require "action_view/railtie" rescue LoadError
require "action_mailer/railtie" rescue LoadError
require "active_job/railtie" rescue LoadError
require "action_cable/engine" rescue LoadError
# require "action_mailbox/engine" rescue LoadError
# require "action_text/engine" rescue LoadError
require "rails/test_unit/railtie" rescue LoadError

注意

これらは ActiveRecord に依存しているため、 ActionText ActiveStorage 、および ActionMailbox アダプターは Mongoid と併用できません。

config/application.rb およびアプリケーションのその他の構成ファイルで、config.active_recordconfig.active_storage への参照を削除するかコメント アウトします。

ActiveRecord の使用から Mongoid に移行するには、アプリケーションの既存のモデルを調整する必要があります。

ActiveRecord モデルは ApplicationRecordクラスから派生しており、列定義がありません。一方、Mongoid モデルには通常スーパークラスはありませんが、Mongoid::Document 属性を含める必要があります。

Mongoid モデルを作成する際は、次の方法でフィールドを定義できます。

例、基本的なアクティブ レコード Post モデルは次のようになります。

app/models/post.rb
class Post < ApplicationRecord
has_many :comments, dependent: :destroy
end

同様の Mongoid Post モデルは次のようになります。

app/models/post.rb
class Post
include Mongoid::Document
field :title, type: String
field :body, type: String
has_many :comments, dependent: :destroy
end

次のコードに示すように、事前定義されたフィールドを使用する代わりに、動的フィールドを使用して Post モデルを定義できます。

app/models/post.rb
class Post
include Mongoid::Document
include Mongoid::Attributes::Dynamic
has_many :comments, dependent: :destroy
end

MongoDBに移動したいデータがリレーショナルデータベースにすでにある場合は、 データ移行 を実行する必要があります。 MongoDBデータを保存するために事前定義されたスキーマは必要ないため、スキーマ移行を実行する必要はありません。

移行ツールは多くの場合、データセットに固有です。 Mongoid は ActiveRecord 関連付けのスーパーセットをサポートしていますが、Mongoid を ActiveRecord と比較すると、モデル参照がコレクションに異なる方法で保存されます。

RDBMSからMongoDBへの移行の詳細については、次のリソースを参照してください。

Mongoid を使用する Rails APIアプリケーションを作成するプロセスは、通常のアプリケーションの作成とほぼ同じです。 唯一の違いは、アプリケーションを作成するには、rails newを実行中中に --api フラグを追加する必要があることです。 Rails APIアプリケーションをMongoid に移行するには、前のセクションで説明されているのと同じ手順に従います。