Visxは、Airbnbによっお構築されたReactアプリのグラフィカルプリミティブのコレクションです。

3幎間の開発ずAirbnbプロダクションプロゞェクトでの2。5幎間の䜿甚の埌、TypeScriptでコヌドを曞き盎した埌、グラフィカルプリミティブのvisx 1.0コレクション以前はvxず呌ばれおいたしたの公匏リリヌスをお知らせしたす。これがGitHubのプロゞェクトペヌゞです。ドキュメントず䟋はairbnb.ioにありたす。 私たちの目暙は、すべおのAirbnbプロゞェクトにわたっおデヌタ芖芚化テクノロゞヌのスタックを統合するこずでした。この目暙を远求するために、D3のパワヌずReactの利䟿性を組み合わせた新しいプロゞェクトを䜜成したした。 visxの長所の䞭で、次の点を匷調できたす。











  • . , visx . , .
  • , . visx, , CSS-in-JS-. , React- , , , , , . Visx, , . , .
  • これは、グラフを䜜成するために「シャヌプ化」された芁玠のコレクションではありたせん。芖芚化プリミティブを䜿甚しおグラフを䜜成する堎合、最終的にはこの問題を解決する独自のラむブラリを䜜成したす。さらに、それはあなたのニヌズに最適化されたラむブラリになりたす。圌女はあなたの完党な管理䞋にありたす。


visxの最も重芁な匷みは、本質的にReactコンポヌネントの通垞のセットであるずいうこずです。Reactラむブラリの操䜜方法を知っおいるずいうこずは、visxを䜿甚しお芖芚化を䜜成できるこずを意味したす。React開発者に銎染みのある暙準のAPIずパタヌンを䜿甚したす。どのReactプロゞェクトでも、visxは自宅にいるように感じるはずです。visxで䜜成したものを芋おみたいず思いたす。



課題フロント゚ンド開発におけるデヌタの芖芚化



デヌタの芖芚化は、さたざたな分野の専門家が必芁ずしおいたす。このため、グラフィック芁玠を䜜成するためのフレヌムワヌクが存圚する必芁がありたす。これらの人々の問題を解決するこずができるそのようなフレヌムワヌク。これらの人々が本圓に習埗できる皮類。



そのようなグルヌプの1぀は、Webプロゞェクトのデヌタ芖芚化を垞に䜜成する必芁があるフロント゚ンド開発者です。 Webグラフィックを䜜成するための優れたラむブラリずフレヌムワヌクがたくさんありたす。D3から、Highcharts、Plotly、Echarts、Victory、G2、Recharts、react-vis、vega、vega-lite、Semioticおよび他の同様のプロゞェクトぞ。この倚様性にもかかわらず、12を超える既存のラむブラリを分析し、Airbnbでの䜿甚を怜蚎したずころ、フロント゚ンド開発者にずっお重芁な3぀の領域の少なくずも1぀に欠点があるこずがわかりたした。



  • ( ?). - . API D3 vega. , -.
  • ( , ?). , ? ( — airbnb.com), . ? .
  • . -, , -, , airbnb.com, . , , , , , .


デヌタ芖芚化ツヌルの衚珟力ずそれらをすばやく探玢する胜力の間には、しばしば盎接的な関係があるこずが指摘されたした。これらの特性の1぀が優れおいるほど、もう1぀は悪化する可胜性がありたす。これらすべおが、迅速に探玢できるラむブラリ、十分に衚珟力のあるラむブラリ、そしお同時に高性胜を䜜成する方法の問題に぀ながりたした。この質問ぞの答えは、「反応する」ずいう1぀の単語で構成されおいたす。



解決策Reactに基づく䜎レベルのビゞュアルプリミティブ



近幎、ReactラむブラリはWeb開発の䞻流になっおいたす。これは、保守が容易でクリヌンで読みやすいコヌドを䜜成するのに圹立぀宣蚀型APIがあるずいう事実に䞀郚起因しおいたす。このラむブラリは倚くのフロント゚ンド開発者によく知られおいたす。Reactアプリケヌションのパフォヌマンスを最適化するための資料はたくさんありたす。このプロゞェクトは、Reactずこのラむブラリの゚コシステムに基づいおいたす。぀たり、孊習ず生産性が容易になりたした。その䞭に䜎レベルのモゞュラヌAPIを実装するこずが、その衚珟力の鍵ずなりたした。



このプロゞェクトのこのビゞョンに぀いお話すずき、私たちは通垞2぀の質問をされたす。



最初のものは次のずおりです。「Reactアプリケヌションで非垞に衚珟力豊かなラむブラリであるD3を䜿甚しないのはなぜですか」



重芁なのは、それができるずいうこずです。ただし、D3ずReactはどちらもDOMを片手で操䜜する必芁があるため、D3を玔粋に蚈算に䜿甚し、ReactをDOMに䜿甚するのが最適であるこずがわかりたした。それ以倖の堎合、DOMの曎新を競合する2぀のメンタルモデルは、バグがプロゞェクトに䟵入する可胜性を開きたす。ただし、D3を蚈算にのみ䜿甚するずいうこずは、このラむブラリの機胜の倧郚分DOMに関連するものが䜿甚されないこずを意味したす。それはselection.join、ズヌム、ドラッグ、ブラシ、トランゞションに぀いおです..。たた、前述のように、D3は習埗するのに時間がかかりたす。たた、開発者には、デヌタの芖芚化を行うずきに、暙準のAPIず䜿い慣れたパタヌンを䜿甚するネむティブのReactコヌドを䜜成しおいるように感じおもらいたいず思いたす。



2番目の質問は次のずおりです。React甚に構築された倚くのレンダリングラむブラリの1぀を䜿甚しないのはなぜですか。



私たちの調査結果は次の図に瀺されおいたすは、デヌタ芖芚化甚の既存のReactラむブラリが高レベルの抜象化であり、䜿いやすさのために最適化されおいる぀たり、それらを䜿甚するために必芁なコヌドの量を枛らすこずに焊点を合わせおいるこずを瀺したした。これは、衚珟力を犠牲にしお行われたす。それらのどれも開発者にD3プリミティブの衚珟力を提䟛せず、蚈算、アニメヌション、状態管理、スタむル、およびレンダリングは互いに密接に関連しおいるため、倚くは生産プロゞェクトに必芁な最適化を蚱可したせん。





- , , . visx , React-



前の図に瀺した問題空間を分析するこずにより、衚珟力の高いReactラむブラリの開発を成功させる機䌚が明確にわかりたす。䞀般的なReactAPIを䜿甚するようにれロから蚭蚈された䜎レベルのレンダリングプリミティブを䜜成するこずで、習埗が容易で、衚珟力があり、パフォヌマンスの高いラむブラリを䜜成できるこずを期埅しおいたした。このようなラむブラリは、あらゆるフロント゚ンド開発者にずっお圹立぀ず考えたした。これがvisxプロゞェクトの誕生です。



visxに関する詳现



visxコンポヌネントコレクション以前はvxず呌ばれおいたしたは、その名前に「芖芚化コンポヌネント」ずいう単語を隠したす。これは、Reactデヌタ芖芚化プリミティブを含む30以䞊の個別のパッケヌゞで構成され、いく぀かのカテゎリに分類されたす次の図を参照。これらのプリミティブを䜿甚する人は誰でも、ある皮のアプリケヌション状態管理スキヌムに匷制されるこずはありたせん。開発者は、芁玠のアニメヌションずそのスタむリングぞのアプロヌチを遞択できたす。これはすべお、visxプリミティブをReactベヌスのコヌドベヌスに統合できるこずを意味したす。たた、visxを䜜成する際にモゞュヌル性に重点が眮かれおいるためこれによりvisxはD3に䌌おいたす、繰り返し䜿甚するこずを目的ずしたデヌタ芖芚化甚に独自のラむブラリを実装するために必芁なものだけを構成に含めお、コンパクトなサむズのアプリケヌションのバンドルを䜜成できたす。 、単䞀のコピヌに存圚するいく぀かの䞀意のスケゞュヌルを圢成するために必芁なもの。





Visxは、Reactアプリケヌションの䞀般的なデヌタ芖芚化タスクに察応する30を超えるパッケヌゞのモゞュラヌコレクションです。



質問ず回答



▍visxでD3はどのように䜿甚されたすか



visxに含たれおいるパッケヌゞのいく぀かは、D3を䜿甚しお、ペヌゞ䞊の芁玠の配眮など、さたざたな蚈算を実行したす。䜿甚するD3パッケヌゞを機胜的に耇補し、宣蚀的なReactAPIを装備したす。このようなパッケヌゞの䟋には、@ visx / axis、@ visx / geo、@ visx / Hierarchy、および@ visx / shapeが含たれたす。他のパッケヌゞは、D3のDOM管理機胜を眮き換え、芁玠ず察話するためのReactプリミティブを開発者に提䟛したす。これらは、たずえば、@ visx / Brush、@ visx / drag、および@ visx / zoomです。



▍D3ができないこずをvisxは䜕ができたすか



倚くのパッケヌゞはD3ずは完党に無関係であり、ピクセル粟床でレむアりトを再珟するReactでデザむンレむアりトを䜜成するずきに盎面した䞀般的な問題の解決策を抜象化したす。これらのツヌルの倚くは、耇雑なオブゞェクトサむズの問題を抜象化および簡玠化し、SVGAPIを簡玠化したす。䞋蚘は甚䟋です。



@ visx / tooltip



ここだむンタラクティブな䟋。





ツヌル



チップツヌルチップは、Webプロゞェクトでよく䜿甚される芁玠です。しかし、そのような芁玠ずのすべおのマむクロむンタラクションを実珟するこずは簡単な䜜業ではありたせん。 @ visx / tooltipパッケヌゞは、ツヌルチップの状態管理を抜象化したす。コンテンツ、座暙、衚瀺ず非衚瀺の管理に圹立ちたす。これは、ReactフックuseTooltipず高次コンポヌネントwithTooltipを䜿甚しお行われたす。 @ visx / tooltipパッケヌゞを䜿甚するず、自動配眮結果ずしお、ツヌルチップがコンテナによっおクリップされないやポヌタル内のオプションのレンダリングなど、ツヌルチップのレンダリングに関連するタスクも簡玠化されたす。コンテキストオヌバヌレむの問題をトラブルシュヌティングする



@ visx / text



むンタラクティブな䟋はここにありたす。





SVG1.1でのテキストの操䜜



。HTMLの堎合ず同様に、耇数行のテキストを操䜜する可胜性はありたせん。たずえば、CSSを䜿甚しお、長いテキストの耇数行の衚珟を簡単に実装できたす。このようなメカニズムをReactたたは玔粋なJavaScriptに実装するには、通垞、テキストのサむズを枬定し、テキストを行に分割するためのパラメヌタヌを芋぀けるために䜿甚される非衚瀺のDOM芁玠をレンダリングする必芁がありたす。@ visx / textパッケヌゞは、これらすべおのタスクを抜象化し、芖芚化で長いテキストをサポヌトしやすくしたす。



@ visx /レスポンシブ



ここだむンタラクティブな䟋。





レスポンシブWebアプリケヌション



レスポンシブWebアプリケヌションは、HTMLを䜿甚しお簡単に䜜成できたす。SVGグラフィックずcanvas芁玠の機胜に基づいお図を䜜成する堎合は、応答性を高めるためにピクセル粟床の枬定を行う必芁がありたすが、Reactではそれほど簡単ではありたせん。@ visx /レスポンシブパッケヌゞは、レスポンシブチャヌトを簡単に䜜成できるように、芁玠のピクセル寞法を簡単に取埗できるさたざたなヘルパヌツヌルを開発者に提䟛したす。



@ visx /グラデヌション、@ visx /パタヌン



ここでは「察話型の䟋です。





グラデヌションずパタヌン



カラヌグラデヌションずパタヌン塗り぀ぶしは、チャヌトを蚭蚈する人の胜力を倧幅に向䞊させたす。これらのグラフィック効果は、背景から際立぀目を匕く画像を䜜成したす。しかし、そのような画像をSVGで蚘述するこずは倚くのコヌドであり、困難な䜜業になる可胜性がありたす。@ visx / gradientおよび@visx / patternパッケヌゞは、適切なスタむルを宣蚀するための構文を倧幅に簡玠化し、誰でもかわいい図を䜜成できるようにしたす。



▍visxを䜿甚しお䜕を䜜成できたすか



私たちは過去2。5幎間、visxを䜿甚しおおり、このアむテムのコレクションを数十の内郚デヌタツヌルずairbnb.comで䜿甚しおいたす。





visxを䜿甚しお䜜成されたビゞュアラむれヌション



前の図は、visxを䜿甚しお䜜成したものの䟋を瀺しおいたす。これらは、巊䞊隅から時蚈回りに進むず、次のプロゞェクトです。䟝存関係のあるガントチャヌト、組織の円グラフ、攟射状のチャヌト、ビゞネスメトリックレポヌト、サヌビスの盞互䜜甚の抂芁。



たた、visxを䜿甚しお、再利甚可胜な図を䜜成するための高レベルのラむブラリを䜜成したした。これにより、単玔なグラフィック芁玠を生成する際の定型コヌドの量を枛らすこずができたした。





Visxは䜎レベルの芁玠のコレクションです。これは、それに基づいおより高いレベルのシステムを䜜成するために蚭蚈されおいたす。独自の高レベルラむブラリを䜜成したり、Webアプリケヌションのカスタムビゞュアラむれヌションを䜜成したりするために䜿甚する必芁がありたす。



▍Visxは面癜そうに芋えたすが、D3が本圓に奜きな堎合はどうなりたすか



D3も倧奜きです



▍visxはどのように開発されおいたすか



visxでの3幎間の䜜業のために、このプリミティブのコレクションを次の3぀の方向で開発したした。



  • . , visx, - Airbnb, ( — , , ) , ( , ). , , , , , .
  • . , visx, , , . , vx, . visx, blocks.org, CodeSandbox, , , visx.
  • . visx JavaScript-, TypeScript. . TypeScript — - Airbnb. , TypeScript, — ts-migrate. , , visx . , Happo, visx, .




visxのドキュメントでは、CodeSandboxプラットフォヌムで詊すこずができるblocks.orgスタむルの䟋を䜿甚しおいたす。すべおの䟋は、察応するコレクションパッケヌゞず密接に関連しおい



たす。visxを䜿甚したこずがありたすか



All Articles