mcpField
A
adb

adb

github.com/morphet81エージェントワークフロー098 回インストール24 週間前に更新
リポジトリ

adb について

adb は、Android Debug Bridge で Android 端末やエミュレーターを操作するエージェントスキルです。画面の撮影、操作、結果確認を繰り返して指定されたタスクを進め、接続や画面の問題にも対処します。

主な機能

  1. 01ADB による端末接続の確認
  2. 02画面撮影と状態の分析
  3. 03タップ、スワイプ、文字入力
  4. 04UI ダンプによる要素確認
  5. 05操作結果の検証とエラー対応

活用シーン

  1. 01設定を開いて端末の項目を変更
  2. 02Android アプリ内で画面操作を実行
  3. 03ダイアログや読み込み中の画面に対処

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/morphet81/cheat-sheets --skill adb

インストール後、Claude Code で/adbを入力して読み込まれたか確認します。

詳細

ADB コマンドを使って Android デバイスまたはエミュレーターを操作し、ユーザーが定義したミッションを達成します。ミッションが完了するまで、スクリーンショット・操作・確認のループを繰り返します。

使用方法:

  • /adb <mission> — デバイスで実行したい内容を説明します(例:「設定を開いてダークモードを有効にする」)

前提条件:

  • adb が PATH に含まれている必要があります
  • デバイスまたはエミュレーターが接続されている必要があります

手順:

  1. ADB の接続を確認する:

    • adb devices を実行し、少なくとも 1 台のデバイスが表示されることを確認します(「unauthorized」ではないこと)
    • デバイスが見つからない場合は、ユーザーに伝えて停止します
    • 複数のデバイスが見つかった場合は、AskUserQuestion を使って対象のデバイスを確認し、その後のすべての adb コマンドに -s <serial> を渡します
  2. ミッションを理解する:

    • $ARGUMENTS をミッションの説明として解析します
    • $ARGUMENTS が空の場合は、デバイスで何を達成したいかを AskUserQuestion でユーザーに確認します
    • ミッションを、想定される手順のチェックリストに頭の中で分解します(これは出力しません。自分の計画にのみ使います)
  3. スクリーンショット・操作・確認のループに入る:

    ミッションが完了するか、達成できないと判断するまで、次のサイクルを繰り返します。

    a) スクリーンショットを撮る:

    mkdir -p .tmp && adb exec-out screencap -p > .tmp/screen.png
    
    • Read ツールでスクリーンショットを読み取り、現在の画面状態を把握します

    b) 画面を分析する:

    • 現在表示されているアプリや画面を特定します
    • どの UI 要素(ボタン、テキストフィールド、トグル、リストなど)が表示されているかを確認します
    • ミッションの目標に対する進捗を評価します
    • 画面が不明瞭な場合や UI 要素ツリーの詳細が必要な場合は、UI ダンプを実行します:
      adb shell uiautomator dump /sdcard/ui.xml && adb pull /sdcard/ui.xml .tmp/ui.xml
      
      次に .tmp/ui.xml を読み取り、要素の境界、テキスト、リソース ID を確認して、タップする正確な座標を特定します。

    c) 次の操作を決定して実行する:

    次の ADB コマンドを 1 つ以上使います。

    操作コマンド
    座標をタップadb shell input tap <x> <y>
    スワイプadb shell input swipe <x1> <y1> <x2> <y2> [duration_ms]
    テキストを入力adb shell input text "<text>"
    戻るボタンを押すadb shell input keyevent 4
    ホームボタンを押すadb shell input keyevent 3
    Enter キーを押すadb shell input keyevent 66
    最近使ったアプリを表示adb shell input keyevent 187
    アプリを起動adb shell am start -n <package>/<activity>
    URL を開くadb shell am start -a android.intent.action.VIEW -d "<url>"
    長押しadb shell input swipe <x> <y> <x> <y> 1000

    座標に関するヒント:

    • UI 要素をタップする場合は、スクリーンショットまたは UI ダンプの bounds 属性を基に、その中央を狙います(例:境界 [0,200][1080,350] → 540,275 をタップ)
    • 下にスクロールするには、画面の下から 3 分の 1 の位置から上から 3 分の 1 の位置までスワイプします(例:adb shell input swipe 540 1500 540 500 300)
    • テキストを入力する場合は、先にフィールドをタップし、少し待ってから入力します

    d) 待機して確認する:

    • 各操作の後、UI が落ち着くまで少し待ちます(sleep 1)
    • 操作が期待どおりの効果をもたらしたか確認するため、もう一度スクリーンショットを撮ります
    • 操作が期待どおりに機能しなかった場合(例:別の要素をタップした、ダイアログが表示された、画面が変わらなかった)は、調整して再試行します
    • 同じ失敗した操作を 2 回を超えて再試行しないでください — 失敗が続く場合は、別の方法(座標の変更、別のナビゲーション経路、UI ダンプを使った正確な境界の確認)を試します
  4. よくある状況に対処する:

    • 画面を覆うキーボード: 入力後、確認用のスクリーンショットを撮る前に、Back(keyevent 4)を押してキーボードを閉じます
    • ダイアログ/ポップアップ: 予期しないダイアログが表示された場合は、内容を確認し、ミッションに照らして適切に閉じます(「OK」「許可」「拒否」などをタップします)
    • 読み込み画面: 画面が読み込み中の場合は、2〜3秒待ってからスクリーンショットをもう一度撮ります
    • アプリがインストールされていない: 対象のアプリが見つからない場合は、ユーザーに伝えて停止します
    • 権限の確認: ミッションに必要な権限は許可し(「許可」をタップ)、関係のない権限は拒否します
    • 画面がロックされている: デバイスにロック画面が表示されている場合は、上にスワイプして(adb shell input swipe 540 1800 540 800)ロック解除を試みます。PIN/パスワードが必要な場合は、ユーザーに確認します
  5. 問題が発生した場合は logcat を確認します:

    • アプリがクラッシュしたり、予期しない動作をしたりした場合は、直近のログを確認します:
      adb logcat -d -t 50
      
    • ログを使って何が起きたかを把握し、問題を解決できない場合はユーザーに伝えます
  6. ミッションの完了:

    • ミッションの目標を達成したら、確認用に最後のスクリーンショットを撮ります
    • 簡単な概要を添えて、最後のスクリーンショットをユーザーに提示します:
      ## ミッション完了
      
      <達成した内容の説明>
      
      最終状態:<現在画面に表示されている内容>
      実行した操作:<手順数>
      
  7. クリーンアップ:

    • 一時ファイルを削除します:
      rm -f .tmp/screen.png .tmp/ui.xml
      

例外的なケース

  • adb が PATH に見つからない場合は、セットアップ手順を表示して停止します
  • ミッション中にデバイスが切断された場合は、adb devices を実行して確認します。切断されている場合はユーザーに伝えて停止します
  • ミッションでアプリのインストールが必要な場合は、続行する前にユーザーに APK のパスまたはパッケージ名を確認します
  • 同じ画面のまま3回試しても進めない場合は、UI ダンプを取得して状況を再評価し、まったく別の方法を試します。それでも進めない場合は、ユーザーに伝えて指示を仰ぎます
  • 画面解像度が不明な場合は、最初のスクリーンショットのサイズから確認するか、adb shell wm size を実行します

コメント