CakePHP2.0 トップページを作る

「CakePHP2.0 データベースの初期設定」の続き。CakePHPのデフォルトのトップページから赤や黄色の帯が消えたところ。

これで開発を始めることができるわけだけど、最初に何をしたらいいのか?
CakePHP1系に馴染んでた人なら、さっそく何か適当に一通りBakeして、1系で動いてたビヘイビアやらコンポーネントやらが2.0だとどうなっているのか挙動をテストして・・・とか思うとこだろうけど、この記事は徹頭徹尾、ゼロからスタートの感じで書きたい。
というわけで、平凡ですがまずはトップページからいきます(´~`;)

CakePHP1.3とかを使い慣れていて、そこからの移行を検討してる人にはあまり役に立たないと思いますが悪しからず。

トップページがCakePHPのデフォルトのままでは困ってしまうので、まずはそこからいじりたいわけだけど、どうすればいいのか。実は上の画像の画面からちょっと下にスクロールしたところにちゃんと書かれてます。

Editing this Page
To change the content of this page, create: APP/View/Pages/home.ctp.
To change its layout, create: APP/View/Layouts/default.ctp.
You can also add some CSS styles for your pages at: APP/webroot/css.

このページを編集するには
このページの内容を変えたければ「APP/View/Pages/home.ctp」を作れ。
レイアウトも変えたいなら「APP/View/Layouts/default.ctp」を作れ。
CSSでスタイルを設定したければ、自作のページ用のCSSファイルを「APP/webroot/css」フォルダ内に作れ。

はい。たしかに、この通りにやればできます。
ただ、単に「こう書いてあるからやってみました」でやってみて無事できても、多分トップページしかいじれないで終わっちゃうと思うんですよね。(笑)今後のためにも、ここで少しCakePHPのリクツを理解しておく必要がある。

あと、やっぱりCakePHPにはCakePHP風の書き方ってものがあるので、ファイルを作る場合も単に白紙のファイルとして作るんじゃなく、まずはデフォルトで使われてるものをコピーして、そこから作っていった方が便利なことも多いです。
この場合も、home.ctpは白紙で充分だけど、レイアウトファイルであるdefault.ctpに関してはデフォルトのファイルをコピーして使った方が話が早い。

ただ、「デフォルトのファイルをコピー」といっても、デフォルトのファイルがどこにあるのかが問題です。そもそも今、このトップページは、どこの何ていうファイルを表示している状態なのか?

ここでCakePHPのフォルダ構成を見てみます。CakePHPの親フォルダの中には「app」や「lib」といったフォルダが入ってるんですが、この「app」が「CakePHPを使ってアプリケーションを開発していくためのフォルダ」です。我々がファイルを作ったり編集したりするのは、基本的にすべてこのフォルダの中です。

それに対して、「lib」というのはCakePHPのシステムがそのまま入っているところです。CakePHPのユーザーは「app」フォルダ内で少し命令を書くだけで、ややこしい処理の大半を「lib」内のファイルが引き受けてくれるので、比較的簡単にいろんな処理が実現できちゃうという仕組みです。
それだけに、「lib」フォルダは我々アプリケーション開発者が「いじるべきではない」領域、ということになるわけですが、じゃあブラックボックスとして単にほっとけばいいのかというと、そうではないんですね。

今みたいにデフォルトのファイルを見つけてコピーする場合はもちろんのこと、デバッグのためにソースをたどったり、ときには自作のクラスの継承元として使ったり。編集はしないが、参照は大いにする、という感じの関わり方になるわけです。

そこで「lib」フォルダも含めたCakePHP全体のフォルダ構成をよくよく見てみると、実はこれから開発を進めていく「app」フォルダって、「lib」フォルダの中の「Cake」フォルダと構成がよく似ています。

「Config」「Controller」「Model」「View」などの共通するフォルダが格納されてることがわかると思います。
これがどういうことかというと、

  • CakePHPのシステムは基本的に「lib/Cake」フォルダ内のファイルを使って動作していますが、
  • appフォルダ内の同じ場所に同じ名前のファイルがあった場合は、そちらを優先して使おうとします。

構成が似ているのはそのためです。なので、CakePHPがメッセージとして

このページの内容を変えたければ「APP/View/Pages/home.ctp」を作れ。
レイアウトも変えたいなら「APP/View/Layouts/default.ctp」を作れ。

といっている、というのは、要するに今現在、

このトップページの内容は「lib/Cake/View/Pages/home.ctp」に、
レイアウトは「lib/Cake/View/Layouts/default.ctp」にありますよ!

といっている、ということにほかならないわけです。従って、ユーザーが新しく「APP/View/Pages/home.ctp」や「APP/View/Layouts/default.ctp」を作れば、CakePHPはlibフォルダ内の同名のファイルの代わりにそちらを使って動こうとするはずです。

フォルダ構成がなんとなく理解できたところで、さっそく実際に白紙のhome.ctpを「APP/View/Pages」フォルダ内に作ってみることにします。
ブラウザを更新してみると、

大変スッキリとなりました。上下の青い帯がCakePHPでいう「レイアウトファイル」に依存する部分で、そこだけが残っている状態です。

続いてデフォルトのレイアウトファイル「lib/Cake/View/Layouts/default.ctp」をコピーして「APP/View/Layouts/default.ctp」を作ります。
こちらはファイルを作ったといっても中身がまったく一緒なので、ブラウザを更新してもページの見かけは上の画像のままですが、新しい方のレイアウトファイルのBODYタグ内に何か適当な文字列でも書き加えてみれば、間違いなくappフォルダ側のdefault.ctpが読み込まれているということが確認できると思います。

ここから先は、このappフォルダ側の2つのファイルを編集していくことで独自のトップページを作っていきます。

両ファイルの関係性についてですが、2つのファイルのうちレイアウトファイル(default.ctp)はトップページ以外のページにも共通する部品を書くためのファイルです。共通する部品としてはHEADタグ内の全要素に加え、ヘッダー/フッター/サイドバーなどが考えられると思います。
一方、ページ別のファイル(home.ctp)に書かれた内容はレイアウトファイル内で変数「$content_for_layout」として呼び出されるため、

<?php echo $content_for_layout; ?>

の行に出現することになります。

CakePHP2.0 データベースの初期設定

「CakePHP2.0を試してみる」の続き。前回はSecurity.saltとSecurity.cipherSeedの設定が終わるところまで書いた。

考えてみると、このへんってCakePHP1.3のころとべつだん変わってないから、いつ本題にたどり着けるのかって感じがしないでもないな。(笑)今んとこ、フォルダ名がCake1.3までとはところどころ変わってて「へえ」と思う、くらいの違和感しかないんですが。多分そのうち何か出てくると思う。
リアルタイムの記事なのでどうぞ大目に(^^;

続いて最後に残った黄色い帯を片付ける。これは帯にある文言の通り、データベース(MySQLとか)への接続を定義するファイルが作られていないよ!という内容です。
これまで問題になった2本の赤帯と違って黄色(警告)止まりなのは、CakePHPはデータベースなしでも動くから。ただ、ちょっと複雑なものを作ろうとするとデータベースが使えた方がやっぱり便利なので、ここでは設定しておくことにします。

帯のとこに書いてある通りにapp/Config/database.php.defaultファイルを改名・・・するのではなく、コピーしてapp/Config/database.phpを作ってみる(前回のbootstrap.phpと同じ考え方で、デフォルトはなるべく残すようにしてます)と、黄色い帯は消えないものの表示内容が変わる。

「(定義ファイルはあるけど)データベースに接続できないよ」、という意味の文言に変わってるのがわかると思います。なので引き続き、

  1. このサイトで使うデータベースを準備して、
  2. そのデータベースの設定に従ってdatabase.phpの内容を書き換える、

という作業に取りかかります。

ここでは王道中の王道であるMySQLを使うことにします。というか僕はこれしか使ったことがなXAMPPにも最初から入ってるし。
データベースはXAMPPに入ってるphpMyAdminから作ります。コマンドラインからもやれるらしいけど個人的に詳しくないのでパス。phpMyAdminには、XAMPPがちゃんと動いてれば「http://localhost/phpmyadmin/」からアクセスできるはず。

初期画面から「データベース」タブを選んで、

作成したいデータベース名を入力し(仮に「sample」とします)、「照合順序」には「utf8_general_ci」あたりを選択して送信すると、

作ったばかりのDBが開きます。

さあ早速テーブル(表)を作れ!といわんばかりの画面になってるけどそこはスルーして「特権」タブを開き、「新しいユーザを追加する」リンクをクリック。

「ユーザ名」「パスワード」「もう一度入力してください」の3箇所だけ入力して、だいたい画像の通りになってると思ったら「実行する」を押します。

ユーザー名とパスワードはお好きなように。画像の例では「username」さんとしてみました。パスワードは「password」。

これで、できたばかりのデータベース「sample」に対して、指定のパスワードを使って接続すれば「どんな操作でも」実行できる新規ユーザー「username」さんが作成できたわけです。
あとは、この設定をさっきのCakePHPのdatabase.phpに反映する。

    public $default = array(
        'datasource' => 'Database/Mysql',
        'persistent' => false,
        'host' => 'localhost',
        'login' => 'user',
        'password' => 'password',
        'database' => 'database_name',
        'prefix' => '',
        //'encoding' => 'utf8',
    );

    public $default = array(
        'datasource' => 'Database/Mysql',
        'persistent' => false,
        'host' => 'localhost',
        'login' => 'username',
        'password' => 'password',
        'database' => 'sample',
        'prefix' => '',
        'encoding' => 'utf8',
    );

というような具合に編集して保存します。ここでブラウザ(phpMyAdminじゃなくてCakePHPを開いてる方!)を更新すると、

やっと警告の帯が消えました。これで開発に取りかかれます!

これ、正直なところ書くのはけっこう大変だったし(ボソ)、読むのもちょっと大変だろうけど、実際の作業としては順調にいけば10分もかかりません。大したことないからやってみて。
解説記事って、そうだよな。そういうものだよな。(笑)

できればまた続き書きます。

「料理の写真を撮るのはマナー違反」か

「料理の写真を撮るのはマナー違反」に寄せて。

──────────

この問題、個人的にはまったく気にしませんし、写真は撮りたければ撮ります。いちいち店の許可は取りません。
気をつけるのは、ほかのお客は極力写り込まないようにすることと、店のスタッフもなるべく写り込まないようにすること。そしてもし写り込んだ場合は、その写真をブログなどに使わない(あるいは、判別が困難なところまで縮小して使う)こと、という程度です。

ざっくりいえば、料理というのはレストランの商品です。商品なのに、買っても自由に楽しめないというのは奇妙です。(笑)
もちろん、店に「撮影はご遠慮ください」という明記があれば、僕もそれに従います。その場合は、あらかじめ「撮影する楽しみを差し引いた上で、購入するだけの価値のある商品か否か」という判断になるので問題はありません。

この記事の場合のような、撮影禁止を明示していない一般的なレストランにおける「撮影はマナー違反」という主張は、ある種のラーメン店の「ガンコオヤジ」と同様、商品の楽しみ方を一方的に規制する(「雑談するな!スープは残さず飲め!文句があるなら帰れ!」)態度の範疇だと僕は考えています。
個人的には「楽しみ方は自由であるべきだ」という考え方なので反対です。

仮にその2つは程度が違う、ガンコオヤジはダメだが撮影はマナー違反だ、という意見があるとすれば、線引きはどこにあるのか。
「パスタを音を立ててすする客にはお引き取り願うイタリアン」はどうでしょう。「貧乏揺すりするとスタッフに注意される寿司屋」は?「食事中にメールすると怒られる大衆食堂」ならいかが。

僕自身のマナー感覚でいえば、たとえば「貧乏揺すり」なんかの方がはるかにマナー違反としてしっくり来ますし、自分がその種のマナー違反をしないということに関しては自信を持っています。ただ、そもそも「マナー」も「常識」も、それを口にする人のエゴの反映に過ぎないという点には留意すべきです。
こういう線引きというのは常に難しい問題で、単純な「常識」「マナー」の一言で断定していいような問題ではないと感じます(元トピックにはその種の回答が実に多かった)。

元トピックに登場する男性は、料理を撮影したトピック主の女性のことを「非常識だ」といって怒ったということですが、それも単に「自分を尻目に写真に集中されてしまった」不満を、便利な「常識」に転嫁しただけではなかったか、という点がちょっと引っかかるところです。

CakePHP2.0を試してみる

最新のCakePHP2.0は1.3時代とはだいぶ変わっているらしい、と聞いて自分のサイトで試してみることに決めた。なんとなくいろいろ煮詰まっていたし、勉強を兼ねて何かやろうと。それも今のサイトをCakePHP2.0に移植するんじゃなく、この際まっさらにして作り直すつもりで。
以下、メモ書き程度に。前提としてる環境はWindows、XAMPP。

とりあえず公式サイトから現時点で最新版の「2.0.5安定版」をダウンロードしてきて解凍する。できたフォルダは適当に改名して(僕は「karasunouta.dev」にした)、XAMPPのhtdocsフォルダに置く。そしてブラウザから「http://localhost/karasunouta.dev」にアクセスしてみる、というのがスタート。

ちなみに・・・僕の場合はいろいろ環境をいじってて、htdocsフォルダを「xampp_www」と改名してXAMPP本体とは別個に配置してあったり、ブラウザからも「http://localhost/karasunouta.dev」じゃなく「http://karasunouta.dev/」でアクセスできるようにバーチャルドメインを設定してあったり、開発しやすいように工夫してます。
この記事の内容には影響ないはずだけど念のため。

さて。ブラウザからアクセスすると、こういう画面が出てくる。

さしあたり、赤、緑、黄色の信号機カラーの横長の帯が問題です。この3色が何を意味しているかというと、CakePHPで開発を始める上での環境チェックの結果。誰でも想像がつく通り、赤はヤバい。黄色はちょっとヤバい。緑はまあ大丈夫、という意味のメッセージになってる。

最初の赤帯2本はapp/Config/core.phpファイルの「Security.salt」と「Security.cipherSeed」という2つの値を変更しろ、という警告です。これはどっちもセキュリティに関わるものなので素直に書き換えておく。
・・・のもいいんだけど、個人的にはこのcore.phpには手を付けず、同じフォルダにあるbootstrap.phpというファイルで設定を上書きするのが好みです。そのやり方の方が、「デフォルトはどうなっていたのか」を常に参照できて便利だから。

両ファイルの関係性としては、core.phpがCakePHPのシステムファイルそのものなのに対して、bootstrap.phpは「利用者が好き勝手にいじっていいファイル」という立ち位置だと思っておけばいいと思います。
この方法でやる場合は、core.phpから

Configure::write(‘Security.salt’, ‘~’);
Configure::write(‘Security.cipherSeed’, ‘~’);

の2行をコピーしてきてbootstrap.phpに貼り付け、値だけを適当に変えることになる。
値については、Web上を探すと親切にランダムで生成してくれるサービスが見つかったりするのでお世話になっておくといいと思う。

cipherSeedは数字じゃなきゃいけないとか、何文字以上何文字以下とか、こういうのって必ずなんらかの規則があるものなので、自分で考えるのはめんどくさいです(ナゲヤリ)。

bootstrap.phpに貼り付けた2行を書き換えてブラウザを更新してみると、

めでたく2つの赤帯が消えました。
次はいちばん下の黄色い帯をなんとかしなきゃ、ということになるわけですが、とりあえず今日はここまで。続き書けるかな(コソ

慢性鼻炎を克服したっぽい。

子供のころからの杉花粉アレルギーに加え、成人後は慢性鼻炎にも悩まされるようになって、しょうがなく点鼻薬を常用してきたけど、昨年末の2週間でその習慣に終止符を打てたかもしれない。
べつに体質が変わったとかじゃなく、ちょっと試してみてた内容があって、それで結果が出たので。

点鼻薬は、一般的なやつだと常用してると鼻の粘膜をどんどん劣化させてしまうらしいので、そういう弊害の少ない「ザジテンAL」というちょっとお高いのを使ってました。
でもいくら悪影響が少ないといったって、薬の常用ってなんとなく気分がよくないよね。本来、身体が持ってるはずの復元力みたいなものを、薬に依存することによって眠らせてしまってることに変わりはないわけだし。

それで今回試してみたのが、この記事のやり方。
らばQ「これは画期的!その場であっという間に鼻づまりを治す方法」

鼻づまりを治す6ステップ

ステップ1:深く息を吸う。
ステップ2:吐く息がなくなるまで、ゆっくりと息を吐く。
ステップ3:鼻をつまむ。
ステップ4:頭を上下にゆっくりと動かす。空を見て、地面を見るまで2秒くらいのスピードで。
ステップ5:これをもう息が必要という、ぎりぎりのところまで続ける。
ステップ6:鼻づまりが解消した、空気の通う鼻呼吸を楽しむ。

この記事自体は、たぶん書かれた当時にも読んだことがあったはず。2011年の4月、となってるから、きっとそのころにも試してみてたんじゃないかな。

そのときは、杉花粉真っ盛りの時期だったせいもあってか、まったく効果を感じなかったんだと思う。(笑)今となっては記憶すらあやふやなくらいに期待感もなかったし、憶えてないってことは結果も出なかったんだろう、たぶん。
でも今回、杉花粉と無縁の「ただの鼻づまり」の状態で試してみたところ、この方法で鼻が多少通るのを感じた。

といっても、僕が常用してたザジテンALは服用し続けることで持続的に効果を発揮するタイプの薬だから、数日経って薬の効果が完全に切れた状態で試したら、やっぱりダメかもしれない。
そう思って、実は12月の後半から2週間ばかり点鼻薬の服用を完全に断って、鼻が詰まるたびにこの方法を試す、というだけの方針で過ごしてみたんだよね。

結果、最初の数日は日に1,2回この儀式をやる必要を感じたものの、それ以降はあまりやらなくても一応鼻が通る状態が続いてて、このままなら点鼻薬を卒業できそう、というハコビになりました(・v・)♪
杉花粉の時期にはまたお世話にならざるを得ないかもしれないけど、まあそれはそれとして。面白いなあ、人間の身体、と思うよ。あと、これまで使ってきた点鼻薬代がもったいなかったな・・・とかもちょっと。(コソ

原理的には、らばQの記事でも紹介されてる

・酸素が欠乏していると自分をだますことで、脳が空気を通させようとして、血液の循環を減らして鼻腔を開いてくれる。実際に鼻づまりは血液がそこに集まり、充血することで起こることが多いので、鼻をかんでも何も出ないんだ。

という説が、特に出典とか書かれてないけどなんとなく正しそうに思える。脳をだましてるとはいえ、やってることはただ息を止めて軽い運動(というか所作)をしているだけで、普通に生活してても起こりうる程度の負担だから、点鼻薬より身体に悪いってことはあるまいと思う。
同じ苦労してる人がもしいたらお薦めです。慢性じゃなく杉花粉アレルギーとかでも、軽度ならこういう対策だけでなんとか乗り切れるかもしれないし。

鼻 (角川ホラー文庫)
Powered by AmazonLink 2.0.0 beta4.
曽根 圭介
角川書店