先日、MOSH社・RABO社と共同開催したクローズドのAI勉強会で「電車でも個人開発を進める技術」というタイトルで発表しました。 この記事はその発表内容をブログ向けにまとめたものです。
はじめに:AI活用に素振りは大事
仕事では割とコンサバなAI活用をしています。個人のコーディングはほぼ100%AIがドライバーになっていますが、チームでの活用度はまだ低め。より深く理解するために、もっと気軽に「素振り」がしたいと思っていました。
個人開発はいいぞ!でも時間がない
素振りといえば個人開発。しかし人生のフェーズと共に、開発に使える時間はどんどん減っていきます。減らしたくない睡眠時間、減らせない移動時間……。
そこで思ったのが「電車移動中に開発できたら」ということです。
整えた環境

試行錯誤の末、次のような構成に落ち着きました。
- 本体:折りたたみスマホ(Galaxy Z Fold7)
- SSHアプリ:Termux
- VPN:Tailscale
- エディタ:vim
- ターミナル管理:tmux
開発のワークフローとしては、プランニング(mo)→ 実装(Claude Code)→ レビュー(difit)という流れで進めています。
実際にやってみた感想
メリット
- 折りたたみスマホが便利すぎる
- Galaxy Z Fold7はタブレットとは違ったポータビリティ性能が魅力です。ポケットからサクッとPCを取り出せる感覚で、とにかく持ち運びやすい。
- 結構戦える
- Agentic Codingの普及、重厚なIDEからCLIへの回帰が進んでいるあたりが理由かなと。
- 環境準備が楽
- ターミナルはリモートのMacにSSHして、日頃と同じ環境を担保できます。
- モバイル ↔ PC をシームレスに切り替えられるのが特に気に入っています(同じリモート環境にSSHするだけ)
- また、TailscaleによってセキュアなVPN接続を実現し、不必要なポートを解放せずに済むのも安心です。
デメリット
- Galaxy Z Fold7が高すぎる(約25万円)
- 開発に集中しすぎて電車を乗り過ごす(2回やりました)
画面の使い方

実際の作業では、折りたたんだ状態の画面を左右に分割して使います。
- 左半分:ターミナル
- 基本的にClaude Codeを起動。サーバー起動や特定ファイルの確認はtmuxで切り替え
- 右半分:ブラウザ
- 成果物の確認やPRの作成
真ん中をドラッグして画面幅を適宜変更できるのも便利です。プランニング時はターミナルを広め、レビュー時はブラウザを広めにする、といった使い分けをしています。
工夫① CLIツール「difit」でコードレビュー

yoshiko-pg/difit というCLIツールをコードレビューに活用しています。PRを作る前にGitHub Likeな画面でレビューでき、GitHubと同様にコメントもつけられます。コメントは最終的にプロンプトとしてコピーできるので、Claude Codeへの指示に使えて便利です。
src/hoge.ts:L100 255文字にして ===== src/hoge.ts:L200 テストを追加して
工夫② CLIツール「mo」でMarkdownを確認

k1LoW/mo はブラウザベースのMarkdown ViewerツールをCLIから起動できるものです。
$ mo PLAN.md
複数のMarkdownを開いても別プロセス/別ポートが使用されない設計で、ライブリロードにも対応。ブラウザで開くので英語のドキュメントも翻訳できます。
工夫③ Tailscale × 開発サーバー公開
開発中、リモートPCの localhost にスマホからアクセスしたくなる場面があります(アプリサーバー、difit、moなど)。これを Tailscale Serve を使って安全にhttpsで外部公開しています。
.zshrc に以下のようなシェル関数を定義しています。
tsdev() { if [ $# -eq 0 ]; then set -- 3000; fi local host="$(tailscale status --json | jq -r '.Self.DNSName | rtrimstr(".")')" for port in "$@"; do tailscale serve --bg --https=${port} "http://localhost:${port}" echo "-> https://${host}:${port}/" done } tsdevoff() { tailscale serve status --json 2>/dev/null \ | jq -r '.TCP | keys[]' \ | while read -r port; do tailscale serve --https=${port} off 2>/dev/null done echo "-> stop" }
使い方はシンプルで、以下のように実行できます。
# 例えばリモートのhttp://localhost:3000/ にアクセスしたいとする $ tsdev 3000 # https://mydevpc.tail12345.ts.net:3000/ でアクセスできるようになる
まとめ
移動中も開発していこうな!💪