SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

サンプルコードで学ぶRuby on Rails 5実践入門

Rails 5.0から5.1のバージョンアップで大きく変わるフロントエンド開発環境

サンプルコードで学ぶRuby on Rails 5実践入門 第6回


Rails 5でバージョンアップしたTurbolinks 5

 連載第1回でも紹介した通り、RailsはTurbolinksと呼ばれる機能を備えています。Turbolinksは、ページ遷移をAjax化しJavaScriptやCSSなどのパースを省略することで高速化する機能です。Turbolinksはgemとして提供されます。

 Rails 5.0では、Turbolinks 5がデフォルトでインストールされるようにGemfileに記述されています。

リスト9 Gemfile
…(中略)…
# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
gem 'turbolinks', '~> 5'
…(中略)…

 既にこれまで開発してきたrails5_sampleプロジェクトでは、TurbolinksがONになっています。先ほど確認した通りですが、app/assets/javascripts/application.jsの//= require turbolinksという記述が該当箇所です。

 次にレイアウトファイルを確認します。Railsでレンダリングするhtmlのひな形となるビューファイルはapp/views/layouts配下にレイアウトファイルとして配置します。app/views/layouts/application.html.erbを確認します。

リスト10 app/assets/javascripts/application.js
…(中略)…
    <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
…(中略)…

 headタグにスタイルシートとJavaScriptのタグを出力するstylesheet_link_tag、javascript_include_tagヘルパーがあります。いずれも、data-turbolinks-track: reloadと指定することで、TurbolinksがスタイルシートやJavaScriptの変更を検知することができるようになります。なお、Turbolinks 5以前では、data-turbolinks-track: trueと指定すればよかったのですが、Turbolinks 5から指定方法が変更になっています。

 Turbolinks 5は以前のパッケージからiOSアプリやAndroidアプリのウェブビューへの対応など、新しい設計の元で全て書き換えられているため、使い方が大幅に変更になっており注意が必要です。その分、適切に使用することで、手軽にRailsアプリケーションの高速化を期待することができます。

Rails 5.1からのフロントエンド開発環境

 Rails5.1では、前述の通り、フロントエンド環境に大幅に変更されることが決定しています。ここでは、Yarnパッケージのサポートとwebpackのサポート、Rails 5.1への取り込みは見送られたものの、将来の導入が見込まれるSprockets 4の変更点についてより詳細に紹介します。

Yarnパッケージのサポート

 Rails 5.1では、新規Railsプロジェクトを作成するrails newコマンド実行時に、デフォルトでYarnパッケージがサポートされます。前提として、事前にyarnコマンドをインストールしておく必要があります。macOSであれば、以下のコマンドでYarnをインストールできます。

$ brew install yarn

 Rails 5.1でYarnがデフォルトになったことで、vendor/package.jsonが追加されます。また、アセットパイプラインのパスにvendor/node_modulesが自動で追加されます。また、webpackによってJavaScriptライブラリ群がインストールされると、vendor/package.jsonに基づいたvendor/yarn.lockファイルが生成されます。Railsでいうと、vendor/package.jsonがGemfileに、vendor/yarn.lockがGemfile.lockに、vendor/bundleがvendor/node_modulesに、それぞれ相当します。このようにgemを管理する方法と類似の方法で、JavaScriptライブラリを依存関係も含めて管理することができます。

webpackのサポート

 webpackは、webpackerというgemを追加でインストールすると有効になります。webpackerは、JavaScriptライブラリの依存関係の処理やYarnパッケージの管理を、webpackを通じて提供します。

 webpackerを有効にした状態で新規Railsプロジェクトを作成するrails newコマンドを実行すると、最後にwebpackのインストールコマンドが実行されます。新しいYarnパッケージを追加した場合は以下のコマンドでインストールします。これは新たにgemをインストールする場合のコマンドである、bin/bundler installと似ています。

$ bin/rails webpack:install

 なお、Facebook社が開発しているJavaScriptフレームワークであるReact.jsもrails newコマンドに--webpack=reactオプションを指定するとインストールして使うことができます。

 Yarnパッケージとwebpackのサポートは、これまでのRailsでは統一したJavaScriptライブラリの管理方法が提供されていなかったことを考えると、大きな進歩といえます。

Sprockets 4の変更点

 Sprockets 4は以下のような新機能が備わっています。

  • ソースマップ
  • BabelによるES2015のサポート
  • node_modulesパスをサポート

 各機能についてご紹介します。

Sprockets 4の変更点:ソースマップ

 ソースマップは、アセット関連のデバッグを容易にする仕組みです。ソースマップと呼ばれるファイルをブラウザに読み込ませると、最小化/圧縮される前の元ファイルを見ながらアセットのデバッグを行うことができます。JavaScriptでソースマップファイルを指定するには、デバッグ対象のJavaScriptファイルの末尾に以下の記述を追加します。

//# sourceMappingURL=application.js.map

 また、CSSでソースマップファイルを指定するには、デバッグ対象のCSSファイルの末尾に以下の記述を追加します。

/*# sourceMappingURL=application.css.map */

Sprockets 4の変更点:BabelによるES2015のサポート

 Sprockets 4ではBabelによってES2015がサポートされます。BabelはES2015など新しい仕様のJavaScriptソースコードを、一般的なブラウザがサポートしているES5形式のJavaScriptに変換してくれるものです。coffee-railsがCoffeeScriptを実行可能なJavaScriptに変換するのと似ていますね。

 BabelによるES2015サポートを有効にするには、babel-transpilerというgemをインストールする必要があります。このgemをインストールしてES2015を有効にすると、拡張子.es6というアセットをES2015と見なしてES5形式のJavaScriptコードへの変換を自動で行ってくれるようになります。

Sprockets 4の変更点:node_modulesパスをサポート

 前述の通り、webpackeによるYarnモジュールの管理を行う場合、vendor/node_modules配下にYarnモジュールがインストールされます。これらのJavaScriptパッケージを読み込むためのRails側の設定が必要になります。例えばconfig/application.rbなどで以下のようにアセットのパスを追加すると、Sprockets形式の//= requireでvendor/node_modules配下のJavaScriptパッケージを指定して利用できます。

config.assets.paths << Rails.root.join('vendor/node_modules')

まとめ

 今回はRails 5が提供するフロントエンドの開発環境を解説しました。次回はRails 5目玉機能の1つであるAction Cableのサンプルアプリ実装を通してAction Cableへの理解を深めていきます。

参考文献

修正履歴

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
サンプルコードで学ぶRuby on Rails 5実践入門連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 竹馬 力(チクバ ツトム)

WINGSプロジェクト について> 有限会社 WINGSプロジェクト が運営する、テクニカル執筆コミュニティ(代表 ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/10108 2017/05/08 11:30

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー