[CircleCI]Rails6+Docker+CircleCIで超シンプルな自動テストの仕組みを作った！！

#はじめに
こちらの記事ではCircleCIを使用して自動テストを行うまでの過程を記しています。
また、**他の記事などから自身が理解できないコードを集めて構築する！ということが嫌だった**ため、簡単で超シンプルなコードのみで構成しておりますので、不足等がありましたらご指摘ください

#対象者・前提

- CircleCIの記事や公式リファレンスを何度見ても理解できず、どうしたらいいかわからないけど、絶対に導入したいと思っている方

- できれば、超シンプルで自身理解できる範囲で構築していきたい方
- すでにDockerを導入したRails6で作成したアプリケーションをお持ちの方　
　　
[参考] 
筆者が書いたDocker導入時エラー格闘記録
https://qiita.com/tochisuke221/items/374359eb3cff1182ed6c

#実装手順

CircleCIを入れよう！と思い色々な記事を参考にしましたが、どうもうまくいかない、、、
そんなときに、[dockerを使ってCircleCIを動かす記事](https://qiita.com/walkers/items/352057493c7c8907b83f)に出会いました。

この記事を参考にすれば、docker環境で普段行っているテスト等をまんま同じようにやらせればできるんじゃね？と仮説を立てて、以下のように超シンプルにconfig.ymlを書いていきました。

**注意**
.circleディレクトリとconfig.ymlは各自手動で作ってください

```:terminal
% mkdir .circle
% cd .circle
% vim config.yml 
```



さて、config.ymlを見ていきましょう！

```.circleci/config.yml
version: 2
jobs:
  build:
    machine:
      image: circleci/classic:edge
    working_directory: ~/repo
    steps:
      - checkout
      - run:
          name: Install Docker Compose
          command: |
            curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` > ~/docker-compose
            chmod +x ~/docker-compose
            sudo mv ~/docker-compose /usr/local/bin/docker-compose
      - run:
          name: docker-compose up
          command: |
            set -x
            docker-compose up --build -d
      - run:
          name: docker-compose stop
          command: |
            set -x
            docker-compose stop
      - run:
          name: docker-compose run --rm web yarn install --cache-files
          command: |
            set -x
            docker-compose run --rm web yarn install --cache-files
      - run:
          name: docker-compose run --rm web rails webpacker:compile
          command: |
            set -x
            docker-compose run --rm web rails webpacker:compile
      - run:
          name: docker-compose up
          command: |
            set -x
            docker-compose up -d
      - run:
          name: docker-compose run web bundle exec rails db:create
          command: |
            set -x
            docker-compose run web bundle exec rails db:create
      - run:
          name: docker-compose run web bundle exec rails db:migrate
          command: |
            set -x
            docker-compose run web bundle exec rails db:migrate
      - run:
          name: docker-compose run web bundle exec rspec
          command: |
            set -x
            docker-compose run web bundle exec rspec
      - run:
          name: docker-compose down
          command: docker-compose down

```


ちょっとみづらいので、コマンドごとに何をしているのかざっくりとまとめてみました。


```:なにしているかの解説
   
         #まずはdocker composeをインストールし指定の場所にファイルを移動させます
            https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` > ~/docker-compose
            chmod +x ~/docker-compose
            sudo mv ~/docker-compose /usr/local/bin/docker-compose

         #次に、ビルド＆起動をします
            docker-compose up --build -d
     　　　　
　　　　　 #一旦ストップします。
            docker-compose stop
         #yarnをインストールします。（本来いらないかもしれませんが、なぜかエラーがでるので、、）
            docker-compose run --rm web yarn install --cache-files
         #webpackerをコンパイルします(こちらも不要かもしれません)
            docker-compose run --rm web rails webpacker:compile
    　　 #再起動します
            docker-compose up -d
        #ここからいつものや〜〜つ（DB作成＆マイグレーション）
           docker-compose run web bundle exec rails db:create
           docker-compose run web bundle exec rails db:migrate
       #テスト実行！！！
           docker-compose run web bundle exec rspec
　　　　#おわり
           docker-compose down
         
```

どうでしょうか、大まかな流れは理解していただけましたでしょうか？
Dockerを使えば、各自環境に振り回されずに実行が可能ですのでとっても便利です。

とりあえず、コピペでも行けるかと思いますので是非試してみてください！！

# おわりに

アプリそのものが便利になるわけではないですが、自分自身の効率がかなり上がったので捗ります。こうしたちょっとした工夫で仕事の効率が上がるのなら最高ですね。実務に入ってからも、ユーザ目線に加えて、開発者目線で「どうしたらもっと楽に効率に開発できるか」を考えていきたいです。
以上、お疲れ様でした！