「つらくないコードを書こう」という題でlimonadeの話をしてきた PHP勉強会@関東#46

第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一番のメリット

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください