【はじめからていねいに】CircleCI2.0とGitHubを連携させる


#はじめに
個人で開発しているアプリに流行りの自動テストを導入してみようと思いました。
自動化テストのツールは色々あるのですが今回はgithubとCircleCI2.0を連携させる方法を採用します。


#自動化テストの必要性
プロジェクトの品質を保証するためにテスト工程は開発プロセスで非常に重要です。
ですが、実際の開発現場ではテスト工程は後回しにされ、納期に間に合うために動作保証のみを要求されがちです。

僕自身、とにかく動くモノを出せ！！って何度も言われてきました。

また、開発エンジニアの中にテスト工程は「めんどくさい・面白くない・ロースキルが担当する」という意識があり避けられているのかな？と勝手に想像しています。

しかし、自動化テストは開発者の工数を減らすだけでなくヒューマンエラーもカバーしてくれるので結果的には大きく工数削減に貢献するはずです。

ですので、自動化テストは工数削減と品質保証の観点からも開発の初期段階から絶対に導入すべきです。

#githubとCircleCIを連携させる
[GitHubと継続的インテグレーション](https://circleci.com/ja/integrations/github/)にアクセスしてください。

![スクリーンショット 2020-05-07 10.42.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321039/5346d0d1-ec69-06ad-e6a2-2ac5fdc845e6.png)

GItHubアカウントで登録ボタンをクリックし登録画面に進みます。

アカウント認証画面に移るので、自身のアカウントIDとパスワードを入力するとトップページが表示されます！

![スクリーンショット 2020-05-07 10.53.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321039/59e00610-8d52-9802-78c0-4b16699454cb.png)

CircleCIを導入したいプロジェクト名の右に表示されている「Set Up Project」ボタンをクリックします。

![スクリーンショット 2020-05-07 11.02.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321039/01e8261f-fea6-7d03-131a-ce0e7c73124f.png)

開発言語を選択し「add Config」をクリックします。
今回はLaravelでの開発のためPHPを選択します。

これでGitHubへプッシュしているプロジェクトとCircleCIを連携することができます!

![スクリーンショット 2020-05-07 11.00.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321039/8f5b9ce2-cf72-c3a5-5299-2121f67cc029.png)


連携はここで終わりです、非常に簡単にできたと思います。
連携後はプロジェクトのブランチに「circleci-project-setup」が追加されています。


```php:config.yml
# PHP CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-php/ for more details
#
version: 2
jobs:
  build:
    docker:
      # Specify the version you desire here
      - image: circleci/php:7.1-node-browsers

      # Specify service dependencies here if necessary
      # CircleCI maintains a library of pre-built images
      # documented at https://circleci.com/docs/2.0/circleci-images/
      # Using the RAM variation mitigates I/O contention
      # for database intensive operations.
      # - image: circleci/mysql:5.7-ram
      #
      # - image: redis:2.8.19

    steps:
      - checkout

      - run: sudo apt update # PHP CircleCI 2.0 Configuration File# PHP CircleCI 2.0 Configuration File sudo apt install zlib1g-dev libsqlite3-dev
      - run: sudo docker-php-ext-install zip

      # Download and cache dependencies
      - restore_cache:
          keys:
            # "composer.lock" can be used if it is committed to the repo
            - v1-dependencies-{{ checksum "composer.json" }}
            # fallback to using the latest cache if no exact match is found
            - v1-dependencies-

      - run: composer install -n --prefer-dist

      - save_cache:
          key: v1-dependencies-{{ checksum "composer.json" }}
          paths:
            - ./vendor
      - restore_cache:
          keys:
            - node-v1-{{ checksum "package.json" }}
            - node-v1-
      - run: yarn install
      - save_cache:
          key: node-v1-{{ checksum "package.json" }}
          paths:
            - node_modules

      # prepare the database
      - run: touch storage/testing.sqlite
      - run: php artisan migrate --env=testing --database=sqlite_testing --force

      # run tests with phpunit or codecept
      #- run: ./vendor/bin/phpunit
      - run: ./vendor/bin/codecept build
      - run: ./vendor/bin/codecept run
```


この後はconfig.ymlファイルをプロジェクトに合わせて編集していきプッシュすればCirclCIが自動テストをしてくれます！

#参考文献
・CI/CDとは何か？ なぜ今、必要とされるのか？
https://codezine.jp/article/detail/11083