Carpe Diem

備忘録

AIと人間の読みやすさの違い

概要 最近は生成AIでドキュメントを書く人が増えています。 一方で「AIが書いた文は長くて読みにくい」と感じることがあります。 ここではそれについて以下の視点から説明します。 AI向け・人間向けドキュメントの違い 図とチャンク 図があると人間にとって…

Slack でファイルのダウンロードができない状態を解決する

概要 Slack上でダウンロードしようとしても、↓の状態でずっとローディング状態で固まる問題に遭遇しました。 なのでChrome上でSlackを開き直してダウンロードする、という手間をかけていました。 今回はこの問題の解決方法を紹介します。 環境 macOS 15.5 Sl…

osascript で通知が表示されない状態を解決する

Mac

概要 ターミナル上で osascript が使えなかった場合の対処方法です。 $ osascript -e 'display notification "Debug" with title "osascript"' としても無反応で、 $ osascript -e 'display notification "Debug" with title "osascript"' 2>&1 ; echo $? 0 …

Cursor上でClaude Codeのアイコンが出ない

背景 CursorとClaude Codeを連携しようとしたのですが、 このように連携されてはいるはずなのに、Claude Codeのマークが出ずチャットスタイルで連携することができませんでした。 環境 macOS v15.5 Cursor v1.1.6 Claude Code v1.0.35

protobuf のバージョン管理スキームを理解する

背景 protobufのバージョンを見ると、 3.29.5 6.31.1 のような小さなケースと、 29.5 31.1 のような非常に大きなものが分散しています。 https://github.com/protocolbuffers/protobuf/tags どのバージョンを使えば良いのか理解できるよう説明します。

MCPアーキテクチャパターン

背景 MCP(Model Context Protocol)を使う上で、ローカルMCPサーバやリモートMCPサーバ、更にはそれらを集中管理するゲートウェイ的なサービスもあったりと複雑だと感じたので、それぞれのパターンを一度洗い出してみました。 事前知識 MCP(Model Context Pro…

Istioがあるときのヘルスチェックフロー

概要 Istioを使ってサイドカーを利用している場合、ヘルスチェックの仕組みが通常のKubernetesとは異なります。 一見するとよく分からない仕組みになっているので図を用いながら説明します。 環境 Kubernetes 1.31.7 Istio 1.20.8 ヘルスチェックフロー 以下…

Server-Sent Eventsを使ってみる

Go

概要 ChatGPTでは以下のGIFのように、文字列が少しずつ出てくるUXになっています。 このUXの実現方法として Server-Sent Events というものがあるので、それに必要な知識や使い方を説明します。 環境 Go 1.24.3 Server-Sent Events Server-Sent Eventsとは S…

OAuth 2.0 for Native Apps

背景 以前紹介したように、モバイルアプリにログインする際にOAuth 2.0の認可フレームワークを使ったものがあります。 christina04.hatenablog.com これはRFC 6749のOAuth 2.0 Authorization Framework を使ったものですが、この中で曖昧だった(それによっ…

Cloudflare の管理を Terraform に移行する

概要 手動運用している Cloudflare の管理を Terraform に移行する手順についてです。 環境 terraform 1.11 cloudflare provider v4.52.0 cf-terraforming v0.23.3 前提知識 APIキーの種類と使い分け Cloudflare には Global API Key(legacy) と API Token …

OpenFeature で Evaluation Context を使う

概要 Feature Flagを使いたいモチベーションとして、 Fractional Evaluation で一部のユーザにだけロールアウトしたい 年齢・性別によって表示させる物を変更したい のようなターゲティング機能があります。 OpenFeatureでターゲティングを実現する際には Ev…

OpenFeature の Provider を使ってみる

概要 OpenFeature の Provider の使い方を以下のチュートリアルに沿って実現してみます。 openfeature.dev Provider には flagd を使います。 環境 Go v1.24.0 open-feature/go-sdk v1.14.1 flagd v0.11.1

OpenFeature の構成要素やデータモデル

概要 OpenFeatureはフィーチャーフラグマネジメントにおける標準規格として生まれました。 openfeature.dev 今回はそのOpenFeatureについて紹介します。 なぜ生まれたか? 従来 通常フィーチャーフラグ管理システムはこのようにアプリケーションと密に結合し…

OpenFGA でAPIのアクセス制御を実装する

概要 前回 christina04.hatenablog.com でOpenFGAについて紹介しました。 今回は実際にアプリケーションでどのように実装するかを説明します。 環境 OpenFGA Server 1.8.4 Go 1.24.0 全体イメージ アプリケーションサーバ、認証サーバ、認可サーバ(OpenFGA…

OpenFGAでアクセス制御を柔軟に

概要 OpenFGAという認可システムでは、ReBACという認可モデルが採用されています。 ベースとなっているのはZanzibarというGoogle Driveなどので使われているグローバル認証システムで、Google Driveを使ったことがある人はご存じの通り非常に細かい粒度での…

yabaiを使ってホットキーのみでアプリを各仮想デスクトップに移動する方法

概要 自席では複数の外部ディスプレイを使っているため、 ターミナルは内蔵ディスプレイ ブラウザは外部ディスプレイ1 Slackは外部ディスプレイ2 のように配置することが多い自分です。 また外部ディスプレイを使わない場合は、内蔵ディスプレイで ターミナ…

mongo-go-driver はNoSQLインジェクションに対して強いのか

背景 mongo-go-driver の使い方として次のような書き方がよくあります。 func searchUserByName(collection *mongo.Collection, name string) ([]User, error) { query := bson.M{"name": name} // ここ cur, err := collection.Find(context.Background(), …

Windows11 に Emacs や macOS に近いキーバインドを設定する

概要 Windows機の開発環境を整える一環でEmacsキーバインドの設定を行います。 環境 Windows 11 Ctrl2Cap v2.0 keyhac 1.82 AutoHotKey 2.0 方法 1. Ctrl-Capsの入れ替え Microsoftが提供しているctrl2capsのインストールします。 ダウンロードしたファイル…

WindowsでPowerToys環境を整える

概要 PowerToysはMicrosoft が開発するオープンソースのユーティリティソフトウェアです。 特にPowerToys Runは、macOSでいうSpotlightやAlfredのようなことが可能です。 今回はその環境を整備する方法を説明します。 環境 Windows11 PowerToys v0.87.1 Powe…

WindowsでWSL環境を整える

概要 社会人になってからほとんどmacOSだったのですが、Windowsでも開発やブログ投稿できるように環境を整えています。 今回は開発環境としてWSLをメインで使うよう、環境構築の手順を説明します。 環境 Windows 11 PowerShell 7.4.6 WSL 2.3.26.0 1. PowerS…

2024年買ってよかったものリスト

概要 年の瀬なので2024年に買ってよかったものを挙げてきます。 ScanSnap(ドキュメントスキャナー) 何だかんだ紙媒体の資料って無くならなくて、 子供の幼稚園・学校の資料 市役所からの資料 マンションの資料 各種手続き・契約資料 これらを電子化したい…

会社のアドベントカレンダーに投稿しました

概要 「メディア事業の言語選定の歴史」というタイトルで会社のアドベントカレンダーに投稿しましたので紹介です。 developers.cyberagent.co.jp

Go Toolchainの挙動を確認する【理論編】

Go

概要 前回は実際に動かしてみて挙動を確認してみました。今回はそのロジックを理解します。 christina04.hatenablog.com GoのToolchainはv1.21以降で導入された機能で、次のような課題を解決するために生まれました。 go.modに記載のバージョンは直感的じゃ…

Go Toolchainの挙動を確認する【検証編】

Go

概要 Go Toolchainはモジュールで使うバージョン管理をgoディレクティブだけの頃よりも正確に制御できます。 しかしビルドバージョンは以下の要素の組み合わせから決定されるため、ちゃんと理解していないと期待しない挙動になることがあります。 GOTOOLCHAI…

振る舞いをデータとしてモデル化する

背景 モデリングでは要件に対して データの要件(〜を持つ。〜がある) 振る舞いの要件(〜ができる。〜しなければならない) のどちらかをまず判断します。 そしてオブジェクト指向では、オブジェクトが データ(属性、フィールド) 振る舞い(メソッド) …

ウィンドウ処理の種類

概要 よく使うウィンドウ処理の種類をユースケースとともにまとめます。 ウィンドウ処理 ウィンドウとは集計範囲のことであり、その範囲をどう捉えるか色々な方法があります。 グローバルウィンドウ 一番シンプルな、ウィンドウの区切りがなくすべてのデータ…

Goのジェネリクスのユースケース

Go

背景 Go 1.18からジェネリクスが導入されました。 とはいえ具体的にどういう時に使えば良いの?と疑問に思う人も多いと思うので、ユースケースの例をいくつか挙げてみます。 環境 Go v1.23.0 ユースケース ユースケースを挙げていきます。 コレクション操作 …

go get でアップデートすると、なぜか別のライブラリがダウングレードする

Go

背景 go get でアップデートすると、なぜか別のライブラリがダウングレードする不思議な現象に出会いました。 $ go get github.com/userA/hoge go: downgraded github.com/userB/foo v1.2.1 => v1.0.0 go: downgraded github.com/userB/bar v1.10.0 => v1.1.…

代数的データ型を用いたデータモデリング

概要 データモデリングをする際に、エンジニアは次のことに注意しなくてはいけません。 パラメータの順序 パラメータを組み合わせの意味 一部のパラメータの値を有限集合にする これらを解決する手法として、関数型プログラミングでは代数的データ型がありま…

あるIAMパーミッションがどのロール・ユーザに含まれるか調べる方法

概要 GoogleCloudのIAMにおいて、ユーザやサービスアカウントの権限の棚卸しをする際に、とあるIAMパーミッションがどのロール・ユーザ(メンバー)に含まれるか調べる方法です。 事前に以下を知っておくとイメージが付きやすいです。 christina04.hatenablo…