前提
Rails6について学んだことを書いていきます。
macOS
Docker・Docker Composeインストール済み
本題
仮想環境を使う理由
Railsアプリケーションの開発をしようとするときに問題がある。
それは開発用マシン(作業マシン)と実運用を行うマシン(プロダクションマシン)の環境が異なること。
ここで言う環境とは、OSの種類やバージョン、あるいはOS上で動くソフトウェアやライブラリの種類やバージョンをさす。
Ruby on RailsはWindowsでもMacOSでもLinuxでも動作するように設計されている。
しかし、Railsを拡張するために導入するGemパッケージは必ずしもそうではない。
仮に動いたとしても、特定の環境では振る舞いが微妙に異なったり、不具合が出たりすることがある。
この問題の解決方法として、作業マシンとプロダクションマシンの環境を一致させること。
そこで現れるのが仮想環境と言うオプション。
Windows、MacOS、ubuntuなどのデスクトップOSの上に仮想環境を構築し、そこにLinuxベースのServerOSをインストールする。
開発中のRailsアプリケーションは仮想環境で動作させる。
デスクトップOS上のWebブラウザからRailsアプリケーションにアクセスして動作を確認。
他方、Railsアプリケーションのソースコードは共有フォルダの機能によって、デスクトップOS上で開いて編集する。
こうすれば、使い慣れたテキストエディタやIDEを使い続けながら、プロダクションマシンと同等の環境下でRailsアプリケーションの開発が行える。
Dockerとは
仮想環境を提供するオープンソース・ソフトウェア。
設定の容易さや起動の早さが人気。
個々の仮想環境をコンテナと呼ぶ。
コンテナの内容はDockerfileと呼ばれるテキストファイルで記述される。
このファイルがあれば様々なOS上でコンテナを復元できる。
Docker-composeとは
Dockerを用いて、Railsアプリケーションを開発したり、プロダクション環境で動かすとき、Railsアプリケーションとデータベースサーバーを別々のコンテナとして構築するのが一般的。
Docker-composeはこれらの複数のコンテナをまとめて起動・停止するためのツール。
docker-compose up
というコマンドを実行するだけで、Webアプリケーションを構成する全てのコンテナ群が動き出す。
Rails開発環境の構築
DockerとDocker Composeを用いてRails開発用コンテナ群を構築。
$ git clone https://github.com/oiax/rails6-compose.git
$ cd rails6-compose
$ ./setup.sh
コンテナ群の起動と停止
コンテナ群を全て起動するにはターミナルで下記のコマンドを実行。
オプション-dはコンテナをデーモン(バックグラウンドプロセス)として動かすためのもの。
$ docker-compose up -d
コンテナ群を停止するにはターミナルで下記のコマンドを実行。
$ docker-compose stop
webコンテナにログイン
$ docker-compose exec web bash
Railsのバージョン確認
bash-4.4$ rails --version
Rails6.0.0と結果出力されればOK!
rails newコマンドで新規Railsアプリケーションの作成。
bash-4.4$ rails new アプリ名 -d postgresql --skip-test-unit
--skip-test-unit
はTest::Unit関連のコードの生成を省略するためのオプション。
中身の確認
bash-4.4$ ls -a アプリ名/
Gemfileの編集
gem "bcrypt" #パスワードの暗号化
gem "rails-i18n" #railsが出力するエラーメッセージ、日付、時刻、通貨単位などの翻訳ファイルを集めたもの
gem "kaminari" #ページネーション機能
gem "date_validator" #日付のバリデーションを行う
gem "valid_email2" #メールアドレスへのバリデーションを行う
gem "nokogiri" #XML/HTMLの解析・生成のため
※email_validatorはバージョンアップでバリデーションの基準が緩くなり、実用性が乏しくなった。
例えば、@を2個含むようなメールアドレスを有効と判定してしまう。