Ktai Library for CakePHP
携帯サイトを構築する場合の、各キャリア対応をサポートするライブラリと、それをCakePHPで利用するためのヘルパー・コンポーネントを公開いたします。ライブラリ本体はCakePHPだけでなく他の環境でも使用することが出来ます。
ktailibrary.org運用開始!
KtaiLibrary専用サイト「http://www.ktailibrary.org/」を現在準備中です。
とりあえず現在はバグトラッキングサイトとして運営を考えています。
バグ関連は全てこちらにご報告お願いいたします。
CakePHP+Ktai Libraryの本を執筆しました!
CakePHPとKtai Libraryで携帯サイトを作るための本として「PHPで作る携帯サイト デベロッパーズガイド」を執筆しました。詳しくは こちら をご覧ください。
はじめに
携帯サイトを作成する場合、一般的には各キャリア向けにHTMLを作成し、それを振り分けして表示する仕組みを採用していたと思いますが、最近の携帯では、いくつかの仕様を除いてほぼ同じHTMLを閲覧することが可能になってきています。そこで、その「いくつかの仕様」についてを解決できるような仕組みができないものか…という経緯から、本ライブラリが生まれました。
また、本ライブラリは個人的に作成していたPHPライブラリがベースになっているのですが、CakePHPで使えるようにすることで「携帯サイトの高速開発」が実現できればと思い、駆動ヘルパー・コンポーネントも添付することにしました。逆に言えば、ライブラリ本体は他のPHPスクリプトあるいはフレームワークでも使えるかもしれません。応用が出来るような構成になっていますので、他でも活躍してくれれば幸いです。
概要
本ライブラリは、携帯サイトを構築する上で必要ないくつかの機能を提供いたします。
とりあえず、現在(Ver0.3.2)は次のようなことが出来ます。
- 絵文字キャッシュ[New!]
- ライブラリをサブクラス化[New!]
- IPによるキャリア判定[New!]
- Google Static Maps API支援[New!]
- convert_emoji()のアルゴリズム見直しによる高速化[Update!]
- インラインスタイルシート支援機能
- XMLタグ対応
- URL処理を追加(コールバックによる付け替え可能)
- セッション対応
- セッション時のリダイレクト対応
- QRコード作成
- 携帯からuidを入手
- 自動変換処理関連でかな変換オプションを追加
- UTF-8対応
- 文字コード変換(UTF-8→SJIS、等)
- 機種情報(解像度などを調査)
- 高解像度携帯向けに画像を引き延ばし
- mailtoリンク作成の支援機能(件名や本文の挿入)
- PHS(一部)対応
- キャリア判別(携帯/非携帯の判別・各キャリア判別)
- メールアドレスからキャリア判別
- 絵文字の呼び出し(各キャリアに適した絵文字フォーマットを生成)
- ページを丸ごと絵文字変換
- 絵文字の出力をバイナリコードか数値表現かを選択可能
- accesskey付きリンクの作成(絵文字の自動挿入)[ヘルパー利用のみ]
- PC等でTypePadで使用されている絵文字画像の表示サポート
動作環境
ライブラリ単体については、PHP4/5であれば動作可能です。
ヘルパー・コンポーネントについては、CakePHP1.2/1.3対応です。開発はCakePHP1.3.0にて行っております。
対応端末
対応携帯端末については、日本の各社3G携帯(docomo/au/softbank/emobile)およびiPhone、PHSを想定しています。それ以前の携帯はうまく動作しない可能性があります。
auのHDML対応端末は対応しておりません。
また、J-PHONE / Vodafone時代の携帯、Softbank初期(gif画像の表示できないタイプ)は絵文字の一部または全部が表示されない場合があります。
このため、公式サイトでこのライブラリをメイン使用するのは難しいかと思います(勿論有用な機能はあります)。どちらかというと勝手サイト向けです。
iPhoneを除くスマートフォン系端末・海外携帯には対応しておりません。PC扱いとなりますのでお気をつけください。また、PCブラウザ機能を用いてのアクセスも、PC扱いとなる場合があります。
インストール方法
インストールは、アーカイブをダウンロードしていただき解凍して出来たイメージをCakePHPに丸ごとコピーするだけです。
なお使いたい機能により、別途準備や設定値の変更が必要になる場合があります。
また、TypePadで使用されている絵文字画像を使用する場合は、別途ダウンロードし、app/webroot/img内にファイルイメージをコピーしてください。
利用方法
場合によって、いくつか設定や準備が必要になりますが、基本的には初期値で動作いたします。
設定変更は、コントローラ内に連想配列で設定値を用意していただくか、Configureクラスでヘルパーに設定値を送ることで行えます。
詳しくは、添付のドキュメントをお読みください。
絵文字はiMODE絵文字を使用してください。その他のキャリアが提供している絵文字は使用不可能ですのでお気をつけください(HTML内も変換はされません)。
絵文字入力に関しては、HTML内については直接コード入力する以外に、数字指定(&#xxxxx;)も識別いたします(オプションで有効にする必要があります)。また、絵文字挿入関数は、直接文字を指定する以外に、文字コードを数値入力していただくことも出来ます。
なお、利用例・チュートリアルについては下記記事をご覧ください。
▼【KtaiLibrary】各キャリア携帯サイトを世界一簡単に作ってみる
http://blog.ecworks.jp/archives/635
注意事項
SJIS / UTF-8以外の文字コードで生成されたviewテンプレートを変換する場合、AU携帯で文字化けするようです(EUC→SJISで再現しました)。これは本ライブラリ由来のものではなくmb_convert_encoding()が影響しているようですが、ご使用環境によってうまく利用できない場合がございますのでご注意ください。
PHS絵文字には対応しておりません。PCと同様の絵文字(代替テキストまたは画像絵文字)が表示されます。
ご利用条件
GPLライセンス規約に基づき、営利・非営利問わず自由にご利用可能です。
なお、メディア等への掲載については別途ご相談いただけますと幸いです。
ダウンロード
【開発版(ktai-dev)】
Ktai Library開発環境は、githubより入手が可能です。
▼github : MASA-P / ktai-dev
http://github.com/MASA-P/ktai-dev
※コード修正を随時行いpushしていきますが、Ktai Libraryの正式リリースでないことをご了承ください
なお、正式リリースバージョンと同一の開発環境はtagで入手できます
【最新版】
Ver 0.3.2 : githubにて公開
【以前のバージョン】
Ver 0.3.1 : githubにて公開 (公開されていますが、ktaiヘルパー等に問題があります)
Ver 0.3.0 : githubにて公開
Ver 0.2.3 : githubにて公開
Ver 0.2.2 : githubにて公開 (公開されていますが、リダイレクト処理に問題があります)
Ver 0.2.1 : githubにて公開
Ver 0.2.0 : githubにて公開
Ver 0.1.1 : ktai-0.1.1.zip
Ver 0.1.0 : ktai-0.1.0.zip
Ver 0.0.2 : ktai-0.0.2.zip
Ver 0.0.1 : ktai-0.0.1.zip
導入事例
エイゴノイド (yoshidax様)
携帯で英単語を学習するとキャラが成長していく!
学習方法も簡単で、手軽に英語が学べます。
テレビで見たよ (あつ様)
テレビで紹介された商品をまとめて紹介。もちろん購入もできるというサイト。
同じURLで携帯でも閲覧可能です。
こづかいつけーる for web (あんじー様)
簡単に登録できるこづかい帳。携帯からでも登録が可能です。
Pit-FM Mobile (Pit-FM様)
F1レースの情報をいち早くお届け! 毎レース決勝日はF1 PIT STOP CAFEにて観戦イベントを開催してます。
製作は私ことMASA-Pがさせていただいております(笑)。携帯サイト専用です。
※「Ktai Library」で製作したサイトを是非ご紹介ください。
テストサイトのご紹介
本ライブラリの動作チェックを兼ねて、機能を実際に動作させて紹介しています、テストサイトを運用しております。携帯サイトでアクセスしていただきますと、より機能が分かりやすいかと思います。
▼「Ktai Library」機能チェックサイト
http://ktai-test.ecworks.jp/
出来ましたら、正しく動作しているかをご報告いただけますでしょうか。
フォームボタンを1クリックしていただくだけの簡単登録となっております。
是非ご協力お願いいたします。





ありがとうございます!
確認をしました。
次のバージョンで修正させていただきます。
なお、不具合報告等は是非「http:://www.ktailibrary.org/」をご利用いただけますと幸いです。
携帯ライブラリがいつも業務でお世話になっております。 m(_ _)m
第5回CakePHP勉強会での発表がとても参考になりました。(ナウな使い方!)
最新バージョンの0.2.3でソフトバンクの絵文字を出力しようとすると失敗(対応違い)してしまいす。
なにかコツの様なものがあるのでしょうか?
docomoの絵文字をソフトバンク携帯に送信
ソフトバンクのメールの文字コードに関係していると思っていますが、よくわからない状況です。
執筆でお忙しいと思いますが、よろしくお願いします。
勉強会のセッションを聴いてくださってありがとうございます(^^)。
ご質問の件ですが、「メールに含まれているソフトバンク絵文字を入手して表示したい」とのことでしょうか?
申し訳ないのですが、現時点でもKtai Libraryでは、docomo以外の絵文字を他キャリアの絵文字に変換する機能を持っていません。なので、ソフトバンク絵文字はソフトバンク絵文字のまま他キャリアに見えることになります(もしくは、文字エンコーディング変換などを経て文字化けの可能性もあります)。
この点は現在のKtai Libraryの最大の弱点であり、最重要課題であると認識しています。しかし、3キャリア分のテーブルを用意して変換させるために、大変多くのサーバリソースを食うことになります(テストコードを走らせてみると、現時点で絵文字を使うことで+2MBほど占有するようです)。CakePHPはメモリ使用量が実は結構多く、出来るだけ占有するメモリ容量を少なくして実装しないと実用的でないと判断しています。
このため、そのほかの技術も合わせて実現する、新しい絵文字システムを現在開発中です(実は今回のバージョン0.3にてその一部のコードを実装しています)。この次にリリースするメジャーバージョンには是非取り入れたいと考えていますので、それまでお待ちいただけますと幸いです。
また、ソフトバンクメールに絵文字を使いたいという場合は、ウェブコードでなくバイナリ絵文字を使わないといけないかもしれません。現在のKtai Libraryの絵文字テーブルはwebコードになっています。この辺も同じバージョンにてバイナリ対応を行う予定です。
早めの返信ありがとうございます。。
説明が不足していますね、申し訳ありません。
絵文字の変換処理をメール送信用に使用しています。
現在予約語(システムで決めている共通絵文字コード 例:$emoji:hare$)等で書かれているテンプレートを
メールアドレスでキャリア判別してそれ毎に絵文字予約語を lib3gk_emoji.php で独自処理で置換してメールを送信しています。
このプロジェクトは私はかかわっておらずktaiLibraryを勧めたので担当者から質問されています。
私の考えでは上の使い方はあまりよろしくなく、一旦Docomoの絵文字形式にテンプレートを加工して
ktaiLibraryの機能でキャリア毎の変換をするというのが正しいと思っていますが、間違っていますか?
立て続けに質問で申し訳ありませんがもう一つあります。
ktaiLibraryをコンポーネントおよびシェル(定期メール送信)で使用する際
インスタンスを作りライブラリにアクセスしますが、
シェルで使用した場合のみ未定義エラーがでます。(キャリアを判別できない?)
使い方として正しくないのでしょうか?
よろしくお願いします。
なるほど、そのような仕組みなのですね。
中間コードを用いる件は、考え方としては悪くないとは思います。
この先docomoの携帯の文字コードしか使わないという場合なら、docomoに置換してしまう対処でOKだと思いますが、自由度を持たせるのであれば有効だと思います。反面置換を行うので処理速度が犠牲になりますが。
そして、すでにそのような仕様で開発がスタートしているのなら仕方がないというのもあります。
ただ、ライブラリ側からみると、どこで不都合が出ているのかよくわからなくなってしまっているので、何とも言いにくいところです。
もしwebコードであることが問題なら、最悪テーブルのwebコードをバイナリの絵文字コードに指定し直せば不具合は直るかもしれませんが、ちょっと手間がかかると思います。簡単なテストページ等を作って実験していただいた方がいいかもしれません。
それからシェルで機種判定をしたいとのことですが、残念ながらシェルではユーザエージェントが取得できませんので、実用的ではないかと思います。やるのなら、パラメータでユーザエージェントを取得してそれをget_carrier()します。第1引数にユーザエージェント文字列、第2引数にtrueとするとそのユーザエージェントでリフレッシュします。
ありがとうございました!!!
大変助かりました。
私の環境では画像のリサイズをデータベースの機種情報で行っているのですが、
(リサイズ処理:ktaiライブラリの途中でモデルで情報を取得して適応)
動的情報をファイルとデータベースで切り替えられるといいですね。
余裕があればktaiライブラリの開発に参加したいと思っています。
ktaiLibrary勉強会にも参加したいのですが北陸在住なので難しいのが現状です。
今年のPHP matsuriには参加しようと思っていますので。
MASA-Pさんも出られるなら一度いろいろお話してみたいです。
今後もktaiLibraryにはお世話になると思っていますm(_ _)m
有償化されると厳しいですが。。(^ ^;)
買ったばかりでテストしながら読んでるんですけど
下記の現象が起こりました。
(http://momotaro.ever.jp/phoneShop/phoneShop/customers/join)
下記の処理で修正されたと思われますが、何故でしょうか・・・
くま
2009年09月05日 • 07時47分
URLがドメインの直下ではなく
http://example.com/test1/test2/
以下に設置した際に
携帯のredirectのURLが
http://example.com/test1/test2/test1/test2/redirect先?csid=
といった形になりました。
AppController側で
$url = Router::url($url);
を
$url = Router::url($url, true);
に変更することで解消されましたので、報告まで。
お返事遅くなりました。
なるほど、そのような使い分けをされているのですね。
もし$usesに登録をしているモデルでしたら、beforeFilter()ですでに初期化されていると思いますので、ここでテーブルから機種情報を取得してget_carrier()で書き換えるといけるかもです。
複数人で「内的に」開発する体制は整えられていないですが、是非ご協力いただければ(^^)。
とりあえず現在の最重要項目として「3キャリア+PCの相互的な絵文字変換」です。これに伴ってDBを活用する仕組みやインストーラ等の仕組みを入れ、Cake1.3らしくプラグイン化するというのが次のメジャーバージョンの柱になる予定です。
ほかにもアイデア等お持ちでしたら是非よろしくお願いします。
ちなみに、Ktai Libraryそのものについて有償化する予定は今のところないつもりです。
せいぜいやって有償サポートや開発委託とかだと思います。それも今のところ予定は(^^;
基本的に、Ktai Libraryはみんなで使って、できればみんなで作っていってほしいプロジェクトです。
本音を言えば、現在いくつか存在しているほかのライブラリ群が全て統合されて「これ使えばOK」的になってくれるのが…(笑)