新型コロナウィルスの感染拡大防止にあたりご確認ください

新型コロナウィルスの感染拡大防止の為、一定期間はお電話でのカウンセリングをご案内させていただきます。

みなさまの安全に配慮し、発熱や風邪の症状がある、海外渡航歴がある場合にも、電話カウンセリングをお願いしております。それ以外の方でも、交通機関での移動にご不安を感じられる方は同様に電話カウンセリングも可能でございます。一人一人に合った支援をさせていただきますので、ご希望がございましたら登録後カウンセリングに進む際にお申し付けください。

新しいオープンソースライブラリReact Sketch.appの紹介【翻訳記事】コードを使った描画

Jon Gold氏が「AirbnbDesign Blog (https://airbnb.design/)」で投稿した記事「Painting with Code」を翻訳してご紹介しています。
なお、この記事は原著者の許諾を得て翻訳・掲載しています。


カテゴリー:舞台裏、プロジェクト - Jon Gold

本日は、大規模なデザインシステムに取り組んでいるデザイナーとエンジニア間のギャップを埋めるのに役立つツールを共有したいと思います。React-sketchappは、ReactのコンポーネントをSketchのドキュメント上にレンダリングできるオープンソースライブラリです。

Reactに精通しているデザイナーやエンジニアであれば、この新しいライブラリを簡単に、すぐに使いこなすことができるでしょう。

React-sketchappを使ってできる面白いことを紹介します。

データとのシームレスな統合

興味のある場所を検索するためにFoursquare APIを使用し、ダイナミックマップを生成するためにGoogle Maps APIを使用しています。

従来のAPIやGraphQLのエンドポイントなど、実際のデータをデザインに反映させることができます。

FlexBoxを使ったレイアウト

 

複数の画面サイズでコンポーネントを自動的にテストしています。

React Sketch.appはFlexBoxを使用しているため、React Sketch.appのコンポーネントにはFlexBoxの実際のコンポーネントと同じくらい豊富なレイアウトがあります。もう手動で長方形をドラッグする必要はありません。すべてがターゲットレイアウトエンジンのように機能するのです!

自動で複数言語に翻訳

Google Translate APIを使用してテキストを複数の言語に自動的に翻訳しています。

Airbnbは国際的な企業であるとともに、世界各地にユーザーがいるため、世界中の誰でも簡単に使えるデザインであることが必要不可欠です。ですので、Airbnbのデザインツールは自分の母国語にとらわれずに考えられるものでなければなりません。

さて、AirbnbはなぜReactをSketchに入れることにしたのでしょう?

信頼できる情報源

デザインシステムにより、デザイナーはスタイル、コンポーネント、パターンを再利用することができます。その結果、デザイナーはより高いレベルの思考に集中できるようになります。エンジニアは、優れたデザインシステムによって、デザイナーとの間で赤線や前後のピクセルをあれこれと微調整することなく、自信を持って新しい機能を実装できるようになります。とはいうものの、大規模な組織の包括的なデザインシステムは、成長に痛みを伴うことがあります。Airbnbの場合、その1つはSketchのテンプレートにありました。

私自身AirbnbのデザインシステムであるDLSの大ファンです。DLSは、タイポグラフィ、色、間隔といった共通の基本的な要素から始まり、プラットフォーム、画面サイズ、および言語をまたいで機能する豊富なコンポーネントのライブラリに成長します。

もちろん、デザインシステムは決して完成するようなものではありません。私たちも常にDLSに機能を加え、既存のコンポーネントを変更し、世界中の誰もが使えるように最適化しています。

システムへの変更または追加ごとに、作業のカスケードが作成されます。ドキュメンテーションをアップデートし、それぞれのアプリケーションのコードを(Swift、Java、およびJavaScriptに)変更し、Sketchテンプレートを再描画する必要があります。これらの取り組みを調整する必要があり、それぞれのソースは常に他のソースと同期されている状態でなければなりません。

コードは、比較的簡単に結び付けることができます。そして、Airbnbは既にバージョン管理とアプリケーションの継続的な統合を可能にするインフラを持っています。しかしこれまでは、多くの場合人間の手動によるタッチポイントに依存する形でSketchのテンプレートを維持していました。

デザインシステムがどのように構成されているかによって、システムにどのような影響があるかを見るためには、変更を追跡する必要があります。例えば、カラーリファレンスを変更すると、数十のコンポーネントに影響する可能性があります。それぞれのコンポーネントは、線の高さと間隔を考慮して再描画しなければなりません。異なるフォーマットで表示するための色変換、スペックの注釈付け、アクセシビリティ向上に向けたカラーコントラスト比の計算といった細かな点は、すべてエラーと不一致の可能性を高めます。グラフィックスベースのデザインツールは、バージョン管理という観点からは酷評されています。これらすべての動作部分によって、私たちは頻繫にシステムの状態がわからなくなっていました。「モバイル上のタイトルのフォントサイズはどのくらいか?」、「このコンポーネントはこのままで良いのか?」、「このコンポーネントは他の画面サイズではどのように機能するか?」といった疑問は、オフィスにおけるあまりにもありふれた質問でした。

組織が成長するにつれ、これらの問題は一層ひどくなります。フリーランサーが一人ですべてをデザインおよびコーディングした場合、即座に修正できるエラーでも3名体制のデザインチームにとってはフラストレーションになるでしょう。同様に、中規模のチームが対応できる非効率性でも、当社の規模のチームにとっては致命的な無駄です。DLSの人的タッチポイントを剪定することは、今後数年でAirbnbデザインチームがさらに効果的なチームに成長できるための基礎となります。

「本物」を使う

僕は、「物」そのものを使うというツーリングの原則にハマっています。Sketchのデザイナーのワークフローは、実際にReactのコンポーネントを使用するのと非常によく似ています。コンポーネントを選択して、データを入れるだけです。Sketchではシンボルとオーバーライドを使用し、Reactではコンポーネントとプロパティを使用します。両者の概念は非常に似ているので、両者を統合しないのは愚かだと思います。

また、Airbnbデザインチームは、信頼できる情報源を最小限に抑えたいと考えていました。何百万人もの人々が毎日使っている「本物」としてコンポーネントを実装しても、Sketchにて手作業で描かれたコンポーネントのライブラリを別に保管するのはなぜでしょう?

デザインシステムのための信頼できる情報源が少ないほど、より効率的になれるのです。

「多くの困難な問題は、順番を逆にしてから対処すると一番うまく解決できる。」
- バークシャー・ハサウェイ社副会長 Charlie Munger氏

本番環境に即導入可能なコードを作成しようとするデザインツールは、インターネットと同じくらい古くからあります。業界がSketchを中心に結びついたので、人々はSketchからコードを生成しようとしていました。これはエキサイティングな試みですが、私たちが直面している課題に対しては、正反対のことをしたいと思いました。つまり、自分たちのDLSを同期させておくために、コードからSketchファイルを生成するということです。

2016年にSketch上にいくつかの内部ツールを組み込んだ結果、やりたい形でファイルを操作するためにスクリプティングできる可能性があることがわかりました。しかし、そのプログラミング言語であるCocoaScriptは、ほとんどの開発者にとって身近なものではありませんでした。そこで、Airbnbデザインチームは、現代のJavaScriptの能力を完全に受け入れて、直感的にドキュメントを作成できるようにしたいと考えました。

「Reactは、今後10年間でその意味と用途を探求し続ける価値がある良いアイデアである。」
- ZEIT創設者 Guillermo Rauch氏

AirbnbはReact.jsの大ファンです。React.jsは、コンポーネント化されたデザインシステムを考え、構築するための完璧なパラダイムであり、当社はウェブアプリケーションやモバイルアプリケーションの大部分にReact.jsを使用しています。Reactは、おなじみのReactとReact Nativeの実装と同様に、どんなプラットフォームよりもはるかに大きな(非現実的な)アイデアです。バーチャルリアリティ点滅LED音楽シンセサイザー端末アプリケーションに、同じ原則を使用した興味深いプロジェクトがありました。

パラダイムとしてのReactは、根底にあるプラットフォームAPIの複雑さを包み込み、プラットフォームAPIを使用する開発者に一貫性のある滑らかなツールを提供するのに最適です。

隣接可能性

「『隣接可能性』については奇妙で美しい真実がある。それは、その境界を探ると、当の境界で区切られる範囲が広がるということだ。新たな組み合わせが見つかるたびごとに、別の新たな組み合わせが隣接可能性の領域に呼び込まれる。」
- Steven Johnson氏

雨が降るサンフランシスコでの夕食中、Airbnbデザインチームが「Reactを使ってSketchファイルを作成するとどうなるか?」という疑問が投げかけられました。その後まもなく、かなり優秀なReactの概念実証型レンダラが完成しました。それは色見本と模式標本をレイアウトするのには完璧でしたが、さらに多くのことを行うドキュメントにどのように使用できるかはまだわかりませんでした。

<rect>、<circle>、<line>といったSketchスタイルのコンポーネントを使用するということは、各DLSコンポーネントをSketchに描画できるように再作成する必要があることを意味していました。DLSコンポーネントは手作業で作成するよりも速く、単に「物を使用する」のでなく、(プログラムで)「物」を描画していました。私たちはうっかり一つの信頼できる情報源を取り除き、それを別のものに置き換えてしまったのです!

Airbnbのエンジニア、Leland RichardsonがReact Nativeスタイルのコンポーネントを使用しようと提案したときにブレイクスルーが訪れました。<View>、<Text>などはデザインシステムの構成の基本単位であるため、Sketchコンポーネントとプロダクションのコンポーネントが意味論的にリンクしました。さらにエキサイティングなことに、LelandのReact Primitivesプロジェクトでは、実際のReactコンポーネントをSketch、ブラウザ、携帯電話に同時にレンダリングすることができたのです。

Airbnbデザインチームは、静的なアセットの生成に要する時間を短縮するプロジェクトを開始しました。私たちは、そのエッジと隣接可能性を探ることによって、Sketchのデザインシステムとやりとりを行うエキサイティングで斬新な方法を探っています。以前は実現不可能で、大量の人的な入力が必要な、または大雑把な (すみません) プラグインに依存していた多くのタスクが、Airbnbのエンジニアが日常的に書いているのと同じコードを使って行うことができるようになりました。

Airbnbは、Sketchとの互換性に向けたハードルを下げることによって、自分たちのワークフローに合わせた新しくエキサイティングな実験的ツーリングを導入しています。そして、Airbnbデザインチームが現在使用しているソフトウェアとの完全な互換性を維持しつつ、未来のよりスマートなデザインツーリングをプロトタイプ化することができます。

次に進むために

「私たちは、デザインツールとしてコードに投資しています。レイアウトやデザインだけでなく、ロジックやデータも含めたアセットを扱う作業に近づきます。これにより、エンジニアとデザイナー間のギャップを埋めることができ、デザイン仕様またはレッドライン(越えてはならない一線)の必要性を減らし、ビジョンと現実間のステップを削減します。」
- Airbnbデザイン担当最高責任者 Alex Schleifer氏

このプロジェクトは、コミュニティからの深い献身がなければ実現できませんでした。Andrew Pouliotさん、Mathieu Dutourさん、またコードを書いたり、プルリクエストをレビューしたり、デモを試したり、ドキュメンテーションを書いたりしてくださった数え切れない方々に感謝いたします。当社は、自分たちの仕事をオープンソースにすることに興奮しており、今後もより多くのコラボレーションを楽しみにしています。

皆様にReact Sketch.appを使って楽しんでいただければ幸いです。私たちは、可能な限りすべてのアプリケーションを考え出す初期段階にあります。しかし、React Sketch.appは既に、実際のデータを使用して大規模なデザインシステムの手入れをし、デザインとエンジニアリングをより緊密に結びつけるための優れたツールになっています。

Airbnbデザインチームは、みなさんがReact Sketch.appを使ってどんなことをされるかをとても楽しみにしています。ご意見、ご感想、ご提案がある方は、電子メールでお気軽にお寄せください。また、Airbnbのデザインツールチームはサンフランシスコでデザインテクノロジストを募集していますので、これらのプロジェクトに興味をお持ちの方もご連絡ください。

Jon Goldは、ツーリング・システム・新興技術に関するAirbnbのデザインテクノロジストです。



CREDIT:原著者の許諾のもと翻訳・掲載しています。

[原文]Painting with Code by Jon Gold
 


関連する記事

人気の記事

スキルアップ記事トップへ

無料サポート登録簡単30秒

【厚生労働省】職業紹介事業許可番号(13-ユ-308734)

  • STEP1
  • STEP2
  • STEP3
  • 次のstepで入力すると返事が来る!
  • プロフィール入力すると返事が来る!
  • ご希望の条件を選択してください

    ご希望の勤務形態

    必須

    ご希望の勤務地

    任意

  • プロフィールをご入力ください!必須入力項目はこのページで終わりです。

    氏名

    必須

    氏名かな

    必須

    生年月日

    必須

    電話番号

    必須

    メールアドレス

    必須

  • スキルシート・ポートフォリオをお持ちの方はアップロードしてください

    スキルシート

    任意

    提出しておくことで
    迅速なご紹介が可能に!

    職務経歴書

    ドラッグアンドドロップ or ファイルを選択 選択されていません

    履歴書

    ドラッグアンドドロップ or ファイルを選択 選択されていません

    スキルシートを確認しています...

    スキルシートを確認しています...

    ※ファイルは5MB以下で対応するファイル形式 ? でアップロードしてください
    Microsoft Office .xls .xlsx .doc .docx .ppt .pptx
    KINGSOFT Office .xls .xlsx .doc .docx .ppt
    iWork .numbers .pages .key
    LibreOffice .ods .odt .odp
    OpenOffice .ods .odt .odp
    その他 .pdf

    ポートフォリオURL

    任意

    ?

    ポートフォリオとは主にクリエイターの方が自己PRのために過去の作品や制作実績をまとめた作品集の事です。

    ポートフォリオをWeb上で公開されている方はそのURLを、データでお持ちの方は作品データをアップしたURLを入力してください。

    ※データをアップされる場合は、保存期間や容量制限の少ないGoogleドライブを推奨しています。

    その他ご要望

    任意

  • 下記の内容をご確認いただき問題ないようでしたら、送信してください

    プロフィール入力すると返事が来る!

    • ご希望の勤務形態 必須

    • ご希望の勤務地 任意

      第一希望:
      第二希望:

    • 氏名 必須

    • 氏名かな 必須

    • 生年月日 必須

    • 電話番号 必須

    • メールアドレス 必須

    • 職務経歴書 任意

    • 履歴書 任意

    • ポートフォリオURL 任意

    • その他ご要望 任意

    個人情報の取り扱い 」と「 利用規約 」に同意の上、 『同意して登録する』 ボタンをクリックして下さい。

プライバシーマーク

レバテック株式会社は「プライバシーマーク」使用許諾事業者として認定されています。
個人情報の秘密は厳守します。ご入力いただいた情報は許可を頂くまで求人企業に公開することはありませんので、ご安心ください。

申し込みに関するご注意
以下の方は弊社の事業基盤、求人動向から、ご提案のご連絡までお時間をいただく可能性があります。ご了承ください。
IT業界、または希望職種が未経験の方
レバテックキャリア対象エリア以外での勤務地、また在宅での作業を希望される方

JavaScriptの求人・転職一覧