LoginSignup
5
2

More than 5 years have passed since last update.

rails、君に決めた!!~15

Last updated at Posted at 2018-03-28

一連の記事の目次
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はなくていいか。。とばそう。
どなたか修正方法分かる方教えてください🙇

とりあえず初期環境設定は以上で終わり

5
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2