Mini Taiwan Pulse:データアナリストが台湾の交通の鼓動を呼吸する3D光軌に描いた方法
30秒概要: 2026年2月24日、GitHubアカウント
ianlkl11234s、bioに「Senior Data Analyst, Exploring AI automation in daily work」と記した開発者Migu Cheng1が、mini-taiwan-pulseというリポジトリを開設しました。6週間後、このリポジトリは193コミット、241スター2を記録し、FlightRadar24の航空便、AIS船舶、TDX鉄道時刻、SEGIS村里人口、CWA気象格子など、異なる政府プラットフォームに散在するオープンデータをThree.jsの光球・光軌・3D光柱で23個の個別切替可能なレイヤーに繋ぎ合わせました。これは政府のプロジェクトでも、補助金の産物でも、ハッカソン週末のプロトタイプでもありません。一人の余暇時間で台湾のデータの海を見える風景に変えたものです。
一人のリポジトリ、一つの島の鼓動
2026年2月24日のGitHubコミット履歴に、ianlkl11234s/mini-taiwan-pulseの最初のコミットが入りました。READMEの冒頭にはこう書かれています:
オープンデータで、台湾の鼓動を感じる。空の航空便が弧を描き、海の船舶が行き来し、軌道の列車が正確に走る——この島は今この瞬間も呼吸している。3
4月9日最後のpushまでに、このリポジトリは193コミット、241スター、12フォーク2を累積しました。作者Migu Chengのプロフィールには一行だけあります:「Senior Data Analyst. Exploring AI automation in daily work.」会社もブログもTwitterもありません1。
このリポジトリがやったことは簡単ではありません。以下のデータソースをすべて一枚の3D地図に接続しました:
| データレイヤー | ソース | 規模 |
|---|---|---|
| 航空便リアルタイム位置 | FlightRadar24 API4 | 台湾14空港、1,500便以上 |
| 船舶AIS位置 | 国際AIS自動識別システム | 台湾周辺海域、30分遅延トレール |
| 鉄道時刻 | 公開時刻表 + OSM Overpass5 | 台湾鉄路/高速鉄道/4大都市MRT、333列車 |
| 公共交通拠点 | TDX運輸資料流通服務6 | バス、長距離バス、YouBike、自転車専用道 |
| 村里人口統計 | 内政部SEGIS7 | 7,748村里、H3六角グリッド res7+res8 |
| 気象格子 | 中央気象署オープンデータ8 | 0.03°解像度、120×67グリッド |
| 災害警報 | NCDR CAPフィード9 | 台風、地震、洪水 |
| ニュースイベント位置 | 中央通信社RSS + Gemini APIジオコーディング10 | 毎日の主要/次要ニュース |
| 空港/港湾/駅境界 | OSM Overpass API5 | 14空港、535駅 |
そしてThree.js r172をMapbox GL JS v3のベースマップ上に重ね、6つの独立したCustomLayerを作成しました。飛行機は発光する球体で、彗星尾のようなグラデーション光軌を引きます。船舶はInstancedMeshでバッチレンダリングし、30分トレールは頂点ごとのカラーグラデーションです。台湾鉄路265路線のOD軌道、333列車は車種別6色に分かれます。36基の灯台それぞれに3D回転する円錐形の光ビームがあります3。
これらの光軌は加算ブレンディングで重ねられ、複数の航路が重なる領域は自然に明るくなります。データの混雑度を統計グラフなしで、光を見るだけでわかります。
台湾のデータの海、なぜ見る人が少ないのか
台湾のオープンデータ基盤はアジアのトップクラスです。政府資料開放平台(data.gov.tw)は2013年に稼働開始し、10万以上のデータセットを累積しました11。交通部のTDX運輸資料流通服務は2022年に公路、鉄道、航空、海運、自転車の5プラットフォームを統合し、全国規模の公共交通動静態データAPIを提供しています6。内政部のSEGISは村里レベルの人口統計空間レイヤーを提供しています7。中央気象署、国家災害防救科技中心、経済部エネルギー局、台湾海域船舶即時情報システムもそれぞれAPIを公開しています89。
データはあります。問題はこれらのデータが異なるプラットフォームに分散し、異なるAPI形式、異なる空間粒度、異なる時間頻度で存在していることです。「台湾は今どうなっているか」を見たい人は、自分でクローラーを書き、ODataを処理し、CAP XMLを処理し、GeoJSONを処理し、H3ヘキサゴンを処理して、初めて「可視化」に取りかかれます。
📝 キュレーターノート
オープンデータ運動には混同されやすい指標が二つあります:データがどれだけあるか(政府がいくつのAPIを公開したか)とデータがどれだけ見られているか(いくつの可視化、アプリケーション、ストーリーがあるか)。台湾は前者の指標では模範生ですが、後者の指標ではg0vコミュニティと少数の商業ニュースメディアの散発的な努力に頼っています。この断絶がMini Taiwan Pulseの最も意味ある位置です。埋めているのはデータではなく、可視性です。
2012年、g0v零時政府は中央研究院のハッカソンで誕生し、「プログラミングで社会を変える」をスローガンにしました。政府総予算を可視化した最初のハッカソンから、2020年に呉展瑋が72時間で6,000件の保険薬局のリアルタイムマスク在庫地図を繋ぎ、「キーボード救国」という台湾の国際的評価を築き12、g0vは59回以上のハッカソン、7,200人以上の参加者、950以上の提案プロジェクトを累積しました13。
しかしg0vの物語は集団的です。コミュニティであり、土曜の朝にみんながノートパソコンを持ち寄る文化です。Mini Taiwan Pulseが示すのは市民技術の別の姿です:一人の週末、一人のgit log。Migu ChengはREADMEの最下部に自分のGitHubリンクを置きました。チーム紹介もDiscordもスポンサーもありません。193コミットの中にはリファクタリング、パフォーマンス修正、2026-04-09のIO超過イベントの記録14があり、このリポジトリのコミット履歴はエンジニア日誌のように読めます。
三つの鼓動:空、海、大地
Mini Taiwan Pulseは移動するオブジェクトを三層に分けます:
空:航空便光軌
台湾14空港、同時に約1,500機。各飛行機は多層発光する球体で、赤色衝突防止ランプの呼吸アニメーションがあります。飛行機の背後の彗星尾状グラデーション光軌は、ダークテーマでは高度に応じて着色(暖色オレンジから寒色ブルーへ)、ライトテーマではランダム配色です3。データはFlightRadar24の公開APIから取得しています。これはADS-B受信機で構成される世界規模の航空便追跡ネットワーク4で、台湾周辺空域のカバー密度は非常に高いです。
海:船舶トレール
船舶にはAIS(Automatic Identification System)データを使用しています。これは国際海事機関が大型商船への搭載を義務付けるリアルタイム位置放送システムです。Mini Taiwan Pulseは青藍色のInstancedMesh光球で船位を示し、30分のトレール軌跡を加えます。システムはGPSジャンプ異常点と無効MMSIを自動フィルタリングし、表示される光点が実在の船舶であることを保証します3。
大地:六大軌道
おそらくこのプロジェクトで最も難しい部分です。台湾鉄路、高速鉄道、台北MRT、高雄MRT、高雄ライトレール、台中MRTの6軌道システムが同時に運行し、各列車は車種別に染色された光球で、台湾鉄路と高速鉄道には3分遅延のトレール軌跡があります。
台湾鉄路の処理は特に複雑です:OD(Origin-Destination)軌道マッチング、ゴールデントラック推論、彰化三角線のような分岐路線には専用エンジンが必要です。READMEには直接「台湾鉄路専用エンジン」と記されています3。これは単に時刻表を地図上に描くのではなく、時刻表のテキストデータを列車の軌道上の実際の位置に逆算するものです。
📝 キュレーターノート
台湾鉄路の「三角線」(彰化、台中、南港など)は鉄道ファンだけが気にする詳細です。列車は複数の方向から出入りでき、単純なA→B路線ではありません。ほとんどの鉄道可視化ではこの種の区間を簡略化しますが、Mini Taiwan Pulseは専用エンジンを書いて処理しました。これは「キュレーションの深さ」の信号です。作者はデータをつなぐだけでなく、データ本来の複雑さを尊重しています。
三層の移動オブジェクトに加え、プロジェクトには23個の切替可能な静的・分析レイヤーが重ねられています:535駅の3D光柱(高さは日次停車回数の正規化値)、36基の灯台の3D回転円錐形光ビーム、国道(赤)/省道(橘)/自転車専用道(緑)のズーム適応道路ネットワーク、人流シミュレーションのH3六角グリッドヒートマップ(昼夜切替、Plasma / Viridisカラースケール)、9項目の人口指標パネル(数量/構造/負担)、CWA格子温度の3D波面、国道渋滞のカラーコーディング、NCDR災害警報のseverityカラースケール、CNAニュースイベントのジオタグ3。
合計10カテゴリ、23レイヤー、6種のMapboxベースマップスタイル、日付ナビゲーション+タイムライン30倍から3600倍の高速再生。これらすべてが一人のGitHubリポジトリに収まっています。
技術的キュレーション:データを「リアルタイム」にするのはどれだけ難しいか
地図可視化サイトを書くのは難しくありません。Mapboxのhello worldは15分で動きます。難しいのはリアルタイムかつ滑らかに、台湾7,000以上の村里の56Kヘキサゴンセルを支えることです。
Mini Taiwan Pulseのアーキテクチャには注目すべき三つの決定があります:
1. Overlay Registry パターン
Mapbox GLのすべての静的レイヤー(空港、駅、港湾、灯台、道路、風場)は、設定駆動のoverlayRegistry.tsで一元管理されています。config配列(sourceUrl + paint関数)一つ、overlayManager.tsでCRUD、useEffectで全overlayの可視性とテーマ切替を制御。新しいoverlayの追加は3ファイルを変更するだけです3。
これは典型的な「データ駆動UI」アーキテクチャで、特に華やかではありませんが、23レイヤーのシステムにとって保守可能かどうかの鍵です。
2. Three.js CustomLayer 埋め込み
Mapbox GL自体は3Dオブジェクトの描画が得意ではありません。Mini Taiwan PulseはMapboxのCustomLayerインターフェースを使い、Three.jsのsceneを同じWebGLコンテキストに埋め込みます。6つの独立したCustomLayerが航空便、船舶、鉄道、灯台、駅光柱、温度3D波面を個別に管理し、カメラ行列を共有し、それぞれがレンダリングスイッチを制御します3。
これはMapbox + Three.js統合の標準的な手法です(threebox、three-geoなどのサードパーティライブラリもこの方法です15)。Mini Taiwan Pulseはthreeboxに依存せず直接CustomLayerを手書きしており、代わりに投影行列と光源設定を自分で処理する必要がありますが、レンダリングフローを完全に制御できる利点があります。
3. Supabase pg_cron 事前集計パターン
このプロジェクトで最もエンジニア向けの決定です。SupabaseのプーラーにはAPIコールに対して2分のstatement_timeoutというハードリミットがあります16。つまりSQLクエリの実行が2分を超えると接続が切断されます。毎日の船舶軌跡、航空便軌跡、国道渋滞を取得するシステムでは、生テーブルを直接クエリするとこの壁にぶつかります。
Mini Taiwan Pulseの解決策は:通常テーブル + 日次リフレッシュ関数 + pg_cron定期リフレッシュ + 薄いSELECT RPC。高頻度の時系列クエリごとに対応する事前集計テーブルがあり、Supabase組み込みのpg_cron17で10〜30分ごとにリフレッシュし、フロントエンドは事前集計テーブルから結果を取得するだけで、安定してミリ秒台に収まります:
| RPC | 改善前 | 改善後 |
|---|---|---|
get_ship_trails |
timeout | 123ms |
get_flight_trails |
timeout | 126ms |
get_freeway_congestion_day |
60s境界 | 302ms |
get_disaster_alerts_day |
13.2s | 110ms |
get_temperature_frames |
551ms | 107ms |
この表はREADMEに直接記載されています3。PostgreSQL +リアルタイムアーキテクチャに精通した読者にとって、これらの数値はスクリーンショットより説得力があります。作者が実際のproductionボトルネックに遭遇し、正しい解決策を選んだことを示しています。
📝 キュレーターノート
Mini Taiwan Pulseの技術的選択はほぼすべて「正しい退屈な解」です:Mapbox + Three.jsのCustomLayer、UberオープンソースのH3六角グリッド18、知覚的に一様なカラースケール(Plasma / Viridis / Inferno)、log1p + gamma正規化による重い裾分布の処理、Supabase pg_cron事前集計。独創的な可視化技法も、流行の最新フレームワークもなく、すべての決定に先行事例があります。この「驚きのない」安定したエンジニアリング感は、独立プロジェクトで最も希少な品質です。
市民技術の定義が引き伸ばされている
「市民技術」という言葉が台湾で最も連想されるのはg0vです。「情報透明、オープンな成果、オープンな協働を核に、草の根の力で公共事務に関わる」コミュニティ19。この定義の重点は集団にあります:ハッカソン、協働、共同執筆、PRレビュー、助成金審査。
しかしMini Taiwan Pulseが示すのは市民技術の別の現代的姿です:一人、一人の週末ループ、MITライセンス一つ。
2012年のg0v初回ハッカソンでの総予算可視化から、2020年の呉展瑋のマスク地図、2026年のMigu Chengのmini-taiwan-pulseまで。このスペクトルの一端は集団協働の現場文化、もう一端は個人のコミットのゆっくりとした蓄積です。その間には様々な程度の混合があります:小チームの多年メンテナンス、学生プロジェクト、政府発注の外注オープンソース、開放文化基金会(OCF)のg0v市民技術イノベーション助成金20。
これらのプロジェクトは同じ前提を共有しています:政府がデータを公開した、後は我々に任せて。政府の役割はTDX、data.gov.tw、SEGIS、CWAのようなデータ基盤の建設者であり、市民コミュニティの役割はこれらのデータが「見える」ようにすることです。可視化、APIラッパー、チュートリアル記事、アプリケーションサービス、質問・政治ダッシュボードを通じて。
Mini Taiwan Pulseはこのスペクトル上で明確な位置にあります。サービス型プロジェクトでもなく(特定の問題を解決するものでもなく)、ツール型プロジェクトでもなく(他人が再利用できるライブラリを作るものでもなく)、デモンストレーション型プロジェクトです。このリポジトリを見た人はこう思うでしょう:「オープンデータをつなぐとこうなるのか」「TDX + Three.js + Supabaseでここまでできるのか」「一人でこんなにできるのか」。
📝 キュレーターノート
台湾のオープンデータエコシステムで最も希少なのは、APIでもエンジニアでもなく、見やすく、わかりやすい方法でデータを一般の人に見せるデモンストレーションです。Mini Taiwan Pulseは最も難しいテーマ(全国規模 + 複数データソース + リアルタイム更新 + 3D可視化)を選び、一人の独立開発者が共有可能なレベルまで完成させました。241スターの数値の重要性は絶対数にあるのではなく、このパスが実行可能であることを証明した点にあります。
さらにできること
Mini Taiwan Pulseは現在、デモンストレーション作品であり、製品ではありません:
- リリース未公開:193コミットに対し0のリリースタグ、デプロイはDocker + Nginxセルフホスティング3
- 一部のデータソースでAPIキー要申請:FlightRadar24商用API、CWAオープンデータプラットフォームAPIキー、TDXメンバー認証(OIDC Client Credentials flow)は読者自身の設定が必要6
- 公開デモURL未公開:READMEにライブデモリンクがなく、効果を見るにはクローンして自分で起動するしかない
- オープンイシュー1件、PR 0件:コミュニティ協働はまだ始まっておらず、これはデモンストレーション型プロジェクトの典型的な段階です
しかしこれらはすべて変えられることです。241スターのリポジトリがあるということは、241人が「追跡したい」を押したということです。Migu Chengがパブリックサービス化を決めたり、コアコンポーネントを再利用可能なライブラリに切り出したり、grants.g0v.twで助成金を申請したり20すれば、このプロジェクトの次のフェーズがどうなるかは注目に値する未解決の問いです。
キュレーションに値する理由
Taiwan.mdがMini Taiwan PulseをリソースリストからTechnologyカテゴリの深度記事にアップグレードしたには三つの理由があります:
- ニュースイベントではなく、代表的サンプルである。台湾オープンデータ界の2026年には多くのコミットやスターがあるでしょうが、Mini Taiwan Pulseは「一人でどこまでやれるか」という次元で珍しい参照点です。
- 抽象的な「市民技術」に具体的な形を与える。ほとんどの人が市民技術について語るとき、g0vやAudrey Tangやマスク地図の話をします。しかし2026年の市民技術は、データアナリストが週末にTypeScriptを書く姿でもあり得ます。これはg0vの物語の代替ではなく、拡張です。
- 政府オープンデータの実際の可能性を読者に見せる。もしデジタル身分証とデジタル政府やオープンソースコミュニティとg0vを読んでもオープンデータが抽象的に感じるなら、Mini Taiwan Pulseが「ほら、データが風景になるとはこういうことだ」という脚注です。
一人のデータアナリスト、6週間、193コミスト、23レイヤー、呼吸する台湾島。
これが2026年の市民技術の一つの姿です。
関連記事
- オープンソースコミュニティとg0v — 2012年の政府フォークから2020年のマスク地図までの10年間の軌跡
- 台湾のオープンソース精神 — 台湾オープンソースコミュニティの文化的文脈と貢献モデル
- デジタル身分証とデジタル政府 — 政府デジタル基盤の政策レイヤー
- PTT批踢踢 — 台湾のネット協働文化のもう一つのルーツ
- 呉哲宇 — 別の市民技術の姿:新メディアアーティストがMarkdownとGitHubで台湾の知識主権にSSOTを構築
プロジェクトリンク
- GitHubリポジトリ:ianlkl11234s/mini-taiwan-pulse
- ライセンス:MIT License
- 主要言語:TypeScript 86.1% / Python 12.9%
- 関連データプラットフォーム:TDX運輸資料流通服務 · 政府資料開放平台 · SEGIS社会経済データサービス平台 · 中央気象署オープンデータ
- 市民技術コミュニティ:g0v台湾零時政府 · g0v市民技術イノベーション助成金
参考資料
- mini-taiwan-pulse GitHubリポジトリ
- TDX運輸資料流通服務
- 政府資料開放平台 data.gov.tw
- SEGIS社会経済データサービス平台
- 中央気象署オープンデータプラットフォーム
- NCDR災防中心データサービス平台
- g0v台湾零時政府
- g0v市民技術イノベーション助成金
- g0vハッカソン揪松網
- Supabase pg_cronドキュメント
- Uber H3六角グリッドインデックス
- OpenStreetMap Taiwan 開放街図台湾
- threebox:Mapbox + Three.jsプラグイン
- マスク地図を作った「キーボード救国」の裏側チームを暴く(TechNews 2020)
最終検証日:2026-04-19
- Migu Cheng (ianlkl11234s) · GitHub — 開発者プロフィール、bioは「Senior Data Analyst. Exploring AI automation in daily work.」、アカウント作成日2020-03-07↩
- ianlkl11234s/mini-taiwan-pulse — プロジェクトリポジトリ、データは2026-04-19 GitHub APIより:193コミット、241スター、12フォーク、1オープンイシュー↩
- mini-taiwan-pulse README — プロジェクトの完全な技術文書。レイヤー一覧、技術スタック、Overlay Registry / CustomLayer / Supabase pg_cronアーキテクチャ説明を含む↩
- Flightradar24 | Flight Tracker — 世界の航空便リアルタイム追跡サービス、ADS-B受信機で構成される追跡ネットワーク↩
- OpenStreetMap Taiwan 開放街図台湾 — 台湾OSMコミュニティの入口、Overpass APIで軌道、拠点、空港境界などのOSMタグデータを検索可能↩
- TDX運輸資料流通服務 — 交通部が2022年に5プラットフォームを統合した運輸オープンデータ単一入口、公路、鉄道、航空、海運、自転車のOData標準APIを提供↩
- SEGIS社会経済データサービス平台 — 内政部が構築した社会経済データGISプラットフォーム、村里レベルの人口統計空間レイヤーを提供↩
- 中央気象署オープンデータプラットフォーム — CWAのOpen API、観測、予報、格子、レーダー、衛星などのデータセットを提供↩
- NCDR災防中心データサービス平台 — 国家災害防救科技センターのCAP警報フィードと災害イベントAPI↩
- RSSサービス | 中央社 CNA — 中央通信社の公開RSS購読、タイトル、前文、リンク、特集画像を提供↩
- 政府資料開放平台 data.gov.tw — 国家発展委員会が運営する政府オープンデータ単一入口、2013年稼働開始↩
- マスク地図を作った「キーボード救国」の裏側チームを暴く | TechNews 科技新報 — 呉展瑋と好想工作室が72時間で全国6,000件以上の保険薬局のマスク在庫を繋いだ過程↩
- 揪松団について - g0vハッカソン — g0vハッカソンの累積59回以上、7,200人以上参加、950以上の提案統計↩
- mini-taiwan-pulse docs/known-issues.md — コミット
docs: known-issues 補 2026-04-09 IO爆表事件紀錄などのエンジニアリング日誌↩ - threebox - A three.js plugin for Mapbox GL JS — Mapbox + Three.js統合の代表的なサードパーティライブラリ↩
- Supabase Docs | Timeouts — Supabaseプーラーのstatement_timeoutデフォルトは2分、タイムアウトで接続が切断される↩
- pg_cron: Schedule Recurring Jobs in Postgres | Supabase Docs — Supabase組み込みのcronスケジューリング機構、データベース内の定期ジョブに使用↩
- Uber H3: Hexagonal Hierarchical Spatial Index — Uberオープンソースの六角形地理グリッドシステム、Apache 2ライセンス↩
- g0v台湾零時政府 — 2012年発足以降の市民技術コミュニティ、情報透明、オープンな成果、オープンな協働を核とする↩
- g0v市民技術イノベーション助成金 — 開放文化基金会(OCF)が執行する市民技術プロジェクト助成金↩