🐡

ほぼ週間Go言語 2025/10/14

に公開

今週もプログラミング雑記からGo言語に関する話題と、その他特に気になった話題をより抜きでお送りします。

Go言語

https://groups.google.com/g/golang-announce/c/4Emdl2iQ_bI/m/qZN5nc-mBgAJ

Go 1.25.2, Go 1.24.8がリリース。

https://devblogs.microsoft.com/go/go-1-25-2-1-and-1-24-8-1-microsoft-builds-now-available/

MSのビルドもアップデート。

https://medium.com/@maahisoft20/go-1-25-1-the-tiny-patch-that-fixes-real-pain-d90d724bfcf5

Go 1.25.1は、HTTP・UDP・Windows I/O・PATH・テストに関連した重大な不具合を修正する小規模なパッチです。主な変更点は、net/httpのクロスオリジン保護のパターン精度向上(リダイレクト経由の広すぎるパス除外防止)、Windowsでのファイルオフセット不具合修正、UDPのIPv4-mapped IPv6アドレスの対応、exec.LookPathの安定性回復、testing/synctestのハング防止です。これにより、セキュリティ境界の強化と開発・CI時のフレークや不意なエラーが大幅減少し、アップデート即日推奨の内容です。

https://zenn.dev/nabetani/articles/038a09a85490ba

そうなのか。知らなかった。Goには負のゼロをリテラルで書く方法がない。

https://zenn.dev/mozuku55/articles/8b1d1287d74e88

スライスについての注意点など。

Goのgoroutineに関する本プレゼンテーションは、初心者の目線で「go func()」で始まる並行処理の裏側を解説しています。goroutineはGoランタイムによって管理される軽量スレッドで、キーワード1つで強力な並行処理が可能な点が特徴です。GoのスケジューラはM:N方式で、複数のgoroutine(G)が少数のスレッド(M)に効率よく割り当てられます。内部ではグローバル・ローカル実行キューによる管理や、Work Stealing、プリエンプション(協調・非協調型)が導入され、CPUやI/Oの競合も制御されます。GOMAXPROCSの値によるチューニングや、トレースツールによる実行可視化も重要です。著者自身の学びとして、ロックやI/Oによるブロッキング、タスク粒度の最適化、context・timeoutの活用、トレースデータ重視のデバッグ姿勢が挙げられています。まとめとして、スケジューラ理解がパフォーマンスや予測可能性向上につながり、「動かせる」から「仕組みを説明できる」ゴーファーを目指そうというメッセージが語られています。

シリーズAスタートアップとしてGoを採用したアーキテクチャ設計により、スケーラブルな開発体制を構築。メガエンタープライズ向けSaaSとして高い品質とパフォーマンスを実現しています 。発表では28ページにわたりGoを活用した具体的なアーキテクチャ戦略が紹介されており、スタートアップにおけるGo言語の実践的な活用事例として注目されています 。

https://ademawan.medium.com/how-go-1-25-revolutionizes-error-handling-and-concurrency-in-go-applications-612099eda749

Go 1.25は、エラーハンドリングと並行処理の分野で大幅な改善をもたらしました。エラーハンドリングでは、エラーのラッピングやアンラップがさらに効率化され、より簡潔で読みやすいコードが書けるようになっています。また、errors.Unwrapやerrors.Isによる元エラーへのアクセス・型判定が容易になり、複雑なアプリのデバッグ性が向上しました。並行処理面では、ゴルーチンのスケジューリングやワークスティーリングが最適化され、マルチコア環境でのパフォーマンスや拡張性が強化されています。さらに、ゴルーチンリーク検出やchannel/selectの高速化も加わり、大規模並行ワークロードに対する信頼性と効率性が向上しました。これらの進化により、Go開発者はより高品質かつ効率的なアプリケーションを構築できるようになります。

https://medium.com/@sanyamdubey28/this-one-go-pattern-fixed-90-of-my-code-bugs-670b7186edd8

Go開発者がバグに悩まされた経験から、「構造化されたコンテキスト付きエラー処理」パターンを導入。従来の単純なif err != nilや未処理エラーが多くのデバッグ困難やサイレントエラーを招いていた。エラーをラップして発生場所や原因を明示し、カスタムエラー型やpkg/errorsによる標準化で全コードベースで一貫したエラー処理を実現。これによりバグの90%を排除、残る10%も根本原因の特定が容易に。導入の際はラップしすぎや未処理を避け、ログやテストも活用することが推奨される。

https://blog.stackademic.com/solid-principles-in-golang-179f92843289?gi=f1b3349c91e1&source=email-bba9c848450-1759686983751-digest.reader-d1baaa8417a4-179f92843289----7-98------------------0a7adfef_fe8b_49de_a938_f749a005fad6-1

SOLID原則は、保守性・拡張性・柔軟性の高いソフトウェアを実現するための5つの設計原則を指します。それぞれ、単一責任の原則(SRP: 1つの責任に絞る)、開放閉鎖の原則(OCP: 既存コードは修正せず拡張可能にする)、リスコフの置換原則(LSP: 派生型で置き換えても問題が起きない設計)、インターフェイス分離の原則(ISP: 最小限の用途に絞った分割インターフェイス)、依存性逆転の原則(DIP: 具体実装に依存せず抽象に依存)です。本記事ではGolangでの実装例を提示しながら各原則のメリットやポイントを具体的に解説しています。SOLID原則を守ることで、変更やテスト、機能追加が容易な堅牢なコードベースが実現できます。

https://leapcell.medium.com/make-vs-new-in-go-differences-and-best-practices-e11f12d2839f

Go言語のメモリ確保方法「make」と「new」の違いと使い分けを解説しています。「new」は全ての型に使え、ゼロ値で初期化されたメモリのポインタを返します。一方「make」はスライス・マップ・チャネルの初期化専用で、構造体そのものを返し、長さや容量を指定できるのが特徴です。構造体には「new」、スライスやマップには「make」を用いるのが基本。特にスライスやマップで「new」を誤用すると実体が初期化されずランタイムエラーになるため注意が必要です。シナリオや型に応じて適切な使い分けがGoらしい効率的なコードにつながります。

https://qiita.com/Yporon/items/323e74c57e23f7cf003a

この記事は、Go言語のGarbage Collection(GC)の仕組みと新しい「Green Tea GC」について勉強会で発表した内容のまとめです。GCは不要なメモリを自動回収し、安全で効率的な開発を実現する技術であり、GoではConcurrent Mark & Sweep方式が採用されています。従来GCの課題としてキャッシュヒット率の低さやメモリアクセスの非効率、ハードウェアトレンドとのズレが指摘され、Green Tea GCはメモリブロック単位でのスキャンによりこれらを改善。今後のGoバージョンでの導入と実用化が期待されています。

https://zenn.dev/drsprime/articles/go-test-cache-ci-optimization

Goのテストコマンドgo testはパッケージ単位で実行結果をキャッシュし、条件が一致すればキャッシュを再利用します。これによりCIの実行時間を大幅短縮できます。GitHub Actionsのセットアップ次第で自動利用されますが、Go以外のファイル変更時や非キャッシュ可能なフラグ使用時は偽陰性のリスクがあるため、キャッシュクリア処理が有効です。実際にCI時間が約半分になった事例も紹介。

https://levelup.gitconnected.com/build-an-asteroids-game-with-raylib-go-4a92475b492c

Go言語とRaylib-goを使った「Asteroids」ゲーム制作チュートリアル。キーボード操作で自機を動かし、シューティング、衝突判定、アステロイド分割、スコア管理など、基本的なゲーム開発手法を解説。GitHubにサンプルコードも公開。

ライブラリなど

https://zenn.dev/mixi/articles/f8f837812ece10

Gemini APIの「検索グラウンディング」機能をGoで実装する方法を解説。Google検索結果をリアルタイム参照することで最新情報取得やハルシネーション抑制が可能。出典URLはリダイレクト解決が必要。

https://zenn.dev/yuta_kakiki/articles/9ec93623cfdc81

Go 1.25で導入されたtesting/synctestパッケージは、単なるテスト用APIの追加ではなく、Goランタイム自体がこのパッケージに対応する形で大幅に改変されています。synctestはテスト実行を「バブル」と呼ばれる隔離環境内で実行し、仮想クロックを用いることで、time.Sleepなどの待機時間を一瞬で進められる特徴があります。これにより、非同期テストでありがちなflakyな結果を回避しつつ、高速化も実現します。バブル内のすべてのgoroutineがdurably blocked(同じバブル内でのみ解除可能な状態)であることを条件に、テストの待機と仮想時間の進行を制御できるため、より確実な並行処理のテストが可能となりました。

https://medium.com/@shashankbhatyes/understanding-sync-cond-in-go-b3279b645816

Go言語のsync.Condは、goroutine間で状態変化を通知し同期を取るための仕組みです。例として、複数のgoroutineがリソース(たとえばqueue)が空かどうかを待機し、状態が変化したときに通知を受けて処理を進めます。sync.Condはmutexと組み合わせて、待機側は条件が満たされない場合cond.Wait()で待機/スリープし、通知側はcond.Signal()やcond.Broadcast()で一部またはすべての待機中goroutineを起こします。ループで条件判定しながら使うのが推奨され、不意の起床にも対応できます。channelやsync.WaitGroupなどで代替できる場合はそちらを優先すると簡単ですが、より細かい制御が必要な場合にsync.Condが有用です。

Go言語で学ぶ並行プログラミング 他言語にも適用できる原則とベストプラクティス (impress top gear)

https://booklog.jp/users/ishisaka/archives/1/4295020664

読み終わったので、感想とまとめ。

本書は、基礎理論からランタイム、言語機能、設計パターン、アンチパターンまで縦断的に学べるため、Goで並行処理を本気で身につけたい読者に強く勧められる内容です。実装時の指針が増え、トレードオフを自分で評価する力が確実に養われます。

その他

OpenAI

https://www.youtube.com/live/hS1YqcewH0c

https://zenn.dev/schroneko/articles/openai-devday-2025

OpenAI DevDay 2025はサンフランシスコで開催され、ChatGPT用の「Apps SDK」や、AIエージェント構築ツール「AgentKit」「Agent Builder」が発表されました。また、開発者向けにCodexが正式リリースされ、Slack連携やSDKの提供も開始。さらにGPT-5 ProがAPI経由で利用可能となり、優先処理による高速化も導入。動画生成API「Sora 2」や画像・音声生成モデルの割引も発表され、全体的にOpenAIのサービス拡充が進んでいます。

今回の発表で、僕は、アプリケーションやサービスへの「窓」として、かつてはWindows、 現状はWebブラウザやスマートフォンが重要なように、これからはチャットインターフェイスが重要になっていくのだろうと考えています。

エンジニア

技術者と教養

https://anond.hatelabo.jp/20251004160446

技術書以外の本もちゃんと読もうな。人間生きていく上で人文的な教養はすごく大事。あと、美しいものを見よう。聞こう。

AIが仕事の仲間と入ってきたことで、人間の人間力が本当に試されてきていると思う。

システム思考

https://syu-m-5151.hatenablog.com/entry/2025/10/06/074220

この記事は、システム思考を実践する上で知っておくべき「12のシステムアーキタイプ」について、開発現場や組織で繰り返し発生する構造的な問題パターンを解説しています。システム思考とは、物事を個別ではなく全体の相互作用や構造で捉えるアプローチであり、アーキタイプはこうした反復する問題の「構造的原型」を指します。主な例として、好循環・悪循環、バランス型プロセスと遅延、うまくいかない解決策、問題の転嫁、成長の限界などが挙げられ、それぞれがどのようにループ構造や時間遅延、リソースの配分、目標の競合といった観点で発生するか説明されています。これにより、現場で直面する問題を「どのアーキタイプか」とひも付けて素早く認識し、典型的な解決策や介入ポイントが見つけやすくなります。また、システムアーキタイプは単なる理論でなく、実際の課題発見や対話の共通言語としても機能します。最後に「現実の問題は複数のアーキタイプが複合して現れる」ことや、繰り返し現れるパターンから本質を見抜く力(構造思考)の大切さが強調されています。

株式会社BALEEN STUDIO

Discussion