2024-01-01から1年間の記事一覧
React で開発してた SPA のアプリにおいて、SWR を活用して prefetch 機能を実装したので、その内容をメモしておきます。 背景 よくあるアプリと同様、一覧画面と詳細画面を持つアプリを開発していました。 しかし、詳細画面の表示に時間がかかり、ユーザー…
この記事では、openapi-typescript を使って TypeScript クライアントを生成した際に遭遇した「Uncaught (in promise) SyntaxError: Unexpected token "xxx"... is not valid JSON」エラーと、その解決方法について紹介します。
AWS Console-to-Code という機能が 2024/10/10 に GA されました AWS コンソールでの操作をコードに変換し、再利用可能な形でエクスポートできるという、非常に便利そうな機能です。 しかし、実際に試してみた結論としては、Amazon Q による推論が思ったほど…
spectral は OpenAPI、AsyncAPI、JSON Schema などの API ドキュメントを検証するためのツールです。 今回は spectral を使用して OpenAPI の required フィールドを検証するカスタム関数を作成する方法について解説します。 【今回防ぎたいケース】 compone…
Renovate は非常に柔軟な設定が可能なツールですが、リポジトリの規模やチーム構成に応じて、最適な設定は異なることがよくあります。 renovate 導入時、実際に役立つサンプルがあまり見つからなかったため、ここでは私が個人プロジェクトや業務で試した設定…
Google provider では Version 5.0 から default_labels というフィールドが追加され、terraform で管理するリソース全体に統一的なラベルを付与できるようになりました。 (AWS では Google の2年半ほど前から同様の機能が使えるようです) この default_la…
CI 中など、コンテナが起動し MySQL のサーバーが起動されたか確認したい場合があります。 その目的のため mysqladmin コマンドを使っていたのですが、思ったように起動完了しておらず、次のステップで落ちてしまったことがあったのでその共有です。
googleapis/google-cloud-go を使って GCP に書き込みをするクライアントを作成している時に、メソッド名につられてしまった箇所があったのでその共有です。 結論 Write メソッドが走った段階では実際に GCS へ書き込まれるわけではない バッファされてる Cl…
課題感 これまで、openapi を用いてサーバーとクライアントのコードを生成することをしてきました。 また、開発時には prism で mock サーバーを立て、フロントを繋いで確認することもしてきました。 prism は、定義した example からいい感じのレスポンスを…
VSCode 上で怒られる typescript の内容が、人によって異なるという現象が発生しました。 node, yarn, 該当のライブラリのバージョン (node_module), typescript のバージョン等を調べても同じだったためパッと原因がわかりませんでした。 結論としては、typ…
Google 検索等では、1 文字打つごとに検索候補の取得が走って、表示が更新されます。 今回はこれと似たような機能を Next.js (MUI) と OpenSearch, Go を用いて実装してみます。 [目次] やること やらないこと OpenSearch の設定 Index/Search-template の作…
今回の記事では概念の説明に留めており、実装例についてはあっても最低限です。 具体例や実装例がある場合は基本 Go です。 また、以下内容については書いておりません。 具体的な実装方法について プロトコルの歴史や RFC に踏み込んだ内容 歴史的背景 サー…
JSON-to-Go という『具体的な JSON から Go の構造体を生成してくれるサイト』があることは知っており長年使っていたのですが、以下のようなめんどくささを感じていました。 具体的な値を変更して Web サイトに突っ込むのがめんどい 業務で使ってる内容をそ…
JWT トークンの構成 JWT トークンとは、以下のような eyJ から始まるトークンのことです。 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJwbHFQUTBkdHZpaEtWczI4T0dPVjg4eUZ0bnQwIiwibmFtZSI6Imtva29pY2hpMjA2IiwiaWF0IjoxNzE2OTkxNzU3LCJleHAiOjE3MTY5O…
まとめ patch を適応しましょう Go は 1.22.2 にあげましょう 自分で立てたローカルで遊ぶだけにしてください [目次] CONTINUATION flood とは サーバーの準備 クライアントの実装 接続する Setting Frame Headers Frame Continuation Frame 動作確認: x/net…
join というコマンドがすごい便利だったので共有です。 概要 manual page にもあるように、RDB の join と同じことができます。 $ man join JOIN(1) General Commands Manual JOIN(1) NAME join – relational database operator RDB に多少触れたことがある…
Linux システムにおけるファイル管理は、その強力な機能性と柔軟性により、開発者やシステム管理者に広く利用されています。 多くのユーザーが頻繁に使用する rm コマンドは、ファイルを『削除する』と一般に認識されていますが、その背後にはより複雑なメカ…
プログラミングにおいてコード内の特定の文字列を探すことは多いですが、特に大規模なプロジェクトでは、この作業が一筋縄ではいかないことがあります。 node_modules や dist といったディレクトリを含めたくない場合がその典型例です。 今回は, grep のオ…
Go のコマンドには様々なオプションが存在します。 今回は、現時点でつけておいて損がないのではないかと思ってるフラグを紹介させてもらいます。 まとめ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -trimpath -o ./api2 ./app go te…
Cloudflare でオブジェクトストレージといえば R2 ですが、 ドキュメントにもあるように S3 との互換性を大切にしています。 今回は Cloudflare の web 画面での R2 バケットの作成から、s3 の sdk を使って object の作成・取得を試してみたいと思います。 …
[目次] 環境 まとめ 背景 おわりに 環境 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 などのタスク系に関しては、うまく動いてるかの確認がより大事になって…
(github)
こんな感じのことをできるようにします。
go で初期化処理を書くために init 関数を使っている方もいるかと思うのですが、呼び出される順番を 1 回正しく整理しておきたいと思います。 [目次] まとめ 1パッケージのみ 1ファイルのみ 複数ファイル まとめ 複数パッケージ まとめ(再掲) グローバル変…
ターミナルで作業をする時、alias 等を使い極力文字数を減らして打ち間違いを防ぐ事が多いかと思います。 しかし oh-my-zsh などのツールによって設定された値など、たまに「あれ?これどこで定義された alias だっけ?」ってなる事があります。 そんな時は…
『現在のシェルセッションにおける変数と関数の一覧を表示』するには set コマンドに何もつけずに叩きます。 # 240 行もあり。 $ set | wc -l 242 # PATH だけを出力。 set | grep PATH シェルオプションの現在の状態を表示するには o オプションをつけて叩…
今更感ですが、標準エラー出力をリダイレクトやパイプに渡す方法をメモしておきます。 [目次] 標準エラー出力とは 標準エラー出力を特定のファイルにリダイレクトさせる 標準エラー出力を切り捨てる 標準エラー出力をパイプに渡す