スポンサーリンク

2017年1月15日

alchemist report 006

Goal

ただのメモなのでなしです。

Dev-Environment

  • OS: MacOS v10.11.6
  • Erlang: OTP19.1
    • Cowboy: 2.0-pre5
  • Elixir: v1.3.4
  • npm: v3.10.9

Content

Elixir+Cowboyで作っているアプリケーションにCSS(SCSSとかBootstrap)やJavaScriptを管理できるようにしようと思い、npmでBrunchが使える環境を構築しました。参考にしたのは、やはりPhoenixFrameworkです。
しかし、不明な点が一つ残りました。brunch buildをどうやってPhoenixフレームワークだと自動で実行しているのだろうか?っと。そこで調査をしたときのメモ内容になります。

watchの設定

watchをしたときの動作や対象については、Phoenixフレームワークのアプリケーションを作成するテンプレートにあるpackage.jsonbrunch-config.jsに設定が書いてあります。
package.jsonにあるscriptsはnpm run ~といった感じで使えるはずですが、Phoenixではどうやって実行しているのか?これが疑問でした。

Phoenixフレームワーク側での監視

まず最初に見るべきは、Endpointです。このモジュールのコメントに:watchersについて書いてあります。
簡単に言うと、サーバと一緒に実行される監視セットについてです。
他にも、ビルドツールやコマンドを自由に設定することができるようです。

設定はどこだ?

2のことが確かならば、どこかしらにEndpointへ渡している設定があるはずです。
Phoenix.Endpointにはコメント以外、それらしい記述はありません。
それならばと、phoenix newで生成したアプリケーションのEndpointを探してみましたが、:watchersについては書いてありませんでした。
しかし、Endpointに設定を渡している部分は他にもありますね。
そうです。config/*です。早速、確認してみたところ、config/dev.exsにありました。

コードの流れは?

細かく見ると少し面倒なのでポイントとなっている部分で軽く流れをまとめておきます。
[ApplicationName].Endpoint -> Phoenix.Endpoint.Adapter (watcher_children/3) -> Phoenix.Endpoint.Watcher (watch/3)といった順に渡ってきて、監視が実行されています。
Phoenixフレームワークでソースコードを追う場合、フレームワーク側のみで追うと大変な場合があります。生成したアプリケーションと合わせて追うと良いと思いますまる

おまけ

brunch buildの自動化はしていませんが、npm(brunch)の構成を構築したプロジェクトを見てみたいという方がいましたら、下記のリポジトリにアップしているのでどうぞ。書き捨て用なので、あまり整理されていませんが役に立てば幸いです。
参考: github

Bibliography

人気の投稿