タグ

ブックマーク / int128.hatenablog.com (55)

  • SpockのPollingConditionsがE2Eテストで便利 - GeekFactory

    Spockの PollingConditions が便利だったのでメモです。 PollingConditions は条件を満たすかタイムアウトになるまで評価を繰り返してくれます。E2Eテストで別スレッドでサーバを起動してサーバがreadyになるまで待つといった場合に便利です。 import spock.lang.Specification import spock.util.concurrent.PollingConditions class ServerSpec extends Specification { def "server should listen on given port"() { given: '空きポートで待ち受けるWebサーバを生成する' int port = pickUpFreePort() def server = new Server(port) when:

    SpockのPollingConditionsがE2Eテストで便利 - GeekFactory
  • Gradle Updateをカイゼンした - GeekFactory

    int128.hatenablog.com Gradle Wrapperを自動更新してくれるサービス Gradle Update を公開してから積み残しがいくつかあったので改善しました。 Done README 英語圏の人にも使ってもらうため、使い方やスクリーンショットをREADME.mdに書きました。 英語圏(のGradle文化圏)にどうやって宣伝すればいいのかなーと。 Gradle Update Badge リポジトリのREADMEに貼っておけば、Gradle Wrapperが最新版であるかチェックできます。 こんな感じです: README.mdにはこれを追記で: [![Gradle Status](https://gradleupdate.appspot.com/USER/REPO/status.svg?branch=master)](https://gradleupdate.app

  • Gradle Updateを公開します - GeekFactory

    Gradle Wrapperを自動更新してくれるサービス Gradle Update を公開します。Gradle Wrapperのようなビルドシステムは一度設定するとバージョンを上げるタイミングがあまりないのですが、新しいバージョンを使うとパフォーマンスが改善されたりバグを踏まずに済むメリットがあります。 Gradle Updateを有効にすると、新しいバージョンのGradleがリリースされるたびに、Pull Requestで新しいGradle Wrapperをお届けします。お届け対象は、自分が所有する公開リポジトリのうちGradle Wrapperがすでに含まれるものです。 使い方 Gradle Updateを有効にするには、Gradle Update のリポジトリにスターを付けてください。 間もなくするとPull Requestの通知が届きます。 Pull Requestを開くと、新し

    Gradle Updateを公開します - GeekFactory
    orangeclover
    orangeclover 2015/08/18
    『Gradle Wrapperを自動更新してくれるサービス Gradle Update を公開』
  • Docker Machineで既存サーバにDockerホストを構築する - GeekFactory

    Docker MachineはDockerホストを構築するためのツールです。VirtualBoxやVMwareなどの仮想化基盤、AWSやGCEなどのクラウドに対応しており、環境構築からDockerクライアントの接続設定まで自動的に行ってくれます。これによって気軽にDocker環境を調達できるようになります。 既存サーバにDockerホストを構築する Docker Machineでは、ドライバにGenericを指定することで、既存のサーバにDockerホストを構築することも可能です。Genericを指定したときにどんなコマンドが実行されるのか調べてみました。 下記のコマンドを実行すると、指定したサーバに対してSSH経由で一連の環境構築コマンドが実行されます。 docker-machine -D create --driver generic --generic-ip-address some

    Docker Machineで既存サーバにDockerホストを構築する - GeekFactory
  • リリースタスクの見える化を自動化する - GeekFactory

    ソフトウェアのリリース作業は時間が経つとともに複雑化する傾向があります。どんなに作業の自動化を推し進めても、リリース後の確認やドキュメントの更新などの手作業は残ってしまいます。また、一部の担当者しかリリース作業を知らないと、人がボトルネックになってしまいます。 そこで、リリース作業の内容や状況を見える化しておくことで、誰でも素早くリリースを行えるようになります。たとえ一人ぼっちの開発であっても、一ヶ月後の自分が作業手順を完璧に覚えているとは限らないため、見える化しておく価値はあります。 リリースタスクをIssueに書く もしGitHubでタスクを管理している場合は、リリースタスクをIssueに書くやり方があります。 私がオープンソースで開発しているGradle SSH PluginやGroovy SSHでは、リリースの度に以下のようなIssueを作成しています。 リリースのワークフローは以

    リリースタスクの見える化を自動化する - GeekFactory
  • Chrome Extensionのスクリーンショット作成を自動化した - GeekFactory

    Chrome Extensionをストアに公開するにはスクリーンショットを作成する必要があります。バージョンアップのたびに手作業が発生してつらかったので自動化してみました。 欲しいもの 私が公開しているChrome Extensionを例にして説明します。 chrome.google.com このChrome Extensionは、新しいタブを開いた時のページをブックマーク一覧に差し替えるものです。したがって、新しいタブを開いた時の状態をスクリーンショットに収めることにします。 ChromeストアにChrome Extensionを掲載するにはスクリーンショットが必要です。そして、スクリーンショットの出来栄えは利用者数に直結します。 Chrome Extensionの動きが直感的に伝わるようにするため、スクリーンショットはウィンドウ枠を含めて撮ります。 ストアに掲載するスクリーンショットは

    Chrome Extensionのスクリーンショット作成を自動化した - GeekFactory
  • Vue.jsからReact.jsに移行した - GeekFactory

    公開しているChrome ExtensionをReactベースに移行してみました。これは「新しいタブ」を置き換えるもので、新しいタブを開いた時に軽くて見やすいブックマークページが表示されるようになります。 Chromeストアから入手できます。 chrome.google.com これまでVue.jsで実装していたものをReact.jsに移行してみました。 Chrome Extensionではevalの利用が制限されているため、Vue.jsは通常のリリースではなくCSP対応のリリースを使う必要があります。後者はnpmやCDNにはリリースされておらず、GitHubから取得する必要があるため、この際にReact.jsに移行してみました。 移行して気づいたことを簡単にまとめます。 規模 移行前はCoffeeScriptで書いていました。移行後はJSXです。CoffeeScriptとJSXを比較する

    Vue.jsからReact.jsに移行した - GeekFactory
  • Gradle Wrapperを自動アップデートするサービスを作ってる - GeekFactory

    Gradleはおよそ2〜3ヶ月ごとに新しいバージョンがリリースされています。それに合わせてGradle Wrapperもアップデートするとバグフィックスや新機能の恩恵を受けられるのですが、後回しにして放置してしまうことが多いと思います。 ビルドを自動化したのなら、ビルドシステムのアップデートも自動化したいですよね! そこで、新しいバージョンのGradleがリリースされたら、新しいバージョンのGradle WrapperをPull Requestしてくれるサービスを作っています。 gradleupdate.github.io アップデートの対象はGitHubにある公開リポジトリです。リポジトリのスイッチをONにすると、Gradle Wrapperを最新版にアップデートするPull Requestが送られます。リポジトリのGradle Wrapperがすでに最新版の場合は、新しいバージョンのG

    Gradle Wrapperを自動アップデートするサービスを作ってる - GeekFactory
  • Evernote風のGistクライアント Gistnote を作ってる - GeekFactory

    ちょっとしたメモを残すにはGistが便利です.一方で,Evernoteのような一覧表示があるともっと便利そうです. そこで,Evernote風のGistクライアント Gistnote を作っています. https://gistnote.github.io 最低限の機能を実装したのでいったん公開します.Gistのファイル名を変更するとか,まだまだ実装できていない機能があるので,今後も開発を進めていきます. アーキテクチャとか アプリはGitHub Pagesにデプロイしています.サーバサイドは使わず,クライアントサイドのJavaScriptからGitHub APIに直接アクセスしています.ただし,OAuth AuthorizationだけはClient Secretを扱う必要があるのでサーバサイド(App Engine/Groovy)を経由させています. 基的な構造は以下のような感じです.

    Evernote風のGistクライアント Gistnote を作ってる - GeekFactory
  • Use trait with generics in Groovy - GeekFactory

    Groovyでジェネリクス付きのtraitを使う場合にちょっとハマったのでメモを残します。 前提 Groovy 2.3.6 JDK 7u72 例 下記のコードを実行してみます。 @groovy.transform.Immutable class Person { final String name final int age } trait NamedMap<T> { boolean add(T item) { put(item.name, item) ? false : true } } def peoples = [:] as NamedMap<Person> assert peoples.add(new Person('Taro', 30)) assert peoples.Taro.age == 30 このコードを実行すると、以下の実行時エラーが発生します。 org.codehaus

    Use trait with generics in Groovy - GeekFactory
  • Jenkins Workflow Pluginを使ってみる - GeekFactory

    先日リリースされたJenkins Workflow Plugin 1.0を使ってみました。年明けのJenkinsユーザカンファレンスで詳しい発表があると思うので、今から楽しみですね! Workflow Pluginでできること Workflow Pluginを使うと、Jenkinsジョブの動作をGroovyで記述することができて、さらにユーザとのインタラクションを差し込むことも可能です。これはデプロイメントパイプラインの実装に便利そうです。 また、リポジトリからチェックアウトしたGroovyスクリプトを読み込めるので、Travis CIやCircle CIのようにビルド設定をリポジトリで管理できます。開発現場でJenkinsを使い込んでいくと、いろんな人がジョブ設定をいじって荒廃していくことが多いので、ビルド設定をリポジトリで管理できることは大きなメリットがあると思います。 (と偉そうに書

    Jenkins Workflow Pluginを使ってみる - GeekFactory
  • GradleでビルドしてDockerで配布する - GeekFactory

    JGGUG LTにて、GradleでビルドしてDockerで配布するという内容を発表しました。ビールを片手にピザをつまみながら発表を聴くというゆるいスタイルで楽しかったです。 speakerdeck.com DockerがあればJVMをインストールする必要がなくなるので、GroovyやScalaで作ったツールを布教しやすくなるのではと思います。 何人かの方とお話ししたところ、Dockerを活用している開発現場は意外と多いようですね。2015年は格的な普及期に入るのではないでしょうか。 皆様ありがとうございました。 Gradle徹底入門 次世代ビルドツールによる自動化基盤の構築 作者: 綿引琢磨,須江信洋,林政利,今井勝信出版社/メーカー: 翔泳社発売日: 2014/11/05メディア: 大型この商品を含むブログ (6件) を見る

    GradleでビルドしてDockerで配布する - GeekFactory
  • GradleでBintrayを経由してMaven Centralに成果物を公開する - GeekFactory

    Maven Centralに成果物を公開するには、OSS Sonatype Nexusに成果物をアップロードする方法が広く知られていますが、Bintrayを経由してリリースする方法もあります。この方法には以下のメリットとデメリットがあります。 メリット Bintrayには成果物に署名を付与する機能があるため、ビルドツールで複雑な設定をする必要がありません。 Bintrayはワンクリックで成果物をリリースできます*1。 Bintrayの方が使いやすい(かも?) デメリット Bintrayに鍵ペアを預ける必要があります。これが気持ち悪い人にはおすすめできません。 BintrayでOSS Sonatype Nexusのパスワードを入力する必要があります。これが気持ち悪い人にはおすすめできません。 稿では、GradleからBintrayに成果物をリリースし、さらにMaven Centralにリリ

    GradleでBintrayを経由してMaven Centralに成果物を公開する - GeekFactory
  • Java 8でSpockのモック生成がエラーになる件 - GeekFactory

    Java 8でSpockを使ってJavaクラスのモックを作成しようとしたらエラーが出ました。 Groovyクラスのモックではエラーは出ません。 class ExampleSpec extends Specification { def "shell should write stdout to #logging"() { given: def out = System.out System.out = Mock(PrintStream) when: //... then: System.out.println('some message') cleanup: System.out = out } } java.lang.IllegalArgumentException at net.sf.cglib.proxy.BridgeMethodResolver.resolveAll(BridgeM

    Java 8でSpockのモック生成がエラーになる件 - GeekFactory
  • Gradle SSH Plugin 0.4.4 released - GeekFactory

    デプロイなどでGradleからSSHアクセスするためのプラグインGradle SSH Pluginのバージョン0.4.4をリリースしました。 build.gradleでプラグインを読み込めばすぐに使えます。以下はreloading Tomcatのサンプルです。 plugins { id 'org.hidetake.ssh' version '0.4.4' } remotes { webServer { host = '192.168.1.101' user = 'jenkins' identity = file('id_rsa') } } task deploy << { ssh.run { session(remotes.webServer) { put 'example.war', '/webapps' execute 'sudo service tomcat restart' } }

    Gradle SSH Plugin 0.4.4 released - GeekFactory
  • Gradle SSH Plugin 0.4.3をリリースした - GeekFactory

    GradleでSSHを使うためのプラグイン Gradle SSH Plugin の新バージョンをリリースしました。このプラグインを使うと、Gradleでビルドした成果物をシームレスにデプロイできます。 plugins { id 'org.hidetake.ssh' version '0.4.3' } remotes { webServer { host = '192.168.1.101' user = 'jenkins' identity = file('id_rsa') } } task deploy << { ssh.run { session(remotes.webServer) { put 'example.war', '/webapps' execute 'sudo service tomcat restart' } } } build.gradleのpluginsに1行を足すだ

    Gradle SSH Plugin 0.4.3をリリースした - GeekFactory
  • バイトコード検証の不具合がJDK 7u72/8u25で修正された - GeekFactory

    JDK 7u65/8u11以降にはバイトコード検証の不具合 JDK-8051012 があり、Groovyなどの処理系に影響があるという記事を書きましたが、最近リリースされたJDK 7u72/8u25で修正されたようです。 JDK-8051012 への対応状況を以下にまとめました。○は動く、×は動かないという意味です。 7u60 ○ 7u65 × 7u67 × 7u71 × (Java™ SE Development Kit 7 Update 71 Bug Fixes) 7u72 ○ (Java™ SE Development Kit 7 Update 72 Bug Fixes) 8u5 ○ 8u11 × 8u20 × 8u25 ○ (Java™ SE Development Kit 8 Update 25 Bug Fixes) なお、×が付いているバージョンでもJVM引数に-noverif

    バイトコード検証の不具合がJDK 7u72/8u25で修正された - GeekFactory
  • JDK 7u65/8u11以降に存在するバイトコード検証の不具合 - GeekFactory

    JDK 7u65/8u11以降にはバイトコード検証の不具合 JDK-8051012 があります。Groovyでは、 GROOVY-6951 で報告されているように、コンストラクタ内でsuper()やthis()を使うと実行時エラーが発生します。 Gradle SSH Pluginでもコンストラクタ内でsuper()を実行するコードがあり、JDK 7u65/8u11以降で正常に動作しない問題があります。最近のJDKで不具合が修正されているか確認してみたのですが、やはり動作しませんでした。結果は以下の通りです。 成功 7u60-b19 失敗 7u65-b17 失敗 7u67-b01 成功 8u5-b13 失敗 8u11-b12 失敗 8u20-b26 残念ながら、GROOVY-6951 のスレッドによると8u40まで待つしかないようです。 なお、Travis CIでは当該の不具合に対する暫定対

    JDK 7u65/8u11以降に存在するバイトコード検証の不具合 - GeekFactory
  • Bintray PGP Signingを試す - GeekFactory

    BintrayではJCenterからMaven Centralにパッケージを同期する機能がありますが、これを使うにはあらかじめパッケージのファイル(JAR, POM)にPGP署名を付与しておく必要があります。 BintrayではアップロードしたパッケージにPGP署名を付与する仕組みがあるようです。 そのためには下記を設定すればよいとドキュメントに記載されています。 アカウント設定でPGP鍵を登録する。 リポジトリ設定で Sign this repository's files with key from: user にチェックを入れる。 2014-09-24追記: Bintrayに新バージョンをアップロードする機会があったので気づいたのですが、アップロードと同時に自動的にPGP署名が付与されるようです。下記のセクションは誤りでしたので訂正します。もしかしたらPGP鍵の設定後にしばらく(数日

    Bintray PGP Signingを試す - GeekFactory
  • 認証付きプロキシの内側で共用サーバを運用する - GeekFactory

    多くの企業や教育機関ではインターネットアクセス用のプロキシサーバが導入されています。プロキシサーバの中にはユーザ認証を必要とするもの(認証付きプロキシ)があり、組織やチームの共用サーバを運用する上でしばしば問題を引き起こします。 例えば、共用サーバで以下のオペレーションを実行する時、認証付きプロキシを越える必要が生じます。 OSやミドルウェアのアップデート(yum, apt-get等) パッケージマネージャが外部リポジトリからパッケージをダウンロードする時(npm, RubyGems, EasyInstall, Jenkins plugins等) ビルドツールが依存ライブラリをダウンロードする時(Maven, Gradle, sbt等) 共用サーバから認証付きプロキシを経由してインターネットにアクセスするには、個人の認証情報を共用サーバに設定する必要があります。 認証情報は来その人しか知

    認証付きプロキシの内側で共用サーバを運用する - GeekFactory