技術記事 2026年6月30日 読了 約8分

スマホからサーバのAIを遠隔操作する — Discord越しにClaude Codeを動かす

外出先で「あの作業、今やっちゃいたい」と思うこと、ありませんか?最近は、スマホのDiscordに一言送るだけで、自宅サーバのClaude Codeが代わりに作業してくれるようになりました。仕組みと、作るときにハマった点、それと見落とすと危ないセキュリティの話まで、正直に書いていきます。

QE
Qurated編集部
Qurated

こんにちは。Qurated編集部のTです。

外出先で、ふと「あの作業、今やっちゃいたいな」と思うこと、ありませんか。

家に帰らないとサーバを触れない——そう思っていたんですが、最近はスマホのDiscordに一言送るだけで、自宅サーバのClaude Codeが代わりに作業してくれるようになりました。電車の中から「あのバグ直しといて」と送ると、数分後に「直したよ」と返ってくる。これがめちゃくちゃ便利で、しかも作っていて単純に楽しい。

今回は、その「Discord越しにAIを遠隔操作する仕組み」を、作り方の要点とハマった点、それと見落とすと危ないセキュリティの話まで含めて、正直に書いていきます。

何ができるようになったのか

先に「で、何が嬉しいの?」から。

  • 電車・カフェ・布団の中から、スマホのDiscordに指示を打つ
  • 自宅サーバ上の Claude Code(claude CLI)が実際に手を動かす(ファイル編集・コマンド実行・調べ物まで)
  • 結果がDiscordに返ってくる。長い出力は自動でファイル添付

要するに、ポケットの中に「自分専用のエンジニア」が常駐している状態です。PCを開かなくても、思いついた瞬間に作業を投げられる。

Discordに指示を送り、結果が返ってくるまでの画面

「重い処理だと数分かかります」みたいな“作業中”の表示を挟むようにしてあるので、待ち時間も不安になりません。

仕組み:なぜDiscordなのか

構成はすごくシンプルです。

iPhone → Discord → 常駐Bot → Claude Code → 返信、という流れの図

やっていることは、

  1. Discordに来たメッセージを、サーバで常駐している小さなBotが受け取る
  2. その文章を、ヘッドレス(画面なし)で動く claude コマンドに渡して実行する
  3. 返ってきた結果をDiscordに送り返す

これだけ。わざわざ自前のスマホアプリを作らなくていいのがポイントで、「入力欄」と「通知」と「ファイル送受信」が全部そろったスマホアプリ=Discordを、UIとして“間借り”しているわけです。VPNを張ってSSHで…とやるより、圧倒的に手軽でした。

作り方の要点(コードは少しだけ)

全部は載せませんが、肝になるところだけ。言語はPython(discord.py)です。

① ヘッドレスでClaude Codeを叩く

Claude Codeには「対話せず一発で実行して結果を返す」モードがあります。

claude -p "READMEのtypoを直して" --output-format json

--output-format json を付けると、結果の本文(result)と会話ID(session_id)が機械が読める形で返ってきます。Botはこれを subprocess で起動して、result をDiscordに流すだけ。

② 「さっきの件だけど」を通す

ここが地味に効きます。1回目に返ってきた session_id を保存しておいて、次回は

claude -p "さっきのやつ、テストも書いて" --resume <session_id>

--resume を付けるだけで、前の会話の文脈を引き継いでくれる。だから「さっきの」「その続き」みたいな雑な指示が通ります。会話IDはユーザーごとにファイルに保存して、サーバを再起動しても続くようにしました。

③ Discordの文字数制限に合わせて返す

Discordは1メッセージ2000字まで。なので長い結果は改行のいいところで分割して送り、さらに長いものはテキストファイルとして添付するようにしています。

ハマったところ

きれいに一発では動きませんでした。引っかかった順に。

  • Botアプリの名前に “claude” や “discord” を入れると弾かれる。 普通にエラーになって最初は意味が分からなかった。別名にしたら通りました。
  • 「MESSAGE CONTENT INTENT」をONにし忘れる。 これをONにしないと、Botにメッセージの“中身”が届かない(=何を言われても無反応)。Developer Portalでの設定が必要です。
  • APIキーは要らなかった。 ヘッドレス実行でも、既にPCでログイン済みの認証情報をそのまま使ってくれるので、別途キーを発行しなくて動きました(ここは環境によります)。
  • Botが落ちると無言になる。 最初は手動で起動していたので、ログアウトやサーバ再起動で勝手に止まってしまう。これは次の章で解決しました。

「落ちても自動で復活」させる

手動起動だと続かないので、systemdのユーザーサービスとして常駐させました。これで

  • サーバを再起動しても自動で立ち上がる
  • 万一クラッシュしても自動で復活する(Restart=on-failure
  • ログも一箇所(journalctl)にまとまる

さらに loginctl enable-linger を有効にすると、自分がログアウトしていてもBotは動き続けます。地味ですが、「外から使う」前提だとこれが必須でした。一度ここまで仕込むと、もう存在を忘れて使えるようになります。

ここは絶対に外せない:セキュリティの話

便利の裏返しとして、これは正直に強調しておきます。

この仕組みは、実質「Discord越しのリモートシェル」です。 文章を投げたらサーバ上でコマンドが実行できる、ということは、悪用されたら何でもされうるということ。だから守りは固めました。

  • 認可した自分のユーザーIDのメッセージにしか反応しない(他人が同じサーバで何を打っても無視)
  • 反応するチャンネルを限定する(決まったチャンネルとDMだけ。他のチャンネルでは存在ごと黙らせる)
  • Botは自分しかいない非公開サーバにだけ入れる
  • Discord自体に2段階認証をかける(アカウントを乗っ取られたら終わりなので)

「自動で全部許可して実行」と「誰が操作できるか」をきっちり分けて、後者を人間のIDで握る。この設計にしておかないと、便利な道具がそのまま穴になります。ここだけは手を抜かないでください。

使ってみた所感

一番効いたのは、“やる気の瞬間”を逃さなくなったことです。PCを開くまでの数分の腰の重さで「まあ後でいいか」と消えていた小さなタスクが、スマホから一言投げるだけで片付くようになった。布団の中で「あれデプロイしといて」が通るのは、思っていた以上に体験が変わります。

もちろん万能ではなくて、複雑すぎる作業は結局あとでPCで確認したくなるし、出力が長いとスマホだと追いづらい。でも「思いついたら即・サーバに投げられる」入口があるだけで、自宅サーバとの距離がぐっと縮まりました。

まとめ

  • Discordを“UIとして間借り”すれば、スマホからサーバのAIを動かせる
  • 肝は「ヘッドレス実行(-p)」と「会話の継続(--resume)」
  • 常駐は systemd+linger で「落ちても復活・ログアウトしても生存」
  • そして何より、実質リモートシェルなのでセキュリティは妥協しない

作るのも使うのも単純に楽しい構成でした。次は、この仕組みを使って実際に外から自宅サーバを育てている話か、自宅クラウドの詳細を書こうと思います。


スマホで開発してみませんか?

Claude Codeの遠隔操作に興味がある方は、お気軽にご相談ください。

無料で相談する