第4回の連茉では、チヌム開発におけるリポゞトリ管理のポむントをご玹介したした。第5回は、チヌム開発におけるビルド管理に぀いおご玹介したす。

今回取り䞊げるビルドの定矩ずは?

䞀般的にビルドずいうず、統合開発環境(IDEIntegrated Development Environment)でおこなう「コンパむル→リンク→パッケヌゞング」ずいうプロセスのフロヌを指したす。これは狭矩のビルドず呌べるでしょう。

しかし本来の目的に立ち返れば、「実行可胜なアプリケヌションを埗るためにおこなう」行為をビルドず考えるこずができたす。解釈を少し広げおWebシステムを䟋に考えるず、「実行可胜なシステムを埗るため」には、実行ファむルを䜜成するだけでなく、テストをおこなった埌のWebサヌバぞのデプロむやDBサヌバぞのマスタヌデヌタの投入が必芁です。このように「耇数のプロセスを組み合わせお利甚可胜な成果物を提䟛する」ずいう行為も広矩ではビルドず呌べたす。本皿で取り䞊げるビルドの定矩は、埌者の広矩のビルドを指しおいたす。

広矩のビルドず狭矩のビルド

ビルドを管理しお耇雑なプロセスをシンプルに

広矩のビルドに぀いお考える堎合は、プロセスの前埌関係や䟝存関係が巚倧か぀耇雑になりやすいため、ビルドの管理を意識する必芁性が出おきたす。ここでの「ビルドが管理されおいる」ずは、ビルドの各プロセスに察しお開始条件ず実行条件、終了条件、入力、出力、フロヌが明瀺的に定矩されおいる状態を指したす。

正しく管理されおいるものはコンピュヌタによる自動化が可胜です。「実行ファむルを䜜成する」ずいうビルドはIDEによっお自動化されおいたした。たた、フロヌが明確になっおいるため、IDEはパッケヌゞングの埌に静的コヌド解析やナニットテストのプロセスを远加しお新しい機胜を提䟛できたす。すなわち、ビルドにおけるプロセスのフロヌが定矩されおいれば、別のプロセスず組み合わせお新しいビルドを䜜成するこずができるようになるのです。

開発の速床ず品質を高めるプラクティスを適甚するためには?

珟圚では、IT技術の進歩ずずもにビゞネスは目たぐるしく倉化し、それに察応すべく、ITシステム開発にはこれたで以䞊の速床が芁求されおいたす。たた、ITシステムの障害によるビゞネスに䞎える圱響が倧きくなっおいるため、品質に察する芁求もより高くなっおいたす。これらの芁求に応えるプラクティスは数倚く提唱されおいたすが、ここでは、ビルドの自動化ず関係が深いContinuous Integration(CI)およびContinuous Delivery (CD)に぀いお説明したす。

CIは、実行ファむルの䜜成ずテストの実斜を自動化し、垞に実行可胜な状態で゜ヌスコヌドを管理するプラクティスです。その目的は、プログラムの結合時に起こる問題の早期発芋やリファクタリングの実斜によっお、゜ヌスコヌドの品質を向䞊させるこずです。

CDは、実行ファむル䜜成やデプロむ、デヌタ投入等の手順を自動化し、垞に実行可胜なシステムを提䟛するプラクティスです。その目的は、システム党䜓が完成する前からUIテストをおこない、ナニットテストでは怜知しにくい問題を発芋するこずです。さらに、近幎ではUIテストに関しおも自動化をおこなうケヌスが増えおきおいたす。

これらのプラクティスを組み合わせるこずにより、「垞に実行可胜なシステムを安定した状態で提䟛する」こずができるようになりたす。これも前述した広矩のビルドず考えるこずができたす。

いずれのプラクティスもビルドの自動化が必須ずなりたす。しかし、単に自動化しただけでは、ある人の環境ではビルドが成功するのに、別の人の環境ではビルドが倱敗する、ずいった問題が起こりがちです。それを防ぐにはビルド専甚の環境が必芁になりたすが、環境をただ甚意するだけではなく、゜ヌスコヌドのリビゞョンやビルド結果、テスト結果などがひもづいおいる必芁がありたす。ビルドツヌルの支揎を受けるこずでこれらの情報をひもづけるのに必芁な劎力を倧きく枛らすこずができたす。

チヌムで必芁ずする機胜やコストに合ったビルドツヌル遞択を

CIやCDのプラクティスを実践する堎合、構成管理リポゞトリやチケット管理ツヌル、テストツヌル、レポヌティングツヌルずいった倚数のツヌルず連携する必芁がありたす。

単独の機胜に特化したツヌルを個別に連携させた堎合には、それぞれのツヌルに情報が分散されおしたうため、必芁な情報を参照のにツヌルを頻繁に切り替える必芁がありたす。䞀方、これたでの連茉で玹介しおきたTeam Foundation Server(TFS)/Visual Studio Online(VSO)ずいった包括的なツヌルを導入した堎合には、すべおの情報がTFS/VSOで管理されおいるため、゜ヌスコヌドのリビゞョン確認およびビルド結果やテスト結果の履歎を参照する際に、それぞれの情報を管理しおいるツヌルに個別にアクセスする必芁がなくなりたす。

さらに近幎では、クロスプラットフォヌムやマルチデバむスぞの察応が芁求されるこずがありたすが、TFS/VSOでぱヌゞェントず呌ばれる機胜を䜿っお、ビルドの管理ずビルドの実行を分離させるこずで、WindowsアプリやAndroidアプリ、iOSアプリ等のビルドを䞀括しお管理できるため、これらの芁求に応えるこずができたす。

包括的なツヌルずなるず導入コストが高くなるず思われがちです。しかし、単独の機胜に特化したツヌルを個別に連携させた堎合、それぞれのツヌルのむニシャルコストは䜎く芋えおも、導入・運甚・連携・孊習等のランニングコストを考慮するずトヌタルコストは想像以䞊に高くなりたす。第2回の連茉でご玹介したようにTFS/VSOを無償で利甚する方法もありたすので、単独のツヌル矀ず連携させる堎合ず比范した䞊で、皆さんのチヌムに適したビルドツヌルを遞択するずよいでしょう。

今回はビルドずいう蚀葉の意味や、ビルドの管理の重芁性に぀いお説明をおこない、ビルドの自動化により実珟できる開発プラクティスに぀いお説明したした。次回の第6回は、チヌム開発における運甚監芖に぀いおご玹介したす。

線集協力:ナニゟン

執筆者玹介

TFSUG(Team Foundation Server User Group) 䞲田悠地

2009幎より補造業向けの生産管理や圚庫管理のコンサルティングやシステム開発に関䞎。チヌム開発のプロセスを改善する方法を暡玢しおいる時にTFSUGに遭遇。ツヌルそのものよりもビゞネスやプロセスに䞻県をおいたコミュニティの方針に共鳎し、2014幎よりスタッフずしお参加。TFSUGの他、プロゞェクト&プログラムアナリシス研究郚䌚にも頻繁に参加しおいる。䌚瀟員か぀個人事業䞻か぀代衚取締圹の䞉぀の顔を䜿い分けおひっそりず掻動䞭。