前提
・windows
・環境はDocker使用
・フレームワークはRuby on Railsを使用
本記事はDocker環境を使用してRuby on Railsの開発を行った際に頻出したコマンドと
その内容についてまとめています。
Dockerについて
Docker
…アプリケーションを「コンテナ」と呼ばれる軽量な仮想環境で実行することができる。
これによって環境の違いなどに依存しない動作が保証される。
「Dockerイメージ」という、依存関係・設定情報等すべて含むパッケージを使用して、
任意の環境で「コンテナ」を作成し、実行することができる。
(※個人的にですが「コンテナ」はサーバなどといった実行環境という認識でいます。)
開発・テスト・運用環境で同じDockerイメージを使用することで、環境依存の問題を減らすことができる。
(※まとめると、軽いうえに環境に依存しない超効率的なやつ。)
Ruby on Railsについて
Ruby on Rails
…アプリケーションをモデル・ビュー・コントローラーに分けてコードの保守性・再利用性を高める
MVCアーキテクチャに基づいているRubyのフレームワークのこと。
「設定より規約」が原則となっており、多くのデフォルト設定が提供され、
利用者がコーディングに集中できる環境が整いやすい。
Railsの名の通り、ある程度レールに沿って開発を効率的に進めることができる。
(※ まとめると、実は裏で色々設定やらなにやらやってくれているやつ。)
【Dockerを用いた開発において使用頻度が高かったコマンド】
・Dockerファイルを用いてイメージをビルドするコマンド
→Dockerファイルは、Dockerイメージを構築するための設定ファイルのこと。
Dockerイメージを作成する際に必要な指示が記述されており、
アプリケーションの環境構築を自動化することができる。
(例えばrailsのbundle install等のコマンドも、Dockerファイルに記載しておけば、
下記コマンド実行時に一緒に実行される。)
docker compose build
・docker-compose.ymlファイルに定義された複数のサービスを一括で起動するためのコマンド
いわゆるサーバ起動のコマンドのようなもの
docker compose up
docker compose up -d # ログ表示なし・バックグラウンドでのサーバ起動
docker compose up --build # コンテナを実行する前に強制的にDockerイメージを再ビルドする
・docker composeを使用して管理しているサービスを止めるコマンド
# アプリケーションを停止したいが、再起動する予定がある場合に使用する
docker compose stop
# アプリケーションのすべてのサービスを停止し、関連するリソースを削除する
docker compose down
・docker-composeを使用して管理されているコンテナの状態を確認するためのコマンド
いわゆるサービスが起動しているかどうかの確認が行えるコマンド
docker compose ps
このコマンドを実行すると以下のように表示される。起動中のサービスがあればSERVICE列で「Up」と表示される
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
rails-practice-db-1 mysql:8.0 "docker-entrypoint.s…" db 2 weeks ago Up 6 seconds 3306/tcp, 33060/tcp
rails-practice-web-1 rails-practice-web "sh -c 'rm -f tmp/pi…" web 7 seconds ago Up 5 seconds 0.0.0.0:3000->3000/tcp
・デバッグを行うときのコマンド
1.rubyのbinding.pryやbyebugなどといった処理を止めるデバッグツールの記載を行う
2.docker compose up でコンテナが起動している状態で、新しいターミナルを開き
下記コマンドを入力する。
# この<サービス名>箇所はdocker compose psコマンドを使用して表示されたwebのサービス名を記載する
docker attach <サービス名>
# 例
docker attach rails-practice-web-1
3.処理を止めたい画面を動かす→画面が止まる
4.docker attachを行ったコンテナ内で処理を止めた箇所を確認でき、デバッグを行うことができる
docker attachの状態から抜け出す方法は2通り
①:docker attachしたコンテナで「Ctrl + p + q」
(VSCode等はすでにCtrl + pを用いたショートカットが割り当てられている場合があるため、設定を変更する必要がある)
②:起動しているコンテナの停止(docker compose stop または docker compose down)
【Dockerコマンド + Railsコマンド】
Dockerのコンテナ内でRailsのコマンドを直接実行するとエラーになってしまうので、
以下DockerとRailsを使用した開発の中で頻出したコマンドをまとめておきました。
・Railsコンソールの起動
docker compose exec web rails console
・DBの作成
docker compose exec web rails db:create
・DBのマイグレーション
docker compose exec web rails db:migrate
・新しいRailsアプリケーションの作成
# databaseの箇所はpostgresqlとしているが、任意のDBを設定して良い
docker compose run web rails new . --force --database=postgresql
・ジェネレーターの実行
モデル・コントローラー・マイグレーションを作成するジェネレータコマンド
# 下記はPostという名前のモデルを作成し、その中にtitleという文字列型のカラムとbodyというテキスト型のカラムを追加するというコマンド内容
docker compose exec web rails generate model Post title:string body:text