2019/06/18 giftee tech bash #1 で発表した資料です。
『保守性の⾼いcssを書く』という不可能に⽴ち向かうגࣜձࣾΪϑςΟ 4BB4%JW!ZBTIJ
View Slide
©2019 giftee Inc. all rightsreserved2σβΠϯϦχϡʔΞϧ TQ
©2019 giftee Inc. all rightsreserved3σβΠϯϦχϡʔΞϧ QD
©2019 giftee Inc. all rightsreserved4σβΠϯϦχϡʔΞϧ QD
©2019 giftee Inc. all rights reservedࠓ͢͜ͱ5• なぜ保守性の⾼いcssを書くのは難しい(不可能︖)なのか• ⽴ち向かうアプローチ• 保守性の⾼いcssを書けるかもしれない⽅法
©2019 giftee Inc. all rights reservedࠓ͞ͳ͍͜ͱ6• ナウなヤングにバカウケのcssプロパティ– ex. flexbox, CSS Grid, ...etc• cssの実装⽅針(書き⽅)• 保守性の⾼いcssを書く⽅法
࣭ʂ©2019 giftee Inc. all rights reserved 7
DTTΛॻ͘ͷ͕ಘҙͳਓʂ©2019 giftee Inc. all rights reserved 8
͜͜Ͱख͕ڍ͕Βͳ͍༧ఆ©2019 giftee Inc. all rights reserved 9
DTTΛॻ͘ͷ͕͖ͳਓʂ©2019 giftee Inc. all rights reserved 10
͔ͨ͠͠Βएׯख͕ڍ͕Δ͔©2019 giftee Inc. all rights reserved 11
©2019 giftee Inc. all rightsreserved12ͳͥಘҙͳਓډͳ͍ͷ͔• (jsなどの)プログラミングと違う・・・︖• 求められたページの⾒た⽬を作るだけならできる、けど・・・。
อकੑߴ͘ ߏԽͯ͠DTTΛॻ͘ˠ͍͠©2019 giftee Inc. all rights reserved 13
ͳ͍ͥ͠ͷ͔ˠDTT͕$BTDBEJOH4UZMF 4IFFU͔ͩΒ©2019 giftee Inc. all rights reserved 14
©2019 giftee Inc. all rightsreserved15カスケーディングとは,ある要素のあるプロパティに対する宣⾔が複数あるとき,宣⾔の“強さ”の関係を定めて,うち 1 つの宣⾔だけが有効になるようにするしくみである。出典: http://www.tg.rim.or.jp/~hexane/ach/lbcs/lbcs2-05.htm
©2019 giftee Inc. all rightsreserved16DBTDBEJOH• 宣⾔の強さは仕様上決まっているものであって、コード上に明⽰されない• スタイル当てても適⽤されない/思ってないところにスタイルが当たる
ʮอकੑͷߴ͍DTTΛॻ͘ʯͷ͕͍͠ཧ༝ͦͷDTTͷ༷ DBTDBEJOH©2019 giftee Inc. all rights reserved 17
©2019 giftee Inc. all rightsreserved18• Rails Developers Meetup 2019• CSSの技術的負債との向き合い⽅ / How to Deal with TechnicalDebt of CSS (ja)• https://speakerdeck.com/upinetree/how-to-deal-with-technical-debt-of-css-ja
©2019 giftee Inc. all rightsreserved19DTTͷٕज़తෛ࠴• cssを変更したら思っていたところと違うところに影響した• cssがどこにどう作⽤しているか分からないので⼿を加えたくない• 指定したスタイルがなぜか適⽤されない• 使われていないcssがあるけど怖くて消せない
©2019 giftee Inc. all rightsreserved20引⽤: CSSの技術的負債との向き合い⽅ / How to Deal with Technical Debtof CSS (ja)
©2019 giftee Inc. all rightsreserved21引⽤: CSSの技術的負債との向き合い⽅ / How to Deal with Technical Debtof CSS (ja)
©2019 giftee Inc. all rightsreserved22DTTʮؔ৺ͷ୩ʯʹଘࡏ͢Δエンジニア• cssは苦⼿意識があるので⼿を出しづらいデザイナー• デザインの表現⼿段の⼀つであり、構造を設計しようというモチベーションが湧きづらい
ʮอकੑͷߴ͍DTTΛॻ͘ʯͷ͕͍͠ཧ༝ͦͷDTTͷཱͪҐஔ ؔ৺ͷ୩©2019 giftee Inc. all rights reserved 23
ʮอकੑͷߴ͍DTTΛॻ͘ʯͷ͕͍͠ཧ༝ͦͷDTTͷ༷ DBTDBEJOHͦͷDTTͷཱͪҐஔ ؔ৺ͷ୩©2019 giftee Inc. all rights reserved 24
©2019 giftee Inc. all rightsreserved25DTTͷ༷ DBTDBEJOHʹཱ͔ͪ͏• cssの設計を考えていく• 様々な設計思想がある• 「ファイルの分け⽅」と「命名規則」• OOCSS, FLOCSS, SMACSS, RSCSS, ...etc• BEMなどの命名規則
©2019 giftee Inc. all rightsreserved26ࠓճ࠾༻ͨ͠ͷSMACSS• base, layout, module, state, themeに分ける• (BEMは不採⽤)• 理由: SMACSSに命名規則が⼊っている
©2019 giftee Inc. all rightsreserved27ʮอकੑͷߴ͍DTTΛॻ͘ʯͨΊͷΞϓϩʔν ͦͷエンジニアがちゃんと検討する• 何かを構造的に組み⽴てることが得意既存の設計⽅針に乗ると良さそう• cascadingをコントロールしやすい
©2019 giftee Inc. all rightsreserved28DTTͷཱͪҐஔ ؔ৺ͷ୩ʹཱ͔ͪ͏引⽤: CSSの技術的負債との向き合い⽅ / How to Deal with Technical Debtof CSS (ja)
©2019 giftee Inc. all rightsreserved29ʮؔ৺ͷ୩ʯΛʮຒΊΔʯ• cssを、デザインを表現するための⼿段だと(雑に)捉えると・・・• 表現対象となるデザインが(ある程度)決まりを持ったものになっていてほしい• デザインシステムの導⼊– 決まりのあるデザイン→構造化したcssに落とし込みやすい
©2019 giftee Inc. all rightsreserved30ʮؔ৺ͷ୩ʯΛʮຒΊΔʯ• デザインはデザイナーと⼀緒に作っていくぐらいがよいのでは– デザインはデザイナーだけのものではない• cssを書くのはエンジニアがやったほうが多分良い– 実装レベルで構造化するのはエンジニアのほうが得意
©2019 giftee Inc. all rightsreserved31ʮอकੑͷߴ͍DTTΛॻ͘ʯͨΊͷΞϓϩʔν ͦͷデザインをエンジニアとデザイナーが⼀緒になって作るお互いの得意分野を活かす
©2019 giftee Inc. all rightsreserved32·ͱΊ• cssは、その仕様や⽴ち位置的に保守性の⾼いものにし⾟い• 完璧に保守性を持ったcssにするのは不可能• でも⽴ち向かわないと何も変わらない• やっていき
©2019 giftee Inc. all rightsreserved33Φν• 実はCSS in JSしてしまえばこんな設計どうこうとか考えなくていいんですけどね