Zenn
😺

Tree-sitterを使ってコードベースから関数定義を抽出する

2025/02/24に公開
3

はじめに

大量のファイルがあるコードベースの中から関数やクラスの定義を抽出できるとそれをLLMのコンテキストに埋め込んでコード生成や読解、ドキュメント生成などに利用できます。

この記事では、Tree-sitterを使用してPHPコードから関数定義を抽出する方法を紹介します。

Tree-sitterとは

Tree-sitterは高速な構文解析ライブラリで、多くのプログラミング言語に対応しています。Zedなどの多くのモダンエディタでも採用されている技術です。

実装例

Tree-sitterは各言語から呼び出せるバインディングが用意されています。

以下のNode.jsスクリプトは、指定されたディレクトリ内のPHPファイルから関数とクラスの定義を抽出します:

使い方

  1. 必要なパッケージのインストール:
npm install tree-sitter tree-sitter-php
  1. スクリプトを実行:
node index.cjs /path/to/php/dir/

出力例

スクリプトは以下のような形式で関数定義を出力します:

src/Example.php
|----
│class Example {
│public function doSomething() {
|----

'laravel/slack-notification-channel'に対して実行した例

node index.cjs ./vendor/laravel/slack-notification-channel/src/ | head -n 10
Channels/SlackWebhookChannel.php
|----
│class SlackWebhookChannel
|----
│    public function __construct(HttpClient $http)
|----
│    public function send($notifiable, Notification $notification)
|----
│    protected function buildJsonPayload(SlackMessage $message)
|----
# ...

(※とはいえOSSライブラリは通常ドキュメントが整備されているので、このような取り組みはインハウスなコードのドキュメント抽出に有効です)

ポイント

3

Discussion

ログインするとコメントできます