<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Go on 万屋猫Labs</title><link>https://yn-labs.com/tags/go/</link><description>Recent content in Go on 万屋猫Labs</description><generator>Hugo</generator><language>ja</language><lastBuildDate>Sun, 05 Apr 2026 00:00:00 +0900</lastBuildDate><atom:link href="https://yn-labs.com/tags/go/index.xml" rel="self" type="application/rss+xml"/><item><title>Docker Desktopが重いからWSL2でLazyDockerに移行してみた</title><link>https://yn-labs.com/posts/lazydocker-wsl2-migration/</link><pubDate>Sun, 05 Apr 2026 00:00:00 +0900</pubDate><guid>https://yn-labs.com/posts/lazydocker-wsl2-migration/</guid><description>&lt;p&gt;開発環境のメモリ不足、深刻ですよね。&lt;br&gt;
PCにメモリを32GB積んでいてもブラウザ、IDE、そして最近ではローカルLLM（Ollama等）を同時に立ち上げると、リソースはあっという間に枯渇します。&lt;/p&gt;
&lt;p&gt;タスクマネージャーを見ると、常に上位に居座っているのが &lt;strong&gt;Docker Desktop&lt;/strong&gt; 関連のプロセスや、肥大化した &lt;strong&gt;Vmmem&lt;/strong&gt; です。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Vmmemとは？&lt;/strong&gt;&lt;br&gt;
WSL2などの仮想マシンが使用しているメモリやCPUリソースを管理している、Windows側のプロセスのことです。&lt;br&gt;
WSL2側でメモリを使うと、Windows側ではこのVmmemのメモリ使用量が増加します。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;「GUIでコンテナの状態を確認したい」というだけなのに、そのために重厚な仮想マシン管理プロセスを常駐させるのは、リソース効率の観点から最適解とは言えません。&lt;/p&gt;
&lt;p&gt;そこで今回は、&lt;strong&gt;Docker Desktopをアンインストールし、WSL2ネイティブのDocker Engine + LazyDocker&lt;/strong&gt; に移行する方法を紹介します。&lt;br&gt;
さらに、&lt;strong&gt;「使う時だけ起動し、終わったらメモリを即座に解放する」&lt;/strong&gt; 運用フローまでを構築し、開発機のスペックを極限まで引き出します。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;前提条件:&lt;/strong&gt; WSL2 で systemd が有効であること。&lt;code&gt;/etc/wsl.conf&lt;/code&gt; に &lt;code&gt;[boot]&lt;/code&gt; セクションで &lt;code&gt;systemd=true&lt;/code&gt; が設定されている必要があります。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="本記事のゴール"&gt;本記事のゴール&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Go言語の最新版をWSL2にインストールする&lt;/li&gt;
&lt;li&gt;Native Docker Engineを導入し、自動起動を無効化する&lt;/li&gt;
&lt;li&gt;LazyDockerを導入し、マウスレスで快適な管理環境を作る&lt;/li&gt;
&lt;li&gt;コマンド一発で「起動→作業→完全停止」する&lt;strong&gt;最強のエイリアス&lt;/strong&gt;を作る&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="step-1-go言語-golang-の導入"&gt;Step 1. Go言語 (Golang) の導入&lt;/h3&gt;
&lt;p&gt;LazyDockerはGo製ツールです。&lt;br&gt;
バイナリを直接落とすこともできますが、Go環境を入れておくとアップデート管理が楽ですし、他のモダンなCLIツールも導入しやすくなるため、最初に導入してしまいます。&lt;/p&gt;
&lt;p&gt;WSL2 (Ubuntu) 上で以下を実行します。&lt;br&gt;
※ &lt;code&gt;apt install golang&lt;/code&gt; はバージョンが古いことが多いため、今回は公式からバイナリを取得して導入します（nvm等で管理したい方はそちらでも構いません）。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 既存の古いGoがあれば削除&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo rm -rf /usr/local/go
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 最新版をダウンロードして展開&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# バージョンは https://go.dev/dl/ で最新を確認してください&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wget https://go.dev/dl/go1.26.1.linux-amd64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo tar -C /usr/local -xzf go1.26.1.linux-amd64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# パスを通す（go install のバイナリ用に $HOME/go/bin も追加）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;echo &lt;span style="color:#e6db74"&gt;&amp;#39;export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; ~/.bashrc
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;source ~/.bashrc
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 確認&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;go version
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="step-2-native-docker-engine-の導入とオンデマンド化"&gt;Step 2. Native Docker Engine の導入と「オンデマンド化」&lt;/h3&gt;
&lt;p&gt;ここが本記事の肝です。&lt;br&gt;
Docker Desktopを削除し、純粋なLinux版Docker Engineを入れた上で、「PC起動時に勝手に立ち上がらない（Systemdの自動起動無効化）」設定までを一気に行います。&lt;/p&gt;</description></item><item><title>Bridge不要のProtonMail MCPサーバーを作った</title><link>https://yn-labs.com/posts/protonmail-mcp/</link><pubDate>Thu, 02 Apr 2026 00:00:00 +0900</pubDate><guid>https://yn-labs.com/posts/protonmail-mcp/</guid><description>&lt;h2 id="課題"&gt;課題&lt;/h2&gt;
&lt;p&gt;既存のProtonMail MCPサーバーは全てProton Bridge（有料デスクトップアプリ）が必要。&lt;br&gt;
無料のProtonMailユーザーはAIアシスタントとメールを連携する手段がない。&lt;/p&gt;
&lt;p&gt;GitHubで11個のProtonMail MCPプロジェクトを調査した。&lt;br&gt;
全てBridge必須だった。&lt;/p&gt;
&lt;h2 id="解決策"&gt;解決策&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/ichiburn/protonmail-mcp"&gt;protonmail-mcp&lt;/a&gt; を構築した。&lt;br&gt;
Protonの公式オープンソースライブラリのみを使い、APIと直接通信するGo製MCPサーバー:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/ProtonMail/go-proton-api"&gt;go-proton-api&lt;/a&gt;&lt;/strong&gt; — Proton Bridge自体が使用するライブラリ&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/ProtonMail/go-srp"&gt;go-srp&lt;/a&gt;&lt;/strong&gt; — SRP認証&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/ProtonMail/gopenpgp"&gt;gopenpgp&lt;/a&gt;&lt;/strong&gt; — PGP暗号化/復号&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;サードパーティAPIラッパーは不使用。&lt;br&gt;
パスワードや秘密鍵を扱う未知のパッケージによるサプライチェーンリスクなし。&lt;/p&gt;
&lt;h2 id="機能"&gt;機能&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ログイン&lt;/strong&gt; — SRP認証 + 2FA（TOTP）対応&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;読取&lt;/strong&gt; — PGP暗号化メールの復号・閲覧&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;検索&lt;/strong&gt; — 送信者、件名、キーワードでフィルタ&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;送信&lt;/strong&gt; — サーバーサイドトークンによる2段階確認（プロンプトインジェクション対策）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="セキュリティ-8ラウンドの敵対的レビュー"&gt;セキュリティ: 8ラウンドの敵対的レビュー&lt;/h2&gt;
&lt;p&gt;Writer/Reviewer分離（Claude実装 → Codexレビュー）で8ラウンドの敵対的セキュリティレビューを実施。&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;ラウンド&lt;/th&gt;
 &lt;th&gt;CRITICAL&lt;/th&gt;
 &lt;th&gt;HIGH&lt;/th&gt;
 &lt;th&gt;MEDIUM&lt;/th&gt;
 &lt;th&gt;修正&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;td&gt;4&lt;/td&gt;
 &lt;td&gt;5&lt;/td&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;4&lt;/td&gt;
 &lt;td&gt;7&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;5&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;4&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;5&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;4&lt;/td&gt;
 &lt;td&gt;4&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;6&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;7&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;8&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;24件の問題を発見・修正。&lt;br&gt;
主な発見事項:&lt;/p&gt;</description></item><item><title>Building a Bridge-Free ProtonMail MCP Server</title><link>https://yn-labs.com/en/posts/protonmail-mcp/</link><pubDate>Thu, 02 Apr 2026 00:00:00 +0900</pubDate><guid>https://yn-labs.com/en/posts/protonmail-mcp/</guid><description>&lt;h2 id="the-problem"&gt;The Problem&lt;/h2&gt;
&lt;p&gt;Every existing ProtonMail MCP server requires Proton Bridge — a paid desktop app. Free ProtonMail users have no way to integrate their email with AI assistants.&lt;/p&gt;
&lt;p&gt;I found 11 existing ProtonMail MCP projects on GitHub. All of them require Bridge.&lt;/p&gt;
&lt;h2 id="the-solution"&gt;The Solution&lt;/h2&gt;
&lt;p&gt;I built &lt;a href="https://github.com/ichiburn/protonmail-mcp"&gt;protonmail-mcp&lt;/a&gt; — a Go MCP server that talks directly to Proton&amp;rsquo;s API using only their official open-source libraries:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/ProtonMail/go-proton-api"&gt;go-proton-api&lt;/a&gt;&lt;/strong&gt; — The same library used by Proton Bridge itself&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/ProtonMail/go-srp"&gt;go-srp&lt;/a&gt;&lt;/strong&gt; — SRP authentication&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/ProtonMail/gopenpgp"&gt;gopenpgp&lt;/a&gt;&lt;/strong&gt; — PGP encryption/decryption&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No third-party API wrappers. No supply chain risk from unknown packages handling your passwords and private keys.&lt;/p&gt;</description></item></channel></rss>