自動ビルド環境を作り上げることで、開発効率もコードの品質も向上させよう[PR]
ソフトウェア開発において、プログラマが書いたコードにバグが含まれていることは避けられないことです。だとすれば、そのバグをプロジェクト完了までにどうやって発見し、修正し取り除いていくかはソフトウェアの開発プロジェクトにおいて重要な作業の1つでしょう。
バグを取り除くための鉄則は、できるだけ早い段階でバグを見つけ出すことです。コードを書いたプログラマの立場になって考えれば、コードを書いた直後にバグを指摘されれば、比較的容易にその原因を把握して修正する作業にとりかかれることでしょう。
時間がたつほどデバッグのコストが上がる
しかしコードを書いて3日後、あるいは1週間後にバグが発見され、「ここにバグがあるようなので調べて直してほしい」と指摘されたプログラマは、まるで他人が書いたコードを読み解くようにあらためてコードを読み直し、なぜそのようなコードになっているのかを調べつつ、あるいは思い出しつつ修正をしなくてはなりません。
コードを書いてから時間がたてば立つほど、修正に掛かる時間や手間、すなわちバグ対応に掛かるコストは大きくなります。
問題はできるだけ早期に発見し修正する、開発生産性の向上においてこれは鉄則です。有名なトヨタ生産システムでも、異常が発生したらただちに製造ラインを止めて原因を追及する「自働化」は、「ジャストインタイム」と並んで重要な指針になっています。
できるだけ早く、コードに潜む問題を発見し修正するには
できるだけ早期にコードに潜むバグを見つける、そのための手法にはさまざまなものがあります。
例えばXP(eXtreme Programming)におけるペアプログラミング。効果の1つとして、多様な視点を持ち寄ってコードを見ながらプログラミングを進めていくことで、コードを書くその時点でバグを入り込みにくくする、あるいはバグがあってもすぐに指摘されることが期待されます。
ソースコード管理ツールのGitでは、プログラマがコードを書いたり修正などを行うと、それをマスターとなるソースコードに反映する前にプルリクエストを発行して他のプログラマにコードをレビューしてもらいます。これも、コードを書いた直後に他人の目でチェックしてもらうことで、できるだけ早期にバグを発見できる機会と言えるでしょう。
自動ビルドはコードの品質と開発効率の改善に効果的
早期にバグを発見するために使える重要な仕組みとして挙げられるのが、自動ビルドです。
自動ビルドとはその名前の通り、プログラマが命令すればいつでも最新のコードを集めてコンパイルやリンクを行い、自動的にコードを実行可能な状態にしてくれる仕組みのこと。
もしも自動ビルドの仕組みがないと、プログラマがそれぞれ自分でビルド環境を構築してコードをビルドしなければならないか、あるいはビルド担当の人にお願いをしてビルド処理をしてもらわなければなりません。
ビルドを行う過程で、コンパイラやリンカなどによる基本的なコードのチェックが行われますし、単体テストなどのコードを走らせてバグが入り込んでいないかもテストできます。もちろん、きちんとビルド処理が成功して実行可能なコードが生成されるかという、もっとも重要な点の確認もできます。
自動ビルドを採用することで、プログラマは手間も気兼ねもなくビルド処理を実行してコードの品質を確認できるようになります。しかもコードがつねにビルドを通る状態を維持できるため、いつのまにかビルドが通らない品質の悪いコードを基に開発を進めていた、という事態を防止できます。
前述のGitによるプルリクエストのレビューも、コミット後にビルドが通ったコードだけをプルリクエストに出すことで、無駄なレビューの工数を掛けなくて済むようになります。
もちろん、自動ビルドを採用することで開発者やビルド担当者がいままでマニュアルでやっていたビルド処理の工数も削減されるのです。
自動ビルドの採用は、早期にコードの問題を発見しやすくし、品質の向上をし、開発効率を向上させるうえで非常に効果の高いものだと言えるでしょう。
CIを実現するための自動ビルドツール「Jenkins」と「Bamboo」
自動ビルドの環境を構築するには、Gitのようなソースコード管理ツールやコンパイラ、リンカ、テストツールなどとの連係が必要で、場合によっては手間が掛かることがあります。自動ビルドのツールとしてよく知られているのがオープンソースのJenkinsやアトラシアンのBambooです。ここではBambooについて紹介しましょう。
BambooもGitやSVN、Mercurial、Ant、コマンドラインなどを始めとするさまざまなソースコード管理ツール、コンパイラ、テストツール、ビルドツールや、Tomcat、Heroku、Grailsなどの多くのデプロイ環境などとも連係可能な、ビルド自動化とCI(Continuous Integration:継続的インテグレーション)やCD(Continuous Delivery:継続的デリバリ)を実現するためのソフトウェアです。
Bambooは、既存の開発環境やデプロイ環境に追加して自動ビルド環境を柔軟に構築することができます。
一気通貫で、どの機能追加やバグ修正まで終わったのか分かる
Bambooが備える最大の特長は、他のアトラシアン製品と組み合わせることで、どのタスクがどこまで進捗したかを、プロジェクト管理ツールのJIRA、ソースコード管理ツールのBitbucketやStash、そしてビルド自動化ツールのBambooがすべて情報を集約、連係できる点にあります。
Bambooによってあるコードのビルドとデプロイが成功したとき、そのコードにはどのブランチによる新規機能やバグ修正が含まれていたのか、BitbucketやStashとの連係によって自動的に分かるようになっています。
そしてBitbucketやStashはJIRAと連係しており、そのブランチはどのタスクのために作られたものか、という情報とつながっています。
つまりプログラマなどエンジニアだけでなく、プロジェクトマネージャや企画担当者なども、例えばJIRAで表示されている「カンバン」の画面をみれば、いまどのタスクにひも付けられた機能追加や修正がデプロイまで終わって(あるいは作業中で)、すぐにお客様に提供できる状態なのか、というのが分かるのです。
アトラシアンの製品群は、どれも他社の製品やオープンソースと連係してプロジェクト管理やタスク管理、ソースコード管理、ビルド自動化、CIといった機能を、商用製品として十分に発揮します。
それに加えて、アトラシアン製品群では相互にツールを連携させることで、プロジェクト管理のダッシュボード画面でタスクごとの開発状況からデプロイの成功まで、プログラマではないマネージャ、デザイナー、プランナーなどにも分かりやすく、状況を一気通貫に見通し、情報共有してプロジェクトを効果的に回していくというメリットを備えているのです。
関連記事
(本記事はアトラシアン提供によるタイアップ記事です)
あわせて読みたい
日本オラクル、クラウドビジネス強化で1年以内に200名規模の中途採用による増員を発表
≪前の記事
Cloud Foundryの次バージョンでDockerや.NET対応を実現する「Diego」の内部構造は?(後編) 第25回PaaS勉強会