RAD Studio で実践する

継続的インテグレーション
アプリとデベロッパーの価値 を拡張するエッセンス
長沢 智治
テクニカル エバンジェリスト
アトラシアン株式会社
re-workstyle.com@tomohnアプリとデベロッパーの価値ビジネスとアプリケーションの進化

90s

00s
Business

10s
Business

Business

Apps

Apps
Apps

C/S

✓ コード品質✓ 開発者中心✓ 分業

Web サービス

マルチデバイス + サービス

✓ サービス品質✓ 開発チーム中心✓ 分業から協調✓ ビジネス品質✓ 開発と運用✓ 協調ビジネスを駆動するアプリケーションへ

BUILD
LEARN

Business

Apps

MEASURE
創造 | 成果 | 変革ビジネスを駆動するプラクティス
Feedback	  loop Deployment

継続的デリバリー Design	  for	  Operations
Small	  Batch Production	  Ready
Acceptance	  Test

DevOpsBusiness

DVCS

Apps

Retrospective
Burn	  down
Value	  Up
DoD

Scrum

MTTR Customer	  needs
Service	  Desk Cloud Cycle	  TimeAgileTime	  BoxBacklog

Task	  Board

eXtreme	  Programing

TDDCIPair	  ProgrammingC ontinuous Integration
継続的インテグレーション

継続的インテグレーション
CI: Continuous Integration
アプリケーション作成時の品質改善や納期の短縮のための習慣のことです。

ウィキペディア

XP のプラクティスの一つでビルドやテスト、インスペクションなどを継続的に実行していくことを意味する。

品質改善
納期の短縮

継続的ビルド習慣習慣

ソフトウェア開発における心臓はなにか？
チームの循環器はなにか？

ソフトウェア開発 〜 アイデアを価値に転換する
Software Delivery

開発とビルドのリズムとコスト

DevelopBuild
1 : 10 : 100 の法則✓ 開発: コスト ×1✓ ビルド: コスト ×10✓ テスト: コスト ×100

テストを書こう！頻繁にコミットしよう！ (DVCS)

開発とビルドのリズムとコストの蓄積DevelopBuild
1 : 10 : 100 の法則✓ 開発: コスト ×1✓ ビルド: コスト ×10✓ テスト: コスト ×100

開発とビルドのリズムとコストの改善

DevelopBuild
1 : 10 : 100 の法則✓ 開発: コスト ×

11✓ ビルド: コスト ×1010✓ テスト: コスト × 100
継続的ビルドによる品質改善とデリバリーの短縮

開発とビルドのリズムからデプロイのリズムへ

Develop

Build

Deploy1 : 10 : 100 の法則✓ 開発: コスト ×11✓ ビルド: コスト ×1010✓ テスト: コスト × 100✓ デプロイ: コスト ×100

開発とビルドのリズムからデプロイのリズムへ

Develop

Build

DeployDEVELOPMENTTESTINGPRODUCTION

開発とビルドのリズムからデプロイのリズムへ

Develop

Build

DeployDEVELOPMENTTESTING！

PRODUCTION！

開発とビルドのリズムからデプロイのリズムへ

Develop

Build

DeployDEVELOPMENTTESTING！

PRODUCTION

開発とビルドのリズムからデプロイのリズムへ

Develop

Build

Deploy！

DEVELOPMENT！

TESTING！

PRODUCTION

開発者のコード変更は直接デリバリーへ

Develop

Build

Deploy

継続的インテグレーション
VCS + CI (+BTS/ITS)！

アイデアとバグをコードに転換

DEVELOPMENT！

TESTING！

デプロイの自動化
リリース管理
手を抜けないコードの品質の作りこみ

PRODUCTION

フィードバックの収集と適切な反映

開発者のコード変更は直接デリバリーへ

Develop

Build

Deploy！

1 : 10 : 100 の法則
DEVELOPMENT✓ 開発: コスト ×！

TESTING11✓ ビルド: コスト ×10
PRODUCTION 5✓ テスト: コスト × 10010✓ デプロイ: コスト ×100！

開発者とアプリ、要求とコードとビルドをつなぐDevelop

Build

Deploy！
！

開発者同士:DEV

ITS/BTS

VCS

TEST

PROD

CI

チーム同士:
開発者と、• デザイナー• テスター• マネージャー

ITS/BTS

利害関係者:
開発チームと、
• 企画
• 運用
• 顧客

ITS/BTSDEPLOY

開発者とアプリ、要求とコードとビルドをつなぐ

Develop

Build

Deploy！
！

開発者同士:DEV

ITS/BTS

VCS

TEST

PROD

CI

チーム同士:
開発者と、• デザイナー• テスター• マネージャー

ITS/BTS

利害関係者:
開発チームと、
• 企画
• 運用
• 顧客

ITS/BTSDEPLOYアトラシアン製品にみる開発支援ツールの進化とカバー範囲

開発者とアプリ、要求とコードとビルドをつなぐ

Develop

Build

Deploy！
！

開発者同士:

DEV

DVCS リポジトリ

継続的インテグレーション
技術依存しない自動ビルドツール
ビルド管理

開発者と、
• デザイナー• テスター• マネージャーBST / ITS: 要求、バグ、タスクの追跡, 変更管理

利害関係者:

ドキュメントやソースコードの変更要素 (Issues) の追跡と管理
各種の成果物の粒度の調整と各成果物をつなぐ重要な役割
開発者とアプリの価値をわかりやすく示すのに欠かせない開発チームと、• 企画• 運用• 顧客PROD

DVCS クライアント
無償のデファクトスタンダード

チーム同士:TEST

コードレビューや連携可能なリポジトリ管理

継続的デプロイメント
自動デプロイとデプロイ状況の管理

ライブ ドキュメント共有
企画や仕様書を陳腐化させない。ドキュメントから協調、思考と経験の形式知化

チーム内外のコミュニケーション インフラ
タイムラインでアクティビティを通知、対処の円滑化

RAD Studio + Atlassian 製品での継続的インテグレーション

Demo開発者とアプリ、要求とコードとビルドをつなぐDevelop

Build

Deploy！
！

開発者同士:

DEV

DVCS リポジトリ

継続的インテグレーション
技術依存しない自動ビルドツール
ビルド管理

開発者と、
• デザイナー• テスター• マネージャーBST / ITS: 要求、バグ、タスクの追跡, 変更管理

利害関係者:

ドキュメントやソースコードの変更要素 (Issues) の追跡と管理
各種の成果物の粒度の調整と各成果物をつなぐ重要な役割
開発者とアプリの価値をわかりやすく示すのに欠かせない開発チームと、
• 企画
• 運用
• 顧客

PROD

DVCS クライアント
無償のデファクトスタンダード

チーム同士:TEST

コードレビューや連携可能なリポジトリ管理

継続的デプロイメント
自動デプロイとデプロイ状況の管理

ライブ ドキュメント共有
企画や仕様書を陳腐化させない。ドキュメントから協調、思考と経験の形式知化

チーム内外のコミュニケーション インフラ
タイムラインでアクティビティを通知、対処の円滑化

開発者とアプリ、要求とコードとビルドをつなぐ

Develop

Build

DeployRAD Studio (Delphi, C++Builder)でのテスト！
！

開発者同士:
チーム同士:
開発者と、• デザイナー• テスター• マネージャー

利害関係者:
開発チームと、
• 企画
• 運用
• 顧客

✓ テスト容易性の高い設計と実装
TEST(MVC,PROD MVVM)DEV✓ ビューとロジックの分離✓ デバッグ実行 ≠ テスト✓ テスティング フレームワークの活用✓ DUnit
DVCS クライアント✓ DUnitX 継続的インテグレーション
無償のデファクトスタンダード
技術依存しない自動ビルドツール✓ DUnit
ビルド管理
DVCS リポジトリ✓ DUnit: xUnit 互換の Delphi ユニットテスト
継続的デプロイメント
コードレビューや連携可能
自動デプロイとデプロイ状況の管理
なリポジトリ管理✓ RAD
Studio で標準搭載✓ IDE からのテスト実行に特化
BST / ITS: 要求、バグ、タスクの追跡,変更管理✓ GUIとコマンドライン実行
ドキュメントやソースコードの変更要素 (Issues) の追跡と管理
各種の成果物の粒度の調整と各成果物をつなぐ重要な役割✓ テスト結果は対話的 (ログなし)
開発者とアプリの価値をわかりやすく示すのに欠かせない

ライブ ドキュメント共有
企画や仕様書を陳腐化させない。ドキュメントから協調、思考と経験の形式知化

チーム内外のコミュニケーション インフラ
タイムラインでアクティビティを通知、対処の円滑化

開発者とアプリ、要求とコードとビルドをつなぐ

Develop

Build

DeployDUnit でのテストの作成！
！

開発者同士:

ウィザードによるテストの作成
DEV

DVCS リポジトリ

継続的インテグレーション
技術依存しない自動ビルドツール
ビルド管理

開発者と、
• デザイナー• テスター• マネージャーBST / ITS: 要求、バグ、タスクの追跡, 変更管理

利害関係者:

ドキュメントやソースコードの変更要素 (Issues) の追跡と管理
各種の成果物の粒度の調整と各成果物をつなぐ重要な役割
開発者とアプリの価値をわかりやすく示すのに欠かせない開発チームと、
• 企画
• 運用
• 顧客

PROD

DVCS クライアント
無償のデファクトスタンダード

チーム同士:TEST

コードレビューや連携可能なリポジトリ管理

継続的デプロイメント
自動デプロイとデプロイ状況の管理

ライブ ドキュメント共有
企画や仕様書を陳腐化させない。ドキュメントから協調、思考と経験の形式知化

チーム内外のコミュニケーション インフラ
タイムラインでアクティビティを通知、対処の円滑化

開発者とアプリ、要求とコードとビルドをつなぐDevelop！

Build

DeployDUnit でのテストロジックの記述

開発者と、• デザイナー• テスター• マネージャー

procedure	  TestTCalc.TestAdd_Case1;	  	  	  var	  TEST PROD
DEV	  	  	  	  _result	  :	  System.Integer;	  	  	  	  	  y:	  System.Integer;	  	  	  	  	  x:	  System.Integer;	  	  	  begin	  DVCS クライアント
テスト対象の実行
無償のデファクトスタンダード
継続的インテグレーション	  	  	  	  x	  :=	  1;	   技術依存しない自動ビルドツール	  	  	  	  y	  :=	  1;	   ビルド管理
DVCS リポジトリ
継続的デプロイメント
コードレビューや連携可能	  	  	  	  _result	  :=	  aTCalc.Add(x,	  y);	  自動デプロイとデプロイ状況の管理
なリポジトリ管理	  	  	  	  CheckEquals(x+y,	  _result);	  	  	  end;
BST / ITS: 要求、バグ、タスクの追跡, 変更管理

利害関係者:

ドキュメントやソースコードの変更要素 (Issues) の追跡と管理
各種の成果物の粒度の調整と各成果物をつなぐ重要な役割
開発者とアプリの価値をわかりやすく示すのに欠かせない！

開発者同士:
チーム同士:

開発チームと、
• 企画
• 運用
• 顧客

テスト対象の検証

ライブ ドキュメント共有
企画や仕様書を陳腐化させない。ドキュメントから協調、思考と経験の形式知化

チーム内外のコミュニケーション インフラ
タイムラインでアクティビティを通知、対処の円滑化

開発者とアプリ、要求とコードとビルドをつなぐ

Develop

Build

DeployDUnit でのテストの実行！
！

開発者同士:

テストの実行TEST

PROD

DVCS クライアント
無償のデファクトスタンダード

チーム同士:

DEV

DVCS リポジトリ

継続的インテグレーション
技術依存しない自動ビルドツール
ビルド管理

開発者と、
• デザイナー• テスター• マネージャーBST / ITS: 要求、バグ、タスクの追跡, 変更管理

利害関係者:

ドキュメントやソースコードの変更要素(Issues) の追跡と管理
テスト結果がファイルに出力できない
各種の成果物の粒度の調整と各成果物をつなぐ重要な役割
開発者とアプリの価値をわかりやすく示すのに欠かせない＝ 継続的インテグレーションで検証困難！

開発チームと、
• 企画
• 運用
• 顧客

コードレビューや連携可能なリポジトリ管理

継続的デプロイメント
自動デプロイとデプロイ状況の管理

ライブ ドキュメント共有
企画や仕様書を陳腐化させない。ドキュメントから協調、思考と経験の形式知化

チーム内外のコミュニケーション インフラ
タイムラインでアクティビティを通知、対処の円滑化

開発者とアプリ、要求とコードとビルドをつなぐDevelop

Build

XMLTestRunner2.pas の読み込みにより！

NUnit 互換ファイルを出力！

開発者同士:
チーム同士:

DeployDUnit でのテストロジックの記述

TEST PROD
DEVunit	  TestTCalcUnit;	  	  interface	  uses	  	  	  	  	  TestFramework,	  …,	  XMLTestRunner2;	  DVCS クライアント
無償のデファクトスタンダード
type	  継続的インテグレーション
技術依存しない自動ビルドツール	  	  	  	  //	  テストメソッド
ビルド管理
DVCS リポジトリ

開発者と、• デザイナー• テスター• マネージャーBST / ITS: 要求、バグ、タスクの追跡, 変更管理

利害関係者:

ドキュメントやソースコードの変更要素 (Issues) の追跡と管理
各種の成果物の粒度の調整と各成果物をつなぐ重要な役割
開発者とアプリの価値をわかりやすく示すのに欠かせない開発チームと、
• 企画
• 運用
• 顧客

コードレビューや連携可能なリポジトリ管理

継続的デプロイメント

自動デプロイとデプロイ状況の管理
Initialization	  	  	  	  	  RegisterTest	  (TestTCalc.Suite);	  	  !

With	  XMLTestRunner2.RunRegisteredTests	  do	  Free;	  ライブ ドキュメント共有
end.
企画や仕様書を陳腐化させない。ドキュメントから協調、思考と経験の形式知化
チーム内外のコミュニケーション インフラ
タイムラインでアクティビティを通知、対処の円滑化

開発者とアプリ、要求とコードとビルドをつなぐ

Develop

Build

Deploy！
！

1
開発者同士:

DEV

開発者と、• デザイナー• テスター• マネージャー

利害関係者:
開発チームと、
• 企画
• 運用
• 顧客

PROD

企画、アイデアの顕在化と実施計画
DVCS クライアント
無償のデファクトスタンダード

チーム同士:

TEST

2

継続的インテグレーション
技術依存しない自動ビルドツール
ビルド管理

プロジェクト計画とタスクの割り出し
DVCS リポジトリ
コードレビューや連携可能なリポジトリ管理

継続的デプロイメント
自動デプロイとデプロイ状況の管理

BST / ITS: 要求、バグ、タスクの追跡, 変更管理
ドキュメントやソースコードの変更要素 (Issues) の追跡と管理
各種の成果物の粒度の調整と各成果物をつなぐ重要な役割
開発者とアプリの価値をわかりやすく示すのに欠かせない

ライブ ドキュメント共有
企画や仕様書を陳腐化させない。ドキュメントから協調、思考と経験の形式知化

チーム内外のコミュニケーション インフラ
タイムラインでアクティビティを通知、対処の円滑化

開発者とアプリ、要求とコードとビルドをつなぐDevelop

Build

Deploy！
！

DEV

開発者同士:
開発者と、• デザイナー• テスター• マネージャー

利害関係者:
開発チームと、
• 企画
• 運用
• 顧客

PROD

DVCS クライアント
無償のデファクトスタンダード

チーム同士:

TEST

3

継続的インテグレーション
技術依存しない自動ビルドツール
ビルド管理

開発作業の”起動”
DVCS
リポジトリ
コードレビューや連携可能なリポジトリ管理

継続的デプロイメント
自動デプロイとデプロイ状況の管理

4

BST / ITS:開発の実施
要求、バグ、タスクの追跡, 変更管理
ドキュメントやソースコードの変更要素 (Issues) の追跡と管理
各種の成果物の粒度の調整と各成果物をつなぐ重要な役割
開発者とアプリの価値をわかりやすく示すのに欠かせない

ライブ ドキュメント共有

5

継続的インテグレーション

企画や仕様書を陳腐化させない。ドキュメントから協調、思考と経験の形式知化

チーム内外のコミュニケーション インフラ
タイムラインでアクティビティを通知、対処の円滑化

開発者とアプリ、要求とコードとビルドをつなぐ

Develop

BuildDeploy！
！

DEV

開発者同士:
開発者と、• デザイナー• テスター• マネージャー

開発チームと、
• 企画
• 運用
• 顧客

PROD

DVCS クライアント

チーム同士:

利害関係者:TEST！

無償のデファクトスタンダード

継続的インテグレーション

DVCS リポジトリ

技術依存しない自動ビルドツール
ビルド管理
DEV

コードレビューや連携可能なリポジトリ管理

自動デプロイとデプロイ状況の管理

継続的デプロイメント

BST / ITS: 要求、バグ、タスクの追跡, 変更管理！
！

！

ドキュメントやソースコードの変更要素 (Issues) の追跡と管理TEST
各種の成果物の粒度の調整と各成果物をつなぐ重要な役割
開発者とアプリの価値をわかりやすく示すのに欠かせない

ライブ ドキュメント共有
企画や仕様書を陳腐化させない。ドキュメントから協調、思考と経験の形式知化

チーム内外のコミュニケーション インフラ
タイムラインでアクティビティを通知、対処の円滑化PROD

関連リソース
Delphi と DUnit での継続的デリバリーについて
http://re-workstyle.com/articles/continuous-integration-with-delphi-and-dunit/

RAD Studio での Git 利用について
http://re-workstyle.com/articles/rad-studio-git/

DUnit の概要
http://docwiki.embarcadero.com/RADStudio/XE5/ja/DUnit̲%E3%81%AE%E6%A6%82%E8%A6%81

DUnit での NUnit 互換結果ファイル出力 (XMLTestRunner2.pas)
http://cc.embarcadero.com/Item/28239

DUnitX
http://www.finalbuilder.com/Resources/Blogs/PostId/697/introducing-dunitx

about AtlassianWe♡

SoftwareAtlassian Solution
ビジネス ／ 企画We

開発 ／ テスト♡

Software

チーム ／ マネージメント

運用 ／ ビジネスユニークなビジネスモデル

We♡

ビジネス モデル

Software
成長し続ける✓ 営業 0 名✓ 枯れた分野で急成長✓ エキスパートによる付加価値✓ ユーザーの支持が母体✓ 開発にフォーカス✓ イノベーションへの貢献

アトラシアンの文化を体験しに、遊びに来てください！

マリノスタウン内
Google Maps: 「アトラシアン」

最寄り駅: 各線 横浜駅から徒歩 10分
みなとみらい線 新高島から徒歩 5 分

アトラシアンの文化を体験しに、遊びに来てください！

We♡

Softwareアトラシアン製品

10 ユーザー $10 から
スターターライセンスは、全額をチャリティーに寄付

無償提供
OSS コミュニティや、クラスルームに無料で提供
We
Software
全製品を無料で評価♡

30日フル機能を評価

オンプレミスとクラウド
ダウンロード版とオンデマンド版を提供

無料で講演いたします
出張セミナーなどお気軽にご連絡ください。
メール:	  tnagasawa@atlassian.com	  @tomohn	  Facebook:	   Tomoharu.Nagasawa
Twitter: