「山手線でオリオン座を描いて」とClaude Codeに頼んだら、本当に描けた

東京の地図をぼんやり眺めていて、ふと思いました。山手線の駅をつないだら、星座が描けるんじゃないか。
そこでAIコーディングツールのClaude Codeに、日本語でこう頼んでみました。
山手線の駅を星に見立てて、オリオン座を描いてみて。
結果が上の図です。池袋・日暮里・恵比寿・浜松町の4駅がオリオン座の四隅に、信濃町・四ツ谷・市ケ谷の3駅が「三ツ星」になりました。夜空の色まで再現された星座図が、実際の駅の位置データから描かれています。
私がやったのは、日本語で頼んで、出てきた図を見て感想を言うことだけ。コードは1行も書いていません。この記事では、AIがどうやってこの図にたどり着いたのか、そして人間の「こっちのほうがよくない?」がどう効いたのかを紹介します。
AIが最初にやったのは「駅の位置を調べる」こと
オリオン座を描くには、まず各駅がどこにあるかを知る必要があります。Claude Codeは、鉄道駅の緯度・経度を公開しているWeb API(train.teraren.com)を見つけ、そこから山手線30駅の位置データを取ってきました。
ここで面白いのは、三ツ星の扱いです。オリオン座のベルトにあたる三ツ星は、四隅の星のちょうど真ん中あたりに、斜めに3つ並んでいます。山手線の駅は環状に並んでいるので、真ん中には駅がありません。そこでAIは、山手線の内側を走る中央・総武線のデータも取得し、信濃町・四ツ谷・市ケ谷の3駅を三ツ星にあてました。3駅がほぼ一直線に斜めに並ぶ様子は、本物の三ツ星とよく似ています。
「オリオン座らしさ」を数字で測る
では、四隅の4駅はどう選んだのでしょうか。
オリオン座の四隅の星(ベテルギウス、ベラトリックス、サイフ、リゲル)は、ざっくり言えば縦長の四角形に並んでいます。AIは理想の四角形を用意し、候補の4駅がその形にどれだけ近いかを計算しました。
使っているのは「プロクラステス分析」という手法です。名前は難しそうですが、考え方はシンプルです。
- 2つの図形の位置をそろえる(中心を重ねる)
- 大きさをそろえる
- いちばん重なるように回転させる
- それでも残る「ずれ」を数字にする
ずれが0に近いほど、形がそっくりということです。こうして、山手線の駅の中から「いちばんオリオン座っぽい」組み合わせを探していきます。
「上野より日暮里のほうがよくない?」
最初に出てきた案では、右肩のベラトリックスは上野でした。ところが、図を見るとどうもしっくりきません。右肩だけが下がっていて、オリオン座の堂々とした肩のラインに見えないのです。
そこでClaude Codeに一言だけ伝えました。「ベラトリックスは上野より日暮里のほうがよくない?」。AIはすぐにプログラムを直し、図を描き直しました。

並べてみると違いは一目瞭然です。日暮里にすると両肩の高さがそろい、ぐっとオリオン座らしくなります。
ただ、ここで意外なことが分かりました。先ほどの「ずれ」の数字を計算し直すと、上野案が0.127、日暮里案が0.157。数字の上では、上野のほうが理想の四角形に近かったのです。
これは、AIが使った「理想の形」がただの長方形で、本物のオリオン座の雰囲気までは表していなかったからです。数字は目安にはなりますが、「それっぽく見えるか」を最後に決めたのは人間の目でした。
AIが候補を数字で絞り込み、人間が見た目で最終判断する。この分担こそ、AIと一緒にものを作るときの基本形だと感じます。
できあがったプログラムの中身
完成したプログラムはPythonで書かれ、次の3つのライブラリを使っています。
| ライブラリ | 役割 |
|---|---|
| requests | Web APIから駅の位置データ(JSON)を取得する |
| NumPy | 座標の計算と、形のずれ(プロクラステス分析)の計算 |
| Matplotlib | 夜空風の配色で星座図を描き、PNG画像として保存する |
中心になっている「形のずれ」を測る部分は、わずか数行です。
def proc(X, Y):
X = X - X.mean(0); Y = Y - Y.mean(0) # 中心をそろえる
X /= np.linalg.norm(X); Y /= np.linalg.norm(Y) # 大きさをそろえる
U, _, Vt = np.linalg.svd(X.T @ Y) # いちばん重なる回転を求める
return np.sum((X @ (U @ Vt) - Y) ** 2) # 残ったずれ
行列の計算(特異値分解)を使っていますが、私はこの式を自分で考えたわけではありません。「オリオン座っぽさを測りたい」という目的を伝えただけで、AIがこの方法を選んで実装しました。
もうひとつの工夫が、地図のゆがみの補正です。東京あたりでは、経度1度ぶんの距離は緯度1度ぶんより短くなります。そのまま描くと図が横に間延びしてしまうため、緯度に応じた補正(cosをかける)を入れて、実際の地図と同じ縦横比で描いています。
駅データのようにWebから情報を取ってくる仕組みについては「APIとは?Web通信の仕組みから初心者向けに整理」、地図や位置情報を扱うAPIの例は「国土地理院APIとは?」で解説しています。
遊びで終わらない。仕事の図面づくりにも使える
「山手線でオリオン座」は遊びのような題材ですが、やっていることの本質は「座標データの一覧から、図を自動で描く」ことです。
これは、ものづくりの現場の製図作業とそのまま重なります。たとえば次のようなデータがあれば、同じ仕組みで図が描けます。
- 部品の穴あけ位置の座標
- 治具(ジグ)の配置座標
- 工場レイアウトの設備の位置
- 測定機が出力した計測データ
CADに1点ずつ手で入力する代わりに、CSVなどのデータから配置図や下書きの図面を数秒で描けます。データが変わっても、プログラムをもう一度実行するだけで図面が更新されるので、転記ミスも防げます。
しかも、そのプログラムを書くのはAIです。人間がやるのは「こういう図がほしい」と伝え、出てきた図を見て「ここはこうしたい」と直してもらうこと。AIに仕事を奪われる側ではなく、AIに仕事をさせる側に回るとは、こういうことなのだと思います。日本語で指示してAIにコードを書かせる開発スタイルは「バイブコーディング」とも呼ばれています。
この題材は「AI駆動開発コース」のカリキュラムに入っています
この「東京オリオン座」は、テックジムのAI駆動開発コースで実際に取り組む課題のひとつです。APIからデータを取得し、座標を加工して、図として出力するまでの一連の流れを、Claude Codeと一緒に体験します。
- Claude Codeに日本語で指示を出して、プログラムを作らせる
- 出てきた結果を見て、自分の言葉で修正を頼む
- 実在のデータを使い、仕事にも応用できる形で仕上げる
「AIを使ってプログラムを作る」感覚を身につけたい方は、ぜひコースの詳細をご覧ください。
▶ AI駆動開発コース(オンライン&リアルサポートつき)の詳細・お申し込みはこちら
まずは気軽に試してみたい方には、Claude Codeを実際に動かしてみる無料講座もあります。テックジム東京本校で毎週土曜日15時から、対面で開催しています。詳細は「Claude Code 無料講座|初心者向け・東京で学べる対面講座【毎週開催】」をご覧ください。
よくある質問
Q. プログラミングの経験がなくても、同じことができますか?
Claude Codeには日本語で指示できるので、コードを書いた経験がなくても試せます。ただし、Claude Codeを動かすための環境の準備は必要です。始め方は「Claude Codeとは?使い方・始め方・できることを初心者向けに解説」で紹介しています。
Q. 三ツ星はなぜ山手線の駅ではないのですか?
三ツ星はオリオン座の中央に並ぶ星なので、環状の山手線には対応する位置に駅がありません。そこで、山手線の内側を東西に走る中央・総武線の信濃町・四ツ谷・市ケ谷を使いました。
Q. ほかの星座も描けますか?
同じ仕組みで、星座の形と駅の組み合わせを変えれば描けます。北斗七星やカシオペヤ座など、形の特徴がはっきりした星座は試しがいがあります。
AIに仕事を任せるときの心得
AIに任せる範囲と、自分で決めることの分け方を、江戸幕府12代将軍のエピソードから考えた記事もあります。
この記事は、テックジム創業者によるnoteの記事「「山手線でオリオン座を描いて」とAIに頼んだら、本当に描けた話」をもとに、プログラムの中身と検証結果を加えて再構成したものです。駅の位置データは train.teraren.com のAPIから取得しています。







