Pipelineという超便利な機能をSinatraでも使ってみます。Railsを使ったことはないですが。Pipelineとは何か、ざっくり言うとJavaScript/CSSの依存関係を解決したり、複数ファイルを1つにまとめてリクエストを減らしたり、ついでに圧縮したりできる機能です。詳しくは以下のページが参考になると思います。Pipelineはsprocketsというgemを使って実現されており、Rails以外のRackアプリでも利用することができます。この記事では、Sinatraアプリでsprocketsを使ってみた例を紹介します。利用方法Sinatraからsprocketsを利用したサンプルを用意しました。installしてrackupすれば動作すると思います。私はpowでしか試していません。rackupGemfile必要なのはsprocketsだけですが、sprockets-helpersも入れておくと便利です。yui-compressorはコードを圧縮する場合に必要です。'yui/compressor'Sass(とCompass)を利用する場合は以下のgemを追加します。'sprockets-sass'CoffeeScriptを利用する場合は以下のgemを追加します。'coffee-script'application.rbsprocketsに関する設定を行います。'/assets'digestをtrueにすると、生成されるファイル名にファイルのハッシュ値が含まれるようになります。ファイルの中身が変わるたびにファイル名が変わるようになるので、ブラウザのキャッシュが読み込まれてしまってうまく表示できないトラブルを避けることができます。endファイルを置く場所のパスを指定します。'assets/stylesheets'jscompressorとcsscompressorにコードの圧縮を行うオブジェクトを指定できます。Compressorを利用するよう指定しています。endendsprockets-helpersのメソッドを利用できるようにしておきます。Sprockets::Helpersconfig.ru/(root)はApplicationで、/assets以下はsprocketsで処理するようにします。Applicationendassets/stylesheets/application.css.scssapplication.rbで指定したassets/stylesheetsディレクトリにCSSを配置します。.css.scssのように.cssの後ろにscss/sass/lessなどをつけておくと、それぞれの言語で記述したものとして認識されます。sprocketsでは、ファイルの先頭に特別なディレクティブを記述すると、それを認識して動作します。以下の例では、requireディレクティブでlayout.css(.scss)を結合したあと、requiretreeディレクティブでassets/stylesheets以下のすべてのスタイルシートを結合して1つのファイルにまとめています。requireディレクティブは結合する順序が重要な場合にのみ利用するもので、基本的にはrequiretreeディレクティブでごっそり結合しておけばよいと思います。結合は一度のみしか行われないため、最後のrequire_treeディレクティブでは先にrequireしたlayoutは結合されません。.views/layout.hamlstylesheet_pathメソッドにcssの名前を渡すことでパスを取得できます。cssがどんな形式で書かれているかを気にする必要はなく、名前のみを指定すればOKです。stylesheet_path('application')}実行結果/index.htmlハッシュ値を含んだファイル名が生成されていることがわかります。Compressorで圧縮されたCSSが生成されています。auto;overflow:hidden;*zoom:1}#container>header{display:inline;float:left;overflow:hidden;width:99.974%;margin-right:1.042%}#container>section{display:inline;float:left;overflow:hidden;width:66.302%;margin-right:1.042%}#container>aside{display:inline;float:left;overflow:hidden;width:32.63%;margin-right:0}さらに、以下のようなHTTPヘッダが付加されてキャッシュされるようになりました。Pipelineが使えるRailsと比べると準備が若干面倒ですが、設定さえしてしまえば便利だと感じました。Sinatraにいろいろ自分で足して使っていると、いい加減Railsを使った方がいいんじゃないかという気がしないでもないです。Padrinoなんてのもあるみたいですけど、それならメジャーなRailsにしたほうが無難かなと思いますし......。