サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
衆院選
bluepapa32.hatenadiary.org
今年も残りわずかとなりましたが、今年最初となるエントリーは『 G*アドベントカレンダー 2014』の第24日目の記事です。 早いもので Gradle をはじめてから、まもなく4年が経とうとしています。 今年は長年の悲願であった業務への導入にも成功し、非常に充実した一年になりました。 そこで今回は業務で実際に使ってみて、とっても便利だった機能の一つ 『カスタム Gradle Wrapper』 (実は正式名は不明...) を紹介したいと思います。 いくつものプロジェクトで Gradle を使っていると、いつもお決まりの Gradle スクリプトを書いていることに気づき、いくら Ant や Maven よりも記述量が少なくて済むとはいえ、ちょっと気が滅入る?ことがありますよね... 例えば、Java のエンコーディングを UTF-8 にする場合 tasks.withType(JavaCompil
今年も残りわずかとなりましたが、今年最初となるエントリーは 『G* Advent Calendar 2013』の12日目です。 皆さん Gradle 使ってますか? 自分はと言うと… 残念ながら、今年も業務への本格導入はできなかったので、 来年こそは導入するぞという意気込みも込めて、Gradle プラグインを作ってみました。 今回作成した Gradle プラグインですが、簡単に言ってしまうと grunt-contrib-watch のようなプラグインです。というかパクリです。 grunt-contrib-watch は ファイルが変更されたタイミングで任意のタスクを実行する Grunt (JavaScript 製ビルドツール)用のプラグインです。 最近、G* つながり?で Grunt にも少し手を出し始めているのですが、(まだ、Gradle さえ本格導入できていないのに) その中でも gr
『Eclipse で複数の Specification を一括実行する』で 実は Spock には Junit のテストスイートのような機能はありません。 つまり、Spock 自身には 複数の Specification を一括で実行する機能はないのです。 Eclipse で複数の Specification を一括実行する - bluepapa32’s Java Blog なんてことを書いてしまいましたが Spock でも ちゃんとテストスイートできます。 と言うのも... Spock の Specification は Junit4 の仕組みで動いているので Junit4 のテストスイートと同じように package com.bluepapa32; import org.junit.runner.RunWith; import org.junit.runners.Suite; impo
今年もあとわずかとなりましたが、今年最初となる(しかも 多分 今年最後になるであろう)記念すべきエントリーは 『G* Advent Calendar 2012』の21日目です。 昨年はすっかり出遅れて寂しい思いをしましたが、今年は間に合いましたよ!! で、早速ですが... 皆さん Gradle 使ってますか? (GroovyFX の話はちょっとおいといて...) 自分はというと... Gradle の正式版がリリースされたにも関わらず、今年も本格的に導入することができず、ちょっとしたプロトタイプ プロジェクトのビルドやツールとして利用する程度という残念な結果に... とは言え 泥臭い現場では ちょっとしたツールというのが結構大事なんですよね。 でも それを周りにも使ってもらおうとすると 『コマンドライン はちょっと...』 ということ よくありますよね? そこで GroovyFX ですよ!
『Wake on LAN してみる Part 3 (shutdown)』 で Linux サーバを停止する際の sudo の使い方に問題があったので まとめておくことに... 問題1 sudo のバージョンによって標準入力からパスワードを渡す方法が異なるらしい。 Ubuntu 8.04 LTS の sudo (1.6.9p10) では echo "pass" | ssh hoge@192.168.1.1 "sudo /sbin/shutdown -h now"で問題がなかったが 最新の Ubuntu 10.04 LTS の sudo (1.7.2p1) では sudo: no tty present and no askpass program specifiedのようなエラーになってしまう。どうやら echo "pass" | ssh hoge@192.168.1.1 "sudo -S
今更ながら Java で全文検索です。とりあえず Apache Lucene の デモを試してみようと思ったのですが、最新リリースの 3.5.0 の情報が見当たらなかったので、この際、誰でも 60秒で デモを試せるように Gradle スクリプトを作ってみました。 デモのために わざわざ 自分でファイルをダウンロードして、解凍して、あれしてこれして なんて面倒ですよね。 Gradle を使えば たった 3 ステップで試せます。(もちろん、今時の人たちは 既に Gradle はインストール済みですよね...) build.gradle 作成 インデックスファイル 作成 全文検索 実行 build.gradle 作成 まずは 適当なディレクトリに build.gradle を作成して 次のスクリプトをコピーしましょう。 今回は Lucene がメインなので Gradle スクリプトの細かい説明
Spock でも JUnit4 のCategory と同じように 任意のテスト (フィーチャー) だけを実行することや逆にスキップすることができます。 方法は簡単です。 あらかじめ、Specification (テストクラス) もしくは フィーチャー (テストメソッド) に 好きなだけアノテーションをつけましょう。 あとは 設定ファイルに 実行したい (もしくはスキップしたい) アノテーションを 指定するだけです。 では、まずは アノテーションを作成しましょう。 今回は Java で作成しましたが、もちろん Groovy で作成しても OK です。 package com.bluepapa32; @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.METHOD}) @interface Fas
Spockでは (Groovy でも...) Power Assert と呼ばれる とっても便利な機能で エラー情報を詳細に出力してくれるのですが、 悲しいことに Eclipse の JUnit ビューはプロポーショナルフォントで表示されるので のように非常に残念な結果になってしまいます。そんな時は のように Groovyの設定で "Use monospace font for JUnit" にチェックを入れましょう。これで のように等幅フォントでいい感じに表示されるようになります。 でも なんで普通にフォント設定で変更できないのだろうか? とっても重要な設定なのに これはちょっと分かりにくいですよね... 教えていただいた id:nobusue さんに感謝!!
Java プロジェクトでユニットテストにお困りなら Spock を導入することをオススメします。 もし、Eclipse を使っているのであれば、たった3ステップで 既存の Java プロジェクトに導入できます。 「上の承認がないと導入できないし…」 とか 「ビルドスクリプト直さないとダメだし…」 とか いろいろと考えるよりもまずは導入してみましょう。その効果をみてから考えても遅くはないです。 では、早速 Java プロジェクトに Spock を導入してみましょう。 ステップ1. Groovy-Eclipse プラグインをインストールしよう まず、最初に Groovy-Eclipse プラグインをインストールしましょう。 Groovy-Eclipse プラグインは Eclipse Marketplace から簡単にインストールできます。 ヘルプの Eclipse Marketplace を開
2011年も残すところ後1ヶ月となりました。 12月と言えば アドベントカレンダーですが、技術系アドベントカレンダーには参加できなかったので勝手にやっちゃいます。 3日坊主だけにはなりたくないですが やれるところまでがんばってみるかな… と言うことで 第1日目は 誰にも理解されず 約半年間 Java のユニットテストで Spock を使い続けてきた理由を挙げてみます。 まず Spock を知らない人のために... Spock は Groovy ベースの BDD フレームワークで こんな感じで書きます。 ちなみに プロジェクトページは http://code.google.com/p/spock/ です。 class HelloSpock extends spock.lang.Specification { def "length of Spock's and his friends' na
『Gradle でカバレッジを計測してみる』に引き続き EMMA といきたいところですが、訳あって Gradle でのカバレッジ計測には Cobertura を使うことにしました。 と言うのも Jenkins CI の EMMA プラグインとは あまり相性が良くなさそうだからです。 なんと Jenkins CI の EMMA プラグインだとカバレッジの集計しか表示されないので、 Eclipse や html形式のようにソース上のどのコードが実行されていないのかまでは確認できないのです。 EMMA プラグインの不具合かと思ったのですが、実はそういう仕様らしい。 EMMA のリファレンスをよく読んでみたら Ant の report タスクの sourcepath 属性の説明に An optional source path to use for report generation (a pat
前回は Gradle でテストを並列で実行してみましたが、テストと言えば、カバレッジも測定しないと... と言うことで、今回は Gradle で テストを実行して、その際のカバレッジを測定してみることに... Java のカバレッジツールと言えば Cobertura EMMA が有名ですが、今回は EMMA を使ってみました。 EMMA を選んだ理由は メソッドレベルまで計測できる Eclipse プラグイン (EclEmma) も提供されている (Gradle とはなんの関係もありませんが...) です。 カバレッジの測定には それなりのコストがかかるので、もちろん、テストは並列で実行した方が良いのですが、 Gradle の場合、テストクラス毎にプロセスを分けて並列実行するため、 デフォルトの設定のままで EMMA を使うとエラーが発生してしまいます。 と言うのも、EMMA はリモートア
Gradle の Java プラグインには テストを並列で実行するための機能が標準で用意されています。 通常は テスト用のプロセスは 1つしか立ち上がりませんが、 test.maxParallelForks = 5のように設定すれば 最大 5プロセスで並列実行できるようになります。 もちろん、最近、お気に入りの Spock でも ちゃんと並列処理できます。 並列処理は クラス単位で行われるため 時間のかかる (しかも、CPU時間の少ない) メソッドが多い場合は リファクタリングしてクラスを分けた方がよいです。 内部クラスでも それぞれ ちゃんと並列処理してくれるので、ファイルはそのままで クラスだけ分けることもできます。 例えば... class HelloSpock extends spock.lang.Specification { def "30秒後に目が覚めて挨拶する"() { H
Spock は Java で BDD (Behavior Driven Development) するためのフレームワークです。 もちろん、Groovy でも... Java の開発では おなじみの IDE (Eclipse) や ビルドツール (Ant, Maven, Gradle) にも対応しているので、プロジェクトへの導入はとっても簡単です。 既に JUnit を使っているのであれば、ぜひ Spock を導入してみてください。その違いに驚くはずです。 と言うことで... 早速、Gradle で Spock してみました。 Gradle で Spock するのはとっても簡単です。 apply plugin: 'eclipse' apply plugin: 'groovy' repositories { mavenCentral() } dependencies { groovy "or
前回、GitHub を Maven リポジトリにする方法を書きましたが、 成果物を GitHub へ公開するには コマンドでの操作が必要なため結構面倒です。 しかも、毎回同じコマンドを実行し、『○○ 0.1.0 リリース』 みたいなありきたりなコミットコメントを 書かなくてはならない... こういう退屈な反復作業を行うために Gradle のようなビルドツールはあるんだろ!! ということで Gradle の uploadArchives タスクで直接 成果物を GitHub へ公開してみましょう。 今回は Gradle から git を使うために Javaでおなじみ?の JGit を使います。 JGit は EGit とともに現在もかなり活発に開発が進められており、注目のライブラリの一つです。 現在の最新版は 0.11.3 ですが Maven リポジトリには 0.10.1 までしか公開され
Mac OS X でも SSH でのリモートログインを許可しておくと 何かと便利なのですが、デフォルトではパスワード認証が有効になっているので セキュリティ的にちょっとだけ不安だったりします。 と言うことで... パスワード認証を無効にして 公開鍵認証だけ有効にしておきましょう。 パスワード認証を無効にするには /etc/sshd_config に PasswordAuthentication no ChallengeResponseAuthentication no UsePAM noを追加して sshd を再起動するだけです。 ちなみに sshd の再起動は 『システム環境設定』 - 『共有』 の リモートログインのチェックを ON --> OFF --> ON と切り替えるだけで OK です。
Gradle でも Maven や Ivy と同じように簡単にライブラリの依存関係を解決することができます。 内部的に Ivy を利用しているようなので同じことができて当然なのですが... まずは リポジトリの設定から... ライブラリの取得先の Maven リポジトリのパスを 以下のように列挙しておくだけでよいです。 repositories { mavenCentral() // Maven セントラル mavenLocal() // ローカル mavenRepo url: [ "http://repository.jboss.org/nexus/content/groups/public-jboss", // JBoss "http://repository.apache.org/content/groups/public", // Apache "http://repository
最近、いろいろと話題の多い Amazon EC2 ですが... 実は 開発用途としても非常に便利に利用できるということに最近気がつきはじめました。 その一つが JAWS-UG Nagoya勉強会 第1回 でも発表させていただいた Jenkins CI の分散ビルド (プレゼン資料は近日公開予定) なのですが、 それ以外にも Amazon EC2 を利用することで、生産効率を改善できることは たくさんあるのではないでしょうか? Amazon EC2 というと プロダクト環境というイメージを持たれている方も多いと思いますが、折角いい環境が手軽に使えるのですから、 自分たちのためにも利用しないと 勿体ないです。 開発で利用することを考えると、繰り返し実行するような操作は 当然 自動化するべきです。 Amazon EC2 には コマンドラインで操作が可能な Amazon EC2 API Tools
GitHub のおかげで プライベートでは Git 一色の今日この頃。そろそろ 仕事でも Git を使ってみることに... 分散型リポジトリを使った開発のリズムは非常に心地よく 一度味わってしまうと もう 二度と集中型リポジトリを使った開発には戻れない... ということで... 仕事でも Git を使いたいと思うのは至って自然な流れではありますが、 色々と大人の事情もあって リポジトリ自体を SVN から Git へ移行するのはそんなに簡単な話ではありません。 と言う訳で git-svn ですよ。 git-svn を使えば、今まで通り SVN を使ってプロジェクトを共有しつつ、ローカルの開発環境では こっそり Git が使えてしまうのです。 自分だけ 分散リポジトリを使っていい感じで開発を行い、すべての準備が整ったら集中リポジトリに push して、他の開発者に公開するなんてことができます
前回までは Configslurper を使って 環境毎に構成を変更する方法について書きましたが @literalice さんに Gradleでプロパティなどの設定情報を外出しして切り替えて使う で 環境毎に別の Gradle ファイルを取り込んで いろいろと変更する方法を教えてもらったので ちょっと試してみました。 まずは基本から... 別の Gradle ファイルは apply from: 'gradle/other.gradle'で取り込むことができます。 ちなみに 読み込む Gradle ファイルは 相対パス 絶対パス URI の形式で指定できます。 で実際どんなことに使えるかというと 環境毎に 適用するプラグインを変える 環境毎に タスク定義を変える 環境毎に デフォルトタスクを変える OS 毎に 実行するコマンドを変える 共通処理を使い回す などが考えられます。 これらを実現す
Gradle にも大分慣れてきたし、そろそろ 実際にプロジェクトで使えるように準備しないと... まずは Jenkins CI で Gradle が利用できるように準備しようかな。 今時のプロジェクトでは Jenkins CI ぐらい当たり前ですよね。 と言うことで、今回は Jenkins CI で Gradle する最も簡単な (と思われる) 方法です。 実は Jenkins CI で Gradle を利用するために 必要な準備なんて何もありません。 インストールレスで Gradle してみる でも紹介した 『Gradle Wrapper』 さえ使えば、一般的なジョブの設定をするだけでいいんです。 もし、Jenkins CI 上で環境構成を変更する必要があるのであれば Gradle で環境ごとに構成を変更する Gradle で環境ごとに構成を変更する その2 Gradle で環境ごとに構
前回、前々回 と既に2回も書いておきながらなんですが、 設定ファイルを読み込んで 標準出力するだけのサンプルなんて何の役にも立たない... と言うことで、今回は 読み込んだ設定を アプリケーションのプロパティファイルに 展開してみることに... 結局 build.gradle はこんな感じになりました... defaultTasks 'clean', 'build' apply plugin: 'java' if (!hasProperty('env')) { env = System.env['GRADLE_ENV'] ?: 'development' } { -> def slurper = new ConfigSlurper() slurper.binding = project.properties def files = files("environment/default.gr
こんな大変なときになんですが... 何もしないよりは 自分にできることを続けていこう!! と言うことで... id:fumokmm さんから ConfigSlurper で複数の設定ファイルの内容を マージする方法を教えてもらったので、今回は 環境ごとの構成を デフォルト設定 environment/default.gradle 環境毎の設定 environment/${env}.gradle ユーザ毎の設定 ${user.home}/.gradle/environment.gradle といった複数のファイルで設定できるようにしてみました。 build.gradle はこんな感じ... if (!hasProperty('env')) { env = System.env['GRADLE_ENV'] ?: 'development' } config = { def slurper =
残念ながら ユーザガイドを見る限り、 現バージョン (1.0-milestone-1) の Gradle には 環境毎に構成を変更できるような機能 (Maven の profile のような機能) は 実装されていないようです。 実際に実務で使う場合、絶対に必要な機能だと思うのですが なぜないんだろう... と思ったら、Groovy にあるじゃないですか!! Groovy にはとっても便利な ConfigSlurper があります。 ConfigSlurper を使えば、簡単に 環境毎に構成を変更できます。 ConfigSlurper については id:fumokmm さんの GroovyのConfigSlurperがめっちゃ便利 が非常に参考になります。 ConfigSlurper では environment.groovy environments { deveropment { se
とっても便利な Gradle ですが、 実はわざわざインストールしなくても 誰でも簡単に Gradle できるということを皆さんご存知ですか? これは Gradle Wrapper という機能で ユーザーガイド (こちら) にもちゃんと記載されています。 ちなみに、この機能は Gradle 自身のビルドにも使われているのです。 ただ 『インストールしなくても...』というのは ちょっと語弊があるかもしれません。 と言うのも... この Gradle Wrapper の機能を利用にするには まず初めに build.gradle に task wrapper(type: Wrapper) { gradleVersion = '1.0-milestone-1' }を追加して Gradle がインストールされた環境で $GRADLE_HOME/bin/gradle wrapperのように wrap
最近は Gradle がとってもお気に入りなので プラグインの開発も少しずつ行っているのですが、 折角作成したプラグインやライブラリも Maven リポジトリで公開しないと利用しづらいので どこか公開できる場所がないか探していたところ Github を Maven 公開リポジトリにする という記事を見つけたので ソース管理と合わせて GitHub に Maven リポジトリを作成することにしました。 ただ無料版だと300MB しか利用できないので容量がちょっと心配だったのですが id:kimukou_26 さんのアドバイスによりあまり容量を気にする必要はないことがわかったので GitHub にしました。 それによく考えてみれば そもそも 300MB もコードが書けるほど時間に余裕はないですし... 上記の記事では Maven が使われていましたが、今回は Gradle を利用することもあり
今更ですが Gradle について... Gradle は Make, Ant, Maven につぐ 第4 のビルドツールです。 他のビルドツールからの移行を始めているプロジェクトもかなり増えており、最近 注目されているツールの一つです。 Gradle の特徴を簡単に言ってしまうと、 Make のようにスクリプトでなんでも書ける柔軟さ Ant タスクとタイプ Maven の規約と高度な依存解決 を全て備えたビルドツールです。 はっきり言ってしまえば、Make と Ant と Maven の良いとこ取りしただけなので、それほど目新しさはありません。 しかし、その分 3つのツールの良いところだけをうまく融合させていて 非常に使い易いツールになっていると思います。 私が特に気に入っているところは、Ant タスクやタイプがそのまま使えるところです。 中でも FileSet や Selector が
突然ですが、みなさんは task hello << { println 'Hello, world.' }と task hello { println 'Hello, world.' }の違いがわかりますか? 上記の違いはたった2文字 << だけです。 ところが、このたった2文字で 全く意味が変わってしまうので注意しましょう。 この違いというのが クロージャ ( {...} の中の処理 ) の実行タイミング です。 前者のように << をつけてタスクを定義した場合は hello タスクの実行時に呼び出されます。 ところが、後者の場合 hello タスクのインスタンス生成時に呼び出されてしまいます。 私は この違いで思いっきり はまってしまいました。 実行されるはずのないタスクがいきなり最初に実行されてしまうのですから... 前者と後者で 実際 何が違うのかと言うと... まず、前者の場合。
今回は 前回作成した 『プロパティファイルを native2ascii するカスタムプラグイン』 を JAR ファイルで公開する方法について まずは、こんな感じでカスタムプラグイン用のプロジェクトを作成します。 Native2AsciiPlugin.groovy には 前回の Groovy ファイルをそのまま置きます。 あとは <プラグイン名> + .properties ファイル (今回の場合 native2ascii.properties) に implementation-class=com.bluepapa32.gradle.plugins.Native2AsciiPluginのように実装クラス名を記述するだけです。 このプロパティを追加しておくと 各プロジェクトでは apply plugin: "native2ascii"みたいに プラグイン名を指定できるようになるので、とっても
次のページ
このページを最初にブックマークしてみませんか?
『bluepapa32’s Java Blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く