おはようございます! zenncast、MCのマイクです。10月28日、水曜日、朝7時になりました。今日もZennでトレンドになっている記事から、気になる話題をお届けします。
今日は、AIを活用したテストの運用から、学生2人が開発した音声対応モデル、判断に特化した言語モデル、OpenWrtの広告フィルタ設定、そしてV8の高速化まで、5本の記事をご紹介します!
....
まず1本目は、AIにテストの作成や修正を任せて、E2Eテストの確認範囲を広げていこう、というお話です。
主要な操作だけでなく、画面や操作、API、権限など、あらかじめ決めた対象を広く確認していく考え方です。ただし、あらゆる組み合わせを全部テストする、ということではありません。
そこで大事になるのが、実装とテストの対応表です。確認対象はソースから自動で抽出し、AIがそれぞれをテストに結び付けます。さらにCIで、実装、対応表、テストの3つを照合することで、新しい機能のテスト追加漏れや、すでに削除された機能への参照を検出します。
ただ、対応表がきれいにそろっているだけで、確認の中身まで十分とは限らないんですね。AIには操作手順だけではなく、仕様上の正しい結果も伝える必要があります。たとえば「保存を押す」で終わらず、「画面を開き直しても、保存した値が残っている」ところまで確認させる、ということです。
実行環境にも工夫があります。ローカルでは、作業ごとに専用のWeb、API、DBを用意して、並列実行でお互いに干渉しないようにします。普段は変更に関係するテストだけを動かし、大きな改修のときには全体を実行する、という使い分けです。
さらに、E2EライブラリのAI操作や、操作の記録と再生、探索の機能も活用します。ただし、探索で見つかった問題には誤検知もあるので、再現できるか、仕様として本当に問題なのかを確認することが必要です。ユニットテストも引き続き併用します。
AIにたくさん動いてもらうからこそ、「何を確かめてほしいのか」を人間が明確にする。ここが運用の土台になりそうですね。
....
続いて2本目は、学生2人が開発した、日本語の音声指示にテキストで答えるLLMの話題です。
このモデルは、FT-LLM 2026の自由形タスクで1位を獲得しました。Whisper-large-v3と、国産のLLM-jp-4 8Bをつなぐ構成で、対話用と文字起こし用、2つのモデルが公開されています。
開発で課題になったのが、日本語の音声指示データの不足です。そこで、テキストを読み上げるTTSを使い、約1,000時間分の音声を合成しました。
道のりは順調だったわけではなく、開発基盤の不具合で難航したそうです。それでも、仕組みを把握しやすい実装へ切り替え、残り約3週間で成果を形にしています。学生2人でこの立て直し、すごいですね。
日本語の対話評価では、Voxtral MiniやGemma 3nをわずかに上回る結果となりました。ただし、評価には誤差がありますし、合成音声を使った評価による偏りにも注意が必要です。数字だけで、あらゆる場面で優れていると判断するのは避けたいところです。
公開されているのはモデルだけではありません。学習コードと合成データも公開されていて、無料のデモでは音声対話を試せます。
成果に加えて、その成果をどう作ったかまで共有されているのがうれしいですね。日本語の音声モデルに取り組みたい方にとっても、参考になる取り組みです。
....
3本目は、文章を作るのではなく、選択や判断に特化した言語モデル、Jevの紹介です。
Jevは、追加の学習をしなくても、選択肢からの分類や、点数付け、真偽の判断ができます。そして、分類結果や確率などを、決まった形式のデータで返してくれます。
記事では、問い合わせを「営業」と「通常」に仕分ける処理に導入して、従来のLLMと比較しています。29件の問い合わせをそれぞれ10回ずつ判定したところ、この検証では、Jevは合計290回すべて正解でした。
応答時間の中央値は375ミリ秒。比較対象に対して、約4倍の速さだったということです。
特徴は、分類ルールを指示で変更できる柔軟さを保ちながら、文章生成にかかる待ち時間を減らせるところです。今回のように、必要なのが説明文ではなく「どちらに分類するか」という結果なら、判断に特化したモデルが選択肢になるわけですね。
AIに何か頼むとき、つい文章を返してもらうことを前提にしがちですが、欲しいものが判断結果だけなら、そこに合った仕組みを選ぶ。そんな視点をもらえる記事です。
....
続いて4本目は、OpenWrtで広告フィルタを使っている方に、ぜひ確認していただきたい設定変更のお話です。
OpenWrt 25.12のadblock 4.5では、旧設定のままだと広告フィルタが無視されます。豆腐フィルタのruleは、これまでのawk式から、feed、接頭辞、列、区切りを指定する新しい形式へ変更する必要があります。
ここで注意したいのが、標準の短いruleに置き換えるだけでは、意図しない遮断が起こることです。本来は特定のページだけを対象にするルールまで、ドメイン全体を遮断する扱いになってしまい、XやLINEも使えなくなることがあります。
記事では、接頭辞や列、区切りの条件を指定して取り込む行を絞り、この問題を避けています。具体的な設定内容は、記事で確認してくださいね。
有効化には2つの設定が必要です。カスタムフィードとして定義を登録すること。そして、そのフィードを実際に使用する対象として選ぶことです。両方を済ませたうえで、adblockを再起動します。
動作確認も、「有効」と表示されているか、ブロック件数が出ているか、だけでは不十分です。Xなどのサービスがちゃんと使えることと、広告ドメインが実際に遮断されること、その両方を確かめます。
また、OpenWrtの更新時には、追加パッケージの再導入も必要です。25.12では、パッケージの管理コマンドがopkgからapkに変わる点にも注意してください。
設定が通ったことと、狙いどおりに動くことは別。更新後は、普段使うサービスも含めて確認しておきたいですね。
....
最後、5本目は、V8のArray.prototype.lastIndexOfを高速化した事例です。
これは、配列を後ろから調べて、一致する値の位置を返す機能です。今回の改善では、配列と探す値の型に応じて、処理を分けています。
まず、小数を格納するdouble配列です。これまでは比較のたびに、数値をHeapNumberというオブジェクトに包む処理がありました。その処理をなくして、生のfloat64同士を直接比較するようにしたところ、数値の全走査が約2.4倍から3.1倍速くなりました。
さらに大きな差が出たのが、double配列から文字列やNaNを探すケースです。これらは仕様上一致しないため、配列を走査すること自体をやめて、即座に「見つからない」と返すようにしています。
10万要素を使った測定では、最大で約26,000倍の高速化が確認されました。ものすごい数字ですが、ポイントは、同じ探索を猛烈に速くしたというより、不要な探索をしないようにしたことなんですね。
整数やオブジェクトの配列でも、まず簡単な比較を行い、必要な場合だけ詳しく比較するようにしています。
仕様を理解して、やらなくてよい処理を見極める。処理を速くするだけでなく、処理そのものを省けないか考える大切さが伝わる事例です。
....
さて、今日のzenncastは、AIを活用したE2Eテストの運用、学生2人による日本語の音声対応LLM、判断に特化したJev、OpenWrtの広告フィルタ設定の注意点、そしてV8の探索処理の高速化、以上5本をお届けしました。
詳しい内容はショーノートに書いてありますので、気になった記事をぜひチェックしてみてください。
番組の感想もお待ちしています。「この話題が面白かった」「こんな技術も取り上げてほしい」など、気軽にお寄せくださいね。
この番組はSpotifyやApple Podcast、YouTubeなどで毎日配信しています。気に入っていただけたら、登録や高評価をつけてもらえるとうれしいです!
それでは、次回もお会いできるのを楽しみにしています。今日もいい1日をお過ごしください。マイクでした!