前書き
Rails5でAPIを作っている際、AWSのDynamoDBの利用が必要になったので
ORMを探したところ、**Dynamoid**というORMが人気そうだったので、実際にCRUDで利用して見ました。
Dynamoidのインストール
gemでバージョンを指定してインストールします。
gem 'dynamoid', '~> 1'
なお、aws-sdkのv2しか対応していないため指定してaws-sdkをインストールします。
gem 'aws-sdk', '~>2'
前準備
config/initializersに
- aws.rb(すでにある場合は編集なしです。)
- dynamoid.rb
の2ファイルを作成し以下に編集します。
aws.rb
ここには、AWSのクレデンシャルの設定を記述します。
# aws.rb
Aws.config.update(Rails.application.config_for(:aws).symbolize_keys)
dynamoid.rb
ここには、Dynamoidの初期設定を記載します。
例では、namespaceをnullにしています。
Dynamoidは指定するAWSアカウント内にDynamoDBがない場合に自動で作成してくれるのですが
namespaceがnullではない場合、DB名に環境名が入るようになりますので
特に指定しない場合はnullで問題ありません。
# dynamoid.rb
Dynamoid.configure do |config|
config.namespace = nil
end
modelの記載
DynamoDBのカラムや名称はmodel内に記述します。
idはDynamoidが自動でHash値を入れてくれます。
defaultを指定する場合は例にしたがって記述すればdefault値が代入されます。
# models/table.rb
class Table
include Dynamoid::Document
table :name => "TableName", :key => "id", :read_capacity => 5, :write_capacity => 5
field :is_deleted, :integer, {:default => "0"}
field :is_enabled, :integer, {:default => "1"}
field :title, :string
field :body, :string
CRUD
上述項目でDynamoidの利用ができるようになりますので
CRUDについてコード例をまとめます。
Create
def self.create(params)
table = new(params)
table if table.save
end
Read
def self.read_all
where(
is_deleted: 0,
is_enabled: 1,
).all
end
Update
def self.update(id, params)
table = find(id)
table if table.update_attributes(params)
end
Delete
def self.delete(id)
table = find(id)
table if table.delete
end
ハマりポイント
CRUDの処理にハマりはありませんでしたが
ControllerからParamaterを渡す際にハマりポイントがあり
params.to_h
と、ハッシュ化する必要がありました。
渡し方の問題かもしれませんが、Paramater部でエラーが出る場合はお試しください。
後書き
ApplicationRecordと同じ形でDynamoDBが触れるので、とてもわかりやすかったです。