Masayan tech blog.

  1. ブログ記事一覧>
  2. VSCodeで快適なPHPの開発環境を整える:クラスのgetter/setter・型の自動生成

VSCodeで快適なPHPの開発環境を整える:クラスのgetter/setter・型の自動生成

公開日

環境

  • VsCode 1.63.2
  • PHP 8.0
  • Windows 10

動作イメージ

返り値・引数の型も含めたgetter/setterを1コマンドで複数生成できます(複数選択は、WinならAlt + クリックで、Macならoption + クリックで可能)

本題

  • 前提として、vscodeの拡張機能 PHP Getters&Setters をインストールしておく

https://marketplace.visualstudio.com/items?itemName=phproberto.vscode-php-getters-setters

  • また、型の情報も含める場合は、phpdocが必要なので、PHP DocBlockerをインストールしておく

https://marketplace.visualstudio.com/items?itemName=neilbrayfield.php-docblocker

  • インストールするだけでもある程度使えますが、使いやすいようにカスタマイズするために、設定ファイルを用意します
    • 設定ファイルはjsでgetter・settterそれぞれで用意します
    • OSごとのファイルの場所は以下の通り
      • Linux:~/.config/Code/User/phpGettersSetters
      • Mac:~/Library/Application Support/Code/User/phpGettersSetters
      • Windows:Users\{User}\AppData\Roaming\Code\User\phpGettersSetters
  • 本記事とは直接関係ないですが、phpdocのbooleanとかintegerとかを省略形で記述したいので、setting.jsonでphp-docblocker.useShortNamesというプロパティにチェックを付けています

getter

イメージ

not nullableなプロパティであれば、以下のようにgetterが生成される

<?php

...割愛

class Stock
{
    /**
     * @var int
     */
    private int $id;

    /**
     * @return int
     */
    public function id(): int
    {
        return $this->id;
    }

nullableなプロパティであれば、以下のようにgetterが生成される

<?php

...割愛

class Stock
{ 
    /**
     * @var StockType|null
     */
    private ?StockType $stockType = null;


    /**
     * @return  StockType|null
     */
    public function stockType(): ?StockType
    {
        return $this->stockType;
    }

設定方法

以下のようなjavascriptの設定ファイルを用意することで、getter生成時の内容をカスタマイズすることが可能です

  • propertyの中には、vscode上でgetter/setterを生成したいプロパティの情報がわたってきます
    • getType
      プロパティの型情報(phpdocの)
    • getName
      プロパティの名称
  • getterの名称は、デフォルトだと、get<PropertyName>~の形式ですが、個人的な好みとして、getの部分は削除しています(getName()とかではなく、name()のような感じ)
  • getterの返り値は、以下の通りです
    • nullableのプロパティであれば、型情報にprefixとして?を付与して表示し、それ以外の場合は型情報をそのまま返す

getter.js

module.exports = (property) => `
    /**
     * @return  ${property.getType()}
     */
    public function ${property.getName()}(): ${property.getType().includes("|null")
        ? "?" + property.getType().substr(0, property.getType().indexOf("|"))
        : property.getType()
    }
    {
        return $this->${property.getName()};
    }
`;

setter

イメージ

not nullableなプロパティであれば、以下のようにsetterが生成される

<?php
...割愛

class Stock
{
    /**
     * @var int
     */
    private int $id;

    /**
     * @param int  $id
     * @return self
     */
    public function setId(int $id): self
    {
        $this->id = $id;

        return $this;
    }
}

not nullableなプロパティであれば、以下のようにsetterが生成される

<?php
...割愛

class Stock
{
    /**
     * @var StockType|null
     */
    private ?StockType $stockType = null;
    /**
     * @param StockType|null  $stockType
     * @return self
     */
    public function setStockType(?StockType $stockType): self
    {
        $this->stockType = $stockType;

        return $this;
    }
}

以下のようなjavascriptの設定ファイルを用意することで、setter生成時の内容をカスタマイズすることが可能です

  • propertyの中には、vscode上でgetter/setterを生成したいプロパティの情報がわたってきます
    • getType
      プロパティの型情報(phpdocの)
    • setterName
      セッターの名称(nameであれば、setName()等)
  • setterの引数は、以下の通りです
    • nullableのプロパティであれば、型情報にprefixとして?を付与して表示し、それ以外の場合は型情報をそのまま返す
  • 返り値の型は、自分自身なのでself固定

setter.js

module.exports = (property) => `
    /**
     * @param ${property.getType()}  \$${property.getName()}
     * @return self
     */
    public function ${property.setterName()}( ${property.getType().includes("|null")
        ? "?" + property.getType().substr(0, property.getType().indexOf("|")) + " "
        : property.getType() + " "
    }\$${property.getName()}): self
    {
        $this->${property.getName()} = \$${property.getName()};

        return $this;
    }
`;

まとめ

いかがでしたでしょうか。本記事では、VSCodeで快適なPHPの開発環境を整えるための方法について紹介しています。特にクラスのgetter/setter・型の自動生成の方法について設定手順や設定例を挙げながら具体的に説明しています。