執筆
ブラウザもAPIキーも使わずに、中国語の旅行マップを一式作った話
4日間の香港旅行を計画していて、欲しかったものはシンプルでした。立ち寄る場所ごとに、簡体字中国語でラベル付けされた、わかりやすいマップが一枚ずつ。ピンを落としただけの英語のマップでも、リンクの羅列でもなく。12か所——ホテル、博物館、オーシャンパーク、ピークトラム、空港——それぞれを、印刷できる小冊子に貼り込める一枚のきれいなスクリーンショットに。
そこで、サンドボックスのウェブセッションで動くClaude Codeに作ってもらうことにしました。5分の用事のつもりが、「中国語の香港のマップ」がなぜ思ったより難しいのかを巡る小さな旅になりました——その中には、まさにこの種の作業を難しくするために存在する座標系まで含まれていました。
ブラウザなし、APIキーなし
いちばん素直なやり方——地図サイトを開き、言語を中国語に切り替え、各地点をスクリーンショットする——は、二重に封じられていました。このセッションには操作できるブラウザがなく、きれいな静的地図APIはどれも課金されるキーを要求します。この迂回は、むしろ欠点ではなく利点でした。GoogleやOpenStreetMapは香港を二言語または英語優先でラベル付けします。本当に中国語のラベルが欲しければ、中国の地図プロバイダが要ります。答えはAutoNavi(高德)の地図タイルでした。香港を簡体字中国語の地名——海洋公园、太平山顶、尖沙咀——でレンダリングしてくれます。現地に着いて、標識やアプリで目にするのとまさに同じ名前です。計画はこうです。生の256×256地図タイルを取得し、PythonのPillowで一枚ずつ手作業で組み上げる。
誰も教えてくれない座標系
ここに、1時間を食った落とし穴があります。中国の地図プロバイダは法律上、GCJ-02——俗に「火星座標」と呼ばれる難読化された座標系——の使用を義務づけられています。これは本来のWGS-84の緯度経度に、意図的で非線形なオフセットをかけます。本物のGPS座標をそのまま中国の地図に重ねると、ピンは数百メートル先——通りの向かいのビルの中や、いっそ港の中——に落ちます。このオフセットこそが目的なのです。精密な地理データに対して国家が課した、減速帯のようなものです。
そのため、どの座標もタイル計算に入る前に、標準のWGS-84 → GCJ-02変換を一度通す必要がありました。中心点を火星座標へずらし、そのずらした点の周りでタイルを取得し、マーカーを中央ちょうどに置いて、ずれた地図と一致させる。間違えれば、どのマップも何食わぬ顔で確信ありげに間違います。正しくやれば、誰も気づかない——それこそがマップの仕事のすべてです。
マップを描く
座標の問題が片づけば、残りは画像の配管仕事です。各地点について、どのタイルがその範囲を覆うかを割り出し、取得して760ピクセル幅のカードに貼り合わせ、中央に雫形のピンを落とし、その上に中国語の地名・通し番号・旅行の何日目かを載せたヘッダー帯を重ねる。中国語のテキストにはCJK対応フォントが要りますが、サンドボックスにはたまたまWenQuanYi Zen Heiが入っていて、用は足りました。
いちばん気に入ったのは検証の工程です。手で打ち込んだ座標は、まさに「合っていそうで実は微妙」になりがちなものなので、レンダリング後にClaude Codeは自分の出力画像を読み戻し、各ピンをその下のラベル付き地物と照合しました——科学館のピンは本当に香港科学馆の上か、それとも一区画北にずれていないか? いくつかのピンは微調整され、スターフェリー、ピークトラムの駅、空港はどれもぴたりと収まりました。作ってから眺める、というループ——眺める側と作る側が同じものであるときは、今でも少し新鮮です。
ローカライズは翻訳ではない
マップは簡単な部分でした。その周りの言葉こそ、人間くさいところでした。読み手は本土の標準中国語で、旅程の小冊子は気づけば香港の広東語のレジスターに滑り込んでいました。私はホテルを「地铁站上盖」と書いていました——「上盖」は「駅の真上に建つ」という意味の、申し分なく香港的な不動産用語で、本土の読者にはほとんど通じません。これは「就在地铁站楼上」になりました。続いて「离港」→「返程」、「手信」→「伴手礼」、そして「有得逛」(広東語の文法構造)→「能逛」。
食べ物は逆の扱いが要りました。「烧味饭」「炖奶」「滑蛋」は広東語の料理名ですが、これらは実際のメニューにある実際の名前なので、「直す」と逆に間違いになります。そこで名前はそのままに、標準中国語の注釈を添えました——烧味饭(即烧腊饭:叉烧、烧鹅、烧肉饭)。レストランそのものは、一巡のフィードバックを経て、個別のマップページを丸ごと取りやめました。オーシャンパークへ向かうようにディナーへ向かうことはないので、各日の予定にテキストとして残し、マップの索引からは退場しました。これはどれも辞書的な意味での翻訳ではありません。レジスターであり、方言であり、ある語がいつ直すべき地域語で、いつ残すべき固有名詞なのかを見分けることです。
ここから得たもの
これは私が何度もたどり着く場所に落ち着きます——有限で検証可能なタスクほど、作業は速く進む。タイルを貼り合わせる、既知の座標変換を当てる、ピンがラベルの上に乗っているか確かめる——どの工程にも、目で見て確認できる正解があります。これは、セキュリティ点検やコンプライアンスのツール作りで感じることと韻を踏みます。GCJ-02への寄り道は、「見つけるのは面倒だが、いったん知れば取るに足りない」たぐいの領域知識——まさに外注する価値のあるものです。
判断は私の側に残りました。どの12か所を「主要」とみなすか、レストランにはマップが要らないこと、本土の標準中国語の読者が「上盖」を読み解かされるべきではないこと。出来上がった小冊子——12枚の中国語マップ、日ごとの予定、そして印刷できるPDF一つ——は、ブラウザもAPIキーもないサンドボックスから生まれました。1年前なら、これが簡単なほうのバージョンだとは思いもしなかったでしょう。