LoginSignup
5
8

More than 3 years have passed since last update.

Rails新規プロジェクトを実装する時のセットアップまとめ

Last updated at Posted at 2019-11-09

エンジニアとして自社開発企業に入社して2ヶ月目で新規のプロダクト開発を任せてもらえることとなりました。その時に先輩に教えてもらいながら、セットアップしたことなどをまとめてみます。

対象

この記事はエンジニアになるために現在ポートフォリオ作成中の方などの参考になるかと思います。以下で書いている内容のセットアップを行えば、「ある程度綺麗なコード」を書けるからです。

コードをきれいに保つ

.editorconfigの設定

EditorConfigは複数の開発者が関与する時に、コーディングスタイルの一貫性維持に役立ちます。僕はVS Codeを使っているので、プラグインをインストールすることで対応しました。

設定例

root = true

[*]
indent_style = space
indent_size = 2
charset = utf-8
trim_trailing_whitespace = true
end_of_line = lf

RuboCopでコードを解析する

RuboCopは長すぎるコードやインデントなどを解析し自動修正までやってくれる優れものです。僕含め経験が浅い人がコードを書くと、不要な改行やスペースが多分に含まれてしまうので、必須のgemです。

使用方法

gem 'rubocop', require: false
# 自動解析実行
$ rubocop

# 自動で修正まで実行
$ rubocop --auto-correct

overcommitでコミットタイミングでRuboCopを走らせる

overcommitというgemを入れておくとgit commitを実行するタイミングで上記で設定したRuboCop等を走らせることができます。

設定方法

# gemをinstall
$ gem install overcommit

# アプリケーションにovercommitをinstall
$ overcommit --install

詳しくは公式documentや以下の記事を参考にしてください。

CircleCIで自動テスト

テスト自動化を行っておくと安心してプロダクト開発を行うことができます。以下はRSpecを走らせる設定例です。System SpecでChromeDriverを使用する場合は、-browsersがついたイメージを利用する必要があります。

version: 2
jobs:
  build:
    working_directory: ~/circleci-demo-ruby-rails
    docker:
      - image: circleci/ruby:2.6.3-node-browsers
        environment:
          RAILS_ENV: test
          PGHOST: 127.0.0.1
          PGUSER: root
      - image: circleci/postgres:9.6.2-alpine
        environment:
          POSTGRES_USER: root
          POSTGRES_DB: yourapp_test

    steps:
      - checkout
      - restore_cache:
          keys:
            - rails-demo-{{ checksum "Gemfile.lock" }}
            - rails-demo-
      - run: gem update --system
      - run: gem install bundler
      - run:
          name: Install dependencies
          command: bundle check --path=vendor/bundle || bundle install --path=vendor/bundle --jobs 4 --retry 3

      - run: sudo apt install -y postgresql-client || true
      - save_cache:
          key: rails-demo-{{ checksum "Gemfile.lock" }}
          paths:
            - vendor/bundle
      - restore_cache:
          keys:
            - rails-demo-yarn-{{ checksum "yarn.lock" }}
            - rails-demo-yarn-
      - run:
          name: Yarn をインストール
          command: yarn install --cache-folder ~/.cache/yarn
      - run:
          name: Database Setup
          command: |
            bundle exec rake db:migrate
            bundle exec rake db:schema:load
      - run:
          name: Parallel RSpec
          command: bundle exec rspec
      - store_test_results:
          path: /tmp/test-results

RSpec実行結果を良い感じに出力

# .rspec
--color
--require rails_helper
--require spec_helper
--format documentation

Dependabotに依存パッケージの更新PRを投げてもらう

Dependabotは依存関係を安全で最新の状態に保つためのPRを勝手にボンボン投げてくれるサービスです。Github連携でサインインしてリポジトリを選択するだけと導入も簡単なところも魅力的です。

工数管理

僕が担当しているプロジェクトでは現在は「Zenhub」で工数管理をしています。ガントチャートを使った工数管理ツールとしてはBacklogなどもあるかと思いますが、ZenhubではGithubとの連携をシームレスに行うことができ、非常に便利です。

Github関連

ブランチを自動削除

マージしたタイミングでブランチを削除する設定を行いました。

issueテンプレートを作成

GithubでissueをやPRを出すときにデフォルトで出力する内容を設定


# .github/ISSUE_TEMPLATE/PULL_REQUEST_TEMPLATE.md

close #issue_num

ここにテンプレートの内容を書く

上記のように「close」と書いてPRを提出するときにissue番号を追記すると、PRをマージしたタイミングで自動でissueがcloseされるので便利。

参考: https://help.github.com/ja/github/building-a-strong-community/about-issue-and-pull-request-templates

gem関連

annotateでスキーマ情報を書き出す

annotateを利用するとスキーマ情報をモデルファイルやfactoryファイルに書き出してくれるので、カラム名を毎回schemaから探すコストがなくなります

better_errorsでエラーを良い感じに出す

デバッグがしやすいようbettor_errorsを導入。ついでにpryも入れておく。

bulletでN+1問題を検知

bulletを入れておくとN+1問題を検知して、解消方法も含めてアラートを出してくれます。

brakemanでセキュリティエラーを検知する

brakemanを入れておくと、セキュリティエラーを検知してhtmlにアウトプットしてくれます。

simplecovでカバレッジを計測できるようにしておく

simplecovを入れておくとRSpecのカバレッジを計測することができるため、「感覚でテストを書く」から卒業できます。テストファーストで実装するという意識を持つために最初に入れておくと良いかと思います。

最後に

「こういうのも入れると便利だよ!」というものがありましたら、教えてください😀。以上です。

5
8
0

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
8