|
最近、Facebook(現Meta)は社内向けCSSソリューションであるStyleXをオープンソース化し、GitHubで既に3,200個のスターを獲得しています。Facebook、WhatsApp、Instagram、Workplace、Threadsなどの製品はすべて、StyleXをスタイリングソリューションとして採用しています。この記事では、StyleXの概念、機能、そして使い方について詳しく解説します。 StyleXの基本概念StyleX は、Facebook が React Conf 2019 で初めて公開した内部 CSS-in-JS ライブラリです。 それ以来、Facebook、Instagram、WhatsApp に採用され、開発者から広く注目を集めています。しかし、CSS-in-JS ツールの人気は、高いパフォーマンスとのトレードオフにより、時間の経過とともに低下してきた可能性があります。しかし、StyleX は巧妙な Babel プラグインによってこれらの問題を解決しました。 StyleXは、強力で表現力豊か、決定論的、信頼性が高く、スケーラブルなスタイル設定システムです。他のスタイルライブラリの優れたアイデアを基に構築され、使い慣れながらも独自の機能を提供することで、開発者の開発プロセスを簡素化します。 StyleXは、CSS-in-JSライブラリの開発エクスペリエンスとコンパイル時ツールを組み合わせることで、静的CSSにおける高いパフォーマンスとスケーラビリティを実現します。しかし、StyleXは単なる新しいコンパイラベースのCSS-in-JSライブラリではありません。大規模アプリケーション、再利用可能なコンポーネントライブラリ、そして静的に型付けされたコードベースのニーズを満たすように設計されています。StyleXの主な機能は以下のとおりです。
特徴StyleX の主な機能は次のとおりです。
起源Facebookウェブサイトの初期開発では、CSSモジュールのようなアプローチでスタイルを管理していましたが、この方法には多くの問題がありました。そこで、Facebookは新たなソリューション、CSS-in-JSの開発を思いつきました。一般ユーザーがfacebook.comにアクセスすると、数十MBものCSSがダウンロードされますが、その多くは使用されません。Facebookは初期読み込み速度を最適化するためにCSSの遅延読み込み戦略を採用しましたが、これは更新の速度低下を招きました。さらに、複雑なセレクタの使用はスタイルの競合につながる可能性がありました。これらの問題を解決するために、開発者はしばしば… 数年前、Facebookがウェブサイトの再構築に着手した際、より優れたソリューションを切実に必要としていました。そこで、StyleXを設計・構築しました。 StyleXはスケーラビリティを考慮して設計されており、そのアーキテクチャは長年の使用実績によって実証されています。パフォーマンスやスケーラビリティを犠牲にすることなく、継続的に新機能が追加され、StyleXはさらに使いやすくなりました。StyleXの導入により、アプリケーションのスケーラビリティと表現力は大幅に向上しました。facebook.comのリファクタリングでは、CSSバンドルを数十MBの遅延読み込みCSSから数百KBの単一バンドルに削減することに成功しました。 Metaは、Web上のReact開発者のスタイル設定ニーズを満たすだけでなく、Webプラットフォームとネイティブプラットフォーム間でReactのスタイル設定ソリューションを統合するためにStyleXを開発しました。StyleXの導入により、クロスプラットフォームでのスタイルの一貫性が実現し、開発効率と製品品質の向上に繋がりました。 StyleXの基本的な使い方Metaの目標は、StyleXを可能な限りシンプルで習得しやすいものにすることです。そのため、過剰なAPIを開発して複雑化させるのではなく、一般的なJavaScriptパターンを活用して、可能な限りシンプルなAPIインターフェースを提供することを目指しています。 基本的に、StyleX は次の 2 つの関数に簡略化できます。
これら2つの関数において、MetaはStyleX専用のAPIやパターンを導入するのではなく、一般的なJavaScriptパターンを利用することを選択しました。例えば、条件付きスタイル用のAPIを設計する代わりに、ブール値や三項式を用いて条件付きでスタイルを適用することをサポートしています。 ボタン コンポーネントを作成しましょう。 StyleXはスタイルとコンポーネントを緊密に統合しており、これは開発エクスペリエンスとコードの可読性の観点から大きなメリットとなります。CSSスタイルの記述にはEmotionのようなアプローチを採用しているため、コードの理解と保守が容易になります。さらに、StyleXはコンパイル時にCSSを処理できるため、ランタイムシステムでは提供できない利点が得られます。 しかし、Tailwindとは異なり、StyleXはTailwindのようなショートカットスタイルの利便性を提供していません。Tailwindのショートカットスタイルは失われる代わりに、スタイルをより細かく制御できるようになります。例えば、ユーザーがボタンの色と背景色のみを変更できるようにしたいとします。Tailwindコンポーネントでは、これに特化したプロパティを定義できますが、ユーザーがより多くのスタイルを調整できるようにしたい場合、このアプローチはあまり拡張性がありません。そのため、一部の開発者は追加の` StyleX にはこの問題に対する優れた解決策があります: `style` というプロパティを追加し、オーバーライドしたいスタイルのみをオーバーライドするように制限しました。`stylex.props` 呼び出しで `styles.base` の後に `style` を配置することで、オーバーライドされたスタイルがベーススタイルを適切にオーバーライドすることを保証できます。これにより、どの CSS が変更可能で、どの CSS が変更不可能かが明確になり、ボタンのバージョン管理が可能になります。 スタイルをオーバーライドする場合は、次のように Button を使用できます。 StyleXは条件付きスタイルと動的スタイルをサポートしています。ボタンに強調マークを追加してみましょう。 強調スタイルを定義するためにスタイル定義に別のセクションを追加し、フラグに基づいて条件付きでスタイルを適用するだけです。とても簡単です。 これはStyleXが提供する機能のほんの一部に過ぎません。位置や色などの値を実行時に生成する必要がある場合、スタイルは動的にすることもできます。バリアントなどのオプションは、バリアントを定義する別の`stylex.create`を追加し、属性に基づいて適切なバリアントスタイルを使用するだけで簡単にサポートできます。 StyleX チームは OpenProps のすべてのコンテンツを StyleX に移植しました。つまり、さまざまな間隔オプション、色、アニメーションなどに簡単にアクセスできるようになります。 StyleXの仕組みStyleX は、次のようなコラボレーション ツールのスイートです。
パフォーマンスを最適化するため、Babelプラグインは可能な限り最終的なクラス名を事前計算します。これにより、同一ファイル内でのクラス名のマージを含め、実行時のパフォーマンスオーバーヘッドが排除されます。コンポーネントが静的に定義され、スタイルが同一ファイル内で使用されている場合、実行時オーバーヘッドは完全に排除されます。 Meta は StyleX をどのように使用しますか?Metaは、社内ウェブインターフェース全体にわたるコンポーネントのスタイル設定にStyleXを推奨ソリューションとして確立しました。Facebook、WhatsApp、Instagram、Workplace、Threadsといった主要な社外向け製品や社内向け製品を問わず、MetaはReactコンポーネントのスタイル設定にStyleXを使用し、コンポーネントの記述方法を変革し、スタイルコンポーネントのカプセル化と拡張における従来の課題を解決しています。 MetaはStyleXの本来の機能を拡張するだけでなく、エンジニアが静的スタイルと動的スタイルの両方を記述できるようにしています。現在、MetaチームはStyleXのテーマAPIを使用して、様々なMeta製品で使用されている様々なデザインシステムのルック&フィールに適応できる「汎用」コンポーネントを開発しています。StyleXはReact Nativeスタイルシステムで導入されたカプセル化の原則に従っているため、Metaはクロスプラットフォームスタイルのサポートを徐々に強化しています。 |