第1章：Rails API + Docker + PostgreSQL の環境構築

Ruby on Railsを用いたバックエンドAPI開発の学習記録です。  
普段はJavaを使ってきましたが、今回初めてRailsに触れることになりました。  
まだ勉強中の身ですが、本番環境に近い構成を目指して、DockerやPostgreSQLなどと組み合わせながら一から構築していきます。  
拙い点もあるかと思いますが、温かく見守っていただければ幸いです。

# 本シリーズの目標
1.Rails（APIモード）での開発環境構築（Docker + PostgreSQL）

2.Devise & Token認証の導入

3.Concernによるロジック分離

4.RSpec + FactoryBotでのテスト環境

5.RESTfulなAPI構成の実践


### :point_up: 開発環境

| 項目         | 内容                        |
|--------------|-----------------------------|
| OS           | Windows + WSL2 (Ubuntu)     |
| 開発言語     | Ruby 3.2.2                  |
| フレームワーク | Ruby on Rails 7.x（API モード） |
| DB           | PostgreSQL                  |
| コンテナ     | Docker / docker-compose     |
| エディタ     | VSCode                      |
##  Step 0: VSCode × Ubuntu（WSL2）を立ち上げる

1. **Windowsで VSCode を起動**
2. 左下SERACH → `Ubuntu` を選択  
　（またはコマンドパレットから `WSL: New Window` を選んで Ubuntu）
3. Ubuntuターミナルが開いたら、開発用ディレクトリを作成・移動：

```bash
mkdir ~/rails_projects
cd ~/rails_projects
```

4. `code .` を実行し、VSCodeでこのフォルダを開く：

```bash
code .
```
##  Step 1: Rails新規APIプロジェクトの作成

```bash
rails new blog_api --api -T -d postgresql
cd blog_api
```

- `--api`: API専用モードで生成（ビューやアセット不要）
- `-T`: Minitestをスキップ（RSpecを後で使う）
- `-d postgresql`: PostgreSQLを使用

---
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4113143/e468aad7-40e9-48b4-bdc4-b8f69e502e4e.png)
もしこのエラーが出たら
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4113143/4a8d62ab-3887-41b0-a02c-bb726aa4d2ac.png)

これは PostgreSQL の C ライブラリが不足している場合に発生します。

---

##  解決手順（Ubuntu / WSL2の場合）

以下のコマンドを実行して、必要な開発パッケージをインストールします：

```bash
sudo apt update
sudo apt install -y libpq-dev build-essential
```
## Bundlerの再構成と再インストール
プロジェクトディレクトリ内で以下のコマンドを実行：
```bash
bundle config set --local path 'vendor/bundle'
bundle install
```
##  Step 2: Dockerファイル群の準備
このステップでは、RailsアプリをDockerで起動するために必要なファイルを手動で作成していきます。
現在のディレクトリは以下になっているはずです：
```bash
cd ~/rails_projects/blog_api
```
###  2-1. Dockerfile の作成
1.VSCodeの左ペインで「新しいファイル」をクリック

2.ファイル名に Dockerfile（拡張子なし）と入力して作成

以下を貼り付けます：
```dockerfile
FROM ruby:3.2.2

RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs

WORKDIR /app

COPY Gemfile Gemfile.lock ./
RUN bundle install

COPY . .

COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]

CMD ["rails", "server", "-b", "0.0.0.0"]
```
Dockerfile
コピーする
編集する
### 2-2. docker-compose.yml の作成
1.同じディレクトリに docker-compose.yml を新規作成

2.以下を貼り付け
```yml
version: '3.9'
services:
  db:
    image: postgres:15
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
    volumes:
      - db-data:/var/lib/postgresql/data
    ports:
      - "5432:5432"

  web:
    build: .
    command: rails s -b 0.0.0.0
    volumes:
      - .:/app
    ports:
      - "3000:3000"
    environment:
      DATABASE_URL: postgres://postgres:password@db:5432/postgres
    depends_on:
      - db

volumes:
  db-data:

```
### 2-3. entrypoint.sh（起動スクリプト）の作成
1.同じディレクトリに entrypoint.sh を作成
2.内容：
```bash
#!/bin/bash
set -e
bundle exec rails db:prepare
exec "$@"

```
作成後、実行権限を付与します：
```bash
chmod +x entrypoint.sh
```
 なぜ必要？
Dockerで起動する際に、自動でrails db:createやrails db:migrateなどを実行できるようにするためのスクリプトです。
### 2-4. config/database.yml を編集
既存ファイル config/database.yml を以下のように書き換えます：
```yaml
default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  username: postgres
  password: password
  pool: 5

development:
  <<: *default
  database: blog_api_development

test:
  <<: *default
  database: blog_api_test
```
## Step 3: Docker起動とRails確認
以下のコマンドで Docker 環境を構築・起動します：
```bash
docker-compose build
docker-compose up
```
🔸 初回だけ以下を実行してDB作成：
```bash
docker-compose run web rails db:create
```
## Step 4: 動作確認
```ardunio
http://localhost:3000
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4113143/b5018ed9-6e80-42fe-b469-e8712a2d3025.png)