お?意外といけるやん!がリンケージ開発合宿でDevinハンズオンしてくれた。 自分でも動かしてみたいなー手元でなんかいい感じの題材ないかなーって探してPHPカンファレンス小田原2025のサイトのバージョンアップとかいい題材では?となったのでやっていった。
カンファレンスを主催してるとこういうところでネタが落ちてきて便利!
事前情報
技術スタック
Node.jsのv18は2025年4月30日にEOLを迎えているので、やや遅れをとっている。というより作った時のまんまで放置しちゃっていたのであった!
ということでAstroも最新のv5.x系に、それにあわせてNode.jsもv20.x系に上げることにした。
Devin
Coreプラン(個人プラン)で初期に $20 課金(おおよそ10ACU)。
Slackと連携して @Devin にメンションして進めてもらっている。

ちなみに、私は普段はChat GPTに雑にバンバン聞きまくるというのをやってるのでその感覚でDevinに依頼するとどんどんACUが溶けていく。くだらないことは聞かない方が良い。上記スクショの質問は0.1ACU($0.2)溶けている。
実際にやってみる
Astroを最新に上げたい

- 結果: 失敗
- 使用: 6.8 ACU($3.4)
「phpcon-odawara_jp のAstroを最新に上げたい」という雑な依頼を投下した。Repositoryの特定に時間がかかった(「phpcon-odawara_jpプロジェクトが見つからないため、プロジェクトの場所とAstro設定を確認する必要があります。」)ので organization/repository でちゃんと依頼するのが良い...。*1
その後、Node.jsのバージョンアップデートをやる、かつ、Astroのバージョンを上げようとしてくれたが、ひたすらビルドが失敗することになった(理由は後述)。
ンググ〜ってなっている状態で会社の人に相談したら「2つのタスクを1つのセッションでやってるからじゃない?」って言われて確かに、となったので、Node.jsバージョンアップとAstroバージョンアップでセッションを分ける方針にした。 「タスクの依頼がやや雑」「タスク分解ができていなかった」などがうまくいかなかった原因であったように思う。 めちゃくちゃ会話が伸びてきたら1回落ち着いて別セッションにいくことを検討すると良さそう。
Node.jsのバージョンを20にアップデートしてください

- 結果: 紆余曲折ありつつ成功
- 使用: 2.3 ACU($1.15)
前述した通りだが、ひたすらビルドが失敗していたのでこっちでも少し時間がかかった。というか、こればDevinに解決してもらったというより自分で解決した。
どのように失敗していたかというと、.node-versionで20を指定しているのに永遠にビルド環境のNode.jsが18.20.4のままなのである...。
22:31:56.914 Using v2 root directory strategy
22:31:56.938 Success: Finished cloning repository files
22:31:58.769 Checking for configuration in a Wrangler configuration file (BETA)
22:32:03.210
22:32:03.211 Installing node-v18.20.4-linux-x64...
22:32:03.597 Installed node-v18.20.4-linux-x64 to /opt/buildhome/.asdf/installs/nodejs/18.20.4
22:32:03.597 ...
22:32:05.322 npm warn EBADENGINE Unsupported engine {
22:32:05.322 npm warn EBADENGINE package: 'corepack@0.34.0',
22:32:05.322 npm warn EBADENGINE required: { node: '^20.10.0 || ^22.11.0 || >=24.0.0' },
22:32:05.322 npm warn EBADENGINE current: { node: 'v18.20.4', npm: '10.7.0' }
22:32:05.322 npm warn EBADENGINE }
22:32:05.424 ...
22:32:10.926 Error: Exit with error code: 1
22:32:10.927 at ChildProcess.<anonymous> (/snapshot/dist/run-build.js)
22:32:10.927 at Object.onceWrapper (node:events:652:26)
22:32:10.927 at ChildProcess.emit (node:events:537:28)
22:32:10.927 at ChildProcess._handle.onexit (node:internal/child_process:291:12)
22:32:10.936 Failed: build command exited with code: 1
22:32:11.980 Failed: error occurred while running build command
PR側で .node-versionファイルを作っているし、Cloudflare Pages側の"変数とシークレット"にあるNODE_VERSIONの記述を20にしてみたり、そもそも消してみたり、色々してみたが変わらず。エーなんでだろう...と思って100万年経った。経ってない。
ログ的にどう考えても18.20.4がどっかで設定が生きている、マジでわからん......となったけど小さな目をかっぴらいてCloudflareを見てたらあるものを発見。

はゎ・・・はゎゎ・・・これゎ・・・。

はい!!!!普通に節穴かましていた。プロダクション環境の"変数とシークレット"だけいじってプレビュー環境の"変数とシークレット"は何もいじってなかった。
プレビュー環境の"変数とシークレット"にあるNODE_VERSIONの記述を20にしてみたらビルドが通った。イエーイ、マージ!
ちなみにCloudflare Pages側でNODE_VERSIONがあればそちらが適用され、なければ.node-versionが適用されるようであった。
Astroのバージョンを最新にあげてください

- 結果: 成功
- 使用: 1.2ACU($0.6)
こっちはマジでスッと上がった。 まあそもそもほとんど静的ページなのでほとんど困ることがないというのはある。
所感
勝手にPR作ってくれるのクソ便利
シンプルに。
Slackで「やっといて〜」「ほいよ〜」ができるのが、普段のコミュニケーション体験とほとんど一緒なので嬉しい。
自信度Confidence: Low 🔴・Confidence: Medium 🟡・Confidence: High 🟢によってどれくらい自分がうまく指示できているかなどもわかって良い。次からこう依頼すればええんやな、とこちらも学習できる。
バージョンアップをいい感じにやってくれるのは嬉しいかもしれない
そもそもRenovateとかDependabotとか入れれば自動でPR作れるのでそれで良いという話はある。 それを入れた上でビルドが落ちて「ダル〜」と思ったやつをDevinに投げつけて解決してもらうのはアリなのかもしれないと思った。
依頼をちゃんと書く
Chat GPTに雑に言語破綻した文章を投げる感覚で使うのではなく(??)、タスクを明確にして投げるとより成功率が上がる。 ......そもそも普段からしっかりプロンプト書いていればこんなことを気にしなくて良さそう(恥)
最初に連携したRepositoryを色濃く持ってる気がする
一番最初に連携したRepositoryをいつまで経っても覚えている感じがする。
organization/reopsitoryで依頼しているのに違うRepositoryを読んで「このRepositoryですか?自信がありません〜」「それじゃなくてだな...organization/reopsitory(再掲)...」っていうのがちょくちょくある。
使い始めてまもないから日が経ったら忘れてくれるのかな?
Repository指定しないで雑に作ってもらったスクリプトの時とかは全然問題ない。
キャラで喋らせるのは得策ではない

ビルドがなかなかうまくいってなかった時だったからかもしれないが、所詮偽物は偽物。 あるいはしっかりコンテキストを埋め込めばもっとうまくいくのかもしれないが、キャラに喋らせるのは自分の性に合わなかった。
おわりに

*1:それでも特定に失敗することがあるのは謎だが
