📲

Claude Computer use (beta)でiPhoneを操作する

2024/10/26に公開

Claude Computer use (beta)を利用し、iPhoneを操作してみました。下記警告の通り、Anthropicでは仮想環境と人間の監督前提での利用を勧めていますので、実環境での利用にはご注意ください。

仕組み

仮想環境ではなく、macを直接 RobotGoというRPAライブラリを使い、Computer useに必要なマウス操作、キーボード入力、スクリーンショット取得等をします。RobotGo自体はクロスプラットフォームのため、WindowsやLinuxでも使えます。

またmacOS SequoiaではiPhoneミラーリング機能があり、実機のiPhoneをmacOS上から操作することが可能です。

これらを組み合わせて、iPhoneを使って自動化ができるか実験を行いました。繰り返しますが、利用中のmacやiPhoneを使うことはお勧めしません。

コード

RobotGoではマウス移動、クリック、文字入力、スクリーショット取得が行えるために非常に簡単な実装となります。

func (r *Robot) MouseMove(x, y int) {
	robotgo.Move(x, y)
}

func (r *Robot) LeftClick() {
	robotgo.Click("left")
	robotgo.MilliSleep(sleepMilli)
}

func (r *Robot) RightClick() {
	robotgo.Click("right")
	robotgo.MilliSleep(sleepMilli)
}

func (r *Robot) Type(text string) {
	robotgo.TypeStr(text)
	robotgo.MilliSleep(sleepMilli)
}

func (r *Robot) Key(key string) {
	key = strings.ToLower(key)
	robotgo.KeyTap(key)
	robotgo.MilliSleep(sleepMilli)
}

func (r *Robot) Screenshot() []byte {
	bit := robotgo.CaptureScreen(r.Bounds.Left, r.Bounds.Top, r.Bounds.Width, r.Bounds.Height)
	defer robotgo.FreeBitmap(bit)

	img := robotgo.ToImage(bit)
	resized := resize.Resize(uint(r.Bounds.Width), uint(r.Bounds.Height), img, resize.Lanczos3)

	w := new(bytes.Buffer)
	err := png.Encode(w, resized)
	if err != nil {
		return nil
	}
	return w.Bytes()
}

ミラーリングアプリの位置を指定し、それ以外の場所ではクリックやスクリーンショットを行わないように設定します。位置はスクリーンショットキー(Cmd+Shift+4)で確認できるので、それを利用します。

ソースコード

動作画面

結果

猫に「いいね」することができました。
可能性は広がりますが、危険性も高い利用法となります。
途中なかなかいい場所にクリックができなかったり、SNSの「いいね」はできないという安全上の返答もありました。
座っている猫を指定したのに、間違ってクリックして「この猫は立っていますね」と戻った場面では、エージェントの片鱗を感じました。
安全上の制限やベータでの精度も相まって完全な自動化は難しく、実用性は今の所低いと思いますが、今後、どれだけ改善していくかに注目です。

Discussion