CakePHP 4 のインストール方法と僕が考える学習のポイント

はじめに

CakePHP はパワフルなフレームワークです。保守性の高い堅牢なシステムをすばやく作ることができます。

しかし、公式ドキュメントの「CakePHP 4.x Cookbook」を見ると項目が多くて、敷居が高いと感じるかもしれません。

そこで今日は、これから CakePHP を始める方に少しでも役立てばと思い、CakePHP 4 のインストール方法と、僕が考える学習のポイント をご紹介します。

今回は XAMPP 7.3 と CakePHP 4.0.6 で確認していますが、他 OS でも同様の方法でインストール可能です。

目次
  1. CakePHP 4 のインストール方法
  2. コーディング規約は守った方がいい
  3. まずはチュートリアルをやってみよう
  4. Cookbook や非公式資料(ブログ等)を調べる際の注意点
  5. MVC にコードを書く
  6. Component、Helper、Behavior を自作する
  7. Bake や Migration を使えるようになる
  8. CakePHP の公式ドキュメントを読む
  9. おわりに

1. CakePHP 4 のインストール方法

CakePHP を動かすには PHP の mb_string 拡張simplexml 拡張intl 拡張が必要です。有効化の方法は割愛しますので、検索サイトなどで調べてください。

CakePHP は Composer を使ってインストールします。

Composer は PHP の各種ライブラリのインストールや管理を楽にしてくれるツールです。インストール方法などの詳細は割愛しますが、ネット上で「composer インストール windows」等で調べればすぐに見つかると思います。

CakePHP は下記コマンドでインストールできます。
コマンド内の /path/to/web-dir/ と myapp には任意のフォルダ名を入力してください。

また Set Folder Permissions ? (Default to Y) [Y,n]? ではそのまま Enter キーを押して OK です。

> cd \path\to\web-dir\
> composer create-project --prefer-dist cakephp/app:4.* myapp
...
Created `/path/to/web-dir/myapp/tmp/cache/views` directory
Set Folder Permissions ? (Default to Y) [Y,n]?
Updated Security.salt value in config/app_local.php

データベースを使用する場合は config/app_local.php を開き 'Datasources' の 'default' の各値を変更してください。

ブラウザでアクセスして、下記画像のように表示されれば OK です。

Database のところが赤いアイコンで「CakePHP is NOT able to connect to the database.」というメッセージが出る場合はデータベースに接続できないので、設定等をご確認ください。

なお、この画面は /src/Controller/PagesController.php の display() に実装されており、テンプレートは /templates/Pages/home.php にあります。

2. コーディング規約は守った方がいい

CakePHP には厳密なコーディング規約があります。このコーディング規約を守ることで、コードの統一感が生まれ、保守しやすくなります。

また新しくプロジェクトにジョインする人に「規約は CakePHP のルールに従ってね」といえば済むのも、大きなメリットだと考えています。

3. まずはチュートリアルをやってみよう

CakePHP を初めて触る方には、まず Cookbook のチュートリアルをおススメしています。

目標は「CakePHP の全体像をなんとなく把握する」ぐらいで OK だと思います。よく分からなくても大丈夫です。個人的にはコードをコピペせずに自分で入力した方が理解しやすいと思います。

4. Cookbook や非公式資料(ブログ等)を調べる際の注意点

CakePHP の公式ドキュメントは充実しており、日本語化もされています。

しかし日本語版は整備が遅れることがあるため、英語版を参照するのが一番良いです。
(この記事で紹介しているページは、敷居を少しでも下げる目的で日本語版にしました)

英語が不得手という方は、まずは日本語版を読んで、それでエラーが出るようなときは英語版を確認すると良いと思います。

また、ブログ記事などを参考にする場合には、どのバージョンについて書かれたものかを確認してください。

参考資料からキーワードを見つけて、公式ドキュメントで調べなおすとより正しい方法でコーディングできます。

5. MVC にコードを書く

CakePHP には MVC モデル(Model、View、Controller)が採用されています。特に MVC 構造でつくるのが初めての方は、まずはこの3つを使って作りはじめるのがオススメです。

以下、学びやすいと思う順序で紹介します。

5.1. Controller

コントローラには各画面を関数として実装します。
例えば、ArticlesController に public function add() を実装すれば、https://example.com/articles/add でアクセスできるようになります。

余談ですが https://example.com/ で PagesController の display() が表示されるのは、config/routes.php の $builder->connect('/', [...]) の箇所でルーティングの設定をしているためです。

5.2. View

CakePHP で ビュー というときには View クラスTemplate の2つがあります。

View クラス は画面描画に関する処理を記述するところで、テンプレートで使いたい自作関数(ヘルパー)の読込みや、テンプレートに Twig などを使いたい場合の設定などを書きます。

Template は各画面のテンプレートファイルのことです。

この中では「<?= $hoge ?>」や「<?php if ($a) :?>」「<?php endif; ?>」の書き方を使うのが一般的だと思います。

そして Element を覚えると重複コードが減り、メンテがしやすくなります。

5.3. Model

CakePHP 4 のモデルには TableEntity があります。
どちらも、基本的にはデータベースの1テーブルにつき1つ用意します。

Table はテーブルに関する処理を書くところで、各フィールドのバリデーションルールや結合するテーブル(アソシエーション)などを記述します。

そして カスタム Finder メソッド は是非使えるようになってください。データ取得に finder の組み合わせを使うことで、作業効率がよくなります。

Entity には1つのレコードに関する処理を記述します。

Entity の機能では 仮想プロパティ を是非覚えてください。

6. Component、Helper、Behavior を自作する

MVC での実装に慣れてきたら、次はコンポーネント、ヘルパー、ビヘイビアーの自作に挑戦してみてください。より早く、保守性の高いコードが書けるようになります。

6.1. Component

コンポーネントは、各コントローラで使用する機能を実装するところです。コントローラが肥大化している場合は、処理を関数化して、コンポーネントに実装出来ないか、検討してみてください。

6.2. Helper

ヘルパーは、テンプレートで使いたい関数を置くところです。例えば文字列の一部を <strong> で囲むなどのロジックはテンプレに直接書かず、ヘルパーを作って関数化すると可読性が上がります。

6.3. Behavior

ビヘイビアーは各 Table クラスで使う共通の処理を書くところです。使い方がよくわからなければ、後回しにしても良いかもしれません。

7. Bake や Migration を使えるようになる

CakePHP では bake というコマンドを使うことで、各種ファイルを自動生成することができます。使い方を覚え、独自の Bake テンプレートを作れるようになると、作業効率がグッと上がります。

また Migration 機能を使えばデータベースのバージョン管理がしやすくなります。是非触ってほしいのですが、残念ながら本記事執筆時点でドキュメントが不完全のようです。

8. CakePHP の公式ドキュメントを読む

CakePHP には便利な機能がまだまだあります。公式ドキュメントが充実しているので、是非一通り読んでみてください。

一度で全てを頭に入れることができなくて大丈夫です。知識は何度も読むことで定着しますし、僕なんかは「こんな便利な機能があったのか!」なんてこともあります。

9. おわりに

CakePHP のメリットは、規模が大きめのシステムを作るときに実感しやすいと思います。

規模が大きいと、似たようなコードを書く場面が出てきます。そして似たようなコードを様々な場所に書いていると、保守の際に手間がかかることが分かってきます。それでは、どこに、どのようにまとめればいいのか。CakePHP は規約がしっかり定まっているので、その答えが見つけやすいです。

学習コストはかかると思います。しかし、その価値はあると考えています。

これから学習を始める人や今まさに取り組んでいる人には、明るい未来を信じて進んでもらえたら良いなと思います。