あなたの「アプリ」がウェブページだったかもしれません(そのため、私が修正しました)

2026/07/11 17:21

あなたの「アプリ」がウェブページだったかもしれません(そのため、私が修正しました)

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

要約

Japanese Translation:

著者は、不必要にユーザーを追跡し、0.05MB のコンテンツのために 43MB のストレージを消費するディズニーの肥大化した「Travelbound」アプリを置き換えるための軽量で無料のウェブ代替案を開発しました。Android Studio 仮想デバイス、ルートアクセスツール、およびフェイク VPN を使用した HTTP Toolkit でトラフィックを傍受することで、このアプリが単に API を介して HTML ページを読み込んでいることが分かりました。具体的には、API がユーザー名とパスワードを URL に連結し、行程の区間、広告(「インスピレーション」)、画像アレイおよび PDF ファイルを含む JSON を返します。Cron によってスケジューリングされた Ruby スクリプトを使用することで、この新しいウェブページは侵入的な広告や Google の追跡を削除しながら最新のデータを直接取得します。高価なデプロイ戦略に依存し、コンテンツと共に 124MB に肥大化するオリジナルのモバイルアプリとは異なり、この解決策は既存のツアー認証情報を使用してパスワード保護付きで安全にホストされています。印刷、検索、ブックマークなど、重要な機能をすべて提供しつつ、ストレージコストやプライバシー侵害を伴うものではありません。結局のところ、このプロジェクトは複雑なモバイルアプリケーションはしばしばラップされたウェブサイトであるという事を示しています。主な教訓は、HTML 形式での標準 HTTP プロトコルを使用してコンテンツを配信することが業界標準となるべきであり、それによってユーザーが機密性と効率性を保ちながら重要な旅行情報にアクセスできるようにするというものです。

本文

アプリとは何か?「Travelbound」アプリの逆エンジニアリングと代替案

はじめに:なぜ「アプリ」でなければならないのか?

今年夏、子供たちの演劇学校が生徒たちをディズニーランドでショーのために歌わせ踊らせた。私たちも大興奮だったが、旅行計画や交通手段、宿泊情報が得られるために**「Travelbound」アプリのインストールが求められた**瞬間、私の期待は冷めた。

単なるウェブページで十分だった情報を、なぜまたしてもクソみたいなアプリをインストールしなければならないのか?

この「アプリ」は、文字通りテキスト、画像、PDF ファイルへのリンクを提供するだけであり、すべてがウェブを通じて配信されている。しかし、以下の特徴だけはウェブページにはない「悪機能」として検出された。

  • 位置追跡データの送信: Google アカウントと関連付けられたデータを開発者に送信。
  • 不要な広告の表示: 「インスピレーション」と名づけた代理店による他旅行案内の広告を表示。

全てがダメだ。ウェブページの方がずっと良かったはず。アプリに比べ、ウェブページは以下の特性を備えているためである。

  • コピー&ペースト可能
  • 印刷可能
  • ダウンロード・保存可能
  • ブックマーク可能
  • 検索可能
  • ほぼあらゆるデバイスで利用可能
  • (潜在的に)アクセシビリティが高い

私は怒りを抑えきれず、このアプリを独自に「修正(代替化)」することに決定した。


アプリトラフィックの傍受と解析

Android アプリのネットワークトラフィックから逆エンジニアリングを行うためのベストプラクティスを復習し、以下の手順で実施した。

1. Android エミュレーターの準備と Root 化

  • Virtual Device Manager で新しい仮想デバイス(AVD)を作成。
  • adb shell
    が正常に動作することを確認。
  • デバイスを Root 化:
    ./rootAVD.sh system-images/android-33/google_apis_playstore/x86_64/ramdisk.img.2
    
  • コールドブートを行い、Magisk を実行して設定を調整。どのアプリが
    su
    アクセスを要求しても自動で許可される状態にさせた。

これで全てのアプリアプリフィックを自分に取り込める状態になった(Wireshark や TCPdump と同じ状態)。

2. HTTP Toolkit を介した傍受と解析

  • HTTP Toolkitを実行し、AVD のトラフィックを傍受するように指示。ファイト的な VPN プロバイダーがインストールされ、スマホのトラフィックがプロキシ経由で流されるようになった。
  • Play Store から「Travelbound」アプリをインストール。
  • HTTP Toolkit を設定して、Travelbound アプリのトラフィックのみをプロキシするように調整(ノイズ削減のため)。

3. API エンドポイントの特定とデータ構造の解明

数分の試行錯誤で、アプリがユーザー名とパスワードを結合し、以下の形式の URL に使用していることを発見した。

https://travelbound.api.vamoos.com/api/itineraries/{username}-{password}

これによりJSON 形式のデータが返され、アプリが「表示する」すべてのコンテンツに対応することが判明した。具体的には以下の配列が含まれている。

  • itinerary の各区間を含む配列
  • 「インスピレーション」として提示される広告(他旅行案内)を含む配列
  • その他セクションで参照されているファイル(画像など)を横断的にリスト化した配列

彼らは明らかに HTML コードを生成しているはずだ。なぜこれがウェブページではないのか?

少しの実験から、S3 上の画像 URL は比較的短い有効期限を持つことが明らかになったため、コンテンツが変わらなくてもJSON を定期的に再フェッチする必要があることがわかった。


より良いために転換:Ruby スクリプトによる HTML 生成

必要な情報すべてを手に入れた後、以下のスクリプトを Ruby で作成し、Cron スケジュールで稼働させて最新の JSON データを取得した。それに基づいて HTML ページを自動生成する。

コンテンツのフィルタリングと構成

「インスピレーション」(データスキーマ上の

overlayRows
)部分は完全に省略し、代わりに以下だけをリスト表示するように設定した。

  • itinerary の項目
  • インスピレーションや itinerary で参照されていないすべてのファイル(PDF ダウンロードリンクの簡易的な集計)

当初はツアー参加者に渡されたパスワードを保護キーとして使用したが、使用する生 JSON データを

<details>
要素内に埋め込み、スキーマに目が行き届かずに後から追加される可能性のある項目がないか確認できるようにした。


結論:なぜ「アプリ文化」がダメなのか?

私の作成したウェブページは、情報源となったアプリほど「華やか」ではないかもしれないが、以下の点で圧倒的に優れた選択肢である。

  1. サイズ: アプリ(43MB)に対して、0.05MBの軽量さ。
    • : オプションで画像を追加するとアプリ側は 124MB に膨れ上がるが、ウェブページは必要に応じて追加が可能(最大 35MB 追加可能)。
  2. 機能: コピー、印刷、ダウンロード、ブックマークなどの標準的なウェブ機能の恩恵を無料ですべて享受できる

確かに一部の人は「アプリ」を好むのも……まあいいだろう。しかし、いくつかのアプリは本来ウェブページで十分だったはずだ。特に今回のように、すでに HTML で記述されたコンテンツを HTTP プロトコルを通じて配信しているものにおいては、それは間違いなくウェブページの領域のはずだ。

いかにして私たちはこのように「アプリ文化」に進化してしまったのか、理解に苦しむ。ソフトウェア企業は自らの生活を難しくし、コストを増大させる(大手アプリストアへのデプロイは無償ではない!)ことで、本来ならウェブ直接向けにした場合よりも少ない人数に対して、さらに機能の制限された HTML コンテンツを配信することに満足しているのだ。

「アプリ」という媒体が絶対的に適切でなければならないタスクも確かに存在する。Travelbound はその対象ではない

少なくとも今では、私自身だけでなく、共有した残りのグループメンバーも、コンテンツへのアクセス方法を自分で選択できるようになった。

  • 位置追跡と広告つき、124MB のアプリ
  • 0.05MB のウェブページ(より多くの機能を持ち、より多くのデバイスに対応)

どちらを使うか迷うことはない。決断だ!

同じ日のほかのニュース

一覧に戻る →

2026/07/15 2:50

bonsai27b:スマートフォンで動作する 270 億パラメータモデル

## Japanese Translation: PrismML は、Qwen3.6 を基盤とする画期的なマルチモーダル AI モデルである Bonsai 27B をリリースしました。これは持続可能かつオンデバイス的人工知能へと向かう転換点を示すものです。Bonsai はユニークな構造を採用し、ネットワーク全体で低ビット形式のみで動作します(高精度のエスケープハッチはありません)。これにより未曽有の極限圧縮を実現し、1 ビットバイナリ版は 3.9 GB、ターナリー版は 5.9 GB のサイズです。このブリークスルーにより、モデルは iPhone 17 Pro の約 6 GB というメモリ予算内に収めることが可能となり、従来の構築(16 ビットで約 54 GB、4 ビットで約 18 GB)とは対照的です。この圧縮にもかかわらず、Bonsai は重要な数学、コーディング、ツール呼び出しタスクにおいて、フル精度モデルの知能を 90%〜95% 維持しています。 エンドツーエンドの低ビットアーキテクチャとコンパクトな 4 ビットビジョンタワーを備えた Bonsai は、大規模なコンテキストウィンドウ(262K トークン)をサポートし、高速な推論を実現します(NVIDIA RTX 5090 では最大 163 トークン/秒)。これは標準モデルと比較してギガバイトあたり十倍以上の高い知能密度を提供することで、新たな産業基準を設定しています。この革新により、ユーザーはプライバシーを重視するエージェントワークロードをローカルで実行でき、ファイルや画面入力といったデータをオンデバイスに保持し、追加のコンピューティングコストなしで動作します。最も先進的なタスクがハイブリッド戦略によってクラウド接続を利用することもあるかもしれませんが、Bonsai は即座に Apple デバイス上のネイティブデプロイメント(MLX を通じて)および NVIDIA GPU 上のデプロイメント(CUDA を通じて)をサポートします。Apache 2.0 ライセンスの下でリリースされ、無料の開発者向けプレビュー API が提供されており、データ流出のリスクなしに高度なエージェントワークフローへのアクセス可能な経路を提供します。

2026/07/15 6:15

Dependabot のバージョン更新機能でデフォルトのパッケージ冷却期間が導入されます

## Japanese Translation: GitHub の Dependabot は、バージョン更新用のプルリクエストを自動的に作成する前に 3 日間の待機期間を導入する新たなセキュリティ対策を実装しています。この重要な変更は、パブリケーションの直後にマルウェア攻撃者がパッケージリリースを乗っ取るサプライチェーン攻撃からソフトウェアリポジトリを守ることを目的としています。これらのリクエストの作成を遅らせることで、管理者らはそのコードがビルドプロセスに投入される前に、潜在的に汚染されたコードを検査するための十分な時間を確保できます。重要なのは、この安全バッファは重要なセキュリティ更新には適用されない点です。セキュリティ更新は、不可欠な脆弱性パッチへの即時アクセスを確保するために待機期間を完全に迂回します。GitHub Enterprise Server のバージョン 3.23 以前を管理する組織は、後ほどアップグレードする必要があります。また、他の組織も `.github/dependabot.yml` ファイルを介して設定を即座に構成し、このウィンドウを調整または無効化できます。結論として、この更新により、堅牢なセキュリティ衛生と運用上の柔軟性のバランスが達成され、急速な悪意のあるデプロイのリスクは低減しつつ、必要な依存関係の改善は遮断されることなく対応されます。

2026/07/15 1:57

塔はしきりに高まる

## 日本語訳: 核心となる論点は、AI を支援したプログラミングは、チームがシステムアーキテクチャについての共有理解を失うにつれてソフトウェア開発が引き続き進むという危険なパラドックスを生み出すと主張している。創世記におけるバベルの塔に関する聖書の物語とは異なり、そこでは神は統率能力を取り除くことによる協調性を妨げ、建設を停止させるために共通言語を撤去したが、現代の AI ツールは無休憩の通訳として機能する。これらのエージェントは、チームとの即時的な調整が必要ないかシステム全体モデルを取得することなく、孤立した開発者がローカルな変更(例えば OAuth やキャッシングの追加など)を行うことを可能にする。 この人工知能への依存リスクは、「アーキテクチャ言語」——つまり、概念、境界線、不変条件、所有権、およびシステムの形状に関する集合的な精神地図——が人間の記憶から薄れ去る原因となり得る。以前では摩擦(コードを読むこと、質問すること)が人々を同期させるのに役立っていたが、現在はエージェントがこの摩擦を取り除くことで、共有理解が崩壊しながらも変更が適用されることを可能にしている。その結果、個人は特定の機能を効率的に管理する一方、システム全体はその健全性を保つために必要な集合的知識から切り離されてしまう。その結果、開発者がコンポーネントがどのように互いに組み合わさっているかを説明できなくなった後でも、重要な変更を施す状態が生じる。この変化は、複雑なソフトウェアが誰一人として大局的な含意を完全に理解していないまま進化する可能性のある将来の脆弱性を生み出す恐れがあり、それはブルーゲルによる協力失敗を描いた作品に似た混沌としたプロジェクトにつながりうる。

あなたの「アプリ」がウェブページだったかもしれません(そのため、私が修正しました) | そっか~ニュース