インストーラの作り方調査

インストーラを作りたい。
できれば、サーバにソースをアップロード→ブラウザアクセス、一部データ(管理ID,パスワードなど)を入力→実行 で、できるだけ全てが済むようなインストーラを。


基本的なインストーラの作り方の一例を記載した記事を見つけたので、読解しつつ、ポイントまとめ。
Writing an installer for your CakePHP application - cakebaker


上記記事の内容を踏まえて見ると、CroogoやCandyCaneインストーラが、割と容易に理解できました。


基本インストーラについて

フロー要約

1. route.php:app/tmp/以下に”インストール済み”目印のファイルがない場合、以下のinstallerコントローラ実行
2. indexアクション:特に処理なし。インストール開始メッセージ&ボタンでも表示するか?
3. databaseアクション:セットアップSQLを実行。
4. thanksアクション:終了画面表示

良い点
  1. SQLダンプ情報をベースにセットアップできるので、CakeSchemaでNGのENUMやInnoDBもOK。初期値設定もOK。おそらく開発用セットアップSQLをかなり流用できる。
  2. index()〜database()の間に「初期値入力」画面を挟んで値を引き継げば、管理アカウントなどの初期値をユーザ入力で設定可能そう
  3. DBのprefix設定は、database.phpで設定してあればたぶんOK。
要改善点
  1. ”インストール済み”の目印ファイルがapp/tmp以下にあるのはいかがなものか。

tmpディレクトリのファイル=運用中に削除して問題なし であった方がよいと思う。

  1. database.phpは手動で作成の必要あり

Croogo ver1.3のインストーラ

以上を踏まえて、CakePHPベースのインストーラ付きCMS:Croogo(ver.1.3)のソースをみてみました。
Downloads · croogo/croogo · GitHub

Croogoのインストーラは、app/plugin以下にあります。

要約

1. route.php→croogo_route.php:「app/config/以下にsetting.ymlがない場合、installer実行」
2. indexアクション:Viewで、各種設定(tmpディレクトリの権限・configファイル作成済みなど)のチェック&表示
3. databaseアクション:管理アカウント情報(IDとパスワード、DB名)の入力→database.phpを作成
4. dataアクション:セットアップSQLを実行。
4. finishアクション:インストール関連ファイル削除→setting.yml作成→core.phpのsalt自動書き換え→終了画面表示

良い点
  1. インストール済みチェックがtmp以下のファイルではない
  2. database.php自動作成
  3. core.phpのsaltの自動設定
要改善点
  1. setting.yml不要
  2. DBのprefix設定は、デフォルトでは不可。インストール用database.php.installを手動で変更する必要あり。

CandyCaneのインストーラ

CandyCaneは、CakePHPベースのプロジェクト管理システム。Rubyの有名プロジェクト管理ウェア・RedminePHP移植版だそうです。
RedmineをPHPに移植した·CandyCane MOONGIFT


インストーラはCroogoをベースとしているようですが、いくつか違いがあります。
http://thechaw.com/candycane/source/branches/master/app/plugins/install/

良い点
  1. 「インストール済み」判定がdatabase.phpの存在チェック

http://thechaw.com/candycane/source/app/config/routes.php

  1. prefixもユーザ入力で設定OK

CandyCaneのインストーラをベースに実装するのがよさそうです。