Figmaのプロトタイプ- Localvariablesを使って、お気に入りカウントを作る。

# ユーザーのアクションによって変わるプロトタイプデザインをどうするか。
プロトタイプはページ遷移やモーダル表示など**実際用意した要素**に、インタラクションを追加することが可能です。ただ、カウントアップやチェックリストカウンターのように、**実際プロトタイプを触るユーザー次第で状況が変化するようなインタラクション実装**ってどうするの？と思っていました。ただ、色々調べると、FigmaのLocalvariables機能を使うことでそういったことが実装できることがわかったので、比較的簡単なカウンターをFigmaで作ってみようと思います。

## カウンター完成イメージ例
- 今回は以下のような商品一覧にfavorite機能をつけてみます。favorite機能をユーザーがアクションしたら、、headerにあるfavoriteをカウントアップ、カウントダウンさせる機能を追加してみます。
今回は、[Nike UI - Free UI Kit (Recreated)](https://www.figma.com/community/file/1235719100191160651/nike-ui-free-ui-kit-recreated)を少し拝借させていただきました。
作成者：（https://www.figma.com/@prokit_design）
ライセンス：CC BY 4.0 DEED

![画面収録-2023-12-11-17.01.05.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283056/87c21117-a527-b613-94fc-29a2e5533b8b.gif)

## 方法1:Localvariablesで変数「favorite-count」を作る。
![スクリーンショット 2023-12-11 12.12.15.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283056/f55cd8f6-e118-fb9a-46b0-35450e541e92.jpeg)
- Frameも**何もアクティブ**にしていない状況で右ウィンドウにあるDesignタブを表示

:::note warn
筆者はFrameをアクティブにしていたせいで、 Localvaribables機能が出てこないことで1h無駄にしています。
:::

- collectionを作成します。キャプチャーのコレクション名の横にある「…」からコレクションを作成
- 下にある、[+Create variables]からレコードを作成します。その際、今回はcounterなのでNumber型で作成
- Name　に変数名を作成し、valueにnumber型を作成。defaultは0にしたかったので0にしている。今回は変数名を「favorite-count」にしています。

## 方法2-1:Favoiteボタンのデザイン仕込み
- Favoriteボタンコンポーネントを作り、アクションごとの見た目を作成する。
![スクリーンショット 2023-12-11 12.07.07.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283056/d9a21fa1-e350-2e04-fb85-c36ac3958c15.jpeg)
- 1:Default時のデザイン
- 2:タップした後に少し大きくしてインタラクションさせる時のデザイン
- 3:タップ完了した時のデザイン

## 方法2-2:Favoiteボタンのインタラクション
本題と少しそれますが、マイクロインタラクションを実装しています。タップした時に、すこしボヨヨーンとハートが動くかと思います。
- 1:Default時からタップ後に少し大きくなるインタラクション（①から②のインタラクション）
    - ![スクリーンショット 2023-12-11 12.43.20.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283056/0331512f-f459-e671-45e3-f3359a6a56cd.jpeg)
        - 「On Click」の時に「variables→pink,big」にchange toさせてます。即座に大きいハートに変化させるのでinstantにしていますが、お好みで。
        -  「On Click」の横にある「+」を押し、「Set variables」を選択。すると、方法１で作成した、「favorite-count」があるので、setし、onclickした時に「＋１」をさせるように設置。
    
- 2:ボヨヨーンのインタラクションと完了までのインタラクション（②から③のインタラクション）
    - ![スクリーンショット 2023-12-11 12.45.28.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283056/7722a374-060c-39ac-9ad8-5c473b4baa47.jpeg)
    - after Delay で前のアクションが終わった後即座に変更を加えます。smart animationでよしなにアクションさせれば、ボヨヨーンができます。

- 3:favoriteを外す際のインタラクション（③から①のインタラクション）
    - ![スクリーンショット 2023-12-11 12.48.21.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283056/dde4cad6-f248-a700-d91e-51eb23d867a8.jpeg)
    - favoriteを外す時は、変数「favorite-count」を -1にする必要があるので、onClick時にSetVariablesを-1させます。また、change to で①に戻します。


## 方法2:FavoiteCounterの仕込み
- 1:textウィンドウから「favorite-count」をセットする。
    - ![スクリーンショット 2023-12-11 12.53.33.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283056/4fb7c1d9-9ed0-fd4e-8c3c-e3116b90a2da.jpeg)
    - counterを実装します。0のフレームをアクティブさせて、ハニカム構造の形（蜂の巣？）をタップすると、設定していた、Localvariables「favorite-count」があるので、それをセットします。これでカウンター表示されます。

## 最後：コンポーネントをページにインスタンスで設置する。
- 所定の位置にこれらの作ったコンポーネントをインスタンスで設置してあげれば、カウンターが出来上がります。


## 補足：商品ごとのfavoriteの状態を保持するには？
- 今回の実装では、カウンターのみの実装でしたが、Aの商品はfavorite=TRUE、Bの商品はfavorite=FALSEの状態を保持することはしていません。つまり、favoriteした商品だけを表示させるためには、商品ごとの状態を保持する必要があるのかなと感じています。正直いうと、そこまでプロトタイプで実装する必要があるのかというのは些か疑問が残るのですが、組織として、インタビューを継続していくことが決まっている場合は、商品データーテーブルをLocalVariablesで実装するとメリットも大きいのかなとも感じます。

## Figma公式- setVariables
こちらに、今回のようなカウンター実装について詳しく記載されております。
詳しく知りたい方は[こちら](https://help.figma.com/hc/ja/articles/15253220891799-複数のアクションおよび条件付きアクション)で。

## まとめ：プロトタイプの完成度の課題
- プロトタイプを作成し仮説検証型のユーザーインタビューを実施し、PJの仮説を立証しようとする時、その時のプロトタイプはどこまでの完成度を目指すべきなのかというところが、私の今の課題です。
- 完璧なインタラクションを含む100%の完成度が必要か？それとも、インタビュー後に変更がある可能性が高いその状況で50%くらいの完成度でいいのか？ここはインタビュー担当者との相談になるかもしれないですね。
- ただ、たくさんの機能が不完全なプロトタイプで、インタビューで補足説明で補うとしても、補足説明だけで時間が取られてしまう。一番問題なのは、補足説明でインタビュイーがその機能をイメージできるかわからない状態。たとえば、インタビューを３名実施するものとしても、３名とも同じものを補足説明でイメージできるかは些か疑問が残る。「高速の仮説検証」と「正確な仮説立証」は結局のところ、効率と完成度のトレードオフの関係が成り立ってしまうのかなとも感じます。
- そのため、今回のような、「ユーザーのアクションによって表示を変更させること」の必要性の線引きが難しいなと個人的に感じてしまいましたが、面白かったので、記載しました。

# お詫び
Figmaでのプロトタイプ実装において、まだまだ私自身が未熟な部分が多く、備忘録のように記している部分があります。動画で実装方法を紹介する方がわかりやすいかもしれませんが、表に出てほしくない命名もあったので、キャプチャーでの紹介ご容赦ください。