XDとスプレッドシートでデータを同期してみた

スプレッドシートとのデータ同期に際して、類似サービスの[Google Sheets for XD]も少し使ってみましたが、公開URLでしか同期できないらしく、実務で使う場合はcsvアップロードになってしまいそうでした。
なので今回は[ContentSync]というプラグインを使ってみます。

#ContentSyncとは

プロトタイプツールとGoogleSheets/MicrosoftExcelのデータの同期ができるプラグイン （プッシュ&プルでバージョン管理ができる）
https://www.contentsync.com

無料会員は同期やプロジェクト数等に制限があるので注意
https://www.contentsync.com/site/pricing

ダッシュボードあり（アカウント、権限、プロジェクトを管理できる）
https://docs.contentsync.com/platform/contentsync.com


#XDで簡易的に使ってみた
XDとスプレッドシート間でテキストの同期と流し込みをしてみます。

##下準備
https://docs.contentsync.com/plugins/adobe-xd-plugin/getting-started
マニュアルページの１〜６を参照してください。

###今回テキストを流し込むデザインデータはこんな感じです。
![デザインデータ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/914981/3faafd4c-dfd3-3d11-567d-cee43c9f34dc.png)


##１. コンテンツバージョン名の任意変更・作成 ＆ コンテンツキーの任意変更・紐付け
###コンテンツバージョン名の任意変更・作成
コンテンツバージョンは、翻訳・パーソナライズ・反復・ブランディング・再利用といったシーンでのバージョン管理に役立つようです。
デフォルトのバージョン名はversion1とversion2なので、もっとわかりやすい名前に変更します。

Projectの[Open Spreadsheet]からプロジェクトのスプレッドシートを開き、
![openspread.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/914981/9af8d0a1-2e14-0d4a-31d7-c94cdcfb2e3c.png)

シート上のバージョン名を任意の名前に上書きし、XDに戻って[Refresh Versions From Spreadsheet]を選択すれば、バージョン名が更新されます。
![refspread.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/914981/1637284e-5a66-187e-4f9b-7d616c6dbe1a.png)

今回は翻訳のシーンを再現するため、日本語と英語バージョンを作成しました。
コンテンツバージョンの追加は[New Version]またはスプレッドシートからも可能です。

###コンテンツキーの任意変更・紐付け
デフォルトではXDのレイヤー名がコンテンツキーとなります。
コンテンツキー（&バージョン）によって引っ張ってくる内容を特定するため、各内容に固有のキー名を設定しなおします。

プラグインエリア(左)の上がレイヤー名、下（枠線のある入力エリア）が任意のコンテンツキーの設定箇所です。対象のレイヤーを選択後、該当の入力エリアに任意のキー名を入力してプッシュします。
![cardnameset.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/914981/8bc225ba-b5ce-87a2-5255-804c3d9ece37.png)
![keyset.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/914981/10ae146d-634b-3ad9-c102-b135ed893faa.png)
プッシュすると、今回設定したコンテンツキーがスプレッドシートに追加反映されます。
XDの入力エリアとスプレッドシートのキー名が同一であれば、紐付いていることとなります。
シートに残った不要なコンテンツキーは適宜削除していきます。


####スプレッドシートはこんな感じです。
A列がコンテンツキー、B列以降はコンテンツバージョン。シートのタブ分けも可能でした。

●スプレッドシート[test_01]タブ●
![img1_test01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/914981/d739cd4b-014e-0a3b-b5e8-f1d514c69989.png)

●スプレッドシート[test_02]タブ●
![img1_test02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/914981/525df7ba-79bc-fb1e-673c-78f35f5421c3.png)

該当のセルにテキスト内容も記載したので、プルにうつっていきます。


##2. 同期するコンテンツバージョンを選択
作成したバージョンから今回は日本語を選択します。
![verselect.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/914981/410d09a0-dca2-c2fe-57d6-640dda0f24f3.png)


ちなみに、ダッシュボードから各コンテンツバージョンを同期するか否かの設定も個別にできるようです。
![sync.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/914981/c2599db9-66b6-4aff-d358-1dbb9dbae6f2.png)


##3. スプレッドシートからプルする
テキストを変更する対象レイヤーを全選択（一部選択も可）したあと、任意のバージョンが選択されていることを確認し、pullを押します。
![imgpull.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/914981/feba08fd-8ac5-4dfb-8c17-caac9be927c7.png)


[Spreadsheet Pull]を選択します。
![spreadpull.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/914981/c00b86cb-a51f-f1ea-1073-c0497b5e6ea4.png)


##4. 内容を確認し反映
内容確認用のモーダルが出てくるので、内容を確認してupdateボタンを押します。
![modal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/914981/ff6457a2-6c09-119a-a857-46a7cce3faef.png)


##完了
日本語バージョンが反映されました。改行も反映してくれるようです。
![7.日本語ver.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/914981/3aa048be-7123-389c-2e54-b00a5bd60e6a.png)

英語バージョンも反映してみました。
![7.英語ver.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/914981/ac188bbb-7a2a-beb7-da0a-e055c93fe3f9.png)



##（補足）XDでの変更に強いデザイン設計について
テキストエリアやスタック・パディング等の設定をして設計したので、テキストの長さが変化してもデザイン崩れが発生していません。
（1行以上になってもテキストエリアが途切れずに表示される、カードのパディングやカード間の余白が変わっていない、ロゴテキストがセンタリングされたまま、etc)
設計にも限界はあると思うので手作業の修正が必要になるケースも出てくると思いますが、常にあらゆるケースを想定して極力変更に対応できるデザイン設計を心がけることはとても重要と言えます。
特にこういったツールを使用する場合は尚更設計がシビアになってくるかもしれません。
ただし設計さえちゃんとしておけば後々受けられる恩恵は大きそうです。（特に大規模プロジェクト）

--カードエリアのスタック設定例--
![スタック.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/914981/e284c237-c3b1-1463-38a4-8a87b408f79b.png)
--カードエリアのパディング設定例--
![パディング.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/914981/0e9b03d3-7489-d864-3f7e-934417308443.png)
--テキストエリア設定例--
![テキスト設定例.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/914981/075fb35d-c348-47a0-67f3-79485c47e8c1.png)



#まとめ

###メリット
・プッシュ&プルができてバージョン管理ができる
・サービス名などを同じキーで管理すれば一括変更ができる（ブランディングに役立ちそう）
・設計に手間はかかるがテキストの流し込みが楽になるので本来の作業に専念できる&案件や使い方次第では最終的に工数が削減できる可能性がある
・テキストが変更されてもすぐ同期できる
・デザインへのテキスト流し込みミスやその際のレイヤー誤操作が防止できる
・本質的なデザイン設計を意識することができる
・複数人でシートを管理できるので、テキストの管理が散漫にならない（ダッシュボードから招待が可能）
 = ディレクター・デザイナー・コーダー・エンジニアが実質同じ内容を参照することになるため、テキスト管理がしやすくなる（コーダーやエンジニアがデザイン側のテキストをコピぺをして組むとしても、参照元は一つなのでデザイン時の流し込みミスによる感染が防げる）

###デメリット
・デザイン設計やコンテンツキー（&バージョン）の管理に少々手間がかかる
・設計を見えないところまでガチガチに作り込むことになるので、デザイン自体の修正が大変になるケースがありそう （情報量や装飾が多いLP等には向いていないかも）
・無料会員だと制限がある



今回は簡易的な使用となりましたが、大規模な多言語対応アプリのローカライズ等で役立ちそうな印象を受けました。
テキストスタイルやシンボルの入れ替えにも対応しているようなので、使い方を攻略すればもっと便利な使い道が見えてくるかもしれません。

以上、XDとスプレッドシートでデータを同期してみたでした。