「PHPのファイルに差分があるかを(astを使って)調べる君」を晒した

という訳で、どーん

packagist.org

前に記事を書いたやつです。
daisuki.nichiyoubi.land

を書いた後に、先月のPHP勉強会@東京でもお喋りさせてもらったやつでもあります。

(コマンドしか提供しないので、ワークフローファイルを自分で用意する必要がありますが)PRのコメントで起動する使い方が便利じゃない・・・?って思っています。

こんな感じで動くよ

動作例はココにあります。Actionsの設定例もココに。

ブログや勉強会で話をできたことで、「読みやすい簡単なコードにして、面白がってもらおう〜!」という欲は消化されまして、複雑なコードにしました。
クラスが分割されています。(テスト書きにくい部分とかコーディングが面倒くさくなっている部分から逃避していったら、何となく行き着いた〜って感じ)

原型となったプロトタイプ的なスクリプト同一のレポジトリ上に同梱されております。

どこにそんな時間があるのでしょうか・・・・・・・という感じではあるのだけど、何となくイメージをしていた所までは書いて。
で、ズルズルと時間を費やしていってもなぁ!!と思ったので見切りです。
とりあえず、PHP勉強会のLTで「今後やりたい」と触れていた内容はコレでクリア! 本当はLTに間に合うようにコード晒しておきたかったけど、時間切れしちゃっていましたね

Hobby empowered by AI

gistで済むようなスニペットレベルではなくて「コード晒してみるか〜」となったのは、流行りのAIさんの力が大きいですね!面倒くさいことはhogehogeにやってもらおう。
Jetbrains AIが来たので、利用しています。

やってもらったことは・・・

  • メソッドやクラスのphpdocを書いてもらう
    • 少しだけ直した部分や、phpstanと仲良くするために書き換えた部分はあります
    • が、とりあえず「めっちゃズレてる内容になっていなければよし!!」って感じで、ドキュメンテーション率が高くなっていると思います
      • 価値のある情報付与になっているか・・?は、自分でやっていても微妙なところは多いかも。コンテキストに応じて「そうそう、その情報が欲しかった!!というクオリティのコメントになっていないと言うか
  • commit messageを書いてもらう
    • こちらは、ほとんど弄らないそのままコミットしたモノが多い(殆ど自分でチェックしていない)
      • コミットする差分をピックアップして、あとはボタンをぽちーって押しいった感じ
    • 意味のある内容になっているか、は・・・・*1
  • READMEもChatGPTに書いてもらったやつ
    • ツールの説明を箇条書きの日本語で投げて、たたきを作ってもらって、少し構成とかをいじったり〜って感じに

逆に言えば、「AI使ったドキュメンテーションってどのくらい使い物になりそうなの?」というのに興味がある人は、このレポジトリを覗いてもらうことで雰囲気がつかめるかもしれません。

個人的な感じとしては、「(英語で書く関係もあって)ドキュメントを書く部分は9割以上はやってもらった!!」という一方で、「他人と開発するもの(OSSへのコミットとか、業務でのチーム開発とか)には、ノーチェックで使うのは厳しいのかな」というところ。
コレは「人間の手で侘び寂びを加えて・・・」とかって話ではないですけど、やっぱり情報の足し引きが出来ていないと、意味のあるドキュメントって書けないよねーという感じです。単純に自分が使いこなせていない!コンテキストを適切・十分に渡せていない!!が正しいのではないか、と思う。
(逆に言えば、そのための操作方法やコツを調べながらやるのが面倒くさいな・・・ってなっている状況ですね、と。)

他方で、やっていない(やってもらえなかった)こととしては、テストの作成とかですかねー。
これも「もっと適切に情報を引き渡せれば」という面が大きそうですが、自分としては「まだ自分で書いた方が全然早いし使えるな」って感覚です。

ブラッシュアップとか細かい所をついたりとか、「叩きをこちらが書いてフィードバックをAIにもらう」って形ならマッチするかも?
今回、設計面とかテスト面を磨くつもりがそんなに無く、「とりあえず気になっている所を動かしてくれる程度のが備わっていればOK〜」ってノリだった(=あんまり拘っていない)のですが、そっち側で活用の余地がありそうかな?って期待です。
「ここはDIコンテナを使って外部から注入できるようにしましょう」とか言われるんじゃないかな、どうなんだろ。

あと、(同様の理由で)Jetbrains AIにある「Find Problems」「Suggest Refactoring」のメニューも使っていません。こいつら面白そうですよね。どっかで使ってみたい

*1:こういうのとか、コミット内容にあるコード差分で示されていればOK(示されるべき)なものが冗長にコミットメッセージに入っちゃっているね!とか、そういう感じが多い。要約は強いけど抽象化は難しいのかなー