最近、MacBook AirでDiscordに常駐させていたOpenClaw(AIエージェント)をRaspberry Pi 5に移行した。合わせてGmailの自動返信システムも整備したので、構成をまとめておく。

やったこと

1. OpenClawのDiscord接続をRPi5に移行

OpenClawはDiscord/Slack等のチャットに常駐するAIエージェントフレームワーク。もともとMacBookで動かしていたが、MacをスリープさせるたびにBotが落ちるのが不便だった。 RPi5(IP: Tailscale経由で接続)にOpenClawがすでに入っていたので、MacのOpenClaw設定からDiscordのBotトークンをコピーし、RPi側のOpenClawに設定。Mac側はDiscordを無効化して再起動することで、Bot接続をRPi5に完全移管した。

2. RPi5にgogcliをセットアップ

gogcliはGmail/Calendar/Drive等をCLIで操作できるGo製ツール。MacではHomebrewでインストールしていたが、RPi5(Debian Linux, arm64)にはHomebrewがないためソースからビルドした。

GoでCross-compile or RPi上でビルド

git clone https://github.com/steipete/gogcli cd gogcli go build -o ~/bin/gog ./cmd/gog
OAuth認証はヘッドレス環境のため工夫が必要だった。gog auth addを実行するとランダムポートでローカルサーバーを起動し、OAuth callbackを待つ。MacブラウザからアクセスできるようSSHポートフォワーディングを使い:
ssh -L :127.0.0.1: masaka@rpi5
Googleの認証後、認証コードを手動でトークンに交換してRPi側のキーリングに保存する方法を取った。 RPi5はヘッドレスでD-Busが動いていないため、gogのキーリングはファイルバックエンドを使用:
export GOG_KEYRING_BACKEND=file
export GOG_KEYRING_PASSWORD=

3. Gmail自動返信システムをRPi5で稼働

OpenClawのcronジョブ機能で5分ごとに未読メールをチェックし、AIが返信文を生成して自動送信するシステムを構築。 フロー: 1. gog gmail search "in:inbox is:unread" で未読メールを取得 2. メール本文を取得・要約・返信文生成 3. gog gmail send --reply-to-message-id で直接送信 4. gog gmail thread modify --remove=UNREAD で既読化 5. Discordに「返信済み」の報告 cronジョブはRPi5のOpenClaw上で動くため、Discordへの通知もRPi5が担当。Mac側のcronは無効化した。

構成まとめ

Discord
  ↕
RPi5 (OpenClaw)
  ├── Discord Bot(24時間稼働)
  ├── Cronジョブ: gmail-checker(5分おき)
  │     └── gog gmail → 未読検知 → AI返信生成 → 自動送信 → Discord報告
  └── ~/bin/gog(gogcli, ファイルキーリング認証)

MacBook Air ├── Discord: 無効 └── gmail-checker cron: 無効(RPiに移管済み)

ポイント

  • ヘッドレスLinuxでのOAuth:D-Busなし環境ではGOG_KEYRING_BACKEND=fileを使う
  • SSHポートフォワーディングでOAuth callback:RPiで起動したgog authのコールバックをMacブラウザで受け取る
  • OpenClawのcron機能:エージェントを定期実行するのに便利。--session isolatedでセッション分離できる
  • gog gmail send--reply-to-message-idで返信スレッドに乗せて送信できる
24時間稼働のAIメール自動返信が低コスト(RPi5の消費電力は数ワット)で実現できた。