ひだまりソケットは壊れない

ソフトウェア開発に関する話を書きます。 最近は主に Android アプリ、Windows アプリ (UWP アプリ)、Java 関係です。

まじめなことを書くつもりでやっています。 適当なことは 「一角獣は夜に啼く」 に書いています。

読んだ : Clean Architecture 達人に学ぶソフトウェアの構造と設計 (Robert C. Martin 著)

Robert Cecil Martin 氏、いわゆるアンクル・ボブ (ボブおじさん; Uncle Bob) による Clean Architecture についての書籍。Clean Architecture 達人に学ぶソフトウェアの構造と設計作者: Robert C.Martin,角征典,高木正弘出版社/メーカー: KADOKAWA発売日: 2…

kotlinx.coroutines 0.26.0 でコルーチンの構造化 (structured concurrency) がやりやすくなった

この記事は Recruit Engineers Advent Calendar 2018 の 10 日目の記事です。 今日は Kotlin におけるコルーチンの構造化された並行性 (structured concurrency) やコルーチンスコープ (coroutine scope) についてです。昨日は古川陽介さんの 『R-ISUCON Win…

Maven の Surefire プラグインと JMockit と JaCoCo プラグイン

ビルドツールとして Maven を使っている Java プロジェクトで JMockit と JaCoCo を使いたいときの話。 ユニットテストの実行には Maven Surefire プラグインを使用しているものとする。 また、JaCoCo の適用には JaCoCo Maven プラグインを使用するものとす…

Android アプリバンドル (Android App Bundle) について学んだ

2018 年の Google I/O でも発表があった *1 Android アプリバンドル (Android App Bundle)。 Android Studio 3.2 を使っているとアプリのビルドで App Bundle を選べるようになっていたりするし何となく存在は知っていたけどちゃんと調べてはいなかった。dev…

MockK と JMockit の組み合わせで AttachNotSupportedException 例外が発生することがあるっぽい

Kotlin で Mockito を使うのが辛くなってきた *1 ので、「よーしパパ MockK 入れちゃうぞー」 と言って MockK 1.8.12 を導入したのだけど、その結果テストを実行すると以下のような初期化エラーが発生するようになってしまった。 java.lang.ExceptionInIniti…

JaCoCo の Java 10 対応はバージョン 0.8.1 から

Gradle 4.6 で Gradle の JaCoCo プラグインを使用しているプロジェクトをビルドすると下記のエラーが発生した。 Java 環境は OpenJDK 10。 java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invok…

Azure Pipelines で Android アプリの CI をやってみてる

最近 Microsoft から発表された Azure DevOps。 Visual Studio Team Foundation (VSTF) をリブランドしたものだそう。 Azure DevOps の概要 | ブログ | Microsoft Azure Visual Studio Team ServicesからAzure DevOpsへ - kkamegawa's weblog VSTF のときに…

JerseyTest で Servlet のリソースを扱う JAX-RS 部品のユニットテストを行う方法

要約 Jersey のテストフレームワークが便利。 Servlet のリソースを扱う JAX-RS コンポーネントのユニットテストを書くときには GrizzlyWebTestContainerFactory を使用すると良い。 前提知識 : Servlet と JAX-RS Jakarta EE (旧 Java EE) における HTTP サ…

Gradle 4.9 の新しいタスク定義 API と Gradle Kotlin DSL 1.0 RC での対応

Gradle 4.9 の新しいタスク定義 API Gradle 4.9 で、新しいタスク定義 API が導入されました。 まだ incubating です。blog.gradle.orgパフォーマンス向上のため、タスクの設定を遅延実行する、というのがこの新しい API の導入の目的のようです。 古い API …

Gradle のマルチモジュールプロジェクトで JaCoCo の結果を集計する

Java / Kotlin のコードカバレッジツールとして JaCoCo を使いたい。 Gradle のマルチモジュールプロジェクトでの JaCoCo の導入について記す。(この図は JaCoCo によるコードカバレッジの集計結果の履歴を Codecov で表示した例。) JaCoCo について JaCoCo …

Windows 10 で Git 環境を整える

自分用メモ。 昔は GitHub Desktop をインストールすれば Git Shell も使えるようになって PowerShell で快適 Git 生活が送れていたのだけど、最近 GitHub Desktop をインストールしてみたところ、どうやら Git Shell は同梱されないようになってしまったっ…

読んだ : 入門 Kubernetes

Kubernetes に興味を持ちつつ何も手を付けていなかったのだけど、会社に置かれてたのでまずは本を読んだ。入門 Kubernetes作者: Kelsey Hightower,Brendan Burns,Joe Beda,松浦隼人出版社/メーカー: オライリージャパン発売日: 2018/03/22メディア: 単行本(…

Firefox の JS コンテキストのロケール指定方法

背景・目的 WebDriver 経由で geckodriver + Firefox を操作して JS の自動テストを行いたい。 その時、JS にロケール依存の処理が含まれていれば、テスト実行時にも Firefox の JS コンテキストのロケール指定を行いたい。本記事では、Firefox 59 以降での…

MySQL (InnoDB) とトランザクション分離レベル・ロック

(注記) 去年書いて下書き状態になってた記事をそのまま公開した。 MySQL 8.0 公開前に書いた内容なので MySQL 5.7 について言及しているが、多分 MySQL 8.0 でも基本的には変わらない気がする。 背景・目的 DB 上に指定の ID の行が存在していれば UPDATE し…

PostgreSQL と H2 Database の両方で使える SEQUENCE 値生成方法 (MySQL の AUTO_INCREMENT 的なやつ)

SQL DB に新しい行を挿入したときに自動的に ID 値を生成して欲しいことはままある。 このような処理をしてくれるテーブル定義についての話。 MySQL だと AUTO_INCREMENT を使いがち MySQL を使ってる場合は AUTO_INCREMENT で済ませちゃうことが多い (H2 Da…

WebdriverIO を使い始めるときのハマりどころ (geckodriver を添えて)

WebDriver で Firefox を操作するために Node.js 用の WebDriver バインディングである WebdriverIO を使ってみました。webdriver.io使ってみると意外とハマりどころがあってちゃんと使い始めるまでに時間がかかったので、自分がはまったところを書き残して…

読んだ : 最高のリーダー、マネジャーがいつも考えているたったひとつのこと

ラインマネージャに任用されたのでマネジメント系の本を読んだりしてる。 これは社長おすすめの一冊。最高のリーダー、マネジャーがいつも考えているたったひとつのこと作者: マーカスバッキンガム,Marcus Buckingham,加賀山卓朗出版社/メーカー: 日本経済新…

読んだ : エンジニアリング組織論への招待

広木大地さんの 『エンジニアリング組織論への招待』。 良い本だと話題になってましたね。 うちのチームでも皆で読んでます。エンジニアリング組織論への招待 ~不確実性に向き合う思考と組織のリファクタリング作者: 広木大地出版社/メーカー: 技術評論社発…

Android アプリの Drawable リソースのエイリアスの作成について

当たり前の内容だけど日本語ドキュメントが間違っててバグを埋め込んでしまった (リリースはしてない) ので共有。 Drawable リソースのエイリアス作成 res/values/drawables.xml ファイルみたいなファイルを作って、そこに <drawable name="alias_name">@drawable/target_drawable</drawable> みたい…

Android における View にまつわる状態とライフサイクルについての考慮のメモ

Activity が再生成される際の、View の onSaveInstanceState メソッドと onRestoreInstanceState メソッドについて個人用にまとめておく。 Activity の再生成 Activity が再生成 (re-creation) される際には、以前の状態が Activity#onCreate と Activity#on…

読んだ : さわって学ぶクラウドインフラ Amazon Web Services 基礎からのネットワーク & サーバー構築

Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版作者: 玉川憲,片山暁雄,今井雄太,大澤文孝出版社/メーカー: 日経BP社発売日: 2017/04/13メディア: 単行本この商品を含むブログを見るインフラ周りちゃんと学ぶぞー! と言いつつ時間ばかり経…

Java (JVM 言語) におけるコードカバレッジの計測方法

Java と Kotlin で書かれたアプリケーションのコードテストのカバレッジを取りたいなーと思って、コードカバレッジ計測ツールについて調べてみてる。 JVM 言語におけるコードカバレッジ計測の方法 JaCoCo のドキュメントにわかりやすくまとまっている。 Cove…

Ktor の自動再読み込み (Automatic Reloading) 機能

JetBrains 製の Kotlin 用 web アプリケーションフレームワークの Ktor の自動再読み込み機能について。 開発時にサーバー全体を再起動しなくても、ソースコードを変更してビルドした後のクラスファイルの再読み込みをしてくれる機能である。 ドキュメント :…

Gradle の build scans 機能でビルドの情報を収集してブラウザ上で確認・共有できるぞ

Gradle に build scans 機能が追加されていることに気づいた。 Build scans are an important tool for developing and maintaining Gradle builds. They provide insights into exactly what your builds are doing, helping you identify problems with th…

Gradle のマルチモジュールプロジェクトで maven-publish プラグインを使う場合の依存関係

Gradle でビルド成果物 (build artifact) を Maven リポジトリに公開するためのプラグインとして、maven-publish プラグインがある。 Maven Publishing (new) - Gradle User Manual maven-publish プラグインとマルチプロジェクトの依存関係 簡単な例 Java …

Ktor で例外発生時に Sentry にクラッシュレポートを送る

最近、個人で web アプリケーションを書くのに Ktor (Kotlin の web アプリケーションフレームワーク) を使っています。Ktor では、1 つ以上の 「インターセプタ (interceptor)」 から成る 「パイプライン (pipeline)」 にリクエストを通すことで、HTTP リク…

Rust のプレリュード (prelude) とは何か

use std::io::prelude::*; というコードを見かけて、「プレリュード (prelude) ってなんだっけ」 と思ったので調べた。 Rust のプレリュード まず、Rust で真にプレリュードと呼ばれるものは std::prelude というモジュールらしい。 Rust comes with a varie…

CircleCI 2.0 で複数ファイルからキャッシュキーを生成する便利な方法

CircleCI 2.0 のウリの一つが、1.0 より柔軟になったキャッシュ機能である。 キャッシュのキーを自分で決定し、ファイル群をキャッシュすることができる。 そして、キャッシュのキーの決定には、ブランチ名を使ったり、指定のファイルのチェックサムを用いた…

Docker コンテナなどの Linux 環境でタイムゾーンを指定する (TZ 環境変数)

やりたいこと Docker コンテナ内のタイムゾーン設定を変更したい。 CircleCI 2.0 での仮想マシン上のタイムゾーン設定を行いたい。 など、Linux 環境でのタイムゾーン設定を行いたい。 調べてよく引っ掛かるのは /etc/localtime (などのファイル) を変更する…

Java Persistence API (JPA) の JPQL で集計処理を書く (Spring Data JPA)

Spring Data JPA を使っていて、集計処理をどのように書くのが良いかわからずに調べた記録。 (例は Spring Data JPA 固有の話ではあるが、JPQL の知識は Spring Data JPA 以外での JPA でも使える。) Spring Data JPA での集計の例 リポジトリにメソッドを定…