コンテンツにスキップ

AI Session Notes - 2026-03-01

Claude Code のリモート関連機能

学んだこと

  • Claude Code には「リモート環境管理」と「Remote Control」という2つの異なるリモート機能がある
  • /remote-env はクラウド上のリモート環境(Claude Code on the Web)のデフォルト環境を選択・確認するコマンド
  • claude --remote "タスク" でターミナルからクラウド上でタスクを実行できる
  • claude --teleport で Web セッションをローカルに引き戻せる
  • Remote Control(2026年2月発表)は、ローカルで動作中の Claude Code セッションをスマホやブラウザからリモート操作する機能

詳細

リモート環境管理(Claude Code on the Web)

クラウドインフラ上でタスクを実行する仕組み。複数の環境(開発用・本番確認用など)を設定し、/remote-env で切り替えられる。

# デフォルト環境を選択
/remote-env

# クラウドでタスク実行
claude --remote "バグを修正して"

# Web セッションをローカルに引き戻す
claude --teleport

Remote Control

ローカル PC で動作中の Claude Code を、QR コード経由でスマホやブラウザから操作する機能。

  • ローカルのファイルシステム・環境変数・MCP サーバーはそのまま利用可能
  • ポートフォワーディングや VPN は不要(HTTPS 送信のみ)
  • ネットワーク切断や PC スリープ時も約10分以内なら自動再接続
  • 1インスタンスにつきリモートセッションは1つまで
  • ターミナルを閉じるとセッション終了
  • 2026年3月時点では Max プラン($100-200/月)で利用可能、Pro プランは近日対応予定

2つの機能の違い

機能 実行環境 ユースケース
リモート環境管理 クラウド上 ローカル環境なしでタスク実行
Remote Control ローカル PC 外出先からローカルセッションを操作

xUnit Test Patterns(xUTP)によるテストダブルの分類

学んだこと

  • テストダブルは xUTP の定義では モック・スパイ・スタブ・フェイク の4種類に分類される
  • SUT(System Under Test)= テスト対象、DOC(Depended-On Component)= SUT が依存するコンポーネント
  • 直接入出力(テスト ↔ SUT)と間接入出力(SUT ↔ DOC)を区別することが分類の基礎になる
  • 現場では「モック」と「スタブ」が混同されがちだが、xUTP では明確に区別されている

詳細

4種類のテストダブル

「注文サービス(SUT)が決済API(DOC)を呼び出す」というケースで例示する。

種類 目的
スタブ 間接入力を操作する(DOC → SUT の戻り値を制御) 決済APIが常に「成功」を返すようにする
モック 間接出力を検証する(SUT → DOC の呼び出しを検証) 正しい金額で決済APIが呼ばれたか確認
スパイ 間接出力を記録する(後から確認) 呼び出し履歴を記録して後でアサート
フェイク DOC の軽量な代替実装を提供する インメモリDBや簡易APIサーバ

スタブ — 決済APIの戻り値を制御して、SUT の挙動をテストする:

stub_gateway.charge(amount)  # → 常に "success" を返す

def test_order_completed_when_payment_succeeds():
    service = OrderService(gateway=stub_gateway)
    result = service.place_order(item, amount=1000)
    assert result.status == "completed"

モック — 事前に期待を設定し、SUT が DOC を正しく呼んだか検証する:

mock_gateway = Mock()
mock_gateway.expect_call("charge", with_args=1000)

service = OrderService(gateway=mock_gateway)
service.place_order(item, amount=1000)
mock_gateway.verify()  # モック自身が合否を判定

スパイ — 呼び出しを記録しておき、テストコードが後から検証する:

class SpyGateway:
    def __init__(self):
        self.calls = []
    def charge(self, amount):
        self.calls.append(amount)
        return "success"

def test_order_calls_payment():
    spy = SpyGateway()
    service = OrderService(gateway=spy)
    service.place_order(item, amount=1000)
    assert spy.calls == [1000]  # テストコードが後から判定

フェイク — 本物の代わりに動く軽量な実装:

class FakeGateway:
    def charge(self, amount):
        if amount > 10000:
            return "declined"
        return "success"

モックとスパイの違い

両者とも「間接出力」(SUT → DOC への呼び出し)に関心があるが、検証の仕方が異なる。

モック スパイ
検証する主体 モックオブジェクト自身 テストコード
検証のタイミング 事前に期待を宣言 事後に記録を確認
想定外の呼び出し 即失敗しうる 記録するだけ

現代のテストライブラリ(pytest-mock, Jest など)では両者の境界が曖昧になっており、実務上は厳密に区別しないことも多い。xUTP はあくまで「概念として区別できる」という整理。

参考リンク

メタ情報

  • ツール: Claude Code
  • 関連技術: Claude Code, Remote Control, CLI, テスト, xUnit Test Patterns