DynamoDB を触るにあたって、まずは簡単なベンチマークプログラムを書いてみようと思います。
せっかくなら、普段使っている Laravel 上で動かしたい。 というわけで、「Laravel で DynamoDB を扱うにはどうすればいいのか?」を調べてみました。
Laravel 用パッケージはあるのか?
調べてみると、いわゆる「Laravel 専用」と称した DynamoDB パッケージは、実質ひとつしか見当たりませんでした。
他にもいくつか見つかりますが、
- インストール数が極端に少ない
- スター数がほとんどない
- 長年メンテナンスされていない
といったものが多く、実運用を前提に検討できるものはかなり限られます。
現実的な選択肢は、次の 2 つに絞られそうです。
AWS 公式: AWS SDK for PHP
パッケージ名
aws/aws-sdk-php
特徴
- AWS 公式 SDK
DynamoDbClientが標準で含まれる- CRUD / Query / Scan / PartiQL(SQL 風)対応
- ORM ではなく API 呼び出しベース
公式ドキュメント:
メリット
- 公式・安定
- すべての API にアクセス可能
- AWS の機能追加に追従しやすい
デメリット
- Eloquent 的な抽象化はない
- 低レベル API を直接扱う必要がある
使いどころ
- DynamoDB の機能をフルに使いたい
- ベンチマークや検証用途
- PartiQL を使って SQL 風に書きたい場合
まずは素の SDK で触ってみるのが一番確実、という印象です。
baopham/laravel-dynamodb
(約 500 stars)概要
Laravel で Eloquent 風に DynamoDB を扱えるラッパーパッケージです。
特徴
BaoPham\DynamoDb\DynamoDbModelを継承してモデル定義find(),where(),get()など Eloquent 風 API- AND / OR / 比較演算子にも対応
メリット
- Laravel プロジェクトで最も使われている DynamoDB ラッパー
- Eloquent に近い記述で扱える
- 学習コストが低い
デメリット
- 完全な ORM ではない
- RDBMS のリレーション機能ほど強力ではない
- DynamoDB の設計思想とズレる可能性もある
向いている用途
- 既存 Laravel プロジェクトに組み込みたい
- Eloquent の書き味を維持したい
- ある程度抽象化された API を使いたい
どちらを使うべきか?
今回の目的は「ベンチマーク」なので、抽象化レイヤーがあると内部動作が見えにくくなる可能性があります。 そのため、まずは公式 SDK で直接操作したほうが挙動を理解しやすそうです。
一方で、実際のアプリケーションに組み込む場合は、baopham/laravel-dynamodb のようなラッパーの存在は魅力的です。
まとめ
Laravel で DynamoDB を扱う現実的な選択肢は、現時点では次の 2 つです。
- 公式 AWS SDK を直接使う
baopham/laravel-dynamodbを利用する
「Laravel 用パッケージが豊富にある」という状況ではありません。
まずは公式 SDK で素の DynamoDB に触れ、その上で必要に応じてラッパーを検討する、という流れが無難そうですね。