Diary

Diary

日々学んだことをアウトプットする場として初めてみました

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

SWR を使った SPA での prefetch 機能の実装

React で開発してた SPA のアプリにおいて、SWR を活用して prefetch 機能を実装したので、その内容をメモしておきます。 背景 よくあるアプリと同様、一覧画面と詳細画面を持つアプリを開発していました。 しかし、詳細画面の表示に時間がかかり、ユーザー…

openapi-typescript で is not valid JSON のエラー

この記事では、openapi-typescript を使って TypeScript クライアントを生成した際に遭遇した「Uncaught (in promise) SyntaxError: Unexpected token "xxx"... is not valid JSON」エラーと、その解決方法について紹介します。

AWS Console-to-Code 使ってみた

AWS Console-to-Code という機能が 2024/10/10 に GA されました AWS コンソールでの操作をコードに変換し、再利用可能な形でエクスポートできるという、非常に便利そうな機能です。 しかし、実際に試してみた結論としては、Amazon Q による推論が思ったほど…

spectral で OpenAPI の required フィールドを検証するカスタム関数を作成する

Web

spectral は OpenAPI、AsyncAPI、JSON Schema などの API ドキュメントを検証するためのツールです。 今回は spectral を使用して OpenAPI の required フィールドを検証するカスタム関数を作成する方法について解説します。 【今回防ぎたいケース】 compone…

monorepo における renovate 設定の紹介

Renovate は非常に柔軟な設定が可能なツールですが、リポジトリの規模やチーム構成に応じて、最適な設定は異なることがよくあります。 renovate 導入時、実際に役立つサンプルがあまり見つからなかったため、ここでは私が個人プロジェクトや業務で試した設定…

Google Provider の default_labels は一部リソースにラベルを付与しない

Google provider では Version 5.0 から default_labels というフィールドが追加され、terraform で管理するリソース全体に統一的なラベルを付与できるようになりました。 (AWS では Google の2年半ほど前から同様の機能が使えるようです) この default_la…

MySQL のコンテナの起動を正しく待つ

DB

CI 中など、コンテナが起動し MySQL のサーバーが起動されたか確認したい場合があります。 その目的のため mysqladmin コマンドを使っていたのですが、思ったように起動完了しておらず、次のステップで落ちてしまったことがあったのでその共有です。

GCS の Golang クライアント使用時はきちんと Close のエラーを拾おう

googleapis/google-cloud-go を使って GCP に書き込みをするクライアントを作成している時に、メソッド名につられてしまった箇所があったのでその共有です。 結論 Write メソッドが走った段階では実際に GCS へ書き込まれるわけではない バッファされてる Cl…

spectral を用いて openapi の lint をかける

課題感 これまで、openapi を用いてサーバーとクライアントのコードを生成することをしてきました。 また、開発時には prism で mock サーバーを立て、フロントを繋いで確認することもしてきました。 prism は、定義した example からいい感じのレスポンスを…

VSCode で自分だけ typescript のエラーが異なる時に試したこと

VSCode 上で怒られる typescript の内容が、人によって異なるという現象が発生しました。 node, yarn, 該当のライブラリのバージョン (node_module), typescript のバージョン等を調べても同じだったためパッと原因がわかりませんでした。 結論としては、typ…

OpenSearch・Go・MUI で実現する検索サジェスト機能

Go

Google 検索等では、1 文字打つごとに検索候補の取得が走って、表示が更新されます。 今回はこれと似たような機能を Next.js (MUI) と OpenSearch, Go を用いて実装してみます。 [目次] やること やらないこと OpenSearch の設定 Index/Search-template の作…

サーバーサイドからのコミュニケーション技術

今回の記事では概念の説明に留めており、実装例についてはあっても最低限です。 具体例や実装例がある場合は基本 Go です。 また、以下内容については書いておりません。 具体的な実装方法について プロトコルの歴史や RFC に踏み込んだ内容 歴史的背景 サー…

terminal で json を Go の構造体に変換する (json-to-go)

Go

JSON-to-Go という『具体的な JSON から Go の構造体を生成してくれるサイト』があることは知っており長年使っていたのですが、以下のようなめんどくささを感じていました。 具体的な値を変更して Web サイトに突っ込むのがめんどい 業務で使ってる内容をそ…

JWT トークンのペイロードをターミナル上で確認する

JWT トークンの構成 JWT トークンとは、以下のような eyJ から始まるトークンのことです。 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJwbHFQUTBkdHZpaEtWczI4T0dPVjg4eUZ0bnQwIiwibmFtZSI6Imtva29pY2hpMjA2IiwiaWF0IjoxNzE2OTkxNzU3LCJleHAiOjE3MTY5O…

HTTP/2 の脆弱性 CONTINUATION flood について

Go

まとめ patch を適応しましょう Go は 1.22.2 にあげましょう 自分で立てたローカルで遊ぶだけにしてください [目次] CONTINUATION flood とは サーバーの準備 クライアントの実装 接続する Setting Frame Headers Frame Continuation Frame 動作確認: x/net…

ターミナルで RDB の JOIN

join というコマンドがすごい便利だったので共有です。 概要 manual page にもあるように、RDB の join と同じことができます。 $ man join JOIN(1) General Commands Manual JOIN(1) NAME join – relational database operator RDB に多少触れたことがある…

rm コマンドはファイルを削除するわけではない: Linux のファイルシステム深掘り

Linux システムにおけるファイル管理は、その強力な機能性と柔軟性により、開発者やシステム管理者に広く利用されています。 多くのユーザーが頻繁に使用する rm コマンドは、ファイルを『削除する』と一般に認識されていますが、その背後にはより複雑なメカ…

grep で特定のフォルダを無視して再帰検索する

プログラミングにおいてコード内の特定の文字列を探すことは多いですが、特に大規模なプロジェクトでは、この作業が一筋縄ではいかないことがあります。 node_modules や dist といったディレクトリを含めたくない場合がその典型例です。 今回は, grep のオ…

Go で是非とも使いたいオプション一覧

Go

Go のコマンドには様々なオプションが存在します。 今回は、現時点でつけておいて損がないのではないかと思ってるフラグを紹介させてもらいます。 まとめ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -trimpath -o ./api2 ./app go te…

【Cloudflare】R2 を Go から扱う

Cloudflare でオブジェクトストレージといえば R2 ですが、 ドキュメントにもあるように S3 との互換性を大切にしています。 今回は Cloudflare の web 画面での R2 バケットの作成から、s3 の sdk を使って object の作成・取得を試してみたいと思います。 …

【AWS-CLI】Lightsail の push-container-image 実行時に Is the docker daemon running? エラー

[目次] 環境 まとめ 背景 おわりに 環境 Host: mac m1 Docker: v24.0.6 Docker context: Docker Desktop AWS CLI: aws-cli/2.13.25 Python/3.11.6 Darwin/22.1.0 source/arm64 prompt/off まとめ エラー内容 $ aws lightsail push-container-image --region …

正規表現でキャメルケースをスネークケースにする

ユースケース HogeFuga → hogeFuga みたいな『先頭のみの大文字小文字を変換する』ということがしたいケースがありました。 同じ要領で『キャメルケース → スネークケース(逆も)』ができたのでその紹介です。 (注: 以下コマンドの結果はすべて GNU sed に…

systemd で定期実行する

『systemd で定期実行をする』というよくある内容ですが、設定できたつもりになってた自分自身の反省を兼ねてメモしておきます。 (細かい設定方法については説明しません。) systemd などのタスク系に関しては、うまく動いてるかの確認がより大事になって…

2023 のエンジニア活動振り返り

(github)

Jetpack Compose で画像をピンチしてズーム・移動・回転する

こんな感じのことをできるようにします。

go で init 関数などが初期化される順番の整理

Go

go で初期化処理を書くために init 関数を使っている方もいるかと思うのですが、呼び出される順番を 1 回正しく整理しておきたいと思います。 [目次] まとめ 1パッケージのみ 1ファイルのみ 複数ファイル まとめ 複数パッケージ まとめ(再掲) グローバル変…

terminal で alias の定義場所を探す

ターミナルで作業をする時、alias 等を使い極力文字数を減らして打ち間違いを防ぐ事が多いかと思います。 しかし oh-my-zsh などのツールによって設定された値など、たまに「あれ?これどこで定義された alias だっけ?」ってなる事があります。 そんな時は…

bash でシェルオプションを確認・変更する

『現在のシェルセッションにおける変数と関数の一覧を表示』するには set コマンドに何もつけずに叩きます。 # 240 行もあり。 $ set | wc -l 242 # PATH だけを出力。 set | grep PATH シェルオプションの現在の状態を表示するには o オプションをつけて叩…

bash で標準エラー出力のリダイレクト・パイプラインを扱う

今更感ですが、標準エラー出力をリダイレクトやパイプに渡す方法をメモしておきます。 [目次] 標準エラー出力とは 標準エラー出力を特定のファイルにリダイレクトさせる 標準エラー出力を切り捨てる 標準エラー出力をパイプに渡す