気軽に楽しくプログラムと遊ぶ

自分が興味があってためになるかもって思う情報を提供しています。

Logback設定

Logbackとは SLF4J(Simple Logging Facade for Java)のAPIを経由して利用するjavaのロギングライブラリのこと 設定ファイル 構成として以下 springProfile → root level → appender springProfile : 開発環境指定 root level:ログレベルの指定。DBUG, INFO,…

Kotlin ハッシュ化

MessageDigestを使ったハッシュ化 KotlinでSHA-512アルゴリズムを使ってハッシュ化する。 repeatで1000回繰り返す fun generateSalt(length: Int = 16): ByteArray { val salt = ByteArray(length) SecureRandom().nextBytes(salt) return salt } fun String…

Kotlin テスト関連ライブラリ

Kotest(Kotlinテストフレームワーク) 概要 Kotlinの言語仕様で書けるテストフレームワーク。Junitよりもコード量を減らせる ネストして実装可能でどんなテストを書くかを継承させるSpecで変えられる 実装例 FunSpecを使った実装例。contextを使って階層構造…

Spring ExceptionHandlerで独自エラーハンドリングを実装

ResponseEntityExceptionHandler どの例外が発生したときになにを返すかのハンドリングを行う ResponseEntityExceptionHandlerクラスを継承して例外ごとに定義されているメソッドをオーバーライドすることで、処理カスタマイズできる ResponseEntityExceptio…

Kotlin 各種Classの定義方法

value class DDDの「値オブジェクト」に近い プリミティブ値をラップして別物として扱う 用途や実態はプリミティブ値に近いような値を扱う IDを持たない値ベースのクラス。IDを保持するとDDDで言うところのEntity class 実行時の負荷を軽減することが可能 制…

Kotlin SpringBoot利用時のJackson利用時の設定

SpringBootデフォルト設定 以下の設定がdisableになっている MapperFeature.DEFAULT_VIEW_INCLUSION すべての項目がJson変換対象となる。disableでないと個々でjson変換対象のアノテーション付与などが必要 DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTI…

git pull --rebaseで最新を取り込む

Git

git pull --rebase時に使うコマンド 以下のようなコマンドで取り込む $ git pull --rebase origin master #conflict時は修正して $ git rebase --continue $ git push origin feature/myBranch --force rebase後は、コミットを改変しているので、fast-forwar…

LocalDataTime, Instant, 文字列の相互変換

Date and Time APIによって提供されるの日時クラス クラス タイムゾーン 内容 LocalDateTime なし 日付時刻、 ZonedDateTime あり 時差と地域付の日時 OffsetDateTime あり 時差情報付の日時 Instant - 日時(絶対時間としてのエポック秒)、Date型と相互変…

Jackson スネークケース JSON をキャメルケース フィールドに逆シリアル

スネークケース JSON をキャメルケース フィールドに逆シリアルにする設定を記載する 方法1 setPropertyNamingStrategy ObjectMapperのsetPropertyNamingStrategyメソッドを使用して、objectMapperを用いたすべてのシリアル化を設定できます。 ObjectMapper …

なぜhttpsにする必要があるのか

なぜhttpsにする必要があるのか ユーザーがブラウザを使用する場合、インターネットを通じてブラウザとサーバーの間でデータの送受信が行われます。 この際、https(常時SSL)であればデータが暗号化されるため、第三者によって情報が改ざんされたり、盗聴さ…

MySQL 重複レコードを無視する

INSERT IGNOREとは? INSERT句に付与可能な修飾子 レコード登録時に無視可能なエラーが発生した場合に無視してレコード登録できる INSERT ステートメントの実行中に発生する無視可能なエラーは無視されます 無視されるエラー一覧 ER_BAD_NULL_ERROR ER_DUP_E…

git rebaseで困ったときの対処法

Git

fatal: Need to specify how to reconcile divergent branches GitHub側で、親ブランチの修正が入り、変更をrebaseで取り込んだ場合にローカルでgit pullすると発生する。 git pullする際に、mergeで取り込むかrebaseで取り込むかが指定されていないため、wa…

DDDの基本理解

DDD

DDDの言及する範囲 思想・哲学: 複雑なシステムへの取り組み方、開発の考え方や進め方 設計戦略: ドメインモデリングに繋げるためのアプローチの方針 ドメインエキスパートとの協調、ユビキタス言語、境界づけられたコンテキスト等 実装パターン: ドメインモ…

MyBatis Generatorの設定

generatorMysqlConfigの書き方 初回設定時に必要と思った設定を以下にコメント付きで記載しておく <generatorConfiguration> </generatorconfiguration>

API-KEY作成方法例

API

Keyの作成方法の一例を書いておく head -c 32 /dev/urandom > test.key cat test.key | base64

Slack リマインド設定例

Slackでのリマインダー設定方法 メッセージフィールドに、次の形式でリマインダーの詳細を入力します /remind [yourself or #channel] [what] [when] タイミングの設定方法 every day(毎日) every Monday(毎週月曜日) every weekday(平日に毎日) every…

Mac Slack 便利なショートカット

移動系 履歴 ワークスペース 検索 フォーカス移動 編集、書式設定 表示、非表示 移動系 説明 コマンド 補足 「未読」に移動する Command + Shift + A 「スレッド」に移動する Command + Shift + T 「DM」に移動する Command + Shift + K 「メンション&リアク…

GitHub Actionsの書き方(基本)

GitHub Actionsとは? ビルド、テスト、デプロイなどを自動化するCI/CDプラットフォームのこと。GitHub内のサービスのため、GitHub内で完結することができる。 GiHub Actionsの仕組み 設置場所:.github/workflows ファイル形式:yml 記載内容:ワークフロー…

Apache Kafkaとは?

Apache Kafkaとは? メッセージングシステム 利用メリット Apache Kafkaの構成 Apache Kafkaの特徴 分散システム 分散システムのメリット データの永続化 データ永続化によるメリット 参考URL Apache Kafkaとは? 複数台のサーバーで大量データを処理する分…

Intellij 便利プラグイン

便利そうと思って導入したプラグインの概要について以下に記載する。 詳しい内容は、参考URLを参照のこと。 便利プラグイン コード入力支援 String Manipulation キャメルケース <=> スネークケースへの変換、エスケープ文字の処理、URLエンコードなど変換が…

Confluence PlantUML シーケンス図 ノートの表示位置調整

メッセージに付けるノートが思うように出力できなかったので、記載しておく note 【表示位置】 of 【起点の要素】 【表示位置】 :right left over 【起点の要素】:participantで定義した要素 参考ソースと画面イメージ @startuml participant Alice partic…

AWSやKubernetes周りのツール 概要

AWS App Runner ECRにコンテナイメージをpushまたは、GitHubにコードpushすると、自動デプロイしてくれる コンテナがデプロイされるとApp RunnerがマネージドのLBを設定してくれる コンテナ管理とかVPC周り、ALB,NLBとかscalingなどを隠蔽して提供してくれる…

サービスメッシュとIstio

マイクロサービスの課題 近年、マイクロサービスが大流行しているがネットワークに関係する課題がある トラッフィク管理、可観測性、セキュリティの3つ ネットワークに由来する課題解決のための機能 マイクロサービスシステムの運用には、分散システムのネ…

UUID, ULIDとは?

UUIDとは? 開発時にデータに一意なIDを割り振る際によく用いられる。 UUIDには複数のバージョンがあり、UUID v4がよく用いられている。 特徴 ビット幅は 128ビット(16バイト) で、文字列表現では16進法で以下のような形で表現する。 (32バイト+バウンダリ4…

New Relic アラートについて

New Relicのアラートのコンポーネント構成 アラート条件(Alert Condition)に定義した条件違反が検出されると、Incidentが作成される Incidentは、Alert Policyの設定にしたがってグルーピングされ、Issueとなる IssueがWorkflowをトリガーして、実際にユー…

Kotlin 処理実行時間をhh:mm:ssのフォーマットで出力する

バッチなどで経過時間をログ出力したいときに、ミリ秒表示などではなく時間形式で表示したい場合の処理を記載しておく。 fun main() { val begin = System.nanoTime() /*コードが始まります*/ //2秒間スリープします Thread.sleep(2000) /*コードは終了しま…

UTで現在時刻を扱うとき使う java.time.Clock

UTで現在時刻を扱う際の課題 現在時刻を取得するためにSystem.currentTimeMills()やLocalDateTime.now()などのstatic methodを呼び出して利用することが多いが、static methodを利用して現在時刻を取得するとテストで利用する際の時刻のスタブを用意しずらく…

Kotlin 変数、メソッドの宣言

トップレベル宣言 Javaではクラス内部の定義のみだが、Kotlinではクラスに属さないようにトップレベルに定義、アクセスできる。 インターフェース(sealed interface) クラス(data class/object/value class/sealed class/enum class) プロパティ 関数 type…

Mac Slack便利ショートカット

ショートカット一覧 説明 ショートカットキー チャンネル移動 ⌘+KもしくはT すべてのDMへ移動 ⌘+Shift+K スレッドを確認 ⌘+Shift+T ブックマーク ⌘+Shift+S 全未読画面を開く ⌘+Shift+A 次のワークスペースへ切り替え ⌘+Shift+[ 前のワークスペー…

Envoy Proxyについて

Envoyとは? Nginxと類似した機能を持つOSS マイクロサービスに対応するために、サービス間のネットワーク制御をライブラリとしてではなく、ネットワークプロキシとして提供するために開発された アーキテクチャ アプリケーションと同じホスト上にEnvoyを構…