<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Github  |  takeHo（たけほ）のへなちょこ台帳</title>
	<atom:link href="https://blog.takeho.com/tag/github/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.takeho.com</link>
	<description>いわゆる自由帳ってところです。</description>
	<lastBuildDate>Thu, 13 Feb 2025 13:53:28 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.6</generator>

<image>
	<url>https://blog.takeho.com/wp-content/uploads/2024/08/icon-150x150.png</url>
	<title>Github  |  takeHo（たけほ）のへなちょこ台帳</title>
	<link>https://blog.takeho.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>CodeIgniter3で複雑化するMVCを救う！HMVC導入で開発効率を大幅にアップ！！</title>
		<link>https://blog.takeho.com/the-introduction-of-hmvc-greatly-improves-development-efficiency/</link>
					<comments>https://blog.takeho.com/the-introduction-of-hmvc-greatly-improves-development-efficiency/#respond</comments>
		
		<dc:creator><![CDATA[たけほ]]></dc:creator>
		<pubDate>Wed, 12 Feb 2025 14:09:00 +0000</pubDate>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Github]]></category>
		<category><![CDATA[HMVC]]></category>
		<guid isPermaLink="false">https://blog.takeho.com/?p=621</guid>

					<description><![CDATA[CodeIgniter3を使い続ける中で、複雑化するMVC構成に頭を抱えていませんか？私もその一人でした。しかし、HMVCという救世主に出会い、既存のModelを活かしながら効率的な開発環境を手に入れました。このブログで [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>CodeIgniter3を使い続ける中で、複雑化するMVC構成に頭を抱えていませんか？私もその一人でした。しかし、HMVCという救世主に出会い、既存のModelを活かしながら効率的な開発環境を手に入れました。このブログでは、その導入の背景と手順を詳しく解説します。</p>



<h2 class="wp-block-heading">背景</h2>



<p>現在、私が運用しているプロジェクトは、CodeIgniter3をベースにした中規模なウェブアプリケーションです。初期の頃はMVC構成で十分だったものの、機能追加やページ数の増加とともに、コントローラーやビューが肥大化し、保守性が低下していきました。</p>



<p>特に、ある機能を別の機能でも使い回したいとき、毎回コピペやincludeを駆使するのは面倒で非効率。そんなときに目を付けたのが「HMVCパターン」でした。</p>



<p>しかし、既存のModelはかなり作り込まれており、ゼロから作り直すのは現実的ではありません。そこで、Modelは既存のものをそのまま使用しつつ、HMVCを導入することでコントローラーとビューをモジュール化し、効率的な開発環境を目指すことにしました。</p>



<h2 class="wp-block-heading">HMVCとは？</h2>



<p>HMVC（Hierarchical Model-View-Controller）は、MVCの各要素をモジュール単位で管理するアーキテクチャです。従来のMVCでは、コントローラー、モデル、ビューがそれぞれ一つのディレクトリに配置されますが、HMVCでは「モジュール」ごとにそれらをグループ化できます。</p>



<p>例えば、<code>application/modules</code>ディレクトリ内に以下のような構造でモジュールを配置します。</p>



<pre class="wp-block-code"><code>application/modules/
  blog/
    controllers/
    views/
    models/
  shop/
    controllers/
    views/
    models/</code></pre>



<p>これにより、特定の機能を独立して管理・再利用できるようになります。</p>



<h2 class="wp-block-heading">導入手順</h2>



<h3 class="wp-block-heading"><strong>ライブラリのダウンロード</strong></h3>



<p>wiredesignzの<code>codeigniter-modular-extensions-hmvc</code>を<a href="https://github.com/wiredesignz/codeigniter-modular-extensions-hmvc">GitHub</a>からダウンロードします。</p>





<a rel="noopener" href="https://github.com/codinghamster/codeigniter-modular-extensions-hmvc" title="GitHub - codinghamster/codeigniter-modular-extensions-hmvc" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://opengraph.githubassets.com/0393c0d6010ad152e95f9166540f50fd0a83853789c62536ad54ba7e9d1722be/codinghamster/codeigniter-modular-extensions-hmvc" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">GitHub - codinghamster/codeigniter-modular-extensions-hmvc</div><div class="blogcard-snippet external-blogcard-snippet">Contribute to codinghamster/codeigniter-modular-extensions-hmvc development by creating an account on GitHub.</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://github.com/codinghamster/codeigniter-modular-extensions-hmvc" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">github.com</div></div></div></div></a>




<h3 class="wp-block-heading"><strong>CodeIgniterへの組み込み</strong></h3>



<p>ダウンロードしたMXディレクトリをapplication/third_partyに配置します。</p>



<p>次にcoreディレクトリにあるMY_Controller.phpとMY_Router.phpを自プロジェクトのapplication/coreにコピーします。</p>



<h3 class="wp-block-heading"><code><strong>config.php</strong></code><strong>を修正</strong></h3>



<p><strong><code>application/config/</code>config.php</strong>を次のように修正します。</p>



<pre class="wp-block-code"><code>$config&#91;'modules_locations'] = array(
    APPPATH.'modules/' => '../modules/',
);</code></pre>



<h3 class="wp-block-heading"><strong>モジュールの作成</strong></h3>



<p>例えば、ブログ機能をモジュールとして作成する場合</p>



<pre class="wp-block-code"><code><code>application/modules/blog/controllers/Blog.php</code></code></pre>



<pre class="wp-block-code"><code><code>application/modules/blog/views/index.php</code></code></pre>



<p>※Modelは既存の<code>application/models</code>内のものを使用</p>



<h3 class="wp-block-heading"><strong>モジュールの利用</strong></h3>



<p>モジュールから別のモジュールを呼び出す際もシンプルです。</p>



<pre class="wp-block-code"><code>$this->load->module('shop/cart');
$this->cart->add_item($item_id);</code></pre>



<h2 class="wp-block-heading">実装のポイント</h2>



<ul class="wp-block-list">
<li><strong>Modelは既存のものをそのまま使用</strong><br>新たにModelを作る必要がないため、導入コストを抑えられる。</li>



<li><strong>共通機能のモジュール化</strong><br>例えば、ログイン処理やフォームバリデーションなど、複数ページで使う機能をモジュール化することで、DRY（Don&#8217;t Repeat Yourself）を徹底。</li>



<li><strong>チーム開発でのメリット</strong><br>複数人で開発する場合も、モジュールごとに担当を分けることでコンフリクトを減らせる。</li>
</ul>



<h2 class="wp-block-heading">まとめ</h2>



<p>CodeIgniter3にHMVCパターンを導入することで、コードの可読性や保守性が劇的に向上しました。特に、既存のModelを活かしつつ導入できたことで、スムーズに移行できたのが大きなポイントです。</p>



<p>「CodeIgniterのMVCが限界かも…」と感じている方は、ぜひHMVCの導入を検討してみてください。</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.takeho.com/the-introduction-of-hmvc-greatly-improves-development-efficiency/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
