#
870
2026/10/7
今日のトレンド

PostgreSQLのOR条件とAIレビュー

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

今日は、PostgreSQLの処理の見直しから、AIレビュー、GitHub Actionsのキャッシュ管理、エージェントへの引き継ぎ、そしてXcodeのビルド高速化まで、5本の記事をご紹介します。開発のちょっとした困りごとを解くヒント、見つけていきましょう!

....
まず1本目は、PostgreSQLで大量のOR条件を並べたときに、SQLを実行する前の処理が重くなる、というお話です。

今回のポイントは、実行そのものではなく、データをどう読み出すかを決める「planning」です。記事の実測では、条件の数に比例してメモリ使用量が増え、処理時間は条件数の二乗ほどに増えていました。条件が増えると、実行前の準備だけで大きな負荷になってしまうんですね。

ログを見てbindの時間が長い場合も、このplanningを疑ってみるとよいそうです。値をbind変数で渡すようにしても、ORで並べている条件の数が変わらなければ、負荷は減りません。

また、work_memを変更しても、今回の負荷は抑えられないとのこと。work_memは実行時のソートなどに使う設定で、planningが使うメモリは対象外なんです。「メモリの設定を増やせば解決するかな?」と思っても、処理の段階が違うわけですね。

対策は、倉庫ごとに商品IDをまとめて、INや、配列を渡すANYを使い、条件数を減らすことです。商品1万6,000個を使った実測では、ORで56秒かかっていたplanningが、3〜4ミリ秒まで短縮しました。これは大きな差ですね!

さらにANYなら、商品数が変わってもSQLの形を保てます。配列を1つのbind変数として渡せるので、変数の個数上限も避けやすくなります。SQLが遅いときは、実行だけでなく、その手前の準備にも目を向けたいですね。

....
続いて2本目は、チームの暗黙の作法を文書化して、AIレビューで共有する取り組みです。

筆者のチームでは、バックエンドの作法が口伝に頼っていました。そのため、実装する人が増えるほど、レビュー担当者の負担も増えていたそうです。「このチームではこう書きます」という知識が、レビューの場で初めて伝わる状況だったんですね。

そこで筆者は、過去のレビューコメント1,105件をもとに、40のルールを整理しました。暗黙になっていた作法を文書にして、AIレビューを通じて共有する仕組みを作ったんです。

導入後の結果を見ると、変更提案、つまりPRあたりのコメント数は1.32件で、変わりませんでした。一方で、指摘なしで承認されたPRの割合は、64.5パーセントから71.2パーセントに増えています。

コメント数だけを見ると変化がなくても、指摘なしで進められる割合には変化があった、ということですね。筆者は、実装する前にルールを知れることに価値を感じているそうです。

そして次の課題として挙げているのが、開発中のAIチェックを改善することと、PRを小さくすること。レビューで指摘するだけでなく、書いている段階で作法を確認できるようにする。チームの知識を、必要なタイミングで使える形にする取り組みです。

....
3本目は、GitHub Actionsのキャッシュを、必要なものを守りながら自動で掃除するお話です。

GitHub Actionsは、キャッシュが容量上限を超えると、最終アクセスが古いものから削除します。そのままにしていると、残しておきたいキャッシュまで削除される可能性があるんですね。

そこで記事では、まず容量の内訳を調べて、不要になった2種類のキャッシュを自動で削除しています。

1つ目は、実行ごとに保存されるビルドキャッシュです。同じブランチの最新1件を残して、古いものを削除します。ただし、再実行のときに全件を消してしまわないよう、今回のキャッシュが存在する場合だけ掃除する、という条件を付けています。

2つ目は、クローズ済みのプルリクエストや、削除済みのブランチにひもづくキャッシュです。プルリクエストのクローズやブランチの削除をきっかけに掃除しますが、CIがまだ動いている場合は見送ります。実行中に必要なキャッシュまで消さないための配慮ですね。

削除には、actionsのwrite権限が必要です。エラーの扱いも大切で、対象がすでに削除されていた場合だけは無視し、権限不足などは失敗として検知します。また、イベントに合わせた削除で取り残されたものには、定期実行による掃除も必要です。

そして、容量上限を上げるなら、組織側の設定も確認します。自動削除だけでは足りない場合もあるので、実際に使っているキャッシュ量を測り、余裕のある上限を設定することが大切だそうです。掃除と容量の確保、両方で考えるわけですね。

....
4本目は、AIエージェントの記憶をどう残し、別のツールへ引き継ぐか、という記事です。

記事では、記憶を役割ごとに分けています。作業手順はSkills、規約や構成はAGENTS.md、そして作業の進み具合は引き継ぎノートに保存します。Claude CodeとIBM Bobで検証したところ、Markdownだけでツール間の引き継ぎができたそうです。

ただ、ノートに何を書くかが重要です。「次にやること」だけを書いた場合、ツールによって作業を止める地点が変わってしまいました。そこで、「次のセッションで完了させる範囲」と「その後の予定」を分けて書きます。直近でどこまで終えるのか、その先に何があるのかを、別々に伝えるんですね。

方針を残すときには、それが「ユーザーの指示」なのか、「エージェント自身の判断」なのかも区別します。さらに、いつまで有効な方針なのかも記録します。ノートを更新したときに、この区別が消えていないかを確認し、次の作業範囲は人間がチェックする、という運用です。

特に定期的に見直したいのは、方針や制約、これまでの経緯など、コードから確認できない情報です。こうした情報は古くなっても、エージェントが気づきにくいからなんですね。

高度な記憶管理の仕組みを用意する前に、まず何を書き、いつ更新するかを決める。引き継ぎをうまく進めるには、保存の仕組みだけでなく、情報の整理の仕方が大事だというお話でした。

....
最後、5本目は、Xcode 26のCompilation Cacheを、Git Worktreeでも活用する方法です。

Compilation Cacheは、コンパイル結果を再利用する機能です。ただし、Git Worktreeでは作業場所ごとに絶対パスが変わります。そのため、この機能を有効にするだけでは、キャッシュがほとんど使われないそうです。

対策は、異なる作業場所のパスを、共通の仮想パスにそろえること。設定としては、COMPILATION_CACHE_ENABLE_CACHINGに加えて、SwiftとClangのENABLE_PREFIX_MAPPING、ENABLE_PROJECT_PREFIX_MAPPINGをYESにします。

SwiftPMを使う場合は、さらにSWIFT_OTHER_PREFIX_MAPPINGSとCLANG_OTHER_PREFIX_MAPPINGSで、worktreeのルートも共通の仮想パスに置き換えます。作業場所の違いを、キャッシュの再利用を妨げない形にそろえるわけですね。

記事の検証では、キャッシュの利用率が58パーセントになり、ビルド時間は250秒から209秒に短縮しました。41秒の短縮ですから、繰り返しビルドする場面ではうれしい改善ですね。

ただし、マクロに依存するターゲットには、設定してもキャッシュを再利用できない問題が残っています。筆者の修正ではすべて再利用できたそうですが、その修正は2026年10月7日時点では未マージです。設定による改善と、まだ残っている問題を分けて押さえておきたいですね。

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

PostgreSQLでは、大量のOR条件を見直してplanningの負荷を減らす工夫。AIレビューでは、暗黙の作法を40のルールとして共有する取り組み。GitHub Actionsでは、不要なキャッシュを安全に掃除する方法。そして、AIエージェントの引き継ぎ情報の整理と、Xcode 26で作業場所のパスをそろえてキャッシュを活用するお話でした。

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

番組の感想もお待ちしています。「この工夫を試してみたい」「うちのチームではこうしています」など、皆さんの声を聞かせてもらえるとうれしいです。

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

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

Related episodes

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