GeekFactory

int128.hatenablog.com

Doma 2をGroovyで使用する時に気を付けること

気付いた範囲でまとめてみます。 フォルダ配置 Doma 2はAnnotation ProcessorでDAOの実装クラスを自動生成します。Doma 2のAnnotation ProcessorはJavaのコードにのみ対応しているため、DAOやエンティティはGroovyではなくJavaで書く必要があります。また、G…

Create React AppでChrome Extensionを開発する

Reactのアプリを開発するにはFacebook謹製のcreate-react-appが便利です。しかし、create-react-appはWebアプリの開発に特化しているため、Chrome Extensionの開発には使えない問題があります。スクリプトを少し変えてwatch buildを行う方法を紹介します。 C…

Jenkinsfileによるジョブ管理のメリットと実例

ジョブの設定をJenkinsfileで管理し始めてから3か月ぐらい経ったので、知見をまとめてみます。 Jenkinsfileを使うメリット Jenkinsの画面でジョブを管理していると以下のような問題が起きることが多いと思います。 誰かが勝手にJenkinsの設定を変更して動か…

SonarQube GitHub PluginをGitBucketで使用する(失敗)

SonarQube GitHub Pluginを使うと、静的解析の結果をPull Requestのステータスやコメントに反映できます。この便利な機能がGitBucketでも使えるか試してみましたが、残念ながら無理でした。何かの知見になればと残しておきます。 プラグインはPull Requestで…

Jenkins MultibranchでPull Requestをビルド

JenkinsのMultibranch Pipelineを利用してPull Requestをビルドしたい場合、ジョブをどのように設定すべきか調べてみました。 Branch SourcesでGitHub *1 を追加すると、以下を選択できます。 Build origin branches Build origin branches also filed as PR…

Swagger CodegenでPHPクライアントを生成する

Swagger Codegenが生成するPHPクライアントを使う機会があったので、使い方を記事に残しておきます。 Swagger Codegenが生成するファイル Swagger CodegenでPHPテンプレートを指定すると、以下のファイル群が生成されます。 SwaggerClient-php/ autoload.php…

Spring Security OAuth2のリトライを@Retryableで書く

Spring Security OAuth2のアクセストークン取得で接続失敗に対してリトライを行いたい場合、Spring Retryを使うと簡単に実現できます。 やりたいこと Spring BootのアプリでOAuth 2.0クライアントを利用する。 Spring Security OAuth2でアクセストークンを取…

Spring BootアプリのテストをSpockで書く(続編)

以前にSpring BootアプリケーションのテストをSpockで書く方法を紹介しましたが、この方法ではテストの所要時間が長くなる問題がありました。本稿では他の方法を紹介します。 int128.hatenablog.com 具体的には、インナークラスの @TestConfiguration でMock…

Spring BootでログやActuatorにバージョン情報を含める

ログやActuatorにバージョン情報を含めておくと、本番環境でどのバージョンのアプリケーションが実行されているか簡単に確認できるので便利です。 ビルド時にapplication.ymlにバージョン情報を含める Gradleでは、以下のようなビルドスクリプトを書くとappl…

ターミナルのウィンドウタイトルにホスト名などを入れる

zsh

久しぶりにzshネタです。 複数のタブを開いていろんなサーバにSSHしていると区別が付かなくなってきたので、ウィンドウタイトルに実行コマンド、ホスト名、カレントディレクトリを入れてみました。zshの組み込みコマンドだけで実現してみました。 function _…

Spring Security OAuth2でリクエストログを出力する

Spring Security OAuth2でアクセストークンのリクエストとレスポンスのログを出力するには、Apache HttpClientを使うと簡単です。 概要 Spring Security OAuth2のアクセストークン取得はRestTemplateを利用しています。 RestTemplateはデフォルトではHttpURL…

doma-spring-bootのSQL例外変換

doma-spring-bootを利用すると、Doma2の例外クラス(JdbcException)をSpring Transactionの例外クラス(DataAccessException)に変換してくれます。例外変換の仕様が明文化されていないようなので調べてみました。どこかにまとめてあったら教えてください。…

2016年の振り返り

2016年もお世話になりました。 概況 振り返り 仕事 Spring CloudとかSwaggerとかAWSとか触ってた。 JIRA, Confluence, Mattermost, ownCloud, GitBucket, Jenkins, Artifactory, SonarQubeとかをDocker Composeベースで開発基盤に導入してた。 上期は暇で、…

Jenkinsで自分でビルドしたGitコマンドを使う

Jenkins Agentで自分でビルドしたGitコマンドを使う方法を説明します。新しいバージョンのGitを使いたい場合に有用です。 方針 JenkinsにはGitやAntなどの外部ツールを管理する機能があります。 外部ツールが必要になった場合に自動的にインストールスクリプ…

Spring BootアプリのテストをSpockで書く

Spring BootアプリケーションのテストをSpockで書く方法を説明します。最近のバージョンを対象にしています。 Spring Boot 1.4 Spock 1.1-rc-3 Groovy 2.4 本稿では以下のテストレベルを対象とします。 コンポーネントテスト(依存コンポーネントをモックに…

FeignでOAuth 2.0クライアントを使う

RESTクライアントのSpring Cloud Netflix FeignでOAuth 2.0を使う方法を説明します。 @FeignClientのconfigurationでOAuth2FeignRequestInterceptorを設定する。 OAuth2FeignRequestInterceptorにクライアントIDやクライアントクレデンシャルを渡す。 具体的…

Feignでレスポンスボディによる例外処理を行う

REST APIクライアントのSpring Cloud Feignを使う場合に異常系のステータスコードをハンドリングする方法を調べたのでメモです。 デフォルトの振る舞い APIが400番台や500番台のステータスコードを返した場合、FeignはFeignExceptionをスローします。これは…

Jenkins PipelineでGitリポジトリにpushする

JenkinsのジョブでGitリポジトリにブランチやタグをpushしたい場合があります。Jenkinsfileでどのように実装するか調べてみました。 実装例 お急ぎの方は下記のコードを参考にしてください。 def userRemoteConfig = scm.userRemoteConfigs.head() withCrede…

Swagger YAMLのバリデーションをCIで回す

Swagger YAMLを書いていると間違いに気づかないことがよくあります。リポジトリにpushした時にJenkinsやCircle CIなどで構文チェックできるとミスを防げるます。そこで、GradleのプラグインにSwagger YAMLのバリデーションを追加してみました。 使い方 build…

Spring Bootで例外発生時にJSONを返す

Spring BootのREST APIサーバで例外発生時のエラー情報をJSONで返す方法を調べたのでメモです。 やりたいこと 例外が発生した場合は常にエラー情報をJSONで返したい。 例外の種類によってステータスコードを分けたい。例えば、バリデーションエラーが発生し…

Swagger Codegenにおけるspring-cloudテンプレートのカスタマイズ

Swagger Codegenではコード生成のテンプレートをカスタマイズできますが、ライブラリに spring-cloud を選んだ場合はカスタマイズの仕方に注意が必要です。 springのテンプレート構造は以下になります。 template/ api.mustache ←すべてのライブラリで共通の…

Spring Cloud Feignのステータスコードと例外

Spring Cloud Feignの例外を調べてみたのでメモします。 (11/22修正)Root Causeのスタックトレースしか貼り付けていなかったので、すべてのCauseに修正しました。 結果 エラーのステータスコードを受け取った場合、 feign.FeignException が発生します。 …

Gradle Swagger Generator Plugin 1.5.1 has been released

Gradle Swagger Generator PluginでSwagger UIを生成できるようになりました。 以下のビルドスクリプトで generateSwaggerUI タスクを実行すると、 build/swagger-ui フォルダにSwagger UIが出力されます。 plugins { id 'org.hidetake.swagger.generator' v…

Using env.BRANCH_NAME on Jenkins Multibranch Pipeline

Jenkins Multibranch Pipelineで、ビルドの契機となったブランチに応じて固有の処理を行いたい場合があります。例えば、masterブランチがpushされた場合のみテスト環境にデプロイするといった使い方が考えられます。Travis CIの TRAVIS_BRANCH 、Circle CIの…

開発チームがプロダクトコードを書き始めるまでに準備すること

頭の中を整理するため、いわゆるZero Feature Releaseに必要なことをまとめてみました。開発チームがプロダクトコードを書き始めるまでに作っておくとよいものです。 ソースコードリポジトリ(例:GitHub) エディタ設定(例:editorconfig) ビルドツール(…

Gradle Swagger Generator Pluginを公開します

GradleでSwagger YAMLからAPIサーバやAPIクライアント、APIドキュメントを生成するプラグインを作りました。 github.com もともとはGradle Swagger Codegen Pluginという名前でしたが、コードだけでなくドキュメントの生成もできるようになったので名前を変…

GradleからS3に成果物を公開する

GradleからS3に成果物を公開する方法を調べたのでメモです。あらかじめIAMユーザを作成し、キーを取得しておく必要があります。 S3 Maven Repositoryに公開する Gradleのmaven-publishプラグインを使うと、S3のMavenリポジトリに成果物を公開できます。詳し…

スクリプトコンソール上でSlaveでコマンドを実行する

Jenkinsのスクリプトコンソールを利用すると、Slaveで任意のコマンドを実行できます。具体的には、 RemotingDiagnostics.executeGroovy() メソッドを利用してSlaveでGroovyスクリプトを実行します。 import hudson.util.RemotingDiagnostics // Slaveノード…

宣言的APIクライアントSpring Cloud Feignを使ってみる

Spring Cloud Feignを利用すると、Spring MVCと同じアノテーション(@RequestMapping)を使ってAPIクライアントを定義できます。同じアノテーションが使えるので学習コストを抑えられるメリットがあるでしょう。また、APIサーバとAPIクライアントの仕様が同…

ACMのドメイン所有確認メールをSESで受信

aws

ACM(Amazon Certificate Manager)でSSL証明書を発行するには、ドメイン管理者に送付されるメールで承認をクリックする必要があります。ドメインの管理組織が異なる場合やメールサーバを用意していない場合は、ドメイン管理者へのメールをSESで受け取ること…