drupal 10.0.x-devを読む - theme編

hagi に投稿

drupal.orgのダウンロードサイトにあるdrupal 10.0.x-devは2022-04-12 17:30 UTCの版である。

最近、Themingに関心をもっていて、先日Webformで氏名の表示順序を変えるという記事で、テンプレートの上書きを行ってみた。実際に触ってみると、どうtwigが効いているのかとかcssがどう効いているのか、構造的にどうなっているのかがイメージできるようになってくる。イメージできるようになってくると、実装コードも想像できるようになってくるのだが、そうなって来るとコードを読む誘惑から抗い難くなる。

まだ、Drupalのコード読みにちょっと手をつけたところに過ぎないのだが、昔Operating System Design: The XINU Approachの一部を読んだことを思い出した。多分、20歳代後半の頃だ。それなりに大きなシステムのコードを全部読むのは困難だが、自分が解きたい問題に関わる部分を理解するだけでも価値があった。私にとっては良い思い出である。

とりあえず、core/themesのところを読むと、Meetup等で話題となっていたstarterkitが、starterkit_themeとして記述されているのが分かった。d8/d9ではclassyに相当する位置づけになっていて、classyのbase themeがstableなのに対して、starterkit_themeではstable9の派生themeとなっている。d9のデフォルトthemeのBartikはbase themeはなし(false)だが、classyのライブラリがコピーされた状態で作られている。ちなみにbartik.info.ymlを読むと、

# 2. Sub-theme Bartik. This is only recommended if you want to make minor
# tweaks and understand that Bartik could break your modifications as it
# changes.

と書かれていて、ちゃんとやるんだったら、自前で準備してねという風に読める。そして、classyをベースにした方が良さそうであることが分かる。それでもstable/stable9のREADMEを読むと変更の影響が及ぶことは覚悟しなさいと書かれている。READMEはhttps://www.drupal.org/docs/8/themingに誘導していて、その下にあるSub-theming: Using Classy as a base themeでベーステーマの設定の仕方が書かれている。実際にやり始めれば、超初心者はbartikをベースにしても良いが、まあclassyからやったら良いし、中級者ならstable、本気でやるならベース無しでやるのが良いということなのが分かる。正直に言って面倒だ。

Drupal10で動くcontributed themeは限られているが、W3CSS Theme (Drupal 8, 9, 10)というbootstrapベースでないTheme(d8w3css)があったので、入れて試してみた。コードを見ると、base themeはなし。そして、drupal8_w3css_subthemeというディレクトリがあって、これをそのままtheme/customの下にrenameして置けばサブテーマができるように作られている。スタートポイントとしては、十分使えると思う。w3cssは割と単純で、もう過去のもののようにも見えるが、Web上にドキュメントはあって、そこそこのページは作れそうなものだ。

bartikとd8w3cssのテンプレートnode.html.twigを比較すると、細かいところは別にして、htmlを生成する時にw3-rowというクラスが追加されていることと、clearfixが除かれている程度の差しかない。つまり、node全体のレンダリングに関しては、cssの当て方以外にはほとんど差がないということだ。適用するテンプレートの優先順位を理解していれば、何をやれば良いかが分かってくる。cssフレームワークを使って書くか、サラから書くかの差が大きいのも眺めていると見えてくる。

なるほどということで、フレームワークの状況を確認してみると、bootstrap、bulma、foundation、tailwindがよく使われているようだが、DrupalのThemeでユーザー数が多いのは、結局bootstrapしかない。bootstrapは利用者満足度は高くないという話もしばしば聞くが、シェアが大きければ調べごとは楽になるので、やはり好ましい選択肢ということになるのだろう。ちょっとつまらない結論になってしまった。もちろん、フレームワークを使わなければいけないわけではないのだが、ベースラインが高くなること、改善期待があることを考えると長いものに巻かれてしまう気がする。

CSSフレームワークの比較には9 Best CSS Frameworks in 2022ほかの記事を参考にさせていただいた。

コード読み勉強会はやってみる価値はあるし、書籍のような形でまとめるのもありだとは思うのだが、賞味期限が短そうなのが難点。

タグ