一連の記事の目次
rails、君に決めた!!~目次
運用編
初期設定
mkdir RailsSampleApp
cd RailsSampleApp
bundle init
(Gemfileのrailsのコメントアウトを外してから)
bundle install --path vendor/bundle --jobs=4
bundle exec rails _5.1.3_ new ./ -B -d mysql --skip-turbolinks --skip-test
# coffee-scriptは使用しないのでコメントアウト
# gem 'coffee-rails', '~> 4.2'
group :development do
# 追加
gem 'better_errors'
gem 'binding_of_caller'
gem 'pry-byebug'
gem 'pry-rails'
end
bundle install
gitのセットアップ
git init
# リモートでリポジトリを作ってから
git remote add origin git@github.com:xxxx/RailsSampleApp.git
ここまででサーバーが起動するか確認
bin/rails s
http://localhost:3000
にアクセス
git add .
git commit -m '[add] initial commit'
git branch develop
git checkout develop
masterは本番環境用なので、開発用にdevelopブランチを作成
.gitignore
.idea
.DS_Store
git add .gitignore
git commit -m '[add] .gitignoreにリストを追加'
テスト実行環境のセットアップ
Gemfile
group :test do
gem 'rspec-rails'
gem 'factory_girl_rails'
gem 'database_cleaner'
end
bundle install
bin/rails g rspec:install
データベースのセットアップ
bin/rails db:setup
bundle exec rspec
git add .
git commit -m '[add] テスト実行環境の構築'
README.md
# RailsSampleApp
## 動作環境
- ruby: 2.4.1
- Rails: 5.1.3
git add README.md
git commit -m "READMEに概要記載"
Encrypted secretsのセットアップ
機密情報を管理するための機能で、secrets.ymlにそのまま保持したくないパスワードなどを暗号化して保存できる
逆にそのまま保持していいパスワードってあるの??
bin/rails secrets:setup
secrets.yml.enc:認証情報が暗号化されたファイル
secrets.yml.key:復号するための鍵
の2ファイルが生成される
encryption: 暗号化
次に各環境でEncrypted secretsを利用できるようにconfig/application.rbに以下を追記
module RailsSampleApp
class Application < Rails::Application
# 追加
config.read_encrypted_secrets = true
end
end
これでdevelopment環境でもEncrypted secrets機能が使えるようになった。
secrets.ymlの編集はこんな感じ
EDITOR=vim bin/rails secrets:edit
# 試しにhoge変数にhelloを入れてみる
shared:
hoge: hello
bin/rails c
Loading development environment (Rails 5.1.5)
[1] pry(main)> Rails.application.secrets
=> {:secret_key_base=>
"xxxx",
:hoge=>"hello",
:secret_token=>nil}
secrets.ymlを元に戻してからコミットしてね
git add .
git commit -m "[add] Encrypted secretsのセットアップ"
.ruby-versionのセットアップ
# .ruby-versionファイルが生成される
rbenv local 2.4.1
git add .ruby-version
git commit -m "[add] .ruby-version追加"
他の開発者がrbenv local
を実行したら、.ruby-versionに記載されたバージョンのrubyがインストールされる
.editorconfigのセットアップ
エディタが違うとインデントや改行コードが統一されてないかもしれないので、統一したい
.editorconfig
root = true
[*]
indent_style = space
indent_size = 2
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
end_of_line = lf
git add .
git commit -m "[add] .editorconfigの追加"
ApplicationControllerの設定
Rails4
呼び出し順序に関わらず、protect_from_forgery
が最初に呼ばれる
Rails5
コードの記述順で呼び出し順序が変わる
Rails4のように常に最初にverification処理を行いたいので、prepend: true
を追記
app/controller/application_controller.rb
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception, prepend: true
end
generatorコマンドの軽量化
generatorコマンドをカスタマイズして、routing,assets,helperは自動で生成しないように変更する。
config/application.rb
module RailsSampleApp
class Application < Rails::Application
config.generators do |g|
g.skip_routes true
g.stylesheets false
g.javascripts false
g.helper false
end
end
end
git add .
git commit -m "アプリケーションの基本設定"
gemのセットアップ
不要なgemの除去
Gemfile
source 'https://rubygems.org'
git_source(:github) do |repo_name|
repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
"https://github.com/#{repo_name}.git"
end
# base
gem 'rails', '~> 5.1.5'
gem 'therubyracer', platforms: :ruby, github: 'cowboyd/therubyracer'
# database
gem 'mysql2', '>= 0.3.18', '< 0.5'
# server
gem 'puma', '~> 3.7'
# view
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'turbolinks', '~> 5'
group :development, :test do
gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
end
group :development do
gem 'web-console', '>= 3.3.0'
gem 'listen', '>= 3.0.5', '< 3.2'
gem 'spring'
gem 'spring-watcher-listen', '~> 2.0.0'
# 追加
gem 'better_errors'
gem 'binding_of_caller'
gem 'pry-byebug'
gem 'pry-rails'
end
group :test do
gem 'rspec-rails'
gem 'factory_girl_rails'
gem 'database_cleaner'
end
rubocop
コーディング規約に従っていないコードを検出する静的解析ツール。pep8みたいなものか
group :development do
gem 'rubocop'
end
.rubocop.ymlに自分ルールを記述することができる。今回は以下のようにする
inherit_from: .rubocop_todo.yml
AllCops:
Exclude:
- db/**/*
# classやmoduleの先頭コメント
Documentation:
Enabled: false
# 日本語でのコメント
Style/AsciiComments:
Enabled: false
# 行長
Metrics/LineLength:
Max: 120
# ブロック内の行数
Metrics/BlockLength:
Exclude:
- spec/**/*
- config/**/*
Bootstrap
Gemfile
# view
gem 'bootstrap', '~> 4.0.0.beta2.1'
gem 'jquery-rails'
gem 'popper_js', '~> 1.12.3'
gem 'tether-rails'
Annotate
モデルファイルにテーブルのストラクチャ情報に関するコメントを追記
group :development do
gem 'annotate'
end
bundle install
git add .
git commit -m 'Gemfileのセットアップ'
GitHooksの設定
コミット前に自動チェックしてくれる。
Gemfile
group :development do
gem 'overcommit'
end
bundle install
bundle exec overcommit --install
.overcommit.ymlが作成されるのでRuboCopの設定を追加する
gemfile: Gemfile
PreCommit:
RuboCop:
enabled: true
AuthorName:
enabled: false
注意:
gemfile: Gemfile
は本には書いてない。これを書かないとエラーがでる。
gitのユーザー名制約を行うAuthorNameを無効化している
masterブランチにプッシュできる人を制限したりできるっぽい。今回は無制限に設定している
設定を変更したので
bundle exec overcommit -s
で設定の変更を許可する
git add .
git commit -m "Git Hooks /Rubocopの設定"
---解決済み---
gemfile: Gemfile
を書かないときに発生するエラー
お、エラーでた
This repository contains hooks installed by Overcommit, but the `overcommit` gem is not installed.
Install it with `gem install overcommit`.
パスが通ってない、、?
$ cat .bash_profile
eval "$(rbenv init -)"
export PATH="$HOME/.rbenv/bin:$PATH"
いや、通ってるな〜
bundle exec overcommit --run
は実行できる。。
最終手段
git reset --hard コミットid
.gitファイル内のhookディレクトリも消去
Git Hookはなくていいか。。とばそう。
どなたか修正方法分かる方教えてください🙇
とりあえず初期環境設定は以上で終わり