生成AIと生きる

生成AIによって、人の一生というのはどうなってしまうのか

遅まきながら、gemini code assistのエージェントモードを使ってみる

今更、gemini code assistのエージェントモードを使い始めました。とてもいい。簡単めな課題からやってもらっていますが、今のところトンチンカンな挙動もなくとても快適です。コーディング以外にも、仕様書のアップデートや仕様検討などにも使えています。ノーマルモードと実行時間もそこまで変わらない体感なので、正直ノーマルモードを使う意味は特にないかもしれない。ファイルの上書きなども、こちらから設定しなければ勝手に書き換えたりはしないのでそこも安心。ノーマルモードを使っている時は、課題を解決するために必要なステップをこちらで切り分けて、1つずつ質問していくスタイルに自然となっていましたが、エージェントモードだとある程度丸投げしても大丈夫な感じがします。ただ、問題が複雑になってきた時にどうかは未検証です。

geminiはコーディング以外でも大変お世話になっていて、Google AI Proプランを契約しているので、追加料金なしにそのサブスクをコーディングに活かせるのも嬉しい点。無料プランでも十分なクレジット数があるとはいえ、エージェントモードでは複数回の呼び出しが行われるようなので、クレジット消費が激しいのかも?(このあたりも未検証)

ただ、これはエージェントモード以前の問題ですが、やはり個人開発でもgit管理は必須な時代だと思いました。突然頓珍漢な実装をされたり、バグを仕込まれたりする可能性は否定できないので、いつでも正常に動作していた地点に切り戻せるようにしておくことは必須。別にgithubにアップする必要はないので、ローカルでgit管理しておくと良いと思います。

gemini2.5flashに仏教の教義史を聞く

gemini2.5flashに仏教の教義史について、やや詳しく聞いた。専門外なので正しいか判断つかないが、そこまでトンチンカンなことは書いてないようにも見える。中観派唯識思想など、全体像がよくわかっていなかったので勉強になった。以下がチャット履歴のリンク

https://gemini.google.com/share/a8d51ac77b8f

Gemini3.0出るの?

Geminiユーザーなのでわくわく。nano-bananaも搭載されるとのウワサ。

とはいえ、Gemini2.5の時点で既に大した不満はなくなっているので、これ以上何をアプデするのか?という感もある。Gemini Liveの会話の間が合わないとかそういうのか?ASIに近づくにつれ、人間には違いがわからなくなる(知能が高度すぎて)という話があるが、どこまで高度な知能を使いこなせるか試されている感もある。そこにこそ人類の知を総結集するみたいな展開になってくるかもしれない。人類の願う力は常にアバウトなので、要件を固めたりうまく分解したりするプロセスをうまく操れるようになるといいかも?SEの人にはいい時代になるかもしれない。

iPhoneからMac PCのGemini CLIを実行できるようにしたものの、セキュリティ面が気になったので追加設定をした

前回記事がこちら。

MacのGemini CLIをiPhoneからリモートアクセスしようとして、EPERMエラーでどん詰まりしている(→解決済) - 生成AIと生きる

 

みんなスイスイ設定できていそうだったのに、かなり苦労したぞ。ただ、とりあえずスマホからもVibe Codingできるようにはなった。

ただ、sshdというよくわからないものにフルディスクアクセスを与えるという解決策は、セキュリティ的に大丈夫なんだろうか?という疑問が生じた。なので、GeminiにVPNSSHの仕組みを改めて解説してもらって、対策を講じてもらった。

曰く、

  • Tailscale(VPN: インターネットという危険な荒野に、Mac PCとiPhoneを安全につなぐ「秘密の抜け道」を作ります。ACLは、この抜け道の入り口にある「検問所」として機能し、誰が通っていいかを管理します。

  • Termius(SSHクライアント): 抜け道を通って城(Mac)に入り、城主(あなた)の代わりに「合言葉(認証情報)」を使って門番に挨拶し、リモートで指示を伝える「伝令官」です。Termiusは、この認証手続きを安全かつ簡単に自動化します。

で、

sshdにフルディスクアクセスを許可するという行為は、この「誰」にあたるプロセス(sshd)に、城のすべての財産(全ファイル)にアクセスする権限を与えることを意味します。

  • Tailscaleの役割: 荒野を通る際に、伝令官(Termius)が盗賊に襲われないように守ります。

  • SSHの役割: 伝令官が城の中に入った後、金庫(Documentsフォルダ)を開ける権限を与えるかどうかを決めます。

たとえ、Tailscaleという安全な道を通ってきたとしても、もし伝令官が偽物だったり、合言葉が盗まれてしまったりすれば、城の中のすべての財産が危険に晒されてしまいます。これが、sshdにフルディスクアクセスを許可する際のセキュリティ上の懸念の本質です。

だからこそ、パスワード認証を無効化して鍵認証にしたり、TailscaleのACLで接続元を厳密に制限したりといった、「誰」にアクセスを許可するかを厳格に管理することが極めて重要になります。

とのこと。すごくわかりやすい!

 

ということで、以下の2つを実施しました。

 

1. Tailscaleのデバイス制限を追加

自分のアカウントでログインしているデバイスのみをVPNアクセス可能にしました。

2. TermiusのSSHの認証を鍵認証に変更

デフォルトだとパスワード認証になっている?っぽかったので、改めて鍵を発行して鍵認証に変更しました。

3.Mac PCのSSHでパスワード認証を無効化

パスワード認証を受け付ける設定をnoにし、鍵認証の場合のみSSHを利用可能にしました。

 

うまく設定できているのかよくわからんが……。これで少しはセキュアになったかな?

MacのGemini CLIをiPhoneからリモートアクセスしようとして、EPERMエラーでどん詰まりしている(→解決済)

みんなやっていて面白そうだったので、自分もスマホからVibe Codingやるか!ということで、

いろいろな記事に解説のある通り、iPhone→Tailscale(VPN)→Mac pcで接続を確立し、Termius(SSH)でターミナルを表示するところまではスムーズに来た。

いよいよGeminiCLIだ!ということで、プロジェクトのディレクトリに移動したところ、geminiコマンドを入れてもなにやらエラーが出て起動できない。

エラー文をブラウザのGeminiに入れて解説してもらうと、どうやらEPERMという権限エラーでそもそもpwdとかの基本的なコマンドすら叩けない状態らしい。

権限がない範囲を調べてみると、DocumentsとかDesktopとか自体に権限がない様子。ただ、Termiusでターミナルに入っているアカウントにはこれらのディレクトリに対し権限が設定されているので、どうもおかしい。

 

……、ということで、今に至るまで解決していない。スマホでサクサクVibe Codingできている人たちが羨ましすぎるぞ!

 

いろいろ調べて、考えられる原因と対応結果をリスト化したので置いておきます。

 

考えられる原因と対応結果

1. ディレクトリの権限設定がおかしい?

→念のため改めて確認したが大丈夫。そもそも自分のDesktopに入れないわけないし。

 

2. VPNとかSSHで何かしくじっている?

→自分のやり方が本当にセキュアかはともかく、ターミナルが表示できて一定の操作はできているので、VPNSSHには問題なさそう。

 

3. ターミナルにフルディスクアクセスが必要?

→付与したが解決せず

 

4. sshdにフルディスクアクセスが必要?

Macのセキュリティで、TCCというのがあり、これが妨げている可能性。出先なので帰ったら試してみます。

(追記、この方法で解決しました。ただし、セキュリティ面が気になったので追加で設定を行いました。→

iPhoneからMac PCのGemini CLIを実行できるようにしたものの、セキュリティ面が気になったので追加設定をした - 生成AIと生きる

 

Gemini曰く、↓

 

次にEPERMエラーの原因について詳しく掘り下げていきましょう。


EPERMエラーの正体
EPERMは、"Operation not permitted"(操作が許可されていません)の略で、UNIX系OSmacOSを含む)で広く使われるエラーコードです。
このエラーは、実行しようとした操作(例:ディレクトリの内容表示、移動、削除など)に対して、現在ログインしているユーザーが十分な権限を持っていない場合に発生します。
この事例では、「特定のディレクトリ(Documentsなど)でのみ発生し、それ以外の場所では問題なく操作できる」という点が非常に重要です。これは、単なる基本的なファイル権限の問題ではなく、macOS特有のセキュリティ機能が原因である可能性が高いことを示唆しています。


エラーの主な原因:TCC (Transparency, Consent, and Control)
DocumentsやDesktop、Downloadsなどのユーザーフォルダにアクセスできない最も一般的な原因は、macOSの**TCC (Transparency, Consent, and Control)**というセキュリティフレームワークです。


TCCとは何か?
TCCは、アプリケーションがユーザーの個人データ(ファイル、写真、連絡先など)にアクセスする際に、ユーザーの明示的な許可を求めるための機能です。
* 目的: 悪意のあるソフトウェアが、ユーザーの気づかないうちに重要な個人情報を盗み見たり、変更したりするのを防ぐためのものです。
* 仕組み:
* アプリケーションが保護されたフォルダ(Documentsなど)にアクセスしようとします。
* macOSTCCを通じて、そのアプリケーションがアクセス許可を持っているかをチェックします。
* もし許可がなければ、アクセスはブロックされ、EPERMエラーが返されます。


SSH接続の場合のTCC
iPhoneからSSHMacに接続する際、ターミナルで実行するコマンドは、Mac側のSSHサーバー(sshd)によって処理されます。このsshdは、デフォルトではTCCによる保護されたディレクトリへのアクセス権限を持っていません。
したがって、Documentsディレクトリでls(ファイル一覧表示)やpwd(現在のディレクトリ表示)といった基本的な操作を実行しようとすると、sshdTCCによってブロックされ、EPERMエラーが発生するのです。


解決策:SSHサーバーに「フルディスクアクセス」を許可する
この問題を解決するには、sshdに対して、保護されたディレクトリへのアクセス権限を明示的に与える必要があります。具体的には、Macのシステム設定でsshdに**「フルディスクアクセス」**を許可します。
以下に手順を解説します。
* Macの**「システム設定」**を開きます。
* 左側のメニューから**「プライバシーとセキュリティ」**を選択します。
* 右側の画面を下にスクロールし、**「フルディスクアクセス」**を見つけてクリックします。
* 画面左下にある南京錠のアイコンをクリックし、Macのパスワードを入力してロックを解除します。
* リストの左下にある**「+」ボタン**をクリックします。
* sshdSSHサーバー)を追加します。 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などのディレクトリに正常にアクセスできるようになるはずです。

サービス仕様書を使ったバイブコーディング/新幹線でバイブコーディング

今日もちびちびバイブコーディングしてました。やっぱりある程度のところでサービス仕様書作らせて、コンテキスト変わったら読み込ませるのが安定感ありますね。Gemini CLIもちょっと長くなると挙動不安定になるし。

 

ちなみに先日新幹線でバイブコーディングをやってみたところ、電波が悪いせいかGemini CLIもGemini Code Assistもエラー吐きまくりでびっくり。安定した電波環境が意外と重要なのかも。

#keep4o とAIの顔について

AIに人間の顔を幻視できるか、ということが個人的な定点観測ポイントの一つなんですが、Twitterで話題の#keep4o という動きを見る限り、それにかなり近い地点にAIは到達しているらしい。喪失感を感じられる、ということはね。

顔ってなんじゃいな、という話ですが、AIが作った音楽に心を動かされるためには、「顔が見える」ことが要件としてあると思っていて、つまり、作り手のパーソナリティだったり、表情だったり、ということが一貫性を持ったニュアンスとして伝わってくるか、ということが非常に大事だと思います。そのイメージが「顔」という語のニュアンスです。

人格らしきものや、固有のニュアンスを感じているからこそ、モデルが変わったタイミングで喪失感を味わえるわけで。

 

この件を踏まえて、AIを売るためには、みたいな話も多々出ていますが、そんなチャチな話ではないと思うよ。AIと人間の関わりが大きく切り替わるタイミングであり、ひいては人間の生き方がAIによってすっかり変えられてしまう、その瞬間に我々は居合わせているという。それがどう帰結するかはわかりませんが。宗教の復活なのか、自然の逆襲なのか。人間とAIが相互に幸せな関係を結べるといいんですけど。