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

gomockのMatcherで構造体を再帰的に比較する

gomockの引数のMatcherでgomock.Eq()を使うときに、構造体がポインタ型だったりするとうまく比較できない。 type Hoge struct { ID string } m.EXPECT().Hoge(gomock.Eq(&Hoge{ID: "1"})).Return(nil).AnyTimes() // マッチしない m.Hoge(&Hoge{ID: "1"}) そ…

go-cmp の cmp.Diff() でJSON文字列を比較できるようにする

go-cmp を使うと2つの構造体のDiffを取ることができるが、プロパティにJSON文字列([]byte や json.RawMessage など)があると、内容は同じでもインデント等が異なるとdiffが出てしまい、うまく比較できない。 type Hoge struct { ID string JSON json.RawMess…

Docker container からホストでListenしているポートにアクセスする

Docker Desktop ではコンテナから host.docker.internal を使って、ホストにアクセスすることができる。 index.js: const express = require("express"); const app = express(); const port = 3000; app.get("/", (req, res) => { res.send("OK\n"); }); ap…

github.com/go-sql-driver/mysql で date型のカラムをtime.Time型で扱うと日付がズレるのを回避する

以下の記事で示したように、github.com/go-sql-driver/mysql で parseTime、loc オプションを適切に設定することで、Go の time.Time型とMySQLの datetime 型をタイムゾーンを考慮して適切に相互変換できる。 mrk21.hatenablog.com しかし、同様にMySQLのdat…

github.com/go-sql-driver/mysql で datetime型のカラムのタイムゾーンを適切に扱う

MySQLのdatetime型はタイムゾーンを保持しないため、MySQL側でJSTで取り扱うと決めたら、クライアント側で都度適切にタイムゾーンを変換する必要がある。 Go言語でこれを適切に行うためには、DB接続時に github.com/go-sql-driver/mysql のDSNで以下のように…

Nuxt app で AWS SDK for JavaScript v3 を使えるようにする

AWS SDK for JavaScript v3 (@aws-sdk/***) では optional chaining operator ?. が使われており、Chrome や Node.js などでも割と最近になって使えるようになったので(2020年ごろ)、Nuxt app で使おうとすると設定にもよるがおそらく以下のようなエラーが出…

xargs -P と export -f を使ってシェルスクリプトで並列処理を実現する

xargsの-Pオプションを使うとパイプで渡された値を任意の並列数で並列処理することができます。以下では、普通に実行すると10秒かかる処理が、5並列で並列処理することによって2秒で実行することができます。 f.sh: #!/bin/bash echo $*; sleep 1; $ seq 10 …

PowerShell で sudo 的なことをしたい

Windows Terminal 1.13 から管理者権限に昇格できるプロファイルを定義できるとはいえ、いちいち管理者権限が付与されたウィンドウを立ち上げたくはない。POSIXのように sudo <command> で同一ウィンドウ(タブ)で実行したい。 これには gsudo というそのまんまなこと</command>…

WSL2でcodeコマンドやexplorer.exeがハングする

WSL2上でcodeコマンドを使ってVSCodeを開こうとしたらハングしてしまった。WSL2の再起動や高速スタートアップを無効にしてもWindowsの再起動をしても治らないし、codeコマンドだけではなくexplorer.exeもハングしてしまう。 調査していると、Windows上のパス…

PowerShell で .bashrc 的なことがしたい

PowerShell にも .bashrc 的なファイルがあって、それを編集すればシェルを起動するときに任意の設定を読み込める。 $profile 変数にプロファイルファイルのパスが入っているので、これを編集する。なお、存在しない場合があるので、その場合は $profile の…

WSL2 の localhost forwarding を代替する PowerShell Script を作った

以前、自分の環境では localhost forwarding で頻繁にハングすることがあるので、netsh interface portproxy add コマンドを使って手動で port forwarding するようにした。 mrk21.hatenablog.com 別に都度このコマンドを叩いてもいいのだが、WSL2 が listen…

Terser で minify するときに ascii_only オプションを true にしないと Unicode Escape Sequence が展開されてしまう

Webpack + Babel + core-js な環境でビルドしたJavaScriptをPerlサーバーで配信するプロジェクトで、あるときPerlサーバーで配信しようとしたときに Internal Server Error がでてしまった。 ログを確認すると、Wide character in subroutine entry at /path…

WSL2 の localhostForwarding 機能がうまくうごかない

WSL2 の localhostForwarding 機能を使うと、WSL2側で listen したポートを自動的にWindows側で port forwarding してくれるので、Windows側からは localhost でWSL2側で listen しているポートにアクセスすることができる。 しかし、自分の環境ではアクセス…

WSL2 上の Docker container で名前解決が異常に遅い

個人PCでは Windows で WSL2 と WSL2 backend な Docker Desktop を使って開発しているが、Docker container 上での名前解決が異常に遅い。 調査していると、どうも Hyper-V のネットワークまわりに問題がありそうだが、具体的にどこがおかしいのかはわから…