LibSassは非推奨になりました
2020年10月26日投稿者: Natalie Weizenbaum
Sassコアチームでの多くの議論を経て、LibSassとNode Sassを含むそれを基盤とするパッケージは正式に非推奨とする時期に達したという結論に至りました。ここ数年、LibSassを最新Sass言語の開発状況に追いつかせるためのエンジニアリング帯域幅が不足していることは明らかでした(例えば、最新の言語機能は2018年11月に追加されました)。この状況が好転することを期待していましたが、長年のLibSass貢献者であるMichael Mifsud氏とMarcel Greter氏による素晴らしい努力をもってしても、CSSとSass両方の急速な言語開発のペースに追いつくことはできませんでした。
以下で詳細に説明しますが、主な点は次のとおりです。
-
新しいSassプロジェクトには、LibSassを推奨しません。Dart Sassを使用してください。
-
既存のLibSassユーザーはすべて、最終的にDart Sassに移行する計画を立て、すべてのSassライブラリも最終的にLibSassのサポートを削除する計画を立てることを推奨します。
-
新しいCSS機能との互換性を含め、LibSassに新しい機能を追加する予定はありません。
-
LibSassとNode Sassは、主要なバグやセキュリティ問題の修正、最新のNodeバージョンとの互換性の維持など、最善を尽くして無期限にメンテナンスされます。
非推奨とする理由非推奨とする理由 permalink
ここ数年、SassはLibSassが理論的には公式にサポートされている実装でしたが、実際にはその機能面は静的な状態という曖昧な状態を維持してきました。時間が経つにつれて、この状態がSassユーザーにとって具体的な問題を引き起こしていることがますます明らかになっています。たとえば、プレーンCSSの`min()`と`max()`が機能しない理由について混乱しているユーザーがよく見られます。Sass全体が悪いと仮定しますが、実際にはその機能をサポートしていないのはLibSassだけです。
LibSassの公式サポートは、個々のユーザーに苦痛を与えるだけではありません。LibSassは昨年公開されたSassモジュールシステムをサポートしていないため、主要な共有Sassライブラリは、ダウンストリームユーザーとの互換性の問題を懸念して、それを利用できませんでした。すべてのSassユーザーが最終的にLibSassから移行する必要があることを明確にすることで、これらのライブラリアーザーがより最新の機能を使用することを容易にしたいと考えています。
LibSassはSass言語自体の開発さえ妨げてきました。`/`をセパレータとして扱うという提案を進めることができませんでした。なぜなら、彼らが記述するコードは、Dart Sassで非推奨警告を生成するか、LibSassでコンパイルに失敗するかのいずれかになるからです。LibSassを非推奨としてマークすることで、これははるかに実現可能になり、Sassは最新のCSSをより適切にサポートできるようになります。
「非推奨」とはどういう意味ですか?「非推奨」とはどういう意味ですか?permalink
プログラミングコミュニティで大きな意味を持ち、ユーザーがLibSassからの移行を計画すべきであるという強力なシグナルを提供するため、「非推奨」という用語を使用することを選択しました。ただし、プロジェクトが完全に終了するという意味ではありません。LibSassとNode SassのリードメインテナーであるMichael Mifsud氏は、過去数年間と同じレベルでメンテナンスを継続する計画であることを確認しています。つまり、新しい機能は追加されなくなるため(そのため、LibSassは最新のCSSとSass構文との互換性が徐々に失われていきます)、メンテナンスリリースが無期限に継続されるということです。
移植性とパフォーマンスはどうなりますか?移植性とパフォーマンスはどうなりますか?permalink
今日のLibSassには、Dart Sassよりも2つの大きな利点があります。
-
移植性:C++で記述されているため、他のプログラミング言語にLibSassを簡単に埋め込み、ネイティブ感のあるAPIを提供できます。
-
パフォーマンス:C++ APIを介してLibSassを呼び出すことは、スクリプト言語で直接記述されたコードの速度と比較して非常に高速です。特に、これはLibSassがJavaScriptではDart SassをJSにコンパイルしたものよりも大幅に高速であることを意味します(ただし、Dart Sassのコマンドライン実行可能ファイルと比較すると同等です)。
私たちはSass埋め込みプロトコルでこれら両方の問題に対処に取り組んでおり、メッセージパッシングを介して任意のホスト言語と通信できるサブリプロセスとしてSassコンパイラを実行します。埋め込みプロトコルは、カスタムインポーターやSass関数の定義機能を含むネイティブSass APIのすべての機能をサポートし、CLIアプリの高パフォーマンスも提供します。Dart Sassはすでに埋め込みプロトコルのコンパイラ側を実装しており、そのためのJavaScriptホストは現在開発中です。
どのように移行しますか?どのように移行しますか?permalink
Node Sassのユーザーの場合、Dart Sassへの移行は簡単です。`package.json`ファイルの`node-sass`を`sass`に置き換えるだけです。両方のパッケージは同じJavaScript APIを公開します。
SassCコマンドラインインターフェースを使用している場合は、Dart SassのCLIに切り替えることができます。これはSassCとまったく同じインターフェースではないため、いくつかのフラグを変更する必要がある場合があります。
他の言語のラッパーライブラリを介してLibSassを使用している場合は、Dart Sass CLIに切り替えるか、LibSassラッパーのメンテナンス担当者に、それをSass埋め込みプロトコルのホストに変換するように依頼できます。埋め込みプロトコルを使用すると、どの言語でもDart Sassを呼び出すネイティブAPIを提供できます。
LibSassのアクティビティがここ数年低調であったため、Sass仕様から多くの未解決のバグと動作の差異があることに注意してください。Dart Sassと互換性を持たせるために、スタイルシートを少し更新する必要がある場合があります。主要な互換性の問題のこのリストを参照してください。
ありがとうございましたありがとうございました permalink
最後に、長年にわたってLibSassとNode Sassに多くの時間と労力を費やしてくれた皆さんに感謝したいと思います。それは常に偉大な成果であり、Rubyコミュニティ以外のSassの人気が高いのは、間違いなくその存在によるところが大きいです。多くの人がSassの実装を試みましたが、言語は予想以上に深く複雑であることが分かりました。LibSassはそれらの実装の中で唯一、数千人、いや数百万人のユーザーに真の価値を提供できるほど十分な機能を備えたものになりました。これらのメンテナンス担当者はその仕事に誇りを持つべきであり、今後もSassコミュニティの一員であると考えてくれることを願っています。