Ethnam v3をリリースしました

# Ethnamとは

https://github.com/ethnamphp/ethnam

Ethnaをforkした後継プロジェクトです。
"m"はminusのmで、Ethnaをより軽量にして小さくするのを狙いとしています。


開発者は私DQNEOです。

# 実際に使われているのか？
私がプロダクション環境で実運用しており、約7年の利用実績があります。
ちなみに私以外では「利用を検討している」というお声をいただいたことはありますが実際に使っているというのは聞いたことがないので、事実上オレオレフレームワークに等しいです。

# モダンPHP環境で動く
PHP 5.4, 5.5, 5.6で動きます。

packagistにあげているのでcomposer installでインストールできます。

名前空間を使っていないのでグローバル空間を汚染します。
しかし、今どきの世の中の良い子ライブラリちゃんたちは皆それぞれの名前空間に収まってくれているので、衝突する可能性はほとんどありません(ドヤァ

# Ethnaと何が違うのか？
Ethna 2.5との後方互換をかなり重視しているのでEthna2.5との違いは少ないです。
強いていえばEthnaから余分な機能を削除したのでソースコードが減っています。


以下、Ethna2.5からどのように変わったのか、CHANGES.mdからそのまま転記してみます。

https://github.com/DQNEO/ethnam/blob/master/CHANGES.md


# 変更点一覧
(注：バージョニングは大人の事情でsemanticにはなっておりません)

## 3.0での変更点
* [core] `ethna`コマンド一式(Ethna_Comman, Subcommandプラグイン, Generatorプラグイン, 全skelファイル)をethnam-generatorパッケージに分離。`ethnam-generate`コマンドに名称変更。
<blockquote class="twitter-tweet" lang="en"><p lang="ja" dir="ltr">モノリシックだったEthnamを、疎結合な３つのパッケージに分離しました。これはSymfony哲学から学んだ成果です。 <a href="http://t.co/XulvjNR173">pic.twitter.com/XulvjNR173</a></p>&mdash; ₍₍⁽⁽(ી(ˇωˇ)ʃ)₎₎⁾⁾ (@DQNEO) <a href="https://twitter.com/DQNEO/status/612559664572600320">June 21, 2015</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

ソースコードジェネレータを分離するというアイデアは、nodejsのexpress4インスパイアです。ありがとうありがとう。

* [core] Ethna_ControllerのcheckAppId, checkActionName, checkViewNameを`ethnam-generator`に移管。

## 2.23での変更点
* [core]`ethna`コマンドを修正。add-projectが動くようになりました。
* [view] Smarty3のサポートを廃止
* [core] Smarty2.6を同梱するのをやめて、composer経由でインストールする方式に変更
* [core] miscディレクトリを削除
* [document] インストール・プロジェクト作成方法をちゃんと動く形で明記しました。

## 2.22での変更点
* [session] `$_GET`,`$_POST`からセッションIDを受け取らないようにしました。
* [session] check_remote_addr機能を廃止しました。
* [core] ActionClassのpreloadPlugin機能を廃止しました。

## 2.21での変更点
* [core]Ethna_Controller::getClientEncoding -> Ethna_Controller::getEncoding にリネームしました。

## 2.20での変更点
* [core] 文字コードをUTF-8のみサポートするようにしました。
* [core] EUC_JP用の文字列長バリデーション(strmaxcpmat, strmincompat)は廃止しました。文字列バリデーションにおけるmin/maxはmbstrmin/mbstrmaxと等価になります。
* [core] mbregexpバリデータを廃止しました。

## 2.19での変更点
* [core] mbstringモジュールを必須要件としました。
* [core] system_encoding変数は使われていなかったので廃止しました。
* [core] その他、language/encodingまわりの無駄なメソッドを削除しました。
* [mail] (B.C.) MailSenderがcharset=utf8でメール送信するようになりました。内部エンコーディングがUTF-8になっているのを前提としています。

## 2.18での変更点
* [core] ethna.sh周りをシンプル化。ethna_handle.phpをcommand.phpにリネームし、中身をEthna_Commandクラスに移動。
* [plugin] PEARのパッケージを管理する機能を削除
* [plugin] クラス名がわかりにくかったので変更('Handle' -> 'Subcommand')
* [test] Travis-ci を使うようにしました。
* [core] class/ ディレクトリを廃止しました。(B.C.)


## 2.17での変更点
* [core]「アクション定義」機能を廃止しました。古い仕組みでほとんど使われていなかったため。( #21 )

## 2.16への変更点
* [core] ActionFormで、$form_templateと$formをマージするロジックを変更しました。( #20 )

## 2.15への変更点
* [i18n] バリデーションエラーメッセージで、form_nameにi18n変換が適用されるようになりました。
* [i18n] form_submitのvalueでi18n変換が適用されるようになりました。

## 2.14への変更点
* [config] 設定ファイル名を`{$appid}-ini.php`から`config.php`に変更しました。

## 2.13への変更点
* [log] ログファイル名のデフォルトを`{$appid}.log`から`app.log`に変更しました。
* [core] クラスファイルの置き場所のディレクトリを`class`から`src`に変更しました。(PSR4に準拠させるための準備)
* [core] Packagistに公開しました！

## 2.12への変更点
* [core] composerでインストールできるようになりました。
* [core] PHP5.3のサポートを廃止しました。
* [i18n] Form定義の'name'がバリデーションエラーの際にi18n適用されるようになりました。
* [i18n] Form定義の'option'でi18n変換が適用されるようになりました。


## 2.11への変更点

* Managerを$weak=trueで呼び出す機能を削除しました。
* Managerを自動でincludeしなくなりました。自前でオートロードしてください。
* Ethna_MailSenderのpreg_replace eを修正しました。

## 2.10への変更点

* RendererクラスでSmartyをロードしなくなりました。Appid_ControllerでSmartyをrequireするか、自前でオートロードしてください。
* SOAP Gatewayを廃止しました。
* Ethna_DB_PEARを廃止しました。
* Ethna_Controllerでpreg_matchがPHP5.5でDEPRECATEDになるのを修正しました。

## 2.9への変更点

* Backend#performを Controller#performへ引っ越ししました。
* ActionClassからViewClassにパラメータを渡す機能を廃止しました。
* E_DEPRECATED エラーを拾えるようにしました。(E_USER_DEPRECATEDについては未対応)
* Smarty のi18n modifierで引数を渡してsprintf的に使えるようになりました。(see Plugin/Smarty/modifier.i18n.php)
* GATEWAY_XMLRPCを廃止。
* UnitTestMamger, InfoMangerを廃止
* インストール方法をREADME.mdに書きました。

## 2.8への変更点

* AppObject, AppSQL, AppSearchObjectを廃止しました。[[e871a1a](https://github.com/DQNEO/ethnam/commit/e871a1addafae0314bd62dfc8a3e209359ac4a2f)]
* Windowsサポートを廃止しました。[[4ec5802](https://github.com/DQNEO/ethnam/commit/4ec580224232122b29a2a9ccf5824bf8d985f424)]

## Ethna 2.6(beta4)からEthnam 2.7への変更点

* コア
 * PHP5.4に対応しました。(主な変更はhtmlspecialcharsの第三引数です。)
 * インストール方法が変わりました。(pear installはできなくなりました。)
 * 主なプロパティ・メソッドでprivate,protected だったものをpublicにしました。これはEthna2.5との後方互換を確保するためです。
 * ActionFormの配列バリデーション, {form ..}, {form_input ..},などの仕様を古い(2.3.5あたり?)状態に戻しました。 [cc6d63e](https://github.com/DQNEO/ethnam/commit/cc6d63eae1a615b3868e309ff53fd77414bbd4c7)
 * bin/ethna.batを廃止しました。今後、Windowsは推奨環境から外れます。
 * PHP4の名残であった参照の&を除去しました。
 * EthnaManagerを廃止しました。
 * `__ethna_info__`, `__ethna_unittest__`を廃止しました。
 * 設定ファイル(etc/{appid}_ini.php)が存在しないときに自動で作成する機能を廃止しました。
 * 雑多なコンテンツファイルを補完するためのresourcesディレクトリを追加
 * Ethna本体がinclude_pathに置いてなくても(なるべく)大丈夫なように改善しました。
* プラグインまわり
 * Puginの命名規則を2.5に近い状態に戻しました。プラグインのクラス名で2.5と同じようにAppIDが使えます。(例：Project_Plugin_Cachemanager_Memcache)
 * extlibを廃止しました。
 * Ethna_Plugin_Abstractを廃止しました。これによりプラグインの基底クラスはなくなりました。
 * CacheManager_LocalFileでsafeモードを無視するようにしました。
* ログ関連
 * Ethna_ActionError#AddError()した際のログ出力をLOG_NOTICE -> LOG_INFO に変更しました。
 * ADODBのログ出力処理をオーバーライドできるようにしました。(`ethna_adodb_logger`というグローバル関数内で処理がべた書きされていたのを改善)
 * ログファイルにメモリ使用量を記録するようにしました。
 * ログファイルに現在時刻をミリ秒単位まで記録するようにしました。
 * Validationのログをもう少し詳細に出すようにしました。
* テンプレート関連
 * HTML5の`<input type="email">`に対応しました。(あくまで当座しのぎ的)
* セッション関連
 * check_remote_addrをデフォルトで無効にしました。
* その他
 * `adodb/adodb.inc.php`をEthna側でrequireしなくなりました。(アプリケーション側でrequire_onceする必要があります。)
* テスト関連
 * UnitTestManagerを廃止しました。

# 今後の予定
* PHP7に対応したい
* もっと小さくしたい