きり丸の技術日記

技術・エンジニアのイベント・資格等はこちらにまとめる予定です

技術

TeraTermで自動ログインできるようにマクロ作成を素振りする

転職して開発端末はMacでしたが、特定のサーバを作業するときはセキュリティの関係でWindowsの踏み台サーバから操作する必要がありました。 その踏み台サーバには、データベースの操作にA5M2、ターミナルにTeraTerm等々のよく使われているWindowsのソフトが…

Javaで法律に従った暦による期間計算

以前、法律に従った暦上の計算方法を記事にしました。 当記事ではJavaで法律に従った暦による期間の計算を求める方法を記します。 環境 Java 15 ユースケース 月次で契約するサブスクリプションサービスを実施しています。中途半端な日に解約されてしまうと…

Javaで○○様等の○○を埋める(MessageFormat)

あまり明示的に書くことが無かったので、MessageFormatを知りませんでした。 この記事では、メール等のタイトルや文言に対して、MessageFormatを使うことで「○○様」というフォーマットから「きり丸様」という文言を導き出すことをゴールとします。 環境 Java…

Javaで数値から1桁ずつの数値配列に変換する(109を1,0,9の配列に変換する)

小ネタ。業務で使ったことは無いですが、LeetCodeで必要になることが多いので自分向けに整理します。 なお、もっとよりよいやり方があれば教えていただきたいです。 環境 Java 15 ゴール 入力値は数値 戻り値は数値の配列(Listでも配列でもOK) 最も早く変…

腐敗防止層を意識して綺麗なドメインを保ちたい

Qiitaに書いた記事のお引越し記事です。 本記事は ドメイン駆動設計#1 Advent Calendar 2019 20日目の記事です。 こんにちは、会社でエリックエヴァンスのDDDの輪読会が開催されていて、半年経ってようやく飲み込めてきた程度のレベルのきり丸です。 注意 私…

トヨタで学ぶソフトウェアの品質管理:自動化とニンベンの自働化(AutomationとAutonomation)

トヨタの品質管理には、自動化(Automation)とは異なるニンベンの付いた自働化(Autonomation)という概念があります。海外でも英語でも判別できるように異なるスペルが存在します。日本語では同音異句なので、口頭では英語の方が分かりやすいでしょう。 こ…

IntelliJ IDEAでGradleのテストが遅いときに試す(タスクランナーの変更)

小ネタ。処理が遅いと同僚が困っていたので、教えたら劇的に改善しました。 環境 IntelliJ IDEA Ultimate 2020.3 タスクランナーを変更する Gradleの設定画面から、ビルド及び実行に使用(Build and run using)とテストの実行に使用(Run tests using)をデ…

JavaのBigDecimalをまとめる(リストのBigDecimalの計算も)【2021年】

自分が知りたかったBigDecimalの知識を集める記事。なお、基本型を扱う関係上、新規性は多くありません。強いて言えば、2021年でも扱えるってことくらいですかね。 環境 Java 15 この記事を読んでわかること一覧 precisionとscale(有効桁数と精度) 型宣言 …

【2021】SpringBootでpropertiesやymlの設定ファイルが読み込めることのテストを書く

去年書いた記事で使用していたクラスがDeprecatedになっていたので、新しく更新します。 前回の記事を書いた時にアップデートしておけばよかったです。 変更点 ConfigFileApplicationContextInitializer から ConfigDataApplicationContextInitializer に変…

エンティティを渡すだけでDBのユニットテストのセットアップしたい・改

前にデータセットアップを面倒くさがって、BeanPropertySqlParameterSourceを使ってパラメータの項目名を取得していました。その時の記事。 そのまま使用していると、自分の目的通りには使えなかったので結局自作しました。 その時のメモ。 環境 Java 15 H2 …

ノートPCが急に休止状態になったりスタンバイになったときに疑うこと(Thinkpad L13の磁気リードスイッチ)

最近、会社のWindows端末を新しくしたのですが、なぜか何もしていなくても急に休止状態になることがありました。 今後のノートPCも同じような仕組みで急に休止状態になることもあるかもしれないので、共有兼メモとして残しておきます。 環境 Thinkpad L13 ww…

AWS 認定 クラウドプラクティショナーの合格記(AWS CLF)

掲題の通り、「AWS 認定 クラウドプラクティショナー」を受験し、合格したので合格記を記します。 合格日 2021年03月13日(金) 合格した時の点数 1000点満点で、869点でした。 700点が合格ラインですので、かなり余裕で合格できたことになりますね。分から…

SpringBootでRequest前後に処理を挟むインターセプタを実装する(テストコードもあり)

JavaでRequestの前後に処理を挟むことができるインターセプタを実装したので、メモをします。 実装方法は色んな書いてあるものの、テストまでは書いてないことが多いのでそこで差別化を図ります。 環境 Java 15 SpringBoot 2.4.1 ユースケース APIの流量制御…

基本型以外を使って設計レベルアップ!(Primitive ObsessionとFCC)

いいコードとは、悪くないコードのことを指すと考えています。 そして、悪くないコードを目指していくには、Code Smellsに注目すると改善できます。 今回の記事では、Code SmellsのなかのPrimitive Obsession(基本データ型の執着)に注目します。 Primitive…

IntelliJ IDEAでGradleの依存関係更新時にライブラリがダウンロードできないときの対処

1度覚えたら多用するので2度調べることはありませんが、誰かが検索する可能性を考えてブログにします。 IntelliJ IDEAではキャッシュを使用して実行しているのか、誰かがbuild.gradleを修正して依存ライブラリが増えても自動でダウンロードされません。この…

Gradleでのビルド後のファイル名の設定方法

小ネタです。地味に知らなかったので、自分で纏めました。 環境 Java 15 Gradle 6.6.1 ※ なお、Spring Initializr で生成されていることを想定しています。 コマンド 次のコマンドでビルドすることを想定しています。 ./gradlew build 指定したファイル名で…

JavaでRESTが簡単にテストできるRest-Assuredを素振りしてみた

JavaでRESTが簡単にテストができるとされるRest-Assuredというライブラリを知ったので素振りしました。ですので、あまり深い話はこの記事ではしません。 なお、印象としてはSpringのMockMvcを使っているのであれば、わざわざ追加でRest-Assuredを導入はしな…

【Tips】GTimeReportでGoogleカレンダーの予定一覧を出力する(業務時間のうち会議にかかった時間の分析に使用できる)

※ あくまで出力結果から分析できるという話です。分析の話自体は、この記事ではしません。 Googleカレンダーの予定を表形式、スプレッドシート、Excel(xls, xlsx)に出力してくれるG Time Reportというサイトがあります。 カレンダーの情報を一覧化すること…

JavaのJacksonライブラリのCsvMaperでCSVを読み込む

JavaでCSVを読み込む方法を調べました。 最初は、SpringBootに組み込まれているObjectMapperで読み込めると思いましたが、ObjectMapperではCSV読み込みはできないようです。ですので、意図的にJacksonライブラリのCsvMapperを依存関係に含める必要があります…

Jenkinsのパイプラインで起動したシェルを永続化する(ProcessTreeKiller回避)

地味に困ったのでメモ。 Jenkinsのパイプラインから起動することで、常に最新の資材が展開されているnodeサーバを建てようとしました。 しかし、Jenkinsサーバでコマンドを打つとnodeサーバが起動するものの、Jenkinsのパイプラインからコマンドを実行すると…

REST APIのレスポンスJSONでデータが無い時の表現

REST APIで対象の項目にデータが無い時の表現方法が分からなかったので纏めました。 大きくは2つ、派閥があります。 null undefined データ項目を定義しない null派閥 RFC8259でJSONが定義されています。 JSONの値としては、オブジェクト、配列、数値、文字…

GitHubに連携しているソースをIntelliJ IDEAからブラウザで開く(Jump to the GitHub version of a file)

私の中ではよく使うユースケースですので、忘れないようにメモ。 ブログを書いていると、記事に出現したソースをGitHubにPushし、ブログ側にリンクを張ることがよくあります。 その際に、masterではなくコミットハッシュ値付でリンクを張ることで、GitHub側…

エンティティを渡すだけでDBのユニットテストのセットアップしたい(SimpleJdbcInsertとBeanPropertySqlParameterSource)

皆さんはDBのユニットテストを行うとき、どのようにテストのセットアップを行っていますか。 私はSimpleJdbcInsertを使用しています。テーブル名とInsert対象のカラムと値のマップを渡すだけで更新してくれるので、個人的には使いやすいと思っています。 し…

Rust製のコード行数をカウントするtokei(時計)を使う

コメントを除外し、有効なコードの行数(LoC)をカウントするtokei(時計)というツールがあります。 エンジニアの生産性をコードの行数で測れるわけではありませんが、Rust製のツールということで素振りしてみました。 環境 tokei GitHub Codespaces 特徴 …

【Java】WinでもFile.separatorを使わずにスラッシュでディレクトリを表現できる

タイトルの出オチ記事。 Windows環境でディレクトリを表現するときは、次の表現はすべて同じディレクトリを指します。 String path1 = "tmp\\dummy"; String path2 = "tmp" + File.separator + "dummy"; String path3 = "tmp/dummy"; Linux等の環境では、デ…

IntelliJ IDEAでCheckstyleを適用する(自動フォーマットにも適用させる)

コードがコーディング規約に沿っているかを自動で確認してくれるCheckstyleというツールがあります。 ただし、導入してもチェックしかしてくれないので、手動でフォーマットする必要があります。軽微な修正であればIntelliJ IDEAのショートカットでフォーマ…

Oracle19cのイメージをローカルでDockerビルドする

OracleのDatabaseで開発することになりました。サクっと環境構築したかったので、Dockerでローカル環境を構築しようとしましたが、Docker Hubにはイメージが提供されていません。ですので、自分でOracleDatabaseのイメージをビルドする必要があります。 今回…

SpringSecurityが導入されているControllerをWebMvcTestでテストする【SpringBoot】

以前にControllerをテストする記事を書きました。しかし、SpringBootTestの使い方しか分からなかったので、WebMvcTestのやり方を理解していませんでした。 ですが、ToshiakiMaki@makingさんのサポートにより、なんとかWebMvcTestでのテストができるようにな…

FlywayとSpringで検証環境と本番環境で投入するデータを変更する

仕事ではDBマイグレーションとしてFlywayを使用しています。ただ、表やテーブル等のDDLのみで、マスタデータ等のDMLは手動で管理していました。ですので、FlywayでDMLも管理することにしました。 しかし、そのまま適応してしまうと検証環境と本番環境のデー…

gradleでのbootRun時にプロファイルを指定できるようにする

ローカルでプロファイルを指定してbootRunすることはあまりありませんが、地味に便利だったので記事にします。 なお、bootRunタスクに限らず他のタスクでも使用できます。 環境 gradle 6.7 Java 11 Spring Boot 2.3.5 RELEASE ゴール gradleのbootRun時のオ…