どうもこんばんは、マイクです。FMラジオ「zenncast」、2026年5月16日、土曜日の朝7時をまわりました。皆さんいかがお過ごしでしょうか。今日もZennで話題になっているトレンド記事を、ゆるっと楽しくご紹介していきたいと思います。
今日は全部で5本の記事を紹介していきます。それぞれジャンルもバラバラで、インフラからAIコーディング、Rust、エージェント基盤まで盛りだくさんなので、気になるところだけ聞き流してもらっても大丈夫です。
まず1本目。「LaravelをHTTPS公開した5分後、世界中のbotが叩いてきた」という記事です。タイトルからして、インターネットの怖さが全部詰まってますよね。内容としては、certbotでHTTPS証明書を取得してLaravelのサイトを公開したら、わずか数分で世界中の自動ボットからアクセスが殺到した、という体験談です。Mozi.aというマルウェアが仕込まれた/shellを探してきたり、WebLogicのT3プロトコルを探るスキャン、.git/configとか.envの漏洩チェック、オープンプロキシの確認など、とにかくいろんな種類の攻撃が一気に飛んでくると。理由は、証明書が発行されるとCTログに載って、それを監視しているスキャナーが「お、新しいドメインだ」とすぐ叩きにくるからなんですね。で、著者の方は、Laravel公式が推奨しているnginx設定をきちんと使って、PHP実行をindex.phpに限定したり、ドットファイルを一括拒否して、.envや.gitへのアクセスを防いでいます。さらに、セキュリティヘッダーを追加したり、X-Powered-Byを隠して情報を出さない工夫もしている。そして地味だけど効くのがログ設計で、vhostごとにaccess_logを分けて、$hostや$request_id、$upstream_response_time入りの独自フォーマットにして、攻撃や性能問題を追いやすくしているんですね。最後は、次回はfail2banでスキャン元IPを自動ブロックする話につなげていて、「とりあえず公開してみるか〜」の怖さと、最初からちゃんと守りを固める大事さがよく伝わる記事でした。個人開発でさくっとデプロイする人ほど、一度読んでおくと心の準備ができると思います。
。。.。。.。..
続いて2本目。「Claude Codeの1000 セッションを分析して、一週間目でリードタイムを10%縮めた話」です。これはAIコーディングをチーム全体でちゃんと使いこなしていこう、という組織的な取り組みのレポートですね。グロービスさんの事例で、AIコーディングツールをClaude Code CLIに揃えたうえで、約1000件分のセッションログを分析。その結果をもとに共通のHookを整備したら、月100時間の開発時間削減と、リードタイム10%短縮を達成したという話です。具体的な打ち手が面白くて、まずひとつは「進めてもよいだけの確認」をHookで自動承認しちゃうこと。人間が「これコミットしていい?」って毎回聞かなくてよくなるので、待ち時間が減ります。次に、AIの各応答のあとに自己レビュー用チェックリストを挟み込む。コードは本当に動く?APIパラメータ合ってる?推測で書いたところは「未確認」と明示した?みたいなポイントをAI側に徹底させて、「それ本当?」って開発者が聞き直さなくて済むようにする工夫ですね。さらに、PreToolUse Hookでmasterやmainへの直接コミットを自動ブロックして、ブランチ切り忘れも防止。これらを支える基盤として、Stop hookでセッション終了時に全文を公開鍵暗号化して専用リポジトリに集約して、秘密鍵を持った専任エンジニアがClaudeを使って横断分析している。つまり、個々人の工夫で終わりがちな「AIの使い方改善」を、DevEx施策として組織的に回しているわけですね。開発者のフローを変えず、余計な作業も増やさず、でもきちんと計測してhuman in the loopを減らせるところから減らしていく。この「仕組み化」の話は、AI活用をチームで進めたい人にはかなり参考になると思います。
。。.。。.。..
3本目。「Amazon S3 Vectors で、ベクトル DB を立てずに画像検索 PoC を作る」という記事です。これはベクトルデータベースをフルで構えるほどじゃないけど、画像の内容ベース検索を試してみたい、そんなPoCの話ですね。建設・施工管理SaaS「KANNA」で大量の現場写真を、自然言語で検索できるようにしたい。でも専用のベクトルDBを立ち上げるのは、検証フェーズにはちょっと重い。そこで、S3 VectorsとBedrockのTitan Multimodal Embeddingsを組み合わせて、画像とテキストを同じベクトル空間に埋め込み、ベクトルと案件UUIDなどのメタデータをS3 Vectorsに保存します。ユーザーからのテキストクエリも同じ埋め込みモデルでベクトル化して、S3 Vectorsに類似検索を投げて、近い画像を返すプロトタイプを作っています。構成としては、FlaskでAPIを用意して、フロントはReactで簡単なUIを作り、S3と同じ世界観のままベクトル検索のPoCをサクッと試せるようにした感じですね。メリットとしては、S3に慣れているチームならインフラのハードルが低いことと、メタデータフィルタが意外と便利だったという点。一方で、課題もちゃんと書かれていて、レイテンシがどれくらい出るか、画像の更新・削除パイプラインをどうするか、Bedrockのコスト、メタデータの上限、本番運用にするなら同期設計や認可、コスト試算、検索品質の評価など、宿題も多いと。著者は、S3 Vectorsを「本番の基盤」というよりは、「検証フェーズの摩擦を最小化するための手段」と位置づけていて、そのバランス感覚がいいなと思いました。まずは簡単に試したい、という方にはかなり現実的なアプローチが紹介されています。
。。.。。.。..
4本目。「Rust で型を渡すだけで実装が選ばれる仕組みを理解する」という記事です。Rustを書き始めた人が一度は思う、「なんで型を書くだけで、いい感じに実装が選ばれるの?」っていう疑問に、ちゃんと踏み込んで答えてくれている内容ですね。記事では、RenderというトレイトとRendererという型を用意して、Render<i32>とRender<bool>の実装を用意する。そして、fn dispatch<T>(...) where Renderer: Render<T> という関数を例に、呼び出し側がTとしてi32を選べばRender<i32>の実装が、boolを選べばRender<bool>の実装が、コンパイル時に一意に決まる様子を説明しています。ここでポイントになるのが「単相化」と「静的ディスパッチ」で、ジェネリクスを使った関数は、コンパイル時に具体型ごとに複製される。つまり、dispatch<i32>用の関数本体と、dispatch<bool>用の関数本体が別々に生成されて、実行時には「どっちの実装を呼ぶか」という分岐がそもそも存在しない。だから高速だし、型ごとに最適化されたコードが走るわけですね。この仕組みがわかると、標準ライブラリのparseやcollect、From系トレイト、axumのextractor、async-graphqlのDataLoaderなど、「引数の型に応じて勝手にいい感じになる」APIの裏側が見えてきます。記事では、この「型に紐づく実装がコンパイル時に選ばれている」という感覚を丁寧に言語化してくれているので、Rustでライブラリやフレームワークのコードを読もうとしている人には、かなり理解の助けになる内容でした。
。。.。。.。..
そして最後、5本目。「Agent Registry で動的に Harness (MCP/Skill) や A2A Agent を検索・実行する Agent の実装」という、かなり濃い目の記事です。これは、AWS Agent Registryを使って、組織内に散らばるAgent、MCPサーバー、Skills、A2A Agentを一元管理し、必要なときにだけ動的にロードして使う「Dynamic Load Agent」をどう作るか、という話ですね。RegistryはRecord単位で、A2A、MCP、AGENT_SKILLS、CUSTOMといったdescriptorTypeを持っていて、承認済みRecordをMCP経由で検索できるようになっています。A2AはAgentCore Runtimeとserve_a2aでAgentCardを公開し、MCPはFastMCPをRuntime上に載せる。SkillsはSKILL.mdというファイルにfrontmatterと本文で定義して、Progressive Disclosure、つまり必要な情報を段階的に出していくスタイルをとっています。肝心のDynamic Load Agentは、自分自身はローカルのtoolを持たず、Registry検索用のMCPだけを持っているのがポイント。AfterToolCallEvent Hookでsearch_registry_recordsを使い、その結果からA2AやMCP、Skillsを動的に注入していきます。このとき、巨大な検索結果のJSONは、そのままコンテキストに残さず、1行サマリに書き換えてコンテキスト消費を抑えているのも実践的です。MCPの場合はendpointからMCPClientを生成してtool_registryに登録し、A2AはA2AAgentを@toolでラップして「1 Agent = 1 tool」として扱う。SkillsはAgentSkillsプラグインのset_available_skillsでSKILL.mdを読み込んで有効化する。こうして、「Registryで検索 → 自動でロード → すぐ実行」というサイクルを回せるようにすることで、新しいMCPやSkills、A2AをRegistryに登録するだけで、既存のAgentから利用できる共通基盤を作っているわけですね。エージェントのスプロールをどう管理するかに悩んでいる組織にとっては、ひとつの答えになりそうな実装です。
。。.。。.。..
というわけで今日は、1本目が「Laravel公開5分で世界中のbotに叩かれた話」、2本目が「Claude Codeセッション1000件分析でリードタイム10%短縮」、3本目が「Amazon S3 VectorsでベクトルDBなしの画像検索PoC」、4本目が「Rustで型を書くだけで実装が選ばれる仕組み」、5本目が「Agent RegistryでMCPやA2Aを動的ロードするエージェント実装」、この5本をご紹介しました。気になった記事があれば、詳しい内容は番組のショーノートにまとめておきますので、あとでゆっくりチェックしてみてください。
「zenncast」では、番組の感想や取り上げてほしいテーマなど、皆さんからのメッセージもお待ちしています。「こんな技術の話をしてほしい」「この前の回が役に立ったよ」なんて一言でも嬉しいので、ぜひ気軽に送ってください。
それでは、そろそろお別れの時間です。次回もZennのトレンド記事を一緒に追いかけていきましょう。お相手はマイクでした。また次回、お会いしましょう。