「更新スクリプトで VM の起動・停止を自動化したら、弊害ってない?」
筆者がこう打ったのは、自作の更新スクリプトが失敗した直後だ。原因を調べた Claude Codeは、ビルド用の仮想マシンが止まっていたせいだと説明し、最後にこう添えてきた。「build 確認の前後で VM の起動と停止を自動で行うように直すこともできます。必要なら言ってください」。
「じゃあやって」と返せば 1 行で済む。そこを 1 行だけ遠回りした。この記事は、その遠回りで AI から何が出てきたかと、弊害の 1 つとして予告済みなのに、動かすまで問題だと気付かなかった話だ。持ち帰ってほしいのは手順ではなく、AI に問い返すタイミングである。
「弊害ってない?」で出てきた 4 つ
更新スクリプトは、依存の版を新しくしたら一度 build して確かめ、通ったら適用する。build の一部は Linux 用で Mac の上では作れないので、ビルド用の仮想マシン(以下 VM)に回す。この VM は普段は止めてある。常駐させると、メモリを数 GB 取られるからだ。止まっていたので build が落ち、スクリプトは版を元に戻し、古い版のまま適用して終わっていた。
AI の答えは、弊害と対策の組だった。
| 弊害 | 対策 |
|---|---|
| 人が手で起動していた VM まで止めてしまう | スクリプトが自分で起動したときだけ止める |
| 失敗や Ctrl-C で停止まで進まず、VM がメモリを握ったまま残る | 終了時に必ず止める |
| 管理者権限の sudo の認証を求めるのが、最後の適用の直前から build 確認の前に早まる。無人で回すとそこで止まる | 対話で回すなら Touch ID が 1 回増えるだけ。無人の経路では VM を起動しない |
| VM の起動待ちで数十秒遅くなる | 起動待ちに期限を付け、起動しなければ今と同じく元に戻す |
自動化しない別案も付いていた。VM が止まっていたら起動はせず、「止まっているので版の更新を飛ばした」と大きく表示して終える。認証は増えないが、毎回手で起動する手間は残る。AI のおすすめは対策つきで自動化する案で、筆者もそれで頼んだ。
対策の 1 つには、merge の前にレビューで穴が見つかった。レビュー役の AI が試すと、build 確認の途中で Ctrl-C を押しても更新全体は止まらず、版を元に戻したうえで適用まで進んでいた。VM を止めるための Ctrl-C の受け口が、Ctrl-C そのものを飲み込んでいたわけだ。VM は止まる。なのに、更新は止まらない。穴は修正 1 回でふさがった。
「ちゃんと通ったんだけど」
merge して、更新を最初から最後まで回した。通った。ただ、パスワードを 2 回聞かれた。
「ちゃんと通ったんだけど password が 2 回要求されるのって問題じゃない?」
AI の説明はこうだ。sudo は、最後に sudo を使ってから既定で 5 分間は認証を求めない(sudoers の timestamp_timeout。この 5 分を、以下「有効期間」と呼ぶ)。そして自動化のあと、更新スクリプトは sudo を次の順に使うようになっていた。
自動化の前は、sudo を使うのは最後の適用だけだった。いまは長い build の前後に sudo があるので、build が有効期間を超えると、VM の停止のところでもう 1 回聞かれる。
ここで表の 3 行目を見返す。見立ては「Touch ID が 1 回増えるだけ」。数としては正確だった。PR の報告にも「build 確認が長引くと、VM を止めるときにもう一度求められることがあります」と、来る場所まで書いてあった。筆者は「だけ」のほうを読んで先へ進んだ。書いてあったことが「問題」に変わったのは、実際に 2 回打ったときだ。
聞き返すと、AI は回数ではなく、2 回目が来たときに誰もいないことを実害に挙げた。更新を流して席を立つと、VM の停止の手前で認証を待ったまま止まる。しかも man で確かめると、macOS の sudo は既定では入力待ちが時間切れにならない(sudoers の passwd_timeout が 0)。席に戻るまで、VM はメモリを握ったまま動いている。2 行目の対策でふさいだはずの「VM が残る」が、裏口から帰ってきた。
直す案には、聞く前から「気にする点」が付いていた
1 回目は、聞いてはじめて弊害が出てきた。今回は、聞く前に気にする点が付いてきた。
| 案 | 出どころ | よい点 | 気にする点 |
|---|---|---|---|
| 最初に 1 回だけ認証し、更新が動いている間は裏で有効期間を延ばし続ける | 今回 AI が勧めた案 | 認証は最初の 1 回。席を立っても止まらない | 更新の間、その端末では sudo が認証なしで通る。ただし普段も最後に使ってから 5 分間は同じ状態 |
| 自動化をやめ、VM が止まっていたら表示して終える | 1 回目の答えにあった別案 | 認証は 1 回のまま | 毎回手で VM を起動する |
有効期間そのもの、つまり timestamp_timeout を延ばす案も出たが、更新以外の場面にも効くので AI は勧めなかった。
筆者は 1 つ目で頼んだ。中身は sudo の標準の機能だけで組める。最初に sudo -v で認証を済ませる。これは認証を更新して有効期間をもう 5 分延ばすオプションだ。あとは更新スクリプトが動いている間、裏で 10 秒ごとに sudo -n -v を実行する。-n はパスワードが要る場面で入力を求めずにエラーで終わるので、延長役が勝手に認証を求めて止まることはない。更新が失敗や Ctrl-C で終わっても、延長は 10 秒以内に止まる。
AI は sudo を偽物に差し替えたテストで、対話の認証が 1 回だけなこと、呼び出し元が終われば延長も止まることを確かめた。止め方の条件を書き換えるとテストが落ちることまで見ている。ただし本物の sudo を通した確認は、この PR の時点ではまだだった。
この形でも、最初の 1 回は人が要る。無人で回す経路では、そこで止まる。席を立ってよいのは、最初の認証(Touch ID かパスワード)を通してからだ。延長役は留守番を引き受けてくれるが、最初の鍵開けまでは代わってくれない。
自分ならどこで問い返すか
2 回目の認証は、sudo に限らない構造から来ている。有効期間のある認証を、長い処理の前後で 2 回使う。間の処理が有効期間を超えると、2 回目が来る。しかも長い処理ほど人は席を立つので、2 回目は誰もいないときに来やすい。
| タイミング | 問い | 出てきたもの |
|---|---|---|
| AI が「自動化もできます」と申し出たとき | 「この自動化の弊害ってない?」 | 弊害 4 つと対策、自動化しない別案 |
| AI が弊害を「〜だけ」と小さく言ったとき | 「その 1 回はいつ来る? そのとき席を外していたら、何が残る?」 | 聞いていない。2 回目は誰もいない VM の停止で来て、戻るまで止まったままになる |
| 動いたけど、どこか引っかかったとき | 「通ったけど、これって問題じゃない?」 | 席を立つと止まる実害と、直す案 2 つ(1 つは AI 自身が非推奨) |
真ん中の行は、筆者が今回聞かなかった問いだ。網には掛かっていた。「1 回増えるだけ」の札が付いていたので、筆者は数えて海に返した。小物のはずが、留守の間に網ごと動かなくする魚だった。
まとめ
AI に自動化を頼むとき、実装の前に弊害を聞くと、対策と「自動化しない案」まで出てくる。「〜だけ」が付いた弊害は、席を立つ、無人で回すといった自分の使い方に当てて聞き返す。聞きそびれても、動かした後の違和感はそのまま AI に聞き返していい。
AI エージェントに自動化や開発を任せる進め方は、AI実装支援でも相談を受けている。AI の修正が条件分岐を足すだけで積み上がる話は、バグ修正を根本原因から直させる記事にまとめた。



