miyohideの日記

技術的なメモなどを記しています

2019年1月17日(木)

バタバタしていたらいつの間にか一週間以上更新できていなかった。

license-gradle-pluginがうまく動かない

Javaアプリで「アプリが使っているライブラリの一覧とそのライセンスを知りたい」ってニーズがあったので、何か無いかなと思い調べてたどり着いたのが、hierynomus/license-gradle-plugin。

github.com

早速、build.gradleプラグインを読み込ませる。

buildscript {
    ext {
        springBootVersion = '2.1.2.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}
// 以下3行を追加
plugins {
    id "com.github.hierynomus.license" version "0.15.0"
}

apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

あとは、./gradlew downloadLicensesと打って実行。

$ ./gradlew downloadLicenses

Welcome to Gradle 4.10.2!

Here are the highlights of this release:
 - Incremental Java compilation by default
 - Periodic Gradle caches cleanup
 - Gradle Kotlin DSL 1.0-RC6
 - Nested included builds
 - SNAPSHOT plugin versions in the `plugins {}` block

For more details see https://docs.gradle.org/4.10.2/release-notes.html

Starting a Gradle Daemon (subsequent builds will be faster)

BUILD SUCCESSFUL in 18s
1 actionable task: 1 executed

$

結果は、build/reports/license以下に出力されるみたい。

$ ls -l build/reports/license/
total 48
-rw-r--r--  1 miyohide  staff  1218  1 17 22:01 dependency-license.html
-rw-r--r--  1 miyohide  staff    19  1 17 22:01 dependency-license.json
-rw-r--r--  1 miyohide  staff    16  1 17 22:01 dependency-license.xml
-rw-r--r--  1 miyohide  staff  1198  1 17 22:01 license-dependency.html
-rw-r--r--  1 miyohide  staff    15  1 17 22:01 license-dependency.json
-rw-r--r--  1 miyohide  staff    12  1 17 22:01 license-dependency.xml

$

あれ?やたらとファイルサイズが小さい。ちょっと中身を見てみよう。

$ head build/reports/license/dependency-license.xml
<dependencies />
$

う〜ん、空だ。なんでだろう。

ちなみにbuild.gradleimplementation 'org.springframework.boot:spring-boot-starter'の部分をcompile 'org.springframework.boot:spring-boot-starter'とし、./gradlew clean && ./gradlew downloadLicensesを実行すると...

$ cat build/reports/license/dependency-license.xml
<dependencies>
  <dependency name='org.springframework:spring-expression:5.1.4.RELEASE'>
    <file>spring-expression-5.1.4.RELEASE.jar</file>
    <license name='Apache License, Version 2.0' url='http://www.apache.org/licenses/LICENSE-2.0' />
  </dependency>
(以下略)

う〜ん、きちんと出力される。

2019年1月8日(火)

ばたばた忙しい。

RailsスタイルからRESTを学ぼう

RailsでRESTを知って以来、何でもかんでもRESTでURLを設計してしまう自分。ただRESTって意外と説明が難しい。そんな中、@tkawaさんによる説明資料が素晴らしくわかりやすい。

www.slideshare.net

個人的には、P61のGraphQLが目指している特性とRESTとの違いを詳しく知りたいと感じた。

2019年のJava

Javaのリリースモデル変更については弊社内でも結構騒ぎになっている。そんな中見かけた解説ページ。あの有名な寺田佳央さんが書かれている。

gihyo.jp

むやみやたらに「最新バージョンに追いつけ」って書かれていないところが流石ですね。塩漬けにしたいシステムとか色々と頷きながら読んでました。

でも、今から作るのならちゃんとテストコード書こうよとも思います。

2019年1月7日(月)

仕事始め

Azure SQL Database Reconfiguration対応

仕事でAzure SQL Databaseを触ることがあって、いろいろと調べている。Azure SQL Databaseでは時たまReconfigurationってものが行われるらしく、アプリケーションはReconfigurationに伴う瞬断に対応する必要があるみたい。

blogs.msdn.microsoft.com

Microsoftが書いている推奨事項は以下に書かれているんだけれども、対応が必要そうなのはリトライロジックの実装。

blogs.msdn.microsoft.com

ではJavaアプリケーション(Spring Boot)ではどうするか。リトライって言ったらRubyのretryキーワードがあって実装が楽なんだけれども、Javaだと何があるかな...と思ったらSpring-Retryってプロジェクトがあった。

github.com

Springプロジェクト前提なんだけれども、ちょうどSpring Bootでアプリを書いているからちょうどいいや。

ちょっとこれで試してみよう。

2019年1月3日(木)

WEB+DB PRESS Vol. 106のTodoアプリに対してテストを書いた

2018年9月4日の日記に『WEB+DB PRESS Vol. 106のTodoアプリに対してテストを書きたい』って書いたんだけれども、ようやくそのテストを書くことができた。

github.com

テストコードを書くことが第一目標だったんだけれども、ついでに

  • Java 11
  • Spring Boot 2.1.1

という環境で動かすことにした。

テストについては、だいたいサクッと書くことができたんだけれども、Repositoryのテストで苦闘。最初はDBUnitを使って実装しようとしたんだけれども、どうにもこうにもうまく動かなかったので、DbSetupを使うことにした。

dbsetup.ninja-squad.com

ソースを見て分かる通り、テストコードの行数が多くなるのとテストデータをCSVとかで作りたいという思いからDBUnitにしたかったので、ちょっと残念。もうちょっと試してみたい。

とりあえず実装したんだけれども、フィールドインジェクションを使っていたりと警告たくさんあるので徐々にメンテしていこうかなと。

2018年12月31日(月)

まったりとした年末年始。

英語

英語学習は今年色々と断捨離をして、現在は

を繰り返しやるってことをしているんだけれども、どうもこうも伸びている感じがしない。あと、会話。

そんな中見つけたエントリ。

rfushimi.hatenablog.jp

なるほど。アプリの説明はできそうでできないものだな。身近にあるし、取り入れやすいかも。来年から外国籍の方が同じ部署に来られるということなので、積極的に話しかけてみよう。まずはそこから。

2018年12月28日(金)

今日からおやすみ。

ソフトウェア設計が重要である理由

postd.cc

重要なんだけれども、やりすぎる傾向が強いような気がするってのもある。

「モジュラリティ」について書かれているけれども、すぐには使いそうもない汎化をしてしまったりするパターンが多かったり。

2018年12月26日(水)

Ruby 2.6がリリースされたようで。色々と更新しないといけないな。

プロと読み解く Ruby 2.6 NEWS ファイル

まずはRuby 2.6の変更点を掴む。

techlife.cookpad.com

なるほど。濃い。

Ruby 2.6 Advent Calendar 2018

tmtmsさんが書かれているRuby 2.6の変更点。具体例も豊富で非常にわかりやすい。

qiita.com

カバレッジ

Ruby 2.6で入った"oneshot coverage"という機能の紹介記事。これは個人的に欲しかった機能。ちょっといろいろと試してみよう。

techlife.cookpad.com

Ruby 2.6.0とより高速なcsv

Ruby 2.6で早くなったCSV処理について解説。

Ruby 2.6.0とより高速なcsv - ククログ(2018-12-25)

CSVファイルのパース処理は色んなものを処理しようとすると一気に複雑になるんだけれども、それをどのように処理しているのか、また、どのようにして高速化しているかについて記している。これも自分にとってはすごく嬉しいポイント。

測定って大事だな。