∑考=人

そして今日も考える。

Cakephpでハマるとこ①

2週間ほど前に、そろそろ普通に開発する手順は理解できたし、フレームワーク使ってみようかな・・・ぐらいの軽い気持ちでCakephpというWebアプリ開発のフレームワークを導入してみました。

 

一応公式のサイトもあるし、ドットインストールとかの動画見ながらやれば簡単なアプリなら作れるだろうと思って安易に手を出したんですが、これが簡単そうで中々上手くいかない。環境レベルのところで何度もハマったので、この2週間はガッツリMacの前から離れることができませんでした。

 

というわけで、ちょっと技術系のメモを残しておこうと思います。

Cakephp規約あれこれ

cakephpをインストールして開発を進めるための手順というのは色んなところで紹介されています。あんまり詳細には触れませんが、だいたい下記手順です。

  1. Cakephpを公式サイトからインストールして、フォルダ名を適当な名前(仮に[A]とする)に変えて、開発環境に配置。(CentOSなら/var/www/html/[A]と言った具合。)
  2. apacheに[A]/app/tmp/への書き込み権限を付与。この時点で、[開発環境のアドレス]/[A]をブラウザで開くとCakephpのトップページが表示されるはず。
  3. [A]/app/Config/のdatabase.php.defaultをコピーして[A]/app/Config/database.phpを作成。
  4. database.phpのDATABASE_CONFIGのデータベース設定(user, password, database)を変更。(前提としてDBは作っておく必要あり。)

と、まぁここまではあんまり問題は発生しないと思います。次からはCakephpの特徴でもあるMVCモデルに基づき、Model、View、Controllerクラスを作ります。作ればトップページのエラーが消えるはずなのだが、消えない。こんなエラーが出ました。

URL rewriting is not properly configured on your server. 1) Help me configure it 2) I don't / can't use URL rewriting

 で、このエラーをググってみるとだいたいどこのサイトでも二つの方法が示されていました。代表的なものはこちら→mod_rewriteの設定 - CakePHPの使い方

 

しかし、これらはどちらも私の環境では設定済みでした(こういうことはほんとによくあります)。こうなるともう八方塞がりです。で、まぁ色々とがむしゃらに調べて、デグレ覚悟で問題がありそうなところを色々試しに変えている中で一つの間違いに気づきました。それが規約です。結論としては、Model、View、Controllerを作るときの規約に沿っていなかったせいで全く関係無さそうなエラーが出ていたのです。(理由は未だに不明。)

 

まずModelに対応するDBテーブルの名前ですが、キャメルケースではなく、スネークケース(アンダースコア区切り)でつける必要があります。そして、複数のデータから成り立つという意味なのか、英語の複数形に該当する名前である必要があります。(user_nameや userNamesではなくuser_namesといった具合)

 

そして、テーブルの名前と紐付いてModel、View、Controller、のファイル名も定まります。テーブルの名前がuser_namesの場合、作成する場所及びファイル名はそれぞれ、[A]/app/Model/UserName.php[A]/app/Controller/UserNamesController.php[A]/app/View/UserNames/index.phpとなります。ModelとControllerについては中に記述されるクラス名とファイル名も同じです。Viewはディレクトリがテーブル名と対応します。

 

テーブル名はスネークケースだったのに対し、phpファイル名はキャメルケースで定義する必要があります。プログラムが自動的にアンダースコア+小文字を大文字に変換するみたいです。(なんでこんなことするんでしょうね。)

 

まぁ正直ここまでは良かったんですよ。なんかちょっと調べれば出てきますし。ただ私はこの命名規則を理解しただけで安心してしまったんですね。ただ結論から言うと、命名規則は他にもありました。テーブルだけでなく、その一つ一つの要素のカラムについても規定されていたのです。

 

その最たるものが、「(テーブル)の主キーはid」であること。他にも、他のテーブルを外部キーで参照する場合は、「〜_id」になっていなければならなかったり、カラムはスネークケースで記述しなければならなかったり。テーブルから作り直しです。

 

初心者がこういったエラーにぶち当たると原因特定が非常に困難なんですよね。で、原因がわからないから色々調査しないといけないし、個人用で技術系のブログを書いている人なんかはこのあたりの前提が当たり前過ぎてすっ飛ばしちゃってるので意外と簡単に出会うことができないもんです。

 

まだ他にも規約は色々とあるでしょうが、このあたりを押さえておけば、まずまず一般的なアプリは作れるんじゃないかと思います。もちろん、上記の規約を守らなくたって、コーディング自体は可能です。ただし、細かい設定方法は公式サイトをよく読まないとわからない(そもそもある程度代表的なものしか書かれていない)ですし、規約を守らないならフレームワークを導入するメリットが薄れてしまいます。どうせ使うならなるべく効率的に使いたいですよね。

 

長くなってしまったので、続きは次回。