Kotlin の似たようなクラス
(昔書きかけて完成していないっぽいですが、置いておいても忘れるだけなのでcommitしてしまいます)
value object のことを調べていたら、 Kotlin にぱっと見似たような異なるクラス定義方法があることに気付いたので、それらについてまとめておきます。
…Maven Wrapper が Maven3 に正式導入された
Gradle には Gradle Wrapper といって、 ビルドするためのツールである Gradle の該当バージョンがローカルにインストールされていない場合でも、自動で取得してビルド環境をセットアップしてくれる仕組みがあります。
…Value Object(値オブジェクト)についての覚え書き
2022年5月中旬から下旬にかけて Value Object(値オブジェクト) についての議論がさかんに行われていました。
そのときに書き起こされた文章へのリンクを、(分かる範囲で)時系列順に残しておきます。
…GitHub の通知をちゃんと使えるように設定する
はじめに
今回初めて仕事で GitHub (GitHub Enterpsise Cloude) を使うことになりました。
始める前は少しアコガレなんかも有ったりしたのですが、いざやってみると、思ったほど素敵では無いですね… これまでプライベートスペースだったところに仕事が入り込んでくる居心地の悪さよ。 後日、他の人に聞いてみたり見てみたりした感じ、(規約的にはまずそうですが)アカウントを使い分けている人もそれなりに居そうで、自分もそうすりゃ良かったかも、と思う始末です。
…Elixir 開発環境をセットアップする
はじめに
改訂新版 Elixir/Phoenix 初級①: はじめの一歩 という書籍で Phoenix というウェブフレームワークの勉強をはじめました。
Elixir という言語で実装していくことになりますが、本書籍は Elixir 言語入門としても優れているので、少なくとも本書を読み進めていくに当たって、言語仕様のことで困ることは無さそうです。
…自分の作成したGitブランチを表示する
リモートブランチに一時的なブランチ、テスト的に作ったブランチなどをpushしていたのを掃除したくなりました。
複数人で共同作業するために利用しているので、どれが自分のブランチなのかをまずリスト化したかったので、どうすれば出力できるか調べました。
…WSL2上のGUIアプリケーションを動かす
Tauri の開発環境を Windows10 の WSL2 に移行するために、 WSL2 上の GUI アプリを Windows で表示するようにセットアップしました。
とは言いつつ、既に次の手順でセットアップしたことがあるので、今回はこれが動くかどうかを確認しただけですが。
…WSL2上にDockerをインストールする
現在、 Windows で Docker を利用するには大きく2つ方策があるのかなと思います。
-
WSL2 上に Docker Engine をインストールする
自分は元々 Ubuntu 上で Docker を利用してきたので、馴染みのある後者を選択することにしました。 (ちなみにこだわりが無いのなら前者の方が良いと思います)
…Kotlin で JPA エンティティクラスを定義する
Kotlin で JPA エンティティを実装しようと思って調べた結果をまとめた記事です。
まとめ:
-
プロジェクト構成について
-
kotlin-jpacompiler plugin を適用する -
all-opencompiler plugin を適用し、@Entity,@Embeddable,@MappedSuperclassを対象に設定する
-
-
エンティティ定義について
-
(原則として)
dataclass やvalの利用は諦める- Java で Lombok の
@Dataや@Valueを付与したときと同じような問題がある(参考)
- Java で Lombok の
-
Jacksonでコンストラクタを利用してデシリアライズ
Jackson は引数なしコンストラクタが必要、というblogを目にしましたが、正しくありません。
-
@JsonCreatorを付与することでそのコンストラクタを使ってデシリアライズするように指示できます。- コンストラクタが1つしか無い場合は省略できます。
-
JSON プロパティと Java フィールドのマッピングは
@JsonPropertyで行えます。-
jackson-module-parameter-namesを利用すると、メソッドシグネチャのパラメータを利用してマッピングできるので、この設定を省略できます。- ちなみに、この機能は Jackson 3.x では本体(
jackson-databind)に統合されるようです。(2.x は Java7 以前もサポート対象にしているので Java8 以降の機能は切り出しているみたいです)
- ちなみに、この機能は Jackson 3.x では本体(
-
git worktree を利用していると git-commit-id-maven-plugin でエラー
…になりました。
コマンドライン引数でスキップさせるには、 #278 で導入された maven.gitcommitid.skip オプション(現時点最新版の該当コードリンク)を利用して、
mvn -Dmaven.gitcommitid.skip package
などとすれば良さそうです。
…JUnit + Mockito テストケースを Kotest + MockK に書き換える
Kotest + MockK の組み合わせは Kotlin ではメジャー…かと思いきや検索してみても公式の
にあるような例しか見つかりませんでした。 Mockito で言うところの @Mock や @InjectMocks を使ってモックを差し込みたいんじゃい! ということでサンプルです。
Kotlin で JUnit4 のテストケースを書く
-
JUnit4 / Parameterized
-
Mockito 利用
-
テスト対象が Lombok, MapStruct 使用
な状況で Kotlin でテストコードを書きます。
先にまとめを書いておきます。
-
(IntelliJ で Java のコードを
.ktにペーストすると Kotlin コードに変換してくれるが、コレジャナイ感溢れるコードになったのであまり自動変換コードを信用するのは危険かも) -
@Mockや@InjectMocksを付与したフィールドはlateinit var -
staticメソッドを書きたい場合はcompanion objectで囲って@JvmStaticアノテーションを付与する- 今回の場合は JUnit4 のパラメータ供給メソッド(
@Parameters)が該当
- 今回の場合は JUnit4 のパラメータ供給メソッド(
-
Kotlin では
whenは予約語なのでバッククオートで囲う必要がある -
Kotlin で Mockito の
any()を利用すると “ArgumentMatchers.any(mViewModel.CountSubscriber::class.java) must not be null” みたいなエラーになる-
…らしいが今回のコードでは再現しなかった
-
対処法は、
any()を定義し直したりmockito-kotlinを利用したりする方法がある
-