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

山手線の駅を星に見立てて描いたオリオン座。池袋・日暮里・恵比寿・浜松町の4駅と、三ツ星の信濃町・四ツ谷・市ケ谷

東京の地図をぼんやり眺めていて、ふと思いました。山手線の駅をつないだら、星座が描けるんじゃないか。

そこでAIコーディングツールのClaude Codeに、日本語でこう頼んでみました。

山手線の駅を星に見立てて、オリオン座を描いてみて。

結果が上の図です。池袋・日暮里・恵比寿・浜松町の4駅がオリオン座の四隅に、信濃町・四ツ谷・市ケ谷の3駅が「三ツ星」になりました。夜空の色まで再現された星座図が、実際の駅の位置データから描かれています。

私がやったのは、日本語で頼んで、出てきた図を見て感想を言うことだけ。コードは1行も書いていません。この記事では、AIがどうやってこの図にたどり着いたのか、そして人間の「こっちのほうがよくない?」がどう効いたのかを紹介します。

AIが最初にやったのは「駅の位置を調べる」こと

オリオン座を描くには、まず各駅がどこにあるかを知る必要があります。Claude Codeは、鉄道駅の緯度・経度を公開しているWeb API(train.teraren.com)を見つけ、そこから山手線30駅の位置データを取ってきました。

ここで面白いのは、三ツ星の扱いです。オリオン座のベルトにあたる三ツ星は、四隅の星のちょうど真ん中あたりに、斜めに3つ並んでいます。山手線の駅は環状に並んでいるので、真ん中には駅がありません。そこでAIは、山手線の内側を走る中央・総武線のデータも取得し、信濃町・四ツ谷・市ケ谷の3駅を三ツ星にあてました。3駅がほぼ一直線に斜めに並ぶ様子は、本物の三ツ星とよく似ています。

「オリオン座らしさ」を数字で測る

では、四隅の4駅はどう選んだのでしょうか。

オリオン座の四隅の星(ベテルギウス、ベラトリックス、サイフ、リゲル)は、ざっくり言えば縦長の四角形に並んでいます。AIは理想の四角形を用意し、候補の4駅がその形にどれだけ近いかを計算しました。

使っているのは「プロクラステス分析」という手法です。名前は難しそうですが、考え方はシンプルです。

  1. 2つの図形の位置をそろえる(中心を重ねる)
  2. 大きさをそろえる
  3. いちばん重なるように回転させる
  4. それでも残る「ずれ」を数字にする

ずれが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から取得しています。

プログラミング学習に興味がある方は、まずは無料体験会へ

無料体験会・お申し込みはこちら