ci to cd、ソフトウェアの継続的アプローチ
Post on 31-May-2015
752 views
DESCRIPTION
プログラミング生放送勉強会 第28回@東北大学の発表資料。 http://pronama.azurewebsites.net/2014/03/29/pronama-28-at-sendai/TRANSCRIPT
CI to CD、ソフトウェア開発の継続的アプローチ
プログラミング生放送勉強会
第28回@東北大学
2014/05/31(土 ) You&I
ジコ、ショウカイ。
H/N: You&I(読み:ユーアンドアイ)
SNS: @you_and_i
出身:生まれも育ちも名古屋市
年齢: 30代中盤
本職:商学部出身の職業プログラマ
言語: C++, C#他
所属:プログラミング生放送勉強会 名古屋支部
名古屋アジャイル勉強会
わんくま同盟名古屋勉強会
CI to CD、ソフトウェア開発の継続的アプローチ
AGENDA
1. アジャイル開発とは
2. CIの概念
3. CIからCDへの展開
4. まとめ
CI to CD、ソフトウェア開発の継続的アプローチ
1.アジャイル開発とは
CI to CD、ソフトウェア開発の継続的アプローチ
BIGLOBEのアジャイルちゃんってどうなったん?
http://engineer.biglobe.ne.jp/201304/article_1.html
1.アジャイル開発とは(1/12)
アジャイルソフトウェア開発宣言
私たちは、ソフトウェア開発の実践あるいは実践を手助けをする活動を通じて、よりよい開発方法を見つけだそうとしている。
この活動を通して、私たちは以下の価値に至った。
プロセスやツールよりも 個人と対話を、包括的なドキュメントよりも動くソフトウェアを、契約交渉よりも 顧客との協調を、計画に従うことよりも 変化への対応を、
価値とする。すなわち、左記のことがらに価値があることを認めながらも、私たちは右記のことが
らにより価値をおく。
CI to CD、ソフトウェア開発の継続的アプローチ
1.アジャイル開発とは(2/12)
私たちは以下の原則に従う:
1. 顧客満足を最優先し、価値のあるソフトウェアを早く継続的に提供します。
2. 要求の変更はたとえ開発の後期であっても歓迎します。変化を味方につけることによって、お客様の競争力を引き上げます。
3. 動くソフトウェアを、2-3週間から2-3ヶ月というできるだけ短い時間間隔でリリースします。
4. ビジネス側の人と開発者は、プロジェクトを通して日々一緒に働かなければなりません。
5. 意欲に満ちた人々を集めてプロジェクトを構成します。環境と支援を与え仕事が無事終わるまで彼らを信頼します。
6. 情報を伝えるもっとも効率的で効果的な方法はフェイス・トゥ・フェイスで話をすることです。
7. 動くソフトウェアこそが進捗の最も重要な尺度です。
8. アジャイル・プロセスは持続可能な開発を促進します。一定のペースを継続的に維持できるようにしなければなりません。
9. 技術的卓越性と優れた設計に対する不断の注意が機敏さを高めます。
10. シンプルさ(ムダなく作れる量を最大限にすること)が本質です。
11. 最良のアーキテクチャ・要求・設計は、自己組織的なチームから生み出されます。
12. チームがもっと効率を高めることができるかを定期的に振り返り、それに基づいて自分たちのやり方を最適に調整します。
CI to CD、ソフトウェア開発の継続的アプローチ
1.アジャイル開発とは(3/12)
アジャイル開発と言えば、アジャイルマニフェスト!
アジャイルマニフェストでは4つの価値と12の原則が定義されています。
そしてそのアジャイルマニフェストに基づいたアジャイルプラスティスが多数存在します。
ちょっと時系列でアジャイル開発の歴史を見てみましょう。
CI to CD、ソフトウェア開発の継続的アプローチ
1.アジャイル開発とは(4/12)
196X年:トヨタ生産方式体系化
1986年:Scrum命名元論文「The New
New Product Development Game」発表
1988年:リーン生産方式命名記事「Triumph of the Lean Production
System」発表
1993年:Scrum体系化
1996年:eXtreme Programming体系化
2001年:アジャイルマニフェスト制定
CI to CD、ソフトウェア開発の継続的アプローチ
1.アジャイル開発とは(5/12)
今、アジャイル開発と言えばScrumを採用する事が多いです。
またScrumにXPのプラクティスを組み合わせる事も多いです。
そのXPのプラクティスの1つに今回のテーマのCI(Continuous Integration:
継続的インテグレーション)があります。
CI to CD、ソフトウェア開発の継続的アプローチ
1.アジャイル開発とは(6/12)
1986年のScrum命名元論文発表
Scrumは1986年に野中郁次郎&竹内弘高両教授により発表された論文「The
New New Product Development Game」にて日本の製造業における新製品開発の流れがラグビーのスクラムに例えて説明された事にその名前は由来します。
詳細は平鍋健児さんと野中先生による著書「アジャイル開発とスクラム」を読んでみて下さい。
CI to CD、ソフトウェア開発の継続的アプローチ
1.アジャイル開発とは(7/12)
1993年のScrum体系化
1986年の野中 郁次郎&竹内弘高両教授により発表された論文を受けて、1993年にKen Schwaber博士とJeff Sutherland博士によってScrumは体系化されました。
Scrumの特徴
三本柱:検査、適応、透明性
チーム構成:プロダクトオーナー、開発チーム、スクラムマスター
成果物:プロダクトバックログ、スプリントバックログ、プロダクトインクリメント
イベント:スプリント、スプリント計画ミーティング、デイリースクラム、スプリントレビュー、スプリントレトロスペクティブ
CI to CD、ソフトウェア開発の継続的アプローチ
http://scrumprimer.org/jp/anime
1.アジャイル開発とは(9/12)
1960年頃にトヨタ生産方式が体系化
トヨタ生産方式の概念
http://www.toyota.co.jp/jpn/company/vi
sion/production_system/index.html
自働化 (にんべんの付いた自動化)
Just-In-Time
この2つの概念を実現する為に、絶え間ない改善活動が行われ、かんばん方式などの手法が生み出されてきました。
詳細は、大野耐一著「トヨタ生産方式」を読んでみて下さい。
CI to CD、ソフトウェア開発の継続的アプローチ
1.アジャイル開発とは(10/12)
1988年のTriumph of the LeanProduction Systemの記事発表
リーン生産方式は、MITの研究者がトヨタ生産方式を研究し再体系化したものです。リーンという言葉が最初に使われたのがこの記事になります。
このようにトヨタ生産方式の概念は、その理念や原則を元に様々な分野に応用されています。
最近だとリーンスタートアップ等がその一例。
CI to CD、ソフトウェア開発の継続的アプローチ
トヨタ
生産方式
リーン
生産方式
リーンソフト
ウェア開発
アジャイル
開発
1.アジャイル開発とは(11/12)
1999年のXP体系化
XPは、Kent Beck氏による著書「eXtremeProgramming explained」 (日本語訳:XP エクストリーム・プログラミング入門)としてまとめられたアジャイル開発手法の一つです。
XPのプラクティス(一部)
1週間サイクル(イテレーション)、ユーザーストーリー、コーディング規約、スタンドアップミーティング(朝会)
ペアプログラミング、YAGNI(You Aren‘t Going to Need It.)、Spike
CI(継続的インテグレーション)、 TDD(テスト駆動開発)、リファクタリング、コードの共同所有
CI to CD、ソフトウェア開発の継続的アプローチ
http://www.extremeprogramming.org/map/project.html
CI to CD、ソフトウェア開発の継続的アプローチ
2.CIの概念
CI to CD、ソフトウェア開発の継続的アプローチ
CI ≠ 超祝う
2.CIの概念(1/9)
ここまでの説明流れで、CIの概念が出てくるまでに随分と掛かってしまいました。
ここからはCIという概念がどのようなものなのか解説していきます。
先程、何故トヨタ生産方式の説明をしたのかが実はここで繋がってきます。繋がるはずです。
CI to CD、ソフトウェア開発の継続的アプローチ
2.CIの概念(2/9)
まずは用語から
Continuous:継続的
動詞「continue」の形容詞版ですね。
連続したとか絶え間ないという意味です。
Integration:インテグレーション
動詞「integrate」の名詞版ですね。
ソフトウェア開発ではちょくちょく使われる単語ですね
SIer = System Integrater
IDE = Integrated Development Environment
統合とか結合という意味です。
CI to CD、ソフトウェア開発の継続的アプローチ
2.CIの概念(3/9)
CIサーバー製品
OSS
Jenkins(旧Hudson)
GitLab CI
商用
Microsoft Visual Studio Online/TFServer
Rational Team Concert
Atlassian Bamboo
Travis CI
CI to CD、ソフトウェア開発の継続的アプローチ
2.CIの概念(4/9)
CIサーバーで出来る事
1. タスク実行
実行タイミング制御
スケジュール
RPC(Remote Procedure Call)
バージョン管理リポジトリへの接続
ソースコードの統合処理※後述
2. タスク実行結果の通知
Chat
XFD(eXtreme Feedback Device)
パトランプ的なデバイス
3. プラグイン拡張
CI to CD、ソフトウェア開発の継続的アプローチ
2.CIの概念(5/9)
ソースコードの統合処理の詳細
静的解析処理
コーディング規約チェック
コードの重複チェック
ビルド
コンパイル
リンク
メモリ使用量計測(mapファイル)
テスト
ユニットテスト
SILS(Software In the Loop Simulation)
ベンチマーク
コミットのリバート
デプロイ※CIからCDの項で解説
CI to CD、ソフトウェア開発の継続的アプローチ
2.CIの概念(6/9)
CIサーバーが目指している事
アジャイルマニフェストと照らし合わせると・・・
包括的なドキュメントよりも動くソフトウェアを価値とする。
顧客満足を最優先し、価値のあるソフトウェアを早く継続的に提供します。
動くソフトウェアを、2-3週間から2-3ヶ月というできるだけ短い時間間隔でリリースします。
動くソフトウェアこそが進捗の最も重要な尺度です。
CIは、短い時間間隔で継続的に動くソフトウェアをリリースする為のアジャイルプラクティスって事ですね。
CI to CD、ソフトウェア開発の継続的アプローチ
2.CIの概念(7/9)
CIサーバーが目指している事 (続)
そして大事なのは、手順の再現性と属人性の排除です。自動化により、ソースコードの統合処理の手順は何度実行しても同じ結果が得られます。
まず前提として、Scrumが製造業の新製品開発のやり方に由来しているように、ソフトウェア開発は知識創造作業です。
ソフトウェア開発は、手順は同じになる事はあっても、毎回異なる作業内容になるはずで、間違っても工場でのライン生産作業とは異なる性質を持ちます。
CI to CD、ソフトウェア開発の継続的アプローチ
2.CIの概念(8/9)
CIサーバーが目指している事 (続2)
ここから、トヨタ生産方式のにんべんの付いた自動化に繋がる話になりますが、豊田自動織機はエラーが発生した際に自動停止する事で不良品を減らし、且つ織機の属人性を排除する事で、1人の作業者が複数台の織機を管理できるようになりました。
そして自動車生産では、エラーが発生した事を周りに知らせる行灯(あんどん)のような仕組みも出てきました。つまりはXFDですね。
CI to CD、ソフトウェア開発の継続的アプローチ
2.CIの概念(9/9)
CIサーバーが目指している事 (続3)
ソフトウェア開発は知識創造作業だと先程説明しましたが、ソフトウェア開発作業の中には工場のライン生産のように繰り返し同じ手順を踏む作業があります。ビルドやテストがそうですね。
こういう部分について属人性を排除して自働化する事で、ミスが減り作業の効率が上がります。
その自働化を実現するツールがCIサーバーになる訳です。
CI to CD、ソフトウェア開発の継続的アプローチ
3.CIからCDへの展開
CI to CD、ソフトウェア開発の継続的アプローチ
ワタシハ プロナマチャン シンザングミ デス
I am a newcomer of the Pronama-Chan Fan Community.
3. CIからCDへの展開(1/7)
CIについて理解が深まった所で、いよいよCD(Continuous Delivery:継続的デリバリー)です。
CDはCIに加えて、動くソフトウェアを実行する為の環境を提供する仕組みの事を指します。
CDの環境は、基本的にCIサーバーに実行環境を加えたものになります。
CI to CD、ソフトウェア開発の継続的アプローチ
3. CIからCDへの展開(2/7)
ここでまたアジャイルマニフェストと、照らし合わせてみると、
顧客満足を最優先し、価値のあるソフトウェアを早く継続的に提供します。
動くソフトウェアを、2-3週間から2-3ヶ月というできるだけ短い時間間隔でリリースします。
折角動くソフトウェアを作っても、動かせる環境がなくては意味がありませんね。そもそも動くって言えません。
CI to CD、ソフトウェア開発の継続的アプローチ
3. CIからCDへの展開(3/7)
OSSなライブラリやフレームワークなどでは良くNightlyビルドが行われていたりしますが、Nightlyビルドのパッケージはただパッケージングしただけで、動くソフトウェアである保証はありません。そういう意味で継続的デリバリーとは異なります。
CI to CD、ソフトウェア開発の継続的アプローチ
3. CIからCDへの展開(4/7)
そして短い時間間隔で何度もリリースする行為もとても重要です。
開発の終盤に1回きりでリリースする場合、リリースパッケージには何を含めるのかを膨大な成果物からかき集めてきたり、実行に必要な設定を調査したりと、リリース準備にも手間が掛かります。
開発初期からリリース準備を積み重ねる事で、テスターの方にも実行環境をいち早く提供できるようになります。
CI to CD、ソフトウェア開発の継続的アプローチ
3. CIからCDへの展開(5/7)
継続的デリバリーは、近年のクラウドサービスでのデプロイだけではなく、TFServerやVagrant等のように仮想環境と組み合わせて実行したり、デスクトップアプリならばインストーラーを作成する事で実行環境を提供する事が出来ます。
CI to CD、ソフトウェア開発の継続的アプローチ
3. CIからCDへの展開(6/7)
継続的デリバリーで重要な事は、ツールを使ったりする事よりも、開発しているアプリケーションに合わせて、実行環境を構築する手順(=デプロイメントパイプライン)を作成し、それを自働化する事です。
CI to CD、ソフトウェア開発の継続的アプローチ
3. CIからCDへの展開(7/7)
CIやCDの環境を構築するのは手間が掛かりますが、CI&CDを実施する事による恩恵はとても大きいです。
昨年伊勢神宮の式年遷宮がありましたが、CI&CD環境を1度構築してお終いでは技術継承が行われません。
定期的にデプロイメントパイプラインを見直し、CI&CD環境を再構築する事も重要です
CI to CD、ソフトウェア開発の継続的アプローチ
4.まとめ
CI to CD、ソフトウェア開発の継続的アプローチ
4.まとめ
準備の時間がなくてツールを使ったデモは今回ありません。
ソフトウェア開発は、工場のライン生産とは異なり、知識創造作業です。
CIやCDの仕組みは、自働化により煩わしい繰り返し作業から開発者を解放し、その分を知識創造作業に集中させる事が出来ます。
アプリケーション毎のデプロイメントパイプラインを構築し自働化しましょう。
CI to CD、ソフトウェア開発の継続的アプローチ
参考書籍
継続的インテグレーション入門
継続的デリバリー
チーム開発実践入門
CI to CD、ソフトウェア開発の継続的アプローチ