東京都府中市、渋谷区のWEB制作会社Maromaroのブログです

2017.02.27

hoshida

CakePHP3初心者が習得のために最初に参考にしたサイトまとめ

めげない!しょげない!やるせない!Maromaro の hoshida です。

今回、触ったこともないCakePHPでウェブアプリケーションを構築しました。普段私は何か新しい技術を勉強するときは、まず一冊本に目を通してから手を動かし始めるのですが、CakePHPはバージョン3が出たばかりで書籍が少なく、すべてWebから参照することにしました。当記事では同じような境遇の方のために、恥を承知でその初動の流れと参考にしたサイトを紹介します。

なお私のもとのPHPのレベルは、ifやforeacheなどの基本的な構文やルールを理解しており、Wordpressのテンプレートを0から作ることはできます。SQLの知識などは無いに等しいですが、データベースの情報をPHPであれこれしてWebサイトにするといった基本的な構造は理解しています。

CakePHPて何ぞや

CakePHP
まずは本家のサイトをみました。トップページに説明らしきものがるけどCakePHPが一体何なのかさっぱりわからないぞ~

CakePHPとは? – PHPプロ!
そこで「CakePHPとは?」でググってみたところ、「CakePHPとは?」というタイトルの記事が出てきました。なるほど、CakePHPとはフレームワークなんですね。フレームワークってなんすか。

CakePHP 概要 | CakePHP Cookbook
CakePHPのドキュメントは日本語対応しています。なのでまずは読んでみる。なるほどわからん。

ローカル環境にインストール

インストールしてなんやかんやするんだ、ということが分かったので、まずインストールしてみよう!

とりあえず手元でいろいろいじりたいので、XAMPPを用いてローカル環境へのインストールを試みます。

XAMPPを使ってローカル環境にWordPressをインストールする方法|バズ部
まずXAMPPの設定。この記事はWordPressをインストールしていますが途中までは同じです。

xamppでローカル作業環境構築 | アライドアーキテクツのクリエイターブログ
XAMPPのもう少し細かい設定。「サイトのルート環境を複数作成する」設定などは役に立ちます。

クイックスタートガイド | CakePHP Cookbook
よーし準備は整った!CakePHPをインストールするぞ!とこちらを進めてみるものの、で、このコマンドはどこに書けばいいんでしょうか。

CakePHP3.xの詳細インストール手順 | jMatsuzaki
インストール方法を別途調べてみる。なるほど、Composerというのをインストールして……あ、なんとなくコマンドを書く場所がわかりそう。

CakePHP3をWindows環境にインストールしてみた。 – どこかのCTOのブログ
XAMPPを使った場合のより具体的な記事がありました。これでインストールできました!!

本家のドキュメントに沿って初期設定

さて、インストールできたものの、気分はiPhoneを与えられたチンパンジーです。本家のサイトにチュートリアルがあるので、これを実践してみることにします。

クイックスタートガイド | CakePHP Cookbook
またこのページにやってきた。コマンドをどこに書けばいいかわかる私にはもう怖いものはないぜ!と思ったら、「データベースの作成」のコマンドをどこに書けばいいかわからない。怖いものありました。

テーブルの作成(CREATE TABLE文) – テーブルの作成 – MySQLの使い方
調べてみるとこれはどうもCakePHPじゃなくてデータベース側に書くコマンドっぽい。ていうかよく読んだらクイックスタートガイドのところに書いてありますね…

phpMyAdminを使ったサンプルデータベースの作成 | XAMPPの使い方
というわけでXAMPPのphpMyadminで新しいデータベースを作成。上記記事では管理画面操作でテーブルを作成していますが、上部メニューの「SQL」をクリックするとSQLの入力フォームが出てくるので、そこにクイックスタートガイドの「データベースの作成」のコマンドを入力します。

これでデータベースの設定ができました!

ところが今度は「Scaffold コードの生成」がうまくいかない…

デザインがリニューアルされたCakePHP3でbakeしよう! – QiitaQiita
調べてみたら、同じことをしているのに本家のドキュメントに書いてあるのと若干違うコードが出てきました。よく見ると本家にも「Windows 上では、代わりに bin\cake を使用する必要があります。」って書いてある。そーいうのがあるんですね。

ここでCakePHPの「bakeコンソール」によってScaffoldコード、つまり作ろうとしているアプリケーションのベースのコードが生成されるのですが、これが恐ろしく便利。データベースを作成し紐づけてさえいれば、数行コマンドを打つだけでいくつものファイルに自動的に記述がなされ、もう動くものができてしまいます。

ただスーパー初心者の私にとってみれば何も理解していないのに基礎が出来上がってしまい、どこをいじれば修正できるかもわからない。制御できないモンスターを召喚してしまった気分。まるで炎を最初に手にした人類です。

とにかくチュートリアルに従って作ってみる

ここからはひたすらドキュメントに沿ってサンプルアプリケーションを組み立てていきます。

クイックスタートガイド | CakePHP Cookbook
先ほどの続きを引き続きトライ。言われるままにコードを書いてゆくと何かアプリケーションのようなものが出来上がります。

ブックマークチュートリアルド | CakePHP Cookbook
チュートリアルはいくつか用意されているので、一旦データベースや書いたコードをリセットして次に進みます。

ブログチュートリアル | CakePHP Cookbook
もう少し高度なアプリケーションができるチュートリアルもやっていきます。

この辺りで、CakePHPの「MVCモデル」の動きがぼんやりと理解できています。どのファイルがどういう仕事をしているのかなんとなくわかってきました。ようやく猿に知恵がついてきた感じがします。

独自のアプリケーションを作り出す

さて、ここからが本番です。チュートリアルで出来上がった毒にも薬にもならないアプリケーションをベースにして、当初の目的であったアプリケーションをいよいよ作り始めます。

必要な仕様の実装方法を調べ、実際に実装するという作業を繰り返します。以下はその際参考にしたウェブページの一部です。

CakePHP3の使い方まとめ – QiitaQiita
割と原理的な仕組みやテクニックが端的に箇条書きされています。最初の方に見ても意味が分かりませんが、何度も立ち返って参考にしました。

CakePHPでDB関連テーブルのレコード・データを取得 | EasyRamble
こういうの簡単にできるってわかっているんですが具体的なやり方はわからないですよね。

[CakePHP2.x] フォームから保存時にデータを追加する方法: ダメ元でいこう
旧バージョンに関する記事も、内容によっては参考になります。こういうのを見ていくと「bakeコンソール」が自動生成したコードが少しずつ理解できていきます。

データベース検索の基本(1/5):初心者のためのCakePHP3 プログラミング入門
検索フォームの作り方を丁寧に解説している最高のサイトです。てかこちらのサイト初心者向けにCakePHP3全般について説明しているので最初に全部読めば良かったんじゃない?と思いました。

CakePHP 3のQueryBuilderの使い方をまとめてみた! – QiitaQiita
検索フォームに必要なQueryBuilderについて丁寧に説明しています。

cakephp3 バリデーション(2) — validation of cakephp3 — | 徒然なるままに — Ennui Style —
バリデーションについて説明しています。

作業していると提示されたコードをどこに書けばいいのかわからない問題が頻発します。そういう時はそれはそれで調べたり、既存のコードを読み解くことで明確にしていきます。

アソシエーション – モデル同士を繋ぐ | CakePHP Cookbook
結局のところほとんどの方法は本家のドキュメントに書いてあるうえ最も正確な情報があるので、頻繁に立ち返ります。ただまだ和訳されていないページなどもあり痒い所に手が届きません。

CakePHP – CakePHP3でのContainに条件を含める(26514)|teratail
検索項目にリレーションしているテーブルの内容を含める方法を説明しています。

CakePHP 3のORM matchingメソッドで複数の条件を指定する方法 | ある蜜柑の上にアルミ缶
こちらもリレーションテーブルを検索する際のテクニックです。

CakePHP3 のFormHelperが生成するHTMLをカスタマイズしたい – QiitaQiita
CakaPHPは簡単な記述で input タグなどフォームのパーツを生成できるのですが、フォームのデザインをCSSやJavaScriptでゴリゴリに素敵にする場合、生成されるHTMLのパーツをカスタマイズしたくなります。その方法が説明されています。

CakePHP3.xでのAuthコンポーネントの使い方 | jMatsuzaki
ログイン機能の細かい設定の方法です。

CakePHP3でログイン中ユーザーが本人のユーザー情報のみを編集・削除できるように制限 | EasyRamble
こちらもログイン機能周りです。

Cake3でお問い合わせフォームを作成する方法(DBを使わない) – QiitaQiita
フォームの作り方!ちなみにローカル環境ではCakePHPにメール送信させるのにひと手間かかるようです

CakePHPで404などエラーページを表示 | EasyRamble
404ページの作り方!

パスワードをハッシュ化する – CakePHP3でサイト開発 Part.3 – クーディップ株式会社(Coodip, Inc.)
平のパスワードとハッシュ化されたパスワードの一致確認の方法を参考にしました

CakePHP3でSessionを使う : 週末IT
セッションの扱い方です。パスワードなどを記憶してしばらくログインしなくてよくなるあれですね。実は私セッションについてもにゃりとしか理解していなかったのですが、ある機能を実装するためにこの概念を把握しました。

セッション | CakePHP Cookbook
本家のドキュメントにもセッション関連のコードはまとめられています。

CakePHP3でのリクエストパラメータの取り方 – サーフィンするためにコード書く
URLに独自のパラメータを持たせてデータをやり取りする方法です。実に簡単です。

この辺まで来ると用語も分かってきて比較的簡単に問題解決できるようになってきます。ついに言語を獲得したという気分です。

環境の移動

油断できないのは、ローカルで作業していたものをテストサーバや本番サーバなどの他の環境に移動するときです。CakePHPをインストールする方法も状況によって変化します。初心者にとっては大きな関門が最後に待ち構えているわけです。

さくらのレンタルサーバでCakePHP3を使うためにintl extensionを導入する方法 | ごろつきめも
さくらのレンタルサーバにCakePHP3を導入 – moshimore Knowledge
例えばさくらのスタンダードなサーバーにはするっとインストールすることができませんのでがんばります。

CakePHP3とさくらインターネット|My Tab
環境によってディレクトリ構造も若干変わったりします。するとリダイレクトの設定を調整する必要が出てきたりします。

この辺の問題は環境や状況によって千差万別だと思いますので、都度対応してゆく必要があるでしょう。

以上です。今回紹介した記事を書かれた皆様には感謝です。何から手を付けていいかわからない、という方に当記事がお役に立てれば幸いです。

なお、途中で謎扱いしているフレームワークについてはこちらの記事で解説しています。