【PHP】PHPフレームワーク「Flow」を試してみる～環境構築編～

# 初めに
PHPの「**Flow**」というフレームワークをご存じですか？
おそらくこのフレームワークを知っている人は少ないと思います。自分もその一人でした。

先日たまたまFlowを触る機会があり、とりあえずQuickstartを試してみるかと思ったのですが
* **公式ドキュメントの手順が省略されていて、PHP初心者には難しい**
* **マイナーすぎて参考資料が出てこない**

ということに苦しめられ、なかなか環境構築が進みませんでした。

github-copilotに助けられながらなんとか完了することができたので、今回は公式ドキュメントの[Quickstart](https://flowframework.readthedocs.io/en/stable/Quickstart/index.html)のソースを元に環境構築方法をまとめてみました！

# Flowとは
Flowとは[flownative](https://www.flownative.com/)社が出しているオープンソースのPHPフレームワークです。

**ドメイン駆動設計**（DDD）を中心原理として設計されたフレームワークであり、DDDを満たすための機能を多く提供しているらしいです（自分もまだ試せてないですが）。

また、Railsのように、```flow```というコマンドを実行することでクラス作成やキャッシュクリアなど**様々な操作がコマンドでできる**という特徴があります。

公式ドキュメントはこちら。

https://flowframework.readthedocs.io/en/stable/TheDefinitiveGuide/index.html



# 環境構築
ということで、Flowを環境構築していきます。
公式ドキュメントの[Quickstart](https://flowframework.readthedocs.io/en/stable/Quickstart/index.html)を立ち上げていきます。

## 環境
* OS：Windows11 Pro
* PHP：8.1.25
* Flow：8.3.5
* composer：2.6.5

## １．PHPのインストール
[PHP公式サイト](https://www.php.net/downloads)からPHPを落としてきます。
```Thread Safe```と```Non Thread Safe```の二つがありますが、自分は前者をインストールしました。

インストールが完了したらパスを通しておきましょう。

```sh
$ php -v
PHP 8.1.25 (cli) (built: Oct 25 2023 08:06:57) (ZTS Visual C++ 2019 x64)
Copyright (c) The PHP Group
Zend Engine v4.1.25, Copyright (c) Zend Technologies
```

以下のサイトを参考にしました。

https://webukatu.com/wordpress/blog/30447/


## ２．composerのインストール
composerとは、PHPにおけるライブラリ管理ツールです。
Flowをダウンロードする際に利用するため、ここでインストールしておきます。

こちらの[ダウンロードページ](https://getcomposer.org/download/)から```Composer-Setup.exe```をダウンロードし、インストールを実施してださい。

```sh
$ composer -V
Composer version 2.6.5 2023-10-06 10:11:52
```

以下のサイトを参考にしました。

https://weblabo.oscasierra.net/php-composer-windows-install/


## ３．FlowのQuickstart用ソースコードをインストール
composerを用いて、以下のコマンドでQuickstartのソースコードをダウンロードします。

```sh
$ composer create-project --keep-vcs neos/flow-base-distribution Quickstart
Creating a "neos/flow-base-distribution" project at "./Quickstart"
Installing neos/flow-base-distribution (8.3.5)
  - Syncing neos/flow-base-distribution (8.3.5) into cache


～中略～


> Neos\Flow\Composer\InstallerScripts::postPackageUpdateAndInstall
33 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating autoload files
87 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
> Neos\Flow\Composer\InstallerScripts::postUpdateAndInstall
No security vulnerability advisories found.

```

ダウンロードできました。

ディレクトリ構成は以下のような感じです。

```sh
Quickstart
    ├ bin/
    ├ Build/
    ├ Configuration/
    ├ Data/
    ├ DistributionPackages/
    ├ Packages/
    |    ├ Application/
    |    ├ Framework/
    |    └ Libraries/
    ├ Web/
    ├ .editorconfig
    ├ .gitignore
    ├ composer.json
    ├ composer.lock
    ├ flow
    ├ flow.bat
    └ Readme.rst
```

```Packages/Framework```の中にFWのソースが入っています。
```Packages/Application```の中には動作確認使用するに使用するソースが入っています。

前述したflowコマンドはプロジェクト直下の```flow```というファイルが実行ファイルになっています。なので、コマンドの実行はプロジェクト直下で行う必要があります。

## ４．Setting.yamlの作成
プロジェクト直下の```Configuration```フォルダの中にある```Settings.yaml.example```をコピーし、同フォルダに```Settings.yaml```を作成しましょう。
その際、```Neos -> core -> phpBinaryPathAndFilename```のコメントアウトを解除し、「１．PHPのインストール」で落としてきた```php.exe```のパスに変更します。

```yaml: Settings.yaml
Neos:
  Flow:
    persistence:
      backendOptions:
        driver: 'pdo_mysql'  # use pdo_pgsql for PostgreSQL
        charset: 'utf8mb4'   # change to utf8 when using PostgreSQL
        host: '127.0.0.1'    # adjust to your database host
    mvc:
      routes:
        'Neos.Flow': TRUE
    core:
      phpBinaryPathAndFilename: 'C:/php-8.1.25/php.exe'
```
```Settings.yaml```にてMySQLの設定が記述されていますが、今回は使用しません。
コメントアウトしてもしなくても結果が変わらないため、今回はそのままとしてます。
気になる場合はコメントアウトしましょう。

## ５．php.iniファイルの修正
```php.ini```ファイルを確認し、```;extension=mysqli```と```;extension=pdo_mysql```のコメントアウトを解除します。
これにより、phpのmysqlとPDO_MySQLの拡張機能を有効にすることができます。

QuickstartではMySQLの環境構築は不要です。
ですが、Flowを立ち上げる際にFlowがMySQLのドライバを探しているようで、この設定をしてないとドライバを見つけられずエラーになります。


## ６．サーバを立ち上げる
プロジェクト直下で以下のflowコマンドを実行し、ローカルホストでサーバを立ち上げます。

:::note warn
コマンドが実行できない場合、PowerShellを管理者権限で開いて実行してみてください。
:::


```sh
$ ./flow server:run
Server running. Please go to http://127.0.0.1:8081 to browse the application.
[Tue Nov 14 21:46:43 2023] PHP 8.1.25 Development Server (http://127.0.0.1:8081) started
```

サーバが立ち上がったら、http://127.0.0.1:8081 にアクセスしてみましょう。
以下のような画面が表示されたら、環境構築成功です！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430841/0b6aa5f2-2296-8e7a-cc8b-e707dae6ca27.png)




・・・結構モダンな画面ですね、驚きました。
ちなみに、公式ドキュメントに書いてあるWelcomeページはもっと簡素なものでした。もしかしたら手順が更新されていないのかもしれないですね。


# 終わりに
今回はPHPのFlowというフレームワークの環境構築を行いました。
もう少し触ってみる予定なので、また何か分かったことがあれば記事にしようと思います！

# 参考資料
https://flowframework.readthedocs.io/en/stable/Quickstart/index.html
https://webukatu.com/wordpress/blog/30447/
https://weblabo.oscasierra.net/php-composer-windows-install/