[PHP] CodeIgniter 3のディレクトリ構成と動きを確認する

日本ではあまり人気がない(らしい?)けど、PHPのフレームワークの中でも軽量&高速で一定の支持があるCodeIgniter。今回は、CodeIgniterがどのように動いているのかを簡単に確認してみます。

CodeIgniter 3公式サイト

CodeIgniter 3のデフォルト構成を確認

まずは、CodeIgniterのデフォルト構成を確認します。

composerでインストールすると、public/index.phpになるんですが、今回はCodeIgniter 3の公式サイトからzipダウンロードをした前提としますので、下記のような構成になります。

ci3
└── application
└── system
└── index.php

CodeIgniterが動く仕組みは、index.phpのプログラム内容を見るとわかりますが、ざっくり言うと

  1. index.phpにアクセスする
  2. systemディレクトリを探す
  3. applicationディレクトリを探す
  4. application/controllerディレクトリからコントローラーを探す
  5. コントローラーの指示した作業をする

という動きになっています。
(内部的にはもっと複雑ですが、、、)

つまり、

  1. index.phpはDocumentRootにいないとダメ
  2. その他のディレクトリは自由に配置できる
  3. applicationディレクトリで作業する
  4. index.phpやsystemディレクトリは基本的に編集しない

ということになります。

(1)と(4)のルールを守れば、基本的には自由な開発ができそうです。

CodeIgniterのルーティング

次に、PHPフレームワークでWEBサイトを開発する際に必要となるルーティングの部分を見ていきましょう。

CodeIgniterは、.htaccessやApacheなどですべてのアクセスをindex.phpにすることで動いています。

例えば、「https://example.com/items/iphone.html」というURLにアクセスしたとすると、通常のサイト構成では、下記のようになります。

example.com
└── items
      └── iphone.html

しかし、CodeIgniterの場合は、「https://example.com/items/iphone.html」にアクセスした際に、.htaccessなどが「https://example.com/index.php?{変数}」と変換します。

つまり、CodeIgniterでは、URLのディレクトリ構成はすべてただの変数なのです。

ここは、CodeIgniterでキャッシュを利用したり、ルーティングをしたりする際に地味に重要となってきます。

複数サイトの設置やindex.phpの置き場など自由にカスタマイズできる構造

このように見てみると、CodeIgniterは基本のルールを守っていれば、かなり自由に設定ができることがわかります。

例えば、セキュリティ面に配慮して、index.php以外のアプリ本体ディレクトリをDocumentRoot以外のディレクトリに退避させたり、systemディレクトリを複数のCodeIgniterアプリで共有したり出来ます。

複数サイトを運営している時は、ライブラリやヘルパーなどを一つのディレクトリで共有するといろんな手間が省けるので、うまく設定することで、スピーディにCodeIgniterサイトを構築できそうですね。