太陽がまぶしかったから

C'etait a cause du soleil.

Pixel 公式 Linux Terminal で Claude Code を起動して Obsidian や GitHub を Twitter 感覚で更新する

Obsidianで“育てる”最強ノート術 —— あらゆる情報をつなげて整理しよう

モバイル環境がないと Claude Code を使い倒せない

1-2時間ごとに訪れる5時間レートリミットも休息時間やインプット時間と割り切れる境地まで来ていたのが、ついにはWeekly リミットが来てしまい全く触れなくなってしまった。ここまでの感覚でなんとなく使いこなせそうな未来が見えてきたし、上位プランなら使える Opus 4.5 や並行稼働開発の世界についても知っておきたいと感じたため、1ヶ月だけx20プランに課金してみることにした。

年末年始にかけて Claude に課金して、Claude Code 開発のキャッチアップをしていたのだが、出社が始まってしまうと触る機会も減ってきてしまうのが実情であった。家に帰ってからも Mac を開くのにも意思力が必要だ。

通勤時間や休憩時間を充実するためにも折りたたみ端末である Pixel Pro 10 Fold を使っているのであるが、改めて環境を構築してモバイル開発やモバイル文書更新を行えるようにしたいと考えた。幸いにして、2025年3月のAndroid 15アップデートで、Pixel端末にLinux Terminalが正式に搭載されるようになっている。

これまでもTermuxなどのサードパーティアプリで擬似的なLinux環境を構築していたユーザーもいたが、Google公式のDebianベースVM環境が使えるようになったことで、セキュリティなどの懸念も少なくなってきていると感じる。そんなわけで環境構築をしていたのだけど、いくつかの制限やバグと思える挙動にもあったため、ワークアラウンドを含めて紹介したい。

Pixel Terminal で Claude Code をインストール

Linuxターミナルを利用するには、最初に準備が必要だ。設定の「デバイス情報」から「ビルド番号」を連続で何度かタップして、同じく設定の「システム」内に「開発者向けオプション」を出現させる。そこで「開発者向けオプションを使用」をオンにした後、「Linux開発環境」から「AndroidLinuxターミナルを実行する」をオンにしよう。

いきなりファミコンの裏技みたいな話になってしまったが、Pixel を高度に使いこなすためには、開発者向けオプション設定が必要なので受け入れるしかない。また最大の制限としてホストマシンとしてマウントできるディレクトリが、 /Download 以下に制限され、Terminal からは /mnt/shared としてマウントされる挙動がある。このため、操作対象ファイルは /Download 配下に作られていくため、うっかりクリーニング対象にしない必要が出てくる。

この制限を受け入れれば、Debian ベースの仮想環境であるため、sudo を含めていろいろなことができてしまう。どうしてもCLIなのでこの辺りの設定をするには外部キーボードとスタンドの準備がおすすめだ。

$ sudo apt update
$ sudo apt upgrade -y
$ sudo apt install -y nodejs npm git dnsutils curl

これで node や git の環境が作れる。Claude Code のインストールについては Claude Code概要 - Claude Code Docs の Native Install がおすすめだ。

$ curl -fsSL https://claude.ai/install.sh | bash
$ claude --version

先の通り、操作結果をホストマシンからも見られた方が Obsidian 等のアプリから使えるため、基本的には /mnt/shared 配下にディレクトリを作って操作するようにしている。

$ mkdir /mnt/shared/terminal
$ cd /mnt/shared/terminal
$ git clone https://github.com/...

モバイルデータ接続時のネットワーク問題の解消

そんな感じで環境構築を終えて意気揚々と外に出たところ、Claude Codeが全く動かない。APIにアクセスできずタイムアウトする。おかしいと思ってping 8.8.8.8を試しても応答がない。nslookup google.comも失敗する。そもそもPixel Terminal からネットワークに接続できていないのだ。自宅のWi-Fiでは問題なく動いていたのに、モバイルデータ接続に切り替わった途端にこの有様である。

調べてみると、この問題はPixel 8 Proなど複数の端末で報告されており、Google Issue Trackerにも登録されていた。Wi-Fi接続時は問題なく動作するが、モバイルデータ接続時にDebian VMからインターネットに到達できないというバグのようだ。

Pixel 9 Pro - Debian Linux Terminal (Android 15 "Baklava") でモバイルデータ経由でインターネットに接続できない : r/pixel_phones』にある resolv.conf の編集と反映もうまく動かなかったのだが、下の方にある奇妙な回避策として発見されたのが、Wi-Fi ホットスポットテザリング)を一度オンにするという方法だ。このようにするとDNSのルーティング切り替わって Terminal からモバイル通信が可能になる。一度設定が書き換わればテザリングをオフにしても再起動するまでは接続が維持されるため、実用上の問題も少ない。

Android Virtualization Frameworkとネットワークスタックの相互作用に起因するバグだと推測されるが、公式な修正を待ちたいところだ。ファイルマウントの件も含めてまだまだギーク用というかなんというかだ。何にせよこれで屋外での Claude Code 開発ができるようになる。Claude CodeはCLIベースのツールであり、重いIDEを必要としないため、手のひら端末で快適に動く。Pixel Pro 10 Fold の画面をひらけばDiffも確認しやすい。

Obsidian x Claude Code の GitHub を介したモバイル化

Obsidian についても、Claude Code で編集できるようにしたい。iPhone 時代において Obsidian のモバイル環境は iCloud のファイル同期を使っていたが、Android では iCloud との連携が困難だ。Obsidian 公式の Sync 機能は有料であり、かつ Git のようなバージョン管理機能はないため、GitHub を中心としたワークフローに完全移行することにした。

自分のブログは Zettelkasten における永久保存メモの一部として活用できるのではないかと考え、はてなブログの記事を Obsidian に同期する仕組みを構築した。これにより、ブログ記事を単なる公開コンテンツとしてではなく、個人の知識ベースとして再利用できるようになる。

(中略)

Obsidian 向けに作成した Markdown ファイルはもちろん Cursor や ChatGPT などの AI エージェントからも参照可能な形式である。さらには、GitHub のプライベートリポジトリ上に Markdown ファイルを保存することで、AI が直接参照できる知識ベースを構築することができ、バックアップやバージョン管理も容易になる。

元々のところで、GitHub化は推進しており、このブログもObsidian形式で GitHub 管理されているのだが、ObsidianはObsidianの機能として使いたい。これを実現するのが Obsidian と Git プラグインである。「Pull on startup」と「Auto commit-and-sync interval」を設定しておけば、Obsidian を開いて一定時間経つたびに最新状態に同期される。Obsidian の vault についても Terminal から利用するためには /Downloads 配下に置く必要がある。

屋外作業の鍵はAgent Skillsの事前設定

ソフトウェアキーボードでの入力が制約になるモバイル環境では、Claude CodeのAgent Skills設定が威力を発揮する。.claude/skills/ディレクトリにスキル定義を置いておけば、屋外では意図を伝えるだけで標準的な品質のソフトウェアやテキストが生成される。

.claude/
├── CLAUDE.md           # プロジェクト共通ルール
└── skills/
    └── blog-article-manager/
        └── SKILL.md    # ブログ記事作成スキル

例えばこの記事自体も、事前に設定したblog-article-managerスキルを使って書いている。スキルファイルには文体ルール、フロントマターのフォーマット、引用の書き方や好む言い回しなどが定義されている。屋外でソフトウェアキーボードから「write blog article for claude code & obsidian」程度の短いプロンプトを打つだけで、スキルが自動的に適用され、ルールに沿った記事の下書きが生成される。

また Claude Codeにはプラン駆動モードが備わっており、これらもモバイル環境での作業効率を大きく向上させる。プラン駆動モードは複雑なタスクに取り組む際に、まず実装計画を立ててからコードを書くというアプローチだ。ソフトウェアキーボードで長いプロンプトを打つのが困難な環境では、「/plan」と打ってから短く指示するだけでClaude Codeが自動的にコードベースを探索し、実装方針を複数提案してくれるため、あとは数字で選んでいけば進行していく。

この「事前準備を厚くして、実行時の入力を最小化する」というアプローチは、まさにコンテキストエンジニアリングの実践となる。デスクトップ環境でじっくりスキルを設計しておけば、Twitter 感覚で意図を伝えていくような形にできる。言い忘れたが Pixel Terminal は日本語入力ができないため、どうしても日本語が使いたい場合には、ホストマシン側から todo.md などを更新して読ませるようにしている。

そんなわけで、いろいろな制約や問題を抱えているものの、様々な場面で思いついたことを雑に放り込んでも勝手に成果物ができていく環境が整いつつある。Skillの定義精度と実行エンジンがよくなるほどに人間としての僕自身の手を煩わせる範囲も減っていくことだろう。満足な入力ができないからこそ事前準備すべきものが見えてきて、今後のワークスタイルの妄想が捗る。運用を続けてブラッシュアップしていきたい。