世界を動かす技術を、日本語で。

JSONフォーマッターChromeプラグインが終了し、アドウェアを注入中

概要

JSON Formatter は、もはやオープンソースとしては開発されていません。 商用・クローズドソース モデルへ移行し、より高機能なAPI閲覧ツールの開発を目指しています。 最終オープンソース版は JSON Formatter Classic として利用可能。 Chrome拡張機能として、 JSON APIレスポンスの可視化・探索 をサポート。 FAQでは、 技術的な制約や使い方 について詳しく説明。

JSON Formatterの開発終了と今後

  • JSON Formatter はオープンソース開発を終了
  • 今後は クローズドソース・商用モデル へ移行
  • より包括的な APIブラウジングツール の開発を目指す方針
  • オープンソースを望むユーザー向けに リポジトリは公開継続
  • 最終オープンソース版は JSON Formatter Classic として提供

JSON Formatter Classicの特徴

  • Chrome拡張機能 によるJSON APIレスポンスの可視化
  • 長大なJSONページでも高速動作
  • ダークモード 対応
  • シンタックスハイライト 表示
  • ツリー構造の折りたたみ とインデントガイド
  • クリック可能なURL の自動検出
  • 非JSONページへの パフォーマンス影響はほぼゼロ (1ms未満)
  • URLに依存せず 全ての有効なJSONページで動作
  • 生データとパース済みデータの切り替えボタン 搭載
  • グローバル変数jsonとしてパース済みJSONをエクスポート し、コンソールから検証可能

インストール方法

  • Option 1: Chrome Web Storeから JSON Formatter Classic をインストール
  • Option 2: ソースコードからインストール
    • リポジトリを クローン し、bun installコマンドで依存関係をインストール
    • bun run buildでビルド、bun run watchで変更監視付きビルド
    • Chromeの デベロッパーモード でローカル拡張としてdistフォルダを追加

FAQ・よくある質問

  • JSONの検出方法

    • 基本は Content-Typeヘッダー を利用
    • 一部ケースでは ページ構造を解析 しJSONエンドポイントか判定
    • ブラウジング速度への影響を最小化 する設計
  • 大きな数値が正確に表示されない理由

    • JavaScriptの仕様 による制限(Number.MAX_SAFE_INTEGER以上/Number.MIN_SAFE_INTEGER以下は丸められる)
    • 浮動小数点数は16桁に丸め
    • V8のJSON.parseによる挙動 であり、拡張機能側の問題ではない
    • 安全範囲外の数値は 文字列として扱うことを推奨
  • オブジェクトのキー順序が異なる理由

    • JavaScriptの仕様 により、オブジェクトキーの順序は保証されない
    • V8エンジン では数値文字列キーが先頭に来る最適化あり
    • Object.keys(JSON.parse(json)) と同じ順序で表示
  • サーバーからのJSONをそのまま見たい場合

    • Rawボタン でサーバー送信時のJSONを表示
    • ParsedボタンJSON.parse後の結果を表示
    • 将来的に 独自パーサの導入も検討中 で、変化があれば警告表示の可能性

今後の展望

  • 商用バージョン では、より高度な API閲覧・操作機能 を搭載予定
  • オープンソース派ユーザーには Classic版の利用やフォーク を推奨

Hackerたちの意見

今日、Chromeのインスペクターで「give-freely-root-bcjindcccaagfpapjjmafapmmgkkhgoa」っていう怪しい要素を見つけたんだ。約1ヶ月前に人気のオープンソースのJSON Formatter chrome extensionがクローズドソースになって、チェックアウトページにアドウェアを注入し始めたみたい。ジオロケーションの追跡もやってるっぽい。HNではこの話を見なかったから、プライバシーに敏感な人たちに警告しておこうと思った。今のところ、ブラウザ拡張マーケットプレイスは失敗した実験って感じがする。自分でJSONのプリンタ拡張を作っちゃえば、もうこの問題に悩まされることもないしね。

それに同意するよ。AIの主な使い方は、自分のニーズに特化した超ミニマルなアプリを作ることなんだ。大きなアプリ(プラグインとか)を使う代わりに、第三者が管理してるものは大抵自分には必要以上のもので、ニーズに合わないし、アドホックな設定が必要だからね。これが後で自分に影響するのか、ちょっと不安だな。

これを投稿してくれてありがとう。ほんとにひどいことだと思う。オリジナルの作者がオープンソースプロジェクトのクローズドフォークをやりたがるのはあまり問題じゃないけど、すでにインストールしてる人たちに警告なしで広告を注入するのは最悪だよ。「より包括的なAPIブラウジングツールをプレミアム機能付きで作るために、クローズドソースの商業モデルに移行します。」なんて言ってるけど、マジでふざけんなって感じ。今のところ、ブラウザ拡張マーケットプレイスは失敗した実験だと思う。以前、金融サービス会社でセキュリティを担当してたけど、主要なアプリには非常に厳しいコンテンツセキュリティポリシーのルールがあったんだ。悪質なことをしてる拡張をインストールした人たちから、報告URIエンドポイントにたくさん通知が来てたよ。

どうやってインスペクターで怪しい要素に「気づいた」の?普段からDOMを見てるの?

ブラウザ拡張マーケットプレイスは失敗した実験だと思う。人々はプラットフォームアプリストアのベンダーロックインやレントシーキングの問題を正当に批判するけど、これはマルウェアをフィルタリングするという点で一定の価値を提供している良い例だと思う。彼らがどれだけ成功しているか、そしてその価値が欠点を上回るかはオープンな問題だけど、誰もが自動更新機能を持つソフトウェアを何百も使っていて、CPUパワーやインターネットへの無制限アクセスがある世界では、無制御なアプリストアは悪意のある行為者にとってのハニーポットだってことは明らかだね。

現在のGoogleのポリシーでは、広告を挿入するのはOKだけど、削除するのはダメなんだよね。

クローズドソースになって、チェックアウトページにアドウェアを挿入し始めた…[そして] 地理位置情報の追跡も。こういう行動は公に非難して恥をかかせるべきかも。サーバーにDDoS攻撃したり、スパムで受信箱を埋めたり、何をやってもレビュー爆撃したり。4chanのトロールみたいな公の裁き。売り渡すのは合法的な決断だけど、公共の敵になる代償はあってもいいよね。実際、倫理的な側に留まろうとしている人たちには助けになるかも(皮肉だけど)。ちょっと冗談っぽく言ってるけど、もし自分が rugpulled されて、やった人がそんな扱いを受けたら、別に嫌じゃないかな。

ModHeaderでも同じことが起きたよ。https://chromewebstore.google.com/detail/modheader-modify-ht... -- 彼らは自分たちの広告ネットワークにリンクする広告を、読み込むたびにGoogleの検索結果ページに追加し始めたんだ。何が起こってるのか理解するのに数週間かかった。すぐにアンインストールして、Googleに報告したけど、今でもその拡張は残ってて、1つ星のレビューがついてる。

著者のCallum Lockeが実在の人物で、実際に reputational damage を受ける可能性があるのは興味深いね。以前はこれが信頼のシグナルだと思ってたけど、実際の開発者はリスクを考えて反乱を起こす可能性が低いだろうと思ってた。

人気のある拡張機能には誘惑が強いよね。人気の拡張機能の作者にとっては、こんな感じになることもあるよ: https://github.com/extesy/hoverzoom/discussions/670

個人の状況によるかな。200万ユーザーの拡張機能は、かなりの収益を生むことができるよ。うちの拡張機能は30万人しかいないけど、過去に受け取った提案は[0]、低所得国ではかなりの額になったかも。 [0] https://github.com/extesy/hoverzoom/discussions/670

ブラウザ拡張機能のメンテナは、怪しい方向から連絡を受けることが多いよね。これは、いいオファーを受けてメンテナが売り渡すケースかもしれない。

うーん、Callum Lockeは確かに評判を燃やしちゃったね。「サントラムを広める」レベルではないけど…まだ。

1週間前にこれに気づいたよ。結局、これまで使ってきた機能を全部取り入れた自分専用のものを作っちゃった。https://github.com/wesbos/JSON-Alexander

ここでの主な問題はソフトウェアのアップデートの理念だと思う。アップデートはトレードオフを表してる。片方では、修正が必要なセキュリティの脆弱性があって、開発者は古いバージョンのバグ報告を受けたり、サーバーインフラを維持したくない。もう片方では、開発者がユーザーが望まない決定をすることもあるし、一時的(サプライチェーン攻撃のように)または永久的(ブラウザ拡張機能の管理権を売却するように)に変わることもある。個人開発者の小さなブラウザ拡張機能の場合、基本的には自動更新を許可しない方がいいと思う。残念ながら、Googleはそんな風に機能しないChrome拡張機能のマーケットプレイスを運営していて、さらに悪いことに、Googleの他のビジネスが彼らにアドウェア化を認めない理念を与えている。だから、目立つ長年の拡張機能を除いて、基本的にはそこから何もインストールしない方がいいと思うし、ブラウザ拡張機能が欲しいなら、ソースコードをダウンロードしてローカルにアンパックされた拡張機能としてインストールすべきだよ。(Firefoxの拡張機能マーケットプレイスはマシだけど、悲しいことに、Firefoxはマーケットプレイスをバイパスして自分で作った拡張機能を読み込むことを許可していない。)

Firefoxは自分でソースからビルドした拡張機能をマーケットプレイスをバイパスして読み込むことを許可してないんだ。理想的ではないけど、1) about:debuggingで一時的に拡張機能を読み込むことができるし、2) nightlyやdev版でxpinstall.signatures.requiredをオフにすれば、永続的にインストールできるし、3) addons.mozilla.orgにサインインしてマーケットプレイスに公開せずに使うこともできるよ。

私にとって、解決策はシンプルだよ。ローカルでダウンロードして実行するものは、自動更新しないべきだ。アップデートをインストールする(または拒否する)ことは、常にユーザーの意識的な行動であるべきだよ。そうじゃないと、ただの社会的に受け入れられたRCEバックドアになっちゃう。

拡張機能がJSONフォーマットのように変わらないことをするなら、インストール直後に更新を無効にするのがベストだと思います。私はFirefoxに入れているすべての拡張機能でこれを実行しました。ただ、uBlockのような拡張機能はどうなんでしょう?新しいブロックサイトのリストを取得したりするんじゃないですか?それとも更新とは別に行われるのでしょうか?

数年前のHNの作者から: > 参考までに、何人かは使ってるかもしれないけど…私は12年前に作ってオープンソースにしたJSON Formatter拡張機能を持っていて、今もメンテナンスを続けてる。ユーザーは200万人いるよ。そして、私は絶対にデータをどこかに送るコードを追加しないし、そんなことをする誰かの手に渡らせないと誓うよ。怪しい人たちから、みんなのデータを盗もうとするような魅力的な現金オファーが何度か来たことがある。 reputaionを傷つけずにお金を受け取れるなら、名前をつけなければよかったと思うこともあるけど、もう名前をつけちゃったから、名誉を守るしかない。プラスの面としては、私は決して売り渡さなかったと言えることだね。 https://news.ycombinator.com/item?id=37067908

https://palant.info/2025/01/13/chrome-web-store-is-a-mess/

彼には良かったね。

それがセールストークだったんだ。そして、効果があった。まあ、大手テック企業はみんな同じことをやってるから、ここには何も見るべきものはないね。OSSには適切な資金インフラが必要だけど、大手プレイヤーはそれを軽視してる。だから、彼をそのことで判断することはできないよ。彼の仕事、彼の時間だしね。

GoogleはManifest V3を推進するのに時間をかけたけど、これを防ぐためにはほとんど何もしてないし、場合によっては逆に助長してるよね。

具体的な例を挙げると、Chrome Web Storeには現在、Blaze VPN、Safum VPN、Snap VPNの拡張機能が「特集」バッジを持ってるんだ。これらの拡張機能(ほとんどユーザーがいないIshaan VPNも含めて)は、過去に悪質な拡張機能を生み出したPDF Toolboxクラスターに属してる。ざっとコードを見ただけでも、4つはすべて同じで、実際には2021年にChrome Web Storeから削除されたNucleus VPNのクローンなんだよね。それに、全然動かないし、接続も成功しない。Nucleus VPNのユーザーがすでに不具合を訴えてたけど、その拡張機能は偽のレビューでごまかしてたんだ。

これが1月に追加されたやつだよ: https://github.com/callumlocke/json-formatter/commit/caa213d... 誰かがTwitterですぐに気づいたみたいだね: https://twitter.com/devinsays/status/2012195612586914143?mx=... すべてのURLを要求する拡張機能は、もっと徹底的なレビューを受けるべきだと思う。

私はFFを使ってるけど、Claudeが何か作れるはずだと思う... ほら、できた。2回試してみたけど、基本的にFFのJSONフォーマッターみたいなものを作るように言ったら、できたよ。あまりに期待外れだと思うから共有はしないけど(2分で再現できるし)、こういうのがあると、広告が入ってない技術に置き換えられる余地がどれだけあるのか気になるね。

作者のレビューへの返答: https://chromewebstore.google.com/review-reply/b4a787df-64e5...

Give Freelyはスパイウェアやアドウェア、あるいは「詐欺」ではありません。これは、あなたがGive Freelyのパートナーである小売店を訪れたときに、未請求のアフィリエイト料金を寄付するためのボタンをクリックするようお願いするオプションの寄付アピールです。ほとんどのお金はCode.orgやあなたが選ぶ他の慈善団体に行きます。私はGive Freelyのチームに会ったことがあり、彼らを信頼しています。個人情報やブラウジング活動を収集することはなく、他のアフィリエイトやバウチャーコードを上書きすることもないので、あなたにとって何のコストもかかりません。寄付のポップアップがあまりにも煩わしいと感じる場合は、拡張機能のオプションや寄付のポップアップ自体で永遠に無効にできます。 Code.orgは、この拡張機能を定期的に使う多くの人にとって関連性のある良い目的です。Give Freelyの寄付ボタンをクリックすることは、あなたが望むなら、両方をサポートするための本当に無料で匿名の方法です。もし気に入らないなら、オフにすることもできますし、もっと快適に感じたいなら、Give FreelyコードがないJSON Formatter Classicに切り替えることもできます。これは私のアーカイブされたjson-formatter GitHubリポジトリのv0.8ブランチに対応しています。また、ストアにある多くのフォークや代替品を試してみるのもいいでしょう。 JSON Formatter Classic: https://chromewebstore.google.com/detail/json-formatter-clas...

意図に関わらず、実行が不十分で、ブラウザ拡張機能の配布モデルに内在するセキュリティの隙間を浮き彫りにしています。