Go

ライセンスに関する誤りの訂正とお願い(tbls, runn, sshc, httpstub, grpcstub)

Go

この度、私が開発している以下の5つのOSSにおいて、ライセンスに関する重大な誤りがあったことをご報告し、深くお詫び申し上げます。 https://github.com/k1LoW/tbls ( v1.51.0 - v1.88.0 ) https://github.com/k1LoW/runn ( v0.71.0 - v0.138.0 ) https://g…

GitHub Notificationsの未読通知を活用したPull Request / Issueのトリアージを実現するGitHub CLIエクステンションgh triageを作った

テイラーでは開発にGitHubを使用しているのですが、それはもう毎日たくさんのPull Request / Issueが作られます。 RenovateなどのPull Requestの数も影響していますが、それを差し引いても構成人数比でいうと多い印象があります。 GitHub Notificationsの未…

deckがv1になった

Go

deckのアップデート https://t.co/ZCa8E5O975 からかなりあるんだけど、筆が鉛みたいに重い— k1LoW (@k1LoW) 2025年7月8日 言いたいことはたくさんあるような気がするのですが、まずはアップデート報告です。 deckはv1に到達しました!!!!! v1.0.0 Relea…

deckのスライド更新処理を改善した

Go

deckのスライド更新処理を改善しました。まだまだ完全とはいきませんが報告です。 deckのページ更新処理の課題 blog.lacolaco.net ページの挿入・削除に弱い おそらくこれはdeckの根本的な仕組み上仕方ないと思うが、Markdown側で10枚ページがあるときに、5…

deckをインラインテキストのスタイルの適用に対応した

Go

書いた。deckありがとう "k1LoW/deck: MarkdownでGoogleスライドを作る | lacolaco's marginalia" https://t.co/5430IKq2rO #laco_feed— lacolaco@lacolaco.bsky.social (@laco2net) 2025年5月28日 GW の資料作成 (15分、20分の2本) は k1LoW さんの deck に…

deckにwatchモード( --watch )を追加した

Go

https://t.co/eox7sgZTFt を試してくれる人がいて嬉しい— k1LoW (@k1LoW) 2025年4月28日 前回からの続きです。 k1low.hatenablog.com scrapbox.io deck apply が時間かかるので反映中に変更したものが不整合になりがち 本当にその通りで、そのためにページご…

私的MarkdownとGoogle Slidesでスライドを作成する方法(またはdeckの紹介)

Go

md2googleslides の体験が良すぎた結果、より体験向上のため、一から専用のツールを作った— k1LoW (@k1LoW) 2025年3月14日 md2googleslides 転職してKeynoteのスライドテンプレートがなくなったので*1、これを機にスライド作成環境をGoogle Slidesに移行する…

HCL(Terraformの.tf)ファイルやCUEファイルのシンタックス内にある文字列に(prettierなどの)任意のフォーマッタを適用する

Go

おそらくTerraformの.tfファイルがイメージしやすいと思いますが、.tfファイルのHCLシンタックス内に別のシンタックス(多くはヒアドキュメントで表現される複数行の文字列)を埋め込むことがあります。 私が真っ先に思い出すのがAWSのPolicyです。 resource…

ghq list をMonorepoに対応させる

Go

monorepoが増えてきたなあ— k1LoW (@k1LoW) 2025年2月5日 私は普段リポジトリの管理にghqを使っています。 そしてリポジトリ間の移動にはpecoと合わせて以下のようにコマンドを組み立てています。 $ cd `ghq list --full-path | peco` # ghq listの結果をpec…

任意の文字列をマスクするmaskedioパッケージを作ったが実装に不満がある

Go

runnでトークンやパスワードといった機密データをマスクする機能を作りたかったので、そのためのパッケージを作りました。 github.com 機能は単純で、maskedio.NewWriter(w io.Writer) で、任意の io.Writer を内包したインスタンス *maskedio.Writer を作成…

エラーをスタックトレースも含めて構造化ログで取得できる github.com/k1LoW/errors を作った

Go

エラーパッケージを作った話です。 www.m3tech.blog 私は、上記のエントリの「ぼくがかんがえるエラー処理の要件」に完全同意*1で、パフォーマンスをある程度犠牲にしてでもスタックトレースを「カジュアルに」受け取りたいと考えています。 また、 tech.kan…

パッケージのgo.modのgoディレクティブのバージョンを最新の1つ前のマイナーバージョン(oldstable)に強制するoldstableを作った

Go

いやあ、おっしゃる通りだなあ。packageのエコシステムを考えると気にしていかないとだhttps://t.co/JgKigJp564— k1LoW (@k1LoW) 2024年6月30日 確かに、あまり気にせずgovluncheckに引っ掛かったら即、最新バージョンに上げていたので良くないなあと反省。 …

Go Conference 2024に参加した #gocon

Go

Go Conference 2024に参加/登壇してきました。 gocon.jp 前日のUnofficial Pre Partyから参加させていただき、2日間Goの話題に浸かってしました。 moneyforward.connpass.com 2日に渡って理解した range over func いろいろ楽しかったのですが、印象に残って…

contextのキャンセル時にtesting.T.Cleanupのようにクリーンアップ処理を実行できるパッケージdonegroupを作った

Go

contextのキャンセルとそれに対応したクリーンアップ処理 Goにおいてcontextはさまざまな値を伝搬させるために使用します。その1つがキャンセル信号です。 ctx, cancel := context.WithCancel(context.Background()) defer cancel() contextを通じてキャンセ…

GoのHTTPミドルウェアやその周辺パッケージを配布する新しいGitHub Orgをはじめました

Go

このエントリは GMOペパボエンジニア Advent Calendar 2023 および、 Go Advent Calendar 2023 シリーズ3 の19 日目の記事です。 以下のエントリでも少し触れられていますが、現在プロキシサーバをGoで書くプロジェクトがあります。 ten-snapon.com k1low.ha…

カジュアルに使えるスタブサーバとしてhttpstubとgrpcstubを作って使っている

Go

このエントリは Go Advent Calendar 2023 12 日目の記事です。 Goのテスティングパッケージで一番好きなパッケージは net/http/httptest です。 テスト実行時に実際にHTTPサーバを立ててHTTPリクエストを受けるというシンプルかつ強力なアプローチが良いです…

Go Conference mini 2023 Winter IN KYOTOに参加してきた #kyotogo

Go

京都に行ってきました。 Go Conference mini 2023 Winter IN KYOTO kyotogo.connpass.com すでに、ne-sachirouさんによりスライド資料などが集められています。感謝! scrapbox.io 「miniとは?」となるGoで濃縮された1日になりました。運営の皆様、本当にあ…

スタブの役割をするためだけに生まれてきたバイナリstubin

Go

複数のコンポーネントが連動するアプリケーションのテストを書くとき、「どこまでを本物を使ってどこからモックするか」みたいな話は開発の現場のいたるところであると思います。 「要はバランス」だったり「答えは現場の数だけあ」ったり*1。 外部コマンド…

octocovで任意のメトリクスを記録できるようにした(カスタムメトリクス)

Go

octocov octocovはコードカバレッジのためのツールキットです。 github.com コードカバレッジなどのコードメトリクスを手元のターミナルで確認したり、GitHub ActionsのActionとしてPull Requestにレポートしたりできます。 計測したコードメトリクスを、さ…

テストでしか使わないパッケージをgo.modに含めない方法

Go

元エントリは↓で、これが全てです。 dev.to 最高じゃんhttps://t.co/c1hfSYhgx2— k1LoW (@k1LoW) 2023年8月26日 Goでツールではなくライブラリ(パッケージ)を作っているとき、テストにしか使わないパッケージがgo.modに入って依存関係ができてしまうのが、…

gh auth loginで作成されたクレデンシャルだけで生活するためにgh-doを作った

やっとgh auth loginで得たクレデンシャル(OSのセキュアストレージに保存されているもの)のみを使う生活になったぞ— k1LoW (@k1LoW) 2023年5月15日 GitHub CLIの gh auth login で作成されたクレデンシャルはOSのセキュアストレージに保存されるようになり…

Calendar Versioningを扱うパッケージ/ツールとしてcalverを作った

Go

提供する機能とは関係なくリリースを定期的に実施するようなプロダクトや、バージョンにSemantic Versioning(以下SemVer)のような意味付けがしにくいプロダクトの場合、バージョン管理手法にCalendar Versioning(以下、CalVer)というものが採用されるこ…

tblsをセットアップするGitHub Actionとしてsetup-tbls(を作るツールとしてgh-setup)を作った

タイトルが何を言っているのかよくわからないと思いますので順を追って紹介したいと思います。 tblsをセットアップするGitHub Actionとしてsetup-tbls を作った setup-tblsはtblsをインストールしてくれるGitHub Actionです。 github.com 各所で「ないの?」…

データベースドキュメント生成コマンド tbls 更新情報(Mermaid対応 / schema.json / tbls outの強化)

Go

久しぶりのtblsの新機能紹介エントリです。 ドキュメントのER図出力にMermaidを指定できるようになりました ER図の出力フォーマットにMermaidを指定できるようになりました。次のように er.format: セクションか --er-format オプションに mermaid を指定す…

経過時間を内訳も含めて計測するためのストップウォッチライブラリ stopw を作った

Go

runn を使ってシナリオテストを順調に積み上げていった結果、順調にテスト実行時間が長くなってきました。 そこでテストのどの部分に時間がかかっているかを計測したくなったのですが、runnにその時間計測機能はなかったのでそれを作ろうと考えました。 とこ…

シナリオテスティングツール/パッケージであるrunnをgRPCに対応させた

Go

gRPC、Unary以外のメソッドの挙動が面倒すぎてうまくrunnの実装の落とせない特にBidirectional-Streaming、お前だ— k1LoW (@k1LoW) 2022年6月26日 なんとかgRPC対応ができました。 「そもそもrunnって何?」については会社のテックブログにエントリを書きま…

gomockで「呼ばれるべき」と指定した関数の非同期な実行を待ちたいのでテストヘルパーを書いてみた

Go

gomockでデータベース操作などをモックすることはよくあると思います。 そのテスト関数内で「呼ばれるべき(EXPECT())」と指定した関数に非同期に実行される挙動がある場合、テスト関数の書き方によっては実行終了までにその関数が実行されないことがあり、…

データベースにクエリを投げて結果をプリントするライブラリqpを作った

Go

データベースを伴うテストを書いていて、何故かテスト結果が安定しない事象に出くわして「なんでだ?????」と混乱した結果、データベースの状況をprintデバッグをしたくなって作りました*1。 github.com 使い方は package main import ( "database/sql" …

ファイルの一部の文字列を差し替えするためのコマンド/パッケージ repin を作った

Go

継続的ドキュメンテーション関連です。 README.mdなどのドキュメントを運用していると、そのドキュメントの一部を(CIなどで)自動で差し替えたいことがあります。 例えば xxx help コマンドの出力をもって機能一覧にしているようなREADMEだと、機能が追加さ…

awsdoに ~/.aws/(config|credentials)の設定情報がなくてもAssumeRoleできるようにするためのオプションと、AssumeRoleしたロールでAWSコンソールにログインするオプションを追加した

1年以上前からの久しぶりのアップデートです。 k1low.hatenablog.com --role-arn --source-profile 複数のAWSアカウントを横断して作業することがあり、AssumeRoleのための設定を~/.aws/(config|credentials)に書くのすら面倒になってきたので、設定なしでAs…