初めに
初学者です。
webアプリを個人で開発するために、dockerを使用してruby on railsでの開発環境構築を実施した際の記録を共有します。
公開日時点での最新安定版を使用しています。
この記事で成功する前に一度挑戦し、上手くいかなかった時の記録はこちら。
https://qiita.com/tkhero555/items/87df4562c8745ef0b6ef
構築したい技術構成
カテゴリ | 技術 |
---|---|
フロントエンド | javascript/Hotwire/bootstrap |
バックエンド | ruby3.3.0/rails7.1.3.2 |
データベース | PostgreSQL16.2 |
認証 | devise |
環境構築 | Docker / docker-compose |
CI/CD | Github Actions |
インフラ | heroku |
docker関連のファイル作成 ~rails newまで
新しいディレクトリを作成し、docker関連のファイルを作成する。
Dockerfile
# 現在の最新の安定版
FROM ruby:3.3.0
# 必要なパッケージをインストール
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
# ディレクトリを作成する これはコンテナの中の話
RUN mkdir /myapp
# 作業ディレクトリを指定する
WORKDIR /myapp
# gemfileをコンテナに追加する
ADD Gemfile /myapp/Gemfile
# gemfile.lockをコンテナに追加する
ADD Gemfile.lock /myapp/Gemfile.lock
# gemfileに記述された依存関係をインストール
RUN bundle install
# そのほかのファイルをmyappに追加
ADD . /myapp
Gemfile
source 'https://rubygems.org'
gem 'rails'
version: '3'
services:
db:
image: postgres
environment:
- POSTGRES_PASSWORD=password
- POSTGRES_HOST_AUTH_METHOD=trust
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db
コンテナを起動してrails new
docker compose run web rails new . --force --database=postgresql
rails関連のファイルが自動生成され、Dockerfileの中身がrails7.1が自動生成するものに入れ替わっている。
この自動生成Dockerfileは本番環境を想定しており、今回は上手く使えないので、冒頭で作成したDockerfileの内容に戻す。
(本番環境用ファイルを使いたい場合は、Dockerfile.prodなどのファイル名で置いておくといいかもしれない)
Dockerfileの中身を戻したら、イメージをbuildする。
docker compose build
database.yamlの記述を書き換える。
default: &default
adapter: postgresql
encoding: unicode
host: db
username: postgres
password: password
pool: 5
development:
<<: *default
database: myapp_development
test:
<<: *default
database: myapp_test
production:
<<: *default
database: myapp_production
データベースを作成する。
docker compose run web rake db:create
[+] Creating 1/0
✔ Container docker_setting1-db-1 Running 0.0s
Created database 'myapp_development'
Created database 'myapp_test'
コンテナを起動してlocalhostにrailsアプリが表示されていることを確認する
docker compose up
gem installとgenerate controllerをしてみる
今回制作するアプリではLINEBOTを使用したいので、line-bot-api gemを導入して、controllerを作成する。
この動作までを無事に完了できるかで、環境構築が成功しているかを確認する。
Gemfileに追記
gem 'line-bot-api'
bundle install
docker compose run web bundle install
イメージを再度buildする。
docker compose build
コントローラーを生成する。
docker compose run web bundle exec rails g controller LineBot
[+] Creating 1/0
✔ Container docker_setting1-db-1 Running 0.0s
create app/controllers/line_bot_controller.rb
invoke erb
create app/views/line_bot
invoke test_unit
create test/controllers/line_bot_controller_test.rb
invoke helper
create app/helpers/line_bot_helper.rb
invoke test_unit
コントローラーも無事作成できたので、環境構築は成功!
参考記事・サイト