Apigee EdgeポータルをDruupal 9でローカル起動する

# はじめに
Apigee Edgeを使ったときにローカル上でDrupalベースのApigeeポータルを構築する必要があったのでその備忘録。


# 前提
下記内容が必要になる。

- php
    - Composerのため
- Composer
    - パッケージライブラリ管理
- MAMP
    - サーバ用

# 方法
## PHP
https://www.php.net/downloads からダウンロード。
Thread Safe版をダウンロードすること。好きな場所に解凍。

## Composer
https://getcomposer.org/doc/00-intro.md#installation-windows からインストーラをダウンロード。
インストーラでは先ほど解凍したPHPを指定。PATHが通っていない場合は `Add this PHP to your path?` チェックボックスが出てくるのでチェックを入れる。
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212284/ac3a30c7-61f6-2882-81d1-f20570701be6.png)
iniファイルがない場合はエラーになるが、`Create a php.ini file` にチェックを入れて進めればOK。
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212284/7072e161-efc3-54b7-eb64-993a5fe2b960.png)

## MAMP
↓からダウンロード。MAMP PROやApple Bonjourは必要ない。
https://www.mamp.info/en/downloads/
スタートページからphpMyAdminページへ行き、データベースを作っておく（後で使う）。名前は何でもいい。
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212284/443c48da-56e3-20a8-5839-2d57776f65b8.png)
また、SSL認証エラー回避のため、https://curl.se/docs/caextract.html から `cacert.pem` をダウンロードして、MAMPの `conf` フォルダ内にある使用しているPHPバージョンの `php.ini` で `curl.cainfo = ${cacert.pemの置き場所}` を指定する。

## Drupalからkickstartのテンプレートインストール
https://www.drupal.org/docs/contributed-modules/apigee-developer-portal-kickstart/get-started-with-kickstart に沿ってDrupal9を入れる。次のコマンドを作成したいフォルダで実行。
` $ composer create-project apigee/devportal-kickstart-project:9.x-dev MY_PROJECT --no-interaction `
`php.ini` をComposerインストールの際に自動生成するとここで以下のようにエラーになることがある。
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212284/1f4230a2-695b-2075-e7ca-2896c0ba60ae.png)
この場合はエラー文より `gd` 拡張を有効にすればいいので `php.ini` の `extension=gd2` のコメントアウトを外してもう一度上記コマンドを実行する。
インストールに成功すると下の画像のようになるため次に進む。
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212284/476ea286-d143-7df2-d999-297a85bcd3bb.png)

## MAMPでサイトを立ち上げてApigee Edgeをインストール
そのままMAMPを起動してもデフォルトのhtdocsを使ってしまうのでPreferenceからwebを指定。
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212284/34ab7010-634c-475c-8690-c15d87f9a5d2.png)
`localhost` へアクセスすると下の画面になる。設定が足りないのか日本語で進めようとすると私は通信エラーになったため英語で進める。
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212284/962f9e8a-9a52-6291-94d9-370d3ae15114.png)
`Requirements Review` ではPHPのWarningが出るが、特に気にせず進める。
`Database configuration` ではMAMPインストール時に作成したデータベースを指定する。MAMPを使っていればユーザネームもパスワードも`root`。

`Configure Apigee Edge` ではようやくApigee Edgeの認証情報を入力する。すると下のようなエラーが出る。
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212284/a13e2278-6597-9b84-fb33-141cd4b9aa87.png)
その場合は `MY_PROJECT/web/sites/default/settings.php` の `Private file path` のコメントアウトを外し、認証情報を置いてよい任意のフォルダを以下のように記載する。また、MAMPのところに記載したpem設定をしていないとここでSSL証明書エラーも発生する。
`$settings['file_private_path'] = '${任意のフォルダ}';`

ここまでやれば下のように、無事にApigee Edgeへ接続できる。
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212284/87770241-8a67-2a98-7160-90a3b6b0399b.png)
`Configure Site` ではサイト情報を入力すると、下記のようなエラーが発生する。
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212284/6f9d0ac6-5fcf-16ab-33e9-f19de316abfe.png)
この場合は `MY_PROJECT/web/profiles/contrib/apigee_devportal_kickstart/apigee_devlportal_kickstart.profile` 内の `ContactForm::load('feedback')` を `ContactForm::load('personal')` に変更する。
あとはそのまま進めて終わり。