エンジニアとして自社開発企業に入社して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のカバレッジを計測することができるため、「感覚でテストを書く」から卒業できます。テストファーストで実装するという意識を持つために最初に入れておくと良いかと思います。
最後に
「こういうのも入れると便利だよ!」というものがありましたら、教えてください😀。以上です。