対象:設計システムの責任者と自動化エンジニア。要点:リモート Mac 上で launchd と Node 22 LTS が Figma REST の /v1/images から PNG を定時取得し、OpenClaw Gateway/Skills がピクセル寸法と色彩空間(sRGB)をコンプライアンス巡検してから promoted/ へ昇格させます。主契約は「誰がどの UI で書き出したか」ではなく API と manifest です(BlogPosting・HowTo・FAQPage)。
目次
REST を主契約にする理由
フォルダ常時監視型の Runbook(例:Skills UI と書き出しウォッチ)とは角度を分け、Figma REST の node_id と整数 scaleを manifest に固定して取得を再現可能にします。ディスクは API 着地の短いバッファに限定し、版の説明責任を HTTP 契約側に寄せます。パラメータと色の前提は Dev Mode PNG マトリクスと sRGB/P3 チェックリストへ接続します。
トークンと最小権限
PAT は当該ファイルの読み取り+画像取得に必要なスコープのみ。保存は 0600 のファイル、四半期ローテ、file_key 単位でトークン分割。OpenClaw と launchd は同一ユーザに揃え、インストールガイドと整合させます。HTTP は Node に閉じ、Gateway には magick と検査シェルのみ(トークンをチャットに載せない)。
エクスポートジョブのテンプレート
Node 22 LTS を engines と Volta/asdf で固定。ジョブ YAML に file_key・ids・format: png・整数 scale・命名規則を列挙。POST /v1/images → URL 取得 → inbox/*.part へストリーム → fsync 後 rename で確定し、ゲートは完成 PNG のみを見ます。
着地バッファの安定化とリトライ
inbox は API バイトの短い着地口:サイズ不変窓と *.part 無視でデバウンスし、file_key 単位で直列化。429 は Retry-After 優先、なければ上限付き指数バックオフ。理由コードで一時障害と manifest 不整合を分け、後者は quarantine/。ログ形は 監視・リトライ・ログ HowTo、CLI 連鎖は リトライ雛形。
色彩空間/sRGB 検証ルール
magick identify -verbose で WxH=manifest、Colorspace=sRGB、想定外 ICC は quarantine。印刷系は先に CMYK→sRGB 方針へ。
失敗アラートのサンプル
シークレットなしの JSONL 1 行 1 件(logs/compliance.jsonl)を Webhook 側で ok:false のみ転送。
{"ok":false,"reason":"geometry_mismatch","file":"btn_primary@2x.png","expected":"120x48","actual":"118x48","trace_id":"a1b2c3d4"}
{"ok":false,"reason":"icc_display_p3","file":"hero_slice@1x.png","trace_id":"e5f60718"}
{"ok":false,"reason":"http_429","retry_in_sec":45,"attempt":2,"file_key":"XXXXXXXX"}
再現手順(ゲートウェイ直列)
- ディレクトリ:
~/figma_jobs/{inbox,quarantine,promoted,logs,bin}を用意し、パスをリポジトリの README に固定する。 - Node:
npm ci、node -vを README に転記。トークンは環境変数でファイルパスを渡し、中身は Node が読む。 - OpenClaw:
openclaw gateway up --bind 127.0.0.1:…。Skills のツール allowlist にbin/inspect_png.shとmagick、当該ツリー内のmvのみ。 - 定時:
launchdで 15〜60 分間隔。ThrottleIntervalで連打を避け、標準出力はlogs/exporter.logへ。 - 巡検:着地デバウンス後に WxH・ICC を確認し、合格のみ
promoted/。JSONL にok:true行を残す。 - 接続手順:ご利用ガイド(ログイン不要)。
排障 FAQ
200 が返るのに images の URL が null になる
node_id がコンポーネント切り離しなどで無効化された典型です。Dev Mode から manifest を再生成し、CI で「存在しない id」が混ざったら失敗させます。
ブラウザでは色がズレるが identify は sRGB になっている
CSS 側の color-profile や埋め込みプロファイルの扱いを確認します。ゲートに加え、デザイン契約を Dev Mode マトリクスに揃えておくと議論が早いです。
Gateway が magick を拒否する
allowlist はパス厳格です。/opt/homebrew/bin/magick を明示し、plist の PATH と一致させたうえで Gateway を再起動します。
Skills に Figma 呼び出しを直書きしたい
トークン漏えいとレート制御の両方で不利です。HTTP は Node、OpenClaw は移動・検査・通知に限定してください。
まとめ
Figma REST を主契約に Node 22 で取得し、OpenClaw Gateway/Skills で寸法・sRGB を巡検すると、説明責任が manifest と JSONL に残ります。リモート Mac に集約すればトークン・定時・ImageMagick を一度整え、設計自動化を安定運用しやすくなります。