github x make.com x Dify 連携で自動コメントの作成

### はじめに

正直正しく出来るかは、わかりませんが現場の開発者からは度重なる修正の度にdostringを修正したり、設計書のメンテナンスをするのが面倒だしやりたくないという声をお聞きしました。リーダブルコードであれば自動的にdocstringを追加して、そこから自動的に概要設計書を作成出来たら現場のエンジニアが楽になるのでは？という想いから、実証実験をしてみることにしました。  

ただしこの実験が成功するかは不明なので途中でポシャる可能性が大です。

第一弾は、こちらです。
https://qiita.com/kazuharu2022/items/ce09baa206785a4d8475

### 実証実験環境

OpenAI ・・・　無料枠のあるgemini-flashもありますが、一旦はオーソドックスなOpenAIもO4を使います。  

Dify ・・・　特段現段階ではDifyまで必要とは思っていませんが、単に使ってみたかったというので敢えて使っています。無くても大丈夫です。今の所は。

make.com ・・・　今回のある意味メインですね。最終的にはgithubのリポジトリからdocstringが書いていないコードに対して自動的にコメントを追記して、pull requestを発行するのに使う予定です。

### 今回行う範囲　- make.comを使ってリポジトリファイルにdostringを追加

今回はオーケストレーションツールのmake.comを使ってdifyとgithubを仲立ちします。  
https://us2.make.com/

![スクリーンショット 2025-05-15 13.18.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856269/93447e0e-bde3-4cbc-9b3b-b44cc4507699.png)

流れとしては以下の通り

①特定のリポジトリに対して、コンテンツリストを取得  
②コンテンツリストの中から.pyファイルを抽出  
③pythonファイルを取り出す
④前回作成したdoctringを生成するDifyにソースコードをPost
⑤Docstring付きコードをgithubにpull

環境条件
- 今回は１ファイルしかやりません。（沢山やると無料枠がなくなるので）
- publicリポジトリで行います。そしてpull requestは作成しません

### ①特定のリポジトリに対して、コンテンツリストを取得
Difyは、googleやgithubのアカウントでログイン出来ます。好きな方を選んでログインしてください。
https://cloud.dify.ai/signin


make.comの新しいシナリオを作成して、モジュール「HTTP」−「make a Request」を作成します。

![スクリーンショット 2025-05-15 13.31.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856269/2d282fef-024b-48ea-9ad1-bd773c770b8e.png)

「make a Request」でgithubにAPI経由でリポジトリのコンテンツリストを取得するための  
URLを記述します。
```:URL
# owner はユーザーのアカウント名
# repositoryは今回対象のリポジトリ名
https://api.github.com/repos/{ower}/{repositry}/contents
```

```:headers
# github APIKEYはgithub側で発行してください。
# この説明は省きます。
Accept:application/vnd.github.v3+json
Authorization:Bearer {github APIKEY}
```


![スクリーンショット 2025-05-15 13.28.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856269/eac8adab-1d92-4710-b3a7-744e6420dd62.png)



![スクリーンショット 2025-05-15 13.28.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856269/d8e9d00e-9439-43ed-8df3-b38252b24692.png)


一度設定が終わったら実行してください。
そうすると右上に「①」のような数字が出来ます。
ここで出力されたoutputs情報を元に、jsonデータからファイルを取り出すためのurlを取り出します。

![スクリーンショット 2025-05-15 13.42.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856269/4c11d89a-788e-4daa-91b7-ef352f68adc2.png)

![スクリーンショット 2025-05-15 13.42.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856269/9a2e689a-f5bd-496c-a615-57ae7a7b50e5.png)

Dataの中がjsonデータ本体です。
![スクリーンショット 2025-05-15 13.40.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856269/c9b8b83f-abf7-4928-bbeb-df14bb649ebd.png)

「json」-「parse json」を作成します。  

![スクリーンショット 2025-05-15 13.38.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856269/86aa32c5-cd07-4be2-8474-2ef57e82582b.png)

データ構造は先程のoutputsにあるdataをサンプルに作成します。  
addを押すと次の画面になります。

![スクリーンショット 2025-05-15 13.38.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856269/ae4e78e9-3b04-4d31-b0a9-d0a04112102b.png)

ここの「Generate」からoutputsのサンプルデータをコピペしてjson構造を創り出します。
![スクリーンショット 2025-05-15 13.47.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856269/828c4e97-b405-48e7-a35b-7e86aadcc416.png)



### ②コンテンツリストの中から.pyファイルを抽出 
### ③pythonファイルを取り出す

今回は１ファイルのみしか行わないので、「HTTP」-「Get a file」でファイルを取り出します。
（ちゃんとやる場合はIteratorをこの前に配置してください）

![スクリーンショット 2025-05-19 12.33.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856269/df9fdf74-181c-4af4-9353-e91ef14a2537.png)

この段階では、pythonファイル以外も取得してしまっているので.pyファイルのみにフィルターします。
ただここでフィルターするよりも、「Get a file」の前の方が適切です。

![スクリーンショット 2025-05-19 12.33.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856269/6a5d1631-df52-4ec5-9949-63228d73bf10.png)



### ④前回作成したdoctringを生成するDifyにソースコードをPost

ようやくここで前回Difyで作成した要約生成ＡＩエージェントに接続します。

「HTTP」ー「Make a request」でDifyを呼び出す方法は、Dify側のＡＰＩアクセスに接続方法が
記述されています。


![スクリーンショット 2025-05-19 12.39.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856269/647ea281-8a7e-401f-ab9a-6edabb3c501c.png)


api_keyは「APIアクセス画面」の右上から発行できます。
![スクリーンショット 2025-05-19 12.44.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856269/755e382c-7f9e-439e-89ec-28547e0aefb6.png)


```:dify api接続サンプル
curl -X POST 'https://api.dify.ai/v1/workflows/run' \
--header 'Authorization: Bearer {api_key}' \
--header 'Content-Type: application/json' \
--data-raw '{
    "inputs": {"dify側の入力変数名","dify側に渡す文字列"},
    "response_mode": "blocking",
    "user": "abc-123"
}'

```

![スクリーンショット 2025-05-19 12.47.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856269/9271ed00-a240-42d6-8b2c-28f8a1994584.png)


![スクリーンショット 2025-05-19 12.46.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856269/27df17cf-5474-4fb0-82ae-7b74cd6728d2.png)


### ⑤Docstring付きコードをgithubにpull

docstring付きのコードをgihuthubにpullするためにまた「HTTP」−「Make a request」を設定します。
図にあるとおり設定をすればオッケーです。 bearerに記述するAPI-KEYの発行は省略します。

![スクリーンショット 2025-05-19 12.49.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856269/4481b1df-b5ab-4d26-a771-b075d9bac50c.png)

![スクリーンショット 2025-05-19 12.49.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856269/c7db19fb-090b-430d-a32f-b60437352de8.png)


### さいごに

今回はDify x OpenAI 4oでdocstringを追加するＡＩエージェントをオーケストレーションツールであるmake.comを使って、githubと連携してみました。
まぁここまでは出来るだろうと思っていたのと、ここまでであればvscode+github copilotで十分な範囲とは思います。

次回は複数ファイルに対応出来る用に手直しした上で、ドキュメントを生成していきます