はじめに
前回は、バージョン管理システムと課題管理システムを連携させてソフトウェア開発を進めるプロセスを、Bitbucket Server(以下、Bitbucket)とJIRA Software(以下、JIRA)を例に用いて説明しました。バージョン管理システムと課題管理システムは、リックソフトの考える「三種の神器」の第一と第二にあたります。今回はその第三にあたる継続的インテグレーション(CI)システムに着目し、ビルド/テスト/デプロイといった作業の自動化/省力化、さらに「三種の神器」をすべて連携させることで生産性を向上させる方法について紹介します。
CIシステムは、JenkinsやTravis CIなど世の中に多数存在しますが、本稿ではAtlassianが提供する商用WebアプリケーションであるBambooを取り上げます。また、Bambooと連携させるバージョン管理システムと課題管理システムとして、前回に引き続きBitbucketとJIRAを交えて説明します。
CIについて
過去の連載でCIについて触れたこともありますが、本題に入る前に、CIについて再度おさらいをしておきましょう。
CIとは、ソフトウェアのビルド/テストといった作業を継続的に繰り返しながら開発を進めていく開発手法を指します。CIを開発に取り入れることで、コンパイルエラーをはじめとした不具合を早期に発見できるようになります。不具合を早期に発見すれば、あとになって不具合を発見する場合と比べて対応コストが低くなるため、素早く、かつ正しく修正対応が行えます。そのため、CIの導入によって作業効率の向上とソフトウェアの品質の向上が期待できます。
しかし、ソースコードを編集するたびに開発者が手作業でビルドをするのでは、そちらに時間を取られてしまい、むしろ作業効率が悪化します。加えて、繰り返し何度も行う作業を人間が行えば、どれだけ注意していてもいつか必ずミスが発生するものです。
また、単純な手作業でのビルドにはほかにもさまざまなデメリットが存在します。たとえば、特定の環境ではビルド可能でも、ほかの環境ではビルドができないといった環境依存が増えたり、一部の人が「ビルド職人」となり作業が属人化することなどが考えられます。こういった状況を防ぎ、CIのメリットを最大限に活かせるように、ビルドのような単純作業はシステムで自動化するのがお勧めです。
Bambooに作業を任せる
ビルド&テスト
Bambooでは、ビルドの実行プランを「ステージ」「ジョブ」「タスク」という階層構造で設定します。ここが少し複雑に感じる方がいるかもしれませんが、一度覚えてしまえばWebブラウザを使って直感的なUIでビルドの実行プランを設定できるようになるのでぜひ覚えてください(図1)。
各概念は大まかに、次のようになっています。
- タスク
- 「ソースコードをチェックアウトする」「Mavem3.xでビルドをする」などの、個別の処理を指す概念です。タスクどうしの並列実行はできず、設定した順番どおりに実行します。
- ジョブ
- 複数のタスクをまとめる概念です。「MySQL環境用のテスト実行」「PostgreSQL環境用のテスト実行」のように、環境ごとに分けて処理を実行したいときに便利です。ジョブどうしは並列に実行可能です。
- ステージ
- 複数のジョブをまとめる概念です。「ビルド用ステージ」「テスト用ステージ」のように、手順を段階ごとに分割するのに用います。ステージどうしの並列実行はできず、設定した順番どおりに実行します。
ビルドの実行プランを作成したら、実行タイミングを設定します。Bitbucketと連携させていれば、編集したソースコードがブランチにコミットされたタイミングでそれを検知し、自動でビルドを実行するように設定できます。また、「毎日深夜3時にビルドを実行する」「開発用ブランチはコミットを検知して自動で、リリース用ブランチは手動でのみビルドを実行する」といったことも可能なので、運用に合わせて最適な実行タイミングを設定できます。
デプロイ
Bambooでは、ビルドやテストだけでなくデプロイの実行も可能です。ビルドの実行プランと同様、デプロイの実行プランを作成し、実行タイミングを設定してBambooにデプロイ作業を任せます。
デプロイの実行タイミングは「ステージング環境に対しては、ある特定のブランチでビルドが成功したら即座に自動でデプロイを実施」「本番リリースの環境に対しては、権限を与えた担当者が確認して手動でデプロイを実施」といったように、環境に合わせて任意に設定できます。手動デプロイの場合でも数クリックの操作だけで簡単かつ確実にデプロイできるので、慎重に行わなければならないデプロイ作業も省力化できます。
CIシステムを導入して作業の自動化を行えば、開発サイクルの省力化が望めます。加えて、CIシステムの作業情報をチーム内で共有し、よりスムーズに開発を行うためには、CIシステムが行った作業情報をチーム内で素早く共有できること、バージョン管理システムを使った開発サイクルの中にCIシステムを組み込むことによって、コードの信頼性を高めることができます。
以上、CIシステムのBambooを簡単に紹介しました。後編では、課題管理システムのJIRAとバージョン管理システムのBitbucketをBambooに連携させることで、情報の一元管理とコード品質の保全といったメリットが生まれることを解説します。
日本だけでなく、アジア圏でもアトラシアン製品販売のトップエキスパートであるリックソフトのWebサイトでは、各アトラシアン製品の体験版を提供しているほか、アトラシアン製品専用のコミュニティも運営しています。まずはアクセスしてみては!
- リックソフトJIRAデモ環境
- https://www.ricksoft.jp/demo/
- 第1特集
MySQL アプリ開発者の必修5科目
不意なトラブルに困らないためのRDB基礎知識
- 第2特集
「知りたい」「使いたい」「発信したい」をかなえる
OSSソースコードリーディングのススメ
- 特別企画
企業のシステムを支えるOSとエコシステムの全貌
[特別企画]Red Hat Enterprise Linux 9最新ガイド
- 短期連載
今さら聞けないSSH
[前編]リモートログインとコマンドの実行
- 短期連載
MySQLで学ぶ文字コード
[最終回]文字コードのハマりどころTips集
- 短期連載
新生「Ansible」徹底解説
[4]Playbookの実行環境(基礎編)