cssやphp等のコードの修正をしたら自動的にブラウザをリロードしてくれるツール(アプリケーション?)はいくつかあって、いままではLiveReloadを使っていたのだけれどもgulpを勉強しようと思い立って調べていたら、どうもBrowserSyncの方が良さそうだということで試した時に自分がハマった点を主に忘備録として書いとく。むろん、gulpでインストールとかはできるのだけれども最初っから別途入れて試したほうが理解しやすいかなーと。
なお、前提としてはMacを使用し、インストール等はTerminalで操作、homebrewでパッケージ管理しているものとします。
参考にさせてもらったのは、
- BrowserSync(開発元のサイト)
- BrowserSync – pirosikick’s diary
- BrowserSyncでうきうきレスポンシブ対応アプリ開発 – ぶるーすくりーん
- BrowserSyncでレスポンシブデザイン対応のアプリ開発効率化 – Qiita
1. まずはGet started in 5 minutesを参考にNode.jsからインストール。
brew install node
2. 次にBrowserSyncをインストール
npm install -g browser-sync
3. そしてBrowserSyncをスタート
WordPressの開発で使いたいので静的サイト(Static site)の説明は飛ばして動的サイト(Dynamic site)で使うときの説明。
browser-sync start --proxy "myproject.dev" --files "css/*.css"
--proxy "myproject.dev"
はローカルのホスト名。普通はlocalhost
かな。--files "css/*.css"
は変更を監視するファイルで、このファイルに変更があったらブラウザが自動的にリロードされる。
--files
の指定はカレントワーキングディレクトリからの相対パスなので、WordPressであったら事前に該当のテーマフォルダなりにcd
しておくこと。
問題なく動作すると、
[BS] Proxying: http://dev1.hyperion [BS] Now you can access your site through the following addresses: [BS] Local: >>> http://localhost:3000/ [BS] External: >>> http://192.168.0.3:3000/
のようにターミナルに表示され、マシンのデフォルトブラウザが開く。
で、これやっぱ便利だなと思ったのが、同じLAN内であればExternalのアドレスを開けばどのブラウザでも自動的にリロードしてくれて、どれかのブラウザでスクロールとかすれば他のブラウザでも同じように自動的にスクロールとかしてくれること! なのでこの場合iPhoneのブラウザでhttp://192.168.0.3:3000/
を開いておけばスタイルシートを修正するたびにiPhoneのブラウザも自動的にリロードしてくれちゃうのよ!
ハマったこと
proxyで指定するさいのサブディレクトリの最後のスラッシュ
わたしはローカルではApacheのバーチャルホストで用途ごとにドキュメントルート分けてローカルのドメインを振って、例えばardis.hyperion
とかdev1.hyperion
とかをhostsに書いてる。で、さらにこの中に複数のWordPressを入れてるのでURLはhttp://dev1.hyperion/wp_stable_ja/
などになり、proxyには
--proxy "dev1.hyperion/wp_stable_ja/"
などと指定している。
最初にハマったのはここの指定で、最初は一番後ろのスラッシュを入れてなくて、本当ならこのサブディレクトリのURLのhttp://dev1.hyperion/wp_stable_ja/
が自動的にブラウザーで開くはずが、ドキュメントルートのhttp://dev1.hyperion
で開いてしまっていた。で、一番後ろのスラッシュ(/)を入れたところ、ちゃんとサブディレクトリのURLで開いてくれるようになったのでした。
公式のドキュメントのproxyではサブディレクトリでは例として
// Using localhost sub directories proxy: "localhost/site1"
となっていて一番後ろのスラッシュがないのよねー。。
監視するファイルを指定するときのglobパターン
恥ずかしながらglobパターンというのを初めて知った。てっきり正規表現パターンと同じかと思っていたよ^^;。
--files "css/*.css"
がカレントワーキングディレクトリのcssフォルダの中にある拡張子が.css
のすべてのファイルにマッチするということは分かってたんだけど、カレントワーキングディレクトリ配下のすべてのファイルにマッチさせる書き方が分からんかった。
てっきり"*"
だけでいいかと思ったらこれだと配下のフォルダ内のファイルにはマッチしない! ので、**/*
とした。
--files "**/*"
設定ファイルがががー!
たぶんこの辺はアップデートにともない挙動が変わったのかな?
他のブログ記事ではさらっとbrowser-sync init
実行して、生成されたbs-config.js
にオプション書いとけばbrowser-sync start
でおっけのように書いてあったのだけれども、browser-sync init
を実行した際にターミナルに表示された通り、browser-sync start --config bs-config.js
としないとダメだった。。
で、なぜかこのinit
とかbs-config.js
とかの説明が公式のドキュメントにはないのよね。みんなどっから情報を得てるのかしらん?
いまのところ、わたしのbs-config.js
はこんな感じでテーマフォルダの直下に置いてる。
module.exports = { "files": "**/*", "proxy": "dev1.hyperion/wordpress/", "browser": ["firefox", "safari", "Google Chrome"], }
さて、次はGulpだーーーーーっ!