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

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

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

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 での集計の例 リポジトリにメソッドを定…

Kotlin のコルーチン (coroutines) について学ぶ

KotlinConf 2017 の情報を追ったり、Ktor を見たりしているとコルーチンがよく出てくる。 コルーチンについては概要は知っているが詳細を追いかけていなかったので、コルーチンについて学んでメモ程度に記録しておく。Kotlin 1.1 においてコルーチンは実験段…

Kotlin で拡張関数をオーバーライドして実装を切り替えられるぞ!

背景 : コルーチンの Select 式の実装を理解するのが難しかった コルーチンのドキュメントを読んでいて select 関数というのが出てきたのだけど、これの実装がどうなっているのかすぐにはわからなかった。 suspend fun selectFizzBuzz(fizz: ReceiveChannel<String>,</string>…

Java SE 9 の javac で過去バージョンをターゲットにするときには --release オプションを使用すると良い

JDK の javac コマンドを使って過去バージョンの Java 言語で書かれたソースコードをコンパイルする際には、-source オプションや -target オプションを使用してきました。 (JDK 8 までの話。) このとき、適切なブートストラップクラスパスを設定しなければ…

Java 9 のモジュールシステム (JPMS; JSR 376) の概要

Java SE 9 がリリースされましたね! めでたい!さてさて、Java SE 9 の目玉といえばやはり The Java Platform Module System (JPMS; JSR 376) ですよね! Project Jigsaw の心臓部です。この記事では JSR 376 をさらっと読んで、JPMS の全体像をまとめてお…

WebDriver によるスクリプト実行の現状 (geckodriver と ChromeDriver)

WebDriver とは、Web ブラウザを外部から操作するための標準化された API です。 詳細は先日書きましたのでご参照ください! WebDriver について私が知っていること (2017 年版) - ひだまりソケットは壊れない 今回は、WebDriver のコマンドで JS スクリプト…

WebDriver について私が知っていること (2017 年版)

もともと Selenium 2.0 で導入された WebDriver ですが、単に 「WebDriver」 と言ってもいろいろなものを指すことがあり *1、WebDriver を初めて使おうとする人にはややこしい状況だと感じています。 (私は数か月前に WebDriver を使おうとして混乱しました…

ThreeTenABP と ThreeTenBP の関係について (Android における JSR-310 バックポート)

「ThreeTenABP って Android フレームワークに依存するけど、ドメインレイヤとかで Android 依存を排除したい場合どうするのがいいんですかね」 という相談を受けて、ThreeTenABP 周りを調べたのでメモ。 ThreeTenABP って何? JSR 310 Date and Time API の…

読んだ : .NET のエンタープライズアプリケーションアーキテクチャ 第 2 版 / Dino Esposito、Andrea Saltarello 著

ドメイン駆動開発 (DDD) 関係の読書会に参加していて、最近読んでいるのがこれです。.NETのエンタープライズアプリケーションアーキテクチャ 第2版 (マイクロソフト公式解説書)作者: Dino Esposito,Andrea Saltarello,日本マイクロソフト(監訳),クイ…

Android のアカウントマネージャ (AccountManager) の概説

最近 Android のアカウントマネージャを仕事で触ったので、調べた内容としてアカウントマネージャの概要をまとめておきます。 Web 上を調べると AccountManager を使う処理の実装方法はいろいろ見つかるのですが、アカウントマネージャの概要を説明している…