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

2020年振り返り

はじめに なんとなくいろんな人の振り返りみて、自分も振り返ってみようかとふと思ったので書いてみようかと。 ざっくり今年やったこと、あったこと 今年やったとことあったことをまとめると、以下のようになるかと思います。 転職して一年 ブログを平均して…

K6のシナリオを使ってみる

はじめに K6では負荷試験のシナリオを設定することが可能です。このブログではその機能を簡単に試してみてざっくりとした使い方を把握したいと思います。 このブログではK6をDockerを用いて起動します。また、テスト対象のアプリは以前のK6について書いたブ…

K6の負荷テスト結果をGrafana+InfluxDBで可視化する

はじめに K6は実行結果を様々なプラットフォームに送信して可視化することが可能です。 その中の選択肢としてGrafana+InfluxDBを利用することが可能なようなので、試してみたいと思います。 このブログでは、それぞれのツールはDockerを利用して立ち上げるこ…

負荷テストツールK6を試す

はじめに 負荷テストのツールを何かしら勉強したいなと思って、K6というツールがあるというのを知って良さそうに感じたのでとりあえず動かしてみるところまでやってみようと思います。 K6とは K6はLoad Impactという負荷テストのサービスを作っていた会社が…

Nettyの主要コンポーネントを整理する

はじめに Nettyを勉強していると、EventLoopやHandlerなど様々なコンポーネントがでてきて、混乱したのでちょっと図でまとめてみようと思います。このブログでは以下のようなNettyの主要コンポーネント(クラス or インターフェース)の役割をまとめそれぞれ…

NettyのChannelInboundHandlerとChannelOutboundHandleについてまとめる

はじめに Netty In Actionを読んでいて、それぞれがのハンドラーがどのどのタイミングで実行されるかが分かりづらかったので、自身の頭の中の整理を目的に自分の理解をまとめて見ようと思います。 Inbound? OutBound? ChannelPipelineでは、ソケットとアプ…

Nettyでエコーサーバーを書く

はじめに 最近、Netty in Actionを読んでいるのですが、生のNettyを今まで触ったことがなかったのでHello, Worldとして、Echoサーバを書いてみたいと思います。あまり、Netty全体の要素に対して深堀すると言うよりはひとまず動かすのを目指し、その中で必要…

Spring Boot 2.4.0についてメモ

はじめに 先週、(2020/11/12)にSpring Boot 2.4が出ましたが、どんなのが出たのかまとめて、なんとなく違いを把握おこうと思います。 基本的にはリリースブログとRelease Notesの内容を個人的に気になったところを少し深ぼって、自分の理解をまとめようと思…

Docker BuildKitを使う

はじめに Dockerの 18.09 以降にはBuildKitという機能が存在しますが、今までなんとなく使ってただけなのでちゃんとまとめてある程度理解しておきたいなと Docker BuildKitとは そもそもBuildKitそのものはDocker Engineとは別でMoby Projectで開発されてい…

QuarkusアプリのメトリクスをMicrometer+Prometeus+Grafanaで可視化する

はじめに Quarkus 1.9のリリースブログをなんとなく眺めていると以下のようなことが書かれていました。 Micrometer extension maturing 1.8 introduced a new Micrometer extension. During the 1.9 development cycle, it matured a lot and is now the rec…

Spring REST DocsとSpring Cloud Contractを連携して使ってみる

はじめに Spring REST DocsはSpringのRestFullアプリケーションにおけるWebAPIのインターフェースをドキュメント化する際のサポートをしてくれます。Spring MVC Testをもとにスニペットを自動生成し、Asciidoctorの形式で出力してくれます。 また、Spring Cl…

Docker Engine APIを使ってcURLでDokcer Engineを操作する

はじめに Docker のクライアントは公式だとGoとかPythonのものはあるようですが、UNIXドメインソケットを使ったHTTPでの操作も可能なようです。このブログではcURLを用いてDocker Engineに対するコマンドを実行してみたいと思います。 Docker Engine API Dok…

RouterFunctionでリクエストをインターセプトする

はじめに Router Functionを利用しているときのサーブレットフィルターとかインターセプターみたいなのってどうやってやるんだろって言うのが気になったのでちょっと調べてみます。 やってみる 環境 環境は以下の通り $ java --version openjdk 15 2020-09-1…

QuarkusでHealth Checkのエンドポイントを作成する

はじめに KubernetesにはLiveness ProbeをReadiness Probeといった概念があり、アプリケーションにそれぞれを確認するためのエンドポイントを作成する場合があります。 Spring Boot(2.3以上)などではそのエンドポイントが用意されていますが、Quarkusにもそ…

RouterFunctionでグローバルにエラーハンドリングして任意のレスポンスを返す

はじめに @ControllerAdvanceや@ExceptionHandler,を使ったグローバルなエラーハンドリングはやったことがあったのですが、そういえばRouterFanctionでやったことなかったなと思い試してみたいと思います。 やってみる ざっくりやること 大きく2つのやること…

Spring WebFluxでブロッキング処理を書く

はじめに てっきり、WebFluxのようなReactiveの場合、ハンドラーみたいなのはEventLoopとは別スレッドで動いているもんだとばかり思っていたのですが、どうやらそうではないようで(冷静に考えれば当たり前、と言うかそうしてしまったら意味がない)、悪気な…

Kotlinでのエラーハンドリング(ResultとEither)

はじめに 諸々の事情で、今後Kotlinを使うことになりようなので、少し学びたいなと思いました。 いろいろ本とか読んでる中で、Javaと大きな違い1つとして、エラーハンドリングのやり方があるように感じたので、このブログではそれについてまとめます。 大本…

Linuxでシステムの起動時間を調べる

はじめに LinuxのシステムでOSの起動時間を調べるためにはsystemd-analyzeというツールが使えるみたいです。 このブログではsystem-analyzeについてまとめ、いくつかの機能を試してみたいと思います。 systemd-analyzeとは Linuxシステムの起動時の情報を解…

Dockerイメージ調査ツールDiveを試してみる

はじめに Dockerのイメージを調査するツールとしてDiveというツールがあるのを知り試してみようと思います。 何ができるか? Diveでは主に以下のようなことができます。 イメージ層ごとのコンテンツの調査 それぞれのイメージのレイヤーの差分 イメージの効…

VisualVMを使ってみる

はじめに Javaのプロセスをプロファイルするツールはいろいろあると思うのですが、個人的にVisuralVMが気になったので、調べてまとめます。 具体的には以下のようなことを目指します。 VivualVMの概要を知る どのようなことができるかを知る 実際に使ってみ…

QuarkusでReactiveなWebAPIを書いてみる

はじめに Reactive Stream系のものはSpring WebFluxしか触ったことが無かったのですが、QuarkusにもReactive Routeというのがあるというのを知り使ってみたくなったので、その機能を試してみたいと思います。 Reactive RouteとSmallrye Mutiny まず、Quarkus…

WebFluxのFluxレスポンスをテストする

はじめに 表題通りなんですが、よくやり方を忘れるのでメモしておきます。 手順 手順としては簡単で 1.WebTestClient.ResponseSpectのreaurnResultを呼び出し、FluxExchangeResultを受け取る。 2. FluxExchengeResultのgetResponseBody()を呼び出してFluxを…

Elixirで関数の非同期呼び出しを行って結果に対して逐次的に別の処理をかける

はじめに Elixirで非同期をやる場合Task.asyncをつかいますが、非同期で呼び出した複数の関数の呼び出し結果に対して、逐次的に別の処理をかけたい状況で、同僚のElixirに詳しい人のコード見てなるほどと思ったのでメモとして残しておきます。 どうするか? …

QuarkusのログをJson形式で出力する

はじめに ログコレクターでアプリの情報収集する場合、Jsonでログが出力されている方が何かとやりやすいことがありますがQuarkusでもログの出力をJsonに変えることができます。 ログをJsonに変更する 依存の追加 適当にQuarkusプロジェクトを作成し、以下の…

QuarkusのアプリにJWT RBACを追加する

はじめに Quarkusのアプリケーションを作ったことが無かったので、エコーサーバを作りたいと思います。ただ、エコーサーバ作るだけだと面白くないので、JWT認証と合わせてやってみようかと思います。 以下のようなことを目標にします。 Quarkusのプロジェク…

ElixirのコレクションをEnumで処理する際のエラーハンドリングを呼び出し側で行なう

はじめに Elixirにはコレクションを列挙して処理するためのモジュールとして Enum モジュールというのがありますが、列挙中にエラーが発生して、実行をやめたい場合のエラーハンドリングについてやり方を調べる機会があったのでそのメモを残しておきます。 E…

Spring Cloud Contractをnon-JVMの言語で使う

はじめに Spring Cloud ContractはCDC(Consumer Driven Contract)をサポートするSpring Cloud傘下のプロジェクトです。 このプロジェクトはJavaのプロジェクトであることにより、初期の段階では、JVM言語以外での利用ができない状況でした。しかし、その場合…

入門 監視を読んだ

はじめに システムを継続して動作させ、改善していく上で、重要なプロセスの1つが監視だと思います。このブログではその監視についてのチップがまとめられている「入門 監視」についてまとめます。なお、このブログはあくまで私自身の理解を自分の言葉でまと…

testcontainer-goを試す

はじめに JavaのライブラリーにTestcontainersと呼ばれるものがありますが、そいつのGo版ライブラリがあると言うのを見かけたので試してみたい思います。 Testcontainersとは TestcontainersはJavaのライブラリーでDocker ContainerをJunitのライフサイクル…

AppCDSを使ってみる

はじめに AppCDS(Application Class Data Sharing)はCDS(Class Data Sharing)の拡張であり、Java 10以降で利用可能です。この機能を使うことで、アプリケーションでロードされるクラスを共有アーカイブから読み込むようになり、その起動時間を削減することが…