Mac mini M4 Pro で24時間AIエージェントを動かす方法——自律型AIが勝手にブログを書いてくれる仕組み

この記事はこんな人向けです:

  • Mac mini を買ったけど「サーバーとして使えないかな?」と思っている人
  • AIエージェントを自分で構築してみたいエンジニア
  • Claude Code や Claude Agent SDK に興味がある人
  • 24時間動く自動化システムを低コストで作りたい人

こんにちは、ますです。

フリーランスでAI×SaaS開発をしつつ、福祉事業のCTOもやっている「異世界転生エンジニア」です。

Mac mini M4 Pro を買って、24時間AIエージェントを動かしています。

何をしてくれるかというと——毎朝AIニュースを収集して、トピックを選んで、ブログ記事を自動生成して、WordPressにドラフトを投稿して、Discord経由で「これ公開していい?」と聞いてくる。承認ボタンを押すと、WordPressに公開されてXにもポストされる。

しかもこれ、月額の追加サーバー代ゼロ円。Mac mini の電気代(月500〜800円程度)だけで動いています。

今回は、この「自律型AIエージェントシステム」をどうやって構築・運用しているのかを、できるだけ具体的に解説します。

なぜ Mac mini M4 Pro なのか

24時間AIエージェントを動かすサーバーとして、いろいろな選択肢を検討しました。

選択肢 月額コスト メリット デメリット
AWS EC2 (t3.medium) 約5,000円〜 スケーラブル、高可用性 ランニングコストが永続
VPS (さくら/ConoHa) 約1,000〜3,000円 安い、安定 スペック制限、GPU非対応
Raspberry Pi 5 電気代のみ 超安い メモリ8GBが上限、ARM制約
Mac mini M4 Pro 電気代のみ (500〜800円) 高性能、静音、省電力 初期投資が必要

Mac mini M4 Pro を選んだ決め手は4つです。

省電力がすごい。アイドル時の消費電力が約5〜7W。24時間つけっぱなしでも月の電気代は500〜800円程度です。VPSの月額費用より安い。

メモリ24GBが安定稼働の鍵。Node.js プロセスを複数走らせても余裕があります。Discord Bot、ダッシュボード API、オーケストレーター、Vite 開発サーバーを同時に動かしても12GB程度。ローカルLLMを動かしたくなっても対応できるメモリ量です。

静音性。自宅の作業部屋に置いていますが、ファンの音はほぼ聞こえません。24時間稼働させるなら、騒音は地味に重要なポイントです。

リモート接続。手持ちのMacbookやiPhoneからの接続も容易にできるので、相性が良いんです。

システム全体像——3つのサービスで回す

システムは大きく3つの常駐サービスで構成されています。

┌─────────────────────────────┐
│                  Mac mini M4 Pro                          │
│                                                           │
│  ┌───────┐  ┌───────┐  ┌─────┐   │
│  │ Discord Bot  │  │  Dashboard   │  │Orchestr- │   │
│  │              │  │  (API + UI)  │  │  ator    │   │
│  │ ユーザーと   │  │ 状態を可視化 │  │ cronで   │   │
│  │ 対話する窓口 │  │ するパネル   │  │ 自動実行 │   │
│  └───┬───┘  └───┬───┘  └──┬──┘   │
│          │                  │                │         │
│          └────┬────┘────────┘         │
│                    ▼                                     │
│            ┌────────┐                           │
│            │   Agent Core   │                           │
│            │  (Claude SDK)  │                           │
│            └───┬────┘                           │
│                    ▼                                     │
│            ┌────────┐                           │
│            │    SQLite DB   │                           │
│            ─────────┘                           │
└─────────────────────────────┘

テクノロジースタック

  • 言語: TypeScript (Node.js)
  • パッケージ管理: npm workspaces(モノレポ構成)
  • エージェント基盤: Claude Agent SDK(@anthropic-ai/claude-code)
  • データベース: SQLite(better-sqlite3)
  • サブスクリプション: Claude MAX(月額$100〜$200)

モノレポの構造はこんな感じです。

masu-agent/
├── packages/
│   ├── agent-core/        # DB操作・Claude SDK・共通ロジック
│   ├── content-machine/   # ブログ生成・WordPress連携・SNS投稿
│   └── mcp-db-server/     # MCP(Model Context Protocol)サーバー
├── apps/
│   ├── discord-bot/       # Discordインターフェース
│   ├── agent-orchestrator/ # 自動実行エンジン(cron)
│   ├── dashboard-api/     # Express REST API
│   └── dashboard-ui/      # React + Vite フロントエンド
└── scripts/               # launchd・tmux セットアップ

「Agent Core」が共通ライブラリで、すべてのアプリがこれを通じてデータベースとClaude APIにアクセスします。

launchd で「Mac再起動しても自動復帰」を実現

24時間稼働で一番重要なのは、Macが再起動しても勝手にサービスが立ち上がること。macOS標準の launchd を使います。

2つのサービスを登録

サービス 種類 役割 自動再起動
com.masu.tailscaled LaunchDaemons (root) Tailscale VPN KeepAlive: true
com.masu.agent-system LaunchAgents (user) tmux + 全サービス起動 RunAtLoad: true

起動順序が大事です。Tailscale(ネットワーク)が先に起動して、その後にエージェントシステムが立ち上がります。外出先からリモートアクセスするために Tailscale は必須なので、これが落ちていると何もできなくなります。

エージェント起動スクリプト

com.masu.agent-system が呼び出すのは1つのシェルスクリプト。このスクリプトが tmux セッションを作り、各ウィンドウでサービスを起動します。

#!/bin/bash
# start-agent-system.sh(概要)

# 1. tmux セッションを作成
tmux new-session -d -s masu-agent -n bot

# 2. 各ウィンドウでサービスを起動
tmux send-keys -t masu-agent:bot 'npm run start:bot' Enter

tmux new-window -t masu-agent -n dashboard
tmux send-keys -t masu-agent:dashboard 'npm run start:dashboard' Enter

tmux new-window -t masu-agent -n orchestrator
tmux send-keys -t masu-agent:orchestrator 'npm run start:orchestrator' Enter

tmux new-window -t masu-agent -n logs

これで、Macの電源を入れるだけで全サービスが自動的に立ち上がります。停電や macOS アップデートで再起動しても安心。

tmux でサービスを管理する

tmux は「ターミナルの仮想デスクトップ」のようなもの。SSH接続が切れてもプロセスが死なないので、24時間稼働にはぴったりです。

セッション構成

masu-agent セッション
├── Window 0: bot          — Discord Bot
├── Window 1: dashboard    — Dashboard API + UI
├── Window 2: orchestrator — 自動実行エンジン
└── Window 3: logs         — ログモニタリング

よく使う操作

# セッション一覧
tmux ls

# サービスのログを確認
tmux attach -t masu-agent:orchestrator

# Bot だけ再起動
tmux send-keys -t masu-agent:bot C-c   # 停止
tmux send-keys -t masu-agent:bot 'npm run start:bot' Enter  # 起動

tmux のいいところは、各サービスが独立したウィンドウで動くこと。1つのサービスがクラッシュしても他に影響しません。

オーケストレーター——cron で回す自律型パイプライン

システムの「脳」にあたるのがオーケストレーターです。node-cron を使って、時間帯ごとに異なるジョブを自動実行します。

1日のスケジュール

時刻 ジョブ やること
04:30 デイリータスク生成 今日やるべきタスクをDBに自動作成
05:00 トピック選定 SEOトレンド+ナレッジベースからブログテーマを決定
08:00 AIニュース収集 Web検索→記事取得→要約→DB保存→Discord通知
10:00 ブログ記事生成 選定テーマで記事を自動執筆 + サムネイル生成
13:00 コンテンツ公開 Discord承認済みの記事をWordPress公開 + X投稿
14:00 マーケット監視 競合・市場動向のリサーチ
22:00 アナリティクス収集 WordPressのPV・Xのインプレッションを集計

週次ジョブ

曜日 ジョブ 内容
月曜 Claude Tips 収集 Claude活用のTipsをリサーチ
水曜 開発トレンド収集 技術トレンド・フレームワーク情報
金曜 ビジネスアイデア SaaS・副業のアイデアリサーチ
日曜 週次レポート 1週間のコンテンツパフォーマンスを分析

コンテンツ自動生成パイプライン

特に面白いのが、ブログ記事の自動生成パイプラインです。

トピック選定(朝5:00)
  ↓ ナレッジベース + トレンド検索から最適なテーマを選ぶ
記事生成(朝10:00)
  ↓ Claude が5,000〜8,000字の記事を執筆
  ↓ Gemini API でサムネイル画像を生成
  ↓ WordPress にドラフト投稿
Discord 通知
  ↓ プレビューリンク付きで「レビューお願いします」と通知
人間が承認(✅リアクション)
  ↓
WordPress 公開 + X に自動ポスト

最後の承認だけは人間がやります。完全自動にもできますが、内容のクオリティチェックは自分の目でやりたいので、ここだけ Discord の承認フローを挟んでいます。

Discord Bot をユーザーインターフェースにする

「なんで Discord?」と思うかもしれませんが、これがかなり便利なんです。

Discord を選んだ理由

  • スマホからでも操作できる。外出先でも承認・指示が可能
  • スレッド機能で会話のコンテキストを保持できる
  • リアクションがそのまま承認フローになる
  • チャンネルを用途別に分けられる(ニュース、コンテンツ、アラートなど)

コンテンツ承認ワークフロー

Bot: 「新しいブログ記事ができました」
     タイトル: ○○○○
     プレビュー: https://...
     ✅ 公開  ✏️ 修正  ❌ 却下  🗑️ 削除

あなた: ✅ リアクションをタップ

Bot: → WordPress に公開完了
     → X にポスト完了
     → 公開URL: https://...

スマホの Discord アプリで絵文字をタップするだけで記事が公開されます。寝る前にベッドの中からポチッとやることもあります。

対話型の Claude セッション

Discord でメンションすると、Claude Agent SDK を通じて対話もできます。スレッドごとにセッションが維持されるので、過去のやり取りを踏まえた回答が返ってきます。

ダッシュボードで「今どうなってる?」を可視化

エージェントが勝手に動いてくれるのはいいんですが、「今何してるの?」が見えないと不安ですよね。そこで React + Express のダッシュボードを作りました。

ダッシュボードで見えるもの

  • サービス稼働状況: Bot / Dashboard / Orchestrator の稼働時間
  • セッション統計: Claude の利用回数とトークンコスト
  • デリバラブル: 今日のタスク一覧(カンバンボード形式)
  • ナレッジベース: 収集した情報の閲覧
  • コンテンツ一覧: 下書き〜公開済みの記事管理
  • プロジェクト管理: 案件のメタデータ一覧

Tailscale 経由でアクセスできるので、外出先からスマホでも確認できます。

セキュリティ——個人運用でも手を抜かない

「個人用だからセキュリティは適当でいいや」は危険です。AIエージェントは外部APIにアクセスするし、Bashコマンドも実行できるので、ルールをしっかり決めています。

守っているルール

  • APIキーは macOS Keychain に保存。.envファイルに平文で書かない
  • リモートアクセスは Tailscale VPN のみ。ポート転送は使わない
  • sudo は使わない。標準ユーザー権限で全サービスを動かす
  • 外部へのPOSTは承認制。エージェントが勝手に未知のURLにデータを送らない
  • CLAUDE.md にセキュリティルールを明記。エージェント自身がルールを理解して従う

Claude のツール権限を制御

Claude Agent SDK では、エージェントに渡すツール(ファイル読み書き、Bash実行、Web検索など)を制限できます。

  • 読み取り専用タスク: Read, Glob, WebSearch のみ
  • コンテンツ生成: Read, Edit, WebSearch, Glob
  • 開発タスク: フルアクセス(ただしユーザー確認あり)

「最小権限の原則」をエージェントにも適用しています。

実際の運用コストと電力消費

1ヶ月運用してみた実績です。

ハードウェアコスト

項目 金額
Mac mini M4 Pro (24GB) 約234,800円(初期投資)
月間電気代 約500〜800円

サブスクリプション

サービス 月額
Claude MAX $200(約30,000円)
WordPress (Xserver) 約1,000円
ドメイン 約100円/月換算

VPS と比較すると

同等スペックのVPS(8コア、24GB RAM)を契約すると月額15,000〜30,000円。Mac mini なら初期投資の回収後は電気代だけ。1年で元が取れる計算です。

しかも Mac mini は開発マシンとしても使えるので、実質的なコストはさらに低いです。

まとめ

Mac mini M4 Pro で24時間AIエージェントを動かす構成をまとめると:

  1. launchd で Mac 再起動時の自動復帰
  2. tmux でサービスを独立管理
  3. オーケストレーター が cron で自律的にタスクを実行
  4. Discord Bot がスマホから操作できるUI
  5. ダッシュボード で状態を可視化
  6. Tailscale で安全なリモートアクセス

「AIエージェントを動かす」というと大げさに聞こえますが、やっていることはNode.js のサービスを3つ動かして、cron で定期実行しているだけです。特別なインフラは要りません。

Mac mini の省電力性能と静音性のおかげで、自宅のデスクに置いて24時間つけっぱなしでもまったく気にならない。月のランニングコストは電気代だけ。

「自分専用のAIエージェントが、寝ている間にニュースを集めて、ブログ記事を書いて、朝起きたら承認するだけ」——この体験は一度味わうとやめられません。

興味がある方は、まず Mac mini + Claude MAX で小さく始めてみてください。最初は Discord Bot だけでも十分面白いですよ。


AIやプログラミングについて発信しています。質問や感想は X (@mamamasu_3) までお気軽にどうぞ。