こんにちは。SWET(Software Engineer in Test)の栗田です。
弊社SWETグループは、
- DeNAサービス全般の品質向上
- DeNAエンジニアの開発生産性向上
の2つのミッションのもと、ソフトウェアテストの自動化や、エンジニアの生産性向上のためのツールの開発・導入などを行うソフトウェア・エンジニアの集団です。
これらの取り組みの一環として、弊社では開発プロセスに継続的インテグレーション(Continuous Integration、以下CI)を早くから導入してきました。
近年、プロダクトの開発サイクルがどんどんと短くなっていくにつれ、その中で品質を担保する手段の一つであるテスト自動化と、それを開発プロセスに含めるCIは、開発に必須の要素となっています。
CIを実装するCIツールは世の中に数多くありますが、その中でもJenkinsは、フリーかつオープンソースであることや、豊富なプラグインによる柔軟性などから、CIの世界ではデファクトと言っていいほど広く使われています。
弊社でも、これまでJenkinsを利用して数多くのプロダクトのCIを実装してきました。
しかし社内のプロダクトが多様化することにより、開発プロセスそのものも多様化し、かつ開発サイクルが短期化するにつれ、Jenkinsを利用する上でのデメリットも顕在化してきました。
1.Jenkins構築の大変さ
Jenkinsはその柔軟さにより、様々な開発プロセスにおいてCIを実装可能です。反面、インストールした初期の状態から、実際に使い始められる状態にするまで、数多くの設定を行わねばなりません。この設定の多さが、素早くCIを始めたいプロジェクトでは障害となっており、開発開始と同時にCIを導入できない原因の一つとなっていました。
2.Jenkins運用の大変さ
開発プロセスが多様化すると、1台のJenkinsですべての開発プロセスに対応することが困難になります。
そのため、各プロジェクト向けにJenkinsを構築し、運用することになります。Jenkinsの運用では、プロダクトのビルド・テストに使うミドルウェア・フレームワークを定期的にバージョンアップする必要があります。
特にスマホアプリ開発では、android-sdkやXcodeなどを新バージョンが出るたびにインストールし、かつ古いバージョンも維持しておく場合がほとんどです。こういった作業は、ほぼすべてのプロジェクトで行う必要があり、そのコストはバカになりません。
これらの問題を解決すべく、SWETグループでは、
- Jenkinsへの機能追加を基本とした、新しいCIツールの開発
- クラウドCIツールの導入
の2つを進めています。
今回は、2. のクラウドCIツールの導入について、様々なツールの評価を行った結果、 CircleCI Enterprise を導入することとなりました。
CircleCIは、Githubと連携できるコンテナ型のCIツールです。ここでのコンテナ型とは、近年急速に普及しているコンテナ仮想化技術を使い、ビルドごとにコンテナを割り当てることで、各プロジェクトに独立したビルド環境を提供するタイプのツールを指します。
CircleCIでは、コンテナのベースとなるOSイメージに、よく利用されるミドルウェア群があらかじめインストールされており、初期セットアップが不要です。またデフォルトのミドルウェア群に含まれていないものでも、circle.ymlとよばれる設定ファイルに追加ミドルウェアを記述し、Githubのリポジトリに含めることで、容易に追加できます。
また社内に1台セットアップし、各プロジェクトで共有するため、管理コストを集約することもできました。
CircleCI Meetup 当日の様子
今回、CircleCI社のメンバが来日することに合わせ、弊社でのCIツールに対する取り組み紹介や、日本国内のCircleCIユーザの交流・技術共有などを目的に、弊社主催という形でCircleCI Meetupを開催いたしました。
Meetupでは、まずCircleCIエバンジェリスト
Kevin Bell
氏より、CircleCIの便利な機能の一つである、ビルド実行コンテナへのSSHログイン機能についてや、実行したテストの情報を閲覧するテストメタデータな機能などについてご紹介頂きました。
他CircleCIの機能については、
公式ドキュメント
がございますので、そちらをご覧ください。
次に、私から弊社でのCircleCI導入に至る経緯をお話させていただきました。
その後、CyberAgent社よりstormcat24さんにお越しいただき、同社でのCircleCI導入後、どのように活用されているかなどについてお話頂きました。弊社より先に導入されていることもあり、社内での導入推進や、その際に気をつける点など、頷くところが多く、今後の参考にしていきたいと思いました。
上記3つのセッションのあと、乾杯を挟んでLTがありました。事前応募のLT枠の方に加え、当日飛び込みのLTもあり、大変盛り上がりました。
- はてなブログへの自動投稿
- GCP/GKEへのデプロイ
- CircleCIクライアントアプリ「CI2Go」(iOS)
- 何台ものサーバへのセキュリティアップデートの適用
- CentOSへのCircleCI Enterprise構築 …など
どのテーマもこれまで見たことがない事例ばかりで、非常に興味深かいものでした。
当日の発表資料は、こちらの
イベントページ
よりご覧いただけます。
今回は130名の参加枠にかかわらず、キャンセル待ちが出るほどの応募があり、当日残念ながらご参加頂けなかったみなさまには大変申し訳ありませんでした。
しかしながら、これほどの多くの応募があり、改めてCircleCIの人気を実感いたしました。
また懇親会の中で、Jenkinsに対する課題や、CIをどうやって社内で広めていくかなどについて、参加者の方からたくさんの質問を頂き、私自身、企業内開発におけるCIについて、改めて考える機会をいただきました。
終わりに
SWETグループでは、CIだけでなく、プロダクトの品質向上・エンジニアの開発生産性向上に日々取り組んでいます。また、この役割に積極的に取り組んでくれる仲間を探しています。興味のある方は、ぜひ こちら の募集をご覧ください!
最後に、今回のMeetup主催に快く協力いただいたCircleCI社メンバ、また会を盛り上げていただいた発表者の方に、厚く御礼申し上げます。
ありがとうございました!!
最後まで読んでいただき、ありがとうございます!
この記事をシェアしていただける方はこちらからお願いします。