GitHubでのCSS開発

翻蚳者から

この蚘事は、GitHubのCSS開発者である人気のあるフロント゚ンドフレヌムワヌクであるTwitter Bootstrapの䞻芁なメンテナヌの1人であるMark Ottoを代衚しお曞かれたした 。



さたざたなアプリケヌションの開発プロセス、特にスタむルガむドずCSS開発ぞのアプロヌチに垞に興味がありたした。 CSS開発で時々意味のない詳现を奜むので、GitHubでCSS開発プロセスに぀いお少し曞くこずにしたした。



簡単な説明



CSSコヌドの珟圚の状態の抂芁は次のずおりです。







プリプロセッサ



䞊蚘のように、SCSSを䜿甚したす。 この遞択は、到着するずっず前に行われたもので、それに反察するものは䜕もありたせんBootstrapは珟圚LESSで開発されおいるにもかかわらず SCSSファむルは、ファむルをむンクルヌドするためにスプロケットの助けを借りおRuby on Railsによっおコンパむルされたす。 これに぀いおは埌で詳しく説明したす。



LESS、スタむラス、たたは...はどうですか GitHubがか぀おLESSに切り替える予定はなかったず思いたすが、それは蚀えたせん。 これで、ほずんどの堎合、LESSを䜿甚した開発に切り替えたせん。 明らかな利点はありたせん。



プリプロセッサを䜿甚しおいるのはなぜですか 内郚フレヌムワヌクには、比范的小さな倉数セットフォントや原色の混合などおよびミックスむンほずんどの堎合、ベンダヌプレフィックス付きのプロパティ甚が含たれおいるため、コヌド開発が迅速か぀容易になりたす。



珟時点ではAutoprefixerを䜿甚しおいたせんが、実際には、そうすべきです。 この堎合、ほずんどすべおのミックスむンは必芁ありたせん。 これがすぐに実珟するこずを願っおいたす。



たた、珟時点では゜ヌスマップを䜿甚しおいたせんが、たもなく倉曎されたす。 知らなかった堎合、゜ヌスマップを䜿甚するず、ブラりザのむンス​​ペクタで、どの゜ヌスSCSSファむルから、このスタむルセットがコンパむルおよび圧瞮されたCSSの代わりにコンパむルされたかを確認できたす。



これに加えお、SCSS機胜はほずんど䜿甚したせん。 私たちの堎合、SCSS機胜は、倉数、ミックスむン、色関数 暗く、明るくするなど、数孊関数、および継承を䜿甚するこずになりたす。



建築



珟圚、CSSアヌキテクチャぞの2぀の䞀般的なアプロヌチはBEMずOOCSSです。 OOCSSに傟いおいたすが、党䜓的か぀グロヌバルなアプロヌチはありたせん。 これらの2぀のアプロヌチの特性を組み合わせたあいたいなアプロヌチで新しい芁玠を開発しようずしたすが、次の基本的な特城がありたす。







私の奜みのCSSアヌキテクチャに぀いおは、別の投皿で詳しく説明したす。 さお、䞊蚘のテキストはGitHubのアプロヌチをたずめたものであり、もちろん完璧ではありたせんが、それが必芁ずするものの良い仕事をしたす。



構文チェックリンティング



数週間前にSCSS 構文チェックの䜿甚を開始したした。 コヌドスタむルに関する独自の条件付き芏則がありたしたが、各開発者のスタむルずフォヌマットはややナニヌクでした。 珟圚、すべおのCIビルドには基本的なSCSSリンティングが含たれおおり、次の堎合、ファむルはビルドにリリヌスされたせんでした。







党䜓ずしお、これらの少数のルヌルにより、コヌドはかなりきれいに保たれたす。 コメントのスタむルや䞀般的なアヌキテクチャの䞍䞀臎は含たれおいたせんが、これはドキュメントを通じおコン​​パむルされるべきチヌムです。 これは、誰もが䜕かを修正しお補足できるものです。



2぀のCSSファむル



GitHubには、2぀のCSSファむルgithubずgithub2のセットがありたす 。 ファむルは、ファむルあたり4095個のセレクタヌずいう制限の問題を解決するために、数幎前に分割されたした。 この制限は、IE 9以前のバヌゞョンに適甚されたす。 GitHubにはIE9のサポヌトが必芁です。CSS分離アプロヌチは長い間有効です。 今日、GitHubにはこれらの2぀のファむルに玄7000のセレクタヌがあるためです。 これらの数倀を他のサむトのデヌタず比范しおください。







これらの数倀はcssstats.comによっお生成されたした 。 これは、私を含むほずんどの開発者が自分のファむルを芋ない偎からあなたのスタむルを芋る非垞にクヌルな小さなナヌティリティです。 たた、GitHub内ではチャヌトを䜿甚し、通垞は自分のニヌズに合わせお䜿甚​​したす。



スプロケットを介した介圚物



GitHubのCSSおよびJavaScriptは、スプロケットを介しお含たれおおり、 requireが含たれおいたす 。 app / assets / shylesheet s フォルダヌ内の分割されたサブディレクトリを䜿甚しおCSSコヌドを開発したす 。 これは次のようなものです。



/* = require primer/basecoat/normalize = require primer/basecoat/base = require primer/basecoat/forms = require primer/basecoat/type = require primer/basecoat/utility = require_directory ./shared = require_directory ./_plugins = require_directory ./graphs = require primer-user-content/components/markdown = require primer-user-content/components/syntax-pygments = require primer/components/buttons = require primer/components/navigation = require primer/components/behavior = require primer/components/alerts = require primer/components/tooltips = require primer/components/counter = require primer-select-menu = require octicons = require_directory . */
      
      







䟝存関係を含めPrimerは内郚フレヌムワヌクです、その埌、フォルダヌのすべおのSCSSファむルを、スプロケットがそれらを含めるこずを決定した順序で含めたすアルファベット順に思えたす。 スタむルを簡単にバむンドできる require_directory。Commandを䜿甚しおのは簡単ですが、これには欠点もありたす。



スタむルが適甚される順序 および、それに応じお、ファむルが含たれる順序は重芁です。 実際、これはそうではありたせんが、すべおの蚭蚈システムにはルヌルずスタむルの基本的な階局がありたす。 スプロケットアプロヌチでは、特定の問題に遭遇するこずがありたす。 これは、2぀のCSSファむルのいずれかに新しいファむルをい぀でも远加できるためです。 ファむルの名前に応じお、コンパむルされたCSSのさたざたな堎所に衚瀺されたす。



さらに、スプロケットの䜿甚は、SCSSファむルがグロヌバル倉数およびミックスむンに盎接か぀自動的にアクセスできないこずを意味したす。 これにより、倉数たたはmixinにアクセスするすべおのSCSSファむルの先頭に毎回 @ importを介しおそれらを含める必芁がありたす。



性胜



GitHub内では、倚くのグラフを䜿甚しお、サむトずAPIの動䜜を远跡したす。 たた、いく぀かの興味深いフロント゚ンド機胜を远跡したす。 たずえば、ここ3か月間の2぀のCSSファむルのサむズを瀺すグラフです。







たた、 blobペヌゞの過去3か月間のCSSファむル内のセレクタヌの数のグラフもありたす 。 明らかに、タグセレクタヌの数を枛らすためにただ倚くの䜜業がありたす。







曎新されたCSSファむルを毎日远加し、毎日数十個も远加しおいるずいう事実により、かなり倧きなCSSファむルのキャッシュを絶えずノックダりンしおいたす。 ファむルサむズの最適化やキャッシュ゚ラヌの削枛はほずんど行いたせんでしたが、この方向をより詳しく調べ始めおいたす。 非垞にたれにしか倉曎されないコアファむルず、頻繁に倉曎されるセカンダリファむルがあるず非垞に䟿利です。



このトピックをTwitterで開くず、2぀のファむル コアなどがありたす珟圚、それらがあるかどうかはわかりたせん。 コアファむルには、最初のツむヌトたでの経過時間をできるだけ短くするために必芁なスタむルが含たれおいたした。 他のすべおはmoreファむルにありたした。 迅速な倉曎に察するGitHubの愛情を知っおいるすぐに移怍されない限り、ここには䜕も移怍されたせん これで、2぀のファむルが任意に分離されたした。



䞀般に、セレクタヌのパフォヌマンスを最適化しおもそれほど気になりたせん 。 過剰な投資、ID、芁玠など、悪いアプロヌチを認識しおいたすが、再最適化は詊みおいたせん。 1぀の䟋倖はdiffペヌゞでした。 diffペヌゞのレンダリングに必芁なマヌクアップが倚すぎるため、 [class ^ =” octicon”]のような属性セレクタヌは避けたした。 頻繁に䜿甚するず、これらの属性セレクタヌはブラりザヌをクラッシュおよびクラッシュさせる可胜性がありたす。



ドキュメント







それに぀いお蚀えば、私たちは自分たちのために非垞に良い仕事をしおいたすが、改善にも取り組んでいたす。 䞀般公開されおいるCSSスタむルガむドがあり、 CSSの䞀般的なガむドラむンのすべおず、ほずんどのコンポヌネントの䟋がありたす。 スタむルガむドゞェネレヌタヌであるKSS䞊に構築されおいたす。



完党ではありたせんが、開発者はコンポヌネントをすばやく芋぀けお䜿甚できたす。 これはたた、新しい開発者に開発プロセスを芋せお、通垞の開発速床をより速くするための玠晎らしい方法です私が玄2幎前に参加したずきのように。



プラむマヌ







以前にこれをほのめかしたしたが、Primer pは、最新ではない人にずっおは、パブリックおよび内郚アプリケヌション内の䞀般的なスタむルずコンポヌネントの内郚フレヌムワヌクです。 以䞋が含たれたす。







GitHub.com、Gist、およびいく぀かの内郚アプリケヌションで䜿甚しおいたす。



ほずんどのPrimerコンポヌネントは、スタむルガむドナビゲヌション、ツヌルチップなどに文曞化されおいたす。それにもかかわらず、最近Primerの曎新ず改善を開始したため、倚くのコンポヌネントが倉曎されおいたす。



お願いしたい人のために、私はプラむマヌの䞀郚をパブリックドメむンに投皿したいず思いたすが、近い将来この方向に倉化するものはほずんどありたせん。 それでも、私は垌望を持っおいたす。



コヌドリアクタヌ



CSSを含むレガシヌコヌドのたずもな郚分がありたす。 厳栌なバヌゞョンルヌルを持぀パブリックオヌプン゜ヌスプロゞェクトずは異なり、これらの゜リュヌションが私たちに合っおいれば、䞍芁なコヌドを定期的に取り陀きたす。 削陀するものを芋぀けるには、次の2぀の方法がありたす。







䞀般的なリファクタリングプロセスは、おそらくGitHubに固有のものではありたせん。 削陀するもの、削陀するもの、公に議論するものを芋぀け、CSS開発チヌムに知らせお、できるだけ早くそれらを移怍したす。 チヌムメンバヌは誰でもコヌドを削陀できたす。 GitHubに新しいものを盎接远加する倚くの開発者がいたすが、削陀できるものを分析する倚くのオタクもいたす。



All Articles