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


Go言語エンジニアのためのWhatsApp連携術:whatsmeow徹底解説

whatsmeow は、Go言語(Golang)で書かれた、WhatsApp Web のマルチデバイス API を扱うためのライブラリです。「マルチデバイス API」というのがポイントで、スマートフォンがオフラインでも機能する、新しいWhatsAppの仕組みに対応しています。つまり、これを使えば、プログラムからWhatsAppのメッセージを送受信したり、アカウント情報を管理したりといった操作が可能になります。


【ソフトウェアエンジニア必見】Dokployで始める自由なデプロイメントの冒険

「Dokploy」は、まさにディズニーランドの隠れたアトラクションのような存在です。Vercel、Netlify、Herokuといった有名どころのサービスをご存知の方も多いと思いますが、それらはまるでビッグサンダーマウンテンやスプラッシュマウンテンのように、手軽に楽しめて、素晴らしい体験を提供してくれます。


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

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


視覚化、Docker、Kubernetes!ソフトウェアエンジニアが知るべきMesheryの剛拳:導入とサンプルコード解説

北斗の拳の世界では、乱世の中で人々が救世主を求めている。クラウドネイティブの世界も、「Kubernetes」という巨大な救世主(?)が来てくれたものの、その設定や管理の複雑さに、多くのエンジニアが「あべし!」と叫んでいる状況なんだ。そんな時に現れたのが、今日の主役、「Meshery」だ!


DockerでWindowsを操る!dockur/windows が開く新境地と活用法

今回は、ちょっぴりスパイ映画のような響きを持つ「dockur/windows」について、その正体を暴き、どのように私たちの開発ライフを助けてくれるのか、秘密の情報をお届けします。「dockur/windows」は、その名の通り、Dockerコンテナの中でWindowsを動かすための、まるで秘密基地のようなツールです。


コントで学ぶ、高性能ベクトルデータベースMilvusの導入と活用法

今日のBBQの主役は、milvus-io/milvus、通称「ミルバス」!「ミルバスって、なんか難しそう…」って思いましたか?大丈夫!BBQに例えれば、ミルバスは「最高の焼き加減を自動で見つけてくれるスマートBBQグリル」みたいなものなんです。


エンタープライズRAG基盤 WeKnora:Go言語で構築する、高速・高信頼なLLM知識検索フレームワークの解剖

今回は、中国の巨大テック企業Tencentが公開している、文書理解・検索・質問応答のためのLLM(大規模言語モデル)活用フレームワーク「Tencent/WeKnora」について見ていきましょう。「え、また新しいLLMフレームワーク?もうお腹いっぱいだよ


WindowsアプリがLinuxで動く!「winboat」がエンジニアの働き方を激変させる

もしあなたが、WindowsとLinuxの両方を使いこなしたい、でも仮想マシンは重くて面倒…、WindowsアプリケーションをLinux上でシームレスに動かしたい…とお考えなら、今日ご紹介するTibixDev/winboatがまさにあなたのためのツールです!


IBM/mcp-context-forge入門:LLMアプリケーション開発を加速する秘訣

まず、大前提として、mcp-context-forgeは、大規模言語モデル(LLM)アプリケーションを開発する際に、その管理を効率化し、開発を円滑に進めるためのツールです。マクドナルドのハンバーガーとケンタッキーのフライドチキンのような関係、という例えについて考えてみましょう。