#
575
2025/12/18
今日のトレンド

RustとエージェントスキルのOSS

どうもー、おはようございます。マイクです。
「zenncast」、2025年12月19日、金曜日の朝7時をまわりました。
この番組では、Zennで話題になっているトレンド記事をピックアップして、エンジニアのみなさんの朝のウォーミングアップにちょうどいい感じでご紹介していきます。

今日は、全部で5本の記事を紹介していきます。
Rust、エージェントスキルのOSS、分散トランザクションの失敗談と改善、Nix Flake+direnvの開発環境づくり、そしてRAG向けのExcel構造化ライブラリと、かなりバラエティ豊かなラインナップになってますので、通勤中や作業前のインプットに、ゆるっと耳を預けてもらえればと思います。

それでは、1本目からいきましょう。
1つ目は「Rustを学ぶと世界が変わる」という記事です。
筆者の方は、実務ではまだRustをガッツリ使っていないんですが、それでも「Rustを学んだことでエンジニアとしての物の見え方が変わった」と言っているのが面白いポイントなんですね。
Rustといえば、「所有権・借用・ライフタイム」。この三種の神器みたいな概念があって、「誰がメモリを片付けるのか」「同時にどこから触っていいのか」「参照はどの期間まで生きていていいのか」をコンパイル時にガッチリチェックしてくれる言語です。
これ、単に「安全で早い」で終わらなくて、「どこで状態が変わるのか」「責任はどこにあるのか」を常に意識させられるんですよね。副作用やミューテーションを明示しないと書けないので、自然と設計目線が鍛えられる。結果として、他の言語を書いているときでも、「ここ、オーナー誰?」「ライフタイムどうなってる?」みたいな、抽象的な設計力がアップしてくる。
記事では学習ステップも提案されていて、いきなり大規模開発じゃなくて、小さなコードで所有権・借用・ライフタイムに慣れていきましょう、と。そこから文字列まわり、move / copy / clone、スマートポインタ、それから所有権が効いてくるパターンを少しずつ押さえていくといいよ、というロードマップになっています。
「Rust、気になってるけど仕事で使わないしなあ」と思ってる方にほど、「いや、それでもやる意味あるよ」と背中を押してくれる記事になってました。

。。。。

続いて2本目。「Agent Skillsの運用を楽にし、Claude以外のAgentでも利用可能にするOSS『SkillPort』を作った話」です。
これ、LLMエージェントをガッツリ触ってる人には刺さる内容ですね。Agent Skillsって、タスクごとに「この仕事をするときの知識・手順・スクリプト」をフォルダでまとめておいて、必要なときにだけ段階的に読み込む、という仕組みなんですが、便利な反面、「プロジェクトごとにサイロ化しちゃう」「対応してるエージェントが限られる」「Skill増えてくるとコンテキストがパンパン」みたいな運用のつらみが出てくる。
そこで登場するのがOSSの「SkillPort」。この子が、Anthropic準拠のSkillsを、MCPとかCLIを入り口にして、いろんなエージェントから共通で使える“ハブ”になってくれるんですね。
GitHubやローカルからSkillを取り込んで、仕様のvalidateをかけたり、AGENTS.mdを自動生成してくれたりと、運用まわりもだいぶ楽にしてくれる。さらに、Skill Search Toolやカテゴリ、namespaceフィルタで「今必要なSkillだけ」を動的に配信することで、コンテキストの無駄遣いを減らす工夫もされています。
CLIモードだと、`skillport init`でプロジェクト初期化して、`skillport add`でSkill導入。エージェント側はAGENTS.mdを読んで、`skillport show`で必要なときだけ段階的にSkillを読み込む、というワークフロー。
著者の狙いとしては、「Skillを特定ベンダーにロックインさせないで、組織共通の長期資産にしよう」というところにあるので、会社やチーム単位でエージェント運用している人には、今後の基盤としてかなりおもしろいプロジェクトだなと感じました。

。。。。

3本目は、「分散サービスのトランザクションでアンチパターンを設計してしまった話 〜とその改善〜」という、ちょっとヒヤッとするタイトルの記事です。
内容としては、単一DBのACIDトランザクションをあてにしすぎて、「DBのトランザクションを開始してから、外部サービスを2つ同期呼び出しして、失敗したら補償トランザクションで巻き戻そう」という設計をしてしまった、という話ですね。
これをやると、外部APIのレスポンスを待っている間、DB接続とか行ロックをずっと掴みっぱなしになるので、ロングトランザクションでコネクション枯渇したり、待ち時間が伸びてデッドロックが増えたり、外部の障害がDBの障害みたいに波及してしまう。まさに分散システムのアンチパターンです。
原因は、「全部トランザクションで囲めば原子性が保てるでしょ」というACIDへの執着と、分散システム特有の性質をあまり考えていなかったことにある、と自己反省されています。
改善案として紹介されているのが、BASE・結果整合性を受け入れた設計で、まずはDBの更新はできるだけ短いトランザクションに閉じ込めて、外部サービスの更新はキュー越しに非同期でやる方法。それから、DB更新と同じトランザクションでOutboxテーブルにイベントを書き込み、別のプロセスがそれを拾って外部サービスを更新する「Outboxパターン」。
さらに、Sagaパターンも正しく紹介されています。各ステップごとに短いトランザクションだけを使い、全体をオーケストレーションまたは振る舞いの連鎖でつなぐやり方ですね。
あわせて、冪等性やリトライ、サーキットブレーカーみたいなエラーハンドリングの重要性にも触れていて、「即時一貫性を守ることよりも、最終的な整合性と可用性を優先したほうが、実サービスとしては幸せになれるよ」という、現場の学びが詰まった記事でした。

。。。。

4本目、「Nix Flake+direnvでプロジェクトのパッケージ管理」という記事です。
miseを使っている方には、「あ、あの辺の役割をNix Flake+direnvで置き換えるのね」という感じの内容になっています。
まず、nix-direnvのテンプレートからflake.nixと.envrcを用意します。で、そのディレクトリをgit管理におさめつつ、direnvを有効にしておくと、「そのディレクトリに入るだけで、nix develop相当の環境が自動で有効になる」という気持ちいい体験が手に入ります。
flake.nixのdevShells.defaultに使いたいパッケージを列挙しておけば、そのシェルではPATHがいい感じに通るので、helloみたいなパッケージから、普段使いのツールチェーンまで、プロジェクトごとにきれいに閉じ込めることができます。
バージョンはflake.lockで固定されるので、チームで同じ環境を再現しやすいですし、更新したくなったらnix flake updateでアップデート。さらに、pkgs.writeScriptBinで独自コマンドを定義したり、envセクションで環境変数を設定したり、shellHookで「ディレクトリに入ったときに一度だけpnpm installを走らせる」といった初回セットアップを自動化したりと、かなりリッチに使えます。
direnv対応のプラグインを入れておけば、VSCodeやIDEAのターミナル・ランタイムからも同じ環境が使えるので、IDEとの相性も良い。記事では、「miseのタスクランナー的な使い方も、かなりの範囲をFlake+direnvに寄せられるよ」という話もされていて、「環境汚したくない」「プロジェクトごとに完全に分離したい」という人にとっては、いい選択肢を丁寧に紹介してくれています。

。。。。

ラスト、5本目は「RAGで厄介なExcel文書を意味構造JSON化するOSSライブラリを作りました」という記事です。
RAGをやっていると、Excelファイルって本当に厄介なんですよね。単なるセルの表じゃなくて、図形で作ったフローチャート、グラフ、罫線だけで区切られた表、ハイパーリンクだらけの資料… こういうのを「いい感じに構造を保ったままLLMに渡したい」というニーズに対して、「ExStruct」というPythonライブラリを作りました、という内容です。
ExStructは、Windows+Excel環境を前提に、xlwings経由のCOM参照やopenpyxlを駆使して、セルの値だけでなく、図形、フローチャートの矢印、グラフの軸と系列、ハイパーリンク、印刷範囲、さらには罫線から推定した表構造までを、JSONやYAML、TOONフォーマットで出力できるようにしています。
これによって、画像認識を使わずに、フローチャートやグラフをLLM側でMarkdownやmermaidとしてかなり正確に再構成できる、というデモが紹介されています。pydanticやscipyで内部のデータモデル化・表検出をしていて、LLMのコンテキスト量を気にしながら、どれくらい詳細に出力するかも調整可能になっているのがポイントです。
制約としては、Windows+Excel前提なので、クロスOSやサーバー常駐用途には向かないんですが、その代わり、既存のpandasやopenpyxlだけのアプローチ、あるいはOCR/VLM、クラウドの解析サービスと比べて、Excel特有の構造をかなり高精度かつ低コストで取れるのが強みになっています。
開発には、LLMとMkDocs-Material+GitHub Pagesを組み合わせて、自動APIリファレンス生成まで行っているという話もあって、開発プロセス自体も今っぽい。今後はセル背景色やSmartArt対応、JSONからの部分的なExcel再構築、OpenXML解析によるCOM依存の解消など、ロードマップも語られていました。Excel地獄に悩まされているRAG勢には、かなり希望の持てるOSSだと思います。

。。。。

というわけで、今日は5本。
1本目は、所有権・借用・ライフタイムを通じて「設計の目」を鍛えてくれる「Rustを学ぶと世界が変わる」。
2本目は、Agent Skillsをベンダーロックインさせず、MCP/CLI経由で共通利用可能にするOSS「SkillPort」のお話。
3本目は、分散サービスでやりがちな「全部トランザクションで囲めば安心」設計の失敗と、BASEやSaga、Outboxパターンでの改善。
4本目は、Nix Flake+direnvでプロジェクトごとの開発環境をきれいに管理する実践的なノウハウ。
5本目は、Excelの図形・表・グラフまで含めて意味構造をJSON化するRAG向けライブラリ「ExStruct」の紹介でした。

気になった記事があったら、詳しい内容はショーノートから飛べるようにしておきますので、ぜひ本編も読んでみてください。
番組「zenncast」では、感想や「こんなテーマ取り上げてほしい」などのお便りもお待ちしています。開発での失敗談や、「この技術で人生変わった」みたいな話も大歓迎です。

ということで、今日もそろそろお時間です。
お相手はマイクでした。また次回のzenncastでお会いしましょう。
それでは、いってらっしゃい。

Related episodes

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