[Windows]CakePHP3.8.Xのインストールと初期設定

 当ページのリンクには広告が含まれています。

え?今3系なの?

というツッコミがありそうだけどw
そうなんですよ、あるんですよそういうことも。今やってる案件が、その、ごにょごにょ…

公式サイトも丁寧に書いてあるので、読んで理解できる方は公式サイトをどうぞ。
個人的にちょっと読みにくいな…と思っているので、まとめました。

事前準備

PHPのバージョンチェック

PS C:\XXXXX\XXXXX> php -v
PHP 7.4.33 (cli) (built: Nov  2 2022 16:00:55) ( ZTS Visual C++ 2017 x64 )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies

CakePHP3.8で使用するPHP7.4になります。
PHP8以上はCakePHP4系です。

php.iniファイルをチェック

C:\xampp\php\php.iniを編集。extension=intlを検索
先頭に;がついてる場合、向こうになっているので有効にする。

;extension=intl
↓
extension=intl

Composerのバージョンチェック

PS C:\Users\XXXXX> composer -V
Composer version 2.6.5 2023-10-06 10:11:52

GitHubでリモートリポジトリを作成

新しくリポジトリ作ったらこのコマンドを打て、と言ってるので打つ。
が、これはCakePHPをインストール後に。

CakePHP3.8.Xインストール

CakePHPのインストールしたい位置まで移動。

PS C:\Users\XXXXX> cd D:
PS D:\> cd XXXXX
PS D:\XXXXX\XXXXX> ls

    Directory: D:\XXXXX\XXXXX

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          2023/08/20     6:21                XXXXX
d----          2023/09/12     9:28                XXXXXXXXXX
d----          2023/08/14     9:28                XXXXX
d----          2023/06/27    12:08                XXXXXXXXXXXXXXX
# プロジェクトフォルダを作成するディレクトリまで移動
PS D:\XXXXX> cd .\XXXXX\
PS D:\XXXXX\XXXXX>

# プロジェクトフォルダ内でインストールコマンド実行
# 例:composer self-update && composer create-project --prefer-dist cakephp/app:3.8.* [プロジェクト名]
PS D:\XXXXX\XXXXX> composer create-project --prefer-dist cakephp/app:3.8.* 375memo

Creating a "cakephp/app:3.8.*" project at "./375memo"
Installing cakephp/app (3.8.0)
  - Installing cakephp/app (3.8.0): Extracting archive
Created project in D:\XXXXX\XXXXX\375memo
Loading composer repositories with package information
Updating dependencies
Lock file operations: 88 installs, 0 updates, 0 removals
  - Locking ajgl/breakpoint-twig-extension (0.3.5)

# 略

  - Locking zendframework/zend-diactoros (1.8.7)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 88 installs, 0 updates, 0 removals
cakephp/plugin-installer contains a Composer plugin which is currently not in your allow-plugins config. See https://getcomposer.org/allow-plugins
Do you trust "cakephp/plugin-installer" to execute code and wish to enable it now? (writes "allow-plugins" to composer.json) [y,n,d,?]

# 日本語訳
# Cakephp/plugin-installer には、現在allow-plugins設定に含まれていないComposerプラグインが含まれています。 https://getcomposer.org/allow-plugins を参照してください。
# 「cakephp/plugin-installer」がコードを実行することを信頼しており、今すぐ有効にしますか? (「allow-plugins」をcomposer.jsonに書き込みます)

yでOK。

cakephp/plugin-installer contains a Composer plugin which is currently not in your allow-plugins config. See https://getcomposer.org/allow-plugins
Do you trust "cakephp/plugin-installer" to execute code and wish to enable it now? (writes "allow-plugins" to composer.json) [y,n,d,?] y
  - Installing cakephp/plugin-installer (1.3.1): Extracting archive

# 略

23 package suggestions were added by new dependencies, use `composer suggest` to see details.
# 新しい依存関係によって 23 個のパッケージ提案が追加されました。詳細を確認するには、`composer assign` を使用してください。

Package zendframework/zend-diactoros is abandoned, you should avoid using it. Use laminas/laminas-diactoros instead.
Package aptoma/twig-markdown is abandoned, you should avoid using it. No replacement was suggested.
Package asm89/twig-cache-extension is abandoned, you should avoid using it. Use twig/cache-extension instead.
Package phpunit/php-token-stream is abandoned, you should avoid using it. No replacement was suggested.
Package phpunit/phpunit-mock-objects is abandoned, you should avoid using it. No replacement was suggested.
# 以上のパッケージは廃止された、代用案はあったりなかったり、とのこと

Generating autoload files

> Cake\Composer\Installer\PluginInstaller::postAutoloadDump



     Action required!

     The CakePHP plugin installer v1.3+ no longer requires the
     "post-autoload-dump" hook. Please update your app's composer.json
     file and remove usage of
     Cake\Composer\Installer\PluginInstaller::postAutoloadDump

#      アクションが必要です!
# 
#       CakePHP プラグイン インストーラー v1.3 以降では、
#       「post-autoload-dump」フック。 アプリのcomposer.jsonを更新してください。
#       ファイルを作成し、使用を削除します
#       Cake\Composer\Installer\PluginInstaller::postAutoloadDump

プロジェクトフォルダ直下に、composer.jsonがあり、その中にpost-autoload-dumpが含まれた1行があるけど、もういらないので削除してね、とのことなので削除。

37 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
Found 1 security vulnerability advisory affecting 1 package.
Run "composer audit" for a full list of advisories.

# 日本語訳
# あなたが使用している 37 のパッケージが資金を募集しています。
# 詳細については、「composer Fund」コマンドを使用してください。
# 1 つのパッケージに影響を与えるセキュリティ脆弱性勧告が 1 件見つかりました。
# アドバイザリの完全なリストを確認するには、「composer Audit」を実行します。

セキュリティ脆弱性勧告が1件あるのだけど、のちほど修正する。

> App\Console\Installer::postInstall
Created `config/app.php` file
Created `D:\XXXXX\XXXXX\375memo/tmp/cache/views` directory
Set Folder Permissions ? (Default to Y) [Y,n]?

# 日本語訳
# > App\Console\Installer::postInstall
# `D:\XXXXX\XXXXX\375memo/tmp/cache/views` ディレクトリを作成しました
# フォルダーのアクセス許可を設定しますか? (デフォルトは Y) [Y,n]?

CakePHPが使うディレクトリなので、アクセス許可を与えないとあとで自分が設定しないといけないので、Y

Set Folder Permissions ? (Default to Y) [Y,n]?Y
Updated Security.salt value in config/app.php

表示確認。
プロジェクトディレクトリに入って、開発サーバ立ち上げ。

PS D:\XXXXX\XXXXX> cd .\375memo\
PS D:\XXXXX\XXXXX\375memo> bin/cake server

Welcome to CakePHP v3.8.13 Console
---------------------------------------------------------------
App : src
Path: D:\XXXXX\XXXXX\375memo\src\
DocumentRoot: D:\XXXXX\XXXXX\375memo\webroot
Ini Path:
---------------------------------------------------------------
built-in server is running in http://localhost:8765/
You can exit with `CTRL-C`
[Fri Nov 10 07:26:29 2023] PHP 7.4.33 Development Server (http://localhost:8765) started

http://localhost:8765にアクセス

OK!
Ctrl+cで開発サーバ終了。

[Sun Dec 10 06:28:40 2023] [::1]:56942 Closing
^CTerminate batch job (Y/N)? Y
PS D:\XXXXX\XXXXX\375memo>

Git

除外ファイル設定

基本的な除外ファイルは事前に設定されているけど。

schema-dump-default.lockは設定されていないようなので設定。

Gitへの登録作業

CakePHPのプロジェクトをGitで管理します。

さっき作成したリモートリポジトリをCloneするには、ディレクトリが空じゃないとできないので、CakePHPのプロジェクトフォルダにローカルリポジトリを作成。
そこにリモートリポジトリを追加して、CakePHPのプロジェクトをcommit+pushすることにします。

# ローカルリポジトリ作成
git init

# ローカルリポジトリのブランチ名をmasterからmainに変更
# っても、ローカルリポジトリのブランチ名のデフォルトをmainにしてあるので不要だけどw
git branch -m main

# リモートリポジトリ追加
git remote add origin [さっき作ったリモートリポジトリのURL]

# リモートリポジトリに何もないけど念のためpull
git pull origin main

# 現在地(プロジェクトフォルダのルート)から配下の全ファイルをステージングへ
git add .

# ステージングにあるファイル一覧を確認
git ls-files

# ローカルリポジトリにコミット
git commit -m "first commit"

# コミットログ確認
git log

# リモートリポジトリへpush
git push origin main

セキュリティ脆弱性勧告の対応

composer auditを実行。

PS D:\XXXXX\XXXXX\375memo> composer audit
The new audit.abandoned setting (currently defaulting to "report" will default to "fail" in Composer 2.7, make sure to set it to "report" or "ignore" explicitly by then if you do not want this.
Found 1 security vulnerability advisory affecting 1 package:
+-------------------+----------------------------------------------------------------------------------+
| Package           | cakephp/cakephp                                                                  |
| CVE               | CVE-2020-15400                                                                   |
| Title             | Cross-Site Request Forgery in CakePHP                                            |
| URL               | https://github.com/advisories/GHSA-j33j-fg2g-mcv2                                |
| Affected versions | <3.10.3|>=4.0.0,<4.0.6                                                           |
| Reported at       | 2022-02-10T22:27:58+00:00                                                        |
+-------------------+----------------------------------------------------------------------------------+
Found 5 abandoned packages:
+------------------------------+----------------------------------------------------------------------------------+
| Abandoned Package            | Suggested Replacement                                                            |
+------------------------------+----------------------------------------------------------------------------------+
| aptoma/twig-markdown         | none                                                                             |
| asm89/twig-cache-extension   | twig/cache-extension                                                             |
| phpunit/php-token-stream     | none                                                                             |
| phpunit/phpunit-mock-objects | none                                                                             |
| zendframework/zend-diactoros | laminas/laminas-diactoros                                                        |
+------------------------------+----------------------------------------------------------------------------------+

脆弱性は、CVE-2020-15400でクロスサイトリクエストフォージェリ(CSRF)に脆弱性があるというもの。
CakePHP4.0.7までバージョンアップすれば解決してるらしいが、それは今回無理(3.8.Xがいいから)。

別なセキュリティ脆弱と組み合わせて発動するみたいだから大丈夫かな。
緊急対応でもないし、作ったサービスもすぐに公開するわけじゃないので様子見することにします。

サーバにアップロード

375memo

.htaccess

index.php

bin

config

logs

plugins

src

tmp

vender

webroot(公開ディレクトリ)

logstmpディレクトリはパーミッション変更を707に変更。
表示確認。

まとめ

長かったなーw