<?xml version="1.0" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Sogo.dev</title>
    <link>https://sogo.dev</link>
    <description>@SogoKatoのブログ。技術系の記事を書きます。</description>
    <language>ja</language>
    <lastBuildDate>Sun, 10 May 2026 00:00:00 GMT</lastBuildDate>
    <atom:link href="https://sogo.dev/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Kubernetesの自宅サーバー公開をCloudflare Tunnelに移行した（VPS廃止）</title>
      <link>https://sogo.dev/posts/2026/05/cloudflare-tunnel-ingress</link>
      <guid>https://sogo.dev/posts/2026/05/cloudflare-tunnel-ingress</guid>
      <pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate>
      <description> 以前の記事 IPoE回線の自宅のWebサービスをVPN経由で固定IPのクラウドから公開する では、IPoE 回線の自宅 Kubernetes クラスタを AWS Lightsail の VPS 経由（HAProxy + WireGuard）で外部公開する方法を紹介しました。あれから約3年、**Cloudflare Tunnel** を使った構成に切り替えたので、その記録を残しておきます。

## 困っていたこと

* 自宅 Kubernetes を外部公開するために Lightsail の VPS を経由</description>
    </item>
    <item>
      <title>Agent-Readyなブログにしてみようと思った</title>
      <link>https://sogo.dev/posts/2026/04/agent-ready</link>
      <guid>https://sogo.dev/posts/2026/04/agent-ready</guid>
      <pubDate>Fri, 24 Apr 2026 00:00:00 GMT</pubDate>
      <description> Cloudflare が、自分のサイトが Agent-Ready であるかどうかを測定できるサイトを公開 しました。AI エージェントがサイトを発見しやすいか、内容を取り込みやすいか、利用方針を機械的に解釈できるかといった観点をまとめて確認できるツールです。

と、いうことで我がブログを測定してみた結果がこちら。  
（Site type: Content site で測定）

!isitagentready score: 50

&gt; Discoverability
&gt; * ✅ robots.txt
&gt; </description>
    </item>
    <item>
      <title>Gemma 3, Gemma 4, Qwen 3.5で画像入力に対する応答の精度を比較してみる</title>
      <link>https://sogo.dev/posts/2026/04/llm-image-recognition</link>
      <guid>https://sogo.dev/posts/2026/04/llm-image-recognition</guid>
      <pubDate>Sun, 12 Apr 2026 00:00:00 GMT</pubDate>
      <description> 個人的に使っている LINE ボットをグループに参加させているのですが、送られた画像のうち「プライベート」な画像をクラウドの LLM API に送るのはちょっと抵抗がある、っていうことでガードレール的にローカル LLM で判定して、問題なさそうな画像だけをクラウドに送るようにしてます。

去年半ばから使い始めていて Gemma 3 4B でそれなりに動いていたのですが、Qwen 3.5 の評判が良かったり、つい最近 Gemma 4 も出てきたってことで、定量的に評価してみました。

## 環境

* Ub</description>
    </item>
    <item>
      <title>LINE Messaging APIでAG-UIを使えるアダプタを作った</title>
      <link>https://sogo.dev/posts/2026/03/line-agui-adapter</link>
      <guid>https://sogo.dev/posts/2026/03/line-agui-adapter</guid>
      <pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate>
      <description> LINE Bot を作るとき、単純なテキスト往復だけならまだしも、画像や音声も扱いたい、既存の Agent 基盤をそのまま使いたい、将来は Web UI にも広げたい……となると意外と面倒です。

最近は多くのメジャーな Agent フレームワークが AG-UI を話せるようになっています。  
今回作った SogoKato/line-agui-adapter は **LINE Messaging API と AG-UI の橋渡しをする Python ライブラリ** です。LINE から受け取ったメッセー</description>
    </item>
    <item>
      <title>Codex Meetup Tokyo #1に参加しました</title>
      <link>https://sogo.dev/posts/2026/03/codex-meetup-tokyo-1</link>
      <guid>https://sogo.dev/posts/2026/03/codex-meetup-tokyo-1</guid>
      <pubDate>Thu, 19 Mar 2026 00:00:00 GMT</pubDate>
      <description> Codex Meetup Tokyo #1 に参加してきました。私自身は仕事で GitHub Copilot や Roo Code を使うことが多いので、Codex の話を聞けるのは新鮮でした。去年一瞬だけ ChatGPT Plus 課金してて使ってたけど、2026年になってからはコミットの勢いが段違いみたいなので全然様相が違うのかも、と思ったりしました。

以下拙いですが私のメモです。

## Codex の最新アップデートを全部キャッチアップする

&lt;script async class=&quot;docsw</description>
    </item>
    <item>
      <title>Auth.js (NextAuth v5) がリバプロ時に違うURLにリダイレクトする問題の対処</title>
      <link>https://sogo.dev/posts/2026/02/nextjs-authjs-behind-proxy</link>
      <guid>https://sogo.dev/posts/2026/02/nextjs-authjs-behind-proxy</guid>
      <pubDate>Wed, 25 Feb 2026 00:00:00 GMT</pubDate>
      <description> 表題の通りで Authjs v5 redirecting to the wrong URL という issue で知られている問題なんですが、2026年2月時点でもまだクローズされていません。Pull request も出ていて)、私もその修正を試してみたところ、それがマージされれば直りそうではあります。ただ、Auth.js は今後、セキュリティパッチや深刻な問題以外は対処されない可能性があるため [^1] 、マージされることはあまり期待できないかもしれません。

ということもあって、今回は同問題の暫定対</description>
    </item>
    <item>
      <title>CopilotKitで爆速チャットUI構築</title>
      <link>https://sogo.dev/posts/2026/01/copilotkit</link>
      <guid>https://sogo.dev/posts/2026/01/copilotkit</guid>
      <pubDate>Thu, 29 Jan 2026 00:00:00 GMT</pubDate>
      <description> ChatGPT や Gemini のようなチャット形式の UI を実現したくても、自分でイチから作るのは構成要素や検討事項が多くなかなか大変です。ストリーミングでレスポンスを返すにはサーバとクライアントでどういう形式で返す約束事にすれば良いのかとか、Markdown のレンダリングとか、いいねボタンとかとか…。

CopilotKit と AG-UI の組み合わせが、とてもイケていたので紹介します。

## CopilotKit とは

LLM や AI Agent アプリの UI を実現するためのオープ</description>
    </item>
    <item>
      <title>Kanikoの代わりにGitLab CIでBuildKitを使う</title>
      <link>https://sogo.dev/posts/2026/01/docker-buildkit-rootless</link>
      <guid>https://sogo.dev/posts/2026/01/docker-buildkit-rootless</guid>
      <pubDate>Tue, 13 Jan 2026 00:00:00 GMT</pubDate>
      <description> 以前 Kaniko 関連の記事を書いていましたが、気づいたら Kaniko がアーカイブされていたので、同じくルートレスでビルドが可能な BuildKit に切り替えました。

Kaniko では `RUN --mount` が使えなかったり、レイヤーごとにスナップショットを撮っていてビルドに非常に時間がかかっていたり、ちょいちょい困っていました。特に後者は、最近重めのライブラリを入れたら（CI のタイムアウトとして設定してある）1時間経っても終わらないことが発生し始めたことが今回の調査のきっかけだったの</description>
    </item>
    <item>
      <title>Azure AI Searchの10万件を超えるドキュメントがあるインデックスを救いたい</title>
      <link>https://sogo.dev/posts/2025/12/azure-ai-search-100k-plus-documents</link>
      <guid>https://sogo.dev/posts/2025/12/azure-ai-search-100k-plus-documents</guid>
      <pubDate>Wed, 03 Dec 2025 00:00:00 GMT</pubDate>
      <description> この記事は、FUJITSU Advent Calendar 2025 3日目の記事です。昨日は @norikmb の Dependency Proxy と Renovate に関する記事 でした。ハマりポイントを記事にしておくことって有益ですよね。今日の記事もそんな感じです。

---

Azure AI Search ではクエリで一括取得できる上限が10万件までという仕様があります。そのためインデックス作成時にスキーマ検討をミスって、どのフィールドもソート可能（sortable）じゃない状況にしてしまう</description>
    </item>
    <item>
      <title>SQLModel（SQLAlchemy）とpgvectorでコサイン類似度検索やハイブリッド検索を実装してみる</title>
      <link>https://sogo.dev/posts/2025/11/sqlmodel-pgvector</link>
      <guid>https://sogo.dev/posts/2025/11/sqlmodel-pgvector</guid>
      <pubDate>Mon, 10 Nov 2025 00:00:00 GMT</pubDate>
      <description> 前回の記事 で作った PostgreSQL + pgvector を使って、一般的な RAG で用いられるコサイン類似度検索やハイブリッド検索（Reciprocal Rank Fusion = RRF）を実装してみました。

## 環境

* PostgreSQL 16.10
  * pgvector 0.8.1
  * pg_trgm 1.6
* Python 3.12.0
  * langchain 1.0.5
  * langchain-huggingface 1.0.1
  * pgvector </description>
    </item>
    <item>
      <title>CloudNativePGとpgvectorでベクトルDBを構築</title>
      <link>https://sogo.dev/posts/2025/11/cloudnative-pg-pgvector</link>
      <guid>https://sogo.dev/posts/2025/11/cloudnative-pg-pgvector</guid>
      <pubDate>Fri, 07 Nov 2025 00:00:00 GMT</pubDate>
      <description> 趣味で動かしているアプリ用にちょっとリッチな文字列検索ができるデータベースが欲しかったけどお金はかけられないので、いつもの K3s 製 Kubernetes クラスタ に PostgresSQL をデプロイして、前から気になっていた pgvector を使えるようにしてみました。

## Operator 選定

PostgreSQL の operator をググってみたらいくつかの種類があるようでした。

Lethediana Tech さんの記事 を参考にさせてもらいましたが、2023年初頭時点の情報</description>
    </item>
    <item>
      <title>Difyでミニマルに学ぶLLM/RAG/Agentの違い</title>
      <link>https://sogo.dev/posts/2025/11/learn-agent-with-dify</link>
      <guid>https://sogo.dev/posts/2025/11/learn-agent-with-dify</guid>
      <pubDate>Tue, 04 Nov 2025 00:00:00 GMT</pubDate>
      <description> 毎日 AI Agent についての話題は絶えないですが、一方で「Agent って何？」みたいな人もいるかと思います。
今回はノーコード AI アプリ開発ツールである Dify を使って、LLM、RAG、Agent の違いをミニマルな形で手を動かして学んでみようと思います。とある機会でデモとして用意した内容なので、サクサクと手を動かしていければ準備を含めても30分くらいでいける内容だと思います。

## 前提条件

* Dify SaaS 版 に登録済み
* Google AI Studio の API キ</description>
    </item>
    <item>
      <title>Microsoft AI-102 Azure AI Engineer Associate 受験記録</title>
      <link>https://sogo.dev/posts/2025/09/azure-ai-102</link>
      <guid>https://sogo.dev/posts/2025/09/azure-ai-102</guid>
      <pubDate>Sat, 27 Sep 2025 00:00:00 GMT</pubDate>
      <description> Microsoft AI-102 Azure AI Engineer Associate を取得したので学習メモです。

過去の資格に関する記事はこちら
* AWS Certified Solutions Architect - Professionalを取得した
* AWS Certified Solutions Architect - Associateを取得した
* CKAD受検記録【2023年版】
* GCP未経験の新卒2年目がAssociate Cloud EngineerとProfession</description>
    </item>
    <item>
      <title>Difyで会話しながらRAGナレッジを追加する</title>
      <link>https://sogo.dev/posts/2025/09/dify-add-knowledge-in-conversation</link>
      <guid>https://sogo.dev/posts/2025/09/dify-add-knowledge-in-conversation</guid>
      <pubDate>Mon, 15 Sep 2025 00:00:00 GMT</pubDate>
      <description> Dify で会話しながら、AI が資料を探してくれて RAG ナレッジベースへの資料の追加までやってくれたら便利かもと思ったのでやってみました。

## 環境

* Dify クラウド版（無料プラン）

## できたもの

```youtube
MqhuiDMH3dM
```

動画では、途中エージェント部分の処理は長いので4倍速にしています。

DSL ファイルはこちらです。

GoogleSearch.yml

動かすために必要なのは以下です。

* Gemini API キー（今回は Google </description>
    </item>
    <item>
      <title>自宅PCをローカルLLMサーバにする【Nvidia/K3s/Ollama/Gemma3】</title>
      <link>https://sogo.dev/posts/2025/08/local-llm-ollama-on-k3s</link>
      <guid>https://sogo.dev/posts/2025/08/local-llm-ollama-on-k3s</guid>
      <pubDate>Thu, 14 Aug 2025 00:00:00 GMT</pubDate>
      <description> 個人的Ubuntu24.04 Serverセットアップメモ の続きです。VRAM 8 GB しかない GPU で、マルチモーダル入力可能なローカル LLM サーバーを構築していきます。結論、これからローカル LLM のために GPU を用意するなら RTX 40xx 世代以降がおすすめ。

## 環境

* Ubuntu 24.04 Server
* Ryzen 7 3700X
* メモリ 32GB
* NVIDIA GeForce RTX 2070
  * VRAM 8 GB
* nvidia-driv</description>
    </item>
    <item>
      <title>個人的Ubuntu24.04 Serverセットアップメモ</title>
      <link>https://sogo.dev/posts/2025/08/setup-ubuntu-server</link>
      <guid>https://sogo.dev/posts/2025/08/setup-ubuntu-server</guid>
      <pubDate>Wed, 13 Aug 2025 00:00:00 GMT</pubDate>
      <description> 前回 個人的Ubuntu24.04 Desktopセットアップメモ を書きましたが、結局 Ubuntu Server に切り替えたのでその時のメモ。

## 環境

* Ubuntu 24.04 Server
* Ryzen 7 3700X
* メモリ 32GB
* NVIDIA GeForce RTX 2070

## なんで Server 版にしたのか

ローカル LLM とかを動かすサーバとして運用したくなった。Desktop 版のままでも良いかもとは思ったが、RDP 切断時に常時起動するはずの（ユ</description>
    </item>
    <item>
      <title>記事をベクトル化して類似度の高い記事をおすすめしてみる</title>
      <link>https://sogo.dev/posts/2025/07/recommend-similar-posts-using-embeddings</link>
      <guid>https://sogo.dev/posts/2025/07/recommend-similar-posts-using-embeddings</guid>
      <pubDate>Tue, 01 Jul 2025 00:00:00 GMT</pubDate>
      <description> RAG を調べるとまず最初に出てくる概念がテキストのベクトル化ですね。

テキストのベクトル化をブログの記事に対して実施して互いの類似度を計算すれば、精度高く関連記事を &quot;RECOMMENDED&quot; 欄に出せるはず！　っていうことで、やってみました。元々は同じタグを持っている記事を新しい順に表示しているだけでしたが、ちょっといい感じになりました。

このサイトは SSG で運用しているので、ビルドどこでやるかとか、ベクトルデータベースどこにするのかとかでちょっと悩みました。

## 環境

* Next.j</description>
    </item>
    <item>
      <title>個人的Ubuntu24.04 Desktopセットアップメモ</title>
      <link>https://sogo.dev/posts/2025/06/setup-ubuntu-desktop</link>
      <guid>https://sogo.dev/posts/2025/06/setup-ubuntu-desktop</guid>
      <pubDate>Mon, 30 Jun 2025 00:00:00 GMT</pubDate>
      <description> メインのデスクトップ PC を Windows から Linux に変えたので、セットアップのメモです。

## 環境

* Ubuntu 24.04 Desktop

## やったこと

### IME

2023年版 キーボードマッピングの個人的メモ

キーボードはこの時と同じで HHKB US 配列でスペースキーの左右に Mac の `英数` `かな` キーを割り当て。かれこれ2年以上このマッピングなのでかなり指が馴染んでいる。

ところが Ubuntu のデフォルトの IME (ibus-mozc</description>
    </item>
    <item>
      <title>VS Code Remote Tunnelsをシステムサービス化すると便利</title>
      <link>https://sogo.dev/posts/2025/05/code-tunnel-service-ubuntu-desktop</link>
      <guid>https://sogo.dev/posts/2025/05/code-tunnel-service-ubuntu-desktop</guid>
      <pubDate>Fri, 30 May 2025 00:00:00 GMT</pubDate>
      <description> Linux で VS Code の Remote tunnels を最初に使うときにサービスとしてインストールするかを聞かれたので、てっきり常時アクセスできるかと思いましたが、ログアウト時は使えない仕様だったのでシステムサービス化したら便利でした。

## 環境

* Ubuntu 24.04 Desktop
* VS Code 1.100.1

## やったこと

&gt; Remote tunnels を最初に使うときにサービスとしてインストールするかを聞かれた

ときに、裏で実行されたコマンドは `cod</description>
    </item>
    <item>
      <title>TipTapでEnterキーを押したときにマークをリセットする</title>
      <link>https://sogo.dev/posts/2025/05/tiptap-enter-keyboard-shortcuts</link>
      <guid>https://sogo.dev/posts/2025/05/tiptap-enter-keyboard-shortcuts</guid>
      <pubDate>Wed, 28 May 2025 00:00:00 GMT</pubDate>
      <description> TipTap のデフォルトの挙動では、Enter キーで改行（新しい段落に移動）したときにその時点のマーク（太字や斜体などのスタイル）が次の段落にも引き継がれるようになっています。

しかしながら、Notion をはじめ世の中の多くのエディタでは段落が切り替わったらマークはリセットされるという仕様になっていることが多く、そちらに慣れていると TipTap の仕様に違和感を感じたりします。今回は段落やリストアイテムが切り替わったら、スタイルをリセットするという仕様を実現する拡張機能を作ってみました。

ちょ</description>
    </item>
    <item>
      <title>Pythonのcontextvarsのコンテキストの分離は浅いコピーだと覚えておこう</title>
      <link>https://sogo.dev/posts/2025/05/python-contextvars-asyncio</link>
      <guid>https://sogo.dev/posts/2025/05/python-contextvars-asyncio</guid>
      <pubDate>Thu, 15 May 2025 00:00:00 GMT</pubDate>
      <description> Python の非同期プログラミングで複数のタスクを並列に走らせると、タスクごとに独立した状態を持たせたくなる場面がしばしばあります。イメージしやすい例を挙げれば、Web サーバーでリクエストごとに独立した状態を持たせたい場合がそうだと思います。  
そこで登場するのがコンテキストローカルな変数を提供する `contextvars` モジュールです。

本記事では `contextvars` の基本から、asyncio タスク内でシャローコピーが行われる際の落とし穴、そして安全に扱うためのパターンまでを解</description>
    </item>
    <item>
      <title>RAGASメトリクスチートシート</title>
      <link>https://sogo.dev/posts/2025/05/ragas-metrics-cheet-sheet</link>
      <guid>https://sogo.dev/posts/2025/05/ragas-metrics-cheet-sheet</guid>
      <pubDate>Fri, 09 May 2025 00:00:00 GMT</pubDate>
      <description> RAG システムの精度を評価するためのフレームワークとして2023年に RAGAS が提案されてから、RAGAS は進化を続けていて2025年5月時点では RAG において8つの指標が定義されています。[^1]

^1]: 論文に登場する3つの指標のうち Context Relevancy は既に廃止されています。Nvidia metrics の中にある [Context Relevance は計算方法が異なるため、別物です。

RAGAS を利用するメリットとして、一番大きな点は人間が作った正解のデータ</description>
    </item>
    <item>
      <title>Azure Container Appsを触って「もうこれでいいじゃん」って思った</title>
      <link>https://sogo.dev/posts/2025/05/azure-container-apps</link>
      <guid>https://sogo.dev/posts/2025/05/azure-container-apps</guid>
      <pubDate>Thu, 08 May 2025 00:00:00 GMT</pubDate>
      <description> Azure Container Apps を触ってみて、他サービスと比べて選びたくなるポイントがあったので書いてみたいと思います。

## 要約

* Azure Container Apps は Kubernetes ベースのマネージドなコンテナプラットフォーム
  * Kubernetes に慣れている人ならとても扱いやすいけど、面倒なクラスタ管理はしなくていい
* Azure Container Apps では KEDA (Kubernetes-based Event Driven Autoscal</description>
    </item>
    <item>
      <title>Next.jsでNextResponseをシングルトンインスタンスにしてはいけない</title>
      <link>https://sogo.dev/posts/2025/03/nextjs-dont-use-singleton-response</link>
      <guid>https://sogo.dev/posts/2025/03/nextjs-dont-use-singleton-response</guid>
      <pubDate>Mon, 10 Mar 2025 00:00:00 GMT</pubDate>
      <description> Next.js の App Router で API を作る時にはレスポンスを `NextResponse.json()` などで返すと思いますが、これを共通化したりする時にシングルトンにしてはいけない、という話です。

## 何がダメなのか

同時にリクエストすると、レスポンスのボディを取得できなくなります。

## 検証環境

* next 15.2.1
* react 19.0.0
* next-test-api-route-handler 4.0.15

## コード

```
app/api
├</description>
    </item>
    <item>
      <title>Azure OpenAI Assistants APIとAI Agent Serviceを比較</title>
      <link>https://sogo.dev/posts/2025/03/assistants-api-vs-azure-ai-agent-service</link>
      <guid>https://sogo.dev/posts/2025/03/assistants-api-vs-azure-ai-agent-service</guid>
      <pubDate>Sun, 09 Mar 2025 00:00:00 GMT</pubDate>
      <description> Azure OpenAI Assistants API と Azure AI Agent Service を比較してみました。2025年3月時点での情報であり、両サービスともプレビュー版のため仕様が変更になることがあります。

## 機能の比較

### 共通していること

* ステートフルな API を提供するので API 利用者はメッセージ履歴の保存をする必要がない
* Code interpreter が使える
  * AI がコードを生成して API 側のサンドボックス環境で実行してくれる機能
*</description>
    </item>
    <item>
      <title>ブラウザだけで完結する暗号化ファイルマネージャを作ってみた</title>
      <link>https://sogo.dev/posts/2025/02/local-file-locker</link>
      <guid>https://sogo.dev/posts/2025/02/local-file-locker</guid>
      <pubDate>Mon, 03 Feb 2025 00:00:00 GMT</pubDate>
      <description> ちょっとした思いつきで、ブラウザだけでファイルを暗号化して保管できるアプリを作れるのではないかと思い作ってみました。使い道はよくわからないですが、何かの役に立つこともあるかもしれません。

アプリ: https://sogo.dev/local-file-locker/  
ソースコード: https://github.com/SogoKato/local-file-locker

ファイルを選んで encrypt ボタンを押すと……

!local_file_locker_1

ファイルが暗号化されて保</description>
    </item>
    <item>
      <title>配列のJSONの要素をランダムで取り出すおみくじシェルスクリプト</title>
      <link>https://sogo.dev/posts/2025/01/lottery-with-bash-jq</link>
      <guid>https://sogo.dev/posts/2025/01/lottery-with-bash-jq</guid>
      <pubDate>Wed, 22 Jan 2025 00:00:00 GMT</pubDate>
      <description> 表題の通り、配列の JSON から指定した数だけの要素をランダムで取り出すシェルスクリプトを jq のラッパーとして作ってみました。プルリクエストやマージリクエストのレビュワーをランダムで指名するときに、API で権限のあるメンバーリストを取得してその JSON から抽選できたらいいなーと妄想してます。

## 前提条件

* Bash
* jq

## 成果物

```bash:jrand.sh
#!/bin/bash

input=$(jq . ${@:2})
length=$(echo $input</description>
    </item>
    <item>
      <title>Pythonで長すぎるログを分割して出力するハンドラ</title>
      <link>https://sogo.dev/posts/2024/12/python-chunk-log</link>
      <guid>https://sogo.dev/posts/2024/12/python-chunk-log</guid>
      <pubDate>Sat, 21 Dec 2024 00:00:00 GMT</pubDate>
      <description> システムの仕様上、稀によくめちゃめちゃ長いログが発生することがありますね（？）。そういう時、そのまま出してしまうとログを収集したり集約したりするどこかの上限に引っかかってしまうことが考えられます。もしくは、閾値を超えたときに分割される場合もありますが、JSON のような構造化ログを送るようなケースでは分割されるとデータが破損してしまいます。そのような背景から、長いログの場合にはアプリ側で分割して構造化ログを吐き出せるようにした方がいいと考えて、作ってみました。

## 成果物

```python:pys</description>
    </item>
    <item>
      <title>scikit-learnで作ったモデルをAPIで提供するならONNXがよさそう</title>
      <link>https://sogo.dev/posts/2024/12/onnx-api</link>
      <guid>https://sogo.dev/posts/2024/12/onnx-api</guid>
      <pubDate>Thu, 12 Dec 2024 00:00:00 GMT</pubDate>
      <description> この記事は Fujitsu Advent Calendar 2024 の12日目の記事です。

昨日は @Syuparn さんの バックエンドの動作確認に使用できるワンライナーAPIサーバーの紹介 でした。私も動かしてみましたが、本当に動いていてすごいと思いました。

---

優秀な弊弟が scikit-learn で、いぬの画像分類をするモデルを作ったのでそれを API として提供できるようにしてみました。下記はその奮闘記です。

## 環境

* Python 3.12.2
* numpy 2.1.</description>
    </item>
    <item>
      <title>WhisperのAPIを作る（ファイル保存なしで文字起こしする方法）</title>
      <link>https://sogo.dev/posts/2024/10/building-whisper-api</link>
      <guid>https://sogo.dev/posts/2024/10/building-whisper-api</guid>
      <pubDate>Thu, 24 Oct 2024 00:00:00 GMT</pubDate>
      <description> 前回 ファイル保存なしでWhisper APIにLINE Messaging APIから音声を渡す という記事を書きましたが、OpenAI の API を使うと決める前はラズパイ上で Whisper を動かすことを企んでいました。今回はその記事になります。今回もファイル保存せずにやります。

作った API を Raspberry Pi 5 で動かしてみたのですが、数秒の medium モデルで音声を文字起こしするのに1〜2分はかかるので使い物にならなくてやめました。

## 環境

* Python 3</description>
    </item>
    <item>
      <title>ファイル保存なしでWhisper APIにLINE Messaging APIから音声を渡す</title>
      <link>https://sogo.dev/posts/2024/10/whisper-from-line-messaging-api</link>
      <guid>https://sogo.dev/posts/2024/10/whisper-from-line-messaging-api</guid>
      <pubDate>Thu, 17 Oct 2024 00:00:00 GMT</pubDate>
      <description> LINE Messaging API でユーザーから送られてきた音声を OpenAI の Whisper API に渡す方法はググるとたくさん出てきますが、私が見た範囲ではどれもサーバー内に一時ファイルを保存しているものだったので、ファイル保存なしでメモリ上でなんとかする方法を探してみました。

## 想定読者

* LINE Messaging API の使い方を知っている人
  * LINE ボットの作り方の解説は省きます
* 一時ファイルの保存はしたくないというこだわりがある人

## 環境

* </description>
    </item>
    <item>
      <title>Azure PipelinesのYAMLをGitLab/GitHubと比較しつつ理解してみる</title>
      <link>https://sogo.dev/posts/2024/10/azure-pipelines</link>
      <guid>https://sogo.dev/posts/2024/10/azure-pipelines</guid>
      <pubDate>Fri, 11 Oct 2024 00:00:00 GMT</pubDate>
      <description> Azure DevOps の Azure Pipelines のパイプライン YAML に入門してみます。

## 想定読者

* GitHub Actions や GitLab CI/CD には馴染みがあるけど Azure Pipelines はよく分からん人
* Azure Pipelines の YAML の書き方の雰囲気をつかみたい人

## 公式ドキュメント

まずはここを見ましょう。

Azure Pipelines の YAML スキーマ リファレンス

## 簡単な例

```yaml
t</description>
    </item>
    <item>
      <title>AnsibleでPostfixをセットアップする</title>
      <link>https://sogo.dev/posts/2024/09/ansible-postfix</link>
      <guid>https://sogo.dev/posts/2024/09/ansible-postfix</guid>
      <pubDate>Mon, 30 Sep 2024 00:00:00 GMT</pubDate>
      <description> Ansible で postfix をインストールして、各種設定ファイルを流し込む role の例です。

`tasks/main.yml`

```yaml
- name: Update apt package list
  ansible.builtin.apt:
    update_cache: yes
  when: ansible_distribution == &#39;Debian&#39; or ansible_distribution == &#39;Ubuntu&#39;

- name: Ensure postf</description>
    </item>
    <item>
      <title>Firefoxでコピペのショートカットキーが使えない時の対処法</title>
      <link>https://sogo.dev/posts/2024/09/code-server-firefox-copy-paste</link>
      <guid>https://sogo.dev/posts/2024/09/code-server-firefox-copy-paste</guid>
      <pubDate>Fri, 06 Sep 2024 00:00:00 GMT</pubDate>
      <description> 小ネタです。Firefox で Code Server を使っている時にターミナルで Ctrl + V が効かなくて困ったのでメモ（Chromium 系のブラウザでは問題なし）。

アドレスバーに `about:config` と入力して `dom.events.testing.asyncClipboard` を `true` にすれば OK。

調べてみたら https://github.com/coder/code-server/issues/1106 には他の WA も載ってた。
</description>
    </item>
    <item>
      <title>2つのディレクトリ内のファイルの差分を取る</title>
      <link>https://sogo.dev/posts/2024/09/diff-files-in-directories</link>
      <guid>https://sogo.dev/posts/2024/09/diff-files-in-directories</guid>
      <pubDate>Wed, 04 Sep 2024 00:00:00 GMT</pubDate>
      <description> 小ネタです。2つのディレクトリ内のファイルの差分を取る方法。

個人的最終形は以下。

```
diff -r --speed-large-files dir1 dir2
```

中身が異なっているファイルの差分だけを表示してくれます。

```
$ tree dir1 dir2
dir1
|-- fuga
`-- hoge
    `-- foo
dir2
|-- fuga # dir1と同じ
`-- hoge
    `-- foo

2 directories, 4 files
$ diff -r</description>
    </item>
    <item>
      <title>Unattended upgradesを実行するタイミングの設定方法</title>
      <link>https://sogo.dev/posts/2024/08/scheduling-unattended-upgrades</link>
      <guid>https://sogo.dev/posts/2024/08/scheduling-unattended-upgrades</guid>
      <pubDate>Fri, 23 Aug 2024 00:00:00 GMT</pubDate>
      <description> Unattended upgrades をいつ実行するかを設定する方法のメモです。

関連記事
* Unattended upgradesのドキュメントを読む
* Unattended upgrades + needrestartで安全な自動アップグレードを考える

環境: Ubuntu 22.04

## Unattended upgrades 呼び出しのスケジューリング

Systemd timer がデフォルトで設定されているのでこれを変えれば良いです。

* apt-daily.timer: パッ</description>
    </item>
    <item>
      <title>PWAの見栄えをそこそこ良くする設定まとめ【令和最新版】</title>
      <link>https://sogo.dev/posts/2024/07/pwa-appearance</link>
      <guid>https://sogo.dev/posts/2024/07/pwa-appearance</guid>
      <pubDate>Sun, 28 Jul 2024 00:00:00 GMT</pubDate>
      <description> PWA (Progressive Web App) が普及し始めてからしばらく経ちました。Android が積極的に対応を進めてきましたが、最近は iOS でもそれなりに対応が進みました。久しぶりに PWA と向き合い、今時のスマホ向けに見栄えを良くするための設定をまとめました。

## やること

* アイコン
* ステータスバーの色の設定
* iPhone の画面への対応

通知や Service Worker 等の機能面はこの記事のスコープ外とします。

## デモ

&lt;a href=&quot;/asset</description>
    </item>
    <item>
      <title>PEK 2024に当日スタッフ参加しました</title>
      <link>https://sogo.dev/posts/2024/07/platform-engineering-kaigi-2024</link>
      <guid>https://sogo.dev/posts/2024/07/platform-engineering-kaigi-2024</guid>
      <pubDate>Sat, 13 Jul 2024 00:00:00 GMT</pubDate>
      <description> Platform Engineering Kaigi 2024 に当日スタッフとして参加してきました。セッションを通じた自分なりの感想と、初めてカンファレンスの運営に携わったことについての感想を残しておきたいと思います。

## イベント概要

https://www.cnia.io/pek2024

以下の説明がとても端的に要点を得ていると思うので、引用します。

&gt; Platform Engineering Kaigiは、現在注目を浴びているPlatform Engineeringをテーマにしたテクノ</description>
    </item>
    <item>
      <title>aptのsnapshotを試す【24.04/22.04】</title>
      <link>https://sogo.dev/posts/2024/07/apt-snapshot</link>
      <guid>https://sogo.dev/posts/2024/07/apt-snapshot</guid>
      <pubDate>Wed, 03 Jul 2024 00:00:00 GMT</pubDate>
      <description> 指定した時点でのリポジトリの情報を返してくれる snapshot.ubuntu.com というものがあることを知ったので試してみました。

## なにが嬉しいの？

apt でパッケージをインストールしたり更新したりする際、例えば検証環境と本番環境とで期間が空いてしまうとその間に新しいバージョンがリリースされて違うバージョンが入ってしまうことがあります。同じように作成したサーバーなのに入っているパッケージのバージョンが作成時点によって違うというのは嬉しくないため、検証時点でリリースされているバージョンに固</description>
    </item>
    <item>
      <title>Goのslogで複数の出力先にロギングする（標準出力+Slack）</title>
      <link>https://sogo.dev/posts/2024/07/go-slog-multi-slack</link>
      <guid>https://sogo.dev/posts/2024/07/go-slog-multi-slack</guid>
      <pubDate>Mon, 01 Jul 2024 00:00:00 GMT</pubDate>
      <description> Go 1.21 から使えるようになった標準の構造化ログライブラリ slog を使ってロギングをうまくやろうと画策してみました。

## やること

* 標準出力と Slack にログを送る
  * 標準出力には全部のログ
  * Slack には指定したログのみを送る

!uml

今回は送信先として Slack を使用していますが、samber 氏が Fluentd や Kafka 等様々なライブラリを公開してくれているので、用途に合わせて見てみると良いと思います。

## 環境

* Go 1.22.</description>
    </item>
    <item>
      <title>非EKSなK8sクラスターでmountpoint-s3-csi-driverを試す</title>
      <link>https://sogo.dev/posts/2024/06/aws-mountpoint-s3-csi-driver</link>
      <guid>https://sogo.dev/posts/2024/06/aws-mountpoint-s3-csi-driver</guid>
      <pubDate>Thu, 20 Jun 2024 00:00:00 GMT</pubDate>
      <description> AWS が公開している mountpoint-s3-csi-driver を使うと Kubernetes 上のコンテナから S3 オブジェクトをファイルシステム的に扱えるようになるみたいなので、（EKS クラスターは持っていないので自宅のクラスタで）試してみました。

画像などのファイルをキャッシュとして置いているアプリケーションをコードの書き換えなしで S3 に置くようにしたり、大きめの（コンテナイメージには含めたくない）ファイルを S3 に置いておいて読み込むようにしたりとか、便利に使えるシチュエーシ</description>
    </item>
    <item>
      <title>Fugaku-LLMを自宅PCで動かしてみた</title>
      <link>https://sogo.dev/posts/2024/05/run-fugaku-llm-locally</link>
      <guid>https://sogo.dev/posts/2024/05/run-fugaku-llm-locally</guid>
      <pubDate>Sat, 18 May 2024 00:00:00 GMT</pubDate>
      <description> スパコン「富岳」で学習したという「Fugaku-LLM」を自宅 PC で動かしてみました。既に多くの方が Colab とか Ollama とかで試しているみたいですので n 番煎じですが、自分でも触ってみたかったので。

https://github.com/SogoKato/run-fugaku-llm

## 環境

* Windows 11
* WSL 2 + Docker Desktop
* GeForce RTX 2070 (8GB RAM)
* AMD Ryzen 7 3700X
* 32GB</description>
    </item>
    <item>
      <title>.docker/config.jsonのauthの作り方</title>
      <link>https://sogo.dev/posts/2024/05/docker-config-json</link>
      <guid>https://sogo.dev/posts/2024/05/docker-config-json</guid>
      <pubDate>Fri, 17 May 2024 00:00:00 GMT</pubDate>
      <description> 基本的なところで無駄にハマってしまったので自分への戒め。

`~/.docker/config.json` に入っている Docker の認証情報は以下のような構造をしています（Docker Desktop だと OS の機密情報ストアを使っていたりするので `{}` だったりします）。

```json
{
  &quot;auths&quot;: {
    &quot;https://index.docker.io/v1/&quot;: {
      &quot;auth&quot;: &quot;c3R...zE2&quot;
    }
  }
}
```

これを手で作</description>
    </item>
    <item>
      <title>Unattended upgrades + needrestartで安全な自動アップグレードを考える</title>
      <link>https://sogo.dev/posts/2024/05/unattended-upgrades-needrestart-ubuntu</link>
      <guid>https://sogo.dev/posts/2024/05/unattended-upgrades-needrestart-ubuntu</guid>
      <pubDate>Thu, 16 May 2024 00:00:00 GMT</pubDate>
      <description> 前回は Unattended upgrades のドキュメントを読みました。今回は実際のサーバーで自動アップグレードを適用するように設定していくために気になるところを解消していきたいと思います。

以下の状況を想定します。

* セキュリティパッチの適用が目的
* Docker が動作するサーバーである
  * なので……
    * Docker のバージョンは固定したい
    * Docker コンテナは止めたくない
* 何かあった時のためにログは残したい

## 考えること

* 自動更新の対象を</description>
    </item>
    <item>
      <title>Unattended upgradesのドキュメントを読む</title>
      <link>https://sogo.dev/posts/2024/05/unattended-upgrades</link>
      <guid>https://sogo.dev/posts/2024/05/unattended-upgrades</guid>
      <pubDate>Tue, 14 May 2024 00:00:00 GMT</pubDate>
      <description> `gzip -d /usr/share/doc/unattended-upgrades/README.md.gz` して取り出した Unattended upgrades のドキュメントを読んでみます。訳文の作成には翻訳ツール（Google 翻訳）を使用しつつ、一部訂正しています。

環境: Ubuntu 22.04 LTS

---

Unattended upgrades
===================

このスクリプトは、パッケージを無人で自動的にアップグレードします。

コマンドラインから</description>
    </item>
    <item>
      <title>Kubernetes上でRedisをSentinelで冗長化しつつエンドポイントは1つにしたい</title>
      <link>https://sogo.dev/posts/2024/05/redis-sentinel-haproxy-on-k8s</link>
      <guid>https://sogo.dev/posts/2024/05/redis-sentinel-haproxy-on-k8s</guid>
      <pubDate>Sat, 11 May 2024 00:00:00 GMT</pubDate>
      <description> おうち Kubernetes で動かすアプリの一時的なデータの保存場所として Redis を使用しています。redis イメージのコンテナを立てているだけで何の永続化もしていないのでコンテナが落ちればもちろんデータは消えます。本当に永続化したい情報は DynamoDB に格納しているとはいえ、もうちょい Redis の可用性（というか永続性？）も上げたい、でもクラウドのマネージドサービスを使うほどでもない……という微妙な要件を満たすために Redis Sentinel に挑戦してみます。

## やること</description>
    </item>
    <item>
      <title>Android機からの操作でiPhoneのインターネット共有をオンにするショートカット</title>
      <link>https://sogo.dev/posts/2024/04/request-iphone-internet-sharing-from-android</link>
      <guid>https://sogo.dev/posts/2024/04/request-iphone-internet-sharing-from-android</guid>
      <pubDate>Sun, 21 Apr 2024 00:00:00 GMT</pubDate>
      <description> Apple 製の端末同士であれば、同じ Apple ID の端末や家族の端末側の操作で親機となる iPhone のテザリングを開始させることができますが、当然ながら Android 機から iPhone のテザリングを開始させる手段は提供されていません。

最近訳あって iPhone（SIM あり）と Android（SIM なし）の2台持ちをしていて、iPhone を触らなくてもテザリングを始められたらいいのにと思い、これを実現するショートカットを作ったのでメモです。

## 仕組み

2台のスマートフ</description>
    </item>
    <item>
      <title>クロスブラウザ拡張機能を頑張らずに開発する</title>
      <link>https://sogo.dev/posts/2024/04/cross-browser-extension</link>
      <guid>https://sogo.dev/posts/2024/04/cross-browser-extension</guid>
      <pubDate>Tue, 16 Apr 2024 00:00:00 GMT</pubDate>
      <description> ブラウザ拡張機能開発のために用意されている API は基本的にブラウザ間で共通化されていて、同じコードベースでクロスブラウザ対応させることが可能です。

&gt; Firefox の拡張機能は WebExtensions API を使ってビルドされ、この API は拡張機能をクロスブラウザーで開発するシステムです。このシステムの大半は Google Chrome と Opera と W3C Draft Community Group でサポートされている extension API と互換性があります。

ht</description>
    </item>
    <item>
      <title>Tanuki Utilitiesの紹介（旧 gitlab-project-favicon）</title>
      <link>https://sogo.dev/posts/2024/04/introducing-tanuki-utilities</link>
      <guid>https://sogo.dev/posts/2024/04/introducing-tanuki-utilities</guid>
      <pubDate>Fri, 05 Apr 2024 00:00:00 GMT</pubDate>
      <description> 以前 Qiita で書いた GitLabのタブを開きすぎて見分けづらいのでfaviconを変える拡張機能を作った の記事のブラウザ拡張機能を **Tanuki Utilities** と改称してリニューアルしたので改めて紹介します。名前の通り、GitLab ユーザに便利な機能を提供するための拡張機能です。

* ソースコード  
  https://github.com/SogoKato/gitlab-project-favicon/
* Firefox  
  https://addons.mozill</description>
    </item>
    <item>
      <title>Nuxt 3 + QuasarでSassを使うための設定【2024】</title>
      <link>https://sogo.dev/posts/2024/04/quasar-nuxt-sass</link>
      <guid>https://sogo.dev/posts/2024/04/quasar-nuxt-sass</guid>
      <pubDate>Mon, 01 Apr 2024 00:00:00 GMT</pubDate>
      <description> Vue.js のためのフレームワークである Nuxt 3 と UI フレームワークである Quasar を組み合わせて使うときに Sass を設定する方法です。Nuxt 3 + Quasarで、Sass Variablesが使えない問題を解消したの記事を初めに拝見したのですが、2024年4月時点で `@quasar/vite-plugin` のインストールは不要だったので書き留めておきます。

## やること

### 環境

* node 20.12.0
* pnpm 8.15.5
* vue 3.4.</description>
    </item>
    <item>
      <title>JuiceでGPUをコンピュータ間で共有（GPU-over-IP）</title>
      <link>https://sogo.dev/posts/2024/03/juice-gpu-over-ip</link>
      <guid>https://sogo.dev/posts/2024/03/juice-gpu-over-ip</guid>
      <pubDate>Thu, 28 Mar 2024 00:00:00 GMT</pubDate>
      <description> Windows PC に GPU を取り付けておきつつ、必要に応じてラズパイやクラウドのサーバーから自宅の GPU リソースを活用出来たら嬉しいなと思い調べてみたら、Juice Labs という組織が GPU-over-IP の Juice というソフトウェアを開発していたので試してみました。

ただし、2024年3月現在、GitHub で公開されているコミュニティバージョンは開発を停止しているようです。

&gt; We&#39;ve been hard at work building the core Juice</description>
    </item>
    <item>
      <title>やむを得ず最近のOpenSSLでレガシーなプロトコルを使いたい時の設定</title>
      <link>https://sogo.dev/posts/2024/03/openssl-conf-legacy</link>
      <guid>https://sogo.dev/posts/2024/03/openssl-conf-legacy</guid>
      <pubDate>Wed, 27 Mar 2024 00:00:00 GMT</pubDate>
      <description> レガシーなプロトコルやアルゴリズムにしか対応していないサーバーに接続する際、最近の OpenSSL がインストールされた環境からはデフォルト設定のままでは接続できないことがあります。サーバー側がすぐに改修できないなどのやむを得ない状況で回避する方法を紹介します。

## やること

OpenSSL は `OPENSSL_CONF` 環境変数に設定ファイルへのパスを入れることで作成した設定ファイルを読み込んでくれます。

今回は任意のディレクトリに次のような設定ファイルを作ります。

```
openssl</description>
    </item>
    <item>
      <title>入門監視を読んだ</title>
      <link>https://sogo.dev/posts/2024/03/practical-monitoring</link>
      <guid>https://sogo.dev/posts/2024/03/practical-monitoring</guid>
      <pubDate>Tue, 19 Mar 2024 00:00:00 GMT</pubDate>
      <description> 『入門 監視』（Mike Julian 著、松浦隼人訳）を読んだのでまとめ。

エンジニアになって3年、開発も運用も、そして障害やビジネスの変化も経験したので身に沁みる点もあり、明日からのサービス改善に活かしていきたいと思いました。素晴らしい本を執筆・翻訳くださった方々へ、その努力に敬意を表するとともに感謝申し上げます。

## 第Ⅰ部 監視の原則

### 1章 監視のアンチパターン

&gt; 1.1 アンチパターン1：ツール依存  
&gt; 1.1.1 監視とは複雑な問題をひとくくりにしたもの  
&gt; 1.1</description>
    </item>
    <item>
      <title>Raspberry Pi 5を M.2 SSDブート</title>
      <link>https://sogo.dev/posts/2024/03/m2-ssd-boot-raspberrypi-5</link>
      <guid>https://sogo.dev/posts/2024/03/m2-ssd-boot-raspberrypi-5</guid>
      <pubDate>Sun, 03 Mar 2024 00:00:00 GMT</pubDate>
      <description> Raspberry Pi 5 の目玉機能の一つは M.2 SSD への対応とのことで、せっかくなので試してみました。

!NVMe Base

## 使ったもの

* Raspberry Pi 5 8GB
* NVMe Base for Raspberry Pi 5 – NVMe Base + 250GB SSD
  * 2つで65ポンド + 送料7.5ポンド（13,985円 = 1つあたり約7,000円）
  * https://shop.pimoroni.com/products/nvme-base?</description>
    </item>
    <item>
      <title>Next.js SSGサイトにGoogle AdSenseを入れてみる</title>
      <link>https://sogo.dev/posts/2024/03/google-adsense-nextjs</link>
      <guid>https://sogo.dev/posts/2024/03/google-adsense-nextjs</guid>
      <pubDate>Sat, 02 Mar 2024 00:00:00 GMT</pubDate>
      <description> ブログを始めてから1年そこそこが経過し、50記事を突破していました。かなりのんびり更新なので一般的に目標と言われる100記事には全然届いてないですが、ふと思い立って Google AdSense に登録してみたら半日くらいであっさり審査に通過したので Next.js 製 SSG サイトに広告を導入しました。なるべくコンテンツを邪魔しないように配置しますのでどうかご容赦ください。🙇

## そもそも GitHub Pages に広告入れていいんだっけ？

GitHub の利用規約 を確認してみると次のよう</description>
    </item>
    <item>
      <title>Next.js 13以降では公式ライブラリでGoogle Tag Managerを導入できる</title>
      <link>https://sogo.dev/posts/2024/03/google-tag-manager-nextjs</link>
      <guid>https://sogo.dev/posts/2024/03/google-tag-manager-nextjs</guid>
      <pubDate>Fri, 01 Mar 2024 00:00:00 GMT</pubDate>
      <description> ブログ開設当初に Next.jsとTailwind CSSでブログを作るときに考えたこと の記事で紹介したように、このブログは Next.js で作られています。作ったころの Next.js のバージョンは12だったのですが、2024年2月時点で14まで進んでいます。改めて Google Tag Manager と向き合ってみたら公式ライブラリで簡単に導入できるようになっていたので共有です。

## 公式ライブラリ @next/third-parties

@next/third-parties というラ</description>
    </item>
    <item>
      <title>Raspberry Pi 5でStable Diffusionを動かす（4Bと比較）</title>
      <link>https://sogo.dev/posts/2024/02/stable-diffusion-raspberrypi-5</link>
      <guid>https://sogo.dev/posts/2024/02/stable-diffusion-raspberrypi-5</guid>
      <pubDate>Mon, 26 Feb 2024 00:00:00 GMT</pubDate>
      <description> Raspberry Pi 4B より2倍速い CPU を積んでいるという Raspberry Pi 5 で、Stable Diffusion で画像生成をさせるとどれくらい差があるのか試してみたら噂通りの実力が発揮されました。画像生成ですが、GPU ではなく CPU でゴリ押しするだけなので純粋な CPU 対決です。

!a black tree with golden leaves painted by Monet, autumn

## 使ったもの

* Raspberry Pi 5 8GB
* Ra</description>
    </item>
    <item>
      <title>FastAPIとPydantic V2で任意のcontextを渡してみる</title>
      <link>https://sogo.dev/posts/2024/02/fastapi-pydantic-v2</link>
      <guid>https://sogo.dev/posts/2024/02/fastapi-pydantic-v2</guid>
      <pubDate>Tue, 20 Feb 2024 00:00:00 GMT</pubDate>
      <description> Pydantic V2 が2023年6月にリリースされました。結構いろいろ変わっていて移行作業はそこそこ大変な気がしますが対応される方は Migration Guide を読んで頑張ってください。

私はというと V1 のころに Pydantic の `@validator` デコレータをカスタムしまくったので、V2 でそれがほぼ使えなくなってしまいました。そもそもなんでカスタムしたのかというと、バリデータのメソッドに DB にアクセスするためのセッションオブジェクトとかを渡したかったからでした。V2 で</description>
    </item>
    <item>
      <title>Kanikoでcache=trueにするなら1コンテナ1ビルドで</title>
      <link>https://sogo.dev/posts/2024/02/kaniko-cache-cleanup</link>
      <guid>https://sogo.dev/posts/2024/02/kaniko-cache-cleanup</guid>
      <pubDate>Thu, 15 Feb 2024 00:00:00 GMT</pubDate>
      <description> 前に Kanikoでコンテナイメージつくるならcache=trueは有効にしておこう という記事を書きましたが、とりあえず有効にしといたら罠があったので書いておきます。

## Kaniko のコンテナ1つで複数のコンテナをビルドしないほうがいい

おそらく、Kaniko が CI 前提のツールなので、複数回のビルドのために使われることを想定していないのではないでしょうか。

気を付けるべき条件は以下です。

* `--cache-true` を指定している
* コンテナ1つで複数のコンテナをビルドしてい</description>
    </item>
    <item>
      <title>SquidをDockerで動かす</title>
      <link>https://sogo.dev/posts/2024/02/squid-in-docker</link>
      <guid>https://sogo.dev/posts/2024/02/squid-in-docker</guid>
      <pubDate>Tue, 06 Feb 2024 00:00:00 GMT</pubDate>
      <description> Squid を Docker コンテナで実行したかったのですが、2024年2月現在で最新の v6 で起動するものがなさそうだったので作りました。apt リポジトリにはビルド済みの squid がないのですが、alpine にはあったので alpine を使うと楽です。また、シャットダウン時の挙動に要注意。

## できたもの

* SogoKato/docker-squid
* noroch/squid - Docker Image | Docker Hub

sameersbn/docker-squid</description>
    </item>
    <item>
      <title>LangChain agentで関数呼び出し</title>
      <link>https://sogo.dev/posts/2024/01/langchain-agent-tools-function-calling</link>
      <guid>https://sogo.dev/posts/2024/01/langchain-agent-tools-function-calling</guid>
      <pubDate>Wed, 24 Jan 2024 00:00:00 GMT</pubDate>
      <description> 個人で使っている LINE bot を賢くしたくて、ChatGPT を組み込んでみました。ChatGPT を自分のアプリに組み込むのは初めてなのですが、LangChain の機能の豊富さに驚かされました。

## 対象読者

* 人間のあいまいな指示を機械が実行できるアクションに落とし込ませたい人

## 検証環境

* Python 3.11.6
* LangChain 0.1.1
* langchain-openai 0.0.2.post1

## できたもの

```python
from data</description>
    </item>
    <item>
      <title>Dockerが16KiB以上のログを分割する問題にFluentd側で対処する</title>
      <link>https://sogo.dev/posts/2024/01/fluentd-docker-split-logs</link>
      <guid>https://sogo.dev/posts/2024/01/fluentd-docker-split-logs</guid>
      <pubDate>Mon, 15 Jan 2024 00:00:00 GMT</pubDate>
      <description> Docker のログドライバーは 16KiB (16384 バイト) 以上のメッセージの場合、ログを分割してしまいます。

fluent-plugins-nursery/fluent-plugin-concat を使うことで分割されてしまったログを連結して1つにまとめられるようなので検証してみました。

## 試してみる

用意したファイルは以下です。16383バイトのログと16384バイトのログを20秒間隔で出力するアプリを用意して docker の fluentd ログドライバーで fluentd コ</description>
    </item>
    <item>
      <title>git-credential-cacheをコンテナから使いたかった</title>
      <link>https://sogo.dev/posts/2024/01/git-credential-cache-in-container</link>
      <guid>https://sogo.dev/posts/2024/01/git-credential-cache-in-container</guid>
      <pubDate>Thu, 11 Jan 2024 00:00:00 GMT</pubDate>
      <description> git でリモートサーバーに HTTPS で接続する時、ユーザー名やパスワードを入力する必要がありますが、push や pull のたびに入力するのは面倒ですよね。git には標準で認証情報を管理してくれる仕組みがあり、毎回の入力を省略することができます。

Windows や Mac の場合は OS の認証情報管理の仕組みと連携することができますが、Linux では `store` モードか `cache` モードしかありません。`store` モードでは平文でパスワードが書き込まれてしまい安全ではない</description>
    </item>
    <item>
      <title>Cedarで（超最小限な）RBAC認可を実装してみる</title>
      <link>https://sogo.dev/posts/2023/12/cedar-rbac</link>
      <guid>https://sogo.dev/posts/2023/12/cedar-rbac</guid>
      <pubDate>Thu, 07 Dec 2023 00:00:00 GMT</pubDate>
      <description> この記事はニフクラ等を提供している、富士通クラウドテクノロジーズ Advent Calendar 2023の7日目の記事です。

昨日は @George22e さんの ヴァイオリンの音色のよさはスペクトラムアナライザーで分かるか試してみた でした。  
自らの演奏とプロの演奏を可視化して分析する姿勢にエンジニアリングの精神と通じるものを感じました。私も仕事でも趣味でも本気でエンジニアリングしていきたいです。

今日は AWS が公開しているアクセス制御用のオープンソース言語 Cedar とその認可エンジン</description>
    </item>
    <item>
      <title>RyeをDockerで使う時のポイント</title>
      <link>https://sogo.dev/posts/2023/11/rye-with-docker</link>
      <guid>https://sogo.dev/posts/2023/11/rye-with-docker</guid>
      <pubDate>Sat, 18 Nov 2023 00:00:00 GMT</pubDate>
      <description> Rye は Rust 製の Python パッケージマネージャです。まだ「実験的」なステータスなので全ての方にお勧めできる段階ではないかもしれないですが、十分に実用的で安定していると思います。Pipenv や Poetry との違いは、パッケージ管理だけでなく、Python バージョンの管理までやってくれるところが特徴で、Pipenv/Poetry + pyenv が1つのツールにまとまっているイメージです。

さて、今回は Rye を Docker コンテナで使う時のポイントをまとめてみました。Rye </description>
    </item>
    <item>
      <title>AWS SigV4リクエストの「検証する側」を実装する</title>
      <link>https://sogo.dev/posts/2023/11/implementing-aws-sigv4-server</link>
      <guid>https://sogo.dev/posts/2023/11/implementing-aws-sigv4-server</guid>
      <pubDate>Thu, 09 Nov 2023 00:00:00 GMT</pubDate>
      <description> 世の中には AWS Signature V4 署名の実装方法についての記事はたくさんありますが、その署名を付与して検証する側（サーバー）の実装方法について見つけるのは難しいです。AWS API Gateway を使えば簡単に自分で書かなくても良いのでそれはそうなのですが、AWS SigV4 は curl のオプションとしても使える くらいの地位を獲得しているので、AWS SigV4 を利用した認証機能の実装方法についての記事があってもいいでしょう。

ということで、今回は Python と FastAPI</description>
    </item>
    <item>
      <title>Bitwardenブラウザ拡張がPasskeyに対応したので試してみた</title>
      <link>https://sogo.dev/posts/2023/11/bitwarden-passkey</link>
      <guid>https://sogo.dev/posts/2023/11/bitwarden-passkey</guid>
      <pubDate>Wed, 08 Nov 2023 00:00:00 GMT</pubDate>
      <description> パスワードマネージャによる Passkey のサポートが進んでいます。

私は Bitwarden を使ってパスワードなどの機密情報を保存しているのですが、ついに Bitwarden による Passkey 対応が始まりました。公式ブログでも11月7日に投稿されています。

## 環境

* Bitwarden Firefox アドオン 2023.10.1
* Firefox 118.0.2

## 試してみる

既にいくつものサービスが Passkey 対応していますが、今回は Google アカウント</description>
    </item>
    <item>
      <title>GitLabのRemote developmentを試してみる</title>
      <link>https://sogo.dev/posts/2023/10/gitlab-remote-development</link>
      <guid>https://sogo.dev/posts/2023/10/gitlab-remote-development</guid>
      <pubDate>Tue, 24 Oct 2023 00:00:00 GMT</pubDate>
      <description> VS Code Serverでリモートホストのコンテナ上開発環境に直接アクセスするの記事にて GitHub でやっている「ぼくのかんがえたさいきょうのかいはつかんきょう」第2弾です。今回は GitLab を使ってリモート開発環境を構築してみたいと思います。  
なお、GitLab には Premium 以上のライセンスで使える Workspaces という機能が 16.0 で登場しましたが、今回はそれではなく、自分でコンテナを立ててそこにアクセスする形になります。こちらは無料ライセンスで使えます。ただし執</description>
    </item>
    <item>
      <title>GitHub ActionsでGo製ツールをビルド&amp;リリース【GoReleaser】</title>
      <link>https://sogo.dev/posts/2023/09/github-actions-goreleaser</link>
      <guid>https://sogo.dev/posts/2023/09/github-actions-goreleaser</guid>
      <pubDate>Tue, 26 Sep 2023 00:00:00 GMT</pubDate>
      <description> 前回の記事で紹介した nifdiff をリリースする際に、簡単に GitHub actions を使って Go 製ツールをビルドしてリリースする方法を見つけたのでメモです。

## ポイント

* GoReleaser を使うと Go で作ったソフトウェアを素早く出荷できる
* kyoh86/git-vertag-action を使うと最新のバージョンから +1 メジャー・マイナー・パッチバージョンアップしたバージョンのタグを作成できる

## 今回やったこと

* Go 製ツールをクロスコンパイルして、</description>
    </item>
    <item>
      <title>ニフクラのリソースを比較できるツールnifdiffを作った</title>
      <link>https://sogo.dev/posts/2023/09/nifdiff</link>
      <guid>https://sogo.dev/posts/2023/09/nifdiff</guid>
      <pubDate>Mon, 25 Sep 2023 00:00:00 GMT</pubDate>
      <description> 2つのファイアウォールグループのルールの差分を見たいことがあって、ちょっとしたツールを作ってみました。

## nifdiff とは

* 2つのニフクラリソースの差分を見ることができるツール
* 同一アカウント内であれば、リージョンまたぎで比較できる
* 現状対応しているのはファイアウォールグループのみ

https://github.com/SogoKato/nifdiff

こんな感じのコマンドを投げると

```
nifdiff nrn:nifcloud:computing:jp-east-1::</description>
    </item>
    <item>
      <title>AWS Certified Solutions Architect - Professionalを取得した</title>
      <link>https://sogo.dev/posts/2023/09/aws-solutions-architect-professional</link>
      <guid>https://sogo.dev/posts/2023/09/aws-solutions-architect-professional</guid>
      <pubDate>Thu, 21 Sep 2023 00:00:00 GMT</pubDate>
      <description> AWS 認定ソリューションアーキテクト - Professional (SAP-C02) の資格を取得したので学習メモです。

過去の資格に関する記事はこちら
* AWS Certified Solutions Architect - Associateを取得した
* CKAD受検記録【2023年版】
* GCP未経験の新卒2年目がAssociate Cloud EngineerとProfessional Cloud Architectを連続で受検したときの記録
* 新卒エンジニアがCKA取得を目指してK</description>
    </item>
    <item>
      <title>FluentdをDocker SwarmにDaemonSet的に配置してログを収集する</title>
      <link>https://sogo.dev/posts/2023/09/fluentd-docker-swarm</link>
      <guid>https://sogo.dev/posts/2023/09/fluentd-docker-swarm</guid>
      <pubDate>Fri, 15 Sep 2023 00:00:00 GMT</pubDate>
      <description> Docker Swarm 上のサービスのログを fluentd を使って送信するためのメモです。

Kubernetes で同様のことを実現する場合、Forwarder として使う fluentd を DaemonSet として起動してノード上のログを集めさせることが一般的です。今回は Swarm クラスター内の各ノードに1つずつ fluentd を起動して、あるノード上で動くコンテナのログはそのノード上の fluentd に集まるように設定していきます。

## ポイント

* 各ノードに配置するには </description>
    </item>
    <item>
      <title>Raspberry Pi Zero WHにVolumio 3を入れる場合は2系からアップグレードする</title>
      <link>https://sogo.dev/posts/2023/09/volumio-raspberrypi-zero</link>
      <guid>https://sogo.dev/posts/2023/09/volumio-raspberrypi-zero</guid>
      <pubDate>Sat, 09 Sep 2023 00:00:00 GMT</pubDate>
      <description> 掲題の通りです。今更ながら、その辺に転がっているラズパイゼロ（初代、Wi-Fi 付）とその辺に転がっている中華 USB-DAC を使って Spotify Connect 用の環境を整えようと Volumio を入れてみました。

## 使ったもの

* Raspberry Pi Zero WH
* Micro SD
* 電源（Apple の 5W 1A のやつで十分）
* Micro USB ケーブル
* USB OTG ケーブル（Micro USB オスから USB A メスに変換するやつ）
* Min</description>
    </item>
    <item>
      <title>AWS Certified Solutions Architect - Associateを取得した</title>
      <link>https://sogo.dev/posts/2023/08/aws-solutions-architect-associate</link>
      <guid>https://sogo.dev/posts/2023/08/aws-solutions-architect-associate</guid>
      <pubDate>Sun, 13 Aug 2023 00:00:00 GMT</pubDate>
      <description> AWS 認定ソリューションアーキテクト - Associate (SAA-C03) の資格を取得したので学習メモです。

過去の資格に関する記事はこちら
* CKAD受検記録【2023年版】
* GCP未経験の新卒2年目がAssociate Cloud EngineerとProfessional Cloud Architectを連続で受検したときの記録
* 新卒エンジニアがCKA取得を目指してKubernetesを勉強したときの記録

続きの記事 → AWS Certified Solutions Arc</description>
    </item>
    <item>
      <title>SynologyのHyper Backupを使って自分のサーバーへバックアップ（rsync over SSH）</title>
      <link>https://sogo.dev/posts/2023/07/synology-hyper-backup-rsync-over-ssh</link>
      <guid>https://sogo.dev/posts/2023/07/synology-hyper-backup-rsync-over-ssh</guid>
      <pubDate>Sat, 22 Jul 2023 00:00:00 GMT</pubDate>
      <description> 先日 Synology の NAS を導入したのですが、耐障害性を考慮すると別の拠点とのバックアップが欲しくなってきます。Synology の NAS は QuickConnect を利用することで Synology 社のサーバーを経由することで、自宅のポートを開放せずに構築することができるのがメリットです。バックアップ用途のためだけでにポートを開放するのはアレなので、自宅からのアウトバウンドの通信で定期的にバックアップを行う方法を検討しました。

## 構成

超シンプル構成です。

!構成図

NAS</description>
    </item>
    <item>
      <title>Fluentdでニフクラのオブジェクトストレージサービスにログを送る</title>
      <link>https://sogo.dev/posts/2023/07/fluentd-nifcloud-object-storage-service</link>
      <guid>https://sogo.dev/posts/2023/07/fluentd-nifcloud-object-storage-service</guid>
      <pubDate>Wed, 05 Jul 2023 00:00:00 GMT</pubDate>
      <description> Fluentd の fluent-plugin-s3 を使ってニフクラのオブジェクトストレージサービスにログをアップロードする時のメモです。

## ポイント

* `s3_endpoint` を指定する
  * https://jp-east-1.storage.api.nifcloud.com または https://jp-west-2.storage.api.nifcloud.com
  * 参照: エンドポイント
* `force_path_style` を true にする
  * オブジェクト</description>
    </item>
    <item>
      <title>シンプル思考を徹底しよう：この半年の振り返り</title>
      <link>https://sogo.dev/posts/2023/06/reflection</link>
      <guid>https://sogo.dev/posts/2023/06/reflection</guid>
      <pubDate>Sun, 25 Jun 2023 00:00:00 GMT</pubDate>
      <description> 先日、この半年くらい担当させてもらった仕事が一区切りついたので振り返りをしておこうかなと思います。

全部よくある話だと思いますが、「経験しないとわからないこともあるものだ」ということで、今回は思考垂れ流し回です。

## とにかく余裕を

取り掛かり始めたころ、諸先輩方にファーストリリースではとにかく最低限のものを作るように言われたが、今ならそれが身に沁みてわかる。スケジュール的に余裕を持たせる効果のほか、エンハンスの伸びしろも大きくなるので、リリース後に機能拡充していくことで対外的な見た目が良くなる効</description>
    </item>
    <item>
      <title>KubernetesのPodからラズパイのGPIOを操作する</title>
      <link>https://sogo.dev/posts/2023/06/k8s-raspi-gpio</link>
      <guid>https://sogo.dev/posts/2023/06/k8s-raspi-gpio</guid>
      <pubDate>Sat, 24 Jun 2023 00:00:00 GMT</pubDate>
      <description> 今まで Docker Compose で動かしてたアプリを Kubernetes に移植したときのメモです。

## Docker Compose では

Docker の `--device` オプションと同じ記法で指定できていました。

```yaml
services:
  app:
    image: hoge
    devices:
      - /dev/gpiomem
```

## Kubernetes では

デバイスプラグインを使用して Kubelet にハードウェアリソースを知</description>
    </item>
    <item>
      <title>Ubuntu 22.04ではusercfg.txtがデフォルトでincludeされていないので注意</title>
      <link>https://sogo.dev/posts/2023/06/ubuntu-22.04-raspi-config.txt</link>
      <guid>https://sogo.dev/posts/2023/06/ubuntu-22.04-raspi-config.txt</guid>
      <pubDate>Wed, 14 Jun 2023 00:00:00 GMT</pubDate>
      <description> タイトルの通りです。これにしばらくハマってしまったので戒めのために書いておきます。

## tl;dr

Ubuntu 20.04 の時と同じ設定ファイルをラズパイの /boot/firmware に入れていたけど反映されていなかった。調べてみたらそのファイルを include する文が Ubuntu 22.04 では消されていた。

## そもそも config.txt とは？

&gt; The Raspberry Pi uses a configuration file instead of the BI</description>
    </item>
    <item>
      <title>ラズパイでK3sクラスター構築【24.04対応】</title>
      <link>https://sogo.dev/posts/2023/06/k3s-setup</link>
      <guid>https://sogo.dev/posts/2023/06/k3s-setup</guid>
      <pubDate>Tue, 13 Jun 2023 00:00:00 GMT</pubDate>
      <description> 今まで kubeadm でクラスター運用をしていたのですが、ラズパイくんたちのお引越しの関係で再構築することにしました。Raspberry Pi 4B 2GB や 3A+（RAM 512MB）も join させたかったこともあり、エッジ環境での動作も想定されている K3s を選びました。

## 環境

* Raspberry Pi 4B 8GB x 2, Raspberry Pi 4B 4GB x 1, Raspberry Pi 4B 2GB x 1
  * SSD ブート
  * PoE+ 電源
  </description>
    </item>
    <item>
      <title>CeleryにおけるSQLAlchemyのセッション管理</title>
      <link>https://sogo.dev/posts/2023/05/celery-sqlalchemy</link>
      <guid>https://sogo.dev/posts/2023/05/celery-sqlalchemy</guid>
      <pubDate>Mon, 15 May 2023 00:00:00 GMT</pubDate>
      <description> 前回の記事では SQLAlchemy の Session について解説しました。今回はその応用として、Celery においてどのように Session を管理するかを考えたいと思います。

関連記事：
* SQLAlchemyのセッション・トランザクションを理解する
* SQLAlchemyで&#39;MySQL server has gone away&#39;が発生した時の対処法2つ

## 結論

以下のように DB 操作を行うタスクのためのクラスを作ります。

```python
from typing impo</description>
    </item>
    <item>
      <title>SQLAlchemyのセッション・トランザクションを理解する</title>
      <link>https://sogo.dev/posts/2023/05/sqlalchemy-sessions-and-transactions</link>
      <guid>https://sogo.dev/posts/2023/05/sqlalchemy-sessions-and-transactions</guid>
      <pubDate>Sun, 14 May 2023 00:00:00 GMT</pubDate>
      <description> SQLAlchemy の Session や scoped_session、トランザクションに関して理解していきます。

## 用語おさらい

### セッション（Session）

SQLAlchemy の Session オブジェクトは、ORM マッピングされたオブジェクトの永続化に関する操作を管理するオブジェクトです。

`sqlalchemy.orm.Session` を直接インスタンス化しても良いですが、実環境では sessionmaker を使うことが一般的です。sessionmaker は </description>
    </item>
    <item>
      <title>Reactで検索・ソート可能なDataTableを自作する</title>
      <link>https://sogo.dev/posts/2023/04/datatable-react</link>
      <guid>https://sogo.dev/posts/2023/04/datatable-react</guid>
      <pubDate>Sat, 22 Apr 2023 00:00:00 GMT</pubDate>
      <description> 最近、MUI の妹分の UI ライブラリである Joy-UI を使ってます。現在進行形で活発に開発が進んでいて、設計（デザイン）も今時な感じで好感触です。ところどころまだ開発されていないコンポーネントもちらほらあるものの、ドキュメントには代替策がコード付きで載っていてとても親切です。

MUI X というより発展的なコンポーネントをもつ UI ライブラリもあるのですが、そこに今回のテーマである「データテーブル」に該当する Data Grid というものがあります。これは超すごくて、雑に言うと Excel </description>
    </item>
    <item>
      <title>Kanikoでコンテナイメージつくるならcache=trueは有効にしておこう</title>
      <link>https://sogo.dev/posts/2023/04/kaniko-cache</link>
      <guid>https://sogo.dev/posts/2023/04/kaniko-cache</guid>
      <pubDate>Tue, 18 Apr 2023 00:00:00 GMT</pubDate>
      <description> !ぜんぜんわからない　俺たちは雰囲気でカニコをやっている

恥ずかしながら、わたしは雰囲気で kaniko にコンテナイメージのビルドをしてもらっていることに気づきました。1年以上 GitLab CI で kaniko を使っておきながら、ただ「特権コンテナを使わずにイメージつくれるやつ」くらいの認識しかしていなかったです。

続きの記事: Kanikoでcache=trueにするなら1コンテナ1ビルドで

## kaniko の cache=true オプション

kaniko には `--cache`</description>
    </item>
    <item>
      <title>IPoE回線の自宅のWebサービスをVPN経由で固定IPのクラウドから公開する</title>
      <link>https://sogo.dev/posts/2023/04/reverse-proxy-to-home-ipoe-network</link>
      <guid>https://sogo.dev/posts/2023/04/reverse-proxy-to-home-ipoe-network</guid>
      <pubDate>Sat, 15 Apr 2023 00:00:00 GMT</pubDate>
      <description> PPPoE 回線が遅いので IPoE（IPv4 over IPv6）へ移行しようと思いました。以前は2つのルーターを使って、PPPoE と IPoE の2セッションを張ることができたのですが、ある時からできなくなり、しばらく PPPoE だけで生活していました。とはいえやはり遅い、遅すぎる……ということで、今回の記事に至ります。

IPoE に移行するにあたっての課題は**任意のポートを開放できないこと**です。

代わりの方法を考えていたところ、ちょうど手元に1台 AWS Lightsail のサーバー</description>
    </item>
    <item>
      <title>CKAD受検記録【2023年版】</title>
      <link>https://sogo.dev/posts/2023/03/certified-kubernetes-application-developer</link>
      <guid>https://sogo.dev/posts/2023/03/certified-kubernetes-application-developer</guid>
      <pubDate>Thu, 30 Mar 2023 00:00:00 GMT</pubDate>
      <description> 2023年3月30日に Certified Kubernetes Application Developer (CKAD) を受験し、合格しましたのでその受検記録記事です。ちょうど1年前に Certified Kuberenetes Administrator (CKA) を取っていたので、その続きとなります。

前回の記事：新卒エンジニアがCKA取得を目指してKubernetesを勉強したときの記録

## 対象読者

* Kubernetes を使っているが、資格はまだ取ってない人
* CKA を取っ</description>
    </item>
    <item>
      <title>PyScriptを使ってブログのサンプルコードを実行させる</title>
      <link>https://sogo.dev/posts/2023/03/pyscript-codeblock</link>
      <guid>https://sogo.dev/posts/2023/03/pyscript-codeblock</guid>
      <pubDate>Mon, 06 Mar 2023 00:00:00 GMT</pubDate>
      <description> 前回の記事を書くときに WebAssembly でブログのコードブロックのコードを実行させられたら面白いかも、ということで PyScript を使って実装してみました。React &amp; Next.js で使う際の注意点についても書こうと思います。

以下については前提知識としてこの記事では解説しません。

* PyScript
* Pyodide
* WebAssembly
* react-markdown のコードブロック（バッククォート3つ \```）をカスタマイズする方法

## 2024-12-21</description>
    </item>
    <item>
      <title>Pythonのunittest.mock.patchではどこにパッチするかが重要</title>
      <link>https://sogo.dev/posts/2023/03/python-unittest-mock-where-to-patch</link>
      <guid>https://sogo.dev/posts/2023/03/python-unittest-mock-where-to-patch</guid>
      <pubDate>Sat, 04 Mar 2023 00:00:00 GMT</pubDate>
      <description> Python 公式ドキュメントの unittest.mock のページにドンピシャの内容が書いてありますが、なかなか気づけずにハマってしまっていたのでメモです。

`unittest.mock.patch` でパッチしたけど当たってない気がする人は参考にしてみてください。

下記の引用に要点が凝縮されています。

&gt; ### どこにパッチするか
&gt;
&gt; `patch()` は (一時的に) ある 名前 が参照しているオブジェクトを別のものに変更することで適用されます。任意のオブジェクトには、それを参照する</description>
    </item>
    <item>
      <title>Ansibleでgpg公開鍵とaptのサードパーティリポジトリを追加する ～Terraformをインストールしたい～</title>
      <link>https://sogo.dev/posts/2023/03/ansible-apt-repo-signed-by-gpg-key</link>
      <guid>https://sogo.dev/posts/2023/03/ansible-apt-repo-signed-by-gpg-key</guid>
      <pubDate>Wed, 01 Mar 2023 00:00:00 GMT</pubDate>
      <description> apt を使って docker や terraform をインストールする時など、提供元のサードパーティ apt リポジトリを追加する場合が結構ありますよね。その際に、今までは `apt-key` を使って OpenPGP 公開鍵をインポートしていたのですが、`apt-key` は Debian 11 と Ubuntu 22.04 を最後に使えなくなる ので、今後は `gnupg` を使った方法が主流になっていきます。

Ansible にも ansible.builtin.apt_key module </description>
    </item>
    <item>
      <title>TerraformでAPI Gatewayのスロットリングを設定する</title>
      <link>https://sogo.dev/posts/2023/02/aws-api-gateway-terraform-throttling-settings</link>
      <guid>https://sogo.dev/posts/2023/02/aws-api-gateway-terraform-throttling-settings</guid>
      <pubDate>Thu, 23 Feb 2023 00:00:00 GMT</pubDate>
      <description> AWS API Gateway のスロットリングを Terraform を使って設定する方法を見つけるまでに少し手間取ったのでメモ。

## AWS マネジメントコンソールでの場所

今回 Terraform で設定するのは、マネジメントコンソールの各ステージの設定画面内の「デフォルトのメソッドスロットリング」に該当する箇所です。

!management console

## そもそも API Gateway のスロットリングとは

API Gateway では API が1秒あたりに処理できるリクエ</description>
    </item>
    <item>
      <title>プロセス外依存は統合テストで確認しよう：単体テストの考え方／使い方 第3部</title>
      <link>https://sogo.dev/posts/2023/02/unit-testing-principles-practices-and-patterns-part3</link>
      <guid>https://sogo.dev/posts/2023/02/unit-testing-principles-practices-and-patterns-part3</guid>
      <pubDate>Wed, 22 Feb 2023 00:00:00 GMT</pubDate>
      <description> 『単体テストの考え方／使い方』（Vladimir Khorikov 著、須田智之訳）を読んだので、そのまとめを部ごとに書いていこうと思います。

1. 単体テストの目的・定義・学派・命名について：単体テストの考え方／使い方 第1部
1. リファクタリングしやすいテストを書こう：単体テストの考え方／使い方 第2部前半
1. ビジネス・ロジックと連携の指揮を分離すれば良いテストが書ける：単体テストの考え方／使い方 第2部後半
1. プロセス外依存は統合テストで確認しよう：単体テストの考え方／使い方 第3部（こ</description>
    </item>
    <item>
      <title>ビジネス・ロジックと連携の指揮を分離すれば良いテストが書ける：単体テストの考え方／使い方 第2部後半</title>
      <link>https://sogo.dev/posts/2023/02/unit-testing-principles-practices-and-patterns-part2-2</link>
      <guid>https://sogo.dev/posts/2023/02/unit-testing-principles-practices-and-patterns-part2-2</guid>
      <pubDate>Sun, 19 Feb 2023 00:00:00 GMT</pubDate>
      <description> 『単体テストの考え方／使い方』（Vladimir Khorikov 著、須田智之訳）を読んでいるので、そのまとめを部ごとに書いていこうと思います。

1. 単体テストの目的・定義・学派・命名について：単体テストの考え方／使い方 第1部
1. リファクタリングしやすいテストを書こう：単体テストの考え方／使い方 第2部前半
1. ビジネス・ロジックと連携の指揮を分離すれば良いテストが書ける：単体テストの考え方／使い方 第2部後半（この記事）
1. プロセス外依存は統合テストで確認しよう：単体テストの考え方／使</description>
    </item>
    <item>
      <title>FastAPIとSQLAlchemy2.0ならもう型ヒントを諦めなくていい</title>
      <link>https://sogo.dev/posts/2023/02/fastapi-orm-sqlalchemy</link>
      <guid>https://sogo.dev/posts/2023/02/fastapi-orm-sqlalchemy</guid>
      <pubDate>Wed, 08 Feb 2023 00:00:00 GMT</pubDate>
      <description> サチコ（Google Search Console）を眺めていたら `FastAPI MySQL` がそれなりに需要ありそうと思ったので、FastAPI と SQLAlchemy を組み合わせて ORM を使う方法を紹介したいと思います。最近の SQLAlchemy（1.4以降）ではマッピングされたオブジェクトに型を適用することもできるので、型ヒントを活かして型安全なコードを書くことも難しくなくなっています。

## 環境

* Python 3.10.6
* FastAPI 0.89.1
* SQLAl</description>
    </item>
    <item>
      <title>TypedDictはdictのsubtypeではないので関数の引数にはMappingを使う</title>
      <link>https://sogo.dev/posts/2023/02/typeddict-is-not-subtype-of-dict</link>
      <guid>https://sogo.dev/posts/2023/02/typeddict-is-not-subtype-of-dict</guid>
      <pubDate>Mon, 06 Feb 2023 00:00:00 GMT</pubDate>
      <description> Python の dict（辞書）を TypeScript の interface のように扱えて便利な TypedDict ですが、**dict のサブクラスではない**というのが少し落とし穴だなと思ったのでメモ。

## まずは PEP を見よう

大抵のことは公式ドキュメントを見れば書いてあります。今回も例外なくそうでした。

&gt; First, any TypedDict type is consistent with `Mapping[str, object]`.

https://peps.py</description>
    </item>
    <item>
      <title>リファクタリングしやすいテストを書こう：単体テストの考え方／使い方 第2部前半</title>
      <link>https://sogo.dev/posts/2023/02/unit-testing-principles-practices-and-patterns-part2-1</link>
      <guid>https://sogo.dev/posts/2023/02/unit-testing-principles-practices-and-patterns-part2-1</guid>
      <pubDate>Sat, 04 Feb 2023 00:00:00 GMT</pubDate>
      <description> 『単体テストの考え方／使い方』（Vladimir Khorikov 著、須田智之訳）を読んでいるので、そのまとめを部ごとに書いていこうと思います。

1. 単体テストの目的・定義・学派・命名について：単体テストの考え方／使い方 第1部
1. リファクタリングしやすいテストを書こう：単体テストの考え方／使い方 第2部前半（この記事）
1. ビジネス・ロジックと連携の指揮を分離すれば良いテストが書ける：単体テストの考え方／使い方 第2部後半
1. プロセス外依存は統合テストで確認しよう：単体テストの考え方／使</description>
    </item>
    <item>
      <title>単体テストの目的・定義・学派・命名について：単体テストの考え方／使い方 第1部</title>
      <link>https://sogo.dev/posts/2023/01/unit-testing-principles-practices-and-patterns-part1</link>
      <guid>https://sogo.dev/posts/2023/01/unit-testing-principles-practices-and-patterns-part1</guid>
      <pubDate>Tue, 17 Jan 2023 00:00:00 GMT</pubDate>
      <description> 『単体テストの考え方／使い方』（Vladimir Khorikov 著、須田智之訳）を読んでいるので、そのまとめを部ごとに書いていこうと思います。

1. 単体テストの目的・定義・学派・命名について：単体テストの考え方／使い方 第1部（この記事）
1. リファクタリングしやすいテストを書こう：単体テストの考え方／使い方 第2部前半
1. ビジネス・ロジックと連携の指揮を分離すれば良いテストが書ける：単体テストの考え方／使い方 第2部後半
1. プロセス外依存は統合テストで確認しよう：単体テストの考え方／使</description>
    </item>
    <item>
      <title>SQLAlchemyで&#39;MySQL server has gone away&#39;が発生した時の対処法2つ</title>
      <link>https://sogo.dev/posts/2023/01/sqlalchemy-dealing-with-disconnects</link>
      <guid>https://sogo.dev/posts/2023/01/sqlalchemy-dealing-with-disconnects</guid>
      <pubDate>Thu, 12 Jan 2023 00:00:00 GMT</pubDate>
      <description> FastAPI で SQLAlchemy を使っている時に、コンテナを立てた直後は問題ないけど一定時間経過後に DB 接続が切れてしまう問題に遭遇したのでその時に調べたことのメモ。

## 環境

* mysql 5.7.15
* SQLAlchemy 1.4.45
* mysqlclient 2.1.1

## 問題

```
MySQLdb.OperationalError: (2006, &#39;MySQL server has gone away&#39;)
```

最後に MySQL サーバーに接続してから</description>
    </item>
    <item>
      <title>2023年版 キーボードマッピングの個人的メモ</title>
      <link>https://sogo.dev/posts/2023/01/keyboard-remap</link>
      <guid>https://sogo.dev/posts/2023/01/keyboard-remap</guid>
      <pubDate>Sun, 08 Jan 2023 00:00:00 GMT</pubDate>
      <description> 不定期的に「あーでもない、こーでもない」と言ってキーボードのマッピングをいじりだしてしまうことってありますよね。私はあります。限りあるキーの中から自分にとっての最適解を見つける作業はなんだかんだ楽しいです。

今回は 2023 年版、私のキーボードのマッピングを書きとめておこうと思います。

過去の記事: Windows10 と PowerToys で US キーボードでも無変換・変換キーを使って IME を一発で切り替える

## 環境

* 使うパソコン
  * Windows デスクトップ
  * </description>
    </item>
    <item>
      <title>プロキシ環境でKubernetes構築（Containerd+Calico）</title>
      <link>https://sogo.dev/posts/2022/12/kubernetes-behind-proxy</link>
      <guid>https://sogo.dev/posts/2022/12/kubernetes-behind-proxy</guid>
      <pubDate>Tue, 27 Dec 2022 00:00:00 GMT</pubDate>
      <description> 同期と一緒にトラシュしたので、プロキシ環境下で kubeadm + Containerd + Calico の Kubernetes クラスターを構築する方法について記録を残します。

## 環境

* Ubuntu 22.04
  * サーバーはニフクラを利用（e-medium4 2vCPU/4GB）
* Kubernetes v1.26.0
* kubeadm v1.26.0
* Containerd v1.6.14
* Calico v3.24.5

コントロールプレーン、ノード1台ずつの構成としま</description>
    </item>
    <item>
      <title>Ubuntu 22.04でのKubernetesクラスター構築（ContainerdとSystemdCgroup）</title>
      <link>https://sogo.dev/posts/2022/12/kubernetes-ubuntu22.04-cgroup-systemd</link>
      <guid>https://sogo.dev/posts/2022/12/kubernetes-ubuntu22.04-cgroup-systemd</guid>
      <pubDate>Mon, 26 Dec 2022 00:00:00 GMT</pubDate>
      <description> 公式ドキュメントのコマンドを手順通り流し込めば割と簡単に構築できる Kubernetes クラスターですが、Ubuntu 22.04 になってから少し手を入れる必要が出てきたので差分を紹介しておきます。

**2022-02-16 更新：Kubernetes ドキュメントの日本語版が更新されていたのでリライトしました。**

## 環境

* Ubuntu 22.04
* Kubernetes v1.26.0
* kubeadm v1.26.0
* Containerd v1.6.16

## 何が変わっ</description>
    </item>
    <item>
      <title>KubernetesでCoreDNSがループしてしまう問題への対処</title>
      <link>https://sogo.dev/posts/2022/12/kubernetes-coredns-loop</link>
      <guid>https://sogo.dev/posts/2022/12/kubernetes-coredns-loop</guid>
      <pubDate>Sat, 24 Dec 2022 00:00:00 GMT</pubDate>
      <description> 1年前にも Kubernetes クラスターを自力で組んでトラブルシューティングしてみる【The Hard Way】の記事の中で軽く解説したネタです。

## 環境

* Ubuntu 22.04
* Kubernetes v1.26.0
* kubeadm v1.26.0

## 問題

Kubernetes クラスター内で名前解決に使われる CoreDNS の Pod が `CrashLoopBackOff` になってしまい再起動を繰り返す問題が発生することがあります。

```
# kubectl </description>
    </item>
    <item>
      <title>VS Code Serverでリモートホストのコンテナ上開発環境に直接アクセスする</title>
      <link>https://sogo.dev/posts/2022/12/vscode-server-devcontainer</link>
      <guid>https://sogo.dev/posts/2022/12/vscode-server-devcontainer</guid>
      <pubDate>Sat, 17 Dec 2022 00:00:00 GMT</pubDate>
      <description> 今回は「ぼくのかんがえたさいきょうのかいはつかんきょう」を紹介したいと思います。

VS Code Server を使い、リモートサーバー上でコンテナとして動かしている開発環境に直接乗り込んでみよう、というアイデアです。

SSH もポート開放も不要なのでとてもお手軽です。

## 2023/10/24 追記

GitLab のリモート開発環境も試してみました。

GitLabのRemote developmentを試してみる

## 2023/06/14 追記

以下で紹介する方法が最近は使えなくなって</description>
    </item>
    <item>
      <title>よくあるSPA+API構成でのOpenID Connectクライアント実装</title>
      <link>https://sogo.dev/posts/2022/12/openid-connect-fastapi</link>
      <guid>https://sogo.dev/posts/2022/12/openid-connect-fastapi</guid>
      <pubDate>Fri, 02 Dec 2022 00:00:00 GMT</pubDate>
      <description> この記事はニフクラ等を提供している、富士通クラウドテクノロジーズ Advent Calendar 2022の2日目の記事です。

昨日は @ntoofu さんの パケットキャプチャからKubernetes APIのTLS通信を解析する でした。  
私は TLS な時点でパケットキャプチャを諦めてしまいそうですが Linux の便利な仕組みと気合があれば TLS 1.3 のパケットキャプチャも可能だとわかり、とても有益でした。私もギークなエンジニア目指して頑張ります。

今日は OpenID Connec</description>
    </item>
    <item>
      <title>GitLab CIのrulesとworkflowを理解する</title>
      <link>https://sogo.dev/posts/2022/11/gitlab-rules-workflow</link>
      <guid>https://sogo.dev/posts/2022/11/gitlab-rules-workflow</guid>
      <pubDate>Thu, 17 Nov 2022 00:00:00 GMT</pubDate>
      <description> GitLab CI の rules を使って Dockerfile などの特定のファイルの変更時のみ Docker イメージを作成するパイプラインを回して、それ以外の時には既存の Docker イメージを使用して CI を実行する、という組み方をしたかったのですが、書き方に結構手間取ったのでメモ。

環境: GitLab.com 15.6.0-pre

## rules とは

https://docs.gitlab.com/ee/ci/yaml/#rules

それぞれのジョブについて、パイプラインに追</description>
    </item>
    <item>
      <title>Next.jsとTailwind CSSでブログを作るときに考えたこと</title>
      <link>https://sogo.dev/posts/2022/11/blog-with-nextjs-and-tailwindcss</link>
      <guid>https://sogo.dev/posts/2022/11/blog-with-nextjs-and-tailwindcss</guid>
      <pubDate>Sun, 13 Nov 2022 00:00:00 GMT</pubDate>
      <description> このブログは Next.js の SSG（Static Site Generation; 静的サイト生成）機能を使いながら、デザインの大半は Tailwind CSS を使用して整えています。そして生成された HTML, CSS, JS は GitHub Pages でホストさせてもらっています。

そこそこの出来栄えになったので、今回はこのブログができるまでのお話をしたいなと思ったのですが、正直なところ、以下のリンク先のページを~~まるパク~~参考にさせてもらいながら作成したので、具体的な構築方法につい</description>
    </item>
    <item>
      <title>Hello World!</title>
      <link>https://sogo.dev/posts/2022/10/hello-world</link>
      <guid>https://sogo.dev/posts/2022/10/hello-world</guid>
      <pubDate>Tue, 11 Oct 2022 00:00:00 GMT</pubDate>
      <description> はじめまして。  
これは初めての投稿です。

今までブログが長く続いたことがないのですが、n度目の正直ということで今回こそは長く続くように頑張りたいと思います（とても固い決意）。

@SogoKato といいます。どんな人か気になってくれた方は 自己紹介ページ をご覧いただければと思います。

このブログの制作にあたっては、初めて React + Next.js + Tailwind CSS を触って作ってみましたが、結構いい開発者体験だったのでこれについてもまた記事に起こしていきたいな〜と思っています</description>
    </item>
  </channel>
</rss>