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

はじめに
CakePHP はパワフルなフレームワークです。保守性の高い堅牢なシステムをすばやく作ることができます。
しかし、公式ドキュメントの「CakePHP 4.x Cookbook」を見ると項目が多くて、敷居が高いと感じるかもしれません。
そこで今日は、これから CakePHP を始める方に少しでも役立てばと思い、CakePHP 4 のインストール方法と、僕が考える学習のポイント をご紹介します。
今回は XAMPP 7.3 と CakePHP 4.0.6 で確認していますが、他 OS でも同様の方法でインストール可能です。
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 にあります。
- インストール (CakePHP 4.x Cookbook)
- https://book.cakephp.org/4/ja/installation.html
2. コーディング規約は守った方がいい
CakePHP には厳密なコーディング規約があります。このコーディング規約を守ることで、コードの統一感が生まれ、保守しやすくなります。
また新しくプロジェクトにジョインする人に「規約は CakePHP のルールに従ってね」といえば済むのも、大きなメリットだと考えています。
- コーディング規約 (CakePHP 4.x Cookbook)
- https://book.cakephp.org/4/ja/contributing/cakephp-coding-conventions.html
3. まずはチュートリアルをやってみよう
CakePHP を初めて触る方には、まず Cookbook のチュートリアルをおススメしています。
目標は「CakePHP の全体像をなんとなく把握する」ぐらいで OK だと思います。よく分からなくても大丈夫です。個人的にはコードをコピペせずに自分で入力した方が理解しやすいと思います。
- CMS チュートリアル - データベース作成 (CakePHP 4.x Cookbook)
- https://book.cakephp.org/4/ja/tutorials-and-examples/cms/database.html
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('/', [...]) の箇所でルーティングの設定をしているためです。
- コントローラ (CakePHP 4.x Cookbook)
- https://book.cakephp.org/4/ja/controllers.html
- ルーティング (CakePHP 4.x Cookbook)
- https://book.cakephp.org/4/ja/development/routing.html
5.2. View
CakePHP で ビュー というときには View クラス と Template の2つがあります。
View クラス は画面描画に関する処理を記述するところで、テンプレートで使いたい自作関数(ヘルパー)の読込みや、テンプレートに Twig などを使いたい場合の設定などを書きます。
- App ビュー (CakePHP 4.x Cookbook)
- https://book.cakephp.org/4/ja/views.html#app
Template は各画面のテンプレートファイルのことです。
この中では「<?= $hoge ?>」や「<?php if ($a) :?>」「<?php endif; ?>」の書き方を使うのが一般的だと思います。
そして Element を覚えると重複コードが減り、メンテがしやすくなります。
- ビューテンプレート (CakePHP 4.x Cookbook)
- https://book.cakephp.org/4/ja/views.html#view-templates
- エレメント (CakePHP 4.x Cookbook)
- https://book.cakephp.org/4/ja/views.html#view-elements
5.3. Model
CakePHP 4 のモデルには Table と Entity があります。
どちらも、基本的にはデータベースの1テーブルにつき1つ用意します。
Table はテーブルに関する処理を書くところで、各フィールドのバリデーションルールや結合するテーブル(アソシエーション)などを記述します。
そして カスタム Finder メソッド は是非使えるようになってください。データ取得に finder の組み合わせを使うことで、作業効率がよくなります。
- テーブルオブジェクト (CakePHP 4.x Cookbook)
- https://book.cakephp.org/4/ja/orm/table-objects.html
- カスタム Finder メソッド (CakePHP 4.x Cookbook)
- https://book.cakephp.org/4/ja/orm/retrieving-data-and-resultsets.html#custom-find-methods
- CakePHP 4 と 3 でカスタム Finder メソッドと動的な Finder を使って作業効率を上げる (当ブログ)
- https://tt-computing.com/cake4-custom-finder
Entity には1つのレコードに関する処理を記述します。
Entity の機能では 仮想プロパティ を是非覚えてください。
- エンティティー (CakePHP 4.x Cookbook)
- https://book.cakephp.org/4/ja/orm/entities.html
- 仮想プロパティの生成 (CakePHP 4.x Cookbook)
- https://book.cakephp.org/4/ja/orm/entities.html#entities-virtual-properties
6. Component、Helper、Behavior を自作する
MVC での実装に慣れてきたら、次はコンポーネント、ヘルパー、ビヘイビアーの自作に挑戦してみてください。より早く、保守性の高いコードが書けるようになります。
6.1. Component
コンポーネントは、各コントローラで使用する機能を実装するところです。コントローラが肥大化している場合は、処理を関数化して、コンポーネントに実装出来ないか、検討してみてください。
- コンポーネントの作成 (CakePHP 4.x Cookbook)
- https://book.cakephp.org/4/ja/controllers/components.html#creating-a-component
6.2. Helper
ヘルパーは、テンプレートで使いたい関数を置くところです。例えば文字列の一部を <strong> で囲むなどのロジックはテンプレに直接書かず、ヘルパーを作って関数化すると可読性が上がります。
- ヘルパーの作成 (CakePHP 4.x Cookbook)
- https://book.cakephp.org/4/ja/views/helpers.html#id9
6.3. Behavior
ビヘイビアーは各 Table クラスで使う共通の処理を書くところです。使い方がよくわからなければ、後回しにしても良いかもしれません。
- ビヘイビアーの生成 (CakePHP 4.x Cookbook)
- https://book.cakephp.org/4/ja/orm/behaviors.html#id4
- CakePHP 4 で Markdown を HTML に変換し behavior を使って効率的に保存するアイディア (当ブログ)
- https://tt-computing.com/cake4-md-behavior
7. Bake や Migration を使えるようになる
CakePHP では bake というコマンドを使うことで、各種ファイルを自動生成することができます。使い方を覚え、独自の Bake テンプレートを作れるようになると、作業効率がグッと上がります。
- Bake でコード生成 (CakePHP Bake 2.x Cookbook)
- https://book.cakephp.org/bake/2/ja/usage.html
- CakePHP 4 で 独自の Bake テンプレートを Theme としてつくり、作業効率を向上! (当ブログ)
- http://tt-computing.com/cake4-bake-theme
また Migration 機能を使えばデータベースのバージョン管理がしやすくなります。是非触ってほしいのですが、残念ながら本記事執筆時点でドキュメントが不完全のようです。
- Migrations (CakePHP Migrations 3.x Cookbook)
- https://book.cakephp.org/migrations/3/ja/index.html
8. CakePHP の公式ドキュメントを読む
CakePHP には便利な機能がまだまだあります。公式ドキュメントが充実しているので、是非一通り読んでみてください。
一度で全てを頭に入れることができなくて大丈夫です。知識は何度も読むことで定着しますし、僕なんかは「こんな便利な機能があったのか!」なんてこともあります。
- ようこそ (CakePHP 4.x Cookbook)
- https://book.cakephp.org/4/ja/index.html
9. おわりに
CakePHP のメリットは、規模が大きめのシステムを作るときに実感しやすいと思います。
規模が大きいと、似たようなコードを書く場面が出てきます。そして似たようなコードを様々な場所に書いていると、保守の際に手間がかかることが分かってきます。それでは、どこに、どのようにまとめればいいのか。CakePHP は規約がしっかり定まっているので、その答えが見つけやすいです。
学習コストはかかると思います。しかし、その価値はあると考えています。
これから学習を始める人や今まさに取り組んでいる人には、明るい未来を信じて進んでもらえたら良いなと思います。