きり丸の技術日記

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

Flywayで特定のDBだけSQLを実行する(Spring, vender, Postgres)

小ネタ。なお、私のユースケースを満たせていなかったので、調査結果だけです。 環境 Java 17 org.flywaydb 8.5.13 org.springframework.boot 2.7.7 対応 設定ファイルの変更 PostgresやOracle等々で実行するSQLを変更するために、spring.flyway.locationsに…

Gitのコミット時間を変更する(git commit --amend --date="`date -R`")(git squash と組み合わせる)

小ネタ。 環境 Git git version 2.24.1.windows.2 対応 次のコマンドを実行すると、最新のコミット更新時間が現在時刻になります。また、特定の時間に更新したい場合は、Git internal format、RFC2822、ISO 8601形式のどれかで渡してください。 # 現在時刻で…

Javaで1行でNull許容の配列を作りたかった

結局、願ったとおりに動かなかったので、思考錯誤したときのメモだけ残します。 環境 Java 17 対応 Collections.singletonList(T o)を使用することで、1行でnull許容した配列を作成できます。 動作確認 1行で配列を作成する方法は、List.of(), Arrays.asList…

IntelliJ IDEA ULTIMATEでOpen APIのコードを生成する

小ネタ。以前、OpenAPI Generatorをカスタマイズしたコードを生成する(Swagger Codegenとほぼ同じ)という記事を書きました。 上記の記事では、openapi-generatorのjarをCLIで実行してソースコードを生成しています。その検証中に、IntelliJ IDEA ULTIMATE…

何をもってN月第1週とする?

普段N月M週という表現で何となく通じていますが、具体的な定義があるかをしらべました。 結論を先に述べると、明確な定義をしている表現はありませんでした。ですが、週について色々と調べたのでまとめておきます。 木曜日を起点として1年を週に分割する(IS…

Pytestにてネストしたテストケースを作成する

JUnit 5だと@Nestedアノテーションを付与すると、テストクラス内にさらにテストクラスを用意できます。 Pytestでも同様にテストクラスをネストさせたかったのですが、ググってもすぐには出てこなかったので、自分のブログにまとめます。 環境 Pytest 7.1.1 …

開始日と解約"月"を元に暦上で日割のない解約"日"を求める(Java)

小ネタ。「今年の12月に解約したい。日割りが必要ない日付を教えてほしい」といった、解約する「年月」までは把握しているが、解約する「年月日」までは分からないといったケースに対応するロジックをJavaで求めます。 環境 Java 17 対応 暦上の1ヵ月の定義…

Pythonで初期配列をset型で作りたければbrace {} リスト型はbracket []

小ネタ。いつもset([data for data in datum])のように、List型を経由してたので、備忘録。なお、タイトルの出オチ記事です。 環境 Python 3.8 対応 ブレース(brace, {})でくくると、set型になります。 ブラケット(bracket, [])でくくると、list型になり…

WindowsのVS CodeのデフォルトターミナルをGit Bashに変更する

WindowsのVS Codeのデフォルトターミナルを変更したかったので、Git Bashに変更する方法を残します。 環境 VS Code 1.64.2 Windows 11 Git Bash 4.4.23 方法 VS Codeのsettings.jsonを開く。 $HOME/AppData/Roaming/Code/User/settings.json settings.jsonに…

よく使うInterfaceの活用方法【Java】

Java Advent Calendar 2022の8日目の記事です。指摘コメントよろしくお願いします。 Javaに限らず、interfaceは使い道を理解することは難しいです。この記事では、私が普段使用しているinterfaceの使い方実例を記すことで、情報共有を行うことを目的としてい…

nohupと&を使用して、性能試験をバックグラウンドで実行する

性能試験でJMeterを使用しているのですが、24時間負荷をかけ続ける長期安定の性能試験を使用するときに失敗したのでメモとして残します。 環境 CentOS 対応 nohupと負荷をかけたいコマンドを記載する。 nohup コマンド & # nohup jmeter xxxx & 失敗した理由…

JavaのMockitoで部分モックをしたい・本物のメソッドを呼びたい(PartialMock, Answer)

JavaのMockitoを使って、対象クラスをモックにすることがあります。ただし、該当クラスのメソッドすべてではなく一部だけモックにして、他は本物のメソッドを呼びたいことがあります。 今回は、モッククラスから本当のメソッドを呼ぶ方法、デフォルト設定で…

MyBatisでEagerLoad, LazyLoadをする(Annotationにて)

MyBatisのアノテーションで親クラスのデータ取得時に、子や孫クラスを一緒に取得する方法(EAGER LOAD)、必要になってから取得する方法(LAZY LOAD)を記載します。 なお、常に子クラスと一緒に扱うときはEAGER LOAD, 必要に応じて子クラスを使用する場合は…

LazyLoadのエンティティを取得しようとしてClass Not Foundが発生した(原因不明・Spring・MyBatis)

自宅で再現できなかったので原因はわかっていません。しかし、対策はうまくいったので残します。 MyBatisにてLazyLoadで取得したエンティティの子データをJavaでgetter経由で取得しようとしました。その時にClass Not Foundが発生しました。詳細なメッセージ…

SQLで複合したキーの検索条件でIN句検索する(複合、複数の組み合わせで条件検索)

1組の乱太郎、2組のきり丸、3組のしんべヱの情報が欲しい、といった組と名前の両方をキーにした検索をしたい時があります。 この記事では、単純にANDで結合できず、複数の条件を組み合わせた複合でのキーを検索条件として実行する方法を記載します。 環境 My…

Javaでデバッグ用にnullは出力しないToStringのようなメッセージを出力したい(JSON, Object Mapper, JsonInclude.Include.NON_NULL)

タイトルではToStringを加工するような書き方をしていますが、処理イメージを伝えるものですのでToStringは使用しません。 デバッグのためにLombokで大量のフィールドをもつクラスをToStringで出力すると、当然大きな文字列となります。基本的には全フィール…

ビジネス統計スペシャリスト エクセル分析ベーシックの合格記

掲題のとおり、ビジネス統計スペシャリスト エクセル分析ベーシックを受験し、合格したので合格記を記します。 前提 Excelは最低限のSUMやVLOOKUPしか知らない 普段業務では使用していない 合格日 2022年10月12日(水) 合格した時の点数 925点。 合計1000点…

Pythonで可変長引数のメソッドに配列を渡したい(位置引数、positional argument)

Pythonで可変長引数のメソッドしか用意されていないものの、処理上は配列にしてパラメータを渡すしかないことがあります。 今回の記事では、配列を可変長引数に渡せるようにする方法を残します。 環境 Python 3.9 方法 配列の変数に対して*を付与すると、可…

Docker + Poetryでライブラリを追加する(cannot operation `poetry add library`)

Docker環境のPoetryで構築しているアプリケーションがありましたが、poetry add libraryではライブラリの追加ができませんでした。 今回の記事では、Docker環境のPoetryで構築しているアプリケーションに対してライブラリを追加して、poetry add libraryと同…

途中に余計なBOMが付与されたファイルが作成された(FastAPI, StreamingResponse, Generator)

PythonのFastAPIのStreamingResponseでGeneratorを使用しながら、UTF-8 BOMのファイルをダウンロードさせるAPIを作成しました。ただ、作成したファイルを確認したところ、ファイルの途中で余計なBOM(\ufeff)が付与されてしまっていました。 今回の記事では…

build.gradleファイルを分割する(別gradleファイルを読み込む)

JavaでGradleで開発していると、build.gradleに静的解析タスクであったり、コード自動生成タスクであったり、間接的なタスクが増えることがあります。 今回は不要なタスクを別ファイルのgradleファイルに分割する方法を記事にします。 環境 Java 17 Gradle 7…

OpenAPI Generatorをカスタマイズしたコードを生成する(Swagger Codegenとほぼ同じ)

OpenAPI Generatorの使用方法については、基本的にSwagger Codegenと同じようにカスタマイズできます。 今回の記事では、OpenAPI Generatorの生成コードをカスタマイズします。 環境 OpenAPI-Generator-CLI 6.2.0 ゴール 任意のカスタマイズしたコードを生成…

Javaで現在行を取得する

Javaで現在行を取得する方法を記載します。 環境 Java 17 対応 現在スレッドのlineNumberを取得すれば、現在行が取得できます。 return Thread.currentThread().getStackTrace()[2].getLineNumber(); 0番目 Threadクラス 1番目 この処理している行 2番目 呼…

JMeterでproxyを経由したくない(no proxy, non_proxy)

JMeterでproxy設定をする記事は見つかりましたが、proxyを経由しない設定が公式マニュアルを見ないと見つからなかったので、記事にします。 環境 JMeter 5.5 対応 CLIでの設定 起動時のオプションで-Nを付与すると、proxyを経由しなくなります。 jmeter -N *…

SpringのInterceptorでGETメソッド以外を拒否するようにコードで表現する

※ 特に見どころはありません。 業務都合にて、「アプリケーションをメンテナンスモードに切り替えても、参照系APIだけは参照できるようにしたい。更新系APIは拒否したい。」との要望が出てきました。 そもそも、「そんなこと可能?」ということを素振りした…

リンク先の目的の段落を開いたり、強調した状態のURLのパーツ(URIフラグメント)

URLに記述していてもサーバにデータは送らない箇所があり、それをURIフラグメントと呼びます。具体的には次のURLのうち、#以降の#:~:text=nainaistarを指します。 https://nainaistar.hatenablog.com/#:~:text=nainaistar URIフラグメントは、リンク先のWeb…

文字列結合でも日付を数字ではなく目的のフォーマットで表示する(MM/DD)(Excelとスプレッドシート両方とも可)

Excelとスプレッドシートの両方でも活用できる方法です。 「04/18」と表示したい場合、セルの書式設定を変更して目的のフォーマットで表示するのが一般的だと思います。 しかし、「【日報】きり丸 04/18」のような固定文言 + 今日の日付をCONCAT関数を使用し…

Node.jsで記述されたPlaywrightの実行環境をDockerで用意する

職場でE2EツールとしてPlaywrightを使用しており、ソースコードをPythonで書いています。そのときのPlaywrightの環境構築手順はこちら。 ただ、Playwright単体はどの言語で書かれても問題ないものの、どうしてもテストライブラリ等のエコシステムは言語によ…

Javaで期間と期間を比較して重複チェックする

よくある内容の記事ですので、特別な内容はありません。私が迷わないようにするための記事です。 日付と日付を比較することは簡単ですが、日付の開始日と終了日をまとめた期間と期間を比較して、重複があることをチェックするのはたいへんです。なお、次の式…

Recursionの有料会員を使用した感想

Recursionというアメリカ発のオンラインでプログラミング、コンピュータサイエンスを学べるサービスがあります。今回の記事では、Recursionを有料会員を使用した感想を記載します。 結論だけ記載すると、非常に良質な学習ができてよいサービスだと感じました…