この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:7
ページ更新者:guest
更新日時:2026-06-11 07:07:02

タイトル: CakePHP
SEOタイトル: CakePHP (PHP フレームワーク) 完全ガイド(歴史・最新 5.x・Bake CLI)

この記事の要点
  • CakePHP: 2005 年リリースの老舗 PHP フルスタックフレームワーク。Ruby on Rails に強い影響
  • 命名規則重視(Convention over Configuration): Users モデル → users テーブル → UsersController
  • Bake CLI: bin/cake bake all Users で MVC + マイグレーション一括生成
  • 最新 CakePHP 5.x(2023〜)。PHP 8.1+ 必須、Composer 配布、PSR-7/PSR-15 準拠
  • 日本でのシェアは Laravel に押されたが、アップグレードガイドが手厚く長期運用には強い

CakePHP とは

CakePHP は 2005 年に Michal Tatarynowicz によって開発された PHP のフルスタック Web フレームワークです。Ruby on Rails の思想を PHP に持ち込んだ先駆者で、「規約は設定に勝る (Convention over Configuration)」を貫いています。

歴史とリリース

バージョンリリース主な特徴
1.x2006初版。PHP 4 系対応
2.x2011PHP 5 対応。日本で最も普及したバージョン
3.x2014名前空間・Composer 対応・新 ORM(Hash 配列から Entity 中心へ)
4.x2019PHP 7.2+、型宣言の本格採用
5.x2023PHP 8.1+、Enum / Readonly / FirstClassCallable 活用

インストール

# Composer で新規プロジェクト
composer create-project --prefer-dist cakephp/app:~5.0 myapp

cd myapp

# 開発サーバ起動
bin/cake server -H 0.0.0.0 -p 8765

# ブラウザで http://localhost:8765 → ようこそ画面

ディレクトリ構造

myapp/
├── bin/cake               # CLI (Bake / Migrations 等)
├── config/                # 設定ファイル
│   ├── app.php
│   ├── routes.php
│   └── bootstrap.php
├── src/
│   ├── Controller/        # コントローラ
│   ├── Model/
│   │   ├── Table/         # ORM Table クラス
│   │   └── Entity/        # ORM Entity クラス
│   ├── View/              # ビューヘルパー等
│   └── Application.php
├── templates/             # *.php ビューテンプレート
├── webroot/               # ドキュメントルート
│   ├── index.php
│   ├── css/
│   └── js/
├── tests/                 # PHPUnit テスト
├── tmp/                   # キャッシュ・セッション
├── logs/
└── composer.json

命名規則(Convention)

種別クラス名テーブル / URL
テーブルUsersTableテーブル users
エンティティUser
コントローラUsersControllerURL /users
アクションUsersController::view($id)URL /users/view/1
テンプレートtemplates/Users/view.php
リレーション$user->postsposts.user_id FK

Bake CLI: 一括スキャフォールド

# DB 接続設定: config/app_local.php に DB 情報を書く

# テーブル定義から Model + Controller + Template を一括生成
bin/cake bake all Users

# 部分生成
bin/cake bake controller Users
bin/cake bake model Users
bin/cake bake template Users

# マイグレーション
bin/cake bake migration CreateUsers name:string email:string created modified
bin/cake migrations migrate
bin/cake migrations rollback

# シーダ
bin/cake bake seed Users
bin/cake migrations seed --seed UsersSeed

コントローラ + ORM の基本

paginate = ['limit' => 20, 'order' => ['Users.id' => 'DESC']];
        $users = $this->paginate($this->Users);
        $this->set(compact('users'));
    }

    public function view(string $id)
    {
        $user = $this->Users->get($id, contain: ['Posts']);
        $this->set(compact('user'));
    }

    public function add()
    {
        $user = $this->Users->newEmptyEntity();
        if ($this->request->is('post')) {
            $user = $this->Users->patchEntity($user, $this->request->getData());
            if ($this->Users->save($user)) {
                $this->Flash->success('保存しました');
                return $this->redirect(['action' => 'index']);
            }
            $this->Flash->error('保存できませんでした');
        }
        $this->set(compact('user'));
    }
}

ORM(Table / Entity / Query Builder)

// 取得
$users = $this->Users->find()
    ->where(['active' => true])
    ->order(['created' => 'DESC'])
    ->limit(10)
    ->all();

// JOIN
$posts = $this->Posts->find()
    ->contain(['Users', 'Tags'])
    ->where(['Users.email LIKE' => '%@example.com'])
    ->all();

// 1 件取得
$user = $this->Users->get(1);
$user = $this->Users->findByEmail('foo@example.com')->first();

// 保存
$user = $this->Users->newEntity(['name' => 'Tanaka', 'email' => 't@example.com']);
$this->Users->save($user);

// バルク更新
$this->Users->updateAll(['active' => false], ['last_login <' => '2025-01-01']);

// トランザクション
$conn = $this->Users->getConnection();
$conn->transactional(function () use ($user, $post) {
    $this->Users->saveOrFail($user);
    $this->Posts->saveOrFail($post);
});

テンプレート(View)


ユーザー一覧

Form->create($user) ?> Form->control('name') ?> Form->control('email') ?> Form->submit('保存') ?> Form->end() ?>
id) ?> Html->link($user->name, ['action' => 'view', $user->id]) ?> email) ?> created->format('Y-m-d') ?>
Paginator->numbers() ?>

テンプレートエンジンは標準では純粋な PHP ですが、Twig 連携(cakephp/twig-view プラグイン)も可能です。

CakePHP vs Laravel vs Symfony

項目CakePHP 5Laravel 11Symfony 7
初リリース200520112005
思想Convention 重視Convention + 表現力Configuration 重視・疎結合
スキャフォールドBake(最強)artisan make:*MakerBundle
ORM独自 ORM(Table/Entity)EloquentDoctrine
テンプレート素 PHP / TwigBladeTwig
日本でのシェア中(減少)最大小〜中(企業向け)
学習コスト

強みと弱み

強み

  • 規約に従えば設定ファイルがほぼ要らない → 小〜中規模で速い立ち上げ
  • Bake が強力: DB から CRUD 画面まで瞬時に生成
  • 後方互換性とアップグレードガイドが手厚い → 既存システムの長期運用に強い
  • 古くからある分、日本語書籍と勉強会の蓄積が豊富(CakeFest Tokyo 等)
  • 軽量で動作が速い(特に CakePHP 3 以降は再設計済)

弱み

  • Laravel に比べてエコシステム(パッケージ・教材)が薄い
  • 規約から外れた設計をすると逆に書きにくい
  • 2.x / 3.x で書かれた既存システムの5.x 移行コストが大きい
  • 採用案件が減っており、求人市場では Laravel の方が有利

移行 / アップグレード

# 3.x → 4.x: Upgrade ツールを使う
composer require --dev cakephp/upgrade
bin/cake upgrade file_rename templates
bin/cake upgrade rector --rules cakephp40

# 4.x → 5.x も同様
bin/cake upgrade rector --rules cakephp50

# 参考: CakePHP Cookbook の Migration Guide が手厚い
# https://book.cakephp.org/5/en/appendices/4-x-migration-guide.html

学習リソース

  • 公式ドキュメント (CakePHP Cookbook): book.cakephp.org に英語・日本語版あり
  • 公式 API リファレンス: api.cakephp.org
  • CakeFest(年次カンファレンス)/ CakePHP Tokyo Meetup
  • 書籍: 「CakePHP 4 で学ぶ実践 Web 開発」など
  • サンプル: GitHub の friendsofcake/awesome-cakephp

FAQ

Q: 新規プロジェクトで CakePHP を選ぶべき?
A: 規約に沿うシンプルな業務系・管理画面ならアリ。それ以外は Laravel が無難。既存 CakePHP 案件を引き継ぐなら CakePHP 一択。

Q: CakePHP 2.x がまだ動いているがアップグレードすべき?
A: 2.x は 2020 年に EOL。セキュリティ的にも 4.x / 5.x への移行を推奨。公式の Upgrade ツールと Rector が用意されている。

Q: Laravel と CakePHP は併用できる?
A: 同じ PHP アプリ内で同居は非推奨。マイクロサービス境界で分けるなら可。