mcpField
C
cobejs

cobejs

github.com/mengtoデザイン・UI7.1k1.7k 回インストール3 日前に更新
リポジトリ

cobejs について

cobejs は、cobe を使った軽量なインタラクティブ WebGL 地球の構築を支援するスキルです。回転やマーカー、キャンバス設定の指針を提供し、Web ページへの表示に役立ちます。

主な機能

  1. 01cobe による WebGL 地球の設定
  2. 02回転と外観のオプション
  3. 03位置マーカー
  4. 04インスタンスの一時停止と破棄
  5. 05レスポンシブキャンバスと DPR の指針

活用シーン

  1. 01ヒーローや紹介ページへの地球表示
  2. 02地球上のマーカーによる位置表示

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mengto/skills --skill cobejs

インストール後、Claude Code で/cobejsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

REFERENCES.md
demo/
index.html
PROMPT.md

詳細

cobe.js — 軽量な WebGL 地球儀スキル

使用する場面

  • ヒーローページや概要ページに「回転する地球儀」や位置マーカーを表示したい場合
  • 小型で目的を絞った地球儀ライブラリが必要な場合(three.js 全体ではなく)
  • 最小限のセットアップで、装飾とインタラクティブな機能(マーカー、回転)を追加したい場合

主な API/パターン

  • コア:
    • import createGlobe from "cobe"
    • const globe = createGlobe(canvas, { ...options, onRender(state) { ... } })
  • 重要なオプション(一般的なもの):
    • devicePixelRatio、width、height
    • phi、theta(回転角度)
    • scale、dark、diffuse
    • baseColor、markerColor、glowColor
    • markers: [{ location: [lat, lon], size, color? }]
  • ライフサイクル:
    • globe.toggle() で RAF を一時停止します
    • globe.destroy() でインスタンスを削除します

よくある問題

  • Canvas のサイズが一致しない
    • CSS サイズを設定し、DPR に合わせて拡大した width/height も設定します。
  • リサイズ時に更新されない
    • width/height を再計算し、インスタンスを再作成するかパラメーターを更新します。
  • モバイルで DPR が高すぎる
    • DPR を 1~2 に制限します。

クイックレシピ:マーカー付きのレスポンシブな地球儀

import createGlobe from "cobe";

const canvas = document.getElementById("cobe");
let phi = 0;

function setup() {
  const rect = canvas.getBoundingClientRect();
  const dpr = Math.min(window.devicePixelRatio, 2);
  canvas.width = Math.round(rect.width * dpr);
  canvas.height = Math.round(rect.height * dpr);

  const globe = createGlobe(canvas, {
    devicePixelRatio: dpr,
    width: canvas.width,
    height: canvas.height,
    phi: 0,
    theta: 0.2,
    dark: 0,
    diffuse: 1.2,
    scale: 1,
    mapSamples: 16000,
    mapBrightness: 6,
    baseColor: [0.2, 0.2, 0.25],
    glowColor: [1, 1, 1],
    markerColor: [0.8, 0.5, 1],
    markers: [{ location: [1.3521, 103.8198], size: 0.08 }],
    onRender: (state) => {
      state.phi = phi;
      phi += 0.01;
    },
  });

  return globe;
}

let globe = setup();
window.addEventListener("resize", () => {
  globe.destroy();
  globe = setup();
});

ユーザーに確認すること

  • 地球儀のサイズと配置(ヒーロー、セクション、カード)をどうしますか?
  • マーカーの位置と色(ブランドに合わせたもの)はどうしますか?
  • 必要なインタラクション(ドラッグして回転、または自動回転)はどのようなものですか?

コメント