Volt クライアントとサーバー両方のためのフレームワークです。Gem はクライアントとサーバーの両方で利用されますが、多くの Gem はクライアントとサーバーで互換性がありません。この理由 (および、以下に記載する理由) のために、Volt が起動時にすべての Gem を require することはありません。
いつも通りに Gemfile と Bundler を使用してください。ただ、上記したように、明示的に Gem を require する必要があります。
クライアント と サーバー の両方 で動作する Gem は、config/app.rb
で require するのがよいでしょう。
ブラウザー上で利用できる Gem もどんどん増えています。Opal の Gem は通常、opal- でプレフィクスされています。 例えば、ブラウザーや DOM の API を利用するための opal-browser や opal-jquery が良い例でしょう。また、opal-pixi や opal-phantom もあります。
opal-browser などの Gem を利用するには、以下のようにして条件ブロックの中で require してください。そのためには以下のように記述します。
if RUBY_PLATFORM == 'opal'
require "browser"
end
また、config/initializers/client/gems.rb
といった initializer を用意することも可能です。
require "browser"
プラットフォームテストを省略できる場合にはこの方法が有効でしょう。
クライアントのみで使用する Gem の場合、Opal に Gem のソースを探す場所を教える必要があります。これは、 config/dependencies.rb
で以下のようにします。
Opal.use_gem("browser")
ブラウザーでは動作しない Gem もあります。例えば、Opal は C エクステンションを一切サポートしていません。また、タスクで利用される Gem もサーバー側でのみ読み込まれるべきです。クライアントがネットワークの帯域を余計に利用することを避ける意味でも、ブラウザーが不要な Gem の読み込みを避けるのは好ましいものです。
クライアントの場合と同様に、条件ブロックの中で require してください。
if RUBY_PLATFORM != 'opal'
require "nokogiri"
end
config/initializers/server/gems.rb
のような initializer を利用することも可能です。
require "nokogiri"
Gemfileに書かれたGemが自動的にVoltにrequireされることはありません。この動作は以下の理由によるものです。
更なる理由を知りたければ、5 reasons to avoid Bundler.require を参照してください。
どうしてもGemを自動的にrequireしたい場合には、config/app.rb
の先頭に以下を記載してください。
Bundler.setup