Edited at

CircleCIで出来るコト


CircleCI?

CircleCI

流行りのCIサービスです。

GitHub / BitBucketのPUSHに反応して、コードをゴニョゴニョします。



お金かかるの?

Pricing and Plan Information - CircleCI

1コンテナは無料です。

privateリポジトリでも、です。

つまり、ビルドに時間がかかっても良いなら、無料で使い続けられます。



ただし

OS Xのコンテナは有料です。

iOSアプリのCIには、お金が必要です。



つづき

仕事としてフルタイム使うと、1日5〜10ビルドは最低必要なので、$129/monthは必要です。

複数人で開発とかしてると、もう一つ上の$249/monthぐらいが必要かも。



なにをやらせるか

circle.ymlというファイルを、リポジトリのルートに置いておきます。

そこに実行させたいコマンドや、環境の指定を書いておくと、それをPUSHの度に実行してくれます。


こんなイメージ

machine:

java:
version: oraclejdk8
environment:
TERM: "dumb"
pre:
- scripts/env2file app/fabric.properties
test:
override:
- ./gradlew clean :app:testDebugUnitTestCoverage -PdisablePreDex
post:
- cp -r app/build/reports/tests $CIRCLE_ARTIFACTS
deployment:
master:
branch: master
commands:
- ./gradlew :app:uploadDeployGateDebug :app:uploadDeployGateRelease -PdisablePreDex



つまり、Linux上のコマンドで表現出来ることはだいたい出来る。


では、出来ることをつらつら並べていきます。



テストの実行


CIといえばテストですね。

CircleCIは頭がよく、Gemfileが置いてあればbundle installするし、bundle exec rake testとかも勝手にやってくれます。

まぁ、大抵は上書きします。

test:

override:
- なんか他にもやりたい
- bundle exec rake test:custom なんか引数



UIテストの実行

Seleniumなどを使った、ブラウザテストも出来る。(やったことないけど

Appiumを使った、Android / iOSのUIテストも出来る。(調査中



Lintの結果をPRコメントに

image



Android

Checkstyle / FindBugs / PMD / CPD / Android Lint


iOS

SwiftLint



Ruby

Brakeman / RuboCop / Rails Best Pratices / Reek


PHP

phpcs / phpmd



フロント系

ESLint / SCSS-Lint


詳しくは

Androidのコードを自動で解析し、GitHubのpull requestにコメントする - Qiita

とかで。

また、似たようなものはいくつかあります。

Dokumi

SideCI

reviewdog



ビルド

Android / iOSアプリのビルド。

Electronアプリのビルド。

goのクロスコンパイル。


$CIRCLE_ARTIFACTS にとりあえず移動しておけば、いつでも取りに行けます。

image



配布

とはいえ、毎回CircleCIの画面に取りに行くのは面倒です。

AndroidならDeployGate、iOSならTestFlightなどに飛ばせます。

Electronやgoであれば、GitHub Releaseに置いておくこともできます。



デプロイ

herokuであれば、宣言的にアプリ名などを書いておくだけで、デプロイ出来るっぽい。

https://circleci.com/docs/continuous-deployment-with-heroku/

AWS ElasticBeanstalkであれば、ebコマンドでデプロイ出来るらしい。



インフラの変更

Terraform + GitHub + CircleCI + Atlasを利用してAWSの操作を自動化した - Glide Note


  1. Terraformでインフラをコード化

  2. コードをPull Requestでレビュー、マージ

  3. CircleCIが動いて、インフラの変更

→GUIからの開放



ドキュメントの作成

ドキュメントと実装を正しく同期しておくのは手間がかかります。

コードから自動生成出来るドキュメントは、CIで生成できます。


生成したドキュメントは


  • CircleCIのArtifactsに入れておく

  • GitHubのReleaseとして登録しておく

  • コード管理しているリポジトリにdocなどのブランチをつくり、そこにpushしておく

  • S3にputする

など、APIさえあれば、どこにでも移動できます。



API定義書

r7kamura/autodocを使えば、RailsのAPI定義書を、テストコードを書くだけで出力できます。

JSON schemaを書いているプロジェクトであれば、interagent/prmdでyml -> mdの変換ができます。



ER図

voormedia/rails-erdを使えば、RailsのmodelをER図として画像出力できます。


他にも、


  • 静的ページgeneratorと組み合わせて、ビルド→ページの公開

  • 技術書執筆にあたっての校正・PDF出力の自動化

  • 別途cronサーバがあれば、nightly buildとか


ただ、CircleCIに頼りすぎるデメリットとして


  • circle.yml職人化する可能性(Jenkinsおじさんよりは引き継ぎやすいはず。。。

  • CircleCIがたまに不安定。


    • HerokuやAWSなどに引きづられて落ちることも。



  • CircleCIが無いと開発・運用が進まない

    (テスト落ちてるけど、とりあえずデプロイしたい、とか)


無料で始められるし、Jenkinsを自分たちで運用するよりは楽なはず。

使い倒して、知見を共有してください :pray:


image

Monstar Labではエンジニアを募集しています。

中目黒・松江(島根)・ダナン(ベトナム)とかで働きたい人は、Wantedlyの「話を聞きに行きたい」ボタンより :bow: