Rails 8.0.0 のアプリケーションをDocker環境で起動する

この状態を目指します。
![Ruby_on_Rails_8_0_0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504414/9654b43c-c5ea-7a2d-1a12-4cef5100ad6a.png)


# 準備
VSCodeに `Dev Containers`拡張機能をインストールしておきます。
筆者のVSCodeは言語設定を日本語にしてあります。


:::note info
後日Cursorでも同じ手順で動作確認できました。
:::


# rails-new コマンドをインストール
Docker環境前提ですが、このコマンドを使えばPCにRubyやRailsをインストールしなくても、新しいRailsアプリケーションを作れます。
`rails-new blog --devcontainer` のように使います。
コマンドが使えるかどうかは`rails-new help`や`rails-new -V`で確認できます。

https://github.com/rails/rails-new

<details><summary>具体的な手順</summary>

```
https://github.com/rails/rails-new/releases
↓
Assets
↓
私はApple M3なので rails-new-aarch64-apple-darwin.tar.gz をダウンロード(場所は~/Downloads)
↓
解凍
↓
実行ファイルを/usr/local/bin/に移動
sudo mv ~/Downloads/rails-new /usr/local/bin/
↓
rails-new help
↓
エラー
“rails-new”が悪質なソフトウェアかどうかをAppleでは確認できないため、このソフトウェアは開けません。
↓
「システム設定」→「プライバシーとセキュリティ」でrails-newをなんとかして許可
↓
rails-new help
↓
helpが表示！(下記)


A CLI tool to generate a new Rails project

Usage: rails-new [OPTIONS] <ARGS>...
       rails-new [OPTIONS] [ARGS]... <COMMAND>

Commands:
  rails-help  Prints `rails new --help`
  help        Print this message or the help of the given subcommand(s)

Arguments:
  <ARGS>...  arguments passed to `rails new`

Options:
  -u, --ruby-version <RUBY_VERSION>    [default: 3.3.4]
  -r, --rails-version <RAILS_VERSION>  [default: 7.2.0]
  -h, --help                           Print help
  -V, --version                        Print version
```

</details>

# Railsアプリケーションの作成

```
rails-new -u 3.3.6 -r 8.0.0 blog --devcontainer --skip-test
cd blog
```

uとrオプションについて。 `rails-new help` の説明通り、バージョンを指定できます。
> Options:
  -u, --ruby-version <RUBY_VERSION>    [default: 3.3.4]
  -r, --rails-version <RAILS_VERSION>  [default: 7.2.0]

通常のrails new で使えるオプション`--skip-test`もつけておきます


<details><summary>オプション</summary>

  ```
  Argument	Description
--skip-git	Skip git init, .gitignore, and .gitattributes
--skip-docker	Skip Dockerfile, .dockerignore and bin/docker-entrypoint
--skip-keeps	Skip source control .keep files
--skip-action-mailer	Skip Action Mailer files
--skip-action-mailbox	Skip Action Mailbox gem
--skip-action-text	Skip Action Text gem
--skip-active-record	Skip Active Record files
--skip-active-job	Skip Active Job
--skip-active-storage	Skip Active Storage files
--skip-action-cable	Skip Action Cable files
--skip-asset-pipeline	Skip Asset Pipeline
--skip-javascript	Skip JavaScript files
--skip-hotwire	Skip Hotwire integration
--skip-jbuilder	Skip jbuilder gem
--skip-test	Skip test files
--skip-system-test	Skip system test files
--skip-bootsnap	Skip bootsnap gem
--skip-dev-gems	Skip adding development gems
--skip-rubocop	Skip RuboCop setup
```
</details>

# VSCodeで開く

開くと以下のように表示されるので、「コンテナーで再度開く」をクリックして、ビルドを待ちます。

> フォルダーに開発コンテナーの構成ファイルが含まれています。 コンテナーで開発するフォルダーをもう一度開きます

その後VSCodeのターミナルでバージョンを確認します。
```zsh
rails -v
Rails 8.0.0
```

デフォルトのDBはsqlite3です。
```
sqlite3 --version
3.40.1 2022-12-28 14:03:47 df5c253c0b3dd24916e4ec7cf77d3db5294cc9fd45ae7b9c5e82ad8197f3alt1
```


# ブラウザで確認する

アプリを起動してブラウザで確認してみます。
`bin/dev`コマンドは`rails -s`コマンドの代わりで、サーバーの起動だけでなくアセットのビルドも並列で行ってくれます。
```
bin/dev

=> Booting Puma
=> Rails 8.0.0 application starting in development 
=> Run `bin/rails server --help` for more startup options
Puma starting in single mode...
* Puma version: 6.4.3 (ruby 3.3.6-p108) ("The Eagle of Durango")
*  Min threads: 3
*  Max threads: 3
*  Environment: development
*          PID: 3710
* Listening on http://127.0.0.1:3000
* Listening on http://[::1]:3000
Use Ctrl-C to stop
```

`http://localhost:3000/`にアクセスします。
![Ruby_on_Rails_8_0_0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504414/2d10307f-0782-4d58-7289-781c3186a941.png)


# 通常のターミナルからコンテナに入るには？
`docker ps` などでコンテナ名を確認し、
```
docker exec -it blog-rails-app-1 /bin/bash
cd workspaces/blog/
rails console
```

:::note warn
2025/3/16追記
上記の方法で通常のターミナルからコンテナに入った際に、PATHの違いによりrailsコマンドやrubyコマンドが使えないケースに遭遇したので解決方法を記載します。

```
# railsコマンドが使えない
rails -v
bash: rails: command not found

# ~/.bashrcに rbenvのパスを追加
echo 'export PATH=$PATH:/home/vscode/.rbenv/shims:/usr/local/share/rbenv/bin' >> ~/.bashrc

# 変更を反映
source ~/.bashrc
```

以上の方法によりコンテナを作り直さない限りは何度コンテナに入ってもrailsコマンドが使えるようになるはずです。
:::



# 参考
https://guides.rubyonrails.org/getting_started_with_devcontainer.html