概要 最近は生成AIでドキュメントを書く人が増えています。 一方で「AIが書いた文は長くて読みにくい」と感じることがあります。 ここではそれについて以下の視点から説明します。 AI向け・人間向けドキュメントの違い 図とチャンク 図があると人間にとって…
概要 Slack上でダウンロードしようとしても、↓の状態でずっとローディング状態で固まる問題に遭遇しました。 なのでChrome上でSlackを開き直してダウンロードする、という手間をかけていました。 今回はこの問題の解決方法を紹介します。 環境 macOS 15.5 Sl…
概要 ターミナル上で osascript が使えなかった場合の対処方法です。 $ osascript -e 'display notification "Debug" with title "osascript"' としても無反応で、 $ osascript -e 'display notification "Debug" with title "osascript"' 2>&1 ; echo $? 0 …
背景 CursorとClaude Codeを連携しようとしたのですが、 このように連携されてはいるはずなのに、Claude Codeのマークが出ずチャットスタイルで連携することができませんでした。 環境 macOS v15.5 Cursor v1.1.6 Claude Code v1.0.35
背景 protobufのバージョンを見ると、 3.29.5 6.31.1 のような小さなケースと、 29.5 31.1 のような非常に大きなものが分散しています。 https://github.com/protocolbuffers/protobuf/tags どのバージョンを使えば良いのか理解できるよう説明します。
背景 MCP(Model Context Protocol)を使う上で、ローカルMCPサーバやリモートMCPサーバ、更にはそれらを集中管理するゲートウェイ的なサービスもあったりと複雑だと感じたので、それぞれのパターンを一度洗い出してみました。 事前知識 MCP(Model Context Pro…
概要 Istioを使ってサイドカーを利用している場合、ヘルスチェックの仕組みが通常のKubernetesとは異なります。 一見するとよく分からない仕組みになっているので図を用いながら説明します。 環境 Kubernetes 1.31.7 Istio 1.20.8 ヘルスチェックフロー 以下…
概要 ChatGPTでは以下のGIFのように、文字列が少しずつ出てくるUXになっています。 このUXの実現方法として Server-Sent Events というものがあるので、それに必要な知識や使い方を説明します。 環境 Go 1.24.3 Server-Sent Events Server-Sent Eventsとは S…
背景 以前紹介したように、モバイルアプリにログインする際にOAuth 2.0の認可フレームワークを使ったものがあります。 christina04.hatenablog.com これはRFC 6749のOAuth 2.0 Authorization Framework を使ったものですが、この中で曖昧だった(それによっ…
概要 手動運用している Cloudflare の管理を Terraform に移行する手順についてです。 環境 terraform 1.11 cloudflare provider v4.52.0 cf-terraforming v0.23.3 前提知識 APIキーの種類と使い分け Cloudflare には Global API Key(legacy) と API Token …
概要 Feature Flagを使いたいモチベーションとして、 Fractional Evaluation で一部のユーザにだけロールアウトしたい 年齢・性別によって表示させる物を変更したい のようなターゲティング機能があります。 OpenFeatureでターゲティングを実現する際には Ev…
概要 OpenFeature の Provider の使い方を以下のチュートリアルに沿って実現してみます。 openfeature.dev Provider には flagd を使います。 環境 Go v1.24.0 open-feature/go-sdk v1.14.1 flagd v0.11.1
概要 OpenFeatureはフィーチャーフラグマネジメントにおける標準規格として生まれました。 openfeature.dev 今回はそのOpenFeatureについて紹介します。 なぜ生まれたか? 従来 通常フィーチャーフラグ管理システムはこのようにアプリケーションと密に結合し…
概要 前回 christina04.hatenablog.com でOpenFGAについて紹介しました。 今回は実際にアプリケーションでどのように実装するかを説明します。 環境 OpenFGA Server 1.8.4 Go 1.24.0 全体イメージ アプリケーションサーバ、認証サーバ、認可サーバ(OpenFGA…
概要 OpenFGAという認可システムでは、ReBACという認可モデルが採用されています。 ベースとなっているのはZanzibarというGoogle Driveなどので使われているグローバル認証システムで、Google Driveを使ったことがある人はご存じの通り非常に細かい粒度での…
概要 自席では複数の外部ディスプレイを使っているため、 ターミナルは内蔵ディスプレイ ブラウザは外部ディスプレイ1 Slackは外部ディスプレイ2 のように配置することが多い自分です。 また外部ディスプレイを使わない場合は、内蔵ディスプレイで ターミナ…
背景 mongo-go-driver の使い方として次のような書き方がよくあります。 func searchUserByName(collection *mongo.Collection, name string) ([]User, error) { query := bson.M{"name": name} // ここ cur, err := collection.Find(context.Background(), …
概要 Windows機の開発環境を整える一環でEmacsキーバインドの設定を行います。 環境 Windows 11 Ctrl2Cap v2.0 keyhac 1.82 AutoHotKey 2.0 方法 1. Ctrl-Capsの入れ替え Microsoftが提供しているctrl2capsのインストールします。 ダウンロードしたファイル…
概要 PowerToysはMicrosoft が開発するオープンソースのユーティリティソフトウェアです。 特にPowerToys Runは、macOSでいうSpotlightやAlfredのようなことが可能です。 今回はその環境を整備する方法を説明します。 環境 Windows11 PowerToys v0.87.1 Powe…
概要 社会人になってからほとんどmacOSだったのですが、Windowsでも開発やブログ投稿できるように環境を整えています。 今回は開発環境としてWSLをメインで使うよう、環境構築の手順を説明します。 環境 Windows 11 PowerShell 7.4.6 WSL 2.3.26.0 1. PowerS…
概要 年の瀬なので2024年に買ってよかったものを挙げてきます。 ScanSnap(ドキュメントスキャナー) 何だかんだ紙媒体の資料って無くならなくて、 子供の幼稚園・学校の資料 市役所からの資料 マンションの資料 各種手続き・契約資料 これらを電子化したい…
概要 「メディア事業の言語選定の歴史」というタイトルで会社のアドベントカレンダーに投稿しましたので紹介です。 developers.cyberagent.co.jp
概要 前回は実際に動かしてみて挙動を確認してみました。今回はそのロジックを理解します。 christina04.hatenablog.com GoのToolchainはv1.21以降で導入された機能で、次のような課題を解決するために生まれました。 go.modに記載のバージョンは直感的じゃ…
概要 Go Toolchainはモジュールで使うバージョン管理をgoディレクティブだけの頃よりも正確に制御できます。 しかしビルドバージョンは以下の要素の組み合わせから決定されるため、ちゃんと理解していないと期待しない挙動になることがあります。 GOTOOLCHAI…
背景 モデリングでは要件に対して データの要件(〜を持つ。〜がある) 振る舞いの要件(〜ができる。〜しなければならない) のどちらかをまず判断します。 そしてオブジェクト指向では、オブジェクトが データ(属性、フィールド) 振る舞い(メソッド) …
概要 よく使うウィンドウ処理の種類をユースケースとともにまとめます。 ウィンドウ処理 ウィンドウとは集計範囲のことであり、その範囲をどう捉えるか色々な方法があります。 グローバルウィンドウ 一番シンプルな、ウィンドウの区切りがなくすべてのデータ…
背景 Go 1.18からジェネリクスが導入されました。 とはいえ具体的にどういう時に使えば良いの?と疑問に思う人も多いと思うので、ユースケースの例をいくつか挙げてみます。 環境 Go v1.23.0 ユースケース ユースケースを挙げていきます。 コレクション操作 …
背景 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.…
概要 データモデリングをする際に、エンジニアは次のことに注意しなくてはいけません。 パラメータの順序 パラメータを組み合わせの意味 一部のパラメータの値を有限集合にする これらを解決する手法として、関数型プログラミングでは代数的データ型がありま…
概要 GoogleCloudのIAMにおいて、ユーザやサービスアカウントの権限の棚卸しをする際に、とあるIAMパーミッションがどのロール・ユーザ(メンバー)に含まれるか調べる方法です。 事前に以下を知っておくとイメージが付きやすいです。 christina04.hatenablo…