#
582
2025/12/25
今日のトレンド

うっかりミスとGo 1.26

どうもー、おはようございます。マイクです。
時刻は朝7時を少し回ったところ。今日は2025年12月26日、金曜日ですね。
ここからの時間は「zenncast」、きょうもZennで話題になっているトレンド記事を、ゆるっと楽しく紹介していきたいと思います。

今日はお便りコーナーはお休みで、そのぶんガッツリ記事を紹介していきます。
というわけで、きょう取り上げる記事はぜんぶで5本です。技術的な話もあれば、ちょっとエモい個人開発の話もあって、かなりバラエティ豊かです。

まず1本目。
タイトルは「うっかりミスでアクティブユーザー1万人超えのサービスをサ終させた話」。
これはね、個人開発やってる人は読んでて胃がキュッとなるタイプのやつです。ゲームの二次創作を共有するサービスを、趣味で一人運営してた方のお話なんですけど、月1〜1.5万人のアクティブユーザーがいる、もう界隈のインフラ的な存在になってたんですね。ただ、非公式だし収益化もしてない、Oracle Cloudの小さなVPSで細々やってたところに、必要なクライアントアプリが公式リリースされてアクセスが一気に爆増します。5000リクエスト毎分って、個人の趣味サーバにはかなりヘビーですよね。で、筆者の方がコロナで体調崩してる最中に、なんとかパフォーマンス改善しようとして、一覧取得をキャッシュするコードを書き換える。その時に、うっかり`.limit(20)`を消してしまって、ほぼ全リクエストで1.7万件超のレコードをフルスキャンして巨大JSONを返す、という致命的なバグを埋めこんでしまいます。8コア32GBに増強しても追いつかず、もともとモチベ低下やモデレーションの辛さ、月8000円のコストもあって、最終的にサービス終了を決断。その後にコミットミスに気づくんですが、時すでに遅し……。この記事がいいのは、「なにが悪かったか」をめちゃくちゃ冷静に振り返ってるところで、自動テストやヘルスチェック、焦り、コードレビュー不在、貧弱なテストデータなど、個人開発だと「まあいっか」で済ませがちなポイントが全部つながって「やらかし」になったと総括しています。一人でも、テストとレビュー(LLMも含めて)で機械的に自分を守ろう、そして自分のミスがコミュニティ全体に与える影響の重さ、そこまでちゃんと懺悔してるのが刺さります。個人開発やってる人、運用中サービスを抱えてる人は、他人事じゃないなと感じると思いますよ。

。。。。

続いて2本目。
タイトルは「Go 1.26 は、軽くなり速くなる」。
Go使いにはうれしいニュースですね。今回の1.26は、ド派手な新機能というより、「みんなが地味に嬉しい性能アップ」がメインのリリースです。キモになっているのが、これまで実験的だった「Green Tea GC」がデフォルトになったこと。ガーベジコレクションの仕組みを、ヒープをspan単位でまとめてスキャンする方式に変えることで、CPUキャッシュの効率がよくなって、GCのオーバーヘッドがざっくり10〜40%減ると。新しめのamd64 CPUだとさらに10%ぐらい良くなるケースもあるそうで、「特に何もしなくても、なんか速くなった」が期待できるアップデートですね。もうひとつが syscall/cgo/DLL 呼び出しの高速化。Go特有のGMPモデルの状態遷移で、不要なCASを1回減らしたことで、すごく短いsyscallやcgoをひたすらループで呼びまくるようなCPUバウンド処理だと、最大30%くらい速くなったという実測も出てます。ただ、read/writeみたいな重いシステムコールとか、普通のnet/httpアプリが劇的に速くなる、という話ではありません。go-sqlite3みたいな細かいcgo呼び出しが多いライブラリとか、そういうところで効いてきそうだよ、という位置づけです。全体としては、「Green Tea GCのおかげで、ほぼすべてのGoユーザーが、なんとなく得をする」リリース、とまとめられていました。Goを本番で使ってる人は、ベンチ取りながら上げたくなる内容ですね。

。。。。

3本目いきましょう。
タイトルは「新しいデザインシステム・コンポーネント管理のかたち『shadcn/ui registry』」。
フロントエンド界隈、とくにReactとかNext.js書いてる人は「shadcn/ui」の名前、よく耳にすると思うんですけど、その中にある「Registry」って機能にフォーカスした記事です。Registryってなにかというと、npmでライブラリを配るんじゃなくて、「CLI経由でコードをコピペ配布するための、ちゃんと構造化された仕組み」です。registry.jsonにコンポーネントやフックのメタデータを書いて、buildするとJSONが生成されて、それを公開しておく。使う側は `npx shadcn add xxx` みたいにして取得すると、プロジェクトの中に「自分のコード」として入ってきて、自由に改変できる、という世界観ですね。UIコンポーネントだけじゃなくて、フック、設定ファイル、ドキュメントもひとまとめに配布できて、「Universal Registry Items」によってフレームワーク非依存にも対応できる、と。npmと比べたときの強みとしては、「コードが自分のプロジェクトの所有物になるから、遠慮なく書き換えられる」「registryDependenciesで依存も自動解決」「JSON Schemaで機械可読だから、ツールやAIが扱いやすい」というあたりが挙げられてます。逆に、バージョン管理や上流の更新をどう取り込むかは課題なので、「npmを完全に置き換えるのではなく、用途で使い分けようね」というスタンスです。記事では「imaimai-ui」という例を通して、registry.jsonの具体的な中身やディレクトリ構成、Directory Registryでどうやって分散的に公開して発見性を上げていくか、かなり実践的に紹介されています。「コピペ文化」をちゃんと構造化して、個人や企業をまたいだ共通資産にしよう、というアイデアが面白いですね。

。。。。

4本目。
タイトルは「5年間 Laravel を使って辿り着いた,AI 時代に考える『なんちゃってクリーンアーキテクチャ』のその先」。
Laravelで大規模な開発をやっている人には、刺さる話だと思います。5年前に流行った「なんちゃってクリーンアーキテクチャ」、一定の効果はあったけど、アプリの規模や複雑さが増して、さらにAIがコードを大量に書いてくれるような時代になると、そのままでは限界が見えてきたよね、という振り返りから始まります。ポイントは、Eloquentへの依存が強すぎたり、モジュール間の境界が曖昧だったりすると、あとからAIに実装修正してもらうにしても、「どこまで触っていいのか」が分かりづらくなる、という問題意識です。そこで筆者が提案しているのが、Laravel上でのモジュラーモノリス構成+Contract+4層アーキテクチャ。Presentation / Application / Domain / Infrastructureというおなじみの4層を意識しつつ、モジュールごとに公開APIを「Contract」として定義して、他モジュールはこのContract経由でしか依存しないようにする。そしてdep tracで依存違反を静的にチェックすることで、「アーキテクチャの約束」をツールで守る、という発想ですね。Domainは純粋なPHPとRepositoryインタフェースでビジネスルールを持ち、Infrastructure側でEloquent実装やDB例外変換を担当する。IDはValue Object化して型安全に扱い、例外もDomain/Technicalを分けつつNotFound用のマーカーを用意しておく。さらに、PHP 8.4で入るProperty Hooksやインターフェースプロパティを活用したReadonly Entity設計の話も出てきて、「AIに大量実装させる前提で、境界と責務を先にきっちり設計しよう」というメッセージになっています。Laravelを書いてる人だけじゃなく、「AIをチームメンバーに入れるにはアーキから見直さないとね」と考えている人にもヒントの多い記事でした。

。。。。

そして5本目。
タイトルは「ゲームエンジンを自作する際のテキスト描画機能」。
これはゲームエンジン/ライブラリをゼロから作ってみたい人に向けて、「テキスト描画って、ちゃんとやろうとするとこんなに要素があるよ」と一望させてくれる記事です。まずフォント管理。TTF/OTFはもちろん、フォントコレクション、カラーフォント、Variable Font、埋め込みビットマップ、フォールバック、内蔵フォント、メタデータの取得など、「あ、これもいるわ……」がどんどん出てくる。次にラスタライズでは、ビットマップとSDF/MSDF、そして静的・動的アトラスの扱いまで押さえています。レイアウトの話になると、アンカーやベースライン、行間・字間だけじゃなく、禁則処理や改行ルール、省略記号、縦書き、右から左の言語、合字、ルビ、自然言語ごとの分割、描画領域の計測など、本気のゲームUIで必要になる機能がずらっと並ぶんですね。文字コード周りでは、Unicode完全対応、絵文字やアイコンフォント、グリフが存在するかの確認など。装飾も、ボールド・イタリックだけでなく、カラーやグラデーション、アウトライン、影・光彩、下線、インライン画像、カスタムシェーダによる表現などを挙げています。さらに、タイプライター風の表示や文字単位アニメーション、反転や反射といった演出、輪郭パス/ポリゴン/ビットマップの取得、描画のバッチングやレイアウトキャッシュ、リッチテキスト表現までカバーしていて、「テキストって、ゲームの中でこんなにも重要な機能なんだな」と改めて実感させられます。Siv3D v0.8の実装を例にしつつ、どこまでやるかの優先順位付けにも役立つ内容でした。

。。。。

ということで、きょうのzenncastでは、
うっかりミスからサービス終了まで至った個人開発のお話、
Go 1.26でGCとsyscall周りが軽く速くなる話、
shadcn/uiのRegistryを使った新しいコンポーネント配布のスタイル、
LaravelでAI時代を見据えたアーキテクチャの再設計、
そしてゲームエンジン自作におけるテキスト描画機能の総ざらい、
この5本をお届けしました。

気になった記事があれば、詳しい内容や元記事へのリンクはショーノートにまとめてありますので、ぜひそちらもチェックしてみてください。
番組の感想や、「この技術取り上げてほしい!」といったリクエストも、どしどしお待ちしています。

それでは、きょうも一日たのしく、ゆるく、良い開発ライフを。
お相手はマイクでした。また次回のzenncastでお会いしましょう。

Related episodes

内容の近いエピソードを推薦しています