どうもー、おはようございます。マイクです。
今朝も「zenncast」お聞きいただきありがとうございます。
今日は2025年12月21日、日曜日の朝7時でございます。みなさん、いかがお過ごしでしょうか。
この番組では、Zennで話題になっているトレンド記事を、ゆるっと楽しく、でも中身はしっかりめにご紹介していきます。
今日はですね、全部で5本の記事をご紹介していきます。
開発環境のツールまとめから、数学関数の精度の話、JAXとPyTorchの違い、GitHub Copilotの新機能、そして「画像なし」で挑むVLMという、かなり攻めた内容まで、技術好きにはたまらないラインナップになってます。
まず1本目。
タイトルは「2025年版: 開発環境のツールまとめ」。
筆者の方はSREで、ターミナル中心のかなり硬派な開発環境を徹底的に紹介してくれています。キーワードは「Rust製ツール」と「ミニマル構成」。ターミナルはAlacrittyに、ターミナルマルチプレクサはZellij。シェルはzshで、プラグインマネージャにsheldonを使って、必要なものだけをキュッと絞っている構成です。
`ls`や`cat`、`grep`みたいな昔からあるコマンドは、eza、bat、ripgrep、fd、zoxideといったモダンCLIに総入れ替え。ここにfzfや、複数言語のランタイムをまとめて管理できるmiseを組み合わせて、「ターミナルからほぼ手を離さずに」開発体験を爆上げしているのが面白いところです。
エディタはNeovimで、プラグインマネージャはlazy.nvim。telescopeやtreesitter、noice、which-key、hlchunkといった、最低限だけど“効く”プラグインだけを自前で構成していて、「とりあえず全部入れる」ではなく、明確な思想があるのがポイントですね。
GitまわりもGitUI、gh、git-deltaで効率化しつつ、AIはClaude Codeを中心に、Kiro CLIやCursorを用途別に使い分け。あくまで「ターミナル中心のワークフローを崩さない」範囲でAIを導入しているのが印象的でした。Rust製ツールの軽さと、不要機能を削ぎ落としたミニマル構成、2025年の“本気の開発環境”の一つの答えとして、読むだけで環境をいじりたくなります。
。 。 。 。
続いて2本目。
タイトルは「標準ライブラリーが提供する数学関数はどのくらい正確か、あるいはどの程度環境依存するのか」。
浮動小数点の世界って、普段なんとなく使っていると意識しないんですが、「本当はどれくらい正しいの?」というところを、かなり真面目に掘り下げた記事です。理想的には、指数関数や三角関数は「正しく丸められている」ことが望ましいんですけど、IEEE 754でもそのあたりは“推奨”レベルにとどまっていて、実際にはlibm、つまりglibcやmusl、MSVCRTといった実装ごとに精度がバラついているんですね。
その結果、同じ言語・同じコンパイラを使っていても、OSやCPUアーキテクチャが違うと、`exp`とか`sin`、`pow`の結果が微妙に変わる、ということが普通に起こる。さらに、`pow(x, 2)`と`x * x`で結果が一致しなかったり、コンパイル時の定数畳み込みと実行時の計算結果がズレる、といった「テストが壊れる」系の問題も発生しうるという話が出てきます。
PythonやC#はlibcラッパーとして振る舞う一方で、JavaScriptエンジンやJava、Go、Juliaなどは自前実装や特別扱いを含んでいて、どれくらい環境依存するかも言語ごとにだいぶ違う。
記事の結論としては、「環境差を完全に避けたかったら、自前の数学関数実装を決め打ちするか、WebAssembly上で動かして“どこでも同じように間違える”仕様にするのが現実的」という、ちょっと皮肉混じりだけど現実的な落としどころになっています。数値計算ガチ勢だけじゃなくて、「プロダクションでテストがなぜか落ちるんだけど…」という経験がある人にも刺さる内容でした。
。 。 。 。
3本目。
タイトルは「JAXにできてPyTorchにできないこと」。
タイトルからして挑戦的なんですが、引き合いに出されているのが「正則化下側不完全ガンマ関数 P(k, x) のパラメータ k に関する自動微分」です。もうこの時点でだいぶマニアックですね。
不完全ガンマ関数は、ガンマ分布のCDF、つまり累積分布関数を表すときに使われていて、この記事では「分布当てゲーム」というコンパクトな問題設定を通して説明されています。入力Xをニューラルネットに入れて、そこからガンマ分布のパラメータ(k, θ)を予測し、観測された(y, z)との二乗誤差を最小化する。そのためには、k方向とy/θ方向、両方にきちんと勾配が流れてくれないと学習がうまくいかないんですね。
JAXの場合は、jax.scipy.special.gammaincがこのパラメータ微分をサポートしているので、損失関数にそのまま書くだけで、自動微分が最後まで通ってくれる。一方で、PyTorchのtorch.special.gammaincは、現時点ではbackward未対応で、ここがまさに「JAXにできてPyTorchにできないこと」の具体例になっている、という指摘です。
記事の中では、実際にJAX + FLAX + Optaxでその“分布当てゲーム”を実装して、学習がちゃんと進む様子も確認されています。ただし、JAXでも不完全ベータ関数betaincのパラメータ勾配はまだサポートされていなくて、「特殊関数まわりの自動微分は、まだまだ発展途上」というまとめ。
深層学習のフレームワーク選定って、スピードとかエコシステムだけで語られがちなんですけど、こういう“特殊だけど重要な勾配”が通るかどうかで差がつくケースもあるんだな、というのを実感できる内容でした。
。 。 。 。
4本目。
タイトルは「GitHub Copilot Agent Skills 入門」。
これは2025年12月18日にリリースされた、かなりホットな新機能ですね。「Agent Skills」という名前の通り、Copilotにあとから読み込ませる“専門スキルパッケージ”みたいな仕組みになっています。
特徴的なのは、必要なときだけ動的に読み込まれる点と、オープンな標準として設計されている点。各スキルはSKILL.mdを中心にしたフォルダ構成になっていて、VS Codeでは`.github/skills/`みたいなディレクトリに置いておくと、`chat.useAgentSkills`設定をオンにした状態で使えるようになります。
ユーザーがチャットで何か頼んだときに、Copilot側が`read_file`ツールを通じて、関係ありそうなスキルだけを遅延ロードする、というプロンプト構成になっていて、これによって「プロジェクト固有のルールや手順を、大量のコンテキストに最初から詰め込まなくても済む」というのがポイントです。
従来のAGENTS.mdとドキュメントを組み合わせた運用と比べると、「自動でロードしてくれること」と「フォーマットが標準化されて相互運用しやすいこと」が大きなメリット。ただ、どのタイミングでどのスキルがロードされるかは、システムプロンプト側にだいぶ隠蔽されていて、「細かく制御したい人には向かないかもね」という注意点もちゃんと書かれています。
すでにAnthropicやGitHub公式のスキルレポジトリも公開されていて、デプロイ手順やトラブル診断スクリプトなんかをSkillsとして切り出しておくと、プロジェクトごとの“AI作業マニュアル”みたいな感じで使えそうだ、というのがこの記事のトーンでした。コーディングだけじゃなくて、チームの運用知識をどうAIに委ねていくか、という次のステップを考えるのにすごく良い入門記事だと思います。
。 。 。 。
そして5本目。
タイトルは「『画像なし』で挑むVLM学習 / Text-Printed Imageによるアプローチ」。
自動運転のような領域では、「めったに起きないけど、起きたときはめちゃくちゃ難しい状況」のデータがとにかく集めづらい、という問題があります。そこで著者が提案しているのが、実画像を集める代わりに、テキストだけでVLMを学習する“text-centric training”の一種、「Text-Printed Image」、略してTPIという手法です。
やっていることはシンプルで、テキストをそのまま白背景に印字した“画像”に変換して、それを既存のVLMの画像エンコーダに食わせる、というもの。こうすることで、テキストの意味はそのままに、でもモデル的には「画像として入ってくる」ので、テキストと画像のモダリティギャップをうまく埋められるんじゃないか、という発想ですね。
実験では、GeneralなVQA、テキスト中心のVQA、ドメイン特化VQAといった複数のベンチマークで、Text-onlyな学習や、テキストから生成した画像で学習させるText-to-Image方式よりも、TPIの方が性能が良い、という結果が示されています。一部の設定では、実際の画像データを使ったGT-Imageにかなり迫るところまでいっていて、t-SNEで特徴量分布を見ても、TPIのほうがGT-Image寄りに分布している、という可視化も出てきます。
さらに、Self-Instuctを使った人工テキスト生成と組み合わせることで、データが少ないときも、十分にあるときも、どちらの条件でも性能を押し上げられることが確認されていて、「実運用でのデータ拡張手段としてもかなり有望そう」という手応え。とはいえ、VLMならではの拡張設計、例えばどんなフォーマットでテキストを印字するのがベストなのか、といった部分はまだまだこれからの研究テーマで、続きが楽しみになる内容でした。
。 。 。 。
というわけで、今日はZennのトレンド記事を5本ご紹介しました。
Rust製ツールとミニマル構成で攻めた「2025年版: 開発環境のツールまとめ」。
標準ライブラリの数学関数がどこまで正確で、どれくらい環境依存するのかを解きほぐした記事。
JAXとPyTorchの違いを、「不完全ガンマ関数の自動微分」というニッチだけど重要なテーマから掘り下げた記事。
GitHub Copilotの新機能「Agent Skills」の仕組みと、ワークフローをどう変えていくかを解説した入門記事。
そして、「画像なし」で挑むVLM学習、Text-Printed Imageというちょっと変わったけど実は強いアプローチの論文紹介でした。
気になる記事があった方は、このあとショーノートにタイトルなど詳しく書いておきますので、ぜひ原文もチェックしてみてください。
「zenncast」では、番組の感想や、「こんなテーマを取り上げてほしい」「この技術が気になってる」といったリクエストも大歓迎です。あなたの開発環境のこだわりとか、AIとの付き合い方なんかも、ぜひ教えてください。
それでは、そろそろお時間です。
お相手はマイクでした。次回の「zenncast」でまたお会いしましょう。
今日も良い一日をお過ごしください。