[初心者向け]Codeigniter導入時にやっておいたら便利なtips5つ

2015年10月19日に渋谷で開催された「FuelPHP&CodeIgniter ユーザの集い #9」にスケジュール上、残念ながらいけなかったので、多分いってたらこれ発表してたかなネタをここで書いておきます。

1. インストールは、Composerを使う

公式サイトをみるとわかるのですが、Codeigniterは公式ではzip配布しかしておらず、Composer installを案内していない稀なPHPフレームワークです。
とはいえ、Codeigniter自体はComposerを使えるようになっておりまして、@kenjiさんがcodeigniter-composer-installerをつくってGithubで配布してくれています。
スクリーンショット 2015-10-19 14.57.42
これを利用することによって

  • composer_autoloadを自動設定してくれる
  • .htaccessを自動設定してくれる(これがないと、urlが http://hoge.jp/index.php/hoge となるので必須/index.phpを削除してくれる)
  • Codeigniter自体のソースコード管理にComposerが使える

というメリットがありますので、よっぽど特別な理由がない限りはこれを使うことがおすすめです。

2. 本番環境・開発環境を切り替える

Codeigniterは、public/index.phpの56行目のコードで、本番環境・開発環境・テスト環境を選択しています。ちなみに、標準は開発環境。エラーレポートとか、がしがし吐き出してくれます。

define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');

けれど、このままじゃずっと開発環境になってしまうので、条件分岐で本番環境・開発環境を切り替えるようにします。私の場合は、SERVER_NAMEで環境の切り替えをしているので、こんな感じで切り替えています。

if($_SERVER["SERVER_NAME"]=="localhost"){
	// SERVER_NAMEがlocalhostの場合は開発環境
	define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');
}else{
	// それ以外は本番環境
	define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'production');
}

 
これで、エラーレポートは自動的に切り替えてくれるようになります。
また、データベース設定などなどの設定は本番環境とテスト環境で切り替える人が多いと思います。その場合、「application/config/」の中に「production」(application/config/production/)、「development」(application/config/development/)をつくると、「application/config/」よりも先にこれらの設定ファイルを環境設定に応じて読みにいってくれます(参考)。

3. global_xss_filteringは有効化しておく


Codeigniterはデフォルトではoffになっているのですが、xssをグローバルにフィルターするための機能があります。
「application/config/config.php」の443行目あたりをtrueにすると有効化できますので、よっぽど理由がない限り有効化しておけばいいかと思います。
まぁ、ちょっとfilterされたあとがブサイクという問題はあるのですが、POSTする文字列の中にjavascript埋め込む人向けにスマートうんぬんはあまり考えなくていいんじゃないでしょうか。

[追記] 廃止予定で非推奨でした。調査不足で失礼しました。
 
ちなみに、セキュリティ系はこちらをみるとわかりますが、csrf_protectionとかもありますので初期設計次第ではこれもtrueにしておいていいかと思います。
 

4. 命名規則を最初に考えておく

Codeigniterは、呼び出しを$this->hogeで行います。modelも、libraryも、languageも。ということは、例えば、こんな設計そもそもだめだろうとは思いますが、ユーザ関係のmodelを「user.php」。libraryも「user.php」。言語ファイルも「user.php」にすると、毎回まいかい呼び出し時に第二引数をつかって命名しなおす必要がでてくるわけです。同時利用することがなくても、「あれ、この$this->userって、ライブラリ?モデル?」みたいなことになるという恐怖。
なので、
Library  : User_lib.php
Model  : User_model.php
Language : user_lang.php
と命名規則を最初につけておくと随分楽になります。人によっては、viewも、user_view.phpなんてつける人も。これも最初からやっておいた方がいいかと思いますー。

5. base_url()はjsに引き渡しておく

もはや、jsをなくしてwebサイトをつくる人なんて業務基幹系を除いたら本当に一握りです。ajaxを全くなしでcodeigniterつかったこと、僕にはないや・・・。ということで、codeigniterとjsの連携ってどっかで考えないといけないのですが、その第一歩として、base_url()ぐらいjsに引き渡しておくと随分楽になりますー。

私は、viewのfooterの中に以下のように設定して引き渡しています。

<script>
	var base_url = "<?php echo base_url(); ?>";
</script>

 
以上、Codeigniter導入時にやっておいたら便利なtips5つでした!それではまた。

お問い合わせ