SVX日記
2026-09-09(Wed) CONGRATURATIONS!! GIL saved KI 15 years after
ここんとこ、あっちもこっちもカユくてたまらんので、どうもプログラミングに熱が入らない。それでもいろいろと薬を試したりするうち、一部の症状は緩和したりで、ドルアーガくらいは起動できるようになった。
改めて「死ぬ前に1コインクリアしときたい」と思ったので、ここんとこカユさを理由に取り組んでいたのだが……
……遂にクリアできた。1コイン3機設定で。いや、長かった。気づけば、ドルアーガに取り組もうと決め、ゲーセンで1コイン5機設定でクリアしてから15年も経っているじゃねーか。
目指すはアンチョコなしオリジナル基板で3機設定での1コインクリアなので、もうちょっと練習したら、天野に出撃するかな。
2026-09-18(Fri) 九頭竜湖、新俣峠ツーリング
九頭竜湖は以前に東に抜けたので今度は西に抜けてみたくて、冠山はトンネルができたのでもう走れないと思っていた岐阜側が走れると知ってのことだ。ところが確保が厳しいと思っていた宿が取れたので、新俣峠もコースに組み入れてみた。以前に南に抜けたので今度は北に抜けてみるのだ。
2026-09-19(Sat) 冠山ツーリング、空飛ぶスマホ
山道をグルっと回ると、九谷ダムというダムを見つけた。天端を走って戻り、駐車場で休憩しながらスマホで次の目的地への経路を設定しようとしていたら……急に左腕のヒジの裏がモゾモゾッと! 慌ててメッシュジャケットを脱いだら黒い虫が飛んでいった。いや、それは反則だって……いつ入ったんだよ。運転中でなくてよかった。つうか、スマホを取り落としてしまった。画面を下に落ちている。アスファルトだしな。画面にキズがついたかもな……
案の定、バイクのスマートモニタともリンクしなくなり、ナビゲーション機能が使えなくなった。スマートモニタにもGPSはあるが、表示されるのは向かっている方角だけだ。なぜか上が東で左が北だが。この調子だと位置を共有しているカミさんに心配されるだろうなぁ。でも、電話しようにも、電話(スマホ)が壊れてるんだからどうしようもない。
地図は概ね頭に入っているが、この先で南下する364号は工事中だったんだよな。案の定しばらく進むと通行止めになっている。迂回路として県道10号の指示があるが、いきなり北上するので不安になって、また元の場所に戻ってしまった。幸い近くに地図があったので見ると、いったん北上して西に抜けるらしい。ナビがないとこうなるのか。それはそれでドキドキで楽しくもあるが。
帰りも細い道はわからないので、看板を頼りに進む。堤防道路に乗ったら揖斐川のそれだった。このまま進めば見知った道に着くだろう。木曽三川公園の先はいつもの道だ。途中、バイクのスマートモニタに電話の着信。なんと、ナビは使えないのに、スマホの電話機能は生きているらしい。んが、インカムとのリンクはダメらしく、スマートモニタに向かって話さねばならない。ロクに会話できずに終了。
今回のツーリングは総額で12,000円くらいだったが、スマホを潰してしまった。ほぼ底辺のスマホなので17,000円程度で買ったものだが、1年ちょっとしか使ってないし、ちょっと痛い。スマホはあまり好きじゃないが、ないのも困るので買わねばならん。結局、壊れたスマホの後継の製品をポチる。珍しく新型なのに16,000円とむしろ安くなっていたが、メモリが半減しているらしい。まぁ、大したアプリ使わんから大丈夫だろう。
2026-09-29(Tue) MCPサーバを立ち上げる
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
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のページが開かれています。
systemctl status apache2
systemctl status httpd
DISPLAY=:0 firefox https://www.yahoo.co.jp &





