CodeIgniterを5分で導入、「Hello World」を表示するまで

http://h2o-space.com/blog_ver2/diary/195
珍しくCodeIgniter扱った記事がホッテントリなってたので触発されてエントリーを書く事にした。

CodeIgniterの何と言ってもいいところはその生産効率です。どのフレームワークよりも早くWebサイトを作ることができます。よく「CodeIgniterは速い」とか言われますが…どうなんでしょうね。

CodeIgniterは導入含め最初のページ作るまでに5分あれば十分です。説明するまでもない内容ですが、簡単に手順を。

※サーバー等の設定は済んでいるものとして説明します。
Windows環境での説明です(^q^)

まずはCodeIgniter本体をダウンロード

CodeIgniter - Open source PHP web application frameworkにアクセスしてDownloadsから最新安定版のCodeIgniterをダウンロードします。

あ!2.0出てる!
僕もまだ全然触ってないですが、とりあえず2.0.0を落とします。

CodeIgniterを配置

CodeIgniterに煩わしいインストール作業はありません。ダウンロードして解凍して出てきたフォルダをそのまま配置するだけです。僕の環境ではD:\www\がドキュメントルートになってるのでここに配置します。
配置したらフォルダ名を適当に変えます。ここでは「hello」としました。
http://localhost/hello/に接続してみてください。

CodeIgniterのWelcomeページが表示されたら配置は完了です。

設定ファイルの編集

配置が済んだら次は設定ファイルのとりあえず必要な部分だけ修正します。設定ファイルは hello\application\config\の中にあります。いくつかファイルがありますが、そのなかのconfig.phpを開きます。
次のような変数があります。

$config['base_url'] = '';

ここでサイトのベース(ルート)となるURLを定義します。anchor()やbase_url()などといった関数を使うときはこのURLが基準となります。 2.0 はここを設定しなくても自動で設定されるようです。

$config['base_url'] = 'http://localhost/hello/';

こんな感じに。これを指定してなくてもアクセスはできます。
次に同じくconfigフォルダ内のroutes.phpを開いてください。

$route['default_controller'] = "welcome";

となっているので変更します。

$route['default_controller'] = "hello";

これはサイトのトップのURLにアクセスしてきたときに呼び出すControllerの定義です。何でもいいんですが、デフォルトから変えておきます。(もちろんwelcomeのまんまでもいいですが)
これであとはContorolerとViewを用意するだけです。

Controlerの作成

hello\application\controllersがControllerを管理するディレクトリです。controllersに移動するとindex.htmlとwelcome.phpがあると思います。welcome.phpが今http://localhost/hello/を表示させているControllerです。
Controllerも定義はめちゃくちゃ簡単なんで一から書いてもいいんですが、めんどくさいのでwelcome.phpをコピーして使います。コピーしてhello.phpに名前を変えてからファイルを開いてください。

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Welcome extends CI_Controller {

	function __construct()
	{
		parent::__construct();
	}

	function index()
	{
		$this->load->view('welcome_message');
	}
}

これがCodeIgniterのControllerです。CodeIgniterでは /index.php/クラス名/メソッド名 という形でアクセスする事になるのでその対応関係は見たとおりです。例えば最初から存在しているwelcomeというControllerの場合http://localhost/hello/index.php/hello/indexという形でアクセスする事でWelcome::indexが実行される事になります。

ファイル名とクラス名は揃えてください。今回の場合で言えばファイル名はhello.php、クラス名はHelloとなります。クラス名は最初大文字です。

さてコピーしたファイルなので変更しないといけませんが、変えるのは2箇所だけでいいです。

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Hello extends CI_Controller {

	function __construct()
	{
		parent::__construct();
	}

	function index()
	{
		$this->load->view('index');
	}
}

クラス名をHelloに、読み込むViewをindexに変更しました。
$this->load->view()はViewを読み込んでくれます。第2引数にはViewに渡す変数を定義できます。第2引数は連想配列で渡してあげます。

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Hello extends CI_Controller {

	function __construct()
	{
		parent::__construct();
	}

	function index()
	{
		$data['message'] = 'Hello World!!!';
		$this->load->view('index', $data);
	}
}

これでindexでは$messageとして変数にアクセスできます。

Viewの作成

先ほど$this->load->view('index', $data);としてViewを読み込むようにしましたが、このindexは hello\application\views の中の物になります。「index」とだけ指定するとhello\application\views\index.phpを読み込むようになります。
$this->load->view()はviewsディレクトリから相対的に読み込むようになるので、$this->load->view('hoge/foo')とすればhello\application\views\hoge\foo.php となります。
ここではindexとだけ定義してあるのでviewsディレクトリにindex.phpを作ります。

<html>
<head>
	<title>Hello World</title>
</head>
<body>
<h1><?php echo $message ?></h1>
</body>
</html>

こんな感じ。$messageはControllerから渡された変数です。

ページを見てみる

さぁhttp://localhost/hello/にアクセスしてみましょう。http://localhost/hello/index.php/hello/indexでもいいです。

どうでしょうか?「Hello World」が表示されたでしょうか。ここまで5分。余裕が残るくらい。


これが基本的なCodeIgniterでのページの作成方法です。すごい簡単なので触るうちにすぐ使い方を覚えると思います。今回Modelは使わなかったですが、Modelも扱いはめちゃくちゃ簡単です。日本語のユーザーガイドもあるのでほとんど困ることはないと思います。

http://codeigniter.jp/user_guide_ja/

ただ、2.0になってたんでね…。ユーザーガイドの方は現時点で1.7.3のものなんで2.0使う場合は多少違うところあるかもしれないです。

変更点結構あるみたいなので僕も今から2.0をチェックです。


そして、
ホーム :: CodeIgniter Con 2011, Tokyo Japan
2月19日!カンファレンスも迫ってきてます。もう募集は終了しちゃってるみたいですが。僕は行く予定です。
何か面白い話聞けたらまたエントリー書きたいと思います。

修正

いくつか記述が間違ってました。すいません。。。

  • base_url() は $config['base_url'] を修正しなくても自動で設定される。
  • applicationディレクトリはsystemディレクトリの外に出たようです。なんで気付かなかった…。

ご指摘ありがとうございました。