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 on the Web - 公式ドキュメント
- Remote Control - 公式ドキュメント
- xUTPによるテストダブルの定義とその図解 - NTT Engineers' Blog
メタ情報
- ツール: Claude Code
- 関連技術: Claude Code, Remote Control, CLI, テスト, xUnit Test Patterns