CodeIgniter3を使い続ける中で、複雑化するMVC構成に頭を抱えていませんか?私もその一人でした。しかし、HMVCという救世主に出会い、既存のModelを活かしながら効率的な開発環境を手に入れました。このブログでは、その導入の背景と手順を詳しく解説します。
背景
現在、私が運用しているプロジェクトは、CodeIgniter3をベースにした中規模なウェブアプリケーションです。初期の頃はMVC構成で十分だったものの、機能追加やページ数の増加とともに、コントローラーやビューが肥大化し、保守性が低下していきました。
特に、ある機能を別の機能でも使い回したいとき、毎回コピペやincludeを駆使するのは面倒で非効率。そんなときに目を付けたのが「HMVCパターン」でした。
しかし、既存のModelはかなり作り込まれており、ゼロから作り直すのは現実的ではありません。そこで、Modelは既存のものをそのまま使用しつつ、HMVCを導入することでコントローラーとビューをモジュール化し、効率的な開発環境を目指すことにしました。
HMVCとは?
HMVC(Hierarchical Model-View-Controller)は、MVCの各要素をモジュール単位で管理するアーキテクチャです。従来のMVCでは、コントローラー、モデル、ビューがそれぞれ一つのディレクトリに配置されますが、HMVCでは「モジュール」ごとにそれらをグループ化できます。
例えば、application/modules
ディレクトリ内に以下のような構造でモジュールを配置します。
application/modules/
blog/
controllers/
views/
models/
shop/
controllers/
views/
models/
これにより、特定の機能を独立して管理・再利用できるようになります。
導入手順
ライブラリのダウンロード
wiredesignzのcodeigniter-modular-extensions-hmvc
をGitHubからダウンロードします。
CodeIgniterへの組み込み
ダウンロードしたMXディレクトリをapplication/third_partyに配置します。
次にcoreディレクトリにあるMY_Controller.phpとMY_Router.phpを自プロジェクトのapplication/coreにコピーします。
config.php
を修正
application/config/
config.phpを次のように修正します。
$config['modules_locations'] = array(
APPPATH.'modules/' => '../modules/',
);
モジュールの作成
例えば、ブログ機能をモジュールとして作成する場合
application/modules/blog/controllers/Blog.php
application/modules/blog/views/index.php
※Modelは既存のapplication/models
内のものを使用
モジュールの利用
モジュールから別のモジュールを呼び出す際もシンプルです。
$this->load->module('shop/cart');
$this->cart->add_item($item_id);
実装のポイント
- Modelは既存のものをそのまま使用
新たにModelを作る必要がないため、導入コストを抑えられる。 - 共通機能のモジュール化
例えば、ログイン処理やフォームバリデーションなど、複数ページで使う機能をモジュール化することで、DRY(Don’t Repeat Yourself)を徹底。 - チーム開発でのメリット
複数人で開発する場合も、モジュールごとに担当を分けることでコンフリクトを減らせる。
まとめ
CodeIgniter3にHMVCパターンを導入することで、コードの可読性や保守性が劇的に向上しました。特に、既存のModelを活かしつつ導入できたことで、スムーズに移行できたのが大きなポイントです。
「CodeIgniterのMVCが限界かも…」と感じている方は、ぜひHMVCの導入を検討してみてください。
コメント