読者です 読者をやめる 読者になる 読者になる

肉とビールとパンケーキ by @sotarok

少し大人になった「肉とご飯と甘いもの」

Ethna 2.5.0 stable リリース!

ついに,Ethna 2.5.0 のリリース,2.3.0 から実に3年ぶりのメジャー(いや,マイナーなのか一応)バージョンアップです!

インストールなど

これまで使ってきた方は,

% pear upgrade ethna/ethna

などでアップグレードしてください.
インストールは,

% pear channel-discover pear.ethna.jp
% pear install -a ethna/ethna

もちろん,tar/zipでも入手可能です.

今回のリリースに含まれる変更

以下, sf.jp より引用です.

features
  • フォーム定義に関する変更
    • フォーム定義を動的に変更するためのAPIをさらに追加
    • Ethna_ActionForm#setFormDef_ViewHelper
  • APPID_Controller.php のスケルトンに継承を想定したメソッドを追加
    • skel/app.controller.php _setDefaultTemplateEngin
  • add-project 時の www 以下に出来るエントリポイントから APPID_Controller へのパスを相対パスに変更
  • ethna コマンドの挙動変更
    • add-project -b オプションの挙動変更
    • ethna help コマンドを追加
    • Filterは一貫してプラグインを使うように変更したため、add-project時の app/filter ディレクトリを削除。
  • 指定 Action が存在しない場合、app/action 以下を全て include する仕様を変更
  • controller での smarty_xx_plugin の機能を削除
  • 組み込みの Smarty プラグインの追加
      • modifier_explode (文字列を,ある文字で分割して配列に変換する)
  • 国際化に関する変更
    • デフォルトのタイムゾーンとして、date.timezone を 'Asia/Tokyo' に設定
    • Ethna_I18N クラス に setTimeZone メソッドを追加 (static呼出)
      • PHP 5.1.0 以降でのみ意味がある関数。それ以前では、呼んでもタイムゾーンは設定されません。
  • Ethna_MailSender にて、メール送信に問題がある場合の設定として 'mail_func_workaround' を追加
    • この値を true に設定すると、メールヘッダの改行コードを一律 CRLF にする処理を回避する
    • $mail = new Ethna_MailSender(); $mail->setOption(array('mail_func_workaround')); でも設定可能
  • Smarty の設定(現在はデリミタのみ)を [appid]-ini.php に書くことが出来るようにした
bug fix
  • Ethna_Controller#getTemplatedir を無視してテンプレートディレクトリを決定していたバグを修正(thanks: hiko)
  • "ethna pear-local list -a" の実行結果がエラーになってしまうバグを修正
  • safe-mode が ON の際に、CacheManager_Localfile がディレクトリを生成できないので、tmp ディレクトリ直下にキャッシュファイルを作成するようにした
    • skel/skel.app_manager.php も修正
  • APPID-ini.php が存在しない場合,またはURLが設定にない場合,デフォルトURLが HTTP_HOST で設定されていたが,末尾に / がなかったので修正
  • フォームヘルパで自動的に出力されるhiddenタグの閉じ忘れを修正(thanks: id:syachi5150)
  • ethna add-app-manager コマンドで生成されるファイル名およびクラス名が間違っていたバグを修正(thanks: id:syachi5150)
  • Validatorが出力するメッセージからフォーム名の後ろのスペースを削るように修正。(thanks: id:syachi5150)
  • Smarty 拡張プラグインの wordwrap_i18n にアルファベットのみを渡した場合に正しい結果が返らないバグを修正
  • ethna add-test コマンドのヘルプが機能していなかったバグを修正
  • 存在しない(or 削除された) ethnaコマンドを指定すると Fatal Error が起きるバグを修正 (thanks:kondo_)
  • Ethna_Plugin_Logwriter の debug_backtrace の一部が取得できず、E_NOTICE が出るバグを修正 (thanks: http://www.remix.gr.jp/)
  • cli 環境で Ethna_Session::start を叩いたときに $_SERVER 変数がないために E_NOTICE が出る問題を修正
  • PHP 5.3.0 で新設された E_DEPRECATED を ON にすると Fatal Error が起きるバグを修正 (#18418)
  • iniディレクティブ date.timezone が設定されてないために、E_WARNING が PHP 5.3.0 で出ていたバグを修正
  • Smartyのデリミタを変更している場合にi18nコマンドが機能しないバグを修正 (#18668)
  • formタグのname属性が設定できなくなっていたバグを修正 (thanks: shutta) (#19037)
  • Ethna_Session#isAnonymous メソッドが状態を正しく取得できない場合があるバグを修正(thanks:longkey1)
  • Ethna_ActionForm::setDef に渡す値によっては、空キーにフォーム定義が入ってしまうバグを修正。(thanks:tohokuaki #18856)
変更履歴 (Ethna - 2.5.0) - Ethna - SourceForge.JP

見所

UTF-8

まずなんと言ってもこれですね.
EthnaEUC-JP で書かれていて,これまでも多くのユーザによって様々なハック方法が提供されてきたわけですが,2.5.0 から,ようやくすべてのコードベースが UTF-8 となり,また,クライアントエンコーディングを変更する方法も提供されるようになりました.

それだけの話で特筆すべきところはないのですが(w),古い慣習からの脱却,国際化対応などへの布石としてこの変更は最も重要な物となります.

国際化対応

そういうわけで,プロジェクトの国際化ができるようになりました.
方法としては,

  • ini を利用し,日本語と英語などを結びつける言語テーブルを作成する
  • gettext を使う (po, mo)

の2種類が提供されます.

前者は,gettext の入っていない環境を考慮した方法で,簡易的には,これで国際化ができるようになりました.
後者を利用する場合,

  • etc/APPID-ini.php にて, gettext を使うことを設定
  • ethna i18n コマンドでテンプレート中の国際化の必要なメッセージの抜き出し
  • 翻訳作業
  • msgfmt コマンドでメッセージカタログを作成する

といった作業が必要となります.

ActionForm 動的定義変更 / 多次元配列対応

かねてから,「DBに入って居る値をもとにしてForm定義を動的に変更する」などの用途で, ActionForm の定義変更については多くの議論がされてきましたが,こちらも,API が提供され,容易に定義変更ができるようになりました.
Form Helper を利用する際にも対応することができます.


また,JSの都合や様々な理由で,Form 定義を配列にしたい場合があると思いますが,そういった定義ができるようになりました.

リリースの経緯など

Ethna 2.5.0 は長いことプレビュー版を提供しながら開発をすすめてきました.(僕が開発に参加したときにも,すでに Ethna 2.5.0 preview 2 が存在していました)
実験的な機能を含め,様々な変更が加えられられてきました.そうこうしているうちに, PHP 本家は 5.3 がリリースされ,Ethna を取り巻く環境も変わりつつあることは否定することはできなくなりました.

このまま 2.5 系に,多くの下位互換の無い機能を含めて開発を進めるよりも,一旦「PHP 4 に対応した最後のバージョン」として,preview版に含まれていたいくつかの下位互換の無い機能を除いたものを Ethna 2.5.0 を stable としてリリースし,それ以降を 3.0 系として開発を進めることが良いのではないか,ということになりました.
(preview のついたバージョンを仕事で使えない,といった話がされていた,というのも事実ですし)

従って,

  • これをもって Ethna 2.3 系のサポートは終了
  • Ethna 2.5.0 系は,最後の PHP 4 対応版とし,今後は,バグ・セキュリティフィックスのみを行う
  • 今後の多くの新しい機能は PHP 5 系を対象とした Ethna 3.0 系として開発を続ける

こととなりました.

開発のメインストリームは 3.0 系へ

ということなので,Ethna 2.5 の preview 5 以降に含まれる,外部プラグインの読み込みに関する変更や,汎用View に関する変更は今回のリリースには含まれません.
これらは,Ethna 3.0 preview 版が出るときに含まれる予定です.AppObject (ORM) の書き直しもなされ,僕の手がけてきたプラグイン周りの大きな変更もこれ移行に含まれて行く予定です.

おわりに

リリースにあたって,多くの時間と労力をさいてきてくれた mumumu さんに感謝です!
また,僕もこれからも出来る限りのことをしていくつもりでいます.

これからも是非是非 Ethna をよろしくお願いします.

おまけ

1000 コミット目,ゲットしました(`・ω・´)
コミットといっても,Git になって以来は,push ですが.(CVS, Subversion のコミットと Git の push をあわせて 1000に到達しました.やったねEthna!w)

なんか感慨深いですね.
でもまあ,まだまだまだまだなところばかりなので,まだまだもっと活発にしていきたいと思います.