0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DevContainer+Railsで爆速ローカル環境構築

Posted at

はじめに

本稿では使用している技術の説明は行いません。
各自で調べてください。

対象者

Docker、linux、devcontainerの基礎知識がある方
急ぎでRailsをWebアプリケーションとしてサクッと構築したい方
最小設定内容を知りたい方

ファイル作成

以下の構成となるようにファイルを作成してください。

project root
└── .devcontainer
    ├── infra
    │   ├── ruby
    │   │   └── Dockerfile
    │   └── mysql
    │       └── 1_ddl.sql
    ├── .env
    ├── docker-compose.yml
    ├── devcontainer.json
    └── Taskfile.yml

ファイル作成

container/ruby/Dockerfile

FROM ruby:3.4-bookworm

ENV TZ=Asia/Tokyo

ENV APP_ROOT /myapp
WORKDIR $APP_ROOT

# 必要なパッケージのインストール
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client yarn

# Task Runner のインストール
RUN curl -sL "https://github.com/go-task/task/releases/download/v3.9.0/task_linux_amd64.deb" -o task.deb && dpkg -i task.deb && rm task.deb

# ブランチ名がbashで表示されるようにカスタマイズ
COPY ../.bashrc /root/.bashrc

# keychainでgitのSSHキーを扱えるようにする。
RUN apt-get update && apt-get install -y keychain

# アプリ全体をコピー
COPY . .

# ポートを指定
EXPOSE 3000

# 以下3つはrailsをインストールしたらコメントアウトを解除してください。
# 必要ファイルをコピー
# COPY ../Gemfile ../Gemfile.lock ./
# Gemインストール
# RUN bundle install
# デフォルトコマンド
# CMD ["bash", "-c", "rm -f tmp/pids/server.pid && bundle exec rails server -b 0.0.0.0 -p ${APP_PORT}"]

.env

# 環境情報
# 語群はci dev stg prod
APP=dev

# アプリケーション設定
APP_NAME="Rails base"
APP_PORT=8086

# DB周り
MYSQL_USER=user
MYSQL_PASSWORD=password
DB_PORT=3308
MYSQL_DATABASE=development

docker-compose.yml

version: "3"
services:
  app:
    build:
      context: ../
      dockerfile: .devcontainer/infra/ruby/Dockerfile
    env_file:
      - .env
    tty: true
    ports:
      - ${APP_PORT}:${APP_PORT}
    volumes:
      - ../:/myapp
      - ~/.gitconfig:/myapp/.gitconfig

  mysql:
    image: mysql:8.0
    ports:
      - ${DB_PORT}:3306
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    volumes:
      - ../.devcontainer/infra/mysql/:/docker-entrypoint-initdb.d/
      - db-data:/var/lib/mysql
    environment:
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
      MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD}

volumes:
  db-data:
    driver: local

devcontainer.json

{
    "name": "Rails Base DevContainer",
    "dockerComposeFile": "docker-compose.yml",
    "service": "app",
    "workspaceFolder": "/myapp",
    "postCreateCommand": "task setup",
    "customizations": {
        "vscode": {
            "extensions": [
                "editorconfig.editorconfig", // エディタを跨いだ共通設定ファイルをVsCodeで実行するのに必要
                "ms-azuretools.vscode-docker", // VsCodeでのIntelliSenseやタブ補完用
                "saoudrizwan.claude-dev" // AIコーディングサポート
            ]
        }
    }
}

1_ddl.sql

CREATE SCHEMA IF NOT EXISTS `development` DEFAULT CHARACTER SET utf8mb4 ;
CREATE SCHEMA IF NOT EXISTS `test` DEFAULT CHARACTER SET utf8mb4 ;

-- 'user'@'%' が未作成の場合、ユーザーを作成
CREATE USER IF NOT EXISTS 'user'@'%' IDENTIFIED BY 'password';
-- 'user'@'%' に対して `test` データベースの全権限を付与
GRANT ALL PRIVILEGES ON `test`.* TO 'user'@'%';
FLUSH PRIVILEGES;

-- セッションの文字セットをutf8mb4に設定
SET NAMES 'utf8mb4';

Taskfile.yml

# https://taskfile.dev

version: '3'

env:
  MIGRATION_ROOT: "tools/migrations"
  SEED_ROOT: "tools/seeder"

tasks:
  setup:
    desc: "ローカル環境のセットアップを行う。(gitコマンドが使用できるようにする)"
    cmds:
      - cp {{.APP_ROOT}}/.gitconfig /root/.gitconfig
      - git config --global core.autocrlf input
      - git config --global --add safe.directory {{.APP_ROOT}}
      # わざわざコピーする理由は、commit時に毎回メアドとユーザー名の設定(.gitconfigの作成)を求められ面倒なので、git cloneするなら作成済みであろう.gitconfigを使うという魂胆である。
      # だが、Windowsユーザーが.gitconfigを使用中と解釈されるようでgit configコマンドが失敗するため、ファイルをコピーする必要がある。
      # core.autocrlf inputを使用する理由は、Linuxの改行コードが原因で差分が表示されてしまうため。
      # safe.directory $APP_ROOTを使用する理由は、WSL2側に配置しgitを使うには毎回求められるため。

環境構築手順

1.Dockerをインストール
2.VsCodeをインストール
3.ソースをクローン
4.VsCodeの拡張機能にDevContainersをインストール
5.Ctrl Shift Pでコマンドパレットを開く
6.DevContainer:Reopen in Containerを押下
7.Railsをインストール

gem update --system
gem install rails -v "~> 8.0.0"

8.Railsプロジェクトを作成

rails new . --force --database=mysql

9.Dockerfileを修正する
以下の記載があるコマンドを解除
.devcontainer/infra/ruby/Dockerfile

# 以下3つはrailsをインストールしたらコメントアウトを解除してください。

完成ソースコード

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?