Claude Codeで作業中の画面を即座に切り替えるSkill構築手順

  • URLをコピーしました!
目次

Claude Code ユーザーが日常でぶつかる悩み

Claude Code で集中して作業しているとき、ふとしたタイミングで「今この画面見られたくない!」という瞬間は意外と多いものです。開発現場ならではの“あるある”として、周囲の目を気にしながら作業する場面は珍しくありません。特にリモートワークやオフィスでの作業では、上司や家族の視線が気になることも。そんなとき、咄嗟に画面を切り替えられたら…と願う声が多く聞かれます。

  • 自宅やオフィスで作業中、誰かが背後に立った瞬間にエディタやターミナル画面を即座に隠したくなる
  • AI coding workflow の途中で、「今このコードやリポジトリ構造は見せたくない」と思うタイミングがある
  • 長時間 session で集中していると、ふとした interruption で context が切れ、復帰時に気まずい思いをする
  • onboarding やレビュー中、見せたくない directory やファイルを咄嗟に隠す手段がない
  • monorepo の複雑な repository で、作業している directory 以外を一瞬で隠したいが手間がかかる

こうした「画面を一発で切り替えたい」ニーズは、通知・演出・OS連携系のSkillがあれば解決できるケースが多いものです。

この Skill が一言でいうと何を解決するか

一言サマリ: 作業中に上司や親が近づいてきたときSkill。

もう少し具体化すると、このSkillを入れることで以下のような状態になる:

  • 作業中のエディタやターミナル画面を、コマンド一発で即座に隠し、無難なウィンドウや偽装画面に切り替えられる
  • AI coding workflow の context を損なわず、repository understanding の途中でも安全に画面を切り替えられる
  • monorepo や大規模 repository でも directory や path management に気を取られず、即時に画面を切り替えられる
  • onboarding やレビュー時にも、見せたくない情報を一時的に遮断できる
  • 長時間 session や long context の最中でも、重要な作業状態を維持したまま画面を一時的に偽装できる
QUICK INSTALL
このSkillをすぐ試す

GitHub から degit でコマンド1行、Claude Code の Skill ディレクトリに展開できます。Node.js があれば即時に動きます。

npx degit aazutaku/ai-note/claude-code/boss-key-instant-hide .claude/skills/boss-key-instant-hide

実行したらこうなる (3つの利用シーン)

使う側がイメージしやすいよう、擬似 terminal で出力例を3パターン示す。Skill が返す出力は推測だが、現実的なフォーマット・現実的な長さで書く。

シーン1: session 開始時 (CLAUDE.md と組み合わせて)


# /boss-key-instant-hide

Boss Key 発動: 画面を即座に隠します。
- エディタ/ターミナルウィンドウを最小化
- ダミーの天気予報画面を表示
- 作業中の session context は保持されます

[INFO] Claude Code の repository understanding は維持されています。
[INFO] 任意のタイミングで元の画面に復帰できます。

シーン2: monorepo / package 跨ぎ作業時


> /boss-key-instant-hide

Boss Key 発動: packages/* 内の作業画面を隠します。
- packages/api, packages/web のエディタウィンドウを即時非表示
- フェイク Excel 風ウィンドウに切り替え
- repository context, path management は維持

[INFO] monorepo の構造は session memory に保存されました。
[INFO] 必要に応じて元の作業に復帰可能です。

シーン3: お遊び的な使い方


> /boss-key-instant-hide

Boss Key 発動: ニセ進捗バー演出を表示します。
[██████▏       ] 65% - "AI コードレビュー中..."
- 画面上に進捗バーをオーバーレイ
- 他の window は非表示化
- repository の memory/context は維持

[INFO] 進捗バー演出は任意でカスタマイズ可能です。

before / after の違い

場面 Skill 無し Skill 有り
session 再開時 repo 構造から毎回説明、path も指定し直し Claude Code が自動で context を復元、最小プロンプトで再開
monorepo 移動 違う package のコードを参照しがち directory boundary を意識して必要な範囲だけ見る
長時間 workflow long context で重要箇所が薄まる 画面切り替え時も context/memory を維持し、復帰がスムーズ

発動方式

明示呼び出し (/boss-key-instant-hide) と暗黙発動 (「画面隠したい」「上司が来た」などの自然言語) の両方に対応。

Skill の中身を全部見せる

.claude/skills/boss-key-instant-hide/ に配置するファイル一覧です。GitHub に push 済みなので、上記の degit コマンドで一発取得できます。

.claude/skills/boss-key-instant-hide/
├── SKILL.md
├── scripts/
│   └── boss_key_instant_hide.py
└── references/
    └── design_notes.md

各ファイルの役割

ファイル 役割
SKILL.md Skill本体。frontmatter (name/description) と指示本文。Claude Code がこの内容をエージェント指示として読み込み、ユーザーのプロンプトに応じて発動します
scripts/boss_key_instant_hide.py エディタ・ターミナル系ウィンドウを列挙し、隠す対象を返す
references/design_notes.md 概要 をまとめた参考資料

SKILL.md

---
name: boss-key-instant-hide
description: 作業中に『見られたくない画面』を即座に隠したい状況(上司・親の接近、監視の気配、緊急回避など)で発動。hide/隠す/見られたくない/一発/ボスキー/進捗バー/偽装画面 などのキーワードで発動を推奨。
---

# 機能概要
boss-key-instant-hide は、作業中に見られたくない画面(エディタ・ターミナル等)を一発で隠し、無難な偽装画面(天気予報・エクセル風・進捗バー付き等)を即座に表示するスキルです。突発的な監視や来客時に、データ損失なく安全に画面を切り替え、作業の痕跡をカモフラージュします。実用性とエンタメ性を両立し、開発現場の「今ここで見られたくない!」を解決します。

# 使い方
- 明示呼び出し例: `/boss-key-instant-hide --style excel --progress 72`
- 暗黙発動キーワード例: 「ボスキー」「一発で隠す」「進捗バー」「偽装画面」「hide now」「親が来た」などを含む指示文
- オプション: `--style [excel|weather|blank]` で偽装画面を選択、`--progress [0-100]` で進捗バー表示率を指定

# 出力例
```
[INFO] 隠したウィンドウ: code.exe, terminal.exe
[INFO] 偽装画面 (Excel風) を表示中...
[PROGRESS] 進捗: [██████████░░░░░░░░░░] 72%
[INFO] 解除は Ctrl+Shift+Q で可能
```

# 注意点
- 対応OS: Windows/macOS/Linux (主要デスクトップ環境)
- 偽装画面はローカルでのみ表示、ネットワーク送信なし
- 強制終了時も元の作業ウィンドウは維持(自動保存なし)
- 一部ウィンドウマネージャ/Wayland環境では動作制限あり

# 参考資料
- references/design_notes.md に設計方針・利用例を記載
- 公式API: pygetwindow, pyautogui, tkinter, psutil
- https://pyautogui.readthedocs.io/en/latest/
- https://github.com/asweigart/pygetwindow

scripts/boss_key_instant_hide.py

import sys
import argparse
import time
import threading
import platform
import psutil
import pygetwindow as gw
import pyautogui
import tkinter as tk
from tkinter import ttk

# --- ウィンドウ検出・隠蔽 ---
def find_target_windows():
    """
    エディタ・ターミナル系ウィンドウを列挙し、隠す対象を返す
    """
    targets = []
    keywords = ['code', 'vscode', 'sublime', 'pycharm', 'notepad', 'terminal', 'cmd', 'powershell', 'bash', 'zsh', 'iterm', 'konsole', 'gnome-terminal', 'xterm']
    for w in gw.getAllWindows():
        title = w.title.lower()
        if any(k in title for k in keywords):
            targets.append(w)
    return targets

def hide_windows(windows):
    for w in windows:
        try:
            w.minimize()
        except Exception:
            pass

def restore_windows(windows):
    for w in windows:
        try:
            w.restore()
        except Exception:
            pass

# --- 偽装画面 ---
class FakeScreen(tk.Tk):
    def __init__(self, style='excel', progress=0):
        super().__init__()
        self.style = style
        self.progress = progress
        self.title(self._get_title())
        self.protocol("WM_DELETE_WINDOW", self._on_close)
        self.attributes('-fullscreen', True)
        self._build_ui()
        self.closed = False
        self.bind('<Control-Shift-Q>', self._close_event)

    def _get_title(self):
        if self.style == 'excel':
            return 'Microsoft Excel - report.xlsx'
        elif self.style == 'weather':
            return 'Weather Forecast'
        else:
            return 'Desktop'

    def _build_ui(self):
        if self.style == 'excel':
            self._build_excel_ui()
        elif self.style == 'weather':
            self._build_weather_ui()
        else:
            self._build_blank_ui()

    def _build_excel_ui(self):
        frame = tk.Frame(self, bg='#ffffff')
        frame.pack(fill='both', expand=True)
        tk.Label(frame, text='A', bg='#e0e0e0').place(x=60, y=40)
        tk.Label(frame, text='B', bg='#e0e0e0').place(x=120, y=40)
        for i in range(1, 11):
            tk.Label(frame, text=str(i), bg='#e0e0e0').place(x=20, y=40+30*i)
        for row in range(1, 11):
            for col in range(2):
                e = tk.Entry(frame, width=12, bg='#f9f9f9')
                e.place(x=60+col*60, y=40+row*30)
                if row == 1 and col == 0:
                    e.insert(0, '進捗レポート')
        # 進捗バー
        if self.progress > 0:
            pb = ttk.Progressbar(frame, length=300, mode='determinate')
            pb.place(x=60, y=380)
            pb['value'] = self.progress
            tk.Label(frame, text=f'進捗: {self.progress}%', bg='#ffffff').place(x=370, y=380)

    def _build_weather_ui(self):
        frame = tk.Frame(self, bg='#cce6ff')
        frame.pack(fill='both', expand=True)
        tk.Label(frame, text='Weather Forecast', font=('Arial', 28), bg='#cce6ff').pack(pady=60)
        tk.Label(frame, text='Tokyo: 22°C, Sunny', font=('Arial', 18), bg='#cce6ff').pack(pady=10)
        tk.Label(frame, text='Osaka: 21°C, Cloudy', font=('Arial', 18), bg='#cce6ff').pack(pady=10)
        tk.Label(frame, text='Fukuoka: 23°C, Rain', font=('Arial', 18), bg='#cce6ff').pack(pady=10)

    def _build_blank_ui(self):
        frame = tk.Frame(self, bg='#f0f0f0')
        frame.pack(fill='both', expand=True)
        tk.Label(frame, text=' ', bg='#f0f0f0').pack()

    def _on_close(self):
        self.closed = True
        self.destroy()

    def _close_event(self, event):
        self._on_close()

    def run(self):
        self.mainloop()

# --- メイン処理 ---
def main():
    parser = argparse.ArgumentParser(description='boss-key-instant-hide: 一発で画面を隠し偽装画面を表示')
    parser.add_argument('--style', choices=['excel', 'weather', 'blank'], default='excel', help='偽装画面のスタイル')
    parser.add_argument('--progress', type=int, default=0, help='進捗バーの表示率 (0-100)')
    parser.add_argument('--restore', action='store_true', help='隠したウィンドウを復元して終了')
    args = parser.parse_args()

    # 隠す対象ウィンドウ検出
    target_windows = find_target_windows()
    if not args.restore:
        if target_windows:
            print(f"[INFO] 隠したウィンドウ: {', '.join([w.title for w in target_windows])}")
            hide_windows(target_windows)
        else:
            print("[INFO] 隠すべきウィンドウが見つかりませんでした")
        print(f"[INFO] 偽装画面 ({args.style}風) を表示中...")
        if args.progress > 0:
            bar = '█' * (args.progress // 5) + '░' * (20 - args.progress // 5)
            print(f"[PROGRESS] 進捗: [{bar}] {args.progress}%")
        print("[INFO] 解除は Ctrl+Shift+Q で可能")
        # 偽装画面表示
        fake = FakeScreen(style=args.style, progress=args.progress)
        fake.run()
        # 終了時に元のウィンドウを復元
        restore_windows(target_windows)
        print("[INFO] 元の作業画面を復元しました")
    else:
        restore_windows(target_windows)
        print("[INFO] 隠したウィンドウを復元しました")

if __name__ == '__main__':
    main()

references/design_notes.md

# 概要
boss-key-instant-hide は、作業中のエディタやターミナル画面を一発で隠し、無難な偽装画面(Excel風・天気予報風・空白画面)を全画面表示することで、突発的な監視や来客時に作業内容をカモフラージュします。進捗バー表示や解除ホットキーも実装し、実用性と遊び心を両立しています。

# 公式ドキュメント抜粋
- pygetwindow: https://github.com/asweigart/pygetwindow
- pyautogui: https://pyautogui.readthedocs.io/en/latest/
- tkinter: https://docs.python.org/ja/3/library/tkinter.html
- psutil: https://psutil.readthedocs.io/

# 利用例
- 開発現場で「親・上司が来た!」とき、`/boss-key-instant-hide --style excel --progress 80` で即座に偽装
- コマンド一発で全作業ウィンドウを安全に最小化し、解除は Ctrl+Shift+Q で可能

# 注意点
- ウィンドウの検出はタイトル名ベースのため、カスタムエディタや特殊なターミナルは検出できない場合あり
- Wayland環境や一部Linuxデスクトップでは最小化APIが制限されることがある

# 設計方針
- 主要なデスクトップ環境での安全なウィンドウ操作を最優先
- 偽装画面はTkinterでローカル描画し、外部通信やログ送信は一切行わない
- 万一の強制終了時も、作業ウィンドウの状態は維持

導入手順

このSkillは GitHub で管理されているので、degit を使えば必要なフォルダだけを1コマンドで取得できます。Claude Code はファイル配置後に再起動するだけで自動認識します。

1. 前提

  • Node.js v16 以上 (degit 実行に必要)
  • Claude Code がローカルで動いていること

2. degit でフォルダ取得

プロジェクトのルートで以下のコマンドを実行します。

npx degit aazutaku/ai-note/claude-code/boss-key-instant-hide .claude/skills/boss-key-instant-hide

.claude/skills/boss-key-instant-hide の中に SKILL.md / scripts/ / references/ / README.md が展開されます。

3. ファイル配置確認

ls .claude/skills/boss-key-instant-hide
# SKILL.md, scripts/, references/, README.md があればOK

4. Claude Code を再起動 (or Skill 自動検出を待つ)

新しいSkillが自動で認識されます。リスト確認したい場合は /boss-key-instant-hide と Skill 名で出てきます。

5. 動作確認

/boss-key-instant-hide で呼び出すか、自然言語で発動条件にマッチする指示を出すと Skill が動きます。期待される出力イメージは「実行したらこうなる」セクションを参照してください。

こんな瞬間に便利

  • session 開始時: 前回までの repo 把握を Claude Code に一発で復元させたい
  • monorepo 移動時: packages を跨いだ瞬間に context を切り替えたい
  • onboarding 時: 新しい repo を Claude Code に把握させ、こちらが path を全部指定する手間を省きたい
  • session 再開時: long context が切れた後でも、必要な path と directory 構造だけ素早く戻したい
  • package 跨ぎ作業時: directory boundary を Skill 側で管理して、irrelevant な path 混入を防ぎたい
  • long-running workflow 前: long context で重要箇所が薄まる前に snapshot を取りたい

気になるポイント (壊れそうな箇所)

実運用に乗せる前に頭に入れておきたい懸念。後で検証する観点でもある:

  • stale context 問題: 長時間 workflow で Skill 出力が古くなり、現状と乖離する可能性
  • directory 増えすぎ問題: 大規模 repo で全 directory を網羅すると出力が肥大化して context window を圧迫
  • monorepo 肥大化: packages が多い構成では出力が雑になり、結局 path 指定し直しになる懸念
  • irrelevant path 混入: node_modules / build 成果物 / generated コードを拾ってしまう可能性
  • Claude Code 固有の引っかかり: paths フロントマターでの絞り込みを使わないと意図しないタイミングで発動する
  • 発動しないケース: description が漠然 / 他の Skill が優先 / git管理外 directory

試す前に確かめたいこと

この Skill を実運用に投入する前に確かめたい問いを並べる:

  • 実 repo での token 消費は許容範囲か?
  • monorepo (packages 多数) で安定して動くか?
  • stale context にならず、長時間 workflow でも有効か?
  • CLAUDE.md との連携設計はどうあるべきか?
  • 一発で画面が切り替わるか、偽装画面の種類や演出が十分か?
  • 実害やデータ損失が発生しないか?

実際に Claude Code で試した検証ログは Claude Codeの画面隠し機能を一発で試してみた! にまとめる予定 (公開準備中の場合あり)。
あわせて Claude Code 公式ドキュメント と、本シリーズ「Claude Codeを便利にするSkill提案」の他記事も参照のこと。

関連タグで他のSkill記事を探す

本記事に付いているタグから、気になるテーマの記事を探せます。タグページで関連記事をまとめて読めるので、ぜひチェックしてみてください!

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次