DockerとGoで実現!遠隔操作ブラウザ「ネコ」があなたの開発を変える


DockerとGoで実現!遠隔操作ブラウザ「ネコ」があなたの開発を変える

m1k1o/neko

2025-07-27

やあ、諸君! プロのソフトウェアエンジニアである君なら、きっと「もっと自由に、もっと安全に、ウェブの向こう側を覗き見たい」なんて考えたことがあるはずだ。まるでルパン三世がどんな厳重なセキュリティも掻い潜るようにね。今日紹介するのは、そんな君の願いを叶えるかもしれない、とびきりのツール「m1k1o/neko」、通称「ネコ」だ。

「ネコ」は、ルパン一味がどこかの隠れ家に秘密基地を構えるように、君自身のサーバーに仮想ブラウザを構築できる代物なんだ。しかも、ただのブラウザじゃない。Dockerでサッと起動できて、中ではGo言語がキビキビと動き、遠く離れた場所からでもWebRTCを使ってリアルタイムで操作できる。これって、まるで不二子ちゃんがルパンの代わりに現場の状況を遠隔操作で確認するようなもんだろ?

「ネコ」がソフトウェアエンジニアの君にとって、どんなお宝になるのか、いくつか例を挙げよう。

安全なサンドボックス環境でのブラウジング
怪しげなサイトを調査するとき、あるいは未知のウェブサービスを試すとき、君のPCを危険に晒したくないだろう? 「ネコ」は隔離された環境でブラウザを動かすから、万が一マルウェアに感染しても君のシステムには影響がない。まるで、ルパンが偽のターゲットを使って敵の罠をあぶり出すかのようだ。

Webスクレイピングの高度化
特定のウェブサイトから情報を収集したいけど、IPアドレス制限やボット対策に悩まされることがあるだろう。「ネコ」を使えば、プロキシと組み合わせたり、異なるIPアドレスからアクセスしたりといった工夫がしやすくなる。まさに、銭形のとっちゃんを欺くルパンの変装術に近い。

自動化されたE2Eテスト
ウェブアプリケーションのテストって、手動でやるのは骨が折れるし、毎回同じ結果になるとは限らない。「ネコ」はプログラムから操作できるから、GUI操作を含むE2Eテストを自動化できる。何度も同じ潜入を繰り返すのではなく、事前に計画された自動的な潜入で確実に目的を達成するイメージだ。

プライバシー保護の強化
自分のIPアドレスやブラウザのフィンガープリントを晒したくない場面もあるだろう。「ネコ」を使えば、君の本当の素性を隠し、まるで別人がアクセスしているかのように見せかけることができる。これは、ルパンがその姿をくらますのに長けているのと一緒だ。

遠隔でのデモンストレーション
開発中のウェブサービスを遠方のクライアントに見せたいとき、VPNや複雑な設定は避けたいもの。「ネコ」を使えば、ブラウザの画面を共有するだけで、どこからでもアクセス可能なデモ環境を提供できる。次元と五ェ門が連携して、離れた場所からでもルパンをサポートするかのようだね。

導入は驚くほど簡単だ。まるで、ルパンが最新の金庫を破るように、数行のコマンドで完了する。

まずは、Dockerが君のサーバーにインストールされていることを確認してくれ。Dockerがなければ、話にならない。まだなら、公式ドキュメントを参考にしてインストールしておこう。

君のターミナルを開き、以下の呪文を唱えるだけだ。

docker run -d \
  --name neko \
  --shm-size=2gb \
  -p 8080:8080 \
  -e NEKO_SCREEN="1920x1080@30" \
  -e NEKO_PASSWORD="your_super_secret_password" \
  m1k1o/neko:latest

一つずつ解説しよう。

docker run -d
「ネコ」をバックグラウンドで起動する、という意味だ。これで君は他の作業に集中できる。

--name neko
コンテナに「neko」という名前をつける。ルパン一味がアジトに名前をつけるようなもんだ。

--shm-size=2gb
ブラウザがスムーズに動作するために、共有メモリを2GB確保する。

-p 8080:8080
君のサーバーの8080番ポートを、「ネコ」の8080番ポートに接続する。これが、外界からアジトにアクセスするための入り口だ。

-e NEKO_SCREEN="1920x1080@30"
仮想ブラウザの解像度を1920x1080ピクセル、フレームレートを30fpsに設定する。ここはお好みに合わせて調整してくれ。

-e NEKO_PASSWORD="your_super_secret_password"
「ネコ」にアクセスするためのパスワードだ。絶対に君だけの秘密のパスワードを設定してくれ! ルパンが隠し金庫のパスワードを教えないのと同じだよ。

m1k1o/neko:latest
「ネコ」の最新版イメージを使う、という指定だ。

このコマンドを実行したら、ブラウザで http://君のサーバーのIPアドレス:8080 にアクセスしてみな。先ほど設定したパスワードを入力すれば、もう君は「ネコ」の世界に足を踏み入れている!

さて、ただブラウザを動かすだけなら、普通のブラウザと変わらない。ここからが「ネコ」の真骨頂だ。君のプログラムから「ネコ」を操る方法をいくつか紹介しよう。

「ネコ」はWebRTCを使ってブラウザの画面をストリーミングし、操作するためのWebSocket APIを提供している。これにより、様々な言語から操作が可能になる。ここではGo言語を使った簡単な例を示すが、原理は他の言語でも応用できるはずだ。

これは、君のプログラムが「ネコ」に接続し、特定のウェブページを開いてスクリーンショットを撮る例だ。

package main

import (
	"context"
	"fmt"
	"log"
	"time"

	"github.com/go-rod/rod" // RodはHeadless Chromeを操作するためのGoライブラリ
)

func main() {
	// 「ネコ」のURLに接続 (環境に合わせて適宜変更してください)
	browser := rod.New().ControlURL("ws://localhost:8080/webrtc").MustConnect()
	defer browser.MustClose() // 終了時にブラウザを閉じる

	// 新しいページを開く
	page := browser.MustPage("https://www.google.com").MustWaitLoad()

	// 5秒待機 (ページが完全にロードされるのを待つため)
	time.Sleep(5 * time.Second)

	// スクリーンショットを撮影
	if err := page.MustScreenshot("google_screenshot.png"); err != nil {
		log.Fatalf("スクリーンショットの撮影に失敗しました: %v", err)
	}

	fmt.Println("スクリーンショットを撮影しました: google_screenshot.png")
}

このコードを実行するには、go-rod/rod ライブラリが必要だ。以下のコマンドでインストールできる。

go get github.com/go-rod/rod

解説

rod.New().ControlURL("ws://localhost:8080/webrtc").MustConnect()
ここがポイントだ。Rodライブラリを使って、「ネコ」のWebRTCエンドポイントにWebSocket接続している。これにより、Rodが通常のHeadless Chromeを操作するのと同じように、「ネコ」内のブラウザを操作できるんだ。

browser.MustPage("https://www.google.com").MustWaitLoad()
Googleのページを開き、完全にロードされるのを待っている。

page.MustScreenshot("google_screenshot.png")
開いたページのスクリーンショットをgoogle_screenshot.pngというファイル名で保存している。

これで君は、プログラムから「ネコ」の仮想ブラウザを操り、ウェブの情報を捕らえることができるようになったわけだ。

「ネコ」は、君のソフトウェア開発に新たな自由と可能性をもたらす、まさに切り札のようなツールだ。安全な環境での実験、自動化されたテスト、プライバシーを保護した情報収集など、その使い方は君の想像力次第で無限に広がる。


m1k1o/neko




Dockerだけじゃない!Moby Projectで自作コンテナ環境を構築する

Moby Project ってのはな、一言で言うと「コンテナをベースにしたシステムを作るための、オープンソースのツールキット」だ。例えるなら、俺たちが事件現場で使う道具一式、例えば手錠とか懐中電灯とか、そういうのを全部まとめて提供してくれるようなもんだな。


もう怖くない!幽霊エンジニアも愛用するTermixの正体

「へっへっへっ. ..。兄ちゃん、度胸あるねぇ。こんな夜更けにお化け屋敷とは. ..。ま、せいぜい楽しんでってくれよ!」不気味な声が響き、目の前には怪しげな提灯がゆらゆら揺れている。ここはお化け屋敷。肝試しに来たはいいものの、なんだか本物のお化けが出そうで、足がすくむ。


社内ドキュメントが宝の山に。Yuxi-Knowで実現する構造化ナレッジ共有の未来

これ、エンジニアから見ると「かゆいところに手が届く」かなり贅沢な構成なんです。美容院で例えるなら、カット(LLM)だけでなく、極上のトリートメント(RAG)と頭皮ケア(グラフDB)がセットになったフルコースメニューのようなものですね。それでは、さっそく解説していきます!


面接官を唸らせる!ローカル完結型PDFツール「Stirling-PDF」徹底解説

面接官本日は当社の面接にお越しいただき、ありがとうございます。面接官の山田と申します。あなた本日は貴重な機会をいただき、誠にありがとうございます!エンジニアの佐藤と申します!面接官佐藤さん、今日は何かユニークな技術について、ご自身の言葉でプレゼンしていただきたいのですが、よろしいでしょうか?


もう悩まない! Go言語からRedisを使うためのベストパートナー「Redis Goクライアント」

そうですね、彼女がたくさんの水着の中から、どれが一番自分に似合うか、海辺で輝けるかを悩むように、私たちソフトウェアエンジニアも、たくさんのライブラリの中から、どのツールがプロジェクトに最適か、効率的に開発できるかを悩むことがあります。今回は、その悩みを解決してくれる頼もしい相棒の一つ、Redis Go clientについて、彼女の水着選びをサポートする優しい彼氏のように、分かりやすく丁寧に解説していきますね!


妹が教える!エンジニアのためのOllama活用術

ねえねえ、最近流行りの「Ollama」って知ってる?お兄ちゃんの好きそうな、めちゃくちゃ便利なツールなんだよ!Ollamaはね、お兄ちゃんのパソコンで、いろんなAIモデルを簡単に動かせるようにしてくれるすごーいツールなんだ!今までだと、AIモデルを使おうと思ったら、いろいろ難しそうな設定をしなきゃいけなかったり、パソコンの性能が足りなかったりしたんだけど、Ollamaを使えば、そんな心配はほとんどいらなくなるんだって!


「太陽光でタダ充電」を叶えるEVCCの仕組み:ソフトウェアエンジニアが解説する設定と互換性

ここでご紹介する evcc-io/evcc は、まさにその悩みを解決してくれる、ソフトウェアエンジニアから見て「これは使える!」と思える素晴らしいオープンソースプロジェクトです。evcc("Electric Vehicle Charge Controller"の略)は、電気自動車(EV)の充電を賢くコントロールするためのエネルギー管理システムです。


北斗の拳に学ぶ:winappsがもたらす開発環境の革命

北斗の拳の世界観になぞらえて、winappsを解説していきますね。北斗の拳の世界では、強敵(とも)と戦うために、さまざまな技を駆使しますよね。ソフトウェア開発の世界でも、WindowsとLinuxという二つの異なるOSの間で、それぞれの強みを生かし、弱点を克服することが求められることがあります。


「整理・計画・効率化」の三拍子、Tandoor Recipesを使いこなそう

今回は、レシピ管理ツール「Tandoor Recipes」について、ソフトウェアエンジニアの視点からその魅力や活用方法を解説していきます。一言で言うと、レシピの管理、献立の計画、買い物リストの作成などを一括でできる多機能なウェブアプリケーションです。


現役エンジニア魔法少女が解説する「バイトボット」入門

今日は、最強の魔法ツール「バイトボット」について、ソフトウェアエンジニアの視点から、その秘密と使い方を特別に教えちゃうよ!バイトボットは、あなたのパソコンを自動で動かしてくれる、賢い魔法の使い魔みたいなもの。物語の始まりは、いつも忙しいソフトウェアエンジニアの魔法少女。バグ退治や新しい魔法の開発で毎日てんてこまい。