ノーコードUIビルダーで一貫したテーマを実現するデザイントークン
ノーコードUIビルダーのデザイントークンは、色・タイポ・スペーシング・バリアントなどを一度定義しておけば、推測なしで一貫したUIを素早く作れるようにします。

なぜチームのUIは一貫性を失うのか
UIの不一致はたいてい「デザインの問題」として始まるわけではありません。時間の問題として始まります。今すぐボタンが必要で、別のページからコピーして少しだけ調整して「十分に近い」見た目にしてしまう。
こうして小さな違いが入り込みます:ほとんど同じに見える二つの青、角の半径が6から8に変わる、見出しが「ちょっと太め」に見える、画面ごとにパディングが作った人次第で変わる。ノーコードビルダーではコントロールがすぐ側にあり変更が無害に感じられるため、ワンオフの微調整がもっと簡単になります。
プロダクトが成長すると、ドリフトは加速します。ページが増えればパターンの繰り返しも増えます。ビルダーが増えれば個人の好みも増えます。チームが増えれば「こっそりの手直し」も増えます。顧客向けポータルを一人が、管理画面を別の人が作ると、同じブランドの二つの解釈が生まれることになります。
日常の作業では「目で見て合わせる」が現れます:色を見た目が「ちょうど良く」なるまで選ぶ、画面が「窮屈」に見えるから数ピクセルだけ余白を動かす、新しいボタンスタイルを作る、デフォルトが「ちょっと小さい」と感じてフォントサイズを混ぜる、あるいは一つの画面だけ直して他を確認しない。
コストは後から現れます。レビューが遅くなり、フィードバックは主観的になります(「他のページっぽくして」)。変更を全体に適用するのが難しくて手戻りが増えます。ウェブとモバイルは似て非なる方向に分岐します。トークンはこうした「十分に近い」判断を共有値に置き換えます。チームとアプリが成長してもUIは一貫します。
デザイントークンをわかりやすく言うと
デザイントークンはUIに関する名前付きの決定です。「この青を使って」とか「ボタンをゆったりさせて」と言う代わりに、その選択に再利用できる名前を付けます。
トークンは生の値そのものではありません。生の値は 16px や #2563EB、あるいは 600(フォントのウェイト)かもしれません。トークンはその値が製品内で何を意味するかを説明するラベルで、例えば space-4、color-primary、font-weight-semibold のようになります。
この切り替えが目分量の問題を止めます。人が感覚で値を選ぶと、やがて5種類の似た青、3種類の微妙に違う見出し、画面ごとに変わるスペーシングが集まってしまいます。
トークンは単一の真実の源として機能します。すべての画面とコンポーネントが同じ名前セットを参照すれば、見た目を変えるときは多数の画面を探し回るのではなく、いくつかのトークン値を更新するだけで済みます。
またトークンはデザインと開発の橋渡しになります。デザイナーは仕様でトークン名を使い、ビルダー側も同じ名前を使えば、引き渡しの際にデザインが失われにくくなります。
一般的なトークンセットは幾つかのカテゴリに分かれます:色の役割(primary, background, text, danger)、タイポグラフィ(フォント、サイズ、ウェイト、行間)、スペーシングのステップ(padding、margin、gap)、形状と奥行き(radius、ボーダー幅、シャドウ)、そして場合によってはモーション(時間、イージング)です。
実際の製品に必要な最小限のトークンセット
ほとんどのチームは巨大なトークンライブラリを必要としません。多くの画面をカバーして人々が値を推測しなくなる、小さく分かりやすいセットが必要です。これはノーコードツールでは特に重要で、「この一回だけ」の調整がすぐに広がるからです。
実用的なスターターセットは次の5グループをカバーします:
- カラー:ブランドの役割(primary、secondary)をいくつか、ニュートラル系(text、background、border)、ステータス(success、warning、error)。よく使うなら hover や disabled の役割も追加します。
- タイポグラフィ:フォントファミリは1つ(最大でも2つ)、サイズは小さめのスケール(例:12/14/16/20/24/32)、実際に使うウェイトと対応する行間。
- スペーシング:簡潔な階段状(例:4/8/12/16/24/32)をパディングやギャップに使う。
- 形状とエフェクト:いくつかの半径(none/sm/md/lg)、ボーダー幅、シャドウの小セット(0-3)。
- モーション(任意):アニメーションを使う場合のみ、2-3のデュレーションと1-2のイージング名。
ライブラリをシンプルに保つルール:ある値が3箇所以上で出現するならトークン化を検討。1回しか出ないなら、その値が新しい標準になる前に疑ってかかること。
トークンが混乱しない命名ルール
良いトークン名は議論を未然に防ぎます。人が検索しなくても推測できれば再利用されます。推測できなければ新しいトークンが作られ、テーマが分裂します。
見た目ではなく意味で命名する
UIでその値が果たす役割を示す名前を優先しましょう。text-primary は使う場面を示します。blue-600 は単に色の名前です。
便利なパターンは二層に分けることです:
- ベーストークン:
color-blue-600、space-16、font-14のような生のビルディングブロック - 意味トークン:
text-primary、bg-surface、border-mutedのようなUIでの役割
ノーコードUIビルダーでは、意味トークンが非デザイナーにとって正しい値を素早く選ばせる助けになります。
新しいトークン追加のルール
多くのトークンライブラリが散らかるのは「新しいものがデフォルト」になるからです。デフォルトを「再利用」に変えます。
簡単なルールを守りましょう:
- 2箇所以上で使われるか、hover・disabled・errorなど実際の状態を支える場合のみトークンを追加する。
- 一回限りのものはコンポーネント内に閉じる。
- ほとんど同じ差異のトークンがあれば、一つに絞って他を削除する。
- トークンの目的を一文で説明できないなら追加しない。
命名は標準化します。キャーシングスタイルを1つ(kebab-case が良い)、安定したプレフィックス(text-、bg-、border-、icon-、space-)を使い、数値スケールを一貫させます(space-4、space-8、space-12、space-16)。
実践手順:既に使っているものからトークンを定義する
現在のUIを証拠として扱います。何か新しく作る前に、スクリーンショットを集め、スタイルを調べ、実際に本番に出ているすべての色値、フォントサイズ、スペーシングをメモしてください(一回限りの値も含めて)。
次に、重複を意図的に減らします。よくあるのは、ほぼ同じグレーが5つの微妙に違う16進数で使われていたり、スペーシングが14/15/16とジャンプしていることです。保持する値を一つ選び、古い値をそれにマッピングします。ここでトークンが実用的になります:趣味の論争を止めて、小さな共有選択に合意するのです。
最初のバージョンは一回のパスで作れます:
- パレットトークン:原色(ブランド、ニュートラル、フィードバック色)
- 意味トークン:意味ベースの色(text、background、border、success、warning)
- タイポグラフィスケール:役割の明確な6-8サイズ(body、label、H1-H3など)
- スペーシングスケール:使い回せる6-10の段階
- コンポーネントの基本:標準的な半径とシャドウをいくつか
各トークンには一文のガイダンスを添えてください:どこで使い、どこでは使わないか。例:「text-muted は補助テキスト用、プライマリボタンには使わない」。
最後にオーナーシップを決めます。1人か小さなグループに変更承認権を与え、「既存のトークンで対応できない場合のみ新しいトークンを追加する」という簡単なルールを設けると、システムを安定させられます。
ノーコードUIビルダー内でのトークン適用方法
まず各画面が継承するデフォルトを設定します:基準となるテキストスタイル(フォント、サイズ、行高、色)、見出しスタイル(H1-H3)、そしてページがランダムに見えないような小さなレイアウトスペースルール。
次に、ビルダーが呼ぶところのテーマ設定(テーマ変数、グローバルスタイル、スタイルプリセット、デザインシステム設定)にトークンをマップします。目標は「Primary」や「Space/16」を選ぶとトークンが選ばれることであり、ワンオフの値ではないことです。
再利用可能なスタイルは毎日使うパターンに絞って作りましょう。スターターセットの例としては、カードスタイル(背景、ボーダー、半径、パディング、シャドウ)、フォームフィールドスタイル(ラベル、入力、ヘルプテキスト)、ボタンスタイル、テーブル行の密度とホバー状態などが挙げられます。
状態は不一致が入り込みやすい場所なので早めに定義してください。各インタラクティブコンポーネントは hover、focus、disabled、error に対してトークン駆動の値を持つべきです。フォーカスはどこでも同じリング色と太さを使い、エラーは同じボーダーとテキスト色の組み合わせを使うべきです。
最後に共有計画を立てます。ワークスペースがテンプレートや再利用モジュールをサポートするなら、トークンとベーススタイルを「スターターアプリ」に入れて新規プロジェクトがコピーできるようにしてください。こうすると新しい画面はデフォルトで一貫した決定を継承します。
一貫性を保つコンポーネントバリアント
バリアントはUIシステムが落ち着いた予測可能なものになるか、一連のワンオフ調整の山になるかを左右します。バリアントは色・タイプ・スペーシング用のトークンに薄くマッピングされると最も効果的です。
まずは広く使う主要コンポーネントを小さく絞りましょう:ボタン、入力、バッジ、アラート、カード。これらに対して共通の二次元の選択肢を与えます:サイズ と 意図(intent)。サイズは機械的(タイポグラフィとスペーシング)、意図は意味(セマンティックカラー)であるべきです。
サイズと意図を迷わせない方法
サイズバリアントはフォントサイズ、パディング、ボーダー半径などのいくつかのトークンベースのプロパティのみを変えることで一貫します。意図バリアントは主に色の役割(背景、テキスト、ボーダー)を変え、スペーシングを密かに変えないようにします。
多くのプロダクトをカバーするセットの例:
- サイズ:sm、md、lg
- 意図:primary、secondary、danger
- 状態:default、hover、focus、disabled
チームが従うべき操作ルール
状態ルールはボタンだけでなくすべてのコンポーネントに適用してください。例えば:フォーカスは常に視認できるリングを表示、ホバーは一貫した方法でコントラストを上げる、disabled は同じ不透明度を使いクリックをブロックする、など。
「danger」のように繰り返し出る意味を表す場合にのみ新しいバリアントを追加します。一時的なレイアウト要件なら、それはバリアントではなく通常は新しいコンポーネントやラッパーで解決すべきです。
ウェブとモバイルのテーマを揃えておく方法
ウェブとモバイルで製品を出すとき、「同じブランド」は必ずしも「同じピクセル」を意味しません。目標はプラットフォーム間で画面が同じファミリーとして感じられることです。
まず共有できるトークンを決めます:色の役割(background、surface、text、primary、danger)、タイポグラフィスケール(サイズとウェイト)、スペーシングトークン(4、8、12、16、24)。これらは推測を減らし、アップデートを予測可能にします。
次に実際の差異を受け入れます。モバイルはタッチターゲットを大きくする必要があり、余白もやや広めにした方が良い場合が多いです。ウェブはテーブルやサイドバー、マルチカラムの密度が高くなりがちです。フォントも異なることがあります:ウェブではブランドフォントを使い、iOS/Androidでは可読性とパフォーマンスのためにプラットフォームのデフォルトを好む場合があります。
実用的なアプローチは二層に分けることです:グローバルトークン(意味)とプラットフォームトークン(その意味をどうレンダリングするか)。
- グローバル:
color.text,color.primary,space.md,radius.sm,type.body - Web専用:
type.family.web,control.height.web,space.tableRow - Mobile専用:
type.family.mobile,control.height.mobile,space.touch
コンポーネント名(Button/Primary など)は一貫させ、サイズが異なっていても同じ名前を使います。リリース前に両テーマでコントラストチェックを必須にしてください。
ガバナンス:トークンを健全に保つ方法
トークンは安定で理解しやすくないと機能しません。軽量なガバナンスがないと、チームはこっそり「もう一つの青」や「もう一つのパディング」を追加してしまい、また目分量に戻ってしまいます。
軽量なトークン変更フロー
プロセスは小さく、しかし実効性のあるものにします:
- リクエスト:誰でも新しいトークンや変更を要請できる(スクリーンショットと理由を添えて)。
- レビュー:デザイナー1人とビルダー1人が主要な画面への影響を確認する。
- 承認:命名、アクセシビリティ(コントラスト、タップサイズ)、本当に新しいかどうかを確認する。
- リリース:週次やスプリント単位などスケジュールに沿って公開し、随時公開は避ける。
- 周知:何が変わったか、代わりに何を使うべきかを共有する。
シンプルな変更履歴と廃止方針を維持してください。古いトークンを置き換えるときは、推奨する代替を示し、しばらくは両方動くようにして新しい画面が古いものを採用しないようにします。
クリーンアップも仕事の一部です。月に一度、未使用のトークンやコンポーネントバリアントを削除するか少なくともフラグを立てましょう。
だれでも使えるようにする
非デザイナーには理論ではなく例が必要です。
やること:スペーシングラダーをギャップに使い、主要アクションにはPrimary Buttonバリアントを使う。
やってはいけないこと:パディングを「見た目で13pxにする」や、ある画面に合わせて新しいボタンスタイルを作ること。
トークン作業はプロダクトの優先順位(新機能、リブランディング、アクセシビリティ修正)に紐づけると、個人的な好みで更新が行われにくくなります。
よくある間違いと落とし穴
トークンの恩恵を失う最短ルートは、トークンをゴミ箱のように扱うことです。良い意図で始めても、いくつかのクイックフィックスが積み重なり、チームはまた目分量に戻ります。
よくある罠は、早い段階でトークンを増やしすぎることです。各画面ごとに色やスペーシングのトークンが増えると、システムではなく例外のカタログを作るだけになります。値を追加するのは少なくとも二箇所で使われる場合に限定しましょう。
もう一つの問題は、生の値がコンポーネントに忍び込むことです。誰かがボタンのパディングを「今回だけ14pxにする」やカードに直接16進色を使う、というのが典型例です。数週間後にはなぜ違うのか誰も覚えていません。目に見えて繰り返されるものはトークンにする習慣をつけてください。
またトークンタイプを混ぜることにも注意が必要です。gray-900 や space-4 のようなベーストークンと、text-primary や surface-muted のような意味トークンを混在させると問題が起きます。あるコンポーネントがベーストークンを使い、別のコンポーネントが意味トークンを使うと同じ役割で違う扱いになり得ます。
状態も後回しにすると痛い目に遭います。チームは通常ノーマルスタイルだけを定義し、リリース直前にフォーカス・ホバー・disabled・errorをパッチで追加します。結果として一貫しないフォーカスリングや3種類の「エラー」赤が生まれます。
スケール前に簡単なチェックを:
- 新トークンは共有ニーズに限定する。
- コンポーネント内に生の値を置かない習慣をつける。
- ベースと意味トークンを分けて一貫して適用する。
- 状態(focus、error、disabled)を早めに定義する。
- ダークモードや将来のブランド刷新に備え、意味トークンを入れ替えるだけで対応できる余地を残す。
スケール前のクイックチェックリスト
画面、チーム、プロダクトを増やす前に、基盤がコピー可能で推測なしに使えるかを確認してください。
- 色の役割が意味ベースになっている:text(default、muted、inverse)、surface(page、card)、border(default、focus)、status(success、warning、danger)をカバーしていること。
- タイプは小さなスケールに収まっている:H1-H3、body、small といった短いセットでサイズ・ウェイト・行高が定義されていること。
- スペーシングは覚えやすいステップを使っている:共通パディングとギャップが 4、8、12、16、24 のような階段にあること。もし「14」が繰り返し出るならラダーの見直しサインです。
- 主要コンポーネントにバリアントがある:よく使うコンポーネントに対してサイズ(sm/md/lg)と意図(primary/secondary/danger)がトークンの役割に合っていること。
- オーナーシップが明確:1人か小さなグループが変更を承認し、なぜ・影響範囲・いつ出すかの軽量ルーチンがあること。
例:ポータルと管理画面でのUIドリフトを止める
小さなチームが二つのアプリを同時に作っています:顧客向けポータルと内部の管理パネル。担当が異なり、ノーコードビルダーで素早く作るため、数週間でUIが「違う」感じになってきますが、誰にも具体的な問題を言えないことが多いです。
トークン導入前はレビューの指摘が積み重なります:ボタンはほとんど同じだが微妙に違う、スペーシングが画面ごとにずれる、フォームフィールドが揃わない、ポータルは「親しみやすく」見えて管理画面は偶然「堅い」印象になる。
小さく実用的なトークンセットを導入することで解決します。意味ベースの色(Primary、Success、Danger、TextMuted)、スペーシングスケール(4、8、12、16、24)、ボタンバリアント(Primary、Secondary、Ghost)を一つの半径と一貫した状態で定義します。
これで寄稿者はランダムな16進カラーやフォントサイズを選ばなくなり、トークンとバリアントを選ぶだけで新しいページは同じ決定を継承します。
開発は速くなり、レビューは細かな見た目の指摘から実際のUX課題へと変わります。「このボタンをプライマリバリアントにして」だけで済み、「もう少し青くて、少しだけ背を高くして」などの曖昧な指示が減ります。
その後小さなリブランディングが来ても、プライマリカラーとフォントスケールを数カ所更新するだけでポータルと管理画面が一緒に更新されます。
次のステップ:小さく始めて標準化する
人々がよく使い、ドリフトが目に見えているフローを1つ選びましょう:オンボーディング、設定ページ、シンプルなフォームなど。1つのフローを変換するのが、アイデアを証明し目分量を止める最速の方法です。
まずは安全な小さなトークンセットを用意:primary/background/text/border/danger、短いタイプスケール、スペーシングラダー、2-3の半径とシャドウ。次にトークンだけを使う小さなコンポーネントセットを作ります:ボタン1つ、入力1つ、カード1つ、アラート1つ。バリアントは実際のニーズを解決するときだけ追加します。
チームで短いレビューを行い、変更前と変更後のスクリーンショットを比べます:不揃いなパディングやフォントの「前」と、トークンとバリアントで作った「後」。いくつかのルール(例:「ハードコーディングされた色は禁止」「スペーシングはトークンを使う」)に合意し、まず上位の不整合を直します。
展開は新しい画面を先にトークン化し、触るたびに古い画面をバックフィルしていく方法が現実的です。サポートから管理用フィルタの追加依頼が来たら、そのパネルをトークンベースのコンポーネントで作り直し、編集した部分だけ置き換えると良いでしょう。
AppMaster でフルプロダクト(バックエンド、ウェブ、モバイル)を作る場合は、早い段階でトークンと再利用可能なUIスタイルを決めておくと、新規画面が同じ決定を継承でき、視覚的一貫性とアプリロジックを同時に前進させられます。
よくある質問
UIのドリフトはたいてい「この一回だけ」で始まります。コンポーネントをコピーして余白を少し変えたり、目分量で色を選んだり。そうした小さな違いがページや担当者ごとに蓄積され、最終的にはレビューが共有ルールではなく主観的な議論になってしまいます。
デザイントークンは、値を人が再利用できる名前付きのUIの決定です。値自体は 16px や #2563EB のような生の数値かもしれませんが、トークン名は目的を示します(例:space-16 や color-primary)。そのため、誰もが同じ選択を使えるようになります。
まずは色の役割、タイポグラフィ、スペーシング、小さめの半径とシャドウを定義しましょう。これだけで大半の画面をカバーでき、目分量での調整を防げます。トークンセットは小さく、実用的であることが重要です。
実務的には、ある値が2箇所以上で使われているか、hover/disabled/errorなどの状態を支える場合にトークンを作ると良いです。本当に一回しか使わない値はコンポーネント内に留めておきましょう。
意味ベースの名前(text-primary)は、何に使うかを示すので非デザイナーでも正しく選びやすくなります。blue-600 のような生の名前はベーストークンとしては良いですが、コンポーネントで直接使うと誤用されやすくなります。
まず既に使っている色、フォントサイズ、スペーシングを収集して監査します。少しずつ違う値はまとめて一つに決め、旧値はそのトークンにマッピングしてください。こうすることで既存UIを壊さずにトークンへ移行できます。
まずグローバルなデフォルトを設定し、ビルダーのテーマ変数やグローバルスタイルにトークンをマップします。コンポーネントの再利用スタイルをいくつか作り、それらのhover・focus・disabled・error状態もトークンで管理してください。
バリアントは サイズ と 意図(intent) に絞ると混乱が少ないです。サイズはフォントとパディングなど数点のトークンだけを変え、意図は色の役割(背景、テキスト、ボーダー)を切り替えるだけにしましょう。スペーシングやタイポグラフィを密かに変えないことが重要です。
グローバルトークン(色の役割やスペース)は共有し、タッチサイズや密度の違いなどはプラットフォーム固有のトークンで扱います。目的は「同じ家族に見えること」であって、ピクセル単位で同じにすることではありません。
トークンの所有者を決め、小さな変更フローを設けてください。リクエスト→レビュー→承認→定期リリース→周知、という流れを守ると不必要なトークン追加を抑えられます。置換時は徐々に廃止していく運用にすると安全です。


