事業の内容
kage(影、「shadow」)は、オープンソース(MIT)の純粋なGo製コマンドラインツールで、ウェブサイト全体をすべてのスクリプトを除去した.htmlファイルのプレーンなフォルダに複製する。ページごとにヘッドレスChromeを駆動し、ページが落ち着くまで待ってレンダリング済みDOMをスナップショットし、すべてのscriptタグ、イベントハンドラ、javascript: URLを削除し、CSS、画像、フォントをダウンロードして相対ローカルパスに書き換える。コマンドはclone、serve、pack、openをカバーし、ミラーはZIMアーカイブ(Kiwixの背後にあるオープン形式)にまとめることも、約13 MiBの自己完結型バイナリとコンテンツにまとめて何もインストールせずにサイトをオフラインで配信することもでき、オプションの--appデスクトップビルドとネイティブウィンドウで開くwebviewビルドも用意されている。Chromiumを同梱したghcrコンテナとして、さらにHomebrew、Scoop、apt、dnfパッケージとして提供される。
賭け
ユーザーが求めるのは単一ページではなくサイト全体である。ヘッドレスChromeでレンダリングし、人間が見るDOMをスナップショットし、すべてのスクリプトを除去し、その結果をオフラインで閲覧可能に保つ。
始まり
Duc-Tam Nguyen(tamnd)は、「名前を付けて保存」のよくある失敗からkageを作った。数か月後に保存したページを開くと真っ白になったり、終わらないスピナーが表示されたり、死んだアナリティクスサーバーに依然として通信したりする。同氏はそのページを、決して本当に自分のものではないもの、つまり他人のJavaScriptのためのシンクライアントだと表現し、2026-06-14に「Shadow any website to a single binary for offline viewing」というキャッチコピーでShow HNとしてこのツールを公開した。
起きたこと
スレッドは712ポイント、141コメントで盛り上がった。コメンターはkageをSingleFileと比較し、「名前を付けて保存」との違いを尋ねた。Nguyenは、kageはすべてのサブページを含むウェブサイト全体をミラーする(例としてポール・グレアムのエッセイ全集をオフライン閲覧用に挙げた)のに対し、SingleFileは単一ページをまとめるものだと明確にした。また、クローラー、インデクサー、ストレージ、配信レイヤーを備えたオープンソースの「ゼロからのGoogle」を作るという、より大きな包括的野心にも言及した。Gigazineは2026-07-25にkageを英語で取り上げ、gigazine.bizのDockerクローン、ZIMパッケージ化、0.3.10リリースからビルドした24.4 MiBの単一バイナリWindowsビューアを順を追って説明した。
最終的な結末
2026-09-02時点で、kageは企業も資金提供も持たない、独立したMITライセンスのオープンソースプロジェクトのままである。リポジトリにはパッケージマネージャーによるインストール、Chrome同梱コンテナ、Chrome駆動のエンドツーエンドテストを含む完全なテストスイートが記載されており、ドキュメントサイトkage.tamnd.comは成長を続けている。
「名前を付けて保存」が作るコピーは、マークアップが実行時にJavaScriptで構築される場合、依然として外部に通信したり真っ白にレンダリングされたりする。
SingleFileは単一ページを解決したが、サイト全体のミラーリング、つまり実際のアーカイブのユースケースは、より忠実度の低いツールに委ねられた。
ヘッドレスChromeにより、JavaScriptを除去する前に人間が見るものをミラーが捕捉できる。
ZIMのようなオープン形式は、ユーザーをプロジェクトに囲い込むのではなく、アーカイブを他のツール(Kiwix)で読める状態に保つ。
自己完結型バイナリであれば、受け取る側はミラーを読むために何もインストールする必要がない。
応用できること
まずレンダリングし、次に除去する。人間が見るものをスナップショットしてからランタイムを取り除けば、「名前を付けて保存」のコピーは、誰でもオフラインで開ける耐久性のある成果物になる。
その後
2026-09-02時点で、kageは企業も資金提供も持たない、独立したMITプロジェクトのままである。開発は活発で、クローラーはrobots.txtを読み、sitemap.xmlからシードし、中断した実行を再開し、各URLを一度だけ取得する。パッケージ化は決定的で、ミラー相対パスはアーカイブ内にマッピングされる。リリース自動化はマルチプラットフォームバイナリ、パッケージ、Chrome同梱コンテナ、SBOM、署名を提供する。作者はkageをより大きなオープンソース検索スタックに結び付けている。既知のトレードオフとして、クロールにはChrome/Chromiumが必要で、ZIMパッケージはKiwixの全文インデックスを含まず、バイナリはコンテンツの前に約13 MiBを追加する。
出典をたどる
出典
- tamnd/kage: Shadow any website for offline viewing, with the JavaScript stripped out GitHub · github.com
- Show HN: Kage - Shadow any website to a single binary for offline viewing Hacker News · news.ycombinator.com ·
- 'kage' removes JavaScript from web pages, saves the entire site locally, and allows you to view it offline Gigazine · gigazine.net ·
- About - Duc-Tam Nguyen tamnd.github.io · tamnd.github.io