emahiro/b.log

日々の勉強の記録とか育児の記録とか。

local で Cloud Pub/Sub の動作をエミュレートする

Overview ema-hiro.hatenablog.com 上記で書いた gRPC サーバーを local で立ち上げる方法を下に、local で起動したその gRPC サーバーを利用して pubsub の動作(今回は subscriber の動作)をエミュレートするテストを書いてみます。 local でテスト用の pu…

単体テストのために local で gRPC サーバーを起動する

Overview タイトルのとおりです。 このエントリは local で簡単に gRPC サーバーを起動して GCP のライブラリの簡易的な動作検証環境を整えたときの備忘録になります。 モチベーションとしては、単体テストと書いてますが、主に GCP のライブラリの動作を lo…

ISUCON14 に参加し、惨敗した

Overview やったこと 事前準備 当日 結果 振り返り 良かった(と思ってる)こと 反省点 その他 (感想戦) Overview isucon 14 に参加した。 今年の目標は去年の点数を超えることと最終30位に入ることだった。 結果: 未達(惨敗) やったこと 事前準備 SRE のメ…

txtar コマンドで Go のファイルをテキストファイルにアーカイブする

Go

pkg.go.dev Go のファイルを text ファイルにアーカイブするコマンドが純正で用意されているということを教えてもらって初めて知りました。 以下のように使うと指定したディレクトリ配下の Go のファイルをすべて任意のファイル形式でにアーカイブ出力してく…

400記事継続の振り返りとこれから

この記事がちょうど400記事目です。 300記事のときの振り返りはこちら。 ema-hiro.hatenablog.com 300記事から 400 記事まではだいたい 2年半くらい時間が空いていました。200 記事から 300 記事までは2年ちょっとくらいだったので、エントリを各頻度という…

Go の range over func は nil で panic する

Go

Go 1.23 から導入された range-over func を使うときの注意点として、range にわたす iterator 型のメソッドは nil を返してはいけない、というものがありました。 具体的には以下のコードで range-over func にアサインしてる NilFn は返り値が nil になる…

Go の slices.Contains はカスタム struct の slice も比較できる

Go

ということを知りませんでした。 // You can edit this code! // Click here and start typing. package main import ( "fmt" "slices" ) type X struct { ID int Name string } type xarr []X func main() { x := X{ ID: 1, Name: "taro", } xx := X{ ID: 2…

『アーキテクトの教科書』を読んでソフトスキルの重要性について考えた

Overview 『アーキテクトの教科書』を読んで、アーキテクトに紐づくソフトスキルの重要性について考えてみた。 アーキテクトの教科書 価値を生むソフトウェアのアーキテクチャ構築作者:米久保 剛翔泳社Amazon 本書は全体を通してソフトウェア開発においける…

Cloud Pub/Sub における Dead Letter Topic を用いたメッセージのエラー処理

Overview Dead Letter Topic とは? Pub/Sub における DLT の設定方法 DLT に入ったメッセージを最初に回す方法 1つ目のパターンの場合 2つ目のパターンの場合 まとめ Overview Cloud Pub/Sub でトピックを立てて、メッセージの送受信を行うケースにおいて、…

AWS SDK for Go V2 で Endpoint Resolver の実装方法が変わった話

Overview タイトルのとおりです。 AWS SDK for Go V2 を使ってるケースで従来の Endpoint Resolver の実装方法が非推奨になり、新しい実装方法が公開されていました。 aws.github.io Endpoint Resolver とは? 文字通り AWS SDK 経由で AWS のサービスにアク…

Go で複数の文字を一括で別の文字に置換する

Go

Overview Go で文字列の中で特定の文字を別の文字に置換したいケース、例えば改行コードやタブが混じっている文字列の中で特殊文字だけをエスケープしたいケースなどで strings.Replace を多用するのではなく、一括で置換する実装について記載します。 strin…

httptest で server を立てるときに Port を固定する

Go

Overview endpoint のテストをするときに httpserver でサーバーを立ち上げて request と response の検証をする、ということをするときに、httptest で立ち上げるサーバーに割り当てられる port はランダムに決まります。 ただ、テストによっては port を固…

GCP で Container Registory から Artifact Registory に移行する

Overview GCP の Container Registory が廃止されるので Artifact Registory に移行しました。 cloud.google.com 移行手順 以下のドキュメントに沿って進めました。 cloud.google.com なお、移行するときに Container Registory -> Artifact Registory へコ…

CloudRun をデプロイするときに terminated: Application failed to start: failed to load /docker-entrypoint.sh: exec format error エラーが発生して起動しない

Mac で作ったイメージを使って CloudRun をデプロイするときに terminated: Application failed to start: failed to load /docker-entrypoint.sh: exec format error というエラーが発生してコンテナが起動しない、ということがあったのですが、これはビル…

buf CLI を v1.32 以上に上げて設定ファイルを v2 にマイグレーションする

概要 タイトルのとおりです。 Buf CLI を最新(v1.36) にしたところ、v1.32 以上で大きな変更があった模様で、それに対応しました。 buf.build zenn.dev 対応 github.com ハマったところ 新しい Mac で作業していたところ、Connect (依存含め)を動かすための…

slices.SortedFunc の挙動を少し調べて疑問に思った話

Go

Overview Go1.23 で range-over func を取り込んだ slices package 内の SortedFunc と SortedStableFunc の挙動について少し調べました。 SortedFunc SortedStableFunc Sort における Stable とは? Godoc を読んでも完全には理解できなかったので ChatGPT …

Go1.23 の range-over func を使って高階関数を書いてみた

Go

Overview Go1.23 から導入される Iterator を使って Chunk 処理を書く - emahiro/b.log を書いた当日(日本時間だと翌日だけど)Go 1.23 が正式にリリースされていたので、サンプルとして range-over func を使った高階関数のセットを書いてみた。 Go 1.23.…

Go1.23 から導入される Iterator を使って Chunk 処理を書く

Go

Overview Sample Benchmark See Also Overview Go1.23 から導入される Iterator を使って同様に Chunk 処理を実装してみます。 Sample func chunk[T any](src []T, chunkSize int) iter.Seq[[]T] { return func(yeild func([]T) bool) { for i := 0; i < len…

semaphore を使って goroutine の起動数を Go から排他制御する

Go

Overview sync package 内にある semaphore を使って Go のアプリケーション側で goroutine の起動数を排他制御します。 Go の並行処理の起動数を制御するのは 使い方 https://pkg.go.dev/golang.org/x/sync/semaphore#section-documentation のサンプルにあ…

Go の iterator を触ってみた

Go

Overview 今月にもリリースされる予定の Go1.23 に同梱されている iterator package をだいぶ今更ながら触ってみました。 どういうものか、ということの概要は知っていましたが、まぁ一旦自分でも触ってみるか、ということで触ってみて、実際動かしながら触…

ポートフォリオサイト盆栽記録 2024年7月度

サマリ 更新内容 依存関係をアップデートしました ImageResponse を next/server -> vercel/og に移管 @notionhq/client のバージョンを最新にしました Note に「しずかなインターネット」の記事を追加しました 今回やろうと思ってやらなかったこと npm -> p…

ブログのロゴを変えてみた

ずっと自分の写真だったけど昨今のいろいろリスクも増えてきたのでブログ用のアイコンを作って favicon 等々に適用してみた。 なお、どういうロゴがいいかわからなかったのでとりあえず ChatGPT に「いい感じのロゴ作って〜」とお願いしていくつか出してもら…

ogen が v1 になっていたので変わったところも含めて試してみた

サマリ 現職で OpenAPI からのコード生成ツールとして ogen を採用して使っているのですが、この ogen がしばらく見ないうちに v1 (現時点の最新は v1.2.1) に進んでいたので、v1 以前との違い等々を調べてみました。 github.com v1 以前と変わったところ 設…

Go Conference 2024 に参加してきた

Go

Go Conference 2024 に参加してきました。 個人としてはだいぶ久しぶりに大きなソフトウェアのカンファレンスに参加してきました。 コロナ禍でのオンライン開催での現地の熱気を感じれなくなったり、その後子供が生まれてそもそも週末に1人でなにかのイベン…

Alfred -> Raycast に移行した

Overview タイトルのとおりですが、PC のランチャーアプリを長年愛用していた Alfred を一旦辞めて流行りの Raycast に移行してみました。 www.raycast.com 特にこれ!というものはなかったのですが、流行りに乗ってみようという単純な動機です。 便利なとこ…

Prezto をやめて sheldon に移行して zsh の起動速度を改善してみた

これはなに? zsh のプラグインマネージャーとして Prezito を使っていましたがこれをやめて sheldon に移行したログです。 sheldon とは? Rust 製のシェルのプラグインマネージャー。 Rust 製だけあってそもそも高速です。 brew でインストールできますが …

社会人10年目が終わった

社会人 10 年目が終わって、11年目になった。 2014年から社会に出たときには、先のことなんか何も考えられてなかったけど気づいたら10年が過ぎてしまった。 10年目まではちゃんと数えておくか、と思っていたのもあり、来年以降は「社会人N年目」みたいなカウ…

VSCode で delve を使った Debugger の環境を整える

Go

Overview Go + Delve の利用環境を VSCode について記載します。 動機 普段の開発ではずっと古き良き? print debug を使って動作確認を行ってきていました。 もちろん手元の開発だけでなく remote での動作確認等では今でもこれよりシンプルで一般的な手法…

Amazon Pinpoint で S3 上のファイルからセグメントを作成する

Overview 用語の整理 実装方法 利用する API ファイル形式 ハマったところ Pinpoint -> S3 に触る role を設定する 余談 Overview Amazon Pinpoint という AWS が提供してるマネージドCRM ツールを使ってセグメント(配信対象)を S3 上のファイルから作成す…

cloud.google.com/go/bigquery.Query の結果を go test の中で mock する

Overview やること Query Operation の場合 ハマったところ BigQuery のライブラリでどの API を Call しているのかわからなかった。 BigQuery の API のレスポンスを生成する Overview BigQuery を使った実装をしているときに、API リクエストを mock した…