Figmaを初めて触るエンジニアへ


[noteに引っ越しました](https://note.com/mono4log/n/n5a4596b03903)

## これは何

* 私MonoのFigmaファイルを初めて触るエンジニアに最低限の機能を教える記事。
* 他のFigmaファイルに対しても8割くらいは応用が効く内容になっていると思います。

## 心構え

- 開発 >> デザイン
    - 特にハッカソンでは、技術がメインで評価されます。
    - デザインに時間がかかって動かないプロダクトを作るよりは、全てデフォルトコンポネントでダサいけれど動く物を作る方ががマシだと思ってます。
- デザイナーは実装の大変さを分かってない
    - 実装が無理ゲー、もしくは膨大な時間がかかるデザインを気づかずに行っていることがあります。
    - デザインを変更する方が良い場合もあるので、早めの相談待ってます。
- デザイナーはミスしがち
    - プログラミングと違い、FIgmaは適当なデザインを見てもエラーを吐いてくれません。
    - ミスを見つけたら速攻でデザイナーに教えてあげましょう。

## はじめに

### Figmaのファイル構成について

- File
    - Desgin System Page
        - スタイル、コンポネント、素材などをまとめている
    - Layout Page
        - 実際の画面のデザインをまとめている
    - Prototype Page
        - プロトタイプを作る用のページ
        - デモ用に最適化されているので、エンジニアは見る必要なし

### 命名について

- Figmaのスタイル名とプログラミング変数名を一致させるのが理想です。
- しかし、Figmaは検索の観点から命名が特徴的です(「/」使いがち）。よって、プログラミングで利用されるものと異なる場合が多いです。
- また、ハッカソンなどの場合は時間が少ないので、デザイナーとエンジニアがそれぞれ使い慣れた別の命名を利用しても良いと思っています。

### サイズについて

- 8の倍数を基本としてレイアウトしています。

### デザインをどこまで反映すればよいか

- 色、テキスト
    - 反映してください
- コンポネント
    - 最低限種類は合わせてください
    - 余裕があればデザインに見栄えを近づけてください
- 間隔
    - 1つのデバイスに対しては反映してください
    - 多デバイスへのメディアクエリなどは後回しで
- 要素の階層、機能
    - 参考程度で反映させる必要はありません
    - デザイナーが変更しやすいFigmaファイルにした場合、マークアップ言語の構造と全く別物になる可能性があります。
- コンポネント
    - 参考程度で実際の画面を優先してください
    - コンポネントはLayout Pageにあるもので、インスタンスを同時に変更できる便利機能です。ただ、インスタンスのみを変更して配置した場合もあるので、実際の画面も適宜確認してください。


## 便利機能

### optionで距離を測る

1. オブジェクトをクリック
2. optionを押しながら、別のオブジェクト上をマウスでなぞる
3. 距離が表示される

<img width="350px" style="border:solid 5px #333333;" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504385/9a0a44f4-b7e3-212b-fd9e-317519ff1871.jpeg">

### commandクリックで深い層のオブジェクトを選択

1. command + クリック
2. 深い階層のオブジェクトを一度で選択できる

<img width="300px" style="border:solid 5px #333333;" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504385/9b8052c7-5ad2-e989-3d27-122bc39c5df3.jpeg">

### command + Yでアウトラインを見る

1. command + Yでアウトラインを見れる
2. 重なっているオブジェクトや、Auto Layoutが見やすい

<img width="250px" style="border:solid 5px #333333;" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504385/38077b24-96d5-fc36-d531-3eeaaa4e5bc0.jpeg"><img width="250px" style="border:solid 5px #333333;" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504385/093fc3d0-9891-1190-4fb1-25bbb533b883.jpeg">

## 右パネルを使って

### 画像出力

1. 出力したい画像をクリック
2. 右パネル一番下のExportの「+」をクリック
3. PNGやPDFなどの形式を選んで出力（PNGの場合はRetinaディスプレイに対応させるために「数x」を調節できる）

※ちなみにアイコンはコードで埋め込めるという点で[Google Material Desginのアイコン](https://fonts.google.com/icons)を利用していることが多いです。その場合はFigmaから出力する必要はありません。

<img width="250px" style="border:solid 5px #333333;" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504385/82c841ef-4313-cba4-bfa7-347b35d8c914.jpeg">

### InspectパネルでStyle（色、テキスト）一覧を確認

1. 右上のタブをInspectにする
1. 何もないところをクリック
2. 右パネルにスタイル一覧が表示される
3. Editアイコンをクリック
4. 詳細を見れる

<img width="400px" style="border:solid 5px #333333;" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504385/39e78b03-7b46-72d8-7551-f51762e7365f.jpeg">

### InspectパネルでCSSを見る

1. 右上のタブをInspectにする
2. 要素をクリックスすると、描画しているCSSが見える

## Spacing

「[Figmaのモバイル設計手法へ](https://qiita.com/Mono4/items/5c40734b531014f4ca55)」から、エンジニアが最低限知っておくべき情報だけ解説します。

### Auto Layout

- 機能
    - CSSのFlexのようなもので、要素を縦や横に一列に並べられる
    - 要素を一定の間隔を空けて並べられる
- 問題点
    - 個別の間隔を指定できない
- 解決策
    - 間隔を0にして、空オブジェクトを差し込む

### #spacing

- オブジェクト間に差し込むカラフルなオブジェクト
- 大体8の倍数になっている

※CSSなどは各オブジェクトがmarginを持てるので、空オブジェクトを作る必要はありません。見栄えのみを参考にしてください。

<img width="300px" style="border:solid 5px #333333;" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504385/acec86ca-b9c7-1f5b-7f4f-ec39f0b85e08.png">

### Spacing Manager

- #spacingという名前のオブジェクトの表示、非表示を切り替えられるプラグイン
- 利用方法
    1. [Spacing Manager](https://www.figma.com/exit?url=https%3A%2F%2Fwww.figma.com%2Fcommunity%2Fplugin%2F809099681305129697%2FSpacing-Manager) に飛ぶ
    2. Install
    3. Figmaファイル内の左上のアイコン → Plugin → Spacing Manager →
    4. Show / Hide spacings in current page（表示もしくは非表示）

<img width="500px" style="border:solid 5px #333333;" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504385/8c7482e5-d407-bc28-e68b-aed317f12220.jpeg">

## Prototype

右上からPrototypeモードに切り替える。

### 画像遷移の詳細を知る

1. 画面遷移が設定されている画面をクリックする
2. 矢印をクリック
3. 詳細を確認
    1. Navigate to は普通の画面遷移
    2. Overflowはダイアログなどの、元の画面の上に表示する画面遷移
    3. 他にも画面遷移の時間、トランジション、配置位置などが確認できる。
    （矢印がない場所の画面遷移はノリで頑張って）

<img width="500px" style="border:solid 5px #333333;" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504385/50789b88-59df-434d-b881-3508c7648758.jpeg">

### 動きを見る

- PC
    - スタートしたい画面を選択後、右上の再生ボタンをクリックする
- スマホ（おすすめ）
    1. Figmaというアプリをインストールする
        - [iOS](https://apps.apple.com/app/figma-mirror/id1152747299)
        - [Android](https://play.google.com/store/apps/details?id=com.figma.mirror&hl=en&gl=US)
    2.  アプリ内でMirrorモードに変更
    3. PC画面で表示したいFrameを選択
    4. アプリ内でタップやスクロールに対応するFrameを表示できる

### 画面からはみ出した要素はスクロール

- Figmaは一番親のFrame（デバイスサイズのFrame）から、子要素がはみ出しているとPrototype中にスクロールできます。（デザイナーがVertical/Horizontal Scrollを指定している場合）
- このはみ出している部分を非表示にした場合は、デバイスサイズのFrameを選択 → 右パネルのClip Contentをオンにしてください