dependabotの作ったライブラリ更新プルリクをshokaiが重視している観点でDevinにレビューさせたり、リリースノート読ませてアプリ側のコードも修正させたりする
完成版のプロンプトはこのページの一番下にあります
社内のDevin.iconではPlaybook化して、session開始時にすぐ使えるようにしてある
Dependabotはライブラリのバージョンだけを上げる雑なpull requestを凄い勢いで作って、プルリクリストを埋め尽くすので困るshokai.icon
概要欄はrelease noteとchangelogとcommitのリストだけ
ライブラリ更新に伴うAPI変更の責任を持ってくれない
ただpackage.jsonやGemfile内のバージョン番号を上げるだけ
複数のpull requestを一気に出してきて、1つmergeしたら他がcloseされて、また全然違うのがopenしたりする
どれからやればいいのかわからない
Devinを使えば
release noteやchangelogから、Cosenseに影響のある重要な変更だけを抜き出して、まとめれる
情報が足りなければgithubまで確認に行ってくれる
ライブラリ更新でAPIが変化したら、アプリケーションコードも更新してもらう
よくわからんマイナーなライブラリでも、役割や依存関係を説明してくれる
ライブラリ同士が依存し合っているので、奥の方にいるやつは私も名前を知らなかったりする
複数のpull requestを一気に出してこられても全部処理できるので、1つmergeして大量close & openされても大丈夫
AIエージェントに既存のツールをユーザーフレンドリーにしてもらうパターン
changelog読むのはわりと勉強になる事があるが、めんどくささもあるので良い感じにやりたいshokai.icon
Dependabot既に建てている6つのpull requestを対象に作業する
https://github.com/nota/scrapbox/pull/7197
https://github.com/nota/scrapbox/pull/7198
https://github.com/nota/scrapbox/pull/7199
https://github.com/nota/scrapbox/pull/7200
https://github.com/nota/scrapbox/pull/7201
https://github.com/nota/scrapbox/pull/7202
さっそくDevinDevin.iconにレビューさせようshokai.icon
https://app.devin.ai/sessions/5104a8894b8e40febf7e9d02c89b22b5
https://nota.slack.com/archives/C089D2SDXDZ/p1740854780560659
mergeする事にdependabotが次のプルリクを建ててくるので、どんどんDevinに処理させた
10プルリクmergeし、19 ACUsかかった
code:最初のprompt
openされているpull requestのうち、dependabotが作成したものだけをレビューしてください。
## 要約を書いてください
release noteやchangelogはきちんと読んで下さい。
機能追加やAPIの仕様変更のうち、特に我々のアプリケーションが使っている機能に関係がありそうな変更を抜き出して、pull requestにコメントしてください。
## コードを更新してほしい
ライブラリのAPIが変化した場合は、アプリケーションのコードを変更するべきです。
dependabotが作ったpull requestに変更をpushしてください。
release noteやchangelogだけで正しい変更方法がわからない場合は、公式ドキュメントに当たって下さい。
また、その変更内容もgithubにコメントして報告してください。
## 面白い更新があれば、それも教えてほしい
例えば以下のような内容も、githubにコメントして教えて下さい。
- 野心的な新機能が実装された
- プログラム言語や実行環境の新機能を活用した面白い機能が実装された
- ライブラリの開発体制に変化があった
レビューしてくれた。わかりやすいshokai.icon
https://scrapbox.io/files/67f2c939e999e10a058d6381.pnghttps://scrapbox.io/files/67f2c93ed165c974d12702b0.png
さらにKaTeXのpull requestに対するpull requestを作ってくれた
KaTeX CDN URLを0.16.21に更新 #7204
KaTeXがjavascript上でimportされている箇所だけでなく、server side renderingされるHTMLのscriptタグでCDNから読み込んでる箇所を見つけて、そこも同じバージョンに更新してくれた
これちょっと感動したshokai.icon
dependabotのpull requestにpushしろと言ったけど、新規pull requestができてしまった
既存のknowledgeが影響してそうshokai.icon
日本語への翻訳もやってもらおうかと思ったけどやめたshokai.icon
「scrapboxリポジトリには日本語で書け」というknowledgeを覚えさせてたので、指示しなくても日本語になっちゃった
まあいいや
そのライブラリの概要も知りたい
code:概要と依存関係
## ライブラリの概要を教えて下さい
何を実現する為に、どういう用途で使われるライブラリなのか、pull requestにコメントしてください。
## ライブラリの依存関係を教えて下さい
pull requestのpackage-lock.jsonを読んで確認してください
- そのライブラリに依存している他のライブラリがあれば列挙する
- そのライブラリが依存している他のライブラリがあれば列挙する
https://scrapbox.io/files/67f2c948fb4d4dd344069152.pnghttps://scrapbox.io/files/67f2c94b08039fca5df2ffd1.png
https://scrapbox.io/files/67f2c95c6c8786e0e2405ce9.png
素晴らしいなshokai.icon
私がライブラリ更新する時に見てるポイント全部出てくるようになった
undiciの依存関係の分析が間違ってるshokai.icon
https://scrapbox.io/files/67f2c9614ce8fcb04d8f67f9.png
実際には@elastic/transportがundiciを使っている
diffしか読んでない疑惑shokai.icon
code:diffじゃなくファイル読め
## ライブラリの概要を教えて下さい
何を実現する為に、どういう用途で使われるライブラリなのか、各pull requestにコメントしてください。
## ライブラリの依存関係を教えて下さい
各pull requestのpackage-lock.jsonを読んで確認してください。diffではなくpackage-lock.jsonそのものを読んで正確に分析してください。
- そのライブラリに依存している他のライブラリがあれば列挙する
- そのライブラリが依存している他のライブラリがあれば列挙する
この書き方じゃダメみたいだ。git grep -C15 ライブラリ名を使えと言ったほうが良さそうshokai.icon
package-lock.jsonのdiffのちょっと上の行まで含めてコピペして指摘したら認識を改めてくれた
https://scrapbox.io/files/67f2c966f2efbaaa61f00203.png
「この変更は grep -C15 unidici package-lock.jsonで見つけた」と言ったためか、他のpull requestにも応用して直し始めた
katexにはcommanderの依存がある事を発見
https://scrapbox.io/files/67f2c9702be075438770af9d.png
1つやり方を教えたら他のプルリクにも応用してくれるの良いね。対話なんだけどプログラミングっぽいshokai.icon #Devinの感想
最終的にこうなった
code:依存関係はpackage-lock.jsonをgit grepしろ
## ライブラリの依存関係を教えて下さい
各pull requestのpackage-lock.jsonを読んで確認してください。 grep -C15 ライブラリ名 package-lock.json のような感じで検索するとうまくいくと思います。
- そのライブラリに依存している他のライブラリがあれば列挙する
- そのライブラリが依存している他のライブラリがあれば列挙する
あと一応git grep ライブラリ名でimportやrequireしてるファイルのリストも知りたい
code:利用箇所prompt
## アプリケーション内で、そのライブラリを使っている箇所を教えて下さい
リポジトリ内のimport文やrequire文を git grep ライブラリ名で探して、ファイルパスのリストを作って下さい。
pull requestにコメントして教えて下さい。
https://scrapbox.io/files/67f2c97e337108bb5384632a.pnghttps://scrapbox.io/files/67f2c9819d576e6332059a92.png
便利すぎるshokai.icon
上の全てをまとめたDevin用のプロンプト
code:完成版prompt
# 作業依頼
openなpull requestのうち、dependabotやrenovatebotが作成したものだけをレビューしてください。
close済みのpull requestは対象外です。
作業が終わったpull requestには「please review」というラベルを付けて下さい。
行うべき作業は以下の通りです。
## ライブラリの概要を教えて下さい
何を実現する為に、どういう用途で使われるライブラリなのか、各pull requestにコメントしてください。
## ライブラリの依存関係を教えて下さい
各pull requestのpackage-lock.jsonを読んで確認してください。 grep -C15 ライブラリ名 package-lock.json のような感じで検索するとうまくいくと思います。
- そのライブラリに依存している他のライブラリがあれば列挙する
- そのライブラリが依存している他のライブラリがあれば列挙する
## 変更内容の要約を書いてください
release noteやchangelogはきちんと読んで下さい。
機能追加やAPIの仕様変更のうち、特に我々のアプリケーションが使っている機能に関係がありそうな変更を抜き出して、pull requestにコメントしてください。
## コードを更新してください
ライブラリのAPIが変化した場合は、アプリケーションのコードを変更するべきです。
dependabotが作ったpull requestに向けた、新しいpull requestを作成してください。
release noteやchangelogだけで正しい変更方法がわからない場合は、commitsや、公式ドキュメントも確認して下さい。
また、その変更内容もgithubにコメントして報告してください。
## 面白い更新があれば、それも教えてほしい
例えば以下のような内容も、githubにコメントして教えて下さい。
- 野心的な新機能が実装された
- プログラム言語や実行環境の新機能を活用した面白い機能が実装された
- ライブラリの開発体制に変化があった
## ライブラリを使っている箇所を教えて下さい
リポジトリ内のimport文やrequire文を git grep ライブラリ名で探して、ファイルパスのリストを作って下さい。
pull requestにコメントして教えて下さい。
この項目は長大になる可能性が高いので、結果はコメントの末尾に配置してください。
完成したプロンプトを使ってどんどん進めていくぞshokai.icon
https://github.com/nota/scrapbox/pull/7205
https://scrapbox.io/files/67f2c9929df24207cdb76ac7.png
https://github.com/nota/scrapbox/pull/7206
https://scrapbox.io/files/67f2c9958fdc3c7979b01fd3.png
https://github.com/nota/scrapbox/pull/7209
https://scrapbox.io/files/67f2c99db9161540af3eda21.png
良い感じの型ができたので、さらに応用していく
超雑で作りかけのライブラリ更新プルリクをshokaiが重視している観点でDevinにレビューさせて、リリースノートの確認とアプリ側のコードの修正もやってもらう
すごいteramotodaiki.icon
「package-lock.jsonを読んで」は文字通り読むとコンテキストに収まらなさそうteramotodaiki.icon
Devinはどうやっているんだろう
npm listを使うと良いかも
読めなかったので、最終的にgit grep -C15 ライブラリ名 package-lock.jsonしろという指示にしましたshokai.icon
dependabotの作ったライブラリ更新プルリクをshokaiが重視している観点でDevinにレビューさせたり、リリースノート読ませてアプリ側のコードも修正させたりする#67c36c4497c291000046df29
この用途だとPlaybookを使うのも良さそうteramotodaiki.icon
最初のプロンプトを保存して使い回せる
「!dependabot」みたいなマクロを登録して呼び出す
あるいはDevinのAPI経由でも使える
このへんからPlaybook化して使いまわしはじめてますshokai.icon
https://app.devin.ai/sessions/c3193ed42cc349a58da79b8ea2e4ea5d
https://app.devin.ai/sessions/f39401ddec164ee5aedbfa89d1133dfb
https://app.devin.ai/sessions/7bdaa38e4e234ef19cac2509c238b524
passportの更新
Dependabot.iconがBump passport and passport-azure-ad #7217を建てた
Devin.iconがlogout APIの変更を検知して、Fix: Update req.logout() to use callback for passport 0.7.0 compatibility #7218を建てた
shokai.iconがcallbackの処理方法を手直ししつつ、動作確認してリリース
Devin.iconはlogout APIの変更をどうやって見つけたのか?
https://scrapbox.io/files/67f2c9cbdb7a0b52286e4367.png
えらい!!shokai.icon
これは自明じゃなさそうなので、再現性を上げるためにプロンプトに含めておくべきだ
さらに改良したshokai.icon
全社向けにdevinのplaybookを展開していく事を考えたい
shokai.iconが重視している観点でレビューする、という手順だけをplaybookにする
各リポジトリ毎に事情が違いそうな部分は、各自でカスタムしてもらう
実行前にプロンプトを変更する
リポジトリ固有のknowledgeで表現する
please reviewラベルの付け外しをプロンプトからは除外した
scrapboxリポジトリ固有の運用なので、knowledgeで表現するべき
https://scrapbox.io/files/67f2c9d2337108bb538463d6.png https://app.devin.ai/knowledge/cd7541f23d464321b27e72f6fb1b5be9
「dependabotが書いたrelease noteやchangelogでは情報が足りないのでgithubまで見に行け」という指示を追加
さらにgithubリポジトリが見つからない場合の探し方も追加
これは超雑で作りかけのライブラリ更新プルリクをshokaiが重視している観点でDevinにレビューさせて、リリースノートの確認とアプリ側のコードの修正もやってもらうで作ったプロンプトで、概要欄がほとんど書かれてないpull request相手でも機能するshokai.icon
「日本語で書け、ただしテクニカルタームは翻訳するな」を追加
作業結果の出力先の指示を上の方に集約した
別の場所に書かせるようなカスタマイズが容易になったはず
これが余計だったっぽいな、という事に実行結果を見て気づいたshokai.icon
code:完成版promptの改良版
openなpull requestのうち、dependabotやrenovatebotが作成したものだけをレビューしてください。
close済みのpull requestは対象外です。
# 注意事項
## 作業結果は各pull requestのコメント欄に投稿して下さい
これから依頼する作業の対象は複数のpull requestです。結果は各pull requestのコメント欄にそれぞれ書き込んで下さい。
## 日本語で書いて下さい
あなたがgithubに書き込むメッセージは、日本語で書いて下さい。
ただしテクニカルタームは翻訳せずに、元テキストの表記を保って下さい。これはライブラリ名や機能名を日本語に翻訳されてしまうと、私がGoogle検索に正式名称を入力して調べにくくなってしまうからです。
# 作業内容
あなたが行う作業は以下の通りです。
## ライブラリの概要を教えて下さい
何を実現する為に、どういう用途で使われるライブラリなのか説明してください。
## ライブラリの依存関係を教えて下さい
各pull requestのpackage-lock.jsonを読んで確認してください。 grep -C15 ライブラリ名 package-lock.json のような感じで検索するとうまくいくと思います。
- そのライブラリに依存している他のライブラリがあれば列挙する
- そのライブラリが依存している他のライブラリがあれば列挙する
## 変更内容の要約を書いてください
release noteやchangelogはきちんと読んで下さい。dependabotが概要欄に書いたテキストだけでは変更を詳細に把握できないので、githubまで見に行ってください。
機能追加やAPIの仕様変更のうち、特に我々のアプリケーションが使っている機能に関係がありそうな変更を抜き出してください。
### ライブラリのgithubリポジトリが見つからない場合
ライブラリ内のpackage.jsonに、npmjs.comやgithubのURLが書かれています。そこから辿って下さい。
## コードを更新してください
ライブラリのAPIが変化した場合は、対応するアプリケーション側のコードも変更するべきです。
dependabotが作ったpull requestに向けた、新しいpull requestを作成してください。
release noteやchangelogだけで正しい変更方法がわからない場合は、commitsや、公式ドキュメントも確認して下さい。
また、その変更内容もgithubにコメントして報告してください。
## 面白い更新があれば、それも教えてほしい
例えば
- 我々のアプリケーションにも応用できそうな新機能が実装されたり、概念が発明された
- プログラム言語や実行環境の新機能を活用した面白い機能が実装された
- ライブラリの開発体制に変化があった
## ライブラリを使っている箇所を教えて下さい
リポジトリ内のimport文やrequire文を git grep ライブラリ名で探して、ファイルパスのリストを作って下さい。
この項目は長大になる可能性が高いので、結果はコメントの末尾に配置してください。
なんか変なフォーマットになっちゃったな
https://github.com/nota/scrapbox/pull/7225
https://scrapbox.io/files/67f2c9ddb003c4ef86a597af.png
https://github.com/nota/scrapbox/pull/7224
https://scrapbox.io/files/67f2c9e19df24207cdb76b5c.png
内容としては間違ってはいないけど不自然
プロンプトが悪いshokai.icon
やってほしい作業と、レポートしてほしい書式が混ざってしまっている
さらに途中で1度limitが来て止まって、起こさなければならなかった
やっぱりこれぐらいでいいのかなあshokai.icon
日本語で書け、は一旦各リポジトリのkowledgeに任せる事にした
code:完成版promptの改良版2
# 作業依頼
openなpull requestのうち、dependabotやrenovatebotが作成したものだけを対象に、1つずつレビューしてください。
close済みのpull requestは対象外です。
作業が終わったpull requestには「please review」というラベルを付けて下さい。
行うべき作業は以下の通りです。
## ライブラリの概要を教えて下さい
何を実現する為に、どういう用途で使われるライブラリなのか、各pull requestにコメントしてください。
## ライブラリの依存関係を教えて下さい
各pull requestのpackage-lock.jsonを読んで確認してください。 grep -C15 ライブラリ名 package-lock.json のような感じで検索するとうまくいくと思います。
- そのライブラリに依存している他のライブラリがあれば列挙する
- そのライブラリが依存している他のライブラリがあれば列挙する
## 変更内容の要約を書いてください
release noteやchangelogはきちんと読んで下さい。dependabotが概要欄に書いたテキストだけで変更を詳細に把握できない場合は、githubまで見に行ってください。
機能追加やAPIの仕様変更のうち、特に我々のアプリケーションが使っている機能に関係がありそうな変更を抜き出して、pull requestにコメントしてください。
## コードを更新してください
ライブラリのAPIが変化した場合は、アプリケーションのコードを変更するべきです。
dependabotが作ったpull requestに向けた、新しいpull requestを作成してください。
release noteやchangelogだけで正しい変更方法がわからない場合は、commitsや、公式ドキュメントも確認して下さい。
また、その変更内容もgithubにコメントして報告してください。
## 興味深い更新があれば、それも教えてほしい
例えば以下のような内容も、githubにコメントして教えて下さい。
- 我々のアプリケーションにも応用できそうな新機能が実装されたり、概念が発明された
- プログラム言語や実行環境の新機能を活用した面白い機能が実装された
- ライブラリの開発体制に変化があった
## ライブラリを使っている箇所を教えて下さい
リポジトリ内のimport文やrequire文を git grep ライブラリ名 で探して、ファイルパスのリストを作って下さい。
pull requestにコメントして教えて下さい。
この項目は長大になる可能性が高いので、結果はコメントの末尾に配置してください。
順に処理してくれるようになった
これまで複数のリポジトリを一気に理解してから、一気にレビューして、最後に全てにまとめてplease reviewを付けてた
https://scrapbox.io/files/67f2c9efe63f8f886c394725.png
上から順にレビューされていっている様子
これ地味にうれしいshokai.icon
レビュー形式がshokai.iconが好きな形式に戻った
Dependabot.icon Bump bogon from 1.0.0 to 1.1.0 #7225
https://scrapbox.io/files/67f2c9f98dbb52077b50b20e.png
Dependabot.icon Bump typescript from 4.7.4 to 4.9.5 #7224
Dependabot.icon Bump helmet from 3.21.2 to 3.23.3 #7223
正しい形式でレビューを書いている
Devin.icon Fix: helmet.frameguard()の削除に対応 #7226
fame-srcを設定するmiddlewareが無くなったので自作してくれた
しかしhelmetのメジャーバージョンは8なんだな。離されすぎてる
これはmergeせずhelmet自体を8に更新した方が良さそうだshokai.icon
expressは最新版なので問題なくやれそう
done.icon Cosenseのhelmet npmを3から8に更新する
最終的にDevinがrelease noteを元に作ったpull requestはそのまま採用はできなかったが、たたき台にはなったので助かった
Bump xml-crypto from 2.1.3 to 2.1.6 #7264
https://scrapbox.io/files/67f2c9fd73b35cc30a3625f0.png
xml-cryptoがpassport-samlの中で使われているライブラリである事がはっきり説明されているshokai.icon
とてもありがたい
概要欄とpackage-lock.jsonのdiffをしっかり見ても、その事実はわからない
package-lock.jsonの、diffが発生していない遠くの行をgrepで探すと、関係性がわかる
こういうCVE番号が発行されているような重要なセキュリティアップデートは、pull requestに"security"というlabelを付けてほしいなshokai.icon
最終的にこうなったshokai.icon
code:完成版prompt改良版3
# 作業依頼
openなpull requestのうち、dependabotやrenovatebotが作成したものだけを対象に、1つずつレビューしてください。
close済みのpull requestは対象外です。
作業が終わったpull requestには「please review」というラベルを付けて下さい。さらに、CVE番号が発行されているような重要なセキュリティアップデートのpull requestには、「security」というラベルも付けてください。
行うべき作業は以下の通りです。
## ライブラリの概要を教えて下さい
何を実現する為に、どういう用途で使われるライブラリなのか、各pull requestにコメントしてください。
## ライブラリの依存関係を教えて下さい
各pull requestのpackage-lock.jsonを読んで確認してください。 grep -C15 ライブラリ名 package-lock.json のような感じで検索するとうまくいくと思います。
- そのライブラリに依存している他のライブラリがあれば列挙する
- そのライブラリが依存している他のライブラリがあれば列挙する
## 変更内容の要約を書いてください
release noteやchangelogはきちんと読んで下さい。dependabotが概要欄に書いたテキストだけで変更を詳細に把握できない場合は、githubまで見に行ってください。
機能追加やAPIの仕様変更のうち、特に我々のアプリケーションが使っている機能に関係がありそうな変更を抜き出して、pull requestにコメントしてください。
## コードを更新してください
ライブラリのAPIが変化した場合は、アプリケーションのコードを変更するべきです。
dependabotが作ったpull requestに向けた、新しいpull requestを作成してください。
release noteやchangelogだけで正しい変更方法がわからない場合は、commitsや、公式ドキュメントも確認して下さい。
また、その変更内容もgithubにコメントして報告してください。
## ライブラリ内に興味深い更新があれば、それも教えてほしい
例えば以下のような内容も、githubにコメントして教えて下さい。
- 我々のアプリケーションにも応用できそうな新機能が実装されたり、概念が発明された
- プログラム言語や実行環境の新機能を活用した面白い機能が実装された
- ライブラリの開発体制に変化があった
## ライブラリを使っている箇所を教えて下さい
リポジトリ内のimport文やrequire文を git grep ライブラリ名 で探して、ファイルパスのリストを作って下さい。
pull requestにコメントして教えて下さい。
この項目は長大になる可能性が高いので、結果はコメントの末尾に配置してください。