きり丸の技術日記

技術検証したり、資格等をここに残していきます。

2022-01-01から1年間の記事一覧

Javaのラムダ式(Stream API)でNullableな項目にCollectors.groupingByする

Javaのラムダ式(Stream API)にて、Collectors.groupingByというグルーピングしてくれるメソッドがあります。ただし、このメソッドの引数はNonNullである必要があり、万が一Nullが混ざってしまうとNullPointerException: element cannot be mapped to a nul…

【GitHub Actions】npmのpackage.jsonをアップデートするPull Requestを作成する

package.jsonのライブラリバージョンを、現在推奨されているバージョンまでアップデートする方法を探していました。そんなに多用するものではないので、GitHub Actionsでなんとかできないか探したのがこちらの記事です。 環境 taichi/actions-package-update…

Gradleでマルチモジュールにしている状態から別モジュールのテストコードを共有する

テストのセットアップメソッドや、ファイルからドメインを生成するメソッド等々の便利メソッドを作るとします。マルチモジュールの場合、基本的にはプロダクトコードしか依存しないので、テストの便利メソッドは共有しません。 今回の記事では、テストコード…

【設計論】文字列だと単純にラップした型でも便利

ちょっとポエム寄りのお話です。 プリミティブ型をラップした型を作成することは、対象の業務を表現できることがメリットです。たとえば、主キーのIDが文字列だった場合に、次の制約があった場合でもプリミティブ型では伝えられません。 頭文字3桁がシステム…

メソッド呼出回数によって返却値を変更する(正常と例外)【JavaのMockito】

Mockitoを使用して、モックにしたメソッドの呼出回数によって正常な値と例外を返却する方法を残します。 環境 Java 17 org.mockito.junit.jupiter 4.0.0 ユースケース 1 対応 次の現在日付を返却するメソッドをモックにします。 public interface OffsetDate…

Dockerで起動していたAPIにlocalhostで接続できなくなった

※ この話はDocker固有の話ではありません。雑文です。 1週間前まで正常に動いていたのに、急に動かなくなったのでびっくりしました。 環境 Windows 11 結論 localhostがIPv6の::1に変換されていた。 状態 Dockerでローカル環境を構築していた localhostでDoc…

Javaでメソッド参照を使ったまま、ラムダ式で条件否定をする(Predicate.not)

私はラムダ式での可読性を上げるため、メソッド参照を使用することが多いです。ただ、メソッド参照を使用したまま条件否定する方法を知らなかったため、無名関数を使用して条件を否定していました。または、内部で条件否定をしたメソッドを別に用意している…

PythonでJSONを比較したい(I want assert JSON by Python)

環境 Python 3.9 ユースケース PythonでAPI開発を行い、レスポンスのJSONを比較したい。 次のJSONが等価であることを期待する。 { "id": 100, "name": "kirimaru" } { "name": "kirimaru", "id": 100 } できていないこと ソート順を無視したJSONの配列の比較…

Javaで日付の差が何ヵ月かを計算する。あまりは切り上げる (LocalDate, ChronoUnit)

閏年等を考慮しだしたら混乱したのでメモ残します。 環境 Java 17 対応 対応自体は簡単で、ChronoUnit.MONTHESで月の差分を取得できます。今回は、1ヵ月に満たない日付がある場合は切り上げるので+1するだけです。 LocalDate start; LocalDate end; ChronoUn…

Pythonでインスタンスが自作型ではなく、組込み型(built-in types)であることを判別する(isinstance)(primitive types)

Pythonにて処理する際のインスタンスが組込み型(built-in types)であることを判別したかったのですが、簡単にはできませんでした。もし、簡易にできるようになったら、教えてください。 なお、組込み型(built-in types)とは、Pythonが定義しているstr, i…

Lombokで自動生成されるGetterのprefixを変更したかった(Accessor prefixが使いたかった)

うまくいかなかったことのメモ。 環境 IntelliJ IDEA 2021.3.3 (Ultimate Edition) 2022/05/07時点 きっかけになったツイート なるほど。APIでyyyymmddのフォーマットを期待するrequest date型を用意してたけど、そこからlocaldateに変換するときにメソッド…

IntelliJ IDEAのLive Templatesでよく使うコードを登録して生産性アップする(テストのNestedクラスを生成する)

IntelliJ IDEAでは「Generate code」という機能があります。「Alt + Insert」等のショートカットキーで呼び出すことができます。 この機能を呼び出すと、「@Test」「@BeforeEach」等々のよく使用されるコードが生成されます(公式によると、このよく使用する…

Javaでnull様等のnullという文字列を埋める(String#formatted)

以前にMessage.formatを使用して、null様のnullという文字列を埋める方法を調べました。 Java15にて新しくStringにformattedメソッドが増え、null様のnullという文字列を埋める方法が新しくできるようになりました。内部的に使用しているFormatterクラス自体…

使用していないDockerイメージ等々をコマンドで一掃する(docker system prune -a -f --volumes)

全消しするオプションも含めたコマンドを次に記載します。 docker system prune -a -f --volumes 環境 Docker Docker version 20.10.13, build a224086 解説 docker system pruneだとイメージ、コンテナ、ネットワークを削除します。ただし、イメージに関し…

自分がよく使うオプション含めたGitコマンド集

自分が使っているGitコマンドを纏める記事。「Gitでこういうことできる!」よりも「Gitをこう使っている」の方が個人個人の使い方の属性が出て面白いんじゃないかと思って、書きました。なお、cherry-pickとかの頭いいコマンドは知りません。 コマンドではな…

Java 8以降、Javaで文字列の日付存在チェックする(閏年でないときの閏日チェック)(Check leap day)

JSON等でデータのやりとりをする時には、直接日付型を渡すことができません。文字列で渡す必要があります。 ただし、日付に関しては閏年が存在するため、単純な正規表現では文字列の異常値を検出できません。 今回の記事では、Javaで文字列の日付が存在する…

ReadOnlyなDocker環境のPytestを実行するとNo such file or directoryが発生した

pytestの起動時に失敗するので、原因を把握するのに時間がかかってしまいました。 環境 Docker Docker version 20.10.13, build a224086 Docker Compose docker-compose version 1.29.2, build 5becea4c Windows Macだと発生しない事象のようです 前提 Docke…

IntelliJ IDEAでmasterブランチをrebaseしようとしたらprotectedされていた【Git操作】

小ネタ。 普段、自分のリポジトリを操作する際には、IntelliJ IDEAのIDE操作でGit操作し、RebaseやSquashでコミットログをきれいにしています。ただ、IntelliJ IDEAではデフォルトでmasterブランチをRebaseやSquashをできないように制御しています。 今回の…

組織(会社)PrivateリポジトリのPull ReuqestをIntelliJ IDEAで確認したい

IntelliJ IDEAではPull Reuqestを画面上で確認できます。しかし、個人アカウントであればPrivateリポジトリのPull Reuqestは確認できるものの、組織アカウントのPrivateリポジトリはIntelliJ IDEA上でPull Requestを確認できませんでした。 振り返ってみれば…

JavaのLombokのWithアノテーションを素振りした

個人用ネタ。 今回素振りするのはLombokのWithアノテーションです。他の言語でも同様の機能を達成したいときにwithという名前を使ってみてはいかがでしょうか。おそらく、Javaに限らず他言語でも通用するメソッドです。 環境 Java 17 ゴール LombokのWithア…

JavaにてJSONからインスタンスを生成する(テスト時に重宝)

個人的にはテストで多用していることが多いです。JacksonライブラリのObjectMapper最高ですね。 具体的にどのようなユースケースで使用しているかという点に関しては、一番最後に記載しています。 なお、Jacksonライブラリを使用したObjectMapperの記事は大…

「ファイル名を指定して実行」「エクスプローラ」からcmdを管理者権限で実行する

小ネタ。 今まで、コマンドプロンプトの管理者権限の起動を右クリックから行っていたので、もうちょっと簡単にできないか探った記事です。 環境 Windows 10 ファイル名を指定して実行から管理者権限の起動 WindowsにてWin + Rキーを入力すると「ファイル名を…

Gitで直前、N個前のブランチに移動する(git switch -, git siwtch @{-n})

意外と知られていない気がしたのでブログにします。便利です。 環境 Git Bash GNU bash, version 4.4.23(1)-release 方法 ブランチを変更するGitコマンド、switchとcheckoutにブランチ名ではなく-を設定すると直前のブランチに移動できます。なお、この-は@{…

JavaScript, GAS, TypeScriptで自作例外を作成する

GASを使用していて、雑にエラーハンドリングしたい時に自作例外をthrowして、ハンドリングしたいと思いました。 今回の記事は、JavaScript・GAS・TypeScriptで自作例外を作成します。 環境 GAS 2022/01/27 TypeScript 4.4.2 CodeSandboxで検証 コード 自作例…

Rubyでモックの呼び出し回数によって返却値を変更する

同一のパラメータでメソッド呼び出しを行っている。しかし、呼び出した回数によって返却値を変更したい。 そのようなユースケースを満たすために素振りしました。 環境 Ruby 3.0.2p107 Rails 6.0.3.7 RSpec ユースケース 時刻は常に、Time.nowで取得している…

Rubyでテストの時間を固定させる(TimeHelpersとその他)

Rubyのメソッドよくわからないものが多いので、素振りします。 今回の記事では、テストの時間を固定するためのヘルパークラスであるActiveSupport::Testing::TimeHelpersを理解するために素振りしました。 ※ Rubyのバージョンによっては、時刻固定後に戻す必…

MySQLでSQLの使用時に変数を使用する(Not PL/SQL)

タイトルのとおり、MySQLのSQLで変数が使えないか検証したときのメモです。 基本的に変数を使おうとすると、PL/SQLの記事に誘導されてしまうことが多かったです。しかし、素のSQLで変数を使用した検索するための記事があるとうれしいため、この記事を残しま…

Fork元のソースコードとの差分を吸収する(画面で対応)

小ネタ。 Fork元のソースコードとの差分を吸収して、Fork元に追いつく方法を探していましたが、CLIでの方法しかヒットしませんでした。GitHubの画面上で操作するだけでFork元に追いつく方法は知っていましたが、どこを操作すればいいかわからなかったので、…

Gitでcannot lock refのreference brokenが起きた

GitHub Codespacesで使用していた環境が壊れたのか、次のエラーが発生しました。 error: cannot lock ref 'refs/remotes/origin/master': unable to resolve reference 'refs/remotes/origin/master': reference broken From https://github.com/hirotoKirim…

E2EツールのPlayWrightでセレクタに一致したものを全部操作する

セレクタで検索してヒットしたDOMすべてに対して操作をするという方法はわかりませんでした。 今回の記事では、複数件のDOMにヒットするセレクタを使用したうえで、ヒットしたDOMに対してイベントを操作できるようにします。 環境 PlayWright 1.17 ゴール 複…