figma.to.website でコードを書かずに Web サイトを公開する

## この記事の概要

Figma のプラグインに [figma.to.website](https://www.figma.com/community/plugin/1329237288766226289/figma-to-website-make-websites-directly-from-figma-publish-or-export-responsive-web-html-css-js) というものがあります。

これを使うと Figma で作ったデータをそっくりそのまま Web サイトとして公開できます。

簡単な使い方と注意点をまとめてみました。

## 作ったもの

非常に簡単な作りではありますが、3 ページ作りました。
ヘッダーにあるリンクからページ移動ができます（`Logotype`とある場所をクリックすると、トップへ戻ります）。

https://viola-b4pr7hxvtf.figweb.site/

| ページ 1 | ページ 2 | ページ 3 |
| --- | --- | --- |
| ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/3c9b72be-4b48-7e1b-5e00-cdabc243c8f5.png) | ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/bcb0e9f4-7aa1-6b6d-dda9-8cb5dc90e794.png) | ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/f285181f-cea3-c1d5-f0e5-ae07b42b1d96.png) |

## 使い方

### Figma データ作成

基本的には通常通りに作成するだけで OK なので、具体的な部分は省略します。

細かな点でいくつか気をつけた方が良いポイントもありますが、細かすぎるので後から補足します。

コンポーネント、スタイル、バリアブルなどの使用にも特に制限はありません。

### データとパスとのマッピング

1. 作成したデータを、ページ単位でセクションに入れ込む
1. セクション名をパス名にする
    1. セクション名が`/`の場合 → `example.com/`で見られる
    1. セクション名が`/about`の場合 → `example.com/about`で見られる

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/3f11eb2c-88f8-4aea-51ef-2c2de58628a9.png)

`/`のセクションはトップページとなるので必須で、それ以外のページの有無や名前は任意です。

### プラグインの起動

`figma to website`と検索すると出てきます。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/774f756c-76d0-d901-5775-9c3141208216.png)

起動するとこのような画面になるので、公開したいセクションを選んで`Start with selected section`をクリックします。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/db38e08f-7ddb-8847-e225-805a82902b1b.png)

初回はアカウント登録が必要ですが、Figma アカウントで登録できるので数秒で終わります。
追加の情報も要りませんでした。

### 公開

アカウント登録が完了すると、このような見た目になります。
（これは既に公開済みなので多少違う部分もありますが、ほぼ一緒です）

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/50d1cf2b-f42b-d3b1-d2c4-0c6f524f8f08.png)

`Publish`を押せば完了です。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/0656957f-c36b-c886-ca32-f6dfa4130249.png)

## データ作りの細かな注意点

試していて、いくつかだけ気をつけた方が良さそうな点を見つけました。

### バリアブルの名前が被るとどちらかに統合される

例えば`Spacing`コレクションと`Font size`コレクションがあり、両方に`small`というバリアブルを登録するようなことはあると思います。

この場合、どちらかのバリアブルに値が統合されてしまいます。
↓のようなイメージです。

- Figma データ
    - Spacing small: 4
    - Font size small: 12
- Web での表示
    - 余白: 4px
    - font-size: 4px

どちらが適用されるのかはあまり分かっていませんが、とにかくコレクションをまたいでいても一意な名前をつけるようにした方が良いみたいです。

### 画像レイヤーに適当な名前をつけているとアクセシビリティが悪くなる

画像要素はレイヤー名が alt 文として自動で適用されます。
なので`Image 2041`みたいなレイヤーばかりあると、アクセシビリティが低下します。

AI による自動リネーム機能もついたことですし、ちゃんとリネームしておいた方が良いです。

ちなみに Figma はレイヤー名を空白にはできないので`alt=""`を再現する方法が分かりませんでした。
実現できるのかもしれませんが、今回は諦めました。

### 要素名をちゃんとつけておかないとアクセシビリティが悪くなる

見た目的にはヘッダーやナビゲーション、見出しであっても、コードとしてはすべて div や span で出力されます。

ただしレイヤー名に`<header>`などと入れればそのタグが適用されます。
そのため、ちゃんと名前をつけておくのが重要です。

ちなみに、レイヤー名に他の文字列が入っていても問題ないので、コンポーネントとして適切な名前をつけつつ、後ろにタグ名を書く、といった書き方で OK です。
具体的には `AwesomeHeadingComponent <h1>`もちゃんと h1 に変換されます。

## レスポンシブ対応はバリアブルのモードを使う

min-width や max-width と auto layout で対応できるレイアウトであれば、モードの設定は不要です。
ただし、ディスプレイ幅に合わせて余白や要素サイズが変わるようなときはモードを準備する必要があります。

公式ドキュメントには次の通りに準備するよう記載があります。

- “Desktop” => viewport >= 1440 pixels
- “Laptop” => viewport >= 1024 pixels
- “Tablet” => viewport >= 768 pixels
- “Phone” => viewport < 768 pixels

ただ、試してみたところ、`Desktop`や`Laptop`という名前があっていれば、ブレイクポイントの値は変えてもちゃんと適用されるようでした。

## 感想

リキッドレイアウトやレスポンシブ対応まで Figma だけで完結するのは便利そうです。
特に難しいこともないので、コードがあまり書けない人でもこれだけで Web サイトを公開できるのではないでしょうか。
（もちろん、簡単めな内容の数ページのサイトに限りますが……）

Framer や STUDIO も同様に WYSIWYG 編集 → 公開ができますが、慣れの問題で手間取っている人を見かけます。
Figma であれば日頃から使っている人が多いので、結構早く使いこなせるかもしれません。

## 補足

公式ドキュメントがあるので、こちらも参考にしてください。

https://learn.figweb.site/