JavaScript
Node.js
CircleCI

CircleCI 2.0 で Node.js のテストを試す

More than 1 year has passed since last update.

はじめに

CircleCI 2.0 のベータ版が使えるようになったので、試しに Node のテストを実行してみました。

従来に比べ柔軟な設定ができるようになっており、非常に好感触でした。

参考

CircleCI 2.0 で何が変わったか

ざっくりいうと、任意の Docker イメージを指定し、任意のビルドステップを実行できるようになりました。

同じく Docker ベースの CI である Wercker を使ったことがある方は、それと同じようなものを想像していただければ大丈夫です。

設定ファイルの比較

CircleCI 2.0 では、従来の設定ファイル circle.yml とは、全く異なる形式で .circleci/config.yml に設定ファイルを置きます。

CircleCI 1.0

CircleCI 1.0 では、Node のテストを回す時に以下のような設定ファイルを記述していました。

machine:
  node:
    version: 6.10.0
  environment:
    PATH: "${PATH}:${HOME}/${CIRCLE_PROJECT_REPONAME}/node_modules/.bin"

dependencies:
  cache_directories:
    - ~/.cache/yarn
  pre:
    - yarn --version
  override:
    - yarn

test:
  override:
    - yarn run build
    - yarn test

参考

CircleCI 2.0

上記 CircleCI 1.0 と同じことをする設定ファイルを下記に記載しました。

CircleCI 2.0 では、ビルド・テストで実行する Docker イメージに任意のものが設定できます。

今回は、公式に提供されている node:6.10.0 (Ubuntu based) のイメージを使いました。

version: 2
jobs:
  build:
    working_directory: ~/workspace
    docker:
      - image: node:6.10.0

    steps:
      - checkout
      - restore_cache:
          key: projectname-{{ .Branch }}-{{ checksum "yarn.lock" }}
      - run:
          name: System information
          command: |
            echo "Node $(node -v)"
            echo "Yarn v$(yarn --version)"
      - run:
          name: Install dependencies
          command: yarn
      - run:
          name: Build
          command: yarn run build
      - run:
          name: Test
          command: yarn test
      - save_cache:
          key: projectname-{{ .Branch }}-{{ checksum "yarn.lock" }}
          paths:
            - ~/workspace/node_modules
            - ~/.cache/yarn/

所感

全般的に記述は長くなっていますが、設定の柔軟度がかなり上がっていて個人的には大変嬉しいです。

設定ファイルの記述を短くしたい場合は、Docker イメージ自体を自作して別のものにすればよいだけなので、そこ大した問題にはならないと思っています。

また、任意のファイルの内容に基いてキャッシュのキーを自前で制御することができるので、知らない間にキャッシュが悪さすることも無くなりそうです。

ビルド速度も、特に遅くなったとは感じませんでした 1

参考

まとめ

CircleCI 2.0、かなり良さそうな雰囲気です。

現時点では一部足りてない機能があるかもしれませんが、正式リリースの頃にはきっと解決しているはず (と信じています)。

興味がある方は、ぜひ触ってみて下さい。


  1. 採用する Docker イメージによって変わりそうです。試してみて下さい。