GeekFactory

int128.hatenablog.com

2014-01-01から1年間の記事一覧

2014年に書いた記事の振り返り

2014年に書いた記事を分類して振り返ります。 TLDR Gradle Docker Jenkins, Travis CI, Bintrayなどのビルド職人系 マネジメントの話 Scala, Groovy GitHub API, Evernote APIなどを使ってみた 運用改善 Gradle #JGGUG でGradle SSH Pluginについて話しまし…

個人的レトロスペクティヴ

2014年の振り返り。なお、本記事の内容は個人的なものです。所属する組織などとはまったく関係がありません。 概況 よかったこと オープンソース開発が捗った Gradle SSH Pluginの改善とリリースを続けることができた sbt-appengineがSDK 1.9.10以降で動かな…

Use trait with generics in Groovy

Groovyでジェネリクス付きのtraitを使う場合にちょっとハマったのでメモを残します。 前提 Groovy 2.3.6 JDK 7u72 例 下記のコードを実行してみます。 @groovy.transform.Immutable class Person { final String name final int age } trait NamedMap<T> { bool</t>…

Travis CIを高速化するContainer-based Infrastructureを試した

継続的インテグレーションしてますか? オープンソース開発の継続的インテグレーションにはTravis CIが便利ですが、ビルドが始まるまでに少し時間がかかるという欠点がありました。Travis CIはVMベースの分離技術を採用しているため、ビルドを要求してもCPU…

Jenkins Workflow Pluginを使ってみる

先日リリースされたJenkins Workflow Plugin 1.0を使ってみました。年明けのJenkinsユーザカンファレンスで詳しい発表があると思うので、今から楽しみですね! Workflow Pluginでできること Workflow Pluginを使うと、Jenkinsジョブの動作をGroovyで記述する…

GradleでビルドしてDockerで配布する

JGGUG LTにて、GradleでビルドしてDockerで配布するという内容を発表しました。ビールを片手にピザをつまみながら発表を聴くというゆるいスタイルで楽しかったです。 speakerdeck.com DockerがあればJVMをインストールする必要がなくなるので、GroovyやScala…

今日から始めるGradleプラグイン開発 #gadvent

G*Advent Calendar(Groovy,Grails,Gradle,Spock...) Advent Calendar 2014 - Qiitaの17日目です。 本記事では、9日目の記事で紹介したGradleプラグインのテンプレートプロジェクトを使って、新しいGradleプラグインを作る方法を説明します。14日目の記事で紹…

Gradle Slashプラグインをリリースしました #gadvent

G*Advent Calendar(Groovy,Grails,Gradle,Spock...) Advent Calendar 2014 - Qiitaの14日目です。 Gradle Slashというプラグインをリリースしました。このプラグインを使うと、Fileオブジェクトと文字列をスラッシュ(除算演算子)で連結して書けるようにな…

家計を支える技術

家庭を支える技術 Advent Calendar 2014 - Adventarの12日目です。 家庭を支える技術 Advent Calendar 2014 - Adventar 本記事では、我が家の「家計」を支える技術と運用を紹介します。これから同棲を計画しているカップルや家計の見直しを検討している方の…

GradleによるJVMアプリケーションのパッケージングと配布 #gadvent

G*Advent Calendar(Groovy,Grails,Gradle,Spock...) Advent Calendar 2014 - Qiitaの10日目です。 アプリケーションを公開する際、ユーザが使いやすい形でアプリケーションを配布することで、より多くのユーザに使ってもらえることが期待できます。また、ア…

Gradleプラグインのテンプレートプロジェクトを公開します #gadvent

G*Advent Calendar(Groovy,Grails,Gradle,Spock...) Advent Calendar 2014 - Qiitaの9日目です。 GradleはビルドスクリプトをGroovy DSLで書くため、現実のプロジェクトで複雑な問題が発生した場合に柔軟に対処できる特徴を持っています。現実のプロジェクト…

Hubot+IRCの文字化けを解決する

HubotはGitHubが開発したbotフレームワークで、SlackやHipChat、IRCなどの多くのプロトコルに対応しています。そのため、ローカルネットワークのIRCサーバにbotを導入する用途にも使えます。 古くから運用されているIRCサーバの中には、文字コードがISO-2022…

DockerでLinuxデスクトップを使ってみる

Linuxをサーバ用途に使う場合、クリーンな環境を保つため、XやGNOMEなどをインストールしないことが多いと思います。とはいえ、ちょっとした調査などでデスクトップ環境があれば作業効率が上がるケースもあります。そこで、Dockerを使って、独立した環境でLi…

GitHubリポジトリの一覧をWebサイトに貼り付ける

自分のWebサイトにGitHubのリポジトリ一覧を表示すると、どんなプロダクトを作っている人なのか、どんな言語や分野が得意な人なのかといったプロフィールを手っ取り早く伝えることができます。本稿では、Webサイトにリポジトリ一覧を貼り付ける方法を考えて…

Microservicesと組織構造とプロセス

今日の某勉強会でMicroservicesの話があったので思ったことを書いてみる。 Conwayの法則で知られるようにアーキテクチャは組織構造を反映する。アプリ、DB、サーバなどのレイヤ単位に組織を分割すると、各レイヤは互いに深く依存しているので、変更に必要な…

docker run dockerfile/java:oracle-java7

JDK 7u65/8u11以降でバイトコード検証の不具合があったためこれまでDockerfileを自作していましたが、JDK 7u72/8u25で不具合が修正されたのでDocker Hubで公開されているイメージに乗り換えました。Docker HubではいくつかのJavaイメージが公開されています…

GradleでBintrayを経由してMaven Centralに成果物を公開する

Maven Centralに成果物を公開するには、OSS Sonatype Nexusに成果物をアップロードする方法が広く知られていますが、Bintrayを経由してリリースする方法もあります。この方法には以下のメリットとデメリットがあります。 メリット Bintrayには成果物に署名を…

Gradle SSH Plugin 0.4.5 released

GradleからSSHアクセスするためのプラグインGradle SSH Pluginのバージョン0.4.5をリリースしました。 本バージョンではJava 6で動作するように改善しました。まだまだJava 6は需要があるんですね。レガシー環境のデプロイ自動化に役に立てばうれしいです。 …

Java 8でSpockのモック生成がエラーになる件

Java 8でSpockを使ってJavaクラスのモックを作成しようとしたらエラーが出ました。 Groovyクラスのモックではエラーは出ません。 class ExampleSpec extends Specification { def "shell should write stdout to #logging"() { given: def out = System.out …

Gradle SSH Plugin 0.4.4 released

デプロイなどでGradleからSSHアクセスするためのプラグインGradle SSH Pluginのバージョン0.4.4をリリースしました。 build.gradleでプラグインを読み込めばすぐに使えます。以下はreloading Tomcatのサンプルです。 plugins { id 'org.hidetake.ssh' versio…

プロキシの内側でDockerを使う

プロキシの内側でDockerを使おうとすると以下の問題に直面します。 docker pullでプロキシ経由でイメージを取得させる必要がある。 docker runでアプリ実行時にプロキシ設定を与える必要がある。 docker buildでビルド実行時にプロキシ設定を与える必要があ…

DockerイベントをSlackに連携するアプリ

DockerイベントをSlackに連携するアプリ slack-docker を公開しています。 いつの間にかSlackのWebhook URLの形式が変わっていたので対応しました。 また、Slackにポストする情報を少し増やしてみました。 DockerとFigをインストールしている場合は簡単に起…

Gradle SSH Plugin 0.4.3をリリースした

GradleでSSHを使うためのプラグイン Gradle SSH Plugin の新バージョンをリリースしました。このプラグインを使うと、Gradleでビルドした成果物をシームレスにデプロイできます。 plugins { id 'org.hidetake.ssh' version '0.4.3' } remotes { webServer { …

Stone on Docker

StoneのDockerイメージが見当たらなかったので作りました。StoneはいわゆるTCP/UDPリピーターで、ローカルポートに着信した接続を別のポートに転送してくれます。HTTPプロキシやSSLトンネリングに対応しているので、ネットワークの制約がある環境で大活躍し…

バイトコード検証の不具合がJDK 7u72/8u25で修正された

JDK 7u65/8u11以降にはバイトコード検証の不具合 JDK-8051012 があり、Groovyなどの処理系に影響があるという記事を書きましたが、最近リリースされたJDK 7u72/8u25で修正されたようです。 JDK-8051012 への対応状況を以下にまとめました。○は動く、×は動か…

Dockerコンテナの起動や停止をトリガーにして処理を実行する

Dockerホストで新しいコンテナが起動したり既存のコンテナが停止したタイミングで何らかの処理を実行したい場合があります。例えば、リバースプロキシの設定を反映したり、コンテナのURLをレビュアに通知したりといった用途が考えられます。 本記事ではdocke…

DockerイベントをSlackに連携するアプリを作った

Dockerホストのコンテナ起動停止イベントをSlackに連携するアプリを作りました。 例 くじらがつぶやきます。 使い方 Slackの設定ページから Incoming WebHook を作成してください。トークンをメモしておきます。 このアプリは Docker Hub に公開しています。…

JDK 7u65/8u11以降に存在するバイトコード検証の不具合

JDK 7u65/8u11以降にはバイトコード検証の不具合 JDK-8051012 があります。Groovyでは、 GROOVY-6951 で報告されているように、コンストラクタ内でsuper()やthis()を使うと実行時エラーが発生します。 Gradle SSH Pluginでもコンストラクタ内でsuper()を実行…

Dockerfileでソフトウェアの実行環境や実行方法を明示する

現在、ソースコードと一緒にビルドスクリプトを置くことで、ソフトウェアのビルド方法を明示することが慣習になっています。 今後、リポジトリにソースコードと一緒にDockerfileを置くことで、ソフトウェアの実行環境や実行方法を明示することが一般的になる…

QRコード生成サービスを作った

Webブラウザ上でQRコードを生成するサービスを作りました。 https://getqrcode.github.io Get QR Code - QR Code Generator JavaScriptのみでQRコードを生成するサービスが見つからなかったので作ってみました。外部のサーバとは通信しないので、秘密情報を…