ほぼ週間Go言語 2026年3月23日
今週もプログラミング雑記からGo言語の話題を中心に気になった話題を取り上げていきます。
前回からだいぶ間が空いてしまいすみません。
Go言語
Go言語の新バージョン1.26.1と1.25.8がリリースされました。5つのセキュリティ脆弱性が修正されています。主な内容は以下の通りです:
-
X.509証明書の脆弱性:メールアドレス制約の不正な適用と、不正な形式の証明書によるパニック問題を修正
-
XSS脆弱性:HTMLメタタグのcontent属性内のURLがエスケープされていなかった問題を修正
-
URLパース脆弱性:IPv6リテラルの検証が不十分で無効なURLが受け入れられていた問題を修正
-
ファイルアクセス脆弱性:Unixプラットフォームでディレクトリ列挙時にシンボリックリンクを通じてRoot外のファイル情報がアクセス可能だった問題を修正
詳細はリリースノートを参照し、公式サイトからダウンロード可能です。
MSによるビルド。
Go 1.26の新機能「//go:fix inline」について、ソースレベルのインライン化を説明しています。このコマンドは、関数呼び出しをその関数本体に置き換え、APIの移行とコード最新化を支援します。ioutil.ReadFileからos.ReadFileへの移行など、廃止予定の関数を自動で置き換え可能です。インライナーは複雑な処理に対応し、副作用やシャドウイング、定数式など6つの課題を解決する約7000行の実装を持っています。
松木雅幸(Songmu)さんが語るGoの成功の背景には、以下の要因があります。
最初の印象から一変した理由
当初、Goは「面倒な言語」と見られていました。しかし、はてなのサーバー監視サービス「Mackerel」開発での経験を通じ、わずかなメモリ消費量とシングルバイナリとしての配布の容易さといった「用途への圧倒的な適合性」を目の当たりにし、評価が劇的に変わりました。
他の言語との比較における強み
JavaやScalaなどの静的型付け言語と比べて、Goはビルド速度の速さとランタイムの軽量性で優れています。コンテナ技術やマイクロサービス時代において、これらの特性が求められました。また、コンパイル時間が短いため「書いて動かす」サイクルが高速で、動的言語出身者にとって移行しやすいという利点もあります。
インフラからWebへの普及
当初はDocker、Kubernetes、TerraformといったインフラツールがGoで開発されたことが採用を促進しました。その後、複雑なビジネスロジックを持つ大規模なWebシステムまで、全体をGoで開発する企業が増え、予想を超えた広がりを見せています。
「シンプルさ」という設計哲学
Goは「Less is More」の哲学に基づき、機能の追加を厳選し、1つの課題に対する解決方法を限定します。これによりコードのスタイルが統一され、可読性が高まります。例外処理の代わりに戻り値としてエラーを返す設計も、シンプルさと実用性のバランスを示しています。
今後への展望
Goはゆっくりと着実に進化し、過去のコードが使い続けられる安定性を保っています。また、AI時代においても、統一されたコードスタイルと高い可読性がAI出力の品質向上と人間によるレビューを容易にし、Goは「最も親和性が高い言語の1つ」となるとの見解が示されています。
「Go Review Guide Guide」は、Go言語における「Goらしいコード」の書き方を解説した技術書です。Effective GoやGoogle Go Style Guideなどの公式資料を横断して、ネーミング、エラー処理、制御構文、型設計、API設計、パッケージ、テスト、コメント、並行処理といった各論点で、「なぜGoらしいのか」という理由と具体的な実装方法を提案しています。スタイルガイドの要約ではなく、Goの設計哲学を深掘りした内容となっています。
miseでGoのバージョン管理をしている場合、go installでインストールしたツールはバージョン固有のディレクトリに保存されます。Goがバージョンアップされるたびに、ツールをすべて再インストールする必要があり、手間がかかります。解決策として、miseの機能を使いmise use -g go:github.com/パッケージ名@バージョンでツールをインストールすれば、バージョン更新時に自動で管理でき、効率的です。
Gojangは、Goで開発されたモダンなWebフレームワークです。認証機能、管理パネル、ORM、セキュリティ機能など必要な機能が全て備わっています。HTMXとの統合により、JavaScriptフレームワーク不要で動的なWebアプリケーションを構築できます。Ent ORMによるコンパイル時の型安全性、自動生成管理パネル、組み込みセキュリティ機能など本番環境対応です。数分で開始でき、開発者体験を重視した設計になっています。
Forget Go dependency injection frameworks — Do this instead | by Yaninyz witty
Goではwireやdigなどの依存注入フレームワークは不要である、という主張です。著者は、Goアプリケーションは通常それほど複雑ではないため、シンプルなコンストラクタインジェクションで十分だと述べています。internal/appパッケージで明示的にオブジェクトを組み立てるアプローチを推奨。フレームワークは可読性を損ない、ビルドの複雑さを増し、実行時エラーをもたらします。Goの哲学「見えないものは疑え」に反しています。手動の依存解決は、スケールしても管理可能であり、テストもコンストラクタインジェクションで簡単に実現できます。
I Replaced Thousands of if err != nil —Here's What Happened | Stackademic
Go言語の大規模プロジェクトでは、「if err != nil」パターンが数千回繰り返され、エラーの文脈が失われ本番環境でのデバッグが困難になります。著者は、エラーハンドリングをスケール可能なアーキテクチャとして再設計しました。
主な改善策:
- fmt.Errorfでコンテキストを追加
- errors.IsやAsで詳細なエラー判定
- ドメイン固有エラーの定義
- 構造化エラー型の使用
- 層ごとのエラー責務の分離
- システム境界でのみエラーログを記録
これらのパターンで、本番デバッグが高速化し、ログが整理され、コード可読性が向上します。
Golang + MySQL Took Down My Client’s App at 15K Users — Here’s How I Fixed It and Got 25x Faster | by Nando Septian Husni
著者のクライアントのパッケージ追跡システムは15,000ユーザーで機能障害を起こしていました。PHPからGoへの移行を提案された際、著者は「MySQLに問題があるなら言語を変えても意味がない」と疑問を持ちました。
しかし実際の問題はGoとMySQLの通信方法にありました。PHPは毎回新しい接続を開閉していたのに対し、Goは接続プーリングで再利用可能な接続を維持できます。同じデータベースでも接続管理を最適化するだけで、レスポンスタイムは0.8秒から34msへと23倍高速化しました。
記事では8週間かけて、スローログ分析、接続プーリング設定、インデックス最適化、読み取りレプリカの構築、監視システム導入などの段階的な改善方法を説明しています。最終的に1,000ユーザーで崩壊していたシステムが、同じハードウェアで120万クエリ/分を処理できるようになったと述べられています。
go-trace は、ISUCONのボトルネック特定を自動化するGoトレーシングツールです。コード変更なしにASTレベルでHTTP・SQL・関数呼び出しを自動計装し、Unix socketで収集したトレース情報をTUIでリアルタイム表示します。
主な特徴は、go-trace run .とgo-trace viewの2コマンドで起動でき、ベンチマーク終了後に「a」キーでanalyticsビューを表示。エンドポイント・SQL・関数別の集計、N+1クエリの自動検出、URI動的パスのグループ化、SQL自動正規化に対応しています。
alpやpt-query-digestとは異なり、リクエスト単位で情報が紐付き、より実践的なボトルネック分析が可能です。
このブログ記事は、Go製CLIをAI Agentフレンドリーにするために開発された「skillsmith」というツールについて説明しています。
Agent Skillsはオープンスタンダードで、SKILL.mdというMarkdownファイルをリポジトリに配置することでAIエージェントに機能を提供します。著者はCLIに直接Agent Skillsのインストーラー機能を埋め込む方法を考案し、skillsmithを開発しました。
Goのembedパッケージを利用することで、CLI内にskillsディレクトリを埋め込み、バージョン管理も実現しています。mytool skills list/install/update/uninstall/statusといったコマンドが利用できるようになります。
特定のCLIライブラリに依存しない設計で、任意のCLIに組み込み可能です。CLI出力をndjsonフォーマットにしてJSON Schemaを記述することで、AI Friendlyな仕様が実現できるとしています。
Goconfigは、Go言語用の軽量な設定管理ライブラリです。JSON設定ファイル、環境変数、コマンドラインフラグから構造体に値を読み込めます。セットアップが簡単で、本番環境対応の設定管理をミニマルなボイラープレートで実現します。優先順位はコマンドラインフラグ>環境変数>JSONファイル>デフォルト値です。自動的に./config.jsonを検出し、-helpでヘルプ表示、ネストされた構造体やtime.Durationなど多くの型に対応しています。外部依存がなく、既存プロジェクトへの統合コストが低いです。
感想:
同様の他のライブラリに比べて、機能は少ないがその分シンプル。
このページは、Go言語のソースコードを修正・実験する対話的ワークショップです。Go 1.26.1を使用し、11の演習を通じてGo コンパイラとランタイムの内部を学びます。演習内容は、ソースコードのビルド、字句解析器・パーサー・SSA パスの修正、ランタイム動作の変更、select文の確定性化など、言語仕様から内部実装まで多岐にわたります。参加者は基本的なGo知識とコマンドラインの操作経験が必要で、完了後はGo プロジェクトへの貢献やカスタム言語開発が可能になります。
その他プログラミング
Java
JDK 26では、X.509証明書のセキュリティ強化のため「com.sun.security.allowedAIALocations」という新しいシステム・セキュリティプロパティが導入されました。
このプロパティにより、ユーザーはX.509証明書の認証局情報アクセス拡張機能から取得するURIに対してフィルタリングルールを定義できます。特にCA発行者アクセス方式に適用され、「com.sun.security.enableAIAcaIssuers」が有効で、フィルタが許可する場合のみURIがアクセスされます。
ルール設定の仕様:
URIは絶対階層型で、http/https/ldap/ftpスキームのいずれかを使用します。ホスト名またはアドレスを指定し、ポート番号も一致する必要があります。階層型スキームではパス部分が大文字小文字区別で照合され、スラッシュで終わるパスはプレフィックスマッチが可能です。LDAPではベースDNが完全一致する必要があります。
デフォルトではプロパティが空白でアクセス拒否状態ですが、「any」と設定するとすべて許可されます。
IntelliJ IDEA 2025.3.4がリリースされました。主な改善点は、Java 26の完全サポートが追加されたこと、HTTPリクエスト実行時に異なるリクエストが誤ってトリガーされる問題の解決、大規模Perforceプロジェクトでのローカル変更リフレッシュの正常動作、Cyclic Dependencies分析機能でのDependenciesタブの正常表示です。IDE内、Toolbox App、またはUbuntu用スナップからアップデートできます。
Visual Studio Code
VS Codeチームは、AIエージェントの導入により、10年間の月次リリースから週次リリースへ移行しました。主な変化は以下の通りです。
主要な改善点:並列作業により、会議中もタスクを自動実行。自動化により、イシュー分類、コミット要約、リリースノート作成を効率化。プロダクトマネージャーも直接コードを書き、プロトタイプPRで機能検証を加速。
品質維持:自動テスト、スクリーンショット検証、AIコードレビューで品質を確保。人間のレビューは「デリート」評価に特化。
成果:コミット量が2倍、イシュー解決が3倍に増加。バグ修正が3週間待たずに数日で提供。AIとしての責任は人間の開発者にあり、適切なテストハーネスが必須。
Visual Studio Code 1.112(2026年3月18日リリース)は、エージェント機能と開発者体験の向上に焦点を当てた更新です。
エージェント体験の強化 - Copilot CLIにメッセージのステアリング・キューイング機能を追加し、実行中のリクエストを別方向に導引または追加メッセージをキューできるように改善。未コミット変更をプレビュー表示可能に。Copilot CLIにパーミッションレベル(デフォルト・承認バイパス・オートパイロット)を設定でき、エージェントの自律性を向上。
エージェント拡張性 - モノレポ環境で親フォルダから設定を自動検出し、パッケージ間で共有できる機能を追加。ローカルMCPサーバーをサンドボックス環境で実行し、セキュリティを強化。プラグイン/MCPサーバーのアンインストール不要な有効/無効切り替え機能追加。
開発者体験 - 統合ブラウザでのデバッグ機能を実装。ブラウザの独立したズームレベル、コンテキストメニュー、検索後の自動クローズオプション追加。IME入力時の端末表示の改善。
画像・バイナリファイル対応 - エージェントがスクリーンショット・図表・バイナリファイルを直接処理可能に。記号参照の自動変換機能も実装。段階的ロールアウト中。
GitHub CopilotユーザーはFigma MCPサーバーを経由して、デザインコンテキストをコード開発に取り込むとともに、レンダリングされたUIを編集可能なFigmaフレームとして送信できるようになりました。
主な特徴として、デザインからコードを生成し、UIをFigmaに送り返してイテレーション可能な連携ワークフローが実現します。セットアップはシンプルで、MCPサーバーをインストール→Figmaアカウント接続→GitHub Copilotで操作という流れです。
GitHub Copilotサブスクリプション所有者なら誰でも利用でき、Figmaのすべてのプランに対応しています。UIをフレームとしてキャプチャする場合はリモートMCPサーバーが必要です。現在VS Codeで提供され、GitHub Copilot CLIへの対応も予定されています。
JavaScript
Node.jsのメンテナー・Matteo Collina氏は、ユーザーランド仮想ファイルシステム(VFS)を発表し、Node.jsコアへの統合予定を明かしました。VFSにより、単一実行可能アプリケーション作成時の余分なコード削減やテスト環境でのディスクアクセス回避が可能になります。約14,000行のコードを含むプルリクエストは現在レビュー中。VercelのCTO提案により、Platformatic版VFSはNode.js 22以降で利用可能です。将来的にはコア統合版へスムーズに移行できるよう設計されています。
AI
Anthropic
ClaudeのOpus 4.6とSonnet 4.6が「100万トークン(1M)」のコンテキストウィンドウを一般提供開始しました。主な新機能は以下の通りです。
料金体系の変更:長いコンテキストに対するプレミアム料金が廃止され、全文脈で標準料金が適用されます(Opus 4.6は500万トークンあたり$5/入力、$25/出力)。
メディア処理の拡張:1回のリクエストで扱えるメディアが100から600に増え、画像やPDFページを最大600まで処理可能になりました。
技術的改善:Opus 4.6は100万トークンの全文脈で78.3%の精度を維持し、200K以上のトークン処理に特別なヘッダは不要となりました。
実用例:企業ユーザーはコード全体、数千ページの契約書、長時間実行のエージェント全体などを一度に処理でき、従来の「文脈圧縮」による情報損失が不要になったと報告しています。
OpenAI
GPT-5.4 mini と nano が登場 | OpenAI
OpenAIが2026年3月17日に発表した新モデル「GPT-5.4 mini」と「GPT-5.4 nano」について、以下のポイントが挙げられます。
GPT-5.4 mini の特徴
コーディング、推論、マルチモーダル理解において前世代から大幅に性能向上し、処理速度は2倍以上高速です。コーディングアシスタント、サブエージェント、コンピュータ操作システムなど、低レイテンシが求められるタスクに最適化されています。複数の評価ベンチマークで大規模モデルに匹敵する性能を示しています。
GPT-5.4 nano の特徴
最小かつ最速のバージョンで、分類、データ抽出、シンプルなサブエージェントタスクに適しています。
提供状況
- mini版:API、Codex、ChatGPTで利用可能(入力$0.75/1M、出力$4.50/1M)
- nano版:APIのみで利用可能(入力$0.20/1M、出力$1.25/1M)
両モデルは高速性とコスト効率を兼ね備えた小型モデルとして、大規模モデルとの組み合わせ運用を想定した設計になっています。
エンジニア
AIとお仕事
開発速度が遅い原因はエンジニアの能力ではなく、プロダクトマネージャー(PdM)の責任が大きいという論考です。スタートアップにおいて開発速度は最大の競争力。PdMは機能開発でやらないことを決定するだけでなく、インシデント対応やルーティーン業務といった「トイル」を削減し、エンジニアが開発と顧客理解に時間を割けるよう環境整備する必要があります。AI時代にはPdM自身も実装や自動化に取り組み、チーム全体でスピード向上に貢献すべきだと主張しています。
Discussion