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とReactが火を吹くぜ!次世代AIペネトレーションテスト「Pentagi」導入ガイド

いいかい、こいつはただの自動化ツールじゃねぇ。「AIのエージェント」が自分で考えて、ハッキング(ペネトレーションテスト)を完結させちまうっていう、とんでもねぇシロモノだ。「すっとこどっこい!人間がポチポチやってる間に、仕事が終わっちまうぞ!」ってな。それじゃ、いってみよう!


Go言語でCLIを楽しく!Bubble Tea入門

やぁ、ソフトウェアエンジニアの皆さん!今日は、Go言語を使ったCLI開発を劇的に楽しくしてくれるフレームワーク「Bubble Tea」について、飲み比べコント風にご紹介しますね。このお酒、見た目は素朴な「ターミナル画面」なんだけど、一口飲むと「わ、これすごい!」ってなるんですよ。


ゲームをどこでも!ラーメン屋に学ぶ「Sunshine」の導入と活用法

想像してみてください。あなたは最高に美味しいラーメンを作る天才的な職人。あなたのラーメン(ゲーム)を求めて、遠くからお客様(Moonlight)がやってきます。お客様 (Moonlight) 「あぁ、あの店のラーメンが食べたい!でも遠いな


脆弱性スキャンツールTrivy入門:開発者のためのセキュリティガイド

これから君たちに、素晴らしい才能を持つ役者を紹介する。その名はTrivyだ。 こいつは、映画のセットで言うところの、「セキュリティ監査の鬼」だ。 君たちが作った最高の作品(コードやコンテナ)に潜む、見えない危険を徹底的に見つけ出すんだ。 ただ見つけるだけじゃない。その危険がどこにあるのか、どうすれば直せるのか、的確に教えてくれる。 君たちの作品を、より安全に、より完璧なものにするために、こいつの演技指導は絶対に必要だ!


LinearやJIRAに負けない操作感!セルフホスト可能なタスク管理の決定版「Plane」とは?

その名も……「Plane(プレーン)」だ! 「JIRAは重いし、Linearはお金がかかるし、あぁ〜!!」ってなっている君、必見だよ!さあ、ミュージック、スタート!はい、まずは屈伸運動から〜! Planeがどうしてすごいのか、3つのポイントで説明するよ!


エンジニアの時短革命:Docker/Kubernetesのベストプラクティスを瞬時に手に入れるテンプレート活用ガイド

ソフトウェアエンジニアリングの世界で「デキる人」になるための秘訣の一つは、「車輪の再発明をしない」ことです。今回ご紹介する「ChristianLempa/boilerplates」は、まさにそれを実現するための強力なツールです。これは、よく使われるインフラ構築・デプロイに関する設定ファイルやコードの「お決まりのひな形(テンプレート)」をまとめたコレクションです。


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

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


ソフトウェアエンジニア必見!Cobraで実現するプロ級Go CLIツール

「コマンドの解析が面倒だ…」 「ヘルプメッセージをいちいち書くのが大変…」 「サブコマンドをうまく管理できない…」もう大丈夫です!そんな悩みとは今日でサヨナラ。 今回は、あなたの開発を劇的にラクにする、魔法のツール「Cobra」をご紹介します!


22世紀のチャット運用術:AstrBotによるマルチプラットフォーム抽象化とエージェント基盤

のび太「ドラえも〜ん!LINEとかDiscordとか、いろんなSNSで動く自分専用のAI秘書を作りたいんだけど、設定が難しすぎて頭がパンクしそうだよ〜!」ドラえもん「やれやれ、のび太くんは相変わらずだね。でも安心しなよ!そんなときのために……(四次元ポケットをガサゴソ)……『AstrBot(アストラ・ボット)』!!」