SlideShare a Scribd company logo
「Jenkins+α」で開発環境が
    みるみる良くなる
    ~VisualC++編~

       粉川 貴至
    @Kokawa_Takashi
自己紹介
• @Kokawa_Takashi
CIしてますか?
 • 継続的インテグレーション
   – Continuous Integration(統合、統一)
   – 常に動く(ビルドが通る)状態を作る

 • アジャイル開発ツール三種の神器
   – 「SCM、BTS、CI」

 • 変更に強い、健全な環境を維持
Jenkinsさん
 •   CI(継続的インテグレーション)ツール
 •   作業を自動化・共有するための枠組み
 •   優秀なWebインターフェース
 •   導入が簡単!
 •   多くのプラグイン拡張!
何と言っても・・・
コマンドライン、
バッチ、
シェルスクリプト、
が動かせる!
1500行のビルドバッチ・・・。   そのまま動く!
Visual C++編
 • Jenkinsと他のツールの組み合わせ方を紹介
    – 組み合わせて使ってなんぼ

 • 具体的な説明のために環境を特定しました
   – 他の環境にも適用できます
   – というか他の環境でも使えるものが多いです
   – 考え方が同じでやり方だけ違う説明を省略
Jenkinsの起動
Jenkinsの起動




実行中のジョブ

                 ジョブ一覧   実行ボタン


          実行結果
          青:成功、赤:失敗
プラグインの管理
 – Jenkinsの管理画面から見れます
 – 更新の確認も!
Jenkins+α
 •   +自動ビルド
 •   +自動テスト
 •   +UIの自動テスト
 •   +静的解析、メトリクス分析
 •   +ドキュメント
 •   +コラボレーションツール
+自動ビルド
必須!
自動ビルド                                                    VisualStudio


• MSBuild か devenv
• MSBuild Plugin (オススメ!)
https://wiki.jenkins-ci.org/display/JENKINS/MSBuild+Plugin



• MSBuildは.NET Frameworkに入っています
  – VisualStudioのインストール不要
       – コンパイラは必要なのでWindowsSDK等で対応する
         より素直にVisualStudio入れた方が楽でした・・・。
    – C:¥WINDOWS¥Microsoft.NET¥Framework¥v○¥MSBuild.exe
自動ビルド
• バージョン管理システムとの連動
 – Subversionとの連動は post-commit hook
   か、ポーリング


            リポジトリ

   コミット                 トリガー




  作業環境                 ビルド
自動ビルド+警告検知
• Warnings Plugin
https://wiki.jenkins-ci.org/display/JENKINS/Warnings+Plugin

• チームの現状に合わせて設定
  – ベストは警告レベル4で検出0!
  – まずは「新規」検知から潰す
+自動テスト
C++のユニットテストツール
 • CppUnit, CppTest
   – 比較的歴史が長い、最近の更新頻度は低い
   – 既にテストコードがあれば○
 • GoogleTest
   – 充実したテスト機能
      • Assert+Expext,ParameterizedTest,DeathTest
 • MSTest                          VisualStudio

   – VS2008からProfessional Edition以上で利用可
      • 元はTeam Foundation Serverで使えた機能
      • データドリブンテスト(csv、XML)が良い感じ!
自動テスト
 • テスト結果をxmlで出力
    – Jenkinsが読み込んでグラフ化してくれる
    – 標準対応はJUnit形式(googletest)
 • その他のテストツールは
    – CppUnit, CppTest, MSTest…
 https://wiki.jenkins-ci.org/display/JENKINS/xUnit+Plugin
+UIの自動テスト
UIの自動テスト
 • 起動→終了だけでも効果あり!

 • Jenkinsのスレイブをテスト専用環境
   に入れてクリーンな環境で実行
  – 利用者と同じ環境設定
  – リソース忘れ等の確認
UIの自動テスト
 • UI操作自動化ツールをコマンドラインから実行
 • AutoIt
   – http://www.autoitscript.com/site/autoit/
   – Windows専用、ネイティブAPIを直接呼ぶ
 • Sikuli
   – http://sikuli.org/
   – スクリーンショットベースのスクリプト
   – Windows, Mac OS X, Linux
+静的解析&メトリクス分析
静的解析
• Cppcheck Plugin
https://wiki.jenkins-ci.org/display/JENKINS/Cppcheck+Plugin
実装漏れ(ToDo)検知
 • Task Scanner Plugin
 https://wiki.jenkins-ci.org/display/JENKINS/Task+Scanner+Plugin

 • ToDo、Note…
コーディングルールチェック
 • cpplint
 • http://google-styleguide.googlecode.com/svn/trunk/cpplint/cpplint.py

 • Violations Pluginで対応
 https://wiki.jenkins-ci.org/display/JENKINS/Violations
メトリクス分析

 コード行数や、コメント率、複雑度等を分析
 •推移や他のプロジェクトと比較して健全度を測る
メトリクス分析
 • CCCC(C and C++ Code Counter)
 https://wiki.jenkins-ci.org/display/JENKINS/CCCC+Plugin




                                             モジュール数
                                                    コード行数

                                                      複雑度




                                            コメント行数
メトリクス分析
 • Sonar (C, C#)
 https://wiki.jenkins-ci.org/display/JENKINS/Sonar+plugin

 • Java向けツール
 • C,C#はプラグイン対応
 • C++はもう一息・・・。
Sonar
+ドキュメント
ドキュメント
 • Doxygenドキュメント生成
  – コマンドラインから実行して生成
 • Doxygenの設定+Warningsプラグイン
  – コメントの無いメソッドを検出できる
+コラボレーションツール
BTSとの連動
 • Redmine,Tracとの連動
 • Jenkinsからチケット発行
       • コミット→条件判定(Python)→チケット発行
       • コードレビュー


 Python Plugin
 https://wiki.jenkins-ci.org/display/JENKINS/Python+Plugin

 ビルド方法にPythonスクリプトを追加
 WebAPIへのアクセス
コラボレーションツール
 • メール通知(標準機能)

 • Twitter、Jabber、IRC連動

 • チームメンバーと親和性の高い仕組みを入れ
   るのが○
Jenkinsstudy#4kokawa
とりあえず

触ったものを片っ端から紹介してみま
 した
どや
こんな全部乗せの巨大な
システムを見せられても
引きます

引いた人、居るでしょ?
もともと開発環境系のツールに詳しかった訳で
 はないです

プラグイン一覧を眺めて統合すると便利そうな
 ものを試す

効果が出そうなものを本番環境へ導入
Jenkins(Hudson)さんとぼくの歴史(上)
 • 2008冬:存在を知る、(Trac、GoogleTestと戯れる)
 • 2009.5:チームに自動ビルド導入
     • 設定ミスでのメール通知誤爆事件
 • 2009.6:成果物のパッケージ化、デプロイ自動化
 • 2009.8:静的解析にかけてみる→(放置ぎみ)
 • 2009.10:UIの自動テストを導入(AutoIt)
     • インストーラーの自動実行、サンプルの起動終了
 • 2009.11:(Redmineと戯れる)
 • 2009.12:ドキュメントの自動生成
 • 2009.12:チーム外への波及
Jenkinsさんとぼくの歴史(下)
 • 2010.2:メトリクス分析について真面目に考えだす(Sonar)
 • 2010.3:チケット管理との連携を考える
 • 2010.8:ツールのデータ互換性テスト導入(MSTest)
 • 2011.4:コミット→自動レビューチケット発行
 • 2011.8:静的解析(Coverity)とJenkinsとRedmineの連動
 • 2011.9:コメントの無いドキュメントのチェック
あまり活用できていないものもあります。

ユニットテストとか、
タスク対応とか、
メトリクス分析とか、
静的解析もチケットと連動するまではいまいち・・・。
• 試して使う人の反応が良いものを残す

• 工夫で使い勝手があがるものはがんばる
  – ジョブの設定
  – プラグイン作成
まずは自動ビルドから
次に効果の高そうなところ
から
関係者と価値観を共有しな
がら
継続して
カイゼンしていきましょう!
ありがとうございました!
Jenkinsstudy#4kokawa

More Related Content

Jenkinsstudy#4kokawa