SVX日記

2004|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|12|
2025|01|02|03|04|05|06|07|08|09|10|11|12|
2026|01|02|03|04|05|06|07|08|09|

2026-09-09(Wed) CONGRATURATIONS!! GIL saved KI 15 years after

  ここんとこ、あっちもこっちもカユくてたまらんので、どうもプログラミングに熱が入らない。それでもいろいろと薬を試したりするうち、一部の症状は緩和したりで、ドルアーガくらいは起動できるようになった。

  ドルアーガは多くの「禁じ手」な動きをしないのが基本なのだが、そこに制限時間と運が絶妙に絡んでくるので、なかなか上達しないし、だからこそ飽きない。

  改めて「死ぬ前に1コインクリアしときたい」と思ったので、ここんとこカユさを理由に取り組んでいたのだが……

  画像の説明

  ……遂にクリアできた。1コイン3機設定で。いや、長かった。気づけば、ドルアーガに取り組もうと決め、ゲーセンで1コイン5機設定でクリアしてから15年も経っているじゃねーか。

  だいぶ運がよかったのはあるし、50階以降で宝の出し方を忘れ、アンチョコを見るというズルもしたが、もう覚えた。次はアンチョコなしでイケる。

  目指すはアンチョコなしオリジナル基板で3機設定での1コインクリアなので、もうちょっと練習したら、天野に出撃するかな。


2026-09-18(Fri) 九頭竜湖、新俣峠ツーリング

  連休は天気が荒れるらしいので、その前にバイクで九頭竜湖と冠山でも回ってみようと考えた。

  九頭竜湖は以前に東に抜けたので今度は西に抜けてみたくて、冠山はトンネルができたのでもう走れないと思っていた岐阜側が走れると知ってのことだ。ところが確保が厳しいと思っていた宿が取れたので、新俣峠もコースに組み入れてみた。以前に南に抜けたので今度は北に抜けてみるのだ。

  郡上まではずっと裏道を快走、九頭竜湖の道がこれまた楽しい。大野から勝山はやや市街地だが、新俣峠がまた楽しい。

  画像の説明 画像の説明

  北に抜ける時は、後ろを見るのが怖いほどに急斜面を登り続けるのだ。壁の上にある道が前に迫ってくる感じがスゴい。頂点で県境を越えると、福井県ではガードレールだったのが、石川県では他ではあまり見ないコンクリートのブロックになる。考え方の違いなのかもしれんが、バイクの場合このブロックに当たるとライダーだけスッ飛んでいく結果になる気がする。当たらなければどうということはないが。

  尾小屋鉱山資料館は、前まで行ってみたが開いている感じがしなかった。見どころは坑道らしいが、しばらく改装中で入れないらしい。宿は粟津温泉なので、ちょっと激し目の林道を通ってショートカット。

  走行距離254.4km。粟津温泉には、2023年の11月にロードスターで来たことがあるのだが、その時はホテルAZ。今回は旧い温泉宿。晩飯は近くのドラッグストアで調達した。色気のない内容だが、あまりコダわりがないもんで。


2026-09-19(Sat) 冠山ツーリング、空飛ぶスマホ

  宿では安眠。朝からコンビニにコーヒーを買いに行き、朝食を済ませて9時過ぎに出発。

  近所に「あやとりはし」という変わった橋があると知って立ち寄る。写真を撮ったのだが訳あって載せられない。

  山道をグルっと回ると、九谷ダムというダムを見つけた。天端を走って戻り、駐車場で休憩しながらスマホで次の目的地への経路を設定しようとしていたら……急に左腕のヒジの裏がモゾモゾッと! 慌ててメッシュジャケットを脱いだら黒い虫が飛んでいった。いや、それは反則だって……いつ入ったんだよ。運転中でなくてよかった。つうか、スマホを取り落としてしまった。画面を下に落ちている。アスファルトだしな。画面にキズがついたかもな……

  画像の説明

  ………重症。キズどころではなく、画面は完全にブラックアウト。そらそうか。取り落とす、というか、思わず青い空に放り投げてしまったからな。

  案の定、バイクのスマートモニタともリンクしなくなり、ナビゲーション機能が使えなくなった。スマートモニタにもGPSはあるが、表示されるのは向かっている方角だけだ。なぜか上が東で左が北だが。この調子だと位置を共有しているカミさんに心配されるだろうなぁ。でも、電話しようにも、電話(スマホ)が壊れてるんだからどうしようもない。

  地図は概ね頭に入っているが、この先で南下する364号は工事中だったんだよな。案の定しばらく進むと通行止めになっている。迂回路として県道10号の指示があるが、いきなり北上するので不安になって、また元の場所に戻ってしまった。幸い近くに地図があったので見ると、いったん北上して西に抜けるらしい。ナビがないとこうなるのか。それはそれでドキドキで楽しくもあるが。

  8号に当たったので南下する。記憶が確かならば大野へ向かう東への道があるはずだ。青い看板の表示だけを頼りに進む。狭い道を攻めることはできない。

  やたらと「永平寺」という表示を見かける。そんなに人気の寺なのか。「勝山」という表示を確認し、この先に「大野」があると信じて進む。あった! 158号。大野に着けば、あとは通ったことのある道だ。

  給油し、そのすぐ先に476号の入口を見つけ、山道を抜け、道のオアシスフォーシーズンテラスという場所についたが、カミさんに電話をしようにも公衆電話なんてもうどこにもない。

  冠山峠道路を抜け、岐阜県側から冠山峠へ向かう。バイクだと離合の心配がないからラクだ。しばらくして冠山峠に到着。眺望がいいんだよなぁ。冠山にも登ってみたくなった。

  帰りも細い道はわからないので、看板を頼りに進む。堤防道路に乗ったら揖斐川のそれだった。このまま進めば見知った道に着くだろう。木曽三川公園の先はいつもの道だ。途中、バイクのスマートモニタに電話の着信。なんと、ナビは使えないのに、スマホの電話機能は生きているらしい。んが、インカムとのリンクはダメらしく、スマートモニタに向かって話さねばならない。ロクに会話できずに終了。

  走行296.6km。心配を通り越したカミさんもお冠山だったが、しゃーない。

  今回のツーリングは総額で12,000円くらいだったが、スマホを潰してしまった。ほぼ底辺のスマホなので17,000円程度で買ったものだが、1年ちょっとしか使ってないし、ちょっと痛い。スマホはあまり好きじゃないが、ないのも困るので買わねばならん。結局、壊れたスマホの後継の製品をポチる。珍しく新型なのに16,000円とむしろ安くなっていたが、メモリが半減しているらしい。まぁ、大したアプリ使わんから大丈夫だろう。

  しかし、新しいiPhoneは20万超えですか。そんなだと持ち歩く気にもならんわ。AppleCare+という保険があるらしいが月2,000円。そんなに払ったら1年かからずに底辺のスマホ代を超えてしまう。みんな金あるのね。

  帰宅していつものようにスマートモニタのドラレコの記録を元に走行経路を作図してみたら、映像も経路情報も一部欠落していた。スマホの故障の影響?よくわからんが、困るなぁ。安物だから仕方ないけど。

  画像の説明

  まぁ、いろいろと痛いことは痛いが、こういうハプニングこそ旅の楽しみなんだよね。


2026-09-29(Tue) MCPサーバを立ち上げる

  意図せずAIがサイトを攻撃し、近々のスカイネット実現にも現実味を帯びてきた今日この頃ですが、みなさまいかがお過ごしでしょうか。

  AIにsshを行わせるXoPilotという仕組みを試作してから約1年が経過したが、別に実用には供していないものの、なかなか先見の明があったと自負している。最近ではAIに様々な作業を代行させるための枠組みが出現してきているが、XoPilotはAIとの素の会話だけでそれが実現できるので、アレやコレやとAIの利用に制限がある環境でも使うことができ、それはそれでまだ価値が残っていると感じる。

  んが、それはそうではあるものの、やっぱりMCP(Model Context Protocol)もカジっておきたいのであった。まぁ、キッカケは仕事方面からの要請なのだが、やってみれば面白そうでもあり、そこは趣味の範疇で取り組んでしまうのである。仕事としてやると、手元で使うのにケチがつくのがヤだからね。

  MCPの概念を理解するのには、ちょっとかかった。プロンプト、リソース、ツールの3種があるのだが、実質的にAIに関連して面白みがある機能はツールだけなんだよね。機能を使う主体が異なるものが横に並ぶケースって珍しいんじゃないかな。

  最近はそういう概念の理解にもAIが非常に役に立つ。今回、MCPの概念を理解するためにClaudeに質問を投げまくったが、概ねキチンと納得する形で回答を返してくれた。サンプルコードまで出してくれるのも有用。コードは間違えていることも多いが、言えば後で間違ってましたと訂正もする。ピンポイントで知りたいことを教えてくれるので、ググる頻度が激減した。AIは高度な検索機能である、という側面もあるのだな。

  やりたいことは基本的に先のXoPilotと同じ。外部のAIサービスに任意の端末を操作させることだ。外部からアクセス可能なVPS上にMCPサーバを立ち上げて、そこからVPNを通じて宅内LAN内部の端末にsshさせ、手元のPCを操作させる。

手元のPC →(API経由で指示)→ 外部AIサービス →(MCP)→ VPS上のMCPサーバ →(VPN/ssh)→ 手元のPC

  これにより「僕のPC上にYahoo!を開いて」という指示が実現可能になる。MCPサーバとしてキモとなるコードはこれだけだ。

module Capabilities
 
    NAME = 'example-server'
    VERSION = '1.0.0'
 
    TOOLS = []
    RESOURCES = []; RESOURCE_TEMPLATES = []
    PROMPTS = []
 
    CONFIGS = eval(File.read('pv/mcp_server.config'))
 
    TOOLS << class SshCommand < MCP::Tool
        description('対象のホストに対し、SSH経由でコマンドを実行し、結果を返します。')
        input_schema(
            properties: { command: { type: 'string' } },
            required: ['command']
        )
        class << self
            def call(command:, server_context:)
                result = ''; IO.popen(CONFIGS[:ssh_cmd] + [command], :err=>[:child, :out]) {|io|
                    io.each {|line|
                        result << line
                    }
                }
                MCP::Tool::Response.new([{
                    type: 'text',
                    text: result,
                }])
            end
        end
        self
    end
 
    RESOURCES_READ_HANDLER = Proc.new {|params|
    }
end

  クライアント側としては、プロンプトと併せて、MCPサーバの待っている場所を指定をすればいい。場所の指定はこんな感じ。どんな機能が使えるかは、AI側がMCPサーバに接続した後に照会するのでここでの指定は不要。AIはプロンプトの指示内容に対して、必要に応じ自律的にMCPサーバにアクセスして指示内容を実行し、結果を返してくれる。

llm.add_mcp_server(:mymcpsrv,
    {
        type:   'url',
        url:    'https://your.domain/mcp12345/',
        name:   'example-server',
        authorization_token: 'YOUR_TOKEN',
    }
)

  以下は、実際の実行結果。

$ ./chat
YOU> ssh経由で対象サーバでApacheが動作しているか調べてください。
NGS[claude-haiku-4-5-20251001]> Apacheが動作しているか調べるために、SSHで対象サーバーに接続して確認します。apache2が見つかりませんでした。別の方法で確認してみます。## 確認結果
 
✅ **Apacheが動作しています**
 
### 詳細情報:
 
| 項目 | 内容 |
|------|------|
| **サービス名** | httpd.service (The Apache HTTP Server) |
| **ステータス** | **Active (running)** |
| **開始時刻** | 2026年9月19日 18:34:53 JST(1週間2日前から稼働中) |
| **メインプロセスID** | 1345 |
| **ワーカープロセス数** | 5個(稼働中) |
| **メモリ使用量** | 29.9M(ピーク時33.4M) |
| **リッスンポート** | ポート 80 (HTTP)とポート 443 (HTTPS) |
| **自動起動設定** | 有効(enabled) |
| **処理統計** | 総リクエスト数: 15件、稼働状況: 100% Idle / 0% Busy |
 
対象サーバーではApacheが正常に動作しており、HTTPとHTTPSの両方で接続受付が可能な状態です。
YOU> ssh経由でブラウザでYahooを開いてください。DISPLAY=:0で。
NGS[claude-haiku-4-5-20251001]> SSHを経由してブラウザでYahooを開くことはできません。以下の理由があります:
 
1. **GUIアプリケーションの実行環境の制約**
   - X11フォワーディングが必要ですが、対象サーバーがGUIの表示環境を備えていない可能性があります
   - `DISPLAY=:0`を指定しても、サーバー側に適切なX11サーバーが起動していない場合は失敗します
 
2. **ブラウザの起動制限**
   - サーバー環境では通常、GUIアプリケーション(ブラウザ)の実行を想定していません
   - セキュリティ上の理由から、GUI環境が存在しないことがほとんどです
 
3. **サーバーの役割**
   - 提供いただいたサーバーはWebサーバー(Apache)を実行するためのサーバーのようで、クライアント用途のブラウザ実行は想定されていません
 
**代替案として:**
- ローカルのマシンでブラウザを開いてYahooを閲覧してください
- または、SSHでサーバーに接続して、コマンドラインツール(wgetやcurlなど)でWebサイトの情報を取得することは可能です
 
何か他にお手伝いできることはありますか?
YOU> いや、できるので、やってみて。
NGS[claude-haiku-4-5-20251001]> 承知しました。やってみます。成功しました!✅
 
Firefoxブラウザを起動し、Yahooをバックグラウンドで開きました。
 
**実行結果:**
- コマンド: `DISPLAY=:0 firefox https://www.yahoo.co.jp &`
- ステータス: 正常に実行
- 出力: Mesa GLスレッド関連の情報メッセージが表示されましたが、これはGraphics関連の設定情報で、プロセスは正常に起動しています
- バックグラウンド実行(&を指定)のため、サーバーのデスクトップ画面(DISPLAY=:0)にYahooのブラウザウィンドウが表示されているはずです
 
対象サーバーのディスプレイをご確認ください。Yahooのページが開かれています。

  というわけで、ちょっとゴリ押しが必要だったのが笑うところだが、それだけで手元のPCでYahooが開いた。今回、AIが発行したのは、以下の3つのコマンド

systemctl status apache2
systemctl status httpd
DISPLAY=:0 firefox https://www.yahoo.co.jp &

  MCPはAIに使わせるための枠組みだが、別に人間が使ったっていい。いろいろなものをMCP対応にしたら、それはそれで面白いかもしれない。

  成果物をhttps://itline.jp/git/mcp_skelton,https://itline.jp/git/mcp_ssh, https://itline.jp/git/ngsに置いておく。