みんなやっていて面白そうだったので、自分もスマホからVibe Codingやるか!ということで、
いろいろな記事に解説のある通り、iPhone→Tailscale(VPN)→Mac pcで接続を確立し、Termius(SSH)でターミナルを表示するところまではスムーズに来た。
いよいよGeminiCLIだ!ということで、プロジェクトのディレクトリに移動したところ、geminiコマンドを入れてもなにやらエラーが出て起動できない。
エラー文をブラウザのGeminiに入れて解説してもらうと、どうやらEPERMという権限エラーでそもそもpwdとかの基本的なコマンドすら叩けない状態らしい。
権限がない範囲を調べてみると、DocumentsとかDesktopとか自体に権限がない様子。ただ、Termiusでターミナルに入っているアカウントにはこれらのディレクトリに対し権限が設定されているので、どうもおかしい。
……、ということで、今に至るまで解決していない。スマホでサクサクVibe Codingできている人たちが羨ましすぎるぞ!
いろいろ調べて、考えられる原因と対応結果をリスト化したので置いておきます。
考えられる原因と対応結果
1. ディレクトリの権限設定がおかしい?
→念のため改めて確認したが大丈夫。そもそも自分のDesktopに入れないわけないし。
→自分のやり方が本当にセキュアかはともかく、ターミナルが表示できて一定の操作はできているので、VPNとSSHには問題なさそう。
3. ターミナルにフルディスクアクセスが必要?
→付与したが解決せず
4. sshdにフルディスクアクセスが必要?
→Macのセキュリティで、TCCというのがあり、これが妨げている可能性。出先なので帰ったら試してみます。
(追記、この方法で解決しました。ただし、セキュリティ面が気になったので追加で設定を行いました。→
iPhoneからMac PCのGemini CLIを実行できるようにしたものの、セキュリティ面が気になったので追加設定をした - 生成AIと生きる)
Gemini曰く、↓
次にEPERMエラーの原因について詳しく掘り下げていきましょう。
EPERMエラーの正体
EPERMは、"Operation not permitted"(操作が許可されていません)の略で、UNIX系OS(macOSを含む)で広く使われるエラーコードです。
このエラーは、実行しようとした操作(例:ディレクトリの内容表示、移動、削除など)に対して、現在ログインしているユーザーが十分な権限を持っていない場合に発生します。
この事例では、「特定のディレクトリ(Documentsなど)でのみ発生し、それ以外の場所では問題なく操作できる」という点が非常に重要です。これは、単なる基本的なファイル権限の問題ではなく、macOS特有のセキュリティ機能が原因である可能性が高いことを示唆しています。
エラーの主な原因:TCC (Transparency, Consent, and Control)
DocumentsやDesktop、Downloadsなどのユーザーフォルダにアクセスできない最も一般的な原因は、macOSの**TCC (Transparency, Consent, and Control)**というセキュリティフレームワークです。
TCCとは何か?
TCCは、アプリケーションがユーザーの個人データ(ファイル、写真、連絡先など)にアクセスする際に、ユーザーの明示的な許可を求めるための機能です。
* 目的: 悪意のあるソフトウェアが、ユーザーの気づかないうちに重要な個人情報を盗み見たり、変更したりするのを防ぐためのものです。
* 仕組み:
* アプリケーションが保護されたフォルダ(Documentsなど)にアクセスしようとします。
* macOSはTCCを通じて、そのアプリケーションがアクセス許可を持っているかをチェックします。
* もし許可がなければ、アクセスはブロックされ、EPERMエラーが返されます。
SSH接続の場合のTCC
iPhoneからSSHでMacに接続する際、ターミナルで実行するコマンドは、Mac側のSSHサーバー(sshd)によって処理されます。このsshdは、デフォルトではTCCによる保護されたディレクトリへのアクセス権限を持っていません。
したがって、Documentsディレクトリでls(ファイル一覧表示)やpwd(現在のディレクトリ表示)といった基本的な操作を実行しようとすると、sshdがTCCによってブロックされ、EPERMエラーが発生するのです。
解決策:SSHサーバーに「フルディスクアクセス」を許可する
この問題を解決するには、sshdに対して、保護されたディレクトリへのアクセス権限を明示的に与える必要があります。具体的には、Macのシステム設定でsshdに**「フルディスクアクセス」**を許可します。
以下に手順を解説します。
* Macの**「システム設定」**を開きます。
* 左側のメニューから**「プライバシーとセキュリティ」**を選択します。
* 右側の画面を下にスクロールし、**「フルディスクアクセス」**を見つけてクリックします。
* 画面左下にある南京錠のアイコンをクリックし、Macのパスワードを入力してロックを解除します。
* リストの左下にある**「+」ボタン**をクリックします。
* sshd(SSHサーバー)を追加します。 sshdは通常、アプリケーションフォルダにはなく、システム内部の /usr/sbin/sshd にあります。
* 「アプリケーション」フォルダではなく、キーボードショートカット command + shift + . を使って不可視ファイルを表示し、Macintosh HD → usr → sbin と進んで sshd を探してください。
* または、キーボードショートカット command + shift + G を押して「フォルダへ移動」を開き、/usr/sbin/sshd と入力して移動することも可能です。
* sshdを選択して「開く」をクリックし、リストに追加します。
* リストに追加されたsshdの横にあるトグルスイッチをオンにします。
* 変更を有効にするために、Macを再起動するか、SSHセッションを一度切断して再接続してみてください。
補足: sshd自体を「フルディスクアクセス」に追加するのが難しい場合は、代わりにTerminalアプリをフルディスクアクセスに追加するという方法もあります。SSH接続がTerminalアプリのコンテキストで実行されるため、これで解決する場合があります。ただし、セキュリティの観点から推奨されるのはsshd単体へのアクセス許可です。
まとめ
* 原因: macOSのセキュリティ機能であるTCCが、SSHサーバー(sshd)による保護されたディレクトリ(Documentsなど)へのアクセスをブロックしていたため。
* 解決策: Macの**「システム設定」でsshdに「フルディスクアクセス」**を許可する。
この設定変更により、iPhoneからのSSH接続でDocumentsなどのディレクトリに正常にアクセスできるようになるはずです。