CircleCI を活用して生徒のコードレビューを自動化!
https://circleci.com/docs/2.0/hello-world/
コードクリサリスでは、生徒の進捗を確認するために、継続的インテグレーションとユニットテストを活用し、教育プロセスの一部をオートメーション化することにしました。私たちのカリキュラムのテストカバレッジはほぼ100%であり、生徒には関わる全てのプロジェクトでテスト駆動開発(TDD)を実践することを強制しています。私たちは継続的インテグレーションを私たちの評価プロセスと統合し、迅速なコードレビューを生徒に提供し、インストラクターは生徒の状況を把握できるため、より良いフィードバックを提供することが可能になります。
継続的インテグレーションとは何でしょうか?なぜ必要なのでしょうか?
(https://aws.amazon.com/jp/devops/continuous-integration/)
継続的インテグレーションは、開発者が自分のコード変更を定期的にセントラルリポジトリにマージし、その後に自動化されたビルドとテストを実行する DevOps ソフトウェア開発の手法です。継続的インテグレーションという用語が最もよく使われるのは、ソフトウェアのリリースプロセスのビルド段階または統合段階を指す場合で、自動化の要素 (たとえば、CI やビルドサービス) と啓発の要素 (たとえば、頻繁に統合することを学習する) の両方が含まれます。
継続的インテグレーションの主な目的は、バグを早期に発見して対処すること、ソフトウェアの品質を高めること、そしてソフトウェアの更新を検証してリリースするためにかかる時間を短縮することです。つまり、
現在2017年7月時点でよく知られている継続的インテグレーションは以下のサービスが挙げられます。簡単に良い点悪い点を挙げてみました。
良い点 | 悪い点 | |
---|---|---|
Jenkins | 汎用性が高い 無料 全てコントロール可能 |
ラーニングコストが高い サーバーと運用する人が必要 属人的になりやすい |
CircleCI | エンタープライズ版に無料版が有る 簡単に利用開始できる Docker をサポート |
バージョン 2.0 がまだベータ版 プレミアム版の料金プランが高い |
TravisCI | 対応しているプログラミング言語が豊富 Docker をサポート |
プレミアム版の料金プランがCircleCIより高い エンタープライズ版に無料版が無い |
最終的に CircleCI を選択しました。主な理由は、
- 簡単に利用開始できる
- 料金が比較的安価(無料版も有る)
です。スタートアップには心強い味方です。
CircleCIの基本的なセットアップ
私たちの学生がプルリクエストを作成しそのコードに対してテストを自動的に実行します。
CircleCI の基本的な動作原理
学生がGithub上でプルリクエストを作成するとGithubはWebhookを利用してプルリクエストの内容をCirleCIへPOSTします。CircleCIはDockerコンテナーを利用します。Dockerコンテナーを知りたい方はこちらを参照ください(https://www.docker.com/what-docker)。 端的に話をすると、Docker コンテナーはDockerイメージという環境のスナップショットを利用しており、実行すると独立した“コンテナー”という環境上でテストを行うことが出来ます。非常に多くの様々なコンフィグレーションがあり、Dockerを活用することでより簡単に、そして首尾一貫した開発プロセスにすることが可能になります。
チュートリアル(https://circleci.com/docs/2.0/hello-world/)にもある通りcircle.yml ファイルを用意して設定する方が一般的です。コンフィグレーションをファイルで管理でき、かつ設定がより柔軟に出来るためです。しかし、ファイルを利用せずにCircleCIの管理画面上で設定しました。その主な理由は学生に設定ファイルを見せないようにするためです。見せたくない理由は主に以下の通りです。
CircleCI 上の設定
- CircleCI 上でプロジェクトを追加
- プルリクエストのみをビルド対象にする
- 環境変数を設定(セキュリティ上公開したくないため)
- TEST_UTIL_REPO: git@github.com:codechrysalis/???.git
- TEST_UTIL_PATH: utils
- TEST_ID: exercise1 or else
- テストコマンドを設定
- Dependency Commands
- Test Commands
- 他のリポジトリをプルするためパーミッションを付与
Github の基本的なセットアップ
管理画面
- プルリクエストのみCirleCIへPOSTするように設定
- master ブランチへのマージを禁止
- テストが全て成功した場合のみ生徒のブランチのマージを許可
プルリクエストのサンプル画面
- プルリクエスト作成後
- テスト失敗時
- テスト成功時
うまくいかなかったこと
セットアップ自体はシンプルだったのですが以下の問題が出てきました。
- CircleCI の詳細エラーを Github 上に表示することが出来なかった
- 生徒がテストのエラーの詳細を知るには CircleCI へログインが必須
次回はこの問題をどのように対応したか記事にしたいと思います!
お問い合わせ
コードクリサリスに興味を持ちましたら是非こちらまでご連絡ください!hello@codechrysalis.io
プログラミングを学ぶことに興味を持ちましたら是非こちらでお申し込みをお待ちしております!
最後までお読み頂きありがとうございます。それではまた!!!