Diary of a Perpetual Student

Perpetual Student: A person who remains at university far beyond the normal period

Go

Go言語のloggerをDefault1つで済ませる方法:slog Handlerがcontextの中身を見てよしなにするパターン

先日、kamakura.go #6にて、「slog登場に伴うloggerの取り回し手法の見直し」という題で登壇しました。Go Conference 2024にこの内容でproposalを出していて落選してしまったのですが、kamakura.go #6のテーマ「昔のGo、今のGo」とピッタリだったので応募し…

arm64の場合/proc/cpuinfoでCPUのモデル名が取得できない件とその対策

arm64では/proc/cpuinfoからCPUのモデル名を取得できない Linuxにはシステムの様子を知ることができる仮想ファイルがいくつかあります。そのうちの一つが/proc/cpuinfoで、その名の通りCPUの情報が以下のように閲覧できます。 $ cat /proc/cpuinfo processor…

slog時代のGoではloggerをcontextで引きまわさなくて良い気がする

Goのloggerを引き回す際に皆さんはどのような手法を取っていますか? グローバル変数にloggerのインスタンスを入れておく contextにloggerのインスタンスを入れておく トレースIDなどを入れたloggerを適宜作ってcontextに格納する 構造体のフィールドにlogge…

Ubuntu・Debianで再起動が必要な際に知らせてくれるMackerelのチェックプラグイン

家でいくつかRaspberry Piを飼っておりそれぞれにUbuntuをインストールしているのですが、ログインした際に以下のように「System restart required」と言われることがあります。 Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-1044-raspi aarch64) (中略…

Go言語のクロスコンパイルを活かすDocker BuildxのBUILDPLATFORM・TARGETARCH

Go言語で作ったアプリケーションをコンテナイメージにするとき、以下のようにマルチステージビルドを利用したDockerfileを書くことが多いでしょう。 FROM golang:1.21-bookworm as builder WORKDIR /opt/app COPY go.mod go.sum ./ RUN go mod download COPY…

安価に手間なく readonly な GraphQL API を作る

私は個人開発で、読み込みのみが求められる(ユーザーの行動起因でのデータ更新が起こらない) GraphQL API を作っています。情報サイトや個人ブログのバックエンドとしての利用が挙げられます。 今回は趣味の個人開発向けにインフラ費用を抑え、そして手間…

OpenTelemetry Metrics をコマンド一発で投稿できるツール、作りました

OpenTelemetry Protocol (OTLP) を受ける endpoint を開発する際、デバッグのために簡単にテレメトリデータを送りたいという需要があります。OpenTelemetry Collector をいちいち立てたり、何らかのアプリケーションを作ってそれを計装したりするのは、デバ…

GoReleaser を使って Homebrew でインストール可能な CLI ツールを公開する時にも GitHub Apps トークンが使える

3行 GoReleaser を使うと、作ったツールを Homebrew でインストールするための formula を書き出してくれて便利 GitHub Actions でこれを行う際、GitHub の PAT が必要とされているが、代わりに GitHub Apps トークンも使える PAT を利用する方法と比較して…

Go のテーブル駆動テストは map を使って書きたい

Go 言語のプログラムのテストでは、テーブル駆動テストと呼ばれる書き方をすることが多いです。シンプルに例を挙げると以下のような形。 func TestAdd(t *testing.T) { cases := []struct{ title string inLhs int64 inRhs int64 want int64 }{ { name: "1 +…

docker build 時に private リポジトリから go get する

要件 Go 言語で作られた、GitHub の private repository の go module に依存しているアプリケーションについて考えましょう。例えばオープンソースではない社内ライブラリに依存している、という状態です。 手元の開発マシン上では GOPRIVATE 環境変数を利…

パフォーマンスだけを考えると WMI を使わないほうが良いのかもしれない

OS 名は WMI から取得したほうが良いが…… 前にこんなエントリを書いた。 blog.arthur1.dev このエントリを要約すると、「Windows の OS 名を取得するとき、レジストリにアクセスするのではなく WMI を使って取得しよう。なぜなら、Win 11 が Win 10 として認…

Windows の OS 名をレジストリから取得するのはやめよう

3行 Windows の OS 名をレジストリから取得すると、Win 11 が Win 10 として表示されてしまう 例えば、WMI を使って取得する方法が正攻法っぽい Go から WMI を触るサンプルコードもあるよ Win 10 が Win 11 として Mackerel に登録されている 自分は OSS の…

ent + gqlgen で怠惰に GraphQL API を作る

この記事ははてなエンジニア Advent Calendar 2022 の 2023年1月4日の記事です。 Go 言語の ORM である ent をご存知でしょうか? ent はコード生成を用いて型安全に RDB のクエリを記述できる ORM です。エンティティ間の関係を Edge として定義するのが特…

Lambda 新機能の Telemetry API を利用した mackerel-lambda-extension-agent 試作

この記事は Mackerel Advent Calendar 2022 16日目の記事です。 こんにちは、id:arthur-1 です。2022年にはてなに新卒入社して、Mackerel 開発チームのアプリケーションエンジニアをやっています。また、今年の Mackerel Advent Calendar の運営を担当してお…

時間やネットワークトラフィックの単位が追加された Mackerel でネットのスピード監視

この記事は Mackerel Advent Calendar 2022 1日目の記事です。 こんにちは、id:arthur-1 です。2022年にはてなに新卒入社して、Mackerel 開発チームのアプリケーションエンジニアをやっています。また、今年の Mackerel Advent Calendar の運営を担当してお…

Advent Calendar を Mackerel で監視する 〜新卒の暮らし方を添えて〜

この記事ははてなエンジニア Advent Calendar 2022 1日目の記事です。 こんにちは、id:arthur-1 です。2022年に新卒入社して、Mackerel 開発チームのアプリケーションエンジニアをやっています。 arthur-1 という id に掛けて、トップバッターをいただきまし…

ISUCON 12: はじめての ISUCON 体験記

ISUCON 12 予選にチーム「横浜の缶詰」*1として参戦し、最終スコア 9368 点を残して敗退しました。参考値ではありますが 104 位(661 チーム中?)ですね。 isucon.net 結果としては残念な感じですが、初めての ISUCON で今後の成長に繋がるやり方を貫き通せ…