昨日の続きみたいなもんですが、Grailsでbootstrap-sassを使いたいのだけれど、どうしたらいいかなーと思っていたんですが、前にspring bootの練習をしていたときにWebJarsというのがあったなというのを思い出したので、それを使ってみることにしました。WebJarsっていうのは、JavaScriptのライブラリをmavenやgradleを使って管理しようという仕組みです。Railsでいうところのrails-assetsみたいなもんですね。
その中で、Bower WebJarsというのがありました。Classic WebJarsは、WebJarsチームがOK出したものが登録されていくけれど、Bower WebJarsは誰でも登録可能のようで、最新のバージョンのライブラリが使えます(Classic WebJarsはバージョン対応がやや遅れ気味っぽい)。今回は、Bower Webjarsを使ってみます。
Bower WebJarsで使いたいライブラリを探す
- http://www.webjars.org/より、Bower WebJarsに移動します。
- ライブラリ検索フィールドにライブラリ名を入力します。
- 使いたいライブラリのバージョンを選択します。
- 使っているビルドツールを選びます。今回はgradleです。
- 表示された内容を、build.gradleに貼り付けます。
こんな感じでじゃんじゃん調査します。
build.gradleの修正
build.gradleのdependenciesブロックに、jqueryとbootstrap-sassを追加しました。
dependencies {
compile "org.springframework.boot:spring-boot-starter-logging"
compile "org.springframework.boot:spring-boot-starter-actuator"
compile "org.springframework.boot:spring-boot-autoconfigure"
compile "org.springframework.boot:spring-boot-starter-tomcat"
compile "org.grails:grails-dependencies"
compile "org.grails:grails-web-boot"
compile "org.grails.plugins:hibernate"
compile "org.grails.plugins:cache"
compile "org.hibernate:hibernate-ehcache"
compile "org.grails.plugins:scaffolding"
compile 'org.webjars.bower:jquery:2.1.4'
compile 'org.webjars.bower:bootstrap-sass:3.3.4'
runtime "org.grails.plugins:asset-pipeline"
runtime 'com.bertramlabs.plugins:sass-asset-pipeline:2.3.1'
runtime 'com.bertramlabs.plugins:coffee-asset-pipeline:2.0.7'
testCompile "org.grails:grails-plugin-testing"
testCompile "org.grails.plugins:geb"
// Note: It is recommended to update to a more robust driver (Chrome, Firefox etc.)
testRuntime 'org.seleniumhq.selenium:selenium-htmlunit-driver:2.44.0'
console "org.grails:grails-console"
}
application.js.coffeeの修正
Bower WebJarsで取り込んだjqueryとbootstrap-sassを読み込みます。
#= require webjars/jquery/2.1.4/dist/jquery.min
#= require webjars/bootstrap-sass/3.3.4/assets/javascripts/bootstrap.min
#= require_self
#= require_tree .
$ ->
$('#spinner').ajaxStart(->
$(this).fadeIn()
).ajaxStop( ->
$(this).fadeOut()
)
上記のように書けばOKなのですが、じゃあjqeury.minへのパスやbootstrap.minへのパスってどうやって調べたのか?というところが気になると思います。指定方法がわからなくて困りましたので、皆さんが時間を無駄にしなくてもいいように書いておきます!ヒントはBower WebJarsのfilesにありました。
filesをクリックすると、ファイルの一覧がズラーッと表示されます。その中で、読み込みたいファイルを見つけて、そのファイルパスをコピペしましょう。ここではbootstrap-sassを対象にしていますが、jqueryの場合も同様の手順でパスを調べました。
あと、ここまでやれば、もともとあったjqueryは必要なくなるので、grails-app/assets/javascripts/以下にあるjquery.jsは削除しときましょう。
application.scssの修正
さて、次にapplication.scssの修正ですが、こっちのほうが厄介でした。というのも、bootstrap-sassはglyphiconがあるので、それの読み込み方法を設定しなければならないためです。以下のようにすれば問題ありません!
まず、grails-app/assets/stylesheets以下に、_variables.scssを作成します。そして、以下のように記述します。
@import 'webjars/bootstrap-sass/3.3.4/assets/stylesheets/bootstrap/variables'; $icon-font-path: "webjars/bootstrap-sass/3.3.4/assets/fonts/bootstrap/";
@importは必要ないかもしれませんが、今後、ほかの変数を修正した場合にエラーを出さないために事前に読み込んでおきました。
肝は、アイコン用フォントパスを指定している変数の値をBower WebJarsに合わせて修正しておくことです。
次に、application.scssを修正します。
@import 'variables'; @import 'webjars/bootstrap-sass/3.3.4/assets/stylesheets/bootstrap';
これで、めでたくbootstrap3が使えるようになりました!
まとめ
まだ全然Grailsに関係ないところですが、フロント側がある程度できるような環境が整えば、やる気が出てくると思うので、先にやっときましょう!



