BlogCakePHPを中心としたサイト開発情報をメインに公開。新しもの好きなので時々製品レポートなんかも。CakePHP携帯サイトを構築する場合の、各キャリア対応をサポートするライブラリと、それをCakePHPで利用するためのヘルパー・コンポーネントを公開いたします。ライブラリ本体はCakePHPだけでなく他の環境でも使用することが出来ます。【お知らせ】ktailibrary.orgは諸事情ありまして閉鎖しました。はじめに携帯サイトを作成する場合、一般的には各キャリア向けにHTMLを作成し、それを振り分けして表示する仕組みを採用していたと思いますが、最近の携帯では、いくつかの仕様を除いてほぼ同じHTMLを閲覧することが可能になってきています。そこで、その「いくつかの仕様」についてを解決できるような仕組みができないものか...という経緯から、本ライブラリが生まれました。本ライブラリは個人的に作成していたPHPライブラリがベースになっているのですが、CakePHPで使えるようにすることで「携帯サイトの高速開発」が実現できればと思い、駆動ヘルパー・コンポーネントも添付することにしました。逆に言えば、ライブラリ本体は他のPHPスクリプトあるいはフレームワークでも使えるかもしれません。応用が出来るような構成になっていますので、他でも活躍してくれれば幸いです。本ライブラリは、携帯サイトを構築する上で必要ないくつかの機能を提供いたします。現在(Ver0.4.0)は次のようなことが出来ます。動作環境ライブラリ単体については、PHP4/5であれば動作可能です。ヘルパー・コンポーネントについては、CakePHP1.2/1.3対応です。ついては、日本の各社3G携帯(docomo/au/softbank/emobile)およびiPhone、PHSを想定しています。それ以前の携帯はうまく動作しない可能性があります。auのHDML対応端末は対応しておりません。Vodafone時代の携帯、Softbank初期(gif画像の表示できないタイプ)は絵文字の一部または全部が表示されない場合があります。このため、公式サイトでこのライブラリをメイン使用するのは難しいかと思います(勿論有用な機能はあります)。どちらかというと勝手サイト向けです。iPhoneを除くスマートフォン系端末・海外携帯には対応しておりません。PC扱いとなりますのでお気をつけください。PCブラウザ機能を用いてのアクセスも、PC扱いとなる場合があります。インストール方法インストールは、アーカイブをダウンロードしていただき解凍して出来たイメージをCakePHPに丸ごとコピーするだけです。使いたい機能により、別途準備や設定値の変更が必要になる場合があります。TypePadで使用されている絵文字画像を使用する場合は、別途ダウンロードし、app/webroot/img内にファイルイメージをコピーしてください。場合によって、いくつか設定や準備が必要になりますが、基本的には初期値で動作いたします。設定変更は、コントローラ内に連想配列で設定値を用意していただくか、Configureクラスでヘルパーに設定値を送ることで行えます。詳しくは、添付のドキュメントをお読みください。絵文字はiMODE絵文字を使用してください。その他のキャリアが提供している絵文字は使用不可能ですのでお気をつけください(HTML内も変換はされません)。絵文字入力に関しては、HTML内については直接コード入力する以外に、数字指定(&#xxxxx;)も識別いたします(オプションで有効にする必要があります)。絵文字挿入関数は、直接文字を指定する以外に、文字コードを数値入力していただくことも出来ます。利用例・チュートリアルについては下記記事をご覧ください。UTF-8以外の文字コードで生成されたviewテンプレートを変換する場合、AU携帯で文字化けするようです(EUC→SJISで再現しました)。これは本ライブラリ由来のものではなくmb_convert_encoding()が影響しているようですが、ご使用環境によってうまく利用できない場合がございますのでご注意ください。PHS絵文字には対応しておりません。PCと同様の絵文字(代替テキストまたは画像絵文字)が表示されます。ご利用条件GPLライセンス規約に基づき、営利・非営利問わず自由にご利用可能です。メディア等への掲載については別途ご相談いただけますと幸いです。ダウンロード【プラグイン版】CakePHP2系でのご利用にはKtaiLibraryのCakePHPプラグイン「CakeKtaiLibrary」をお使いください。Library開発環境は、githubより入手が可能です。[New!]無料で相性占いができるサイトですが、占い師が300名以上登録されていて個別相談の依頼が可能。Libraryが使われているそうです。Certification)各試験を学習できるサイト「Ping-t」のモバイルサイト。(yoshidax様)携帯で英単語を学習するとキャラが成長していく!学習方法も簡単で、手軽に英語が学べます。(あつ様)テレビで紹介された商品をまとめて紹介。購入もできるというサイト。同じURLで携帯でも閲覧可能です。(あんじー様)簡単に登録できるこづかい帳。携帯からでも登録が可能です。CAFEにて観戦イベントを開催してます。製作は私ことMASA-Pがさせていただいております(笑)。Library」で製作したサイトを是非ご紹介ください。12:35ありがとうございます!確認をしました。次のバージョンで修正させていただきます。不具合報告等は是非「http:://www.ktailibrary.org/」をご利用いただけますと幸いです。21:13携帯ライブラリがいつも業務でお世話になっております。_)m第5回CakePHP勉強会での発表がとても参考になりました。(ナウな使い方!)最新バージョンの0.2.3でソフトバンクの絵文字を出力しようとすると失敗(対応違い)してしまいす。なにかコツの様なものがあるのでしょうか?docomoの絵文字をソフトバンク携帯に送信ソフトバンクのメールの文字コードに関係していると思っていますが、よくわからない状況です。執筆でお忙しいと思いますが、よろしくお願いします。01:43勉強会のセッションを聴いてくださってありがとうございます(^^)。Libraryでは、docomo以外の絵文字を他キャリアの絵文字に変換する機能を持っていません。ソフトバンク絵文字はソフトバンク絵文字のまま他キャリアに見えることになります(もしくは、文字エンコーディング変換などを経て文字化けの可能性もあります)。Libraryの最大の弱点であり、最重要課題であると認識しています。3キャリア分のテーブルを用意して変換させるために、大変多くのサーバリソースを食うことになります(テストコードを走らせてみると、現時点で絵文字を使うことで+2MBほど占有するようです)。CakePHPはメモリ使用量が実は結構多く、出来るだけ占有するメモリ容量を少なくして実装しないと実用的でないと判断しています。このため、そのほかの技術も合わせて実現する、新しい絵文字システムを現在開発中です(実は今回のバージョン0.3にてその一部のコードを実装しています)。この次にリリースするメジャーバージョンには是非取り入れたいと考えていますので、それまでお待ちいただけますと幸いです。ソフトバンクメールに絵文字を使いたいという場合は、ウェブコードでなくバイナリ絵文字を使わないといけないかもしれません。Libraryの絵文字テーブルはwebコードになっています。この辺も同じバージョンにてバイナリ対応を行う予定です。12:37早めの返信ありがとうございます。説明が不足していますね、申し訳ありません。絵文字の変換処理をメール送信用に使用しています。独自処理で置換してメールを送信しています。このプロジェクトは私はかかわっておらずktaiLibraryを勧めたので担当者から質問されています。私の考えでは上の使い方はあまりよろしくなく、一旦Docomoの絵文字形式にテンプレートを加工してktaiLibraryの機能でキャリア毎の変換をするというのが正しいと思っていますが、間違っていますか?立て続けに質問で申し訳ありませんがもう一つあります。ktaiLibraryをコンポーネントおよびシェル(定期メール送信)で使用する際インスタンスを作りライブラリにアクセスしますが、シェルで使用した場合のみ未定義エラーがでます。(キャリアを判別できない?)使い方として正しくないのでしょうか?よろしくお願いします。19:24なるほど、そのような仕組みなのですね。中間コードを用いる件は、考え方としては悪くないとは思います。この先docomoの携帯の文字コードしか使わないという場合なら、docomoに置換してしまう対処でOKだと思いますが、自由度を持たせるのであれば有効だと思います。反面置換を行うので処理速度が犠牲になりますが。そのような仕様で開発がスタートしているのなら仕方がないというのもあります。ライブラリ側からみると、どこで不都合が出ているのかよくわからなくなってしまっているので、何とも言いにくいところです。webコードであることが問題なら、最悪テーブルのwebコードをバイナリの絵文字コードに指定し直せば不具合は直るかもしれませんが、ちょっと手間がかかると思います。簡単なテストページ等を作って実験していただいた方がいいかもしれません。それからシェルで機種判定をしたいとのことですが、残念ながらシェルではユーザエージェントが取得できませんので、実用的ではないかと思います。やるのなら、パラメータでユーザエージェントを取得してそれをget_carrier()します。第1引数にユーザエージェント文字列、第2引数にtrueとするとそのユーザエージェントでリフレッシュします。12:07ありがとうございました!!!大変助かりました。私の環境では画像のリサイズをデータベースの機種情報で行っているのですが、(リサイズ処理:ktaiライブラリの途中でモデルで情報を取得して適応)動的情報をファイルとデータベースで切り替えられるといいですね。余裕があればktaiライブラリの開発に参加したいと思っています。ktaiLibrary勉強会にも参加したいのですが北陸在住なので難しいのが現状です。matsuriには参加しようと思っていますので。MASA-Pさんも出られるなら一度いろいろお話してみたいです。_)m有償化されると厳しいですが。^;)2010年6月15日本買いました。15:20買ったばかりでテストしながら読んでるんですけど下記の現象が起こりました。07時47分URLがドメインの直下ではなくhttp://example.com/test1/test2/以下に設置した際に携帯のredirectのURLがhttp://example.com/test1/test2/test1/test2/redirect先?csid=といった形になりました。true);に変更することで解消されましたので、報告まで。20:44お返事遅くなりました。そのような使い分けをされているのですね。$usesに登録をしているモデルでしたら、beforeFilter()ですでに初期化されていると思いますので、ここでテーブルから機種情報を取得してget_carrier()で書き換えるといけるかもです。複数人で「内的に」開発する体制は整えられていないですが、是非ご協力いただければ(^^)。現在の最重要項目として「3キャリア+PCの相互的な絵文字変換」です。これに伴ってDBを活用する仕組みやインストーラ等の仕組みを入れ、Cake1.3らしくプラグイン化するというのが次のメジャーバージョンの柱になる予定です。ほかにもアイデア等お持ちでしたら是非よろしくお願いします。Libraryそのものについて有償化する予定は今のところないつもりです。やって有償サポートや開発委託とかだと思います。Libraryはみんなで使って、できればみんなで作っていってほしいプロジェクトです。02:56MASA-Pさん、大変ご無沙汰しております。エクスギアの蓑浦です。KtaiLibraryを使わせて頂いて簡易GPS検索プラグインを作成してみました。ソースはイマイチですがご勘弁くださいませ。アイデアが採用されて今後KtaiLibraryのプラグイン化などの際に検討して頂ければ本望です。どこかの勉強会等でお会いできることを楽しみにしております。(と言っても、私の都合がなかなかつかないのですが。14:49ありがとうございます!GPS関連の機能はなかなか手をつけられなかった部分でしたので、大変にすばらしいです。Libraryの次のバージョンはプラグイン化しますので(すでに開発環境では動作しています)その際に是非マージさせてください。12:21まさぴーさん、いつもお世話になります。0.3.2をdlさせて頂きました。あと、まさぴーさんの書かれたcakephp辞典も購入して読破させて頂きました!素敵な本でした。16:00ありがとうございます!ちなみにktai_app_controller.phpの説明の件は、確かにその通りで、近日発表予定のバージョン0.4.0では修正予定です(ちなみに0.3.0以前はそのようなファイル名になっていました)。公開していますので、そちらのほうも是非ご参照ください。0.4.0を使用しています。AUにて絵文字が出力されなかったので、次の部分を修正後、出力されるようになりました。$this->carriers[$options[‘output_carrier’]];この修正で正しければ、取り込んでもらえればと思います。15:37何故AUが表示できていないのかは分からないのですが、ご指摘いただいたものは修正方法としては適切ではないです。$ccodeからは入力された文字列から対象絵文字を抜き出すための正規表現を入手しますので、input_carrierでないと意図した動作ではありません。保持している情報が入力時情報と出力時情報とで混じってしまっている可能性がありますので、解析してみます。正式回答までしばらくお待ちください。17:39検証してみましたが、ソースコード・アルゴリズムは問題ありませんでした。元のデータをauの絵文字にしていませんか?現状0.xではdocomo→auへの絵文字変換は出来ますが、逆方向は出来ません。12:57お世話になります。Library」を有り難く使わせて頂いております。Library」で製作したサイトを是非ご紹介ください。ここで良いか分かりませんが、こちらのサイトを制作致しました。http://m.ping-t.com/登録ユーザ5万人のCCNA/CCNP、LPIC学習サイト「Ping-t」(URL:http://ping-t.com/)のモバイル版です。携帯でユーザ登録や問題演習が可能です。今後とも宜しくお願い致します。14:31紹介欄に追加させていただきました。17:22お世話になっております。0.4.1を利用させて頂いております。現在、Webブラウザから絵文字を入力登録出来る仕掛けを作成中です。?>のような記述して、アイコン画像で絵文字を確認出来るようにしています。文字コードはUTF-8です。基本動作的には問題ないのですが、「富士山」から「ショック」までの絵文字が変換されずに全てバイナリのまま表示されてしまいます。どこを修正したら良いのか解らず対応策をお教えいただけないでしょうか?お忙しいところ恐縮ですが、ご返事お待ちしております。?>と記述すると、「mail.お問い合わせお問い合わせ」と二重に表示されてしまいます。‘‘.$title.’‘;}としてとりあえず、回避していますが、次の修正時に対応して頂けると助かります。※修正方法としては正しくないと思いますが......。以上、よろしくお願いいたします。17:35すいません、自動的にエスケープされないのですねコードを再記入します。02:04すみません、先週今週が大変に多忙でして、お返事がなかなか出来ませんでした。現象について確認してみますので、少々お待ちいただけますでしょうか。ところで、この現象が確認されたときの端末(キャリア)はdocomoでしょうか?もしau、softbankですと、convert_emoji()が対応していないため文字化けの可能性があります。docomoであるのなら、なんバイト目かの文字コードが影響しているような、そんな動きに見えます。20:16ご返事ありがとうございます。すいません、説明が悪かったのかもしれませんが、iモード用バイナリーの絵文字をPCブラウザで表示するのにconvert_emoji()で変換させると「富士山」から「ショック」までの絵文字がアイコン画像に変換されずに、バイナリのまま出力されます。一通り確認した限り、それ以外の絵文字は、アイコン画像に変換されます。au、softbankの絵文字変換は、色々な制約や問題があり、HTML_Emoji(http://libemoji.com/html_emoji)に出力時に変換させているのでKtaiLibraryに問題あるかどうか検証できていません。ちなみに、問題がある部分の絵文字は、作成したWebブラウザから絵文字を入力機能で作成した画面を、docomo、au、softbankで確認しましたが問題なく変換されていますので入力しているiモード用バイナリーの絵文字に関しては問題ないと思われます。以上、よろしくお願いいたします。18:37お世話になります。0.4.1を利用させて頂いております。やりたいことは、cakeErrorを使用してオリジナルのエラー画面を表示したいのですが、ktaiコンポーネントのshutdownメソッドが呼ばれず、mb_convert_kanaが実行されません。構成としては以下のようになっております。$params[‘message’]);$this->_outputMessage(‘error_system’);}}Cakeのコンポーネント登録時の問題だと思うのですが、もしお分かりになりましたら教えていただきたいです。17:59お問い合わせいただきましてありがとうございます。error時にshutdown()が呼ばれない件ですが、これはCakeErrorControllerはDispacherで呼び出されるものではなく、エラーを受け取った際に動的に生成されるためと思われます。このため、Dispatcher内で通常行っている処理がerror.phpでは__construct()内に記述されています。__destruct()等は用意されておらず、コンポーネント内のshutdown()メソッドが呼ばれていないためauto_convert_emoji機能が働いていない状況です。これに関しては対応がかなり難しいと思います。auto_convertを用いないようなビューファイルを実現するのが確実と思いますが、別途エラー時に呼び出す専用ヘルパーを作り、そのafterRender内でoutputを取り出してconvert_emoji()を適用し、outputに戻すようなやり方が出来るかもしれません(未確認なので実際に出来るかどうかはちょっと分からないです)。15:30ディズニーモバイルのメールアドレス判定がPCになります。13:20こんにちは。Liblary、利用させて頂いております。おかげさまで、携帯電話向けサイト制作の負担がかなり軽減されました。ところで、ヘルパーのQRコード作成関数(get_qrcode())で生成されるimgタグのsrc部分ですが、chldパラメータの前に&が付かない為、$optionsで指定するmarginとecが反映されていない様です。‘&chld=’.$ec;に修正してmarginとecが反映される事を確認しております。Kiblaryのバージョンは0.4.1です。10:44>bassmanさんお返事が遅くなってしまい申し訳ございません。ディズニーモバイルの件、バージョン0.4.2対応をいたしました。>ohshrsさん不具合報告ありがとうございます。バージョン0.4.2にて対応いたしました。19:18はじめまして。現在構築中のサイトにて携帯ライブラリを使用させて頂いております。使用させて頂く中で気づいた点が1点ありますので、ご報告させて頂きます。controller内でredirectをしたところ、正常に動作しない場合があったので調査してみたところ、enable_ktai_session=>true時にroute定義にてpass=>array()を使った定義をしていると、おかしくなるようでした。した後にredirectに$urlを渡されているのですが、pass指定のあるrouteだとparseした$urlの’pass’キーの配列内に要素が入るため、その後のredirect内のRouter::url処理でおかしなurlが生成されてしまうようです。なんだか文章で書くとよくわからないので以下が例です。array(‘id’),));//hoge_controller.php$this->redirect(‘/hoge/123/fuga’);//とばされてしまう先/hoge/fuga/id~123/pass~Array?csid=foobar==============#あと確認はしていないのですが、おそらくnamedのパラメータが混じった場合も同様にnamed~ArrayといったURLになってしまうのではないかと考えます。現在はRouter::parseしたurlから’pass’キー要素を削除することで対処しています。以上、御確認・ご対応いただければ幸いです。13:50ご報告ありがとうございます。調査をして反映したいと思います。16:00お世話になります。Akikumoと申します。下記の1文追加で、iPhone/PCと同じような状態になりました。UAにキャリアを判定できるものが含まれていないAndroidだと起きる現象ではないかと。0.40でも0.42でも再現、及び対策の有効性を確認しています。宜しければ次版で取り込んでいただければと。16:03ありがとうございます!調査してバグフィックスしたいと思います。上記のような修正方法でいけるのではないかと思っています。18:04こんにちわ。いつもお世話になります。ktailibraryで作成させて頂きました。携帯からだと携帯用デザインが表示されます。15:50>ひでまんさん放置してしまってすみませんm(__)m。紹介欄に掲載しました。コメントをキャンセルメールアドレスが公開されることはありません。