引き出しの奥で眠っていたPixel 4a。バッテリーはまだ生きている。画面は割れていない。でも、もう使わない。

そんなスマホを、24時間稼働のAIエージェント専用マシンに仕立て直した。ブログの自動投稿、SNSの自動運用、SEO分析、トレンド監視。全部こいつがやっている。月額のサーバー代はゼロ。電気代だけ。

この記事では、その構築過程をまとめる。うまくいったことだけでなく、盛大にハマったポイントも隠さず書く。

なぜPixel 4aなのか

最初はVPSを検討した。月1,000円程度でLinuxが動く。だが、24時間365日となると年間12,000円。個人の実験にしては高い。

手元にPixel 4aがあった。Snapdragon 730G、RAM 6GB、ストレージ128GB。2020年発売のミッドレンジ機。スペックだけ見れば最低限のVPSより上だ。問題は「スマホでLinux環境を動かせるのか」という点だけ。

調べていくうちに、Termux + PRoot-Distroという組み合わせに行き着いた。

Termux + PRoot-Distro:root不要のLinux環境

TermuxはAndroid上で動くターミナルエミュレータで、独自のパッケージマネージャを持っている。PRoot-Distroを使えば、root化なしでUbuntuやDebianのユーザーランドを丸ごと動かせる。


pkg install proot-distro
proot-distro install ubuntu
proot-distro login ubuntu

これだけでUbuntu環境が手に入る。aptも使える。Node.jsもPythonも普通に動く。

ただ、「普通に動く」というのは半分嘘で、PRootはシステムコールをユーザー空間で変換する仕組みのため、カーネルに直接アクセスする操作は失敗する。この制約に、後で何度も苦しめられた。

OpenClawのインストール

OpenClawは、LLMをエージェントとして常駐させるフレームワークだ(GitHub / ドキュメント)。Discordをインターフェースにして、ファイル操作、シェル実行、Web検索、ブラウザ操作を統合的に扱える。


curl -fsSL https://openclaw.ai/install.sh | bash
openclaw onboard

モデルはClaude Opus 4を選択。onboardウィザードでDiscord Botの設定を済ませると、DiscordからAIに話しかけられるようになる。

ここまでは順調だった。

最初の壁:os.networkInterfaces() が死ぬ

OpenClawをTermuxから非対話的に起動しようとすると、即座にクラッシュする。


Error: uv_interface_addresses: permission denied

原因はNode.jsの os.networkInterfaces()。ネットワークインターフェース情報を取得する関数だが、PRootの仮想環境ではこのシステムコールが許可されていない。OpenClawの起動処理で呼ばれるため、そこで落ちる。

対話的にログインした場合(proot-distro login ubuntu を手動実行)は問題ない。Termuxの擬似TTYが一部のシステムコールを通すためだ。しかし、自動起動スクリプトから非対話的に呼び出すとダメ。

まともな解決策が見つからず、力技に出た。OpenClawのソースコード内で os.networkInterfaces() を呼んでいる箇所を全て探し出し、try-catchで囲んでいく。


grep -r "networkInterfaces" /usr/lib/node_modules/openclaw/dist/

見つかったのは6ファイル。さらに依存パッケージの @homebridge/ciao 内にも5箇所。合計11箇所を手作業でパッチした。


// Before
const interfaces = os.networkInterfaces();

// After
let interfaces;
try {
  interfaces = os.networkInterfaces();
} catch (e) {
  interfaces = {};
}

これで動くようになった。ただ、OpenClawをアップデートするたびにパッチを当て直す必要がある。あまりスマートなやり方ではないが、他に方法が見つからなかった。

二番目の壁:OOMキラーとの戦い

Pixel 4aのRAMは6GB。Androidシステムが3GB弱、Termux + PRoot + Node.js(OpenClaw) + Chromium(後述)で残りを食い合う。

厄介なのがOOMキラーで、メモリが逼迫するとAndroidがTermuxプロセスごと殺してしまう。signal 9。ログも残らない。突然死する。

復旧は手動だった。気がついたらDiscordのBotがオフラインになっている。Pixel 4aの画面を開いて、Termuxを起動して、コマンドを打って……。これでは24時間稼働とは言えない。

Watchdogスクリプト

Termux側で動くwatchdogを書いた。


#!/data/data/com.termux/files/usr/bin/bash

PIDFILE="$HOME/openclaw-watchdog.pid"
LOGFILE="$HOME/openclaw-watchdog.log"
FAIL_COUNT=0
MAX_FAILS=20
WINDOW_START=$(date +%s)

if [ -f "$PIDFILE" ]; then
  OLD_PID=$(cat "$PIDFILE")
  if kill -0 "$OLD_PID" 2>/dev/null; then
    echo "Watchdog already running (PID $OLD_PID)" >> "$LOGFILE"
    exit 1
  fi
fi
echo $$ > "$PIDFILE"

termux-wake-lock

while true; do
  echo "[$(date)] Starting OpenClaw..." >> "$LOGFILE"
  
  proot-distro login ubuntu -- bash -c \
    "source /root/.openclaw/env.sh && openclaw gateway run" \
    >> "$LOGFILE" 2>&1
  
  EXIT_CODE=$?
  echo "[$(date)] OpenClaw exited with code $EXIT_CODE" >> "$LOGFILE"
  
  # 短時間に連続失敗したら停止
  FAIL_COUNT=$((FAIL_COUNT + 1))
  NOW=$(date +%s)
  ELAPSED=$((NOW - WINDOW_START))
  
  if [ $ELAPSED -gt 300 ]; then
    FAIL_COUNT=1
    WINDOW_START=$NOW
  elif [ $FAIL_COUNT -ge $MAX_FAILS ]; then
    echo "[$(date)] Too many failures ($MAX_FAILS in 5min). Stopping." >> "$LOGFILE"
    break
  fi
  
  sleep 15
done

ポイントは3つ。

termux-wake-lock でAndroidの省電力モードを回避する。これがないと、画面オフ時にTermuxがサスペンドされる。

proot-distro login ubuntu -- bash -c "..." で非対話的にOpenClawを起動する。前述のパッチがないとここで死ぬ。

5分間に20回以上失敗したら自動停止する。無限再起動ループを防ぐための安全弁だ。OOM以外の致命的エラー(設定ミスなど)で永遠にリトライし続けることを防ぐ。


nohup bash ~/openclaw-watchdog.sh &

これでOOMで殺されても15秒後に自動復帰するようになった。完璧とは言えないが、実用上はこれで十分だった。深夜に落ちても、朝には復帰している。

Headless ChromeをPixel 4aで動かす

AIエージェントにWeb検索をさせたくて、ただのHTTPリクエストではJavaScriptレンダリングされたページが取得できないため、Headless Chromeを導入することにした。

Remotion(動画生成フレームワーク)をインストールした際に、ARM64用のChrome Headless Shellが自動ダウンロードされていた。これをPuppeteerから使う。


const browser = await puppeteer.launch({
  executablePath: '/path/to/headless_shell',
  headless: 'new',
  args: [
    '--no-sandbox',
    '--disable-gpu',
    '--disable-dev-shm-usage',
    '--single-process'
  ]
});

起動に20〜30秒かかる。デスクトップなら一瞬だが、Pixel 4aでは毎回この待ち時間が発生する。ただ、一度起動すればページ遷移やスクリーンショットは数秒で処理できる。

Google検索がbot検出される

最初はGoogleで検索していた。数回は通るが、すぐにCAPTCHAが出る。IPアドレス単位でブロックされているらしく、一度弾かれると長時間復旧しない。

代替策として、DuckDuckGoのHTMLバージョンとBingの検索APIを組み合わせた。DuckDuckGoはbot検出が緩い。Bingは関連キーワードのサジェストが優秀。Google検索の完全な代替にはならないが、トレンド把握には十分使える。

これらをまとめて smart_search.js というツールキットにした。


node smart_search.js search "OpenClaw 使い方"     # DuckDuckGo検索
node smart_search.js news "AI エージェント"        # Bingニュース
node smart_search.js suggest "ブログ 収益化"       # Google/Bingサジェスト(API直、軽量)
node smart_search.js trends                       # X(Twitter)トレンド
node smart_search.js gtrends                      # Googleトレンド急上昇
node smart_search.js fetch "https://example.com"  # JSレンダリング済みページ取得

suggestだけはAPIを直接叩くのでブラウザ不要。起動0秒。キーワード調査にはこれが一番使い勝手がいい。

自動化している3つのタスク

1. ブログ記事の自動投稿

WordPress REST APIを叩いて、1日4回(0時, 6時, 12時, 18時 JST)記事を投稿・リライトしている。


AIがトレンドキーワードを取得
 ↓
記事を生成(2,000〜3,000字、SEO最適化)
 ↓
サムネイル画像をAI生成([Gemini API](https://ai.google.dev/))
 ↓
WordPress APIで投稿
 ↓
[Google Indexing API](https://developers.google.com/search/apis/indexing-api/v3/quickstart)でインデックス申請

OpenClawのcronジョブで全自動。新規記事とリライトを1回のジョブで処理する。

2. X(Twitter) BOTの自動運用

1日16回、毎時15分にツイートを自動投稿している。


Puppeteerでトレンドを取得([trends24.in](https://trends24.in/))
 ↓
Gemini APIでツイート文を生成(トレンドを自然に織り込む)
 ↓
[tweepy](https://www.tweepy.org/)でツイート投稿

トレンドに乗りつつ、ペルソナに沿った投稿をする。過去の投稿履歴をファイルで管理し、同じネタの重複を避けている。

3. SEO・アクセス解析の自動モニタリング

GA4 APIGoogle Search Console APIで週次レポートを自動生成。毎週月曜の朝にDiscordにレポートが届く。

メモリとの付き合い方

6GBのRAMでChromiumを動かすのは、正直なところ綱渡りだ。OpenClaw(Node.js)で200〜400MB、Chromiumで300〜600MB。Androidシステムの分を考えると、常時2GB程度しか余裕がない。

対策は「使ったら閉じる」の徹底。Puppeteerのブラウザインスタンスは、検索やスクレイピングが終わったら即座に browser.close() する。常駐させない。

それでもOOMは月に数回起きる。複数のChromiumタブを開いたり、大きなJSONを処理したりすると一発で落ちる。完全に防ぐのは諦めて、前述のwatchdogで復旧を速くする方向に振り切ることにした。

運用して分かったこと

よかったこと

ランニングコストがほぼゼロ。VPSなら月1,000〜3,000円かかるところ、Pixel 4aは電気代だけ。充電器を挿しっぱなしにしても月数十円。

ARM64の恩恵も大きい。最近のOSSはARM対応が進んでいて、Node.js、Python、Chromiumすべてネイティブで動く。エミュレーションのオーバーヘッドがない。

それから、物理的に手元にある安心感。VPSと違って、何かあったら画面を見て状態を確認できる。SSHが通らなくても、実機が目の前にある。

つらいこと

PRootの制約がとにかくつらい。Docker使えない。systemd使えない。os.networkInterfaces() で死ぬ。予想外の場所で permission denied が飛んでくる。

RAM 6GBの壁も常にある。Chromiumを使うタスクはOOMのリスクと隣り合わせで、余裕を持った設計が求められる。

アップデートも怖い。OpenClawをアップデートすると、パッチした11箇所が上書きされる。毎回パッチを当て直す必要がある。自動化スクリプトを書くべきだが、ファイル名が変わる可能性もあり、完全な自動化は難しい。

コスト比較

| 項目 | Pixel 4a | VPS (最安) | Mac mini |

|—|—|—|—|

| 初期費用 | 0円(手持ち) | 0円 | 7〜10万円 |
| 月額 | 〜50円(電気代) | 1,000〜3,000円 | 〜300円(電気代) |
| RAM | 6GB | 1〜2GB | 8〜16GB |
| CPU | Snapdragon 730G | 共有1〜2コア | Apple Silicon |
| Docker | ✗ | ✓ | ✓ |
| 安定性 | △(OOMあり) | ○ | ◎ |

Pixel 4aは「タダで使える実験機」として割り切れるなら、かなりコスパがいいと感じている。本番運用にはMac miniやVPSの方が安定するが、個人の自動化タスクならPixel 4aでも十分回っている。

構成図


[Discord] ←→ [OpenClaw Gateway (Node.js)]
                    ├── cronジョブ
                    │   ├── ブログ自動投稿 (4回/日)
                    │   ├── X BOT投稿 (16回/日)
                    │   └── GA4週次レポート
                    ├── Puppeteer + Headless Chrome
                    │   └── smart_search.js (Web検索/トレンド/スクレイピング)
                    ├── WordPress REST API
                    ├── Google APIs (GA4, Search Console, Indexing)
                    ├── X (Twitter) API
                    └── Gemini API (記事生成/画像生成)

[Termux] → [PRoot-Distro (Ubuntu)] → [watchdog.sh (自動復旧)]

全てがPixel 4a 1台で動いている。

まとめ

使わなくなったPixel 4aが、毎日ブログを書き、SNSに投稿し、アクセス解析を報告してくれるマシンになった。

完璧な環境ではない。PRootの制約、OOMとの戦い、パッチの手間。Mac miniやVPSに比べれば不便は多い。でも、引き出しで眠っていた端末が毎日20件以上のタスクを自律的にこなしている事実は、なかなか痛快だ。

古いスマホが手元で眠っているなら、試してみると面白いかもしれない。うまくいかなくても、Linuxの勉強にはなる。

関連記事


動作環境: Pixel 4a (Snapdragon 730G / RAM 6GB) / Android 14 / Termux 0.118 / PRoot-Distro (Ubuntu 24.04) / Node.js v22.22.0 / OpenClaw v2026.2 / Chromium Headless Shell (ARM64)

参考リンク

  • OpenClaw — AIエージェント常駐フレームワーク
  • OpenClaw GitHub
  • OpenClaw ドキュメント
  • Termux — Android向けターミナルエミュレータ
  • PRoot-Distro — Termux用Linuxディストリビューション管理
  • Anthropic (Claude)
  • Puppeteer — Headless Chrome操作ライブラリ
  • Remotion — React動画生成フレームワーク
  • WordPress REST API
  • Google Indexing API
  • GA4 Data API
  • tweepy — Python用Twitter APIラッパー
  • DuckDuckGo
  • Gemini API (Google AI Studio)
  • 関連記事