#
874
おはようございます!「zenncast」、MCのマイクです。今日は10月12日、月曜日。朝7時、みなさん、いかがお過ごしでしょうか。

今朝も、Zennで今日トレンドの記事から、気になる技術の話題をお届けします。コーヒーのお供に、あるいは移動中の耳のお供に、気軽にお付き合いくださいね。

今日ご紹介する記事は、全部で5本です。それでは、さっそくいってみましょう!

....
まず1本目は、SQLite開発チームが作ったベクトル検索拡張、「vec1」のお話です。

ベクトル検索は、データを数値で表して、似ているものを探す仕組み。vec1を使うと、専用のデータベースを別に用意しなくても、アプリに類似検索を組み込めます。さらに、検索結果を通常のSQLでほかのデータと結び付けられるんです。検索だけ別の仕組みに切り離さず、SQLiteのデータと一緒に扱えるのは、うれしいポイントですね。

検索の方法は、データの量によって変わります。少量なら、すべてのデータを比較します。一方、大量のデータでは、数値を圧縮したうえで、近そうな範囲だけを調べることで、高速に検索する仕組みです。

記事では、言語モデルを使わない例も紹介されています。単語の音を数値化して、「hamburger」から「ハンバーガー」を探すというものです。意味だけでなく、音の近さを手がかりに探せるというのも、面白いですよね。

ただし、導入には注意点があります。vec1はSQLite本体のソースには入りましたが、配布パッケージにはまだ収録されていないため、自分でビルドする必要があります。また、現在はバージョン0.8で、テストも十分ではありません。まずは試してみるところから始めて、実運用に使うかどうかは慎重に判断したいですね。

....
続いて2本目は、短い説明動画を作る新機能、「Claude Motion」です。

Claude Motionは、指示文や、手元にある資料、グラフ、画像などをもとに、短い説明動画を作れる機能です。TeamとEnterprise向けのベータ版として提供されていて、動画はMP4で書き出せます。

特徴は、動画生成モデルで映像を作るのではなく、Claudeが書いたコードで素材を動かすこと。これによって、数字や文言を保ったまま、必要な部分だけを修正できるんです。

説明動画では、「この数字は絶対に変えたくないけれど、ここの見せ方だけ直したい」という場面がありますよね。そうした修正に対応できるのが、大きなポイントです。

筆者が試したところでも、指定した箇所だけを直すことができたそうです。さらに、エディタでは、シーンの長さや動きのタイミングを細かく調整できました。

一方で、見た目の良さは、生成されたコードの出来に左右されます。また、BGMは1種類に限られていたとのこと。細かく直せる便利さがある一方、仕上がりの見栄えや音楽の選択肢には、まだ制約があるということですね。

....
ここから3本目。暗号の基本と、「暗号化していれば安全」とは限らない、というお話です。

まず、共通鍵暗号は、同じ鍵で暗号化と復号を行う方式です。代表例はAES。ただ、通信する相手と、その鍵を安全に共有する必要があります。

それに対して、公開鍵暗号では、公開鍵と秘密鍵を使い分けます。通信では、鍵交換によって共有鍵を確立してから、実際のデータのやり取りには高速な共通鍵暗号を使う方法があります。鍵を共有する段階と、通信する段階で、仕組みを使い分けるわけですね。

さらに、デジタル署名は、送信者や、データが改ざんされていないかを確認する仕組みです。ハッシュは、データを固定長の値に変換するもの。信頼できる値と比較することで、データの変更を検知できます。

そして、この記事で特に押さえたいのが、暗号化だけでは改ざんを防げない、という点です。たとえばAES-CBCでは、鍵を知らなくても、取引金額を書き換えられる場合があるそうです。中身を読めないことと、中身を変えられないことは、同じではないんですね。

そのため、AES-GCMや、改ざんを検知するMACを使うことが重要になります。

なお、記事に登場する例は学習用で、そのまま実装に使うべきではありません。AIが生成したコードについても、安全な方式や認証が使われているか、人間が確認する必要があります。動いたから大丈夫、で終わらせず、安全性まで確かめたいところですね。

....
続いて4本目は、画像生成AIの無駄な課金を減らすための、事前判定の実装です。

画像生成AIには、生成を拒否した場合でも料金がかかるモデルがあります。そこでこの記事では、文章と画像を2段階で事前判定し、無駄な課金を減らす方法を紹介しています。

最初に使うのは、文章に強いJevです。プロンプトを46問で判定します。その判定を通過した依頼に参照画像があれば、今度は画像を読めるClefで、画像の内容と編集後の結果を12問で確認します。それぞれの得意分野を生かした役割分担ですね。

費用と応答時間を減らす工夫もあります。Clefに渡す画像は192ピクセルに縮小し、質問も画像に関する内容に絞ります。これによって、判定精度をほぼ維持しながら、コストと待ち時間を抑えているそうです。

依頼を拒否する基準値は、一律ではなく、判定モデルと画像生成モデルごとに設定します。また、基準の調整に使うデータと、評価に使うデータは分けておき、本番の結果も見ながら誤判定を抑えていきます。

判定そのものに失敗したときは、そのまま画像生成には進まず、利用者に再送を促します。そして、判定の回答を24時間キャッシュすることで、同じ依頼を何度も判定する手間を省きます。この回答は、基準値を変更したあとも再利用できるとのことです。

単に判定を挟むだけでなく、失敗時の対応や、キャッシュの扱いまで考えられているのが、実装の参考になるポイントですね。

....
最後、5本目は、Actionの安全性を高める「SHA Pinning」と、その先にある注意点です。

SHA Pinningは、Actionを特定のコミットに固定する方法です。タグの参照先が付け替えられることによる攻撃を防げます。

ただし、ここが大事です。Actionを固定しても、そのActionが実行時に取得するものまで固定されるわけではありません。外部から取得するバイナリやコンテナ、さらに内部で呼び出す別のActionにも注意が必要なんです。

利用者側の対策として紹介されているのが、「Enforce SHA Pinning」を有効にすること。自分のワークフローだけでなく、呼び出し先のActionの中にあるタグ参照も検査して、実行前に止められます。

バイナリについては、バージョンを指定したうえで、改ざん確認用のchecksumを自分のリポジトリに保存します。同じ配布元からchecksumも取得すると、バイナリ本体と一緒に差し替えられる恐れがあるためです。確認用の値をどこに置くかも、大切なんですね。

また、コンテナはタグではなく、内容を識別するダイジェストで固定します。

Actionを開発する側にも対策があります。既定値をlatestにせず、checksumをAction内に保存すること。そして、公開済みのタグや配布ファイルを変更できなくする「Immutable Releases」も、有効な対策です。

入口のActionだけでなく、その先で取得するものまで目を向ける。安全性を考えるときに、覚えておきたい視点ですね。

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

SQLiteで類似検索を実現するvec1、部分修正ができる説明動画作成機能のClaude Motion、暗号化と改ざん対策の違い、画像生成AIの課金を抑える2段階の事前判定、そしてSHA Pinningの先まで考えるActionの安全対策でした。

詳しい内容はショーノートに書いてありますので、気になった記事をぜひチェックしてみてくださいね。

番組の感想もお待ちしています。「この話題が面白かった」「こんな技術の話も聞きたい」など、気軽に声を届けてもらえるとうれしいです。

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

それでは、次回もみなさんにお会いできるのを楽しみにしています。今日も、よい1日をお過ごしください。「zenncast」、お相手はマイクでした!

Related episodes

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