ホームブラウザから亀場を使う

ブラウザから亀場を使う

Updated on Oct. 22, 2026

2026年10月22日版以降の亀場サーバーには、PCやスマートフォンのブラウザから亀を動かす機能が内蔵されています。 ボタンで亀を操作する「リモコン」と、JavaScriptでプログラムを書いてその場で実行する「亀場コード」の2つがあり、 亀場コードでは、AIに頼んでプログラムを書いてもらうこともできます。 ブラウザ側には何もインストールする必要はありません。

亀場サーバーの画面は日本語の文字を表示できません。亀の名前や say() で書く文字は、半角の英数字にしてください。

1. 使い始める

亀場サーバーを起動したら、同じPCのブラウザで次のアドレスを開きます。

アドレス内容
http://localhost:2280/playリモコン:ボタンで亀を操作する(スマートフォン向け)
http://localhost:2280/code亀場コード:JavaScriptでプログラムを書いて実行する(PC向け)
http://localhost:2280/dashboard対戦モニター:全体の様子、スコア、イベントを一覧する
http://localhost:2280/WebGLによる実況中継(従来の機能)

ほかのPCやスマートフォンから使うときは、次の準備が必要です。

  • 亀場の上で右クリックして「Toggle Private/Public Mode」を選ぶ(または @ キー)。ウィンドウのタイトルが「Public Turtle Field」になれば、他の端末から接続できます。
  • アドレスの localhost を、亀場サーバーのPCのIPアドレスに置き換える(例:http://192.168.1.10:2280/play)。
  • 亀場サーバーのPCのファイアウォールで、ポート2280(ブラウザ用)と2222(従来のプログラム用)への接続を許可する。
  • 端末と亀場サーバーが同じネットワークにいること。学内Wi-Fiなどで端末どうしの通信が禁止されていると接続できません。

ブラウザ1つ(タブ1つ)が亀1匹に対応します。ブラウザを閉じたり再読み込みしたりすると、その亀は亀場から消えます。

2. リモコン(/play)

スマートフォンでも使いやすい、ボタン操作の画面です。最初に名前(半角英数字)と色を設定してください。

ボタン動作
▲ / ▼前進 / 後退(押し続けると連続して動く。歩幅はスライダーで調整)
⟲ / ⟳左 / 右に回る(角度はスライダーで調整)
✏️ / ✋ペンを下ろす / 上げる
発射弾を撃つ(対戦モードのとき)
✨空いていそうな場所へワープする
⬆︎N北(上)を向く
📍現在の位置を表示する

下の「コマンド」欄には、亀場サーバーとの通信で使う命令(F 100、T R 90 など)を直接入力することもできます。 ; で区切ると複数の命令を一度に送れます。

3. 亀場コード(/code)

ブラウザの中でJavaScriptのプログラムを書き、「実行」ボタン(または Ctrl+Enter、Macでは ⌘+Enter)で亀を動かします。 命令の名前は Node.js用のAPI と同じですが、それぞれの命令の前に await を付けて書くのが違いです。

// 1 辺 100 の正方形を描く
await pd();                 // ペンを下ろす(最初は上がっている)
for (let i = 0; i < 4; i++) {
  await fd(100);
  await rt(90);
}
const [x, y] = await q_pos();
print("いまの位置:", x, y);
  • 「停止」ボタンで、いつでもプログラムを止められます。無限ループになっても大丈夫です。止めても亀はそのまま残り、次のプログラムを続けて実行できます。
  • 間違いがあると、出力欄に行番号付きで表示され、その行番号が赤くなります。
  • 「サンプルを開く」から、正方形・星形・渦巻き・壁を避けて歩く・対戦ボットの5つの例を読み込めます。
  • 書いたプログラムはそのブラウザに自動で保存されます。「保存」「開く」でファイルとして保存・読み込みもできます。
  • プログラムは各自のブラウザの中で実行され、亀場サーバーには命令だけが送られます。

使える命令

命令はたらき
await fd(距離) / bk(距離)前進 / 後退
await rt(角度) / lt(角度)右 / 左に回る(度)
east() north() west() south()その方角を向く
jump(x, y) / rjump(dx, dy)座標へ / 相対的に移動(線は描かない)
home() / rst()中央へ / 中央に戻って初期化
pd() / pu()ペンを下ろす / 上げる(最初は上がっている)
col(r, g, b) / lw(太さ)色(各0〜1) / 線の太さ
line() fill() brush() point()描き方(線 / 塗りつぶし / 毛筆 / 点)
say("Hello") / nm("Taro") / tm(番号)文字を書く / 名前 / チーム(文字は半角英数字)
const [x, y] = await q_pos()位置(亀場は −256〜256)
await q_dir()向き(度。東が0、左回りが正)
const [dir, team] = await q_rader(n)n番目に近い物体(亀・ドーナッツ)の方向とチーム(自分の向きからの角度で左回りが正、±20度ほどの誤差あり)
const [kind, team] = await q_finder()正面の射程内の物体(0:なし 1:亀 2:ドーナッツ 3:障害物 4:壁)
const [l, f, r] = await q_sonar()左・前・右の障害物
q_score() q_id() q_time() q_alive() q_coin() q_mycoin()スコア・チーム・時刻・生存・コイン
fire() / rf(距離)弾を撃つ / ファインダーの射程
bcas("文") / q_bcas()チームへの通信 / 受信
coin() pickcoin() dropcoin()コインの操作
donut()ドーナッツを出す(1匹あたり10個まで)
robot() bmode() gmode() cf() clr() bgc(r, g, b)ロボットを出す / 対戦モード・グラフィックスモード / 描画を消す / 全員の亀を消す / 背景色(亀場全体に効くため、授業用の設定では亀場サーバー以外のPCからは使えず false が返る)
onEvent("hit_by_bullet", async () => {…})イベントが起きたときの処理
print(…) / await sleep(ミリ秒)出力欄に表示 / 待つ
await cmd("F 10")通信用の命令を直接送る(応答の行が返る)

亀は他の亀と重なると、前進もジャンプもできなくなります。大勢で使うときに全員が home() や jump(0, 0) を使うと、中央に集まって動けなくなるので注意してください。

4. AIにプログラムを書いてもらう

亀場サーバーでAIが使えるように設定されていると、亀場コードの画面に「AIに頼む」欄が表示されます。 「色を少しずつ変えながら花びらが8枚の花を描いて」のように日本語で頼むと、AIが書いたプログラムがエディタに入ります。

  • 「いまのプログラムも送って直してもらう」にチェックを入れると、今のプログラムの修正を頼めます。
  • 「元のプログラムに戻す」で、AIに頼む前の状態に戻せます。
  • 同じPCから続けて頼むときは、数秒の間隔をあけてください。
  • AIが書いたプログラムは、実行する前に読んで、わからないところを確かめましょう。

亀場サーバー側の設定(先生向け)

AIを使うには、Anthropic または OpenAI の API キーを、亀場サーバーを起動するときに渡します。 学生のブラウザからの依頼は亀場サーバーが中継してAIに送るので、API キーが学生側に渡ることはありません。 また、ほかのウェブサイトのページから亀場サーバーのAIを呼び出すこともできないようになっています。

# macOS / Linux(Anthropic)
export ANTHROPIC_API_KEY=sk-ant-...
./TurtleField

# OpenAI を使う場合(モデル名は必ず指定)
export OPENAI_API_KEY=sk-...
./TurtleField -ai-provider openai -ai-model モデル名
# Windows(PowerShell)
$env:ANTHROPIC_API_KEY = "sk-ant-..."
.\TurtleField.exe

起動時に ai: enabled と表示されれば有効です。API キーはコマンドラインに直接書かず、環境変数か -ai-key-file で渡してください。

オプション意味
-ai-provider Panthropic(既定)または openai
-ai-key-file FILEAPI キーをファイルの1行目から読む
-ai-model NAME使うモデル(Anthropicの既定は claude-sonnet-5-5、速く安くするなら claude-haiku-5-5。OpenAIは指定必須)
-ai-interval 秒1台のPCから続けて頼めるまでの間隔(既定5秒)
-ai-max N亀場サーバーを起動している間にAIを使える回数の上限(既定は無制限)
-ai-max-tokens NAIの回答の長さの上限(トークン数、既定16000)。超えると回答が途中で切れ、画面に警告が出る
-ai-cache 5m|1h|offAIへの指示書をプロンプトキャッシュに載せる(Anthropic、既定5m)。2回目以降は指示書の読み込みが安く速くなる
-ai-prompt FILEAIへの指示書を差し替える
-ai-proxy host:port学内のプロキシを通す(既定は環境変数 HTTPS_PROXY)
-ai-ca FILEルート証明書(PEM)を指定する

AIへの依頼1件ごとに、亀場サーバーの端末に ai: 192.168.x.x request ... (tokens in 1234, out 567) のような記録が表示されるので、利用量の目安にしてください。 AIへの指示書(亀場の命令の説明や回答の形式)は、ソースコードの web/ai_prompt.md にあり、授業に合わせて書き換えることができます。

5. 授業・見学会で使うときの設定

大勢で同じ亀場を使っても、一人の操作が全体を乱さないように、ブラウザから参加する人には次の制限が最初から有効になっています。

  • 亀場全体に効く命令は使えない:他のPCのブラウザからは、全員の亀を消す、描画を消す、背景色を変える、対戦モードを切り替える、ロボット・トランプ・コインを出す、の命令が ERR になります(ドーナッツは出せます)。亀場サーバーを動かしているPC(先生のPC)のブラウザと、従来のプログラム(TCP)からは、これまでどおり使えます。
  • 1台のPCから開ける接続は4つまで(亀が増えすぎるのを防ぐため)。
  • 同時に接続できるのは60まで(従来のプログラムとブラウザの合計)、亀・ドーナッツ・ロボットなどは合わせて300個までです。
オプション意味
-web-commands restricted既定。他のPCのブラウザだけ制限する
-web-commands strict亀場サーバーのPCのブラウザも制限する
-web-commands all制限しない
-web-per-host N1台のPCから開ける接続(亀)の数

プロジェクターに亀場サーバーの画面と対戦モニターを映しておくと、全員の亀の動きや対戦の経過を共有できます。

6. 自作のウェブアプリから使う(WebSocket)

リモコンと亀場コードは、ws://亀場サーバー:2280/ws にWebSocketで接続し、従来のTCP(ポート2222)と同じ命令を送っています。 自作のウェブアプリからも同じように使えます。

  • 送る:テキストメッセージに1行以上の命令(改行か ; で区切る。メッセージの終わりも行の終わりとみなす)
  • 受け取る:命令1つにつき1メッセージ。中身はTCPの応答1行と同じで、末尾の改行だけがない
  • 1接続 = 亀1匹。TCPのプログラムと同じ亀場で一緒に動く
  • 亀場サーバーが配信するページ以外(ほかのサイト)からは接続できない
const ws = new WebSocket("ws://" + location.host + "/ws");
ws.onmessage = (e) => console.log("応答:", e.data);   // 例: "OK @ 1234 0"
ws.onopen = () => ws.send("P D;F 100;T R 90;F 100");