PMMP with JetBrains

# はじめに

こんにちは、びーぼです。
PMMPプラグインを開発するのに最適な環境はIntellj IDEAやPHPStormといったJetBrains製品だと思うのですが、「補完が使えない」などの理由から避けている方も見かけます。そこで今回は私が実際に使っている開発の仕方を紹介していきます。~~自己流なので正しいかは知りません。~~
今回使用した環境はmacOS Big Sur、Intellij IDEA Ultimate 2021.2.3、Composer 2.1.9、PHP 8.0.11、PMMP 3.25.1です。

# PHPを準備する

PMMPを動かすときに使うPHPではpthreadsなどの拡張モジュールを利用しており、通常のPHPでは対応していません。よって、ComposerでPMMPを読み込もうとしても下記のようなエラーを吐いてしまい、上手くいきません。

```
pocketmine/pocketmine-mp[...] require ext-pthreads ^4.0 -> it is missing from your system. Install or enable PHP's pthreads extension.
```

このエラーを要約すると「PMMPがpthreadsを必要としてるから有効化してね！」といった意味合いであり、つまりpthreadsの入ったPHPを用意する必要があります。
これを用意するのはとても簡単です。皆さんがいつもPMMPサーバーを起動するときに使っているPHPのバイナリにはPMMPが必要とするものが全て入っていますよね。なのでそれを使っていきます。
というわけで[Jenkins](https://jenkins.pmmp.io/view/PHP/job/PHP-8.0-Aggregate/)か[php-build-scripts](https://github.com/pmmp/php-build-scripts)からPHPを用意し、適当な場所に配置しておきます。インストールの詳細は割愛しますが、配置した場所は後で利用するので覚えておきましょう。

追記: 必須ではありませんが、このPHPにパスを通しておくとなかなか便利だと思います。私のMacでは``php-pmmp``として使えるようにしてあります。

# 使ってみる

Intellij(またはPHPStorm)を開き、[New Project]->[PHP]->[PHP Empty Project]でプロジェクトを作ります。名前はお好みです。

![スクリーンショット 2021-11-13 1.02.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487756/fd104c44-ed03-ed07-7421-f1bd504b64d1.png)
composer.jsonを作ります。Init Composerを押したら勝手に生成されます。

![スクリーンショット 2021-11-13 1.04.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487756/3640425c-fcca-03a2-3b24-f19f99ba7d71.png)
composer.pharを選び、PHP interpreterの右側の...をクリックします。

![スクリーンショット 2021-11-13 1.07.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487756/6d746e16-5261-3c08-4e14-2d8ab869cf20.png)
さっきインストールしたPHPへのパスを入力し、[Apply]、[OK]を押します。名前はお好みです。
Composer Settingsに戻ったらDownload composer...にチェックを入れ、今追加したPHP interpreterを選択し、OKを押します。(他のディレクトリにcomposer.pharを用意してパスを入力してもokです)

追記: composer.pharをこの画面からダウンロードした時はcomposer.jsonが作成されない場合があるようですが、もう一度[Init Composer]を押して先程追加したPHP interpreterを選択し、[OK]をクリックすれば生成されるので心配ありません。


```json:composer.json
{
    "name": "your_name/your_plugin_name",
    "description": "description",
    "require": {
        "pocketmine/pocketmine-mp": "3.*"
    }
}
```
続いて、composer.jsonを上のように書き換えます。(your_name、your_plugin_name、descriptionは自身のものに変更)
書き換え後、composer.jsonを開いているときに右上に表示されるボタンの中からInstallをクリックします。(上手くいかない時はUpdateを押せば上手くいくかも...)
これでPMMPのクラスや関数が補完されるようになります。補完が表示されないときはMacならctrl+Spaceを押すことで表示されます。(Windowsのショートカットキーは知りませんが多分同じ感じです)
あとはplugin.ymlを作ったりphpファイルを作ったり...ですがコードの書き方の記事は溢れるほどありそうなので割愛します。

追記: repositoriesにPMMPを追加していましたが不要でした。ご指摘ありがとうございました。

# 他のプラグインを利用してみる

自作プラグインや他の開発者様のプラグインを利用して開発することもできます。ここでは例として私が提供しているFormAPIである[BboForm](https://github.com/bbo51dog/BboForm)を導入してみましょう。~~BboFormは自分的には使いやすくて推してるので是非使ってみてください！！~~

```json:composer.json
{
    "name": "your_name/your_plugin_name",
    "description": "description",
    "require": {
        "pocketmine/pocketmine-mp": "3.*",
        "bbo51dog/bboform": "^1.2.1"
    },
    "repositories": [
        {
            "type": "git",
            "url": "https://github.com/bbo51dog/BboForm.git"
        }
    ]
}
```

composer.jsonのrepositoriesを追加、requireを上のように編集し、続いて画面右上のUpdateを押します。これでBboFormの補完も表示されるようになりました。

# さいごに

お疲れ様でした！かなり端折りながら思いつきで書き上げたので質問あればお気軽に〜
良いJetBrainsライフ&PMMPライフを！