ethnam / generator
code generator for Ethnam
Requires
- php: >=5.4.0
- ethnam/getopt: 1.*
Requires (Dev)
- phpunit/phpunit: 3.7.*
README
Ethnamのコードジェネレータ
Ethnam では、プロジェクトの作成から、作成されたプロジェクトに関わる様々な操作を ethna コマンドと呼ばれるコマンドラインから行えるようになっています。
ethna コマンドには様々なサブコマンドが用意されており、プロジェクトに対する様々な操作が行えます。このページでは、ethnaコマンドで出来ることをリファレンスとして紹介します。
- ethnaコマンドリファレンス
- プロジェクトの作成
- add-project コマンド
- アクション, ビューの追加など
- add-action コマンド
- add-view コマンド
- add-template コマンド
- add-entry-point コマンド
- アプリケーションオブジェクト、マネージャの追加
- add-app-manager コマンド
- 国際化(i18n)
- i18n コマンド
- テストケースの追加
- テストケース追加に当たっての注意
- add-action-test コマンド
- add-view-test コマンド
- add-test コマンド
- PEAR パッケージ管理
- pear-local コマンド
- プラグイン関連
- list-plugin コマンド
- install-plugin, upgrade-plugin コマンド
- uninstall-plugin コマンド
- info-plugin コマンド
- channel-update コマンド
- make-plugin-package コマンド
- その他
- clear-cache コマンド
- プロジェクトの作成
- ethna コマンドを拡張する
- Ethna_Handle について
| いちい | - | 新規作成 | | mumumu | 2008-07-30 | 最新の状態を反映 | | DQNEO | 2010-05-23 | アクション名指定の際の大文字小文字の違いを解説 |
プロジェクトの作成
add-project コマンド
(使い方)
$ ethna add-project [-b|--basedir=dir] [-s|--skeldir]
[-l|--locale] [-e|--encoding] [Application id]
プロジェクトと、それに付随する必須ファイルを自動生成します。作成しようとした先に、既に同名のプロジェクトが存在する場合は、不足しているファイルのみ作成されます。[Application id](アプリケーションID) の指定が最低限必要です。
オプションは以下の通りです。
-
[-b|--basedir]
- プロジェクトを作成するディレクトリを指定します。
- ここで指定されたディレクトリ下に、[Application id] で指定されたディレクトリが作成されます。
- デフォルトはカレントディレクトリです。
-
[-s|--skeldir]
- Ethnaは自動生成されるファイルのスケルトンを持っており、それに基づきプロジェクトを生成します。このオプションでディレクトリを指定すると、そこにあるスケルトンファイルが優先されます。
- ファイル名は Ethna本体の skelディレクトリ にあるものと同じでなければなりません。
- このオプションはスケルトンを改造していた場合に有用です。
-
[-l|--locale] (2.5.0 preview1以降)
- ロケール(言語や文化の規則)を指定します。
- デフォルトはja_JPです。
- 言語とエンコーディングの設定 も参照して下さい
-
[-e|--encoding] (2.5.0 preview1以降)
- プロジェクトで使用するエンコーディングを指定します。
- デフォルトはUTF-8です。
- 言語とエンコーディングの設定 も参照して下さい
-
[Application ID]
- アプリケーションIDです。最低限これだけは指定して下さい。
- 大文字小文字は区別されません。
- 自動生成されるファイルの都合上、先頭に数値を指定してはいけません。
アクション, ビューの追加など
add-action コマンド
(使い方)
$ ethna add-action [-b|--basedir=dir] [-s|--skelfile=file]
[-g|--gateway=www|cli|xmlrpc] [-w|--with-unittest]
[-u|--unittestskel=file] [action]
アクションをプロジェクトに追加します。オプションは以下の通りです。
-
[-b|--basedir]
- アクションを追加したいプロジェクトのあるディレクトリを指定します。
- 省略時は、現在のディレクトリから親ディレクトリをたどってプロジェクトを自動的に探索します。
-
[-s|--skelfile=file]
- アクションファイルを生成する元となるスケルトンファイルを指定します。相対/絶対パスが指定できます。
- 指定されたファイルが見つからないときはアプリケーションのskelディレクトリ、Ethna本体のskelディレクトリを順に探します。
- 省略時は、gatewayの指定に従い、プロジェクトのskel/skel.{action,actio_cli,action_xmlrpc}.phpが使われます。
- このオプションはスケルトンを改造していた場合に有用です。
-
[-g|--gateway=www|cli|xmlrpc]
- アクションのゲートウェイを指定します。
- それぞれaction, action_cli,action_xmlrpcディレクトリの下にアクションが追加されます。
- 省略時は www が指定されたものとみなされます。
-
[-w|--with-unittest] (2.3.5 以降)
- ユニットテストファイルを同時に生成します。
- add-action-test を同時に実行したことと同じです。
-
[-u|--unittestskel=file] (2.3.5 以降)
- ユニットテストファイルを作るときのスケルトンを指定します。
- -w オプションが指定されない場合は、このオプションは無視されます。
-
[action]
- アクション名を指定します。最低限これだけは指定して下さい。
-
【補足1】"add-action Foo_Bar"と "add-action foo_bar"の違い
- 生成されるファイル名・クラス名は同じです。
- performのreturn値は異なります。( 'Foo_Bar' と 'foo_bar' )
- どちらの形式でも可能ですが、add-view, add-templateする際は、同じ形式で入力する必要があります。
-
【補足2】"add-action Foo_Bar"と "add-action FooBar"の違い
- 生成されるファイル名は異なります。( 'Foo/Bar.php' と 'FooBar.php' )
- 生成されるクラス名は同じです。
- performのreturn値は異なります。( 'Foo_Bar' と 'FooBar' )
add-view コマンド
(使い方)
$ ethna add-view [-b|--basedir=dir] [-s|--skelfile=file]
[-w|--with-unittest] [-u|--unittestskel=file]
[-t|--template] [-l|--locale] [-e|--encoding] [view]
ビューをプロジェクトに追加します。オプションは以下の通りです。
-
[-b|--basedir]
- ビューを追加したいプロジェクトのあるディレクトリを指定します。
- 省略時は、現在のディレクトリから親ディレクトリをたどってプロジェクトを自動的に探索します。
-
[-s|--skelfile=file]
- ビューファイルを生成する元となるスケルトンファイルを指定します。相対/絶対パスが指定できます。
- 指定されたファイルが見つからないときはアプリケーションのskelディレクトリ、Ethna本体のskelディレクトリを順に探します。
- このオプションはスケルトンを改造していた場合に有用です。
-
[-t|--template]
- ビューと同じ名前のテンプレートを追加します。add-templateを同時に実行したのと同じです。
-
[-w|--with-unittest] (2.3.5 以降)
- ユニットテストファイルを同時に生成します。add-view-test を同時に実行したことと同じです。
- -t オプション を指定した場合は、この指定は無視されます。
-
[-u|--unittestskel=file] (2.3.5 以降)
- ユニットテストファイルを作るときのスケルトンファイルを指定します。
- -t オプション を指定した場合は、この指定は無視されます。
-
[-l|--locale] (2.5.0 preview1以降)
- ロケール(言語や文化の規則)を指定します。
- デフォルトはja_JPです。
- これにより、プロジェクトのテンプレートディレクトリ以下に、指定したロケール名のディ
レクトリが作られます。 - -t オプションを指定したときのみ意味を持ちます。
- 言語とエンコーディングの設定 も参照して下さい
-
[-e|--encoding] (2.5.0 preview1以降)
- プロジェクトで使用するエンコーディングを指定します。
- デフォルトはUTF-8です。
- meta タグで指定するエンコーディングを指定する意味しかありません。
- -t オプションを指定したときのみ意味を持ちます。
-
[view]
- 追加したいビュー名を指定します。最低これだけは指定して下さい。
-
【補足1】"add-view Foo_Bar"と "add-view foo_bar"の違い
- 挙動は全く同じです。ただし、-tオプションをつけると、tplファイル名が異なります。(後述)
-
【補足2】"add-view Foo_Bar"と "add-view FooBar"の違い
- 生成されるファイル名は異なります。( 'Foo/Bar.php' と 'FooBar.php' )
- 生成されるクラス名は同じです。
add-template コマンド
(使い方)
$ ethna add-template [-b|--basedir=dir] [-s|--skelfile=file]
[-l|--locale] [-e|--encoding] [template]
テンプレートファイルを追加します。オプションは以下の通りです。
-
[-b|--basedir]
- テンプレートファイルを追加したいプロジェクトのあるディレクトリを指定します。
- 省略時は、現在のディレクトリから親ディレクトリをたどってプロジェクトを自動的に探索します。
-
[-s|--skelfile=file]
テンプレートファイルを生成する元となるスケルトンファイルを指定します。相対/絶対パスが指定できます。- 指定されたファイルが見つからないときはアプリケーションのskelディレクトリ、Ethna本体のskelディレクトリを順に探します。
- このオプションはスケルトンを改造していた場合に有用です。
-
[-l|--locale] (2.5.0 preview1以降)
ロケール(言語や文化の規則)を指定します。- デフォルトはja_JPです。
- これにより、プロジェクトのテンプレートディレクトリ以下に、指定したロケール名のディ
レクトリが作られます。 - 言語とエンコーディングの設定 も参照して下さい
-
[-e|--encoding] (2.5.0 preview1以降)
プロジェクトで使用するエンコーディングを指定します。- デフォルトはUTF-8です。
- meta タグで指定するエンコーディングを指定する意味しかありません。
-
[template]
- 追加したいテンプレート名を指定します。最低これだけは指定して下さい。
-
【補足】"add-template Foo_Bar"と "add-template foo_bar"の違い
- 生成されるファイル名は異なります。( 'Foo_Bar' と 'foo_bar' )
- アクションクラスのprepare/performが返す文字列と完全一致している必要があります。
add-entry-point コマンド
(使い方)
$ ethna add-entry-point [-b|--basedir=dir] [-s|--skelfile=file]
[-g|--gateway=www|cli] [action]
エントリポイントと対応するアクションを追加します。エントリポイントは、wwwディレクトリに置かれ、コントローラーを呼び出す役割を果たします。
オプションは以下の通りです。
-
[-b|--basedir]
- エントリポイントを追加したいプロジェクトのあるディレクトリを指定します。
- 省略時は、現在のディレクトリから親ディレクトリをたどってプロジェクトを自動的に探索します。
-
[-s|--skelfile=file]
- エントリポイントを生成する元となるスケルトンファイルを指定します。相対/絶対パスが指定できます。
- 指定されたファイルが見つからないときはアプリケーションのskelディレクトリ、Ethna本体のskelディレクトリを順に探します。
- このオプションはスケルトンを改造していた場合に有用です。
-
[-g|--gateway=www|cli]
アクションのゲートウェイを指定します。- それぞれaction, action_cli ディレクトリの下にアクションが追加されます。
- 省略時は www が指定されたものとみなされます。
-
[action]
追加したいエントリポイントで起動するアクション名を指定します。- 例えばgatewayにwww を指定した状態で "admin" を指定すると、エントリポイントとしてadmin.phpが作られ、続けてadminアクションが追加されます。
アプリケーションオブジェクト、マネージャの追加
add-app-manager コマンド
(使い方)
$ ethna add-app-manager [-b|--basedir=dir] [app-manager name]
アプリケーションマネージャを追加します。オプションは以下の通りです。
-
[-b|--basedir]
- アプリケーションマネージャを追加したいプロジェクトのあるディレクトリを指定します。
- 省略時は、現在のディレクトリから親ディレクトリをたどってプロジェクトを自動的に探索します。
-
(現在のところskelfileを指定することはできません。)
-
[app-manager name]
- アプリケーションマネージャ−名。最低これだけは指定して下さい。
国際化(i18n)
i18n コマンド
この機能を使うには、Ethna 2.5.0 preview2 以降が必要です
(使い方)
$ ethna i18n [-b|--basedir=dir] [-l|--locale=locale] [-g|--gettext] [extdir1] ...
プロジェクト内部のPHPスクリプト(テストスクリプトは除く)、テンプレートファイルを全て調べ、翻訳の対象となるメッセージを全て抜きだし、メッセージカタログの雛形を自動生成します。 実際に調べられ、抜き出されるメッセージは、以下の部分が対象になります*1
1. app ディレクトリ内のPHPスクリプトの、_et 関数の呼び出し箇所全て
2. app ディレクトリ内の ActionForm のフォーム定義のうち、以下の部分
a) name
b) required_error
c) type_error
d) min_error
e) max_error
f) regexp_error
3. template ディレクトリ内の、i18n修正子の呼び出し箇所全て
既に[ini|po]ファイルが存在していた場合、iniファイル(デフォルト) の場合は 自動的に既にある翻訳をマージしてファイルを上書きします。gettext([-g|--gettext] を指定)の場合は、別に新しいファイルを作成し、古いファイルはそのままにします。
コマンドのオプションは以下の通りです。
- [-b|--basedir=dir]
- プロジェクトのあるディレクトリを指定します。
- 省略時は、現在のディレクトリから親ディレクトリをたどってプロジェクトを自動的に探索します。
- [-l|--locale=locale]
- 生成したいカタログのロケールを指定します。
- デフォルトは ja_JP です。
- 実際のカタログは [appid]/locale/[指定したロケール名]/LC_MESSAGES/[指定したロケール名].[ini|po] に作られます。デフォルトでは ini ファイルが生成されます。
- [-g|--gettext]
- gettext を使う場合、このオプションを指定します。
- このオプションを指定すると、デフォルトの iniファイルではなく、po ファイルが自動生成されます。
- 生成された po ファイルに対して、xgettext や msgmerge コマンドを使用して mo ファイルを生成するのはユーザの責任です。
- [extdir1] [extdir2] ...
- デフォルトでは プロジェクト内の app ディレクトリ内と、templateディレクトリしか調べられませんが、任意のディレクトリをコマンドの最後に追加できます。
- ここで指定したディレクトリ内のファイルは、PHPスクリプトの _et 関数の呼び出ししか解釈されません
テストケースの追加
テストケース追加に当たっての注意
Ethna 2.3.5 以降では、作成したテストはデフォルトで失敗するようになっています。要するに「作った以上、テストを書いて下さいネ」ということです。
add-action-test コマンド
(使い方)
$ ethna add-action-test [-b|--basedir=dir] [-s|--skelfile=file] [action]
指定されたアクションのテストスクリプトを追加します。
対応するアクションがまだ作成されていない場合には警告が生成されるので注意して下さい。
オプションは以下の通りです。
- [-b|--basedir]
- アクションのテストを追加したいプロジェクトのあるディレクトリを指定します。
- 省略時は、現在のディレクトリから親ディレクトリをたどってプロジェクトを自動的に探索します。
- [-s|--skelfile=file]
- アクションのテストを生成する元となるスケルトンファイルを指定します。相対/絶対パスが指定できます。
- 指定されたファイルが見つからないときはアプリケーションのskelディレクトリ、Ethna本体のskelディレクトリを順に探します。
- このオプションはスケルトンを改造していた場合に有用です。
- [action]
- 作成するテストのアクション名を指定します。最低これだけは指定して下さい。
add-view-test コマンド
(使い方)
$ ethna add-view-test [-b|--basedir=dir] [-s|--skelfile=file] [view]
指定されたビューのテストスクリプトを追加します。
対応するビューがまだ作成されていない場合には警告が生成されるので注意して下さい。
オプションは以下の通りです。
- [-b|--basedir]
- ビューのテストを追加したいプロジェクトのあるディレクトリを指定します。
- 省略時は、現在のディレクトリから親ディレクトリをたどってプロジェクトを自動的に探索します。
- [-s|--skelfile=file]
- ビューのテストを生成する元となるスケルトンファイルを指定します。相対/絶対パスが指定できます。
- 指定されたファイルが見つからないときはアプリケーションのskelディレクトリ、Ethna本体のskelディレクトリを順に探します。
- このオプションはスケルトンを改造していた場合に有用です。
- [view]
- 作成するテストのビュー名を指定します。最低これだけは指定して下さい。
add-test コマンド
(使い方)
$ ethna add-test [-b|--basedir=dir] [-s|--skelfile=file] [name]
一般的なテストスクリプトを追加します。アプリケーションマネージャー等、アクションやビュー以外のテストケース作成に使います。
オプションは以下の通りです。
- [-b|--basedir]
- テストを追加したいプロジェクトのあるディレクトリを指定します。
- 省略時は、現在のディレクトリから親ディレクトリをたどってプロジェクトを自動的に探索します。
- [-s|--skelfile=file]
- テストを生成する元となるスケルトンファイルを指定します。相対/絶対パスが指定できます。
- 指定されたファイルが見つからないときはアプリケーションのskelディレクトリ、Ethna本体のskelディレクトリを順に探します。
- このオプションはスケルトンを改造していた場合に有用です。
- [name]
- 作成するテスト名を指定します。最低これだけは指定して下さい。
その他
clear-cache コマンド
(使い方)
$ ethna clear-cache [-b|--basedir=dir] [-a|--any-tmp-files]
[-s|--smarty] [-p|--pear] [-c|--cachemanager]
アプリケーションのキャッシュファイルを削除します。
- [-s|--smarty]
- smartyのキャッシュ、コンパイル済みファイルを削除
- [-c|--cachemanager]
- Cachemanager_Localfileが作るキャッシュファイルを削除します。デフォルトではアプリケーションの tmp/.cache/ 以下のファイルです。
- [-p|--pear]
- ethnaコマンドで使っているpearチャンネル関連のキャッシュを削除します。
- [-a|--any-tmp-files]
- アプリケーションの tmp/ 以下のファイルをすべて削除します。
ethnam-generator コマンドを拡張する
ethnam-generator
コマンド及びサブコマンドは、本パッケージ配下のクラス群によって実現さられています。
挙動を変更したい・独自コマンドを実装したい場合は本レポジトリをforkしてお好きなものを作るよいでしょう。
Ethnam本体は、ethnam-generator
がなくても動きます。
Ethnam\Generatorの実装について
Ethnam\Generator はEthnam本体からは独立したパッケージです。
ethnam-generatorコマンド内でEthna_Controllerのインスタンスが作られます。
Ethna本体のディレクトリやアプリケーションのディレクトリに何か指示をするときは、いったん以下のメソッドで各コントローラを取得し、$ctl->getDirectory('tmp')とかするといいと思います。
- getEthnaController()
- Ethna_Controllerのインスタンスを取得します。これはEthna本体のEthna_Controller.phpで定義されたEthna_Controllerそのものです。
- getAppController($app_dir)
- 指定されたディレクトリからアプリケーションのコントローラをさがし、そのインスタンスを返します。
*1フォーム定義を調べるのは、フォーム定義はメンバ変数であり、その初期化は定数でなければならないことから、これを関数定義の戻り値で初期化するとFATAL ERRORになるためです