#
897
2026/11/3
今日のトレンド

AIとISUCONや構造化出力など

おはようございます!「zenncast」、MCのマイクです。11月4日、水曜日、朝7時になりました。今日もZennでトレンドになっている記事を、皆さんと一緒にチェックしていきますよ。

今日は5本の記事をご紹介します。AIに任せる開発の工夫から、出力や文書のチェック、そして安全にパソコンをシャットダウンする設定まで。さっそくいきましょう!

....
まず1本目は、Webアプリの高速化を競うISUCONで、AIと一緒に好成績を収めたお話です。

筆者は、人間が方針を伝えて、実装、計測、そして結果の判断をAIに任せる進め方で、856チーム中12位に入りました。なかなかの成果ですよね!

その土台になったのが、作業の手順や記録、そして別のAIによる点検です。こうした仕組みを用意したことで、人間が約40分席を外している間も改善が進み、スコアは約4.5倍になったそうです。指示を出すだけではなく、AIが作業を続け、結果を確かめられる環境を整えたわけですね。

ただし、課題もありました。改善を一つずつ試していく進め方では、アプリ全体を大きく作り替える判断に着手するのが遅れたんです。

筆者は、日々の改善をAIに任せられても、大きな設計方針を決める役割は人間に残っていた、と振り返っています。目の前の改善を積み重ねることと、全体を見て進む方向を変えること。この2つをどう分担するかが、AIとのチームワークの鍵になりそうですね。

....
続いて2本目は、Amazon Bedrockの構造化出力についての記事です。

これは、指定したJSONスキーマに合わない文字列を、生成の段階で候補から外す機能です。出力したあとで形式を確認するだけではなく、生成している途中から、指定の形式に収まるように制約をかけるんですね。

筆者の検証では、プロンプトだけで形式を指定した場合、多くの攻撃で形式が崩れました。一方、この構造化出力を使った場合は、正常終了した応答の形式は崩れなかったそうです。ここは「正常終了した応答」という条件も、しっかり押さえておきたいところです。

ただ、形式が正しいことと、内容が正しいことは別なんですね。情報が足りないと、その穴を埋めるために、架空のメールアドレスや日付が入ることがありました。構造化出力でも、値の正しさまでは保証されません。

さらに、値がない必須項目があると、出力が止まらなくなる場合もあるとのこと。対策としては、不明な値にはnullを許すこと。そして、途中終了した応答は除外し、業務上のルールに沿って値を検査する処理も残すことが重要です。

きれいな形式で返ってくると、つい安心したくなりますが、器と中身は分けて確認する。そんな実務的な注意点がよくわかる記事です。

....
3本目は、Markdown文書をルールに沿って検査するCLIツール、regomarkの紹介です。

対象となるのは、設計上の決定を記録するADRなどの文書です。AIにADRを書いてもらっても、指示だけでは形式や内容がなかなか揃わない。そんな問題に対応するツールなんですね。検査のルールはRegoで記述します。

大きな特徴は、構造の検査と、意味の検査を分けることです。

たとえば、節が決められた順序で並んでいるか、Statusが適切か、リンク切れがないか。こうした機械的に調べられる項目は、問題があればCIを失敗させます。

一方で、その文書が設計の決定を記録するものではなく、仕様書や手順書のような内容になっていないか。こうした意味に関わる部分はLLMに判定させ、注意だけを出す仕組みです。はっきり判定できるものは厳密に、解釈が入るものは注意として扱う。この分け方がポイントですね。

検査ルールとLLMへの質問は、同じRegoファイルで管理できます。さらに、文書の解析から結果の出力まで、単一の実行ファイルで扱えるとのことです。

AIに文書を書いてもらうだけでなく、チームで使える品質に整えるところまで仕組みにする。文書が増えてきた現場で、気になるツールではないでしょうか。

....
続いて4本目は、Claude Codeで機能を継ぎ足していく中で見えてきた、全体設計の重要性についてです。

筆者は、要件が固まらないまま機能を追加した結果、テストは通っているのに、画面ごとに金額や動作が食い違う状態になったそうです。個々の機能は動いていても、サービス全体では整合性が取れていない。これは悩ましいですよね。

記事では、AIは依頼された画面の周辺を読む一方で、業務全体の流れや、過去にどんな理由で設計を決めたのかまで、自動で把握するわけではないと指摘しています。

そこで対策として挙げられているのが、用語や数値の扱いをまとめた台帳と、画面一覧を用意することです。共通の言葉や計算の前提、どんな画面があるのかを明確にしておくんですね。さらに、型や自動検査を使って、ルール違反が起きるのを防ぐ必要があります。

生成AIに実装を任せられる時代だからこそ、人が全体を設計して指揮する力が重要になる。これが記事のメッセージです。

1本目のISUCONのお話にも通じますが、作る作業を任せることと、何をどう作るかを決めることは、分けて考えたいですね。

....
最後、5本目は、ラズパイからWindows PCを停止するquenchを、安全に動かすための設定です。

今回使うのは、管理者アカウントではなく、専用アカウントのsvc-powerです。狙いは、もし鍵が漏れてしまっても、被害をシャットダウンに限定すること。必要な操作だけを許す、という考え方ですね。

まず専用のSSH鍵を作り、認証は公開鍵認証だけを許可します。接続元も、ラズパイの固定IPに絞ります。そして鍵ファイルは、管理者とSYSTEMだけが変更できる場所に置くという構成です。

さらに、ForceCommandで実行内容をshutdownに固定します。ポート転送や対話用ターミナルも無効にして、この接続が別の操作に使われないように制限します。

ここで、実際の環境ならではの注意点も紹介されています。記事の環境では、通常のシャットダウン権限だけでは失敗したそうです。「リモートからの強制シャットダウン」の権限を追加することで、解決しています。

設定を進めるときは、まず無害なコマンドで制限が正しく効いているかを確認します。そのうえで、設定の文法チェックを行ってからSSHを再起動する、という手順です。

なお、接続先と鍵の切り替えはSSH設定で行うので、quench本体を変更する必要はありません。便利な遠隔操作に、どこまでの権限を渡すのか。そこを丁寧に絞り込んだ設定の紹介でした。

....
さて、今日のzenncastは、5本の記事をお届けしました。

AIと挑んで856チーム中12位に入ったISUCON、形式と内容を分けて考えたいAmazon Bedrockの構造化出力、文書の構造と意味を分けて検査するregomark。そして、Claude Codeでの開発から考える全体設計の大切さと、quenchを専用アカウントで安全に動かす設定でした。

任せるところと、人が確認して決めるところ。その境界を考えるヒントが、いろいろありましたね。

詳しい内容はショーノートに書いてありますので、気になった記事をぜひチェックしてみてください。番組の感想もお待ちしています。「この記事が気になった!」という一言でも、ぜひ聞かせてくださいね。

この番組はSpotifyやApple Podcast、YouTubeなどで毎日配信しています。気に入ったら、登録や高評価をつけてもらえるとうれしいです!

それでは、次回も皆さんにお会いできるのを楽しみにしています。今日も無理なく、いい一日を。お相手はマイクでした!

Related episodes

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