Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Integrating MongoDB into Laravel with Filament

2025年09月25日に「Dev.to」が公開したITニュース「Integrating MongoDB into Laravel with Filament」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

LaravelとFilamentでWebアプリを開発する際、NoSQLデータベースMongoDBを統合する手順を解説する。プロジェクト作成からMongoDBドライバ導入、LaravelのDB接続・モデル・キャッシュ設定、Filamentインストール、リソース作成、埋め込みドキュメントによるOne to Fewリレーションまで具体的に示す。

ITニュース解説

このニュース記事は、PHPフレームワークであるLaravel、NoSQLデータベースであるMongoDB、そして管理画面を簡単に作成できるFilamentという三つの技術を組み合わせてアプリケーションを構築する方法を、システムエンジニアを目指す初心者にも理解できるように解説している。筆者は普段、MariaDBやPostgreSQLのようなリレーショナルデータベース(RDB)と相性の良いLaravelを主に利用しているが、最近はMongoDBが提供するTTLインデックス(設定した時間が経過すると自動的にデータが削除される機能)や、関連するデータを一つのドキュメントの中に直接格納できる埋め込みドキュメント(One to Fewリレーションシップ)といったユニークな機能に魅力を感じている。また、自身のサーバー管理を効率化するため、簡単なCRUD(作成・読み取り・更新・削除)アプリケーションを開発する際に、テンプレートや定型作業を省けるFilament管理パネルの利便性に気づき、これらを組み合わせた「Lunash」というプロジェクトに着手した。この記事は、その開発過程で直面した課題とその解決策を共有し、読者が同様のプロジェクトを円滑に進められるようにすることを目的としている。

プロジェクトを開始するには、まずいくつかの前提条件がある。PHPが正しくインストールされ、動作する環境、PHP拡張機能を管理するPECL、PHPの依存関係を管理するComposer、そしてMongoDBが起動している必要がある。これらの基礎知識と環境が整っていることを前提に、Laravelプロジェクトの新規作成から手順を追って説明する。

LaravelとMongoDBを統合するためには、RDBとは異なる特別な設定が求められる。最初に、PECLコマンドを使ってMongoDBのPHPドライバをインストールし、PHPがMongoDBと通信できるようにする。次に、Composerを通じてLaravel公式のMongoDBパッケージを導入し、Laravelアプリケーション内でMongoDBを扱うためのフレームワーク側の準備を整える。これらのパッケージがインストールされたら、Laravelの環境設定ファイル(.env)を編集し、DB_CONNECTIONmongodbに設定し、MongoDBデータベース名と接続URI(例えばmongodb://localhost:27017/)を記述する。さらに、config/database.phpファイル内にMongoDBの接続情報を追加することで、LaravelがMongoDBを正しく認識し、接続できるようになる。

データベースの構造を管理するマイグレーションファイルも、RDBのテーブルではなくMongoDBのコレクションに対応するように変更が必要だ。具体的には、マイグレーションファイル内で使用するSchemaクラスのBlueprintを、MongoDB\Laravel\Schema\Blueprintに変更し、コレクションを作成する記述に合わせる。これにより、RDBの主キーに相当するid()メソッドや、更新日時・作成日時を自動で記録するtimestamps()メソッドをMongoDBのコレクションでも利用できるようになる。特に、セッション情報などをMongoDBで管理する場合、expireメソッドを使うことで、そのフィールドにTTLインデックスを設定し、データが一定時間後に自動的に削除されるように設定できる。アプリケーションのモデル(データ構造を定義するクラス)に関しても、RDB用のEloquent\Modelではなく、MongoDB\Laravel\Eloquent\Modelを継承するように変更する。認証システムで使用されるUserモデルは、MongoDB\Laravel\Auth\User as Authenticatableを継承する必要がある。

Laravelのキャッシュ機能もMongoDBで利用できるように設定できる。config/cache.phpファイルにMongoDBキャッシュストアの定義を追加し、CACHE_STORE環境変数をmongodbに設定する。キャッシュ用のマイグレーションを作成し、その中でcreateTTLIndex()メソッドを呼び出すことで、キャッシュデータにもTTLインデックスを設定し、一定期間後に自動削除されるようにする。これらの設定が完了したら、php artisan migrate:freshコマンドを実行し、すべてのコレクションを再作成して最新のマイグレーションを適用する。

MongoDBとの連携設定が完了したら、次にFilamentの導入を進める。Composerを使ってFilamentパッケージをインストールし、php artisan filament:install --panelsコマンドを実行して管理パネルの基本設定を行う。最後に、php artisan make:filament-userコマンドを実行して、管理画面にログインするための管理者ユーザーを作成する。

Filamentでは、「リソース」を作成することで、特定のデータ(モデル)に対するCRUD操作を管理画面上で簡単に実現できる。例えば、php artisan make:filament-resource Userコマンドを実行すると、Userモデルに対応する管理画面が自動生成され、ブラウザからユーザー情報の閲覧、編集、削除が可能になる。

MongoDBの大きな特徴である埋め込みドキュメント機能も、LaravelとFilamentで利用できる。埋め込みドキュメントは、関連性の高いデータを別々のコレクションに保存せず、親となるドキュメントの中に直接格納する設計パターンだ。例えば、ユーザーが複数の住所を持つ場合、各住所を独立したコレクションとして扱うのではなく、Userドキュメントの内部に住所情報を配列として埋め込むことができる。これにより、関連データの取得が一回のデータベース操作で完結し、効率的なデータアクセスが可能となる。この機能を実装するためには、まずmake:modelコマンドでAddressモデルを作成するが、MongoDBではマイグレーションファイルは不要である。AddressモデルはMongoDB\Laravel\Eloquent\Modelを継承するように定義する。次に、UserモデルにMongoDB\Laravel\Relations\EmbedsManyリレーションシップを定義し、Addressモデルを埋め込むことを示す。Filamentの管理画面では、埋め込みドキュメントを扱うために「Repeater」フィールドを使用する。これにより、Userリソースのフォーム内に、住所情報を動的に追加・編集できる入力フィールドのセットを容易に配置できる。実際に設定を行うと、MongoDBのUserコレクションには、ユーザー情報の中に住所情報が配列として埋め込まれた形でデータが保存されていることが確認できる。

まとめると、Laravel、MongoDB、Filamentを組み合わせることで、MongoDBの柔軟なデータ構造とFilamentによる迅速な管理画面開発という両方のメリットを享受できる。しかし、Filamentは公式にはMongoDBを直接サポートしているわけではないため、本番環境でこの構成を利用する際には、計画している全ての機能について十分なテストを実施し、予期せぬ問題がないか確認することが非常に重要であると筆者は注意を促している。

関連コンテンツ

関連IT用語