川島商店街のランダムウォーカー

リーマンショック以前個別株で痛手を負ったアラフォーがインデックス投資を行う。備忘録的なブログ

Raspberry Pi 4 + Claude Code + Discord でメモ蓄積システムを作る

はじめに

Claude Pro を契約したので、Claude Code を使って GitHub プライベートリポジトリにメモを蓄積する仕組みを作った。
Raspberry Pi 4 をバックエンドにすることで、外出先からスマホやPCのDiscordから「メモして」と話しかけるだけでGitHubに保存される環境が完成した。

システム構成

メモシステム構成

ポイントは Raspberry Pi から外向きに接続するだけで動くこと。ポート開放もVPNも不要。

必要なもの

  • Raspberry Pi 4(常時稼働しているもの)
  • Claude Pro アカウント
  • GitHub アカウント
  • Discord アカウント

手順

1. GitHub にプライベートリポジトリを作成

memo という名前でプライベートリポジトリを作成。READMEだけの状態でOK。

2. Raspberry Pi に Claude Code をインストール

curl -fsSL https://claude.ai/install.sh | bash
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
claude --version

3. Claude Code にログイン

claude

ブラウザで認証コードを取得して貼り付ける。Claude Pro アカウントでログインする。

4. Personal Access Token を作成

GitHub にHTTPSでアクセスするためのトークンを作成。

  1. GitHub → Settings → Developer settings → Personal access tokens → Fine-grained tokens
  2. Repository access: Only select repositories → memo を選択
  3. Permissions → Repository permissions → Contents: Read and write
  4. Generate token してトークンをコピー(一度しか表示されないので注意)

5. リポジトリをクローン

git clone https://github.com/<username>/memo.git ~/memo
cd ~/memo

ユーザー名とパスワードを聞かれたら、パスワードに先ほどのトークンを貼り付ける。

6. リポジトリ構造を整備

memo/
├── CLAUDE.md      # Claudeへの指示書
├── memos/         # 個別メモ(YYYY-MM/YYYY-MM-DD-slug.md)
└── summaries/     # サマリー

CLAUDE.md にメモの保存ルール(ファイル名規則、front matter、コミットメッセージ形式など)を書いておく。

7. Bun をインストール(Channelsプラグインに必要)

curl -fsSL https://bun.sh/install | bash
source ~/.bashrc

8. SSH known_hosts の準備

ssh-keyscan github.com >> ~/.ssh/known_hosts

これがないとプラグインのマーケットプレース追加でエラーになる。

9. Discord プラグインをインストール

Claude Code 内で:

/plugin marketplace add anthropics/claude-plugins-official
/plugin install discord@claude-plugins-official
/reload-plugins

10. Discord Bot を作成

  1. https://discord.com/developers/applications を開く
  2. New Application → 名前をつける(例:MemoBot
  3. Bot セクション → Reset Token → トークンをコピー
  4. Privileged Gateway IntentsMessage Content Intent を ON

11. Discord サーバーを作成しBotを招待

  1. ボタン → サーバー作成
  2. Developer Portal → 作成したアプリ → OAuth2 → URL Generator
  3. Scopes: bot、Bot Permissions: Send Messages
  4. 生成URLをブラウザで開いて自分のサーバーに招待

12. Bot トークンを Claude Code に設定

Claude Code 内で:

/discord:configure <Botトークン>

13. Channels モードで Claude Code を再起動

claude --channels plugin:discord@claude-plugins-official

--channels フラグつきで起動しないと Discord 連携が動かない。

14. ペアリング

Discord で自分のサーバーのメンバーリストから Bot にDMを送る → ペアリングコードが返ってくる。

Claude Code 内で:

/discord:access pair <コード>

15. allowlist モードに固定

/discord:access policy allowlist

これで毎回ペアリングを求められなくなる。

16. systemd サービスとして自動起動設定

ラズパイ再起動後も自動で起動するよう /etc/systemd/system/claude-memo.service を作成する。tmux を使って疑似ターミナルを提供するのがポイント。

[Unit]
Description=Claude Code Discord Channels
After=network-online.target
Wants=network-online.target

[Service]
Type=forking
User=naka
WorkingDirectory=/home/naka/memo
ExecStart=/usr/bin/tmux new-session -d -s claude-memo '/home/naka/.local/bin/claude --channels plugin:discord@claude-plugins-official'
ExecStop=/usr/bin/tmux kill-session -t claude-memo
Restart=on-failure
RestartSec=10
Environment=PATH=/home/naka/.bun/bin:/home/naka/.local/bin:/usr/local/bin:/usr/bin:/bin
Environment=HOME=/home/naka

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable claude-memo
sudo systemctl start claude-memo

動作確認

Discord Bot に DM で「今までのメモをリストして」と送ると、ラズパイの Claude Code が動いてGitHubのメモを読み出して返してくれる。
メモの追加・削除・サマリー作成もすべてDiscord経由でできる。

音声メモ(Whisper連携)

Discord の音声メッセージをそのまま送ると、Whisper が自動で文字起こししてメモに保存できる。

Whisper のインストール

python3 -m venv ~/.venv/whisper
~/.venv/whisper/bin/pip install openai-whisper

Raspberry Pi 4 は CPU で動かすため、tiny または base モデルが現実的。

使い方

Discord で Bot に音声メッセージを送るだけ。Claude Code が自動的に:

  1. 音声ファイルを受信
  2. Whisper で日本語文字起こし
  3. テキストとしてメモに保存・GitHub にコミット

Discord Web ブラウザで使える利点

Discord はWebブラウザだけで音声メッセージの送受信が完結する。アプリのインストールに制限がある職場のPCや共用端末からでも、ブラウザさえあれば音声メモが取れるのが大きなメリット。

トラブルシューティング

/discord:start が Unknown command

/discord:start というコマンドはない。/discord:configure <token> でトークンを設定し、claude --channels plugin:discord@claude-plugins-official で起動するのが正しい流れ。

返信が "channel is not allowlisted" でブロックされる

Issue #1091 の既知バグ。Bash許可などの permission prompt の後、DMチャンネルのキャッシュが再生成される際に recipientId が失われるのが原因。

回避策:

/discord:access

を実行すると即復帰する。公式の修正待ち。

systemd サービスが起動しない(stdin エラー)

Claude Code は TTY(ターミナル)が必要なため、直接 systemd から起動するとエラーになる。tmux を使って疑似ターミナルを用意することで解決する。

SSH host key verification failed

ssh-keyscan github.com >> ~/.ssh/known_hosts

良かったポイント

ポイント 内容
ポート開放不要 ラズパイからのアウトバウンド接続のみ。自宅NAT環境のままでOK
API課金不要 Claude Pro 月額のままで使える
デバイスを問わない スマホ・タブレット・PCのDiscordからどこでもメモできる
GitHub に自動保存 すべてのメモが履歴付きで残る
後からまとめられる 「今月のメモをまとめて」で月次サマリーが自動生成
音声メモ対応 Discord の音声メッセージを Whisper で自動文字起こしして保存
ブラウザのみで完結 Discord Web 版で動くのでアプリインストール不要。制限のある環境でも使える

改善したいこと

  • iPad の手書きや写真もメモとして取り込めるようにしたい
  • 月末に自動でサマリーを生成する仕組み
  • タグでの絞り込み検索の改善

まとめ

Claude Pro を契約しているなら、ラズパイ + Discord でいつでもどこでもメモが取れる環境が数千円のハードウェア(既存のもの)と無料サービスだけで作れる。
特に Channels がアウトバウンド接続だけで動くので、家庭用ネットワークのままセキュリティを犠牲にせず外部からアクセスできる。