CodeIgniter 3.0のモダンなインストール方法

CodeIgniter Advent Calendar 2015 の6日目です。まだ、空きがありますので、興味のある方は気軽に参加してください。

今日は、CodeIgniter 3.0のモダンなインストール方法です。

ところで、モダンって何でしょうね?この用語もきちんと定義されていませんが、ここでは「何となく今っぽい」くらいの意味で使ってます。

ただ、PHPのバージョンとしては5.4以上とします。PHP 5.3でもCodeIgniter本体はインストールでき動作しますが、この記事に出てくるコンポーネントの中には動作しないものが含まれます。

なお、PHP 5.4も保守はすでに終了していますので、5.5、5.6または7.0へ移行した方がよいでしょう。

Composerのインストール

モダンPHPと言えば、Composerです。

Composerとは、PHPでの新しいパッケージ(ライブラリ)管理システムです。簡単に言うとPEARの後継みたいなものです。

Composerはパッケージ管理コマンドとしてのcomposerコマンド、パッケージのリポジトリとしてのPackagist、そしてクラスファイルをオートロードするオートローダを提供します。

PAERが主にサーバにライブラリをインストールし、各プロジェクトはそのサーバの共有ライブラリを使ったのに対し、Composerでは主にパッケージを各プロジェクト配下にインストールして使います。

Linux/Mac OS XでのComposerのインストール

以下のコマンドでインストールできます。

$ curl -sS https://getcomposer.org/installer | php
$ sudo mkdir -p /usr/local/bin
$ sudo mv composer.phar /usr/local/bin/composer

WindowsでのComposerのインストール

https://getcomposer.org/Composer-Setup.exe にインストーラがあるので、ダウンロードして実行してください。

なお、Windowsでのコマンドの実行には、Git for Windows に含まれるGit Bashを使うことをお薦めします。

CodeIgniterのインストール

さて、Composerがインストールできましたので、ここからが本題のCodeIgniterのインストールです。

CodeIgniter 3.0をインストールするには、ターミナルまたはGit Bashから以下のコマンドを実行します。最後のcodeigniterはフォルダ名なので必要なら変更してください。

$ composer create-project kenjis/codeigniter-composer-installer codeigniter

上記のコマンドは、以下を実行します。

  1. プロジェクトのフォルダを作成し、CodeIgniterをComposerでvendorフォルダ以下にインストールする
  2. applicationフォルダをプロジェクトのトップにコピーする
  3. index.phpをpublic/index.phpにコピーする
  4. フォルダ構成の変更に伴うパスの調整とCodeIgniterからComposerのオートローダを使えるように設定する

ここで、インストールされるCodeIgniterは本家の3.0.*です。

フォルダ構成は以下のようになります。

codeigniter/
├── application/
├── composer.json ... Composerの設定ファイル
├── composer.lock ... Composerのロックファイル
├── public/
│   └── index.php
└── vendor/
    └── codeigniter/
        └── framework/
            └── system/

Composerのロックファイルは自動的に生成されるものでインストールされたパッケージのバージョンなどの情報が記録されます。さわってはいけません。また、vendorフォルダ以下にパッケージのソースがインストールされます。vendorフォルダの中もComposerがすべて管理しますので、中のファイルを編集などしてはいけません。

実際にコマンドを実行すると、以下のようにインストールされます。

$ composer create-project kenjis/codeigniter-composer-installer codeigniter
Installing kenjis/codeigniter-composer-installer (v0.4.0)
  - Installing kenjis/codeigniter-composer-installer (v0.4.0)
    Downloading: 100%         

Created project in codeigniter
Loading composer repositories with package information
Installing dependencies (including require-dev)
  - Installing codeigniter/framework (3.0.3)
    Loading from cache

Writing lock file
Generating autoload files
> Kenjis\CodeIgniter\Installer::postInstall
> composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing mikey179/vfsstream (v1.1.0)
    Loading from cache

Writing lock file
Generating autoload files
> Kenjis\CodeIgniter\Installer::showMessage
==================================================
`public/.htaccess` was installed. If you don't need it, please remove it.
If you want to install translations for system messages or some third party libraries,
$ cd <codeigniter_project_folder>
$ php bin/install.php
Above command will show help message.
See <https://github.com/kenjis/codeigniter-composer-installer> for details
==================================================

はい、完了しました。

   - Installing codeigniter/framework (3.0.3)

CodeIgniter 3.0.3がインストールされたことがわかります。

追加コンポーネントのインストール

CodeIgniter本体のインストールはできましたが、本体だけでいいというケースはほとんどないと思います。

もともとCodeIgniterは最小限のパーツしか提供しないので、自分でパーツを足して作り込んでいく感じのフレームワークです。また、日本語サイトには日本語のシステムメッセージが必要です。

ということでその他必要なものを追加でインストールします。

そのためのサンプルのシェルスクリプトがbin/my-codeigniter.shにインストールされています。以下のコマンドで実行できます。

$ cd codeigniter/
$ bin/my-codeigniter.sh

このコマンドは以下をインストールします。これらは、個人的にどんなプロジェクトにも必要そうなものです。

むろん、これはサンプルなので、不要なものはインストールする必要はないですし、必要なコンポーネントなどがあれば、さらに追加することになります。

Roave Security Advisories

Roave Security Advisoriesは、FriendsOfPHP/security-advisories のデータを使い脆弱性のあるパッケージをチェックするものです。

ただし、データは日次更新のようでタイムラグがあり、リアルタイムではありません。

また、パッケージの追加および更新時にのみチェックするもので、composer.lockファイルによりcomposer installする場合にはチェックはされません。インストール後または更新後に脆弱性が報告されたパッケージはそのままデプロイされることになります。

つまり、既知の脆弱性を含むパッケージを確実にデプロイしたくない場合は、デプロイ時にsecurity-checker.pharでチェックする必要があります。

ちなみに、Vulnerability Database - SensioLabs Security Advisories Checker にCodeIgnirer 3.0.2以前を登録しましたので、3.0.2以前を新規でインストールしようとすると、以下のように失敗します。

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - codeigniter/framework 3.0.2 conflicts with roave/security-advisories[dev-master].
    - codeigniter/framework 3.0.2 conflicts with roave/security-advisories[dev-master].
    - codeigniter/framework 3.0.2 conflicts with roave/security-advisories[dev-master].
    - Installation request for codeigniter/framework 3.0.2 -> satisfiable by codeigniter/framework[3.0.2].
    - Installation request for roave/security-advisories dev-master -> satisfiable by roave/security-advisories[dev-master].

Webサーバの起動

モダンPHPには、ビルトインWebサーバがあります(PHP 5.4以降)。以下のコマンドでWebサーバが起動します。

$ bin/server.sh

これで、http://127.0.0.1:8000/ にブラウザでアクセスすれば、お馴染みのCodeIgniterのWelcomeページが表示されます。

CodeIgniterのバージョンアップ

CodeIgniterのバージョンが上がっても、CodeIgniterプロジェクトのトップディレクトリに移動し、以下のコマンドを実行すれば更新できます。

$ composer update

例えば、こんな風に更新されます。

$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Removing codeigniter/framework (3.0.2)
  - Installing codeigniter/framework (3.0.3)
    Loading from cache

Writing lock file
Generating autoload files

ただし、もし、applicationフォルダ内のファイルやindex.phpが変更されている場合は、それらを手動で更新する必要があります。その場合は、ユーザガイドに従って作業してください。

systemフォルダ以下は完全に更新されますので、systemフォルダ以下のファイルを直接変更してはいけません。バージョンアップ時に変更が消えてなくなります。というか、vendorフォルダ以下はComposerが管理するので、ファイルの変更や追加をしてはいけません。

まとめ

  • Composerは、PHPの新しいパッケージ(ライブラリ)管理システムです。
  • CodeIgniter 3.0はComposerでモダンにインストールすることもできます。

関連

Date: 2015/12/06

Tags: codeigniter