Show HN: Kage(ケーヂ)——あらゆるウェブサイトを手元で単一のバイナリ化してオフライン閲覧可能にします。

2026/06/15 2:25

Show HN: Kage(ケーヂ)——あらゆるウェブサイトを手元で単一のバイナリ化してオフライン閲覧可能にします。

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

Kage は、headless Chrome によるレンダリング後、複雑な JavaScript を除去し資産をローカライズすることで、動作的 Web サイトを完全オフラインアクセス用に複製することを目的とした、強力なオープンソースコマンドラインユーティリティです。このプロセスは、ライブサイトを静的で閲覧可能なフォルダまたは Kiwix エコシステムと互換性のあるポータブル ZIM ファイルに変換し、研究者や旅行者にとって信頼性の高いデータアーカイブの必要性に応えるのに最適です。本ツールは Kiwix エコシステムとシームレスに統合され、標準的なリーダーと互換性のあるポータブル ZIM ファイルを容易に生成することを可能にします。インストール方法は柔軟で、バイナリ、Docker コンテナ、および自己完結型フォーマットをサポートし、異なるシステム上の依存関係の問題を排除します。ユーザーは

clone
serve
のようなコマンドを使用して複製の範囲を制御でき、資源使用量を管理しつつ Web クローリングの規範を遵守するように
--max-pages
などの設定を調整できます。Kage は MIT ライセンスによるオープンソースライセンスと礼儀正しい幅優先アプローチを採用することで、現代の Web アプリケーションの包括的なオフラインライブラリを作成する際の産業全体の採用を促進しており、アクセシビリティやパフォーマンスを犠牲にすることなく実現します。

本文

Kage: オフラインで使えるウェブサイトのアーカイブツール

Kage は、ウェブサイトをローカルフォルダに保存し、オフラインで閲覧できるようにするツールです。JavaScript コードを実行せずとも、実在のブラウザ(ヘッドレス Chrome)によってレンダリングされた状態をスナップショットとして取得します。その結果、コードは一切実行されずとも、サイトが正常に表示される HTML ファイルとしてディスク上に保存されます。


目次


インストール

バイナリからのインストール

基本的には以下コマンドを実行します:

go install github.com/tamnd/kage/cmd/kage@latest

注意: 事前に構築されたバイナリ(.deb, .rpm, .apk)や Docker コンテナを使いたい場合は、公式リリースページ を確認してください。

Docker コンテナでの利用

Chrome を別途インストールせずに使用したい場合は、以下のコマンドで実行可能です:

docker run --rm -v "$PWD/out:/out" ghcr.io/tamnd/kage clone paulgraham.com

Kage は実際のブラウザを動作させるため、ホストマシンに Chrome または Chromium がインストールされている必要があります。指定場所を使用したい場合は

--chrome
オプションまたは
KAGE_CHROME
環境変数を利用します。コンテナイメージの場合は追加設定不要です。

シェル補完もパッケージに含まれています:

kage completion bash|zsh|fish|powershell

素早く始める

Paul Graham のエッセイをオフラインで保存・閲覧してみましょう(飛行機上や、Wi-Fi が使えない環境でも)。

手順 1: サイトのクローン

kage clone paulgraham.com

手順 2: オフライン閲覧

クローンされたフォルダをローカルサーバーとして起動します:

kage serve $HOME/data/kage/paulgraham.com

ブラウザで

http://127.0.0.1:8800
を開くと、ゼロのネットワーク接続でも完全に動作します。

手順 3: オプション操作(単一ファイル化)

ファイルを圧縮して持ち運びやすくしたい場合は以下のコマンドを使用します:

kage pack paulgraham.com               # -> paulgraham.com.zim
kage open paulgraham.com.zim

手順 4: オプション操作(自立型バイナリ化)

実行可能な単一ファイルとして作成することも可能です:

kage pack paulgraham.com --format binary -o paulgraham
./paulgraham                           # サーバーを立てずとも動作

コマンド一覧

コマンド説明
kage clone <url>
ヘッドレス Chrome でサイトをレンダリングし、スクリプトを除去した閲覧可能な鏡像を書き出します。
kage serve [dir]
クローンされたフォルダを静的ファイルサーバーとしてプレビュー表示します(ポート 8800)。
kage pack <mirror-dir>
鏡像を単一の ZIM アーカイブ、または自立型のビューアーバイナリに圧縮します。
kage open <file.zim>
パッキングされた ZIM ファイルを Kage または Kiwix で読み込めます。

クローン作成

基本的な使用方法とオプションです。

基本コマンド

# サイト全体をクローン
kage clone https://paulgraham.com

# 最初の 50 ページのみ(2 リンク深さ)を取得(試す用途)
kage clone paulgraham.com --max-pages 50 --max-depth 2

# より大きなサイトの一部分だけを取得
kage clone go.dev --scope-prefix /doc

# サブドメインも取得し、自動スクロールで遅延読み込み画像をトリガー
kage clone example.com --subdomains --scroll

# 新しいコンテンツ(例:新しいエッセイ)が追加されたら再レンダリング
kage clone paulgraham.com --refresh

クローンの仕組み

  • 礼儀正しい crawl:
    robots.txt
    を読み込み、指定範囲内で動作します。
  • 冪等性 (Idempotent): 同じページは一度だけ取得されます(URL のプロトコルやスラッシュの有無に依存しません)。
  • 中断復旧:
    Ctrl-C
    で中断しても、再度実行すると中断箇所から再開します。
    --refresh
    は再レンダリングし、
    --force
    は一切をリセットします。

頻繁に使われるフラグ一覧

フラグデフォルト意味
-o, --out
$HOME/data/kage
出力ルートディレクトリ
-p, --max-pages
0
クローンする最大ページ数(0 = リミットなし)
-d, --max-depth
0
フォローするリンクの深さ(0 = リミットなし)
--scope-prefix
``クロール対象のパスプレフィックスを指定
--subdomains
false
シードホストのサブドメインもクロールするか
--exclude
``クロールしないパスプレフィックス(複数可)
--scroll
false
各ページを自動スクロールして遅延読み込みをトリガー
--workers
4
並列でレンダリングするワーカー数
--no-robots
false
robots.txt を無視
-f, --force
false
既存の鏡像フォルダを削除して再作成
--chrome
``Chrome/Chromium の実行ファイルパス指定

詳細オプションは

kage clone --help
で確認できます。


パッキング(単一ファイル化)

クローンされたフォルダは閲覧には適していますが、移動や共有には不便です。数千のファイルをコピーするよりも、単一のアーカイブまたは実行可能ファイルの方が圧倒的に便利です。

単一 ZIM ファイル

ZIM はオープン標準規格で、キウィックス(Kiwix)など多くのオフラインリーダーで利用可能です。

kage pack paulgraham.com               # -> paulgraham.com.zim
kage open paulgraham.com.zim          # Kage で再読み込み
kiwix-serve paulgraham.com.zim        # Kiwix サーバー起動

ZIM ファイルの利点:

  • 互換性: 数年後でもあらゆる ZIM リーダーで開けます。
  • 検索制限: 内部ファイル検索はサポートしますが、Kiwi クライアント自体が提供するフルテキストインデックスとは別です。
  • 決定論的: 同じ出力ディレクトリに対して常に同一のファイルを生成するため、キャッシュやチェックサムと相性が良いです。

自立型バイナリ(実行可能ファイル)

--format binary
を使うと、インストール不要で動く実行可能ファイルを作成できます。

kage pack paulgraham.com --format binary -o paulgraham
./paulgraham                          # すぐに動作開始

特徴:

  • サイズ: バイナリには Kage のコピーが含まれるため、約 13 MiB 程度になります(ZIM より重いですが、インストールなしですぐ使えます)。
  • プラットフォーム対応:
    --base
    オプションでターゲット OS のビューアを指定できます。
# Mac から Windows の exe を作成
kage pack paulgraham.com --format binary --base kage-windows-amd64.exe -o paulgraham

ネイティブウィンドウでの起動

デフォルトではシステムブラウザを開きますが、ネイティブアプリのように表示したい場合は WebView 機能を使います。

make build-webview                     # または: CGO_ENABLED=1 go build -tags webview
kage pack paulgraham.com --format binary --base bin/kage -o paulgraham
./paulgraham                           # ブラウザの UI が見えないネイティブウィンドウで表示

注意点:

  • CGO が必須: ネイティブビルドにはプラットフォーム固有のライブラリ(WebKitGTK, WebView2 など)が必要です。
  • デフォルト: 純粋な Go ビルド(
    CGO_ENABLED=0
    )はブラウザを開きます。ZIM ファイルも同じ
    -tags webview
    でビルドすればネイティブウィンドウで開けます。

ネイティブウィンドウについて

WebView を使用すると、ブラウザのように「タブが並ぶ」のではなく、独立したネイティブウィンドウとしてアプリケーションのように動作します:

  • macOS: WKWebView
  • Windows: WebView2
  • Linux: WebKitGTK

これで、Paul Graham のエッセイをまるでアプリのようにオフラインで楽しむことができます。


仕組み

Kage は以下のフローで HTML ファイルを生成します:

シード URL ─▶ ヘッドレス Chrome ─▶ 最終的 DOM ─▶ スクリプト削除 ─▶ ローカライズアセット ─▶ ディスク
              (レンダリング)        (スナップショット)    (サニタイズ)       (リンク書き換え)

プール構成

  • Chrome タブプール: 実際のページをレンダリングします。
  • アセットプール: プレーンな HTTP で画像や CSS を取得します。

ディレクトリ構造例

paulgraham.com/
├── index.html                  # スクリプト除去済みのホームページ
├── greatwork.html              # /greatwork.html のエッセイ
└── _kage/                      # 内部データ
    ├── paulgraham.com/site.css  # URL をローカルパスに書き換えた CSS
    ├── paulgraham.com/pg.png    # ローカルの画像
    └── state.json               # クロール再開用の状態情報

パッキングの原理

ZIM ファイルも同様の考え方に基づいています。鏡像内のリンクはすべて「鏡像相対パス」で、アーカイブ内のコンテンツに 1 対 1 マップされるため、ユーザーがクリックするたびに正しくアクセスできます(再マッピング不要)。


ソースからビルド

GitHub リポジトリをクローンして構築することも可能です。

git clone https://github.com/tamnd/kage
cd kage

# 通常ビルド(ブラウザを開く)
make build

# ネイティブウィンドウ付きビルド(cgo 必要)
make build-webview

# テスト実行(エンドツーエンドテストを含む)
make test

# ブラウザを起動するテストをスキップ
make test-short

コード構造概要

  • cmd/kage/
    : メインスレッドと CLI エントリポイント
  • cli/
    : Cobra 命令ツリーとフラグ定義
  • clone/
    : クロールロジック(フロントエンド、ワーカーなど)
  • browser/
    : ヘッドレス Chrome コントロールと DOM スナップショット
  • sanitize/
    : JavaScript 削除
  • asset/
    : CSS/画像のローカライズ
  • urlx/
    : URL からローカルパスへの決定論的マップ
  • zim/
    : ZIM アーカイブの作成・復元
  • pack/
    : ZIM やバイナリの圧縮処理
  • viewer/
    : システムブラウザまたはネイティブウィンドウでの表示制御

リリース

新しいバージョンをリリースするには、以下の手順を実行します:

git tag v0.1.1
git push --tags

GitHub Actions が自動的に以下を生成します:

  • 複数のアーキテクチャ用のバイナリ
  • .deb / .rpm / .apk パッケージ
  • Chromium をバンドルした Docker イメージ(GHCR)
  • チェックサムと SBOMs
  • cosign サイン

Docker イメージ名:

ghcr.io/tamnd/kage:0.1.1
(プレフィックスなし)

Homebrew や Scoop などのパッケージマネージャーへの追加は、トークン認証があるまで自動無効化されます。


ライセンス

MIT ライセンスです。

LICENSE
ファイルを参照してください。

同じ日のほかのニュース

一覧に戻る →

2026/06/15 7:04

なぜクロードは馬鹿になったのか?

## Japanese Translation: Claude Fable の攻撃的・論争的な振る舞いは、知能の欠如からではなく、礼儀正しいユーザーを攻撃者と誤認する安全機構の不備に起因する。より中立な対照的なモデルである Opus 4.6 とは異なり、Fable は多くの場合、有益な留保事項を拒絶し、「technically」といった特定の単語を避け、Web 検索によってエラーを修正した後であっても、あるいはユーザーから粗野であると指摘された後であっても否定的に反応する。この振る舞いは、すべての入力を安全性回避の試みとみなす過剰なアライメントガイドレールによるものであり、認証コンテキストの完全な欠如(画像生成プロンプトが悪意的と解釈される原因となる)により問題が深刻化している。また、奉承を抑制するための不適切に実行された試みによるものが能動的攻撃的な表現を生み出し、トレーニングデータには論争の多い環境を無意識に含む可能性があり、その中で助言よりも議論での勝利が優先されている。最近の問題は、輸出規制やセキュリティ制限に関する規律への対応が急ぎすぎたものであることを示唆しており、憲法的懸念を引き起こすとともに、チャット品質に対するコード能力の回退をもたらした可能性がある。緊急の監査と是正措置(特に代名詞参照エラーおよび論理ギャップへの対処)を行わない場合、Fable はコンピュータセキュリティにとってのネットプラスではなく、むしろ負債となるリスクがある。

2026/06/15 0:37

リオデジャネイロの「地元で開発された」LLMは、既存モデルの結合であると見られる

## Japanese Translation: 最も重要なポイントは、AI モデル「Rio-3.5-Open-397B」が、自称の提供者 IplanRIO 由来ではないという点であり、実際には Nex および Qwen ベースモデルの数値的なブレンドから構成されていることです。この結論は、ハードコードされた指示を除去したテストによって裏付けられており、これらの人工的なプロンプトがない場合、モデルは自身を「Nex」として認識する確率が約 79% に達し(Rio ではなく)、IplanRIO によるオリジナルなトレーニングが行われたことを示す証拠は一切ありません。さらに、すべての内部ウェイトテンソルは、60 のネットワーク層および各コンポーネントにわたって Nex と Qwen の特定比率(0.6/0.4)と一致しており、これが独立したアーキテクチャとは何千もの標準偏差の差を生じます。重要な点として、独自アイデンティティを欠いているにもかかわらず、モデルは創作者が所属する組織の特注の背景ストーリーを一字一句そのまま誦唱し、この偽りのペルソナを維持するためにはハードコードされた指示に依存しています。したがって、特定のカリスマに帰属されると想定される機能に頼るユーザーにとって、アイデンティティのマスクが除去された場合、予期せぬ行動変化が生じる可能性があります。テクノロジー業界は、組織が実際にベースとなるウェイトをトレーニングしなかったにもかかわらず、その組織に専門的能力を帰属させる前に、そのような主張を検証する必要があります。今後の発展は、創作者が現実と合致するようにプロンプトを更新するか、あるいは真正な新しい世代を発表するかに依存します。

2026/06/10 14:01

薪割りシミュレーター

## Japanese Translation: 元のサマリーは概ね明瞭であるが、省略されているタイトル参照を明示的に含め、流れを改善する形で絞り込むことが可能である。 **改善されたサマリー:** 本文の中核的なメッセージは、インタラクティブな画面おもちゃという新興のカテゴリーに焦点を当てている。特に「shapiro500」をこの拡大傾向の焦点として参照している。著者は、「more screen toys」と分類される装置の人気高揚と入手容易性の増大について強調しており、これらは視覚的なデジタルディスプレイによってユーザーとの関与を図るインタラクティブなガジェットであり、伝統的な遊具を現代技術と架橋するものである。本質的には、このコンテンツは消費者市場における新たな製品ニッチの簡易的な特定に留まることがあり、歴史的な起源、将来展望、または具体的な業界への影響には触れていない。主なポイントは、インタラクティブなデジタルおもちゃが明確かつ注目される一群として進化しているという単純な観察であり、「shapiro500」というタイトルはこの傾向を例示している。