S3でCodeBuildの排他制御をする

CodeBuildで同時ビルド数を一つに制限したいことがあって、そういうときはConcurrent build limitを1に設定して運用するようにしていた。 [Concurrent build limit] (同時ビルド制限) で、このジョブで許可される同時実行の最大数を設定します。 しかしConcu…

iPhone Safari用のはてブNGフィルタ機能拡張「はてブフィルター」を作った

はてなブックマークは好きだけどあまり目にしたくないエントリもあるので、iPhone/iPadのSafari用NGフィルタ機能拡張を作った。 はてブフィルターGenki Sugawaraユーティリティ無料apps.apple.com github.com *1 ChromeやFirefoxの拡張はすでにいくつか存在…

GolangのジェネリクスでWriterDB/ReaderDBの型を分ける

アプリケーションからDBを使うときに読み込み専用のノードを作ってトランザクションの不要なクエリや重いクエリを読み込み専用のノードに投げるようにすることがよくある。 アプリケーションの全体の情報を保持する構造体があるとして、Writerノード・Reader…

GolangでそこそこのJSONパーサを楽に自作する

先日、json2goというツールを作ったが、構造体のフィールドの順番がJSONと同じにならないのがいやで、なんとかならないかと調べてみた。 ObjectのanyへのUnmarshalがmap[string]anyに決め打ちされているのが原因で、ルートのObjectの型をなんとかすることは…

json2goの作成といくつかの学び

元旦の手隙な時間にjson2goというJSONをGoの構造体に変換するツールを書いた。 github.com $ echo '{"foo":"bar","zoo":[1,2,3],"baz":[{"hoge":10},{"fuga":20}]}' | json2go struct { Baz []struct { Fuga int `json:"fuga"` Hoge int `json:"hoge"` } `js…

alecthomas/kongでユーザー定義型(Custom decoder)を使う

github.com For more fine-grained control, if a field implements the MapperValue interface it will be used to decode arguments into the field. package main import ( "fmt" "os" "github.com/alecthomas/kong" ) type Foo struct { Value string } …

GolangでDNS権威サーバを書いてfly.ioで動かす

任意のプラベートIPを返すような動的なDNS権威サーバが欲しくなったので調べたところ github.com/miekg/dns というライブラリでサクッとかけそうだったので書いてみた。 net/http を模したライブラリで、DNSサーバを簡単に書くことができる。 github.com pac…

Pull Requestへのコメントでlambroll deployを実行する

AtlantisのようにPull Requestが作成されたタイミングでlambroll deploy --dry-runが実行され、/deployとコメントすることでlambroll deployが実行されるGitHub Actionsのワークフローを作ってみた。 デモ デプロイされたら自動でマージされる エラーになっ…

Fine Software Writings ( www.aoky.net ) にアクセスできなくなっている

11月くらいから Fine Software Writings にアクセスできなくなっている。 https://t.co/tOW2x14Dvo にアクセスできない???— Genki Sugawara (@sgwr_dts) 2025年11月12日 閉鎖したという話は聞いてないし、まったく騒がれていないので、自分の環境の問題か…

Pull Requestで最新のコメント以外は最小化するやつ

github.com デモを見るとやりたいことはわかると思う。 terraformのGitHub Actionsのドキュメントでは古いコメントを削除しているが、Atlantisでは --hide-prev-plan-comments オプションで古いコメントを最小化するようになっており、その開発体験がよかっ…

宣言的スキーマ管理のためのデータマイグレーション

宣言的スキーマ管理をする場合に「データマイグレーションをどうするか」という課題があって、Ridgepoleについては「データマイグレーションはほかのツールでやってほしい」というポリシーで開発してきた。 C社にいた頃はLiquibaseを使って「GitHubにSQLファ…

テストの時だけメソッドをはやす

main.go package main import "fmt" type Foo struct { I int J int } func (foo *Foo) Sum() int { return foo.I + foo.J } func main() { foo := &Foo{1, 2} fmt.Println(foo.Sum()) } helper_test.go package main import ( "fmt" ) func (foo *Foo) Dump…

terraform-provider-googlesheetsを作っていた

terraformからGoogleスプレッドシートの値を取得したいことがたま〜にあるので、少し前にスプレッドシート取得用のproviderを作った。 github.com サービスアカウントにスプレッドシートを共有して シート名とレンジを指定するとその範囲のデータをJSON文字…

pgx/v5でstring配列をやりとりする

github.com/jackc/pgx/v5 v5.7.6 での検証 pgx.Conn pgx.Connを使っている場合は、[]stringをそのまま使えるのであまり考える必要はない。 package main import ( "context" "fmt" "log" "github.com/jackc/pgx/v5" ) func main() { ctx := context.Backgrou…

Google Apps Scriptからのアクセスを雑に認証する

Google Apps ScriptからプライベートなサービスのAPIを呼び出す場合、何らかの認証が必要になるので、GASから取得したOAuth2アクセストークンを検証するプロキシサーバを作ってみた。 github.com 仕組み ScriptApp.getOAuthToken()を使うと有効なユーザーの …

cron(5 10 31W * ? 2027) はいつ実行されるか?

EventBrigeのcron式のパーサ cronplan に以下のようなバグ報告があった。 github.com 5 10 31W * ? 2027の出力が cronplan とEventBridgeのコンソールで異なるとのこと。 Wはmonth-of-dayの末尾につけると、指定した日付が平日ではない場合、近い平日に寄せ…

terraform-provider-lambdazipにJavaScript・Go・Python・Ruby・Rustのデプロイ例を追加した

TerraformでLambdaをデプロイするためのプロバイダ terraform-provider-lambdazip にJavaScript・Go・Python・Ruby・Rustの例を追加した。 github.com JavaScript https://github.com/winebarrel/terraform-provider-lambdazip/blob/main/lambdazip.tf.sampl…

TerraformでAWS Lambda(Python+C拡張)をデプロイする

terraform-provider-lambdazipを修正してPythonのデプロイにもある程度対応できるようになったのでメモ。 github.com ディレクトリ構成 pylambda/ ├── .gitignore ├── main.tf └── src/ ├── lambda_function.py ├── requirements.txt └── ruff.toml Pythonソ…

terraform-provider-firebaseremoteconfigを作った

一身上の都合により terraform-provider-firebaseremoteconfig を作った。 github.com こういう感じでFirebaseのRemote Configのパラメータを管理できる。 resource "firebaseremoteconfig_parameter" "foo" { key = "foo" value_type = "JSON" default_valu…

qube: Zstandard Seekable Format対応

自作のDB負荷テストツール qube を Zstandard Seekable Format に対応させた。 Zstandard Seekable Format is 何? github.com 名前の通りシーク可能なZstandardのフォーマット。 ファイル末尾にシークテーブルをつけて解凍しなくても任意のオフセットからデ…

terraform-provider-multireplaceを作った(が、すでにあった)

terraformのjsonencode()には<, >, &を \u003c, \u003e, \u0026 に変換するよく知られた仕様がある。 developer.hashicorp.com When encoding strings, this function escapes some characters using Unicode escape sequences: replacing <, >, &, U+2028, …

aws-sdk-go-v2を使ってDownloadCompleteLogFileをよぶ

gist758d768c2efb4b17b45ecb9d4e915c22 CLIも作った。 github.com 実はいにしえのgoamz(のフォーク?)が対応していて、それを使ったツールも作ったけど、SSOやAWS_PROFILEの対応が辛いので作り直した。リトライまわりは未対応

GitHub Actionsのmatrixのconclusionを後続のジョブで取得する

needs.job_id.result がいずれかのmatrixの結果しか返さない、っぽい。 GitHub ActionsのMatrix Jobsの結果を受け取るワークアラウンド Status check for a matrix jobs · community · Discussion #26822 Get status of parallel jobs into a single Webhook…

ssowrapというツールを作ったが特に必要なかった

ssowrapというaws2-wrapのGolang製シングルバイナリ版を作った。 github.com Golang版のaws2-wrapは頑張って探せばありそうだったけれど ぱっとみ、見つけられなかった 以前作ったSSOクレデンシャル出力ツールの再設計がしたかった ssowrapを含むDockerイメ…

縦型バッテリーアイコン

github.com

Pull RequestのCIがコケたら通知してくれるアプリを作った(2回目)

github.com

テスト用パッケージをgo.modから除く(非推奨)

cronplanにそれなりにスターがついたので、go.modからテスト用パッケージを除いてみた。 以下、cronplanをv1.10.1→v1.10.4に変更したときのgo.sumの差分。 $ go get github.com/winebarrel/cronplan@v1.10.1 $ go mod tidy $ cp go.sum go.sum.bak $ go get …

EventBridgeの複数のcron式のスケジュールを表示するCLIを作った

https://github.com/winebarrel/cronplan?tab=readme-ov-file#cronskd-cli cronの時間の隙間を探すことがよくあるので… $ cat exprs.txt 0 10 * * ? * 15 12 * * ? * 0 18 ? * MON-FRI * 0 8 1 * ? * 5 8-10 ? * MON-FRI * $ cronskd -s '2024-11-11' exprs.…

メニューバーでPagerDutyのステータスがわかるmacOSアプリを作った(10ヶ月ぶり2回目)

以前作ったPagerDuty通知用のmacOSアプリを書き直してPagerCallというアプリを作った。 github.com 基本的な機能は前作のPDStatusとあんまり変わってなくて、メニューバーに常駐してインシデントの一覧を表示して通知を飛ばすだけのもの。 ただPDStatusは初…

Atlantisを使ったオペレーションの検証(あるいはPoor man's Bytebase)

BytebaseのようにSQLだけでなく任意のワンショットのコマンドの実行をAtlantisのワークフローに乗せられるのではないか…ということを思いついたので検証してみた。 まずワンショットのコマンドのterraform providerを作成。 github.com resource "oneshot_ru…