« 2014年10月 | トップページ | 2015年1月 »

2014年12月

2014年12月28日 (日)

2014年の振り返り

今年もあとわずかになりました。少し早い気もしますが、ちょっと仕事が立て込んでいるので今年を振り返ってみます。


ちょっと周りで流行ってるっぽいので、今年のアクセス数TOP10を上げてみました。

1 Windows 7 & Server 2008 R2 SP1の正しい適用
2 TFSでの分岐について:基本的な考え方
3 TFS2012ライセンスメモ
4 TFSの分岐について:ワークスペースの作成
5 ユーザコントロールとカスタムコントロールの違い?
6 Hyper-Vで「開始中」のままになったら
7 TFSの分岐について:マージ
8 TFSの分岐について:MAINブランチをどうするか
9 TFSの分岐について:マージで競合が発生したとき
10 コードカバレッジ分析の色分けがちゃんと表示されないとき

SP1の適用が1位なのはちょっと不本意ですが、それ以外にも分岐に関するものが大半を占めていたのも予想外でした。明確な正解がないので、皆さんいろいろ検索されているということでしょうか。


去年の振り返りで、「仕事でもTFSを使おうかと画策している」と書きましたが、ようやく仕事でもTFSを使い始めました。(とは言っても、Javaなんですが(^-^; )
これで最初の一歩は踏み出せました。


しかし、去年に引き続き仕事が重なったままだったので、勉強会などで登壇させていただく機会は少なかった(なぜか、12月の同日に2回w)のですが、いろいろ大きな機会をいただくことができました。

まずは共著で書籍を発行させていただくことになりました。
TECHNICAL MASTER はじめてのTeam Foundation Server [Kindle版]

発行当初も4店舗限定での発売となり、今となっては電子書籍のみの状態で少し寂しい状態ですが、こういった機会に巡り合えたことに感謝です。

また、初めてMicrosoft MVP Awardを受賞させていただくことができました。

本当にこの2つは大きな機会でした。ありがとうございました。


残念だったのは、これも去年の振り返りで書いてたのですが、TFSのハンズオンができませんでした。来年にはVisual Studio/Team Foundation Serverも次のバージョンが出るでしょうから、新しいバージョンでのハンスオンもやってみたいです。


今年もいろいろな方々にお世話になりました。来年もよろしくお願いいたします。<(_ _)>

2014年12月20日 (土)

勉強会に参加してきました

この時期は毎年恒例でCLR/Hさんカソウ化Dayがあるのですが、今年は品川で開催されました。
しかも、以前に
Release Managementの導入をされたソフトバンク・テクノロジー株式会社の古賀さんからお誘いがあり、隣の部屋で開催されていたPlus Programming .net 勉強会にも飛び込みで参加させていただきました。

※ソフトバンク・テクノロジー株式会社様の導入事例紹介はこちら

 

予定では、発表はPlus Programming .net 勉強会のLTだけだったのですが、CLR/Hさん側でも15分のセッションを行わせていただけることになりました。

CLR/Hさんでは、最近ブログにも書いたGradleとの連携の概要について話しました。

つながるJavaとTFS ぱーと2

※似たようなスライドが去年上がってますが、なんせ喋る30分前に「30分ほど時間を埋めてほしい」という無茶ブリが発動したので、テンプレートとして前のスライドを使いましたw

 

 

Plus Programming .net 勉強会さんではお初だったのとLTでしたので、個人的に思いつくTFSの機能関連のキーワードを上げてみました。

Team Foundation Serverで出てくるキーワード

 

また、CLR/HさんでMS荒井さんからご提供いただいた「プログラミング Windows Runtime」を頂きました。ありがとうございます。<(_ _)>

最後に、「カソウ化Dayは怖い」

(詳細は怖くて言えません(;゚Д゚)

2014年12月 7日 (日)

TFSとGradleの連携7:Ivy環境作成1

Ivyはライブラリの依存関係を管理するツールです。.NETでいうところのNuGetといった感じでしょうか。
今回の環境を作成するときにちょっと調べてみたのですが、具体的な手順を書いたものが見当たらなかったので、簡単にまとめてみました。

 

プロジェクトサイトはここになります。http://ant.apache.org/ivy/

Apache Projectなんですね)

ちなみに、今回使用したバージョンは2.4.0-rc1です。
前提として、
JDKAntが必要ですので、事前にセットアップしておきます。
環境変数の
PATHに、「[Antインストール先フォルダ]\bin」を追加しておいてください。

インストールですが、プロジェクトサイトにある「Download」からbinaryをダウンロードし、解凍します。解凍先にある「ivy-2.4.0-rc.jar」を、Antインストールフォルダにある「lib」フォルダにコピーするだけです。


次に、ライブラリを格納しておくリポジトリを作成します。

[Ivyインストール先]\src\example\build-a-ivy-repository」フォルダにある「build.xml」を編集します。
→リポジトリの作成先を「
[Ivyインストール先]\src\example\build-a-ivy-repository」から「C:\ivy-repository」に変更します。
変更点は2点です。
1.${basedir}」を「${repositorybase}」に変更する。

2.<project~」の下に、「<property name="repositorybase" value="c:/ivy-repository"/>」を追加する。
Gradle037


変更したら、コマンドプロンプトで[Ivyインストール先]\src\example\build-a-ivy-repository」に移動し、「Ant -f build.xml」を実行すると、「C:\ivy-repository」を作成します。


この状態は「ライブラリを格納する器を作った」だけなので、実際に使用するライブラリをパブリックリポジトリからダウンロードする必要があります。

実は、前に実行したbuild.xmlの中で、「common-lang」はパブリックリポジトリからローカルリポジトリにダウンロードするよう、タスクが定義されています。
Gradle038

次に、このタスクをベースにして、各種ライブラリをダウンロードするbuild.xmlを別に作成します。

TFSとGradleの連携6:build.gradleの内容

今回使用したbuild.gradleの内容について説明です。

まずはGradle用プラグインの宣言です。
これは使用したいプラグインを記述するだけです。
但し、JUnitについてはJavaプラグインに含まれているので指定する必要はありません。
Gradle028


次は各タスクに対する共通的な設定です。
Gradle029

8行目でソースコードの文字コードはUTF-8であること、9~10行目でFindBugsとcheckstyleのチェック内容でエラーが検知されても、ビルドは中断しないことを指定しています。


次はソースコードの格納場所についてです。
Gradle030

今回、ソースコードのフォルダ構成はGradle標準ではなく、Antの構成にしているので、リリース対象のソースコードとテスト用のソースコードのパスを変更します。


次は各種ライブラリのリポジトリに関するものです。
Gradle031

ざっというと
 ・リポジトリはIvyを使用する
 ・リポジトリの公開パスは「http://tfsba01/ivy_repos
 ・ライブラリの保存場所のパスは「artifact ~」のパターンで検索
 ・依存関係の情報は「ivy "~」で指定されたファイルを参照する
という設定です。もう少し詳細な内容は別の機会にしたいと思います。


次は使用するライブラリの指定です。
Gradle032

これは
 ・テスト用ソースのコンパイルでは、junitのバージョン4.0以上とhamcrest-coreの1.0以上を使用する
 ・checkstyle実行時では、checkstyleのバージョン6.1.1を使用する
という内容になっています。
ここで指定したライブラリが別のライブラリを使用する場合は、repositoriesで指定したリポジトリを使用してライブラリ間の依存関係を解決します。


次はJarファイルの作成についてです。
Gradle033

出力するファイル名を指定します。ちなみに、出力先フォルダは「libs」になります。


次はjacoco(テストカバレッジ取得)の動作設定についてです。
Gradle034

最初のブロック(「jacoco {~」)で、使用するバージョンを指定しています。
なぜか、jacocoだけはここで指定します。

2番目のブロック(「test {~)で、jacocoの設定をします。今回は、カバレッジ取得結果は毎回上書き(前回作成したファイルに追記しない)としているだけです。

3番目のブロック(「jacocoTestReport {~)で、レポートに関する設定をします。
「reports {~」のブロックで、xmlレポートとcsvレポートは出力しない設定にしています。
最後の1文は、タスクの依存関係の設定で、「buildタスクが終わったらjacocoTestReportタスクを実行する」ように指定しています。
ちなみに、このビルドスクリプトでは「jacocoTestReport」が最後のタスクになるので、ビルド定義の「Gradle task(s)」に、この「jacocoTestReport」を指定し、全てのタスクを実行するようにしています。


次はcheckstyleに関する設定です。
Gradle035

「checkstyleMain」が、リリース対象のソースコードに対するタスク設定になります。
「configFile=~」で、チェックパラメータファイルの保存先を指定しています。
「doLast {~」で、Antを個別に呼び出し、事前に作成されたxml形式の結果ファイルを元に、「checkstyle-simple.xsl」テンプレートを使用し、html形式のレポートを作成しています。
※「doLast」は、「タスクの一番最後に実行します」といった感じの宣言です。

「checkstyleTest」は、テスト用ソースコードに対するタスク設定ですが、「<< {}」としているので、「何もしない」ということになります。


次は、FIndBugsに対する設定です。
Gradle036

「findbugsMain」は、リリース対象のソースコードに対するタスク設定になります。
「reports {~」で、xml形式のレポートは生成せず、html形式のレポートは生成する指定にしています。
checkstyleのときと違い、レポート生成は何も指定しなくても自動で実行してくれます。

「findbugsTest」は、「checkstyleTest」同様テスト用ソースコードに対するタスク設定ですが、「<< {}」としているので、「何もしない」ということになります。


概要としては以上になります。各プラグインの詳細については、Gradleのドキュメントページにありますので、そちらを参照してください。


次は、ライブラリのリポジトリとして今回使用した「Ivy」についてです。

TFSとGradleの連携5:TFSビルド定義作成

TFSのチームプロジェクトに対して、ビルド定義を作成します。

Build Extensionの時と違い、EclipseTEEではなくTeam Explorerから作成します。

Gradle連携のために「プロセス」タブの部分を変更します。

「ビルドプロセステンプレート」の右端にある「詳細の表示」をクリックすると、プロセステンプレートの詳細情報が展開されます。

Gradle006_2

テンプレート選択の右にある「新規作成」をクリックすると、ビルドプロセステンプレートの参照画面が表示されます。
Gradle007_2

ここで連携2で
Gitリポジトリにコミットした「GradleGitTemplate.12.xaml」を指定します。チームプロジェクト/リポジトリ名/分岐まではコンボボックスで選択するだけです。リポジトリのパスは、ローカルのGitリポジトリに保存しているファイルを指定します。

Gradle008

Gradle009

Gradle010

プロセステンプレートの読み込みが完了すると、下側のビルドプロセスパラメータが変わります。
Gradle011

Gradle012

Gradle013

Gradle用パラメータやAzure連携用パラメータがいろいろありますが、今回使用するのは「2. Gradle Build」の部分だけです。

以下の設定を行います。

 1. Gradle Command

  →'gradle'

 2. Gradle Build Script

  →連携4で作ったビルドスクリプトファイル名(build.gradle

 3. Gradle Task(s)

  →実行したいタスク名。複数指定することも可能です。

   今回は、一番最後に実行するタスク「jacocoTestReport」を指定しています。

 

その他のタブの項目は、通常のTFSビルド定義と同じです。

 

なお、プロセステンプレートの読み込み後、ビルドプロセスパラメータにこんなエラーが出る場合があります。
Gradle014

このときは、ビルドコントローラーに指定するカスタムアセンブリのパス指定がちゃんとできていないので、ビルドコントローラーのカスタムアセンブリのパス指定を再度設定後、ビルドサービスの再起動を行い、ビルド定義を再度作成するか、一度保存したあと1回定義画面を閉じて開きなおす必要があります。
→「最新の情報に更新」ボタンがありますが、これはビルドプロセスファイルを最新化するだけで、カスタムアセンブリのロードはしてくれません。カスタムアセンブリのロードはビルド定義画面を開く時だけです。

 

基本的にはここまで設定すればGradleでのビルドが実行できます。

今回のbuild.gradleで、「repositories」に対して「mavenCentral()」を追加し、パブリックリポジトリを参照するようにしてしまえば、このままでも動作します。サンプルのビルドスクリプトに「mavenCenter()」がないのは、ローカルリポジトリを使用した動作を確認したかったので、パブリックリポジトリを参照させたくなかったからです。

 

次からは、build.gradleの内容を少し説明します。

TFSとGradleの連携4:build.gradle作成

Antでのbuild.xmlにあたるGraldeのビルドスクリプト(build.gralde)の作成です。

具体的な作り方はGradleのサイトの内容で大半は確認できますので、ここでは完成版を置いておきます。

def defaultEncoding = 'UTF-8'

apply plugin: 'java'
apply plugin: 'findbugs'
apply plugin: 'checkstyle'
apply plugin: 'jacoco'

[compileJava, compileTestJava]*.options*.encoding = defaultEncoding
[findbugsMain, findbugsTest]*.ignoreFailures = true
[checkstyleMain, checkstyleTest]*.ignoreFailures = true

sourceSets {
  main.java.srcDir 'src'
  test.java.srcDir 'testsrc'
}

repositories {
  ivy {
    url "http://tfsba01/ivy_repos"
    layout "pattern", {
      artifact "[organisation]/[module]/[revision]/jars/[artifact]-[revision].[ext]"
      artifact "[organisation]/[module]/[revision]/bundles/[artifact]-[revision].[ext]"
      ivy "[organisation]/[module]/[revision]/ivys/ivy-[revision].xml"
    }
  }
}

dependencies {
  testCompile group: 'junit', name: 'junit', version: '4.+'
  testCompile group: 'org.hamcrest', name: 'hamcrest-core', version: '1.+'
  checkstyle group: 'com.puppycrawl.tools', name: 'checkstyle', version: '6.1.1'
}

jar {
  archiveName = 'GradleSample01.jar'
}

checkstyleMain {
  configFile = file('./DefinitionFiles/CheckStyle/EditChecks1.xml')

  doLast {
    ant.xslt(in: checkstyleMain.reports.xml.destination,
             style: new File('DefinitionFiles/CheckStyle/checkstyle-simple.xsl'),
             out: new File(checkstyleMain.reports.xml.destination.parent, 'main.html'))
  }
}

jacoco {
  toolVersion = "0.7.2.201409121644"
}

jacocoTestReport {
  reports {
    xml.enabled false
    csv.enabled false
  }
}
jacocoTestReport.dependsOn build

test {
  jacoco {
    append = false
  }
}

findbugsMain {
  reports {
    xml.enabled = false
    html.enabled = true
  }
}

task checkstyleTest(overwrite: true) << {}

task findbugsTest(overwrite: true) << {}


大雑把にいうと、
 ・ライブラリのリポジトリを指定
 ・pluginの指定
 ・Taskのプロパティを指定
をすれば動かせるイメージです。
各種プラグインが公開されているので、やりたいなと思ったことは基本できそうです。
内容としては、以前に書いた「TFSでJavaのビルド環境構築 in 2012 その1:概要」とほぼ同じ内容ですが、Gradleのほうがすっきりしている感じです。

次は、ビルド定義の作成です。

TFSとGradleの連携3:Gradle環境作成

Gradle環境の作成はいたって簡単です。
まずはJava JDKをインストールします。
自分の環境ではJava 1.8ではうまく動かなかったものがあるので、今回はJava SE 1.7を使ってます。
インストールしたら、環境変数「JAVA_HOME」を作成し、インストール先フォルダを設定します。

次にGradleのインストールです。
http://www.gradle.org/ から右端にあるダウンロードボタンを押すと最新版のGradleがダウンロードできます。(確認している最中に2.2から2.2.1にバージョンがUpしてました(^-^; )
Gradle005


ZIP形式を解凍したと、環境変数「GRADLE_HOME」に解凍先のフォルダを指定すれば終了です。
とりあえずコマンドプロンプトを起動し、「gradle -v」を実行してバージョン情報が表示されればちゃんと動きます。
Gradle027



次はビルドスクリプトの作成です。

TFSとGradleの連携2:TFS-Gradle-pluginのインストール

TFSGradleの連携1:概要」 の続きです。

まずはTFSのチームプロジェクトを作成しておきます。
プロセステンプレートは何でもかまいませんが、バージョン管理システムはGitを選択してください。SharePointサイトも不要です。

チームプロジェクトができたら、Eclipse上でJavaプロジェクトを作成し、ソースファイルなどをコミット&プッシュします。
Gradle001


今回は「TFSでJavaのビルド環境構築 in 2012」で使ったEclipseのJavaプロジェクトを使用しています。
前回からの変更は、
 ・checkstyleのチェック内容を定義したファイルを「/DefinitionFiles/CheckStyle/EditChecks1.xml」としてソース管理に追加
 ・checkstyleのレポートテンプレートも「/DefinitionFiles/CheckStyle」に追加
しています。
(「/BuildGradle」はGradle関連なので、後で説明します)

Gradleに慣れている方は気が付かれていると思いますが、Gradle標準のフォルダ構成ではなく、今までAntで使ってきたフォルダ構成のままにしています。←Antからの移行を考えてます。

次に、TFS-Gradle-pluginをGitHubからクローン、もしくはZIPでダウンロードしてきます。
クローンしたファイルの中で、「/GradleGitTemplate.12.xaml」と「/BuildTemplate/BuildProcess/bin/BuildProcess.dll」の2つをチームプロジェクトの「/BuildGradle」に追加します。ちなみに、「BuildProcess.dll」だけがGradleビルド用のプログラムで、「GradleGitTemplate.12.xaml」はビルドプロセステンプレートファイルです。
インストールはこれだけです。

最後に、TFSのビルドコントローラーに対して、「buildprocess.dll」を参照するように設定変更します。
Gradle002

Gradle003

Gradle004

設定変更した後は、必ずビルドサービスの再起動をします。


次はビルドエージェント上にGradle環境を作成します。

TFSとGradleの連携1:概要

またもや1ヶ月以上間が空いてしまいました。(^-^;

突然ですが、無意識にこの本を購入していました。
○Gradle徹底入門
51ev2zpcwll__aa160_


AntやMavenの後釜と言われているGradleです。Androidのビルド環境として有名(らしい)ですね。

斜め読みしたあと、「TFSと連携できるんだっけ?」と思って検索してみたら、こんなところにこんなものがありました。
Microsoft Open TechnologiesのGradleプロジェクトサイト
Snapcrab_20141204_212741_no0000

ここの「News」タブにある「Using Gradle for TFS Build Automation」に飛ぶと、TFSとGradleを連携についてのページがあり、ページ下部に連携機能のGitHubサイトへのリンクがあります。

GitHub:TFS-Gradle-plugin
Snapcrab_20141204_214303_no0000

こいつを導入すれば、TFSとGradleの連携ができるそうです。しかも、Azure Storageへの配置・Azure上のWindows VM/Linux VMへのデプロイまで対応しているようです。

自分は実際に使ってみないとわからないタチなので、以前TFS Build Extensionでやってみた内容で環境構築してみました。(なので、Azure連携はまだです)

今回の環境はこんな感じです。
○ADサーバ
 Windows Server 2012 R2
○TFSサーバ
 Windows Server 2012 R2
 Team Foundation Server 2013 Update 4
○Eclipse開発環境
 Windows 8.1 Pro with Update
 Eclipse 4.4(Luna)
 Team Explorer Everywhere 12.0.2
 JDK SE 7
○TFS ビルドコントローラー兼エージェント
 Windows 8.1 Pro with Update
 IIS 6.2
 Team Foundation Server 2013 Update 4 ※ビルドコントローラー分だけインストール
 Team Explorer
 JDK SE 7
 Gradle 2.2
 JUnit 4.11 + hamcrest-core-1.3
 checkstyle 6.1
 findbugs 3.0.0
 jacoco 0.7.2
 Apache Ant 1.9.4
 Apache Ivy 2.4.0 rc1
 ※Gradleから参照するJava関連のライブラリのリポジトリとして、ビルドコントローラー内にローカルでApache Ivy環境も構築しています。

Antの時と結果は変わりませんが、実際にビルドを実行したときのスクリーンショットです。
○ビルド結果
Gradle015

○出力先フォルダ
Gradle016

○checkstyleのレポート
Gradle017

○FindBugsのレポート
Gradle018

○jacocoのレポート
Gradle019

○JUnitのレポート
Gradle020



次はTFS-Gradle-pluginのインストールについてです。

« 2014年10月 | トップページ | 2015年1月 »

無料ブログはココログ