注意!
初めまして、駆け出し大学生エンジニアです。
この記事が初めての投稿になります。各所で見ずらい点があるかと思いますが、温かい目でご覧ください。また、技術的に不足している点があればコメントで指摘していただくと幸いです。
0. 背景
現在、大学のサークル活動でRailsを使用したWebアプリを開発しています。割と本格的な開発をしたくDockerを使用したチーム開発に挑戦しました。チームはまだ2人ですが...w。
その際、環境構築にめちゃくちゃ手こずりました。ざっと3週間ほど...。そんな3週間の苦労をここに記録しようと思います。
1.事前準備
今回は、チーム開発を目的としているので異なるPCを2台以上準備していただけると記事の内容を活かせると思います。
2. DockerでRailsの環境構築
この記事でDockerの説明は割愛させていただきます。
DockerでRailsの環境を構築するのは下記のサイトを参考にしました。この記事で「12. サーバーの起動を確認」まで行ってください。
*「8. config/database.yml」でhost:db
の下の行にport: dbのポート番号
を記述すると良
い思います。私の場合はport: 3306
でした。この記述をすることで正常に動きました。DockerデスクトップのContainerからポートは確認できます。
2-1. 筆者の環境
PC① ← まずこのPCで環境構築しました
OS : macOS sonoma 14.4.1
CPU : M3
PC② ← 次にこのPCにPC①の環境を共有してチーム開発する準備をします。
OS : Windows11
CPU : 11th intel core i7
3. チーム開発の準備
ここまで、自分のローカル(PC①)にDockerでのRails環境が構築できたと思います。筆者はrailsapp
で記事と同じファイルにしました。
3-1. Githubにアップロード
Githubにリポジトリを作成します。今回はqiita_test
と言いうリポジトリにしました。
Githubにあるコマンドを実行してアプロードしてください。
*git init
やgit add
でうまくいかず下記のようなエラー出た場合は、rails7app
とrailsapp
に.git
という隠しファイルがあるために起こってい可能性が高いです。筆者はrailsapp
のgit add
ファイルを削除しました。そうすることでコマンドが実行できます。
base) rails7app % git add -A
error: 'railsapp/' does not have a commit checked out
fatal: adding files failed
3-2. PC②にgit clone
する
次に、PC②にgit clone
してチームでの開発環境を整えていきます。
3-3. PC②にもう一度DockerでRailsの環境を構築
初めは、git clone
したら下記のコマンドを実行するだけでPC①の環境を作れると思いましたができませんでした。
docker compose run --rm webapp rails db:create
docker compose up -d
実行後
docker compose run --rm webapp rails db:create
Could not find sprockets-rails-3.4.2, mysql2-0.5.6, puma-6.4.2, jsbundling-rails-1.3.0, turbo-rails-2.0.5, stimulus-rails-1.3.3, cssbundling-rails-1.4.0, jbuilder-2.11.5, bootsnap-1.18.3, debug-1.9.2, web-console-4.2.1, capybara-3.40.0, selenium-webdriver-4.19.0, sprockets-4.2.1, msgpack-1.7.2, bindex-0.8.1, addressable-2.8.6, regexp_parser-2.9.0, xpath-3.2.0, rexml-3.2.6, rubyzip-2.3.2, websocket-1.2.10, public_suffix-5.0.5 in locally installed gems
Run `bundle install` to install missing gems.
上記のようにCould not find
というエラーが出ます。
解決方法
まず、cloneしたrailsapp
のフォルダーを削除して、あたらいい空のrailsapp
フォルダー作成します。「7. railsプロジェクトを作る」のコマンド実行します。(*今回はいきなり削除していますが、おそらくブランチ切って作業する方がいいと思います。)
docker compose run --rm --no-deps webapp rails new . --force --css bootstrap --javascript esbuild --database mysql
実行した後に、8. config/database.ymlと9. Procfile.devを編集することを忘れないでください。
編集を終えたら、再度docker compose run --rm webapp rails db:create
とdocker compose up -d
を実行します。
bin/rails aborted!
ActiveSupport::MessageEncryptor::InvalidMessage: invalid base64 (ActiveSupport::MessageEncryptor::InvalidMessage)
/railsapp/config/environment.rb:5:in `<main>'
Tasks: TOP => db:create => db:load_config => environment
(See full trace by running task with --trace)
実行して上記のようなエラーが出た場合railsapp\config\master.key
とrailsapp\config\credentials.yml.enc
のファイルに問題あります。詳しくは下記の記事が参考になります。
2個目の記事はチームメンバーにキーを教えてもらうが参考になります。
簡単に言うと、PC②はPC①の環境をclone
しています。という事はその環境に合わせてPC①のrailsapp\config\master.key
のrailsapp\config\credentials.yml.enc
の値をPC②に与えないと接続できないという事です。
間違っていたらコメントで指摘してください
4. サーバの起動を確認
docker compose up -d
を実行してhttp://localhost:3000/にアクセスできたら完了です。
最後に
記事を書くために、新しく環境を作り直すと最後のエラーが起きませんでした。なぜなのか原因がわかりません。もし詳しい方いましたらコメントで指摘や補足よろしくお願いします。
最後まで、記事見てくださりありがとうございました。