はじめに
- エンジニア歴半年 + αの備忘録
- 多分また使うからメモ
- 環境はMac Appleシリコン
- 今回はチームでの開発なので、各PCの環境に依存せずに開発できるように構築する〜
やりたいこと
- Rails APIモード + Dockerでの環境構築
早速やっていく
今回作るディレクトリ構造
app-name
├── // ここにRailsの各ディレクトリが生成されます(appなど)
├── Dockerfile
├── docker-compose.yml
├── Gemfile
└── Gemfile.lock
これだけ〜〜〜超楽だわ
Gemfileを編集
source "https://rubygems.org"
gem "rails"
railsのバージョンは今回は指定しない。Gemfile.lockで固定していきます。
Gemfile.lockを編集
Gemfile.lockは空でおけ
Dockerfileを編集
FROM ruby:3.2
WORKDIR /app
COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
RUN bundle install
CMD ["rails", "server", "-b", "0.0.0.0"]
rubyのバージョンはお好みで
docker-compose.yml
version: '3'
services:
  db:
    image: mysql:8.0.33
    volumes:
      - data-volume:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: password
    ports:
      - 3306:3306
  back:
    build: .
    volumes:
      - .:/app
    ports:
      - 3000:3000
    depends_on:
      - db
volumes:
  data-volume:
データベースはmysqlを使用、back側のポートは3000にしてみました。
Dockerで環境をビルドする
ターミナル開いてディレクトリに移動、環境をビルドします。
注:Docker desktopを使っている方は起動しとかないとコマンド使えません(当たり前)
> docker-compose build
Rails newする
ここでデータベースとapiモードを指定します。
今回はバックエンドとフロントエンドを分離して開発を行うのでフロント部分は要らないって感じですね
> docker-compose run --rm back rails new . --force --database=mysql --api
Rails newはしっかりできましたか?
ここでしっかりRails newが行われない場合は、マウントされているボリュームのディレクトリが違うなどの可能性があります。Dockerfileとdocker-compose.ymlを見直してみましょう
database.ymlを編集
config/database.ymlを編集します。
パスワードとホストを設定したものに変更するだけ
default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: password
  host: db
development:
  <<: *default
  database: app_development
test:
  <<: *default
  database: app_test
production:
  <<: *default
  database: app_production
  username: app
  password: <%= ENV["APP_DATABASE_PASSWORD"] %>
ビルドし直す
bundle installを実行するために一度リビルドして、立ち上げ直しましょう
> docker-compose build
> docker-compose up -d
DBを作る
最後にDBを作ります
> docker-compose run back rails db:create
ここまできたら
にアクセスしてみましょう!!
Railsのアイコンが表示されたら完了です!お疲れ様でした。
備忘録
Rails newすると.gitファイルが作られ、非常にだるい便利です。
クローンしてきて、そこに環境を作る人が大多数だと思いますので、消すのが無難です。
ディレクトリに移動して手動で消すか、
> rm -rf .git
これで消えます。
参考