はじめに
正直正しく出来るかは、わかりませんが現場の開発者からは度重なる修正の度に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/
流れとしては以下の通り
①特定のリポジトリに対して、コンテンツリストを取得
②コンテンツリストの中から.pyファイルを抽出
③pythonファイルを取り出す
④前回作成したdoctringを生成するDifyにソースコードをPost
⑤Docstring付きコードをgithubにpull
環境条件
- 今回は1ファイルしかやりません。(沢山やると無料枠がなくなるので)
- publicリポジトリで行います。そしてpull requestは作成しません
①特定のリポジトリに対して、コンテンツリストを取得
Difyは、googleやgithubのアカウントでログイン出来ます。好きな方を選んでログインしてください。
https://cloud.dify.ai/signin
make.comの新しいシナリオを作成して、モジュール「HTTP」−「make a Request」を作成します。
「make a Request」でgithubにAPI経由でリポジトリのコンテンツリストを取得するための
URLを記述します。
# owner はユーザーのアカウント名
# repositoryは今回対象のリポジトリ名
https://api.github.com/repos/{ower}/{repositry}/contents
# github APIKEYはgithub側で発行してください。
# この説明は省きます。
Accept:application/vnd.github.v3+json
Authorization:Bearer {github APIKEY}
一度設定が終わったら実行してください。
そうすると右上に「①」のような数字が出来ます。
ここで出力されたoutputs情報を元に、jsonデータからファイルを取り出すためのurlを取り出します。
「json」-「parse json」を作成します。
データ構造は先程のoutputsにあるdataをサンプルに作成します。
addを押すと次の画面になります。
ここの「Generate」からoutputsのサンプルデータをコピペしてjson構造を創り出します。
②コンテンツリストの中から.pyファイルを抽出
③pythonファイルを取り出す
今回は1ファイルのみしか行わないので、「HTTP」-「Get a file」でファイルを取り出します。
(ちゃんとやる場合はIteratorをこの前に配置してください)
この段階では、pythonファイル以外も取得してしまっているので.pyファイルのみにフィルターします。
ただここでフィルターするよりも、「Get a file」の前の方が適切です。
④前回作成したdoctringを生成するDifyにソースコードをPost
ようやくここで前回Difyで作成した要約生成AIエージェントに接続します。
「HTTP」ー「Make a request」でDifyを呼び出す方法は、Dify側のAPIアクセスに接続方法が
記述されています。
api_keyは「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"
}'
⑤Docstring付きコードをgithubにpull
docstring付きのコードをgihuthubにpullするためにまた「HTTP」−「Make a request」を設定します。
図にあるとおり設定をすればオッケーです。 bearerに記述するAPI-KEYの発行は省略します。
さいごに
今回はDify x OpenAI 4oでdocstringを追加するAIエージェントをオーケストレーションツールであるmake.comを使って、githubと連携してみました。
まぁここまでは出来るだろうと思っていたのと、ここまでであればvscode+github copilotで十分な範囲とは思います。
次回は複数ファイルに対応出来る用に手直しした上で、ドキュメントを生成していきます