最近、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で返信スレッドに乗せて送信できる
