火曜日, 7月 15, 2025
火曜日, 7月 15, 2025
- Advertisment -
ホームニューステックニュースお風呂駆動開発 w/ claude-code, Termius, and ntfy

お風呂駆動開発 w/ claude-code, Termius, and ntfy


はじめに

Claude Codeがタスクをこなしている間、ずっとMacの前で待機しているのは時間の無駄だと感じたことはありませんか?そんな時間を有効活用して、リラックスしながら開発を進める「お風呂駆動開発」をご紹介します。

この記事では、macOS/iOSユーザーを対象に、Claude Code、ntfy、Termiusを組み合わせて、家中のどこからでもローカルネットワーク経由で開発タスクの進行状況を把握し、次の指示を出せる環境を構築する方法を解説します。

お風呂駆動開発とは

お風呂駆動開発(Bath-Driven Development、BDD)は、Claude Code君が頑張っている間に、人間がお風呂でリラックスタイムを楽しみながら効率的に作業を進める開発手法です。主な特徴は以下の通りです:

  • 非同期的な作業管理: タスクの完了を通知で受け取る
  • リモートアクセス: iPhoneから開発環境にアクセス
  • マルチタスキング: リラックスしながら次のタスクを準備

必要なツールのセットアップ

Claude Code

Claude Pro もしくは Maxプランに登録後、Claude Codeをインストールしましょう。
Hooksを使用するので最低でも1.0.38が必要ですが、それ以降のバージョンでもいくつかHooksへの修正が入っているため、最新版への更新をおすすめします。

npm install -g @anthropic-ai/claude-code

https://docs.anthropic.com/ja/docs/claude-code/overview

Termius

TermiusはiOS/iPadOSで利用可能な優れたSSHクライアントアプリです。無料でダウンロードできます。

https://termius.com/

https://apps.apple.com/jp/app/termius-modern-ssh-client/id549039908

iPhoneからmacにssh接続するために、設定をしていきましょう。

macOSでのSSHサーバー設定

macOSでSSHサーバーを有効にする手順:

  1. システム設定から有効化

    システム設定 > 一般 > 共有 > リモートログイン をオン
    
  2. コマンドラインから有効化(代替方法):

    sudo systemsetup -setremotelogin on
    
  3. SSHサーバーの状態確認

    sudo systemsetup -getremotelogin
    
  4. Macがスリープしないように設定
    長時間のタスク実行中にMacがスリープしないよう、以下のコマンドを実行します:

    方法1: caffeinateコマンドを使用
    
    caffeinate
    
    
    caffeinate -t 7200
    
    方法2: システム設定から設定
      システム設定 > バッテリー > 電源アダプタ使用時 > 
     「ディスプレイがオフの時にコンピュータを自動でスリープさせない」をオン
    

Termiusのローカルネットワーク接続を許可する

Termius側で接続を許可していない場合、仮にiPhoneとMacが同じネットワークにいても疎通ができません。予め許可していることを確認しておきましょう。

接続先マシンのローカルIPを確認する

例:

※環境によって正確な取得方法は異なります。

Termiusに接続先情報を登録

ローカルネットワークのmacに接続する場合であれば、以下の3つの情報で接続できます。

  • ローカルIPアドレス
  • macのユーザー名
  • macにログインするときのパスワード

ターミナルに接続


ターミナルが現れる

ntfy

ntfyは、シンプルなプッシュ通知サービスです。curlコマンドだけで簡単に通知を送信でき、webやモバイルアプリなどで通知を受信できます。
iOSアプリをインストールし、topicをサブスクライブしたあと、curlで簡単なメッセージを送信してみましょう。

https://ntfy.sh/

https://apps.apple.com/us/app/ntfy/id1625396347

topicのサブスクライブ

メッセージの送信


curl -d "ビルドが完了しました!" ntfy.sh/mybathtopic


curl -H "Title: ビルド完了" -H "Priority: high" -d "詳細なメッセージ" ntfy.sh/mybathtopic

ntfy app
実際にntfyのiOSアプリでメッセージを受信した様子

Claude Code Hooksでタスク完了通知を実装

基本的なhooksの設定

Claude Codeでは、settings.jsonファイルでhooksを設定することで、タスクの完了時に自動的にntfyへ通知を送信できます。ここでは ~/.claude/ 配下に簡単なShellスクリプトを作成して、 ~/.claude/settings.json で実行させるようにしましょう。

{
  "hooks": {
    "Stop": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": ""
          }
        ]
      }
    ]
  }
}

hooksで利用するスクリプトの作成

手順






DEFAULT_TOPIC_NAME="your-topic-name-D615CCC1-8C83-450C-9DF9-8044F234A296"


TOPIC_NAME="${NTFY_TOPIC:-$DEFAULT_TOPIC_NAME}"


TRANSCRIPT=$(jq -r .transcript_path)


LATEST_MSG=$(tail -1 "$TRANSCRIPT" | jq -r '.message.content[0].text // empty')


USER_MSG=""
while IFS= read -r line; do
  TYPE=$(echo "$line" | jq -r '.type // empty')
  if [ "$TYPE" = "user" ]; then
    ROLE=$(echo "$line" | jq -r '.message.role // empty')
    if [ "$ROLE" = "user" ]; then
      CONTENT=$(echo "$line" | jq -r '.message.content // empty')
      
      if [ -n "$CONTENT" ] && [ "${CONTENT:0:1}" != "[" ]; then
        USER_MSG="$CONTENT"
        break
      fi
    fi
  fi
done  (tac "$TRANSCRIPT")


if [ -n "$LATEST_MSG" ]; then
  echo "$LATEST_MSG" | sed 's/^/ /' | head -c 500 | \
  curl -H "Title: ${USER_MSG:0:100}" -d @- "ntfy.sh/${TOPIC_NAME}"
fi
sudo chmod +x ~/.claude/ntfy.sh 

最後に、 settings.json を編集して、タスクが終了したタイミングで ntfy.sh を実行させるようにします。

{
  "hooks": {
    "Stop": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/ntfy.sh"
          }
        ]
      }
    ]
  }
}

適当な会話をして試してみる

タイトル付きで、作業結果が通知されます!


ntfyで通知が来る!

実践例:お風呂タイムの有効活用

実際のワークフローの例:

  1. お風呂に入る前

    
    caffeinate
    
    claude "src/ディレクトリ全体の単体テストを書いて"
    
  2. お風呂で

    • iPhoneでntfyの通知を確認
    • Terminusで開発機に入り、 claude --resume で該当のセッションに入る
    • 必要に応じて複数タブを開き、test実行やlint, format実行を行う
    • 結果を確認し、claude-codeに次の指示を出す
  3. お風呂上がり

    • 書斎のmacで引き続き作業続行

トラブルシューティング

通知が届かない場合

  1. ntfyのトピック名が正しいか確認(ntfy.sh内のTOPIC_NAMEを実際のトピック名に変更)
  2. jqコマンドがインストールされているか確認:
  3. Claude Codeの設定ファイルが正しく読み込まれているか確認

まとめ

今回ご紹介したお風呂駆動開発では、お風呂の中で通知を受け取り、claude codeに指示が出せる手法をご紹介しました。
あくまで基礎的な内容しか載せていないので、セキュリティ的に脆い部分や使い勝手の悪い部分もあります。各設定をカスタマイズするなどして応用していただければと思います。
例えば、

  • projectごとに TOPIC_NAME を分けて通知先を変える
  • Tailscaleを使用して、家の外からでもssh接続する
  • ntfyのメッセージでemojiやpriorityを活用する
  • Claude Codeの報告を別のAIで要約してからntfyに投げる

などです。

それでは、良いお風呂駆動開発を!



Source link

Views: 0

RELATED ARTICLES

返事を書く

あなたのコメントを入力してください。
ここにあなたの名前を入力してください

- Advertisment -