CSSフレームワークBourbon/Neat/Bitters/Refillsは美しい


新規[Jekyll](http://jekyllrb.com/)プロジェクトに[Bourbon](http://bourbon.io/), [Neat](http://neat.bourbon.io/), [Bitters](http://bitters.bourbon.io/)をインストールして作業したら、とても快適だった。

> Bitters helps designers start projects faster by defining a basic set of Sass variables, default element style and project structure. – [Bitters](https://github.com/thoughtbot/bitters)

という説明の通り、新規プロジェクトがスタートダッシュできる感覚。最初からやりたいことに集中できる。

Bootstrapではスタートダッシュできるけど使い捨てのコードになりがち。ところが、Bittersのコードは長期的なメンテナンスにも耐えうる（はずだと筆者は判断している）。

- コンテンツファースト
- [アクセシビリティファースト](http://web.a11y1st.jp/)
- モバイルファースト
- [インブラウザーデザイン](http://ja.ishibashihideto.net/blog/in_browser/)

といった考え方や手法を取り入れている制作者にはフィットすると思う。

## やりたいこと

インブラウザーデザインかつコンテンツファーストで制作する。

まずはコンテンツを揃えて、ガシガシとマークアップしていく。

それができたらレイアウトや個別のスタイルを調整していく。

## Bootstrap等でのやりかた

Bootstrapで同じことをやろうとしたら、例えば「Sublime TextにBootstrapスニペットをインストールする」「スニペットをガシガシ入力していく」といった手法になる。

これでは意味論的に不要なタグが量産されてしまう。

構造を変えようとしたら、フレームワークの中身を調べないといけない。

長期的に運営するサイト（例えばブログ）では、メンテナンスコストが大きいので、採用しにくい。

そもそもマークアップにゴミが多すぎて、アクセシビリティの観点からは気持ち悪い。

## 何が悪かったのか

根本的な間違いは、「HTMLがCSSフレームワークに依存している」ことにある。

依存関係は逆でなければならない。

つまり、「HTMLはCSSに依存しない」で「CSSがHTMLに依存する」ようにしなければならない。

## Bootstrapのクソマークアップ問題

Bootstrapでは、class属性にカラム数などのスタイル指定を書くようになっている。

これは「スタイルと文書構造の分離」という原則に反している。何のために外部CSSファイルを使っているのかわからない。

このような状況を、個人的に「クソマークアップ問題」と呼んでいる。

<ins>追記：いちおうBootstrap関係者の名誉のために補足しておくと、<a href="http://getbootstrap.com/css/#grid-less">`make-row()`と`make-*-columns()`というmixin</a>を使えばいいということになっている。しかし、私の知るかぎり「Bootstrapではクソマークアップが氾濫している」ように見える。この問題には深入りしないが。</ins>

## Bourbon/Neat/Bittersの使いやすさ

いま実際に自分のJekyllブログサイトをBourbon/Neat/Bittersで制作している。「本来やりたかったこと」ができており、気持ちいい。

Neatは特定のマークアップ構造を前提としない。だから、「HTMLファースト」で、とりあえずはスタイルを気にせずに、ガシガシとマークアップしていくことができる。

複数人での作業分担にもメリットがある。[ウェブサービス開発の現場におけるデザイナー不要論と5〜10年後の生存戦略](http://ja.ishibashihideto.net/blog/web-designer-survival/)で書いたイメージに近いが、「CSSとスタイルガイド（後述のRefillsに相当）を納品物と定義しつつ、アートディレクションを発注する」という具合に役割分担しやすい。

## Bourbon/Neat/Bitters/Refillsのアーキテクチャ

Bourbon/Neat/Bitters/Refills自体のアーキテクチャもよく考えられていて、きれいにモジュラー化、レイヤー化されている。

BourbonをもとにNeatが作られ、その上にBittersが作られている。RefillsはBittersベースのスタイルガイド兼サンプルコードカタログになっている。

公式サイトから引用すると：

> - [Bourbon](http://bourbon.io/): A simple and lightweight mixin library for Sass.
> - [Neat](http://neat.bourbon.io/): A lightweight semantic grid framework for Sass and Bourbon.
> - [Bitters](http://bitters.bourbon.io/): Scaffold styles, variables and structure for Bourbon projects.
> - [Refills](http://refills.bourbon.io/): Refills are prepackaged patterns and components, built on top of Bourbon and Neat.

となっている。

美しいアーキテクチャだと思う。これを設計した[thoughtbot](http://thoughtbot.com/)の人たちはすごい。

## 今後の展望

Drupalのようなモジュラリティの高いアーキテクチャのCMSと組み合わせて使うと相性がよいのではないかと思うので、機会があったら検討してみたい。

最近Stylusも気になっていて、kouto-swissも試してみたい。

参考：[Stylus 用の Bourbon ライクな CSS フレームワーク kouto swiss を使ってみる - Qiita](http://qiita.com/ygoto3/items/d9f971a4e1ee277d7a1f)

## 追記：2015年2月22日

[サイトリニューアルのお知らせ 思想と手法について](http://ja.ishibashihideto.net/activity/2015/02/18/redesigned.html)に書いたとおり、Bittersを使いました。

それで分かったのですが、素晴らしいのはBourbon Neatのほうです。Bittersのほうは、「絶賛するほど素晴らしいとは言えないな」という評価に変わりました。

> 新規プロジェクトがスタートダッシュできる感覚。最初からやりたいことに集中できる。

という言葉を訂正する必要はないのですが、改造しにくかったです。

ですので、今後はこうしようと思います：

1. 最初はBittersでBourbon Neatプロジェクトを立ち上げる。
2. ある程度形になったらリファクタリングする。
3. Bittersが原型を留めない状態になり、いわばプレイン(plain) Bourbon Neat なSassコードになる。

Bourbon/Neat/Bitters/Refillsというレイヤー構造のアーキテクチャは素晴らしく綺麗なのですが、Bitters自体の内部アーキテクチャはそれほど綺麗ではなかったなあ、ということが分かりました。