【CakePHP/KtaiLibrary】「PHPで作る携帯サイト デベロッパーズガイド」刊行します!

icon_ktai以前に予告していたものなのですが、なんとか予定日に入稿されたようですので早速告知させていただきます。

CakePHPに、当方で発表しています「Ktai Library」を組み合わせて携帯サイトを制作する方法を解説した「携帯サイト制作本」が、いよいよ12/23頃に書店に並ぶことになりました!

PHPで作る携帯サイトデベロッパーズガイド_表紙

【書名】
PHPで作る携帯サイト デベロッパーズガイド

【出版社名】
秀和システム

【著者名】
滝下 真玄

【価格】
3,000円(本体価格)

【発売日】
2009年12月23日頃

内容は、前半は携帯サイト制作に必要な情報をまとめ、後半は「携帯ショッピングサイト」を題材にして制作過程を順に追って説明していく、という感じです。
今まで「フレームワークを用いた携帯サイト制作」を扱った書籍がなかったので、かなり冒険的な内容と言えますが、これも「Ktai Libraryがあってこそ」実現できたのではないかと思います。
また、サイト制作の実録を掲載したことで、今までフレームワークそのものの使い方を解説した書籍が多かった中で、より実践的な参考書籍として出せたかと思います。

価格が高くなってしまったのは、ページ数が600ページ弱と大変に多くなってしまったことで単価が上がってしまいました(ゴメンナサイ)。が、Ktai Libraryの使い方については勿論のこと(リファレンスマニュアル収録)、AuthコンポーネントによるユーザログインやセキュリティコンポーネントCakeShell(CakeSchema含む)等のCake機能の活用、MediaPluginQdmailといった有用なツールの活用、そして郵便番号データベースによる住所の省入力・空メールメールマガジンといった携帯ならではの機能の実現など、盛りだくさんの内容になっているのではないかと思います。
どちらかというと「携帯サイト制作をしたい」あるいは「これからCakePHPを使っていきたい」という方向けに書いていますが、日頃Cakeを使っている方でも、携帯サイト制作の実例としてお読みいただける本になったかと思います。サンプルサイトは「管理側」「公開側」とPCサイト、携帯サイト両方を同時に作っていきますので、それぞれの作り方の違いについても理解しやすいかなーと思います。

ちなみに、タイトルが「PHPで~」となっているため、CakePHPカテゴリで書店に並ばれないかもしれません(帯には一応書いて あります)。PHPコーナー、もしくは携帯コーナーでとびきりぶ厚い本がありましたらそれですので(汗)、お手にとって、できればそのままレジにお持ちく ださい(笑)。

個人的には、初めての書籍化ということで伝えきれなかった点、至らない点もあるかと思いますが、「CakePHPで携帯サイトはバッチリいけるぜ!」あるいは「CakePHPってなかなか良いぜ!」が伝われば、大変に嬉しいです。また、本書にて携帯サイト制作がより身近になってくれれば幸いです。

【追記】(2009/12/19)
Amazonで購入できるようになりました。
下記からお求めになれます。

アマゾンのサーバでエラーが起こっているかもしれません。一度ページを再読み込みしてみてください。

P1000035
紀伊國屋書店新宿本店の様子

【追記2】(2009/12/25)
紀伊国屋さんの店頭で並び始めているようです。
ネットショップでも購入できます。

■2009/12/25現在で「在庫有り」の店
札幌本店 仙台店 川越店 流山おおたかの森店 新宿本店
新宿南店 笹塚店 大手町ビル店 北千住マルイ店 ららぽーと豊洲店
横浜店 ららぽーと横浜店 梅田本店 本町店 京橋店
泉北店 堺北花田店 高槻店 加古川店 川西店
大津店 富山店 福井店 クレド岡山店

【追記3】(2009/12/25)
ジュンク堂池袋本店にも在庫があるようです。
ネットショップでも購入できます。

【追記4】(2009/12/26)
Amazonがようやく「在庫有り」になったようです。
発行部数の関係で、大手書店以外にはなかなか置かれないかもしれないそうです。

【追記5】(2010/2/19)
書評をいただきました。ありがとうございます!

▼[読書メモ]PHPで作る携帯サイトデベロッパーズガイド
http://go2childcare.blog95.fc2.com/blog-entry-403.html

【追記6】(2010/4/22)
書評をいただきました。ありがとうございます!
タイトルについては色々と大人の事情があった、とだけ言っておきます(笑)

▼余計なお世話かも知れないけれど、これタイトルで損してるんじゃね?「PHPで作る携帯サイトデベロッパーズガイド」
http://www.kantenna.com/info/2010/04/php_3.php#more


【CakePHP/KtaiLibrary】「PHPで作る携帯サイト デベロッパーズガイド」刊行します!” への44件の返信

  1. おめでとうございます。
    早速アマゾンで予約しようと思い検索したのですが見つからなかったです。

    アマゾンでは販売しないのでしょうか?

  2. ありがとうございます。
    そして予約できないとのことですみません。

    タイトなスケジュールでやっているようなので、書店通販(Amazon)の方は結構ギリギリになって掲載されるんじゃないかと思います。
    前回秀和さんのCake本でSmartyView関連を寄稿させていただいたときも、結構直前だった気がします。

    当方でも逐次チェックして、できるようになったらリンクをはらせていただきます。

  3. 返信ありがとうございます。

    自分とって最高のクリスマスプレゼントになります。
    待ちどうしいです。

  4. 発刊おめでとうございます&(有益な本を)ありがとうございます。
    早速予約注文させていただきました。

    Amazonでは、お届け予定日: 2009/12/24 – 2009/12/26 とのことです。
    まさにクリスマスプレゼント!

  5. アマゾンさんにすぐ予約してたんですがこんなメールが・・・
    このたびは、Amazon.co.jpをご利用いただき、ありがとうございます。

    にご注文いただいた商品のお届け
    予定日がまだ確定しておりません。

    滝下 真玄 \"PHPで作る携帯サイト デベロッパーズガイド\"

    継続して商品の調達に努めてまいりますが、調達不能な場合または入荷数の関係

    キャンセルをさせていただくこともございます。

    どうやらアマゾンさん入荷できないかキャンセルになるみたいです。
    すごい期待して待ってたのにむごいっす・・・。
    書店さんで買った方がいいのかな==

  6. Amazonで予約商品の入荷が遅れている件、申し訳ございません。
    当方としても、発売日に書店に並ぶことを大変に楽しみにしていたのですが、このような状況に大変残念な思いです。
    一応、本日紀伊国屋さんに並び始めていることを、ネットの検索でも確認しましたので、お急ぎでしたら店頭での購入も有りかと思います。
    また、楽天booksさんも取り扱いを始めたようですが、こちらも少々納期を待たされる…かもしれません。

    当方も販売状況については気になるところで、本日新宿界隈を少々探索してみたいと思います。

    本当に申し訳ございませんm(__)m。

  7. 誤植です。
    とても細かな部分ですが。。。
    p.187にConfigurationとConfigrationが混ざっています。

  8. ご指摘ありがとうございます。
    改訂版等の機会がありましたら修正したいと思います。

  9. 最近になって携帯ライブラリーのお世話になり始めた者です。
    素晴らしいライブラリーをありがとうございます。

    APPコントローラーに加筆するredirect関数についてなのですが、

    > $url = Router::parse($url);

    の行が、$urlを配列で渡していた場合に文字列「Array」を返してしまい、
    結果的に「http://domainname.com/Array~」というようなURLへのリダイレクトになってしまうという問題があるようです。
    さしあたり、ごく単純に

    > $url = is_string($url) ? Router::parse($url) : $url;

    と改変して使ってみています。
    何か僕の方でカン違いしている恐れもありますが、いちおうお知らせまで。

  10. 申し訳ございません。
    その現象は確認しております(Ktai Libraryの専用サイト内でも、そのようなコメントをいただいていました)。
    対策については、ご指摘の方法で大丈夫かと思います。

    近日、修正や新機能を追加した新バージョンを予定していますが、その際に修正させていただきます。

  11. こんにちは。
    CakePHP初心者です。
    「PHPで作る携帯サイト」を参考に勉強しています。
    ありがとうございます。

    こちらで質問を投げる内容ではないかも知れませんが、情報をお持ちでしたら教えて下さい。

    CakePHP 1.2.6
    PHP 5.1.6
    MySQL 5.0
    RedHat 5系

    この中でMediaPluginを使用してファイルのアップロードを実現しているのですが、アップロード時にどうしてもエラーが発生してしまいます。

    問題の発生箇所
     /app-admin/models/picture.php L.42
    checkLocation

    環境の問題かと思うのですが、同様の問題は発生していませんでしょうか?

    よろしくお願いします

  12. 自己解決です

    PHPのセーフモードが原因でした
    お騒がせしました

  13. ご質問ありがとうございます。
    そうですね、セーフモードですとうまくいかないと思います。

  14. こんにちは

    すみません、また教えて下さい。
    書籍のapp-adminをadminと名前を変更して実験しています
    管理画面にあるメール配送管理についてです

    メールのリストが表示されます
    どれかにチェックを入れ、指定メール削除しました
    削除確認の画面が表示され、削除実行をします
    この時点でのURLのアドレスは
      admin/maildata/delete
    です
    しかし削除実行後は
      admin/admin/maildata/delete
    となり、次のエラーになります
       Error: The action admin_delete is not defined in controller MaildataController
      Error: Create MaildataController::admin_delete() in file: admin/controllers/maildata_controller.php.
    原因が分かりません
    adminパスが増えてしまっているのはなぜなんでしょうか

    メールの部分はオリジナルコードです
    よろしくお願いします

  15. こんな修正方法で良いのでしょうか?

    view のmaildata/delete.ctp 内で
      echo $form->create(null, array(‘url’ => $this->here));
    となっている所を
    echo $form->create(‘Maildata’, array(‘action’ => ‘delete’));
    に変更

    フォルダ名を maildata -> maildatas に変更

    controllers/maildata_controller.php → controllers/maildatas_controller.php に変更

    コントローラの名前を Maildatas に変更

    これで見た目上は正しく動いているように見えます
    いかがですか?

  16. おそらく、サブドメインを作らずに設置・制作されていると思いますので、本書の手順そのままでは動作しないことをあらかじめ念を押しておきます。

    CakePHPでは、本書では扱っていませんが、「prefixルーティング」という機能があり、おそらくその機能に干渉しています。
    少し難しい話をしますが、とりあえず動いているとのことですが、prefixルーティングのルールである「(prefix名)_アクション名」というアクションで動作するところを別のアクションに指定している形式となっていて、内部的には正式の動作をしていないと思います。

    正しい修正方法は、サブドメインを設定してバーチャルサーバのドキュメントルートをadmin/webrootに正しく設定するか、admin/webroot/index.phpに記述されているディレクトリ指定を正しくする必要があります。
    ディレクトリ指定に関しては、cookbookをお読みください。

    ▼cookbook : 3.3.3 応用インストール
    http://book.cakephp.org/ja/view/35/Advanced-Installation

    また、細かい話をしますとdataは複数形で、単数形はdatumです。つまりdatasというのは正しくない英語です。これをdataでも大丈夫なように修正するにはapp(admin)/config/inflections.phpにて指定します(しかしdataは対象になっているはずなのですが…)。

  17. 名前が紛らわしいので、書籍の通りapp-adminと実行しました
    この時点でのURLのアドレスは
      app-admin/app-admin/maildata/delete
    となります

    echo $form->create(null, array(‘url’ => $this->here));
    の$this->hereがapp-admin/maildata/deleteを取得しているようです
    私の環境では厳しいのですが、サブドメイン化すると直りそうですね

    views/maildata/delete.ctp を
    echo $form->create(‘Maildata’, array(‘action’ => ‘delete’));
    にしてコールするとMaildatasのコントロールがないというエラーになり
    echo $form->create(null, array(‘action’ => ‘delete’));
    にするとMaildatnumsのコントロールがないというエラーになります

    この問題は削除を実行する時だけです
    Maildataの一覧を表示する段階では問題ないです

    >app(admin)/config/inflections.phpにて指定します(しかしdataは対象になっているはずなのですが…)。

    私もそう思うのですが・・・
    まだ根本的なところが分かっていないのかもしれません

  18. サブドメインではなく、例えばpublic等に配置した状態で動かしてみました。

    確かに$this->here等でパスを与えると、フォームのURLが「/app-admin/maildata/app-admin/maildata/delete」となりうまくないですね。
    同様に、index内の配信状態の切り替えについても同じような症状が出ています。

    URLの生成はRouter::url()内で行っているのですが、この時にベースパスが「/」でない場合に正しくURLをつくらないようです。調査してみましたが正しい処理ではなさそうなのでCakePHPの不具合報告をしておきました。

    サブディレクトリ環境下では、現状の修正方法はやはり

    < ?php echo $form->create(null, array(‘url => array(‘action’ => ‘delete’))); ?>

    のようにしなければならないようです。

    なお、前述した「prefix」に関しては、現象としてはアクション生成で誤認識をしていますが、URLの不具合については関係がなさそうです。
    訂正させていただきます。

  19. こんにちは

    不具合と思われる箇所を発見しました
    もうご承知の内容かもしれませんがお知らせだけしておきます。

    モデル内に「afterFind」のコールバック関数が定義されています
    この中で使用されている「results」変数が、一部「result」となっている
    ために正常に動作していませんでした

    app-adminの中がほとんどだったと思います。

    一度、ご確認下さい。

  20. ご報告ありがとうございます!
    確かに間違っていますね。

    app-admin/models/customer_profile.php
    app-admin/models/order.php

    内のafterFind()内にそれぞれ2カ所ずつです(同じ処理)。

    近日中に修正ファイルを作ってサポートサイトに反映させます。
    すみませんでした。

  21. こんばんは

    5月25日付で返答頂いた内容ですが、調べてました

    /cake/dispatcher.php l.120
    // $this->here = $this->base . ‘/’ . $url;
    $this->here = ‘/’ . $url;

    このように修正したらうまく動作しているように見えます
    どう思われますか?

    間違ってたら教えて下さい。
    簡単な動作確認では今のところ正しく動いています

    よろしくお願いします

  22. 返事が遅くなってすみません。

    一応CakePHPのバグ報告でそのような報告をしてみたのですが、オフィシャル側では「$this->hereを使うのではなく$this->params[‘url’][‘url’]等を使うように指摘されました。ところが、このパラメータを使ってもうまく動かないかもしれません。この問題は根が深いです。

    手っ取り早く修正するのであれば、それでOKだと思います。しかしコアコードを修正することになるので、あまりおすすめはできません。やはりRouter::url()形式の「array(‘action’ => ‘delete’)」等の方式で渡した方が無難のようです。

  23. こんにちは。
    「PHPで作る携帯サイト」を参考に開発を行っております。
    cakePHPの使い方がとても参考になっております。
     
     画像の公開サイト側での使用方法なのですが、管理側(app-admin)側で
    画像をアップロードした際には、
    「\app-admin\webroot\media」
    に画像が作成され、ここ以下の画像が参照されていると思うのですが、
    公開側(app)で、アップロードされた画像を使用するにはどのようにしたらよいのでしょうか?

    「\app\webroot\media」にも同じように画像が作成されれば問題ないのですが、
    どのような対処をすることで、公開側でも画像を表示できますでしょうか。
     
     現在WindowsにPleiadesを入れて開発しております。
    cake1.3.2であるのと、MediaPluginが0.6なので、多少バージョンと
    環境が違うの環境の問題でしょうか。

    よろしくお願いします。

     

  24. 本編ではシンボリックリンクによるディレクトリの共有を行っていますが、Windowsではこのような機能が無いために実現は難しいと思います。
    本書はWindowsを対象としていませんので、できればVMを利用するなどしてlinux環境でご確認ください。

  25. Linux環境で、シンボリックリンクを作成したところ正常に動くことが確認できました。
    ありがとうございました。

  26. こんにちは

    この本とCakePHP辞典を購入して読み始めたところです。
    サポートサイトからソースをダウンロードしましたが、
    以下の件はまだ修正されていませんか?
    それともサポートサイトが別にあるのでしょうか?

    >ご報告ありがとうございます!
    >確かに間違っていますね。

    >app-admin/models/customer_profile.php
    >app-admin/models/order.php

    >内のafterFind()内にそれぞれ2カ所ずつです(同じ処理)。

    >近日中に修正ファイルを作ってサポートサイトに反映させます。
    >すみませんでした。

  27. なんだ、Twitter 書く暇はあっても無視かよ。
    あきれた、サポートぐらいちゃんとやって欲しいもんだ。

    他にも訂正しなければいけないところはちょこちょこ有るのに。
    情けない。

  28. 無視をしたつもりは全くないのですが、ただいま業務の方が大変に忙しく、サポートが遅くなってしまっている事、大変に申し訳ございません。Twitterの方で当方のTLをごらんにいただいているようでしたら、遠慮無くMentionsをください。

    修正の件は確かにそのままになっております。近日中に修正をしたものを上げさせていただきますが、今週来週は作業をしている余裕がないため、それ以降になるかと思います。申し訳ございません。

    また、お急ぎでしたらこちらのブログではなく、できればサポートサイトから直接ご連絡ください。
    連絡先は書籍に記載されています。

  29. ご回答ありがとうございます。

    私自身はこのブログの情報なりを参考に、grepすれば分かるしバグの修正もできます。

    しかし書籍ですから、新に購入する読者には初心の者も含まれますし、
    本当の初心者はちょっとしたことでもつまずくものです。

    その意味でサンプルのソースコードは大切だと思います。

    その他にも少しではありますが書籍の記述ミスがあります。
    気が向いたらご連絡します。

  30. 翌週以降のつもりでいましたが、今回の件を重く受け止め、ただいま早急に作業させていただきました。
    上記ご指摘の点の他、綴りのミスやライブラリのバージョンアップなどを施したshop102.zipを公開させていただきます。
    ご入り用でしたらサポートサイトにてDLをお願いします。

    ご指摘いただいた件、大変に感謝をしております。
    今後とも当書籍をご愛顧いただけますと幸いです。
    ありがとうございました。

  31. 少し気になったので書き込みます。

    リスト05-29
    ビヘイビア設定
    ‘filterDirectory’ => MEDIA_FILTER となっていますが、
    MEDIA_FILTERが未定義だよ! っていうエラーがでます。

    個人的に少し考えてみて。
    リスト05-28で定義した関数
    MEDIA_TRANSFER_URLを入れてみたところ正常に動きました。

    リスト05-29は
    ‘filterDirectory’ => MEDIA_TRANSFER_URL であってるのでしょうか?

  32. MEDIA_FILTERはメディアプラグイン内で定義されているものなので、問題ないはずなのですが。
    スペルミス等はされていませんか?
    もしくは、app(-admin)/config/bootstrap.php内でapp(-admin)/plugins/media/config/core.phpをincludeする必要があります。bootstrap.phpを確認してください。

  33. 無事動きました^^;

    どうやらスペルミスだったようです。お手数おかけしました。m(_ _)m

コメントは受け付けていません。