Rails6アプリケーションの開発をすぐに始められるように素のRails6アプリケーションを元に自分流にカスタマイズしたものになります
またソースコードに不必要なコメントを大量に書いているので使用する場合は適宜、削除することをオススメします
下記コマンドを実行します
# ソースコードをcloneする
$ git clone https://github.com/dodonki1223/template_sample_rails_6.git
# cloneしてきたtempalte_sample_rails_6ディレクトリに移動
$ cd template_sample_rails_6/
# tempalte_sample_rails_6を動かす
$ docker-compose up rails
こちらのURL:http://localhost:3000/ にアクセスすることで動作確認できます Dockerがインストールされていないと動かすことはできません
ソフトウェアスタック | バージョン |
---|---|
Rails | 6.0.2.1以上 |
Ruby | 2.6.6 |
PostgreSQL | 12 |
Node.js | 12.16.3 |
Yarn | 1.22.10 |
Bundler | 2.1.2 |
Redis | 5.0 |
基本的にDockerを使用して開発を行えるようになっているのでPCにDockerがインストールされていれば問題ないです
DB情報 | 値 |
---|---|
Host | 127.0.0.1 |
User | root |
Password | |
Port | 5432 |
DatabaseName | dev_sample_db |
自動テスト、静的コード解析、WebアプリケーションのデプロイはCircleCIで実装されていてデプロイ先にはHerokuを使用しているのでCircleCIとHerokuの設定も必要になります
またCircleCIの通知用(デプロイの実行、完了通知)としてSlackも使用しているので自分用のWorkspaceを作成することをオススメします
自分が使いやすいようにいくつか改修しました
コマンド1つで開発ができるようにDocker化しました
Docker内ではよく使う Redis、Sidekiqが既に導入済みです
データベースは PostgreSQL を使用します
デフォルトでは Minitest ですが RSpec のほうが使い慣れているので RSpec を導入しています
テストデータ作成ツールの factory_bot、コードカバレッジを計測するツールの SimpleCov も導入済みです
Rails ERD を導入しているのでマイグレーションを実行した時、自動でER図が作成されるようになっています
システムを開発するためには効率よくデバッグできることで開発スピードは格段に上がるためRails開発ではおなじみの binding.pry
を使用できる状態になっています
コードを一定の品質に保つために静的コード解析ツールを以下の4つが導入済みになっています
- Rubocop(Rubyの静的コードアナライザー及びコードフォーマッター)
- Rails Best Practices(Railsのベストプラクティスを教えてくれる)
- Brakeman(セキュリティの脆弱性チェック)
- hadolint(Dockerfileの静的コード解析)
CircleCIにて自動テスト、静的コード解析、自動デプロイ(Heroku)を行うように設定ずみ
- Railsガイドで紹介されている rails generate scaffold HighScore game:string score:integer を叩いた状態
開発環境にはRails以外にもRedisやSidekiq、Webpackerが導入されています
起動方法やコマンドの実行方法を解説します
$ docker-compose up rails
※PostgreSQL
、 Redis
も一緒に起動します
$ docker-compose up webpacker
$ docker-compose up sidekiq
Runnerはコマンドを実行するためのサービスになります
rakeコマンドやRSpecを実行するために使用します
$ docker-compose run --rm runner
以下の説明は docker-compose run runner
実行後の説明になります
起動後のRunnerはデフォルトだと RAILS_ENV=development
になっているためコマンドで明示的に RAILS_ENV=test
を指定して実行します
# bundle exec ありバージョン
$ RAILS_ENV=test bundle exec rspec --format progress
# bundle exec なしバージョン
$ RAILS_ENV=test rspec --format progress
# bundle exec ありバージョン
$ bundle exec rubocop --require rubocop-rspec -D -P
# bundle exec なしバージョン
$ rubocop --require rubocop-rspec -D -P
# bundle exec ありバージョン
$ bundle exec rails_best_practices .
# bundle exec なしバージョン
$ rails_best_practices .
# bundle exec ありバージョン
$ bundle exec brakeman
# bundle exec なしバージョン
$ brakeman
# bin/ ありバージョン
$ bin/rake about
# bin/ なしバージョン
$ rake about
# bin/ ありバージョン
$ bin/rails g --help
# bin/ なしバージョン
$ rails g --help
# bin/ ありバージョン
$ bin/rails dbconsole
# bin/ なしバージョン
$ rails dbconsole
開発時のTipsを紹介します
やってもやらなくても良いです
pre-pushを使用してmaster、developmentブランチにpushする前に静的コード解析を実行してCIで落ちないようにします
CIの静的コード解析で落ちて修正するのは時間がかかるのでpush前に検知できた方が良いと思います
ローカルのgitを使用しているのでDockerで開発しているのにローカルの環境も整える必要があり2重管理になってしまうところが悩みどころです……
pre-pushファイルを動作させるためにテンプレートファイルをコピーする
$ cp .github/hooks/pre-push .git/hooks/pre-push
pre-pushのファイルに実行権限ないとhookされないので実行権限を与えてやる
$ chmod 755 .git/hooks/pre-push
CI(継続的インテグレーション)/CD(継続的デリバリー)環境を実現するために Heroku、CircleCI、Slackの環境構築が必要です
下記ドキュメントを参照してください
細かい内容について解説しています
詳しくは下記を参照してください