この記事はQiita AdventCalendar 2021 PHPの8日目の記事です。
こんにちは、こんばんわ、kubotak(@kubotak_public)です。
早速ですがタイトルの通り「PHPコードを消すライブラリ」を作りました。
まずはこのライブラリの生まれた背景と用途について説明します。もしよければstarつけてください。
これはなに?
以下のようにコメントでコードを挟み、composerで導入したコマンドを実行することで対象のコードを削除します。
before
public function code() {
/** php-del start flag-a */
$something = 1;
/** php-del end flag-a */
}
run command
vendor/bin/php-del flag-a
after
public function code() {
}
なぜ作ったのか?
使い方は簡単ですね。しかしこんな仕組み、いつ使うんでしょうか?
話が変わってしまうんですが、弊社ではスクラム開発を行っており、Feature Flag(Toggle)を利用してデプロイとリリースを分離しています。
変更影響があるコードはFeature Flagによって管理され、それがONになることで有効化するようになっています。
(イメージ)
if ($featureFlag) {
// 新しい処理
return;
}
// 既存の処理
※弊社のFeature Flagについては過去記事を参照ください
Feature toggles を複数の環境へ即時反映する仕組みを開発しました - M&Aクラウド開発者ブログ
察しの良い方はすでにお気づきかと思います。
このコード、Feature FlagをONにした後はif文及び既存の処理は不要になります。
今まではこれを消すタスクを積んで消す必要がありました。
また、このコードを追加していない開発者が見た場合、どのコードを消すべきかちゃんとコードを読み解く必要もあります。
ほしいもの
つまり、Feature Flagを使うコードを実装する時点で、消すことも想定してコードを書いておいて、後から自動で消えてしまえば負担が少ないのではないか・・・
という思いから出来上がったのがこのphp-delです。
先程のコードに適応すると次のようになります。
/** php-del start flag */
if ($featureFlag) {
/** php-del ignore start */
// 新しい処理
/** php-del ignore end */
return;
}
/** php-del end flag */
// 既存の処理
※ignoreコメントで挟んだ箇所は削除対象から除外されるので残ります。
弊社以外にも需要があれば是非どうぞ、ということでOSSとして公開しています。
さいごに
今回OSSとしてComposerで配信するコマンドを作ってみて、次のようなことを感じました。
需要は自分たちだけのものでも良い
誰もが喜ぶライブラリじゃなくても、自分たちのニーズに答えられるものなら開発意欲も湧いて良いなと思いました。
他のOSSコードを読むようになる
他のOSSはこの処理どうやって実装してるんだろう?という疑問からPHPUnitやPHPStanなどの実装をチラ見したりしました。
普段あんまり見に行かないコードなのでそういうものに触れる機会にもなって良いと思います。
composer.jsonのbinに追加するだけでvendor/binに配置される仕組みめっちゃ良いです。
少しでもいいな、と思ったらぜひstarつけてください。