第46回PHP勉強会@関東でLT「つらくないコードを書こう」という題でlimonadeの話をしてきました。
LT資料
http://www.slideshare.net/sanemat/20090930-phpstudy-limonade
デモ用コード
http://github.com/sanemat/ktsukishima/tree/phpstudy46
参加者のみなさんとust越しに見てくださった方には段取り含めた不手際でごめんなさいというしかない発表でした。でも後悔せずにまたやります。ありがとうございました。
以下デモでやりたかったことをまとめておきます。
デモでやりたかったこと
想定
http://example.com/
のドキュメントルート
/home/foo/app/public/
目標
サブディレクトリ下に携帯3キャリア対応のページを作成
ただし、ライブラリなど余計なファイルはドキュメントルート下におかないこと
http://example.com/limonade/
事前確認
下記ファイルを編集してapacheとvirtualhostが設定済みか確認
/home/foo/app/public/index.html
ファイル確認
$ cd /home/foo/app
$ ls -R
.:
public./public:
index.html
この時点では./public/index.htmlのみ。
git clone
/home/foo/app/
下にlimonade+ライブラリ+サンプルファイルのlimonadeディレクトリを作る
$ git clone git://github.com/sanemat/ktsukishima.git limonade
Initialized empty Git repository in /home/foo/app/limonade/.git/
remote: Counting objects: 148, done.
remote: Compressing objects: 100% (74/74), done.
remote: Total 148 (delta 51), reused 146 (delta 50)
Receiving objects: 100% (148/148), 156.50 KiB | 150 KiB/s, done.
Resolving deltas: 100% (51/51), done.
limonadeディレクトリが出来たのでそこに移動
$ cd limonade
phpstudy46タグが振ってあるので、チェックアウト
$ git checkout phpstudy46
Note: moving to "phpstudy46" which isn’t a local branch
If you want to create a new branch from this checkout, you may do so
(now or later) by using -b with the checkout command again. Example:
git checkout -b <new_branch_name>
HEAD is now at e3d6438… delete initial files
一階層上に戻る
$ cd ..
以下のファイルがgitリポジトリから引っ張ってこられた
$ ls -R
.:
limonade public
./limonade:
lib public vendor views
./limonade/lib:
AUTHORS-limonade LICENSE-limonade limonade.php
./limonade/public:
index.php sample.css
./limonade/vendor:
HTML LICENSE-HTML_CSS_Selector2XPath Net PEAR.php Text
./limonade/vendor/HTML:
CSS CSS.php Common.php
./limonade/vendor/HTML/CSS:
Error.php Mobile.php Selector2XPath.php
./limonade/vendor/Net:
UserAgent
./limonade/vendor/Net/UserAgent:
Mobile Mobile.php
./limonade/vendor/Net/UserAgent/Mobile:
Common.php DoCoMo EZweb.php NonMobile.php Willcom.php
Display.php DoCoMo.php Error.php SoftBank.php
./limonade/vendor/Net/UserAgent/Mobile/DoCoMo:
ScreenInfo.php
./limonade/vendor/Text:
Pictogram
./limonade/vendor/Text/Pictogram:
Mobile Mobile.php
./limonade/vendor/Text/Pictogram/Mobile:
Common.php Docomo.php Exception.php Ezweb.php Nonmobile.php Softbank.php data
./limonade/vendor/Text/Pictogram/Mobile/data:
docomo_convert.json ezweb_convert.json softbank_convert.json
docomo_emoji.json ezweb_emoji.json softbank_emoji.json
./limonade/views:
layout.default.html.php qa_how_to_start.html.php
./public:
index.html
ちなみにこのlimonade本体は0.4のブランチにauto_globals_jit onでも動作するパッチをあてたもの
またディレクトリ構成をフレームワーク付属のものとは変えています
limonade
まだここには何もない
http://example.com/limonade/
ドキュメントルートに移動
$ cd /home/foo/app/public/
追加アプリのpublicディレクトリにシンボリックリンクを張る
$ ln -s ../limonade/public limonade
Hello limonade!
http://example.com/limonade/
How to Start limonade?
http://example.com/limonade/?/how_to_start/
$ cd /home/foo/app/limonade
$ vi views/qa_how_to_start.html.php
before(), after() で分かりやすいフック
limonade/public/index.php
のbefore(), after() の記述によって
テンプレート内では$emoji変数でdomomoの基本絵文字が3キャリア互換で記述できる
たとえば<?=$emoji[154];?>とやれば爆弾の絵文字が出せる。
(ここがモンスターメソッドになってしまったのでもうちょっとましな設計が必要)
before()でしていること
Net_UserAgent_Mobile呼び出し
Text_Pictogram_MobileでdocomoのUTF-8絵文字としていったん全部扱う
テンプレート記述を中間記法に変換する
after()でしていること
Net_UserAgent_Mobileの判別でdocomo, au, softbankにそれぞれ振り分け
キャリアごとに
xmlのencodingとhtmlのheadを表示する文字コード表記に置き換え(docomo, auはShift_JIS, softbank, pcはUTF-8)
出力文字列の文字コードを変換
docomoの場合のみHTML_CSS_MobileでCSSをインラインに変換
絵文字をキャリアごとに出力フォーマットを変えて出力
headerのContent-Typeをキャリアごとに出力
目標確認
サブディレクトリ下に携帯3キャリア対応のページを作成
ただし、ライブラリなど余計なファイルはドキュメントルート下におかないこと
http://example.com/limonade/
達成!
メッセージ
コアとちょっとのファイルでやりたいことが実現できる
ファイル数が少ないこと、ファイルが小さいこと、それももちろんだけれど、
コアも含めたアプリ全体の見通しのよさがlimonade一番のメリット