Rails Tutorial意図せず2週目(第1章 ゼロからデプロイまで)

背景

1周目第13章途中でどうしても問題が解消できなくなり、gitでソースコードを戻してもDBの状態が戻らない、Herokuにデプロイはできるがアプリケーションが表示されない等の問題達にぶち当たったため、意図せず2周目を開始することに。
今回は丁寧にわからない用語等あれば拾いつつ復習していこうと思います。

第1章 ゼロからデプロイまで

この章はRailsでシンプルなアプリケーションを作成し、アプリケーション作成〜デプロイまでを一貫して学ぶという章でした。
一応13章まで繰り返してきた事の再復習になったので良い準備運動になったと思います。
特に環境構築部分はCloud9に慣れていないため、コマンドの意味を考えながら実施することでいい勉強になりました。

以下、1周目はスルーしていた概念やコマンドの意味を調べる

1. gemrcについて

以下は「gem インストール時にドキュメントをインストールしない」とgemrc(gem全体の設定箇所)に書き込むコマンドです。
ドキュメントというと各gemのREADMEやヘルプ、使い方等が書かれたファイルになると思うので、毎回入れていてはCloud9の容量を圧迫してしまいますし、インストールに時間がかかるのでこの設定は必要な設定に思います。

$ echo "gem: --no-document" >> ~/.gemrc

「.gemrc」について調べて見た所、他のブログ等でも同様にドキュメントインストールをスキップしたりgemのインストールを早めるために生成されている人が多い印象でした。1

そもそも、「.gemrc」は自然は生成されずgemに関してなんらかの設定を施す際に生成、書き込むファイルのようです。

2. sourceコマンドで実行したものたち

以下は「Cloud9環境のディスク容量アップと、クラウドIDEへのYarnインストール」するコマンド群です。

$ source <(curl -sL https://cdn.learnenough.com/resize)
$ source <(curl -sL https://cdn.learnenough.com/yarn_install)

しかしながら、そもそも「source」コマンドとは何か、そしてこれらは何をしているのかがわかっていないので調べてみました。結果は以下です。


以下は脚注のサイトとcurlのhelpからの引用です。

  • sourceコマンドは引数(後ろ)で渡した内容を即座実行するコマンド2
  • curlコマンドは引数に渡したURLを指定してファイルをダウンロードする3
    • 今回は -sLというオプションを渡しているため、-sの「実行時メッセージを非表示」と-Lの「リダイレクトを実行」4の2つも同時に行われていました。

結論としては、sourceで実行したいコマンドとして「①cloud9のリサイズを行うURLアクセス」と、「yarnコマンドをインストールするURLへのアクセス」を行っていた。
その際にメッセージは非表示にするオプションとリダイレクトするように設定していたということでしょう。特に今回アクセス先となっていたのがCDN5のURLのため本体のURLにリダイレクトをする関係で-Lオプションをつけていたのではないかということです。

【参考】

kaworu.jpn.org

3.yarnについて

よく見かけるコマンドyarnですが、知らなかったので調べてみました。


以下、こちらの「UbuntuにYarnをインストールする」からの引用です。

  • Yarnはnpmと互換性のあるJavaScriptパッケージマネージャーで、npmパッケージのインストール、更新、構成、削除のプロセスを自動化するのに役立ちます。

とのことです。


JavaScriptのパッケージマネージャーというとnpm等もありますが、それをインストールする際にも使えるということで、利用されたのかもしれません。
後述するwebpackerについてRailsガイドを調べていた所「webpackerを利用するにはyarnとNode.jsのインストールが必要です。」となっていたため、webpackerおよびwebpackの利用のためにyarnが必要ということだったようです。

4.webpack, webpackerについて

webpackerもこのRails Tutorialで初めて出会ったため、調べた所、どんびしゃの記事を見つけました。 Railsガイドにwebpackerの記事がありましたので、こちらを見ていきましょう。


以下、「Railsガイドv7 Webpacker の概要」から引用。

[webpack]

  • webpackなどのフロントエンドビルドシステムの目的は、開発者にとって使いやすい方法でフロントエンドのコードを書き、そのコードをブラウザで利用しやすい方法でパッケージ化することです。webpackは「JavaScript」「CSS」「画像やフォント」といった静的アセットを管理できます。

[webpacker]

  • Webpackerは、汎用的なwebpackビルドシステムのRailsラッパーであり、標準的なwebpackの設定と合理的なデフォルト設定を提供します。

  • webpackは、より新しいJavaScriptツールやNPMパッケージとの統合に優れており、より多くのものを統合できます。新しいRailsアプリは「JavaScriptはwebpackで管理する」「CSSはSprocketsで管理する」設定になっていますが、webpackでCSSを管理することもできます。


ということは、フロントエンドのjsやcssを管理するwebpackと、それを管理するwebpackerという立ち位置のようです。
webpackerは言ってみればgemのように沢山ある資産(特にフロントエンド関連のもの)をまとめる役割のようですね。

【今回のまとめ】

  • 1章だけを見ても知らない単語や概念が沢山あり、一旦それをスルーしていくことでアプリケーションを作ることができていたことを改めて知ることができた
  • なんとなく動かしていたコマンドの意味が少し理解でき、Railsでのアプリケーションの環境構築方法への解像度が上がった
  • 過去に自分が作っていた作業メモ(忘備録)が役立ったため、忘備録は重要だとあらためて気がついた

  1. .gemrc に以下を入れておくと gem install が多少早くなる

  2. 【 source 】コマンド/【 . 】コマンド――シェルの設定を即座に反映させる

  3. 【 curl 】コマンド――さまざまなプロトコルでファイルをダウンロード(転送)する

  4. ちなみに、curl等のコマンドは -helpというオプションを渡せば(「$ curl -help」)コマンドのドキュメントを読むことができるため、オプションの詳細を把握することができます。

  5. Contents Delivery Networkの略で、本体のサーバの代理としてアクセスを受付、捌いてくれるサーバサービスのことです。これがあるおかげで現代の高速インターネットやブラウジングが成立している側面もあります。