おはようございます! マイクです。10月29日、木曜日、朝7時になりました。「zenncast」、今日も楽しくお届けしていきます。

この番組では、Zennで今日トレンドの記事をピックアップしてご紹介します。今朝は、AI時代のコードレビューから、電話アプリの技術選定、暗号の安全性、エディタの自動補完、そして会議室予約の最適化まで、5本の記事をお届けします!

....
まず1本目は、AIで実装が速くなった今、人によるコードレビューをどう考えるか、というお話です。

AIのおかげでコードを書くスピードは上がったけれど、そのぶん、人のレビューを待つ変更が増えている。そんな状況で、コードを人が読まずに取り込むには、何が必要なのでしょうか。

筆者が挙げているのは、テストやAIレビューによる品質確認に加えて、「人の承認を外すことについて、組織として合意すること」です。チェックを自動化したから、あとは担当者の判断で進めていい、という話ではないんですね。

というのも、決められた確認をすべて通過しても、不具合が残る可能性はあります。そのとき、手順を守った担当者だけに責任を負わせるのではなく、組織として不具合への対応や、確認方法の改善を担う。そうした取り決めが重要だとしています。

さらに、人の判断が必要な変更はどこまでなのか、その範囲も決めておく必要があります。そして、これまでコードレビューの中で行っていた設計の相談や情報共有を、今後はどこで、どう行うのか。そこまで考えておくことで、安心してAIに任せられるようになる、というお話でした。

レビューをなくすか、残すかだけではなく、レビューが担ってきた役割を整理することが大切なんですね。

....
続いて2本目は、IVRyの電話アプリが、FlutterからOSごとの標準技術へ移行したお話です。

もともと、このアプリでは通話処理の大半がSwiftやKotlinで動いていて、画面もWebViewが中心でした。そのため、Flutterでコードを共有するメリットが、実際の構成では薄れていたそうです。

一方で、FlutterとOS側の処理をつなぐ仕組みは複雑になっていました。この複雑さが、通話の安定性や、不具合を調べるときの負担という面で課題になっていたんですね。

そこで優先したのが、通話品質と、構成のシンプルさです。OSごとの標準技術に移行し、検証ではAndroidの起動時間が約74パーセント短縮したといいます。起動時間がここまで変わるのは、大きな成果ですね。

移行の実装では、AIコーディングツールも負担の軽減に役立ったそうです。ただし、実装が進めやすくなっても、品質の確認や、OSごとに運用していく作業は引き続き必要です。

筆者は、Flutterそのものを否定しているわけではありません。大切なのは、その技術を選んだ当時の条件が、今も成り立っているかを見直し続けることだとしています。

選んだときには合理的だった技術も、アプリの構成や求められる品質が変われば、改めて考える必要がある。そんな技術選定の視点が伝わってくる記事です。

....
3本目は、暗号の強さと、秘密鍵の選び方に関するお話です。

こちらの記事では、eMudhraの中間CA証明書で報告された弱い秘密鍵について、公開鍵からPythonで求める手順を紹介しています。中間CA証明書というのは、認証局がサイトなどの証明書に署名するために使うものです。

記事ではまず、OpenSSLを使って対象の証明書から公開鍵を取り出し、それを楕円曲線P-384上の点として読み込みます。そして、規格で決められた点を何倍すると、その公開鍵と一致するのかを調べます。この倍率が、求めたい秘密鍵に当たるんですね。

通常、この倍率を求めるには膨大な計算が必要で、現実的には解けません。ところが今回は、候補を順番に試していくだけで、約0.4秒で秘密鍵の値が156だと特定できたそうです。

ポイントは、P-384のような強い暗号方式を使っていても、秘密鍵の値が極端に小さければ、その安全性は失われてしまうということです。

暗号方式の名前だけで安心するのではなく、鍵が適切に生成されていることも欠かせない。短い計算時間と具体的な数字が、その重要性をはっきり示している事例ですね。

....
続いて4本目は、VimとNeovim向けの自動補完プラグイン、goda-cmp.vimの紹介です。

goda-cmp.vimは、ddc.vimの後継として開発された、Go製のプラグインです。普段の文字入力の補完だけでなく、コマンドラインや端末での補完、さらにLSPによるコード補完にも対応しています。

特徴的なのは、設定も拡張もGoで記述して、まとめてビルドする仕組みです。同じ実行ファイルと設定を、VimとNeovimの両方で使えるそうです。しかも、実行するときにはGoやDenoを用意する必要がありません。

設定もビルドの対象になるので、たとえば設定の型が間違っているといった問題を、エディタを起動する前に見つけられるのもポイントです。設定の誤りを実際に使い始めてから知るのではなく、事前に確認できるわけですね。

ただし、まだ開発初期の段階で、APIが変わる可能性があります。今後は正式版に向けて、安定化を進めていく予定とのことです。

Goで設定や拡張をまとめるという設計が、自分のエディタ環境に合うかどうか。補完環境を見直したい方には、気になる選択肢になりそうですね。

....
最後、5本目は、Railsの会議室予約アプリで、焼きなまし法を使って長い空き時間を作るお話です。

会議室に空きはあるのに、細切れになっていて、長い会議を入れられない。そんな状況を、予約時刻を変えずに改善する方法を紹介しています。

移動の対象にするのは、部屋の変更に同意している予約だけです。さらに、移動先も同じ広さ、同じ設備の部屋に限定します。会議の時間や必要な条件はそのままに、部屋の割り当てを工夫するんですね。

割り当ての良さは、連続した空き時間を2乗して、合計した値で評価します。この計算だと、細切れの空きがいくつもある状態より、まとまった空きがある状態のほうが高得点になります。

処理を速くするための工夫も紹介されています。状態全体を毎回コピーするのをやめ、変更があった部分だけを計算して更新するようにしたそうです。さらに、予約同士の交換や、短い探索を複数回行う方法も取り入れています。

その結果、最終版は1秒の探索で、初版が10秒かけたときよりも高い評価値を出せるようになりました。より短い時間で、より良い割り当てを見つけられたということですね。

焼きなまし法では、探索の途中で、あえて評価が悪くなる変更を受け入れることがあります。ただ、その許し方は、評価値の大きさや探索時間に合わせて調整が必要です。短時間の探索では、悪化を許さない方法のほうが有利になる場合もあるそうです。

そして、見つけた割り当てをデータベースに保存する部分にも工夫があります。PostgreSQLの排他制約を、SQL文の終了時に検査する設定にすることで、重複予約を防ぎながら、部屋の入れ替えを1回のUPDATEで保存しています。

探索の方法だけでなく、計算の高速化から安全な保存まで。実際のアプリで最適化を使うための工夫が詰まった記事でした。

....
さて、今日の「zenncast」は、5本の記事をご紹介しました。

AI時代のコードレビューでは、人の承認を外すための組織の合意。IVRyの電話アプリでは、通話品質を優先した技術構成の見直し。そして、弱い秘密鍵から考える暗号の安全性、Goで設定も拡張もまとめるgoda-cmp.vim、焼きなまし法で会議室のまとまった空きを作る工夫でした。

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

番組の感想もお待ちしています。「この話が気になった」「自分の現場ではこうしている」といった声も、ぜひ聞かせてください。

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

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

Related episodes

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