jedipunkz 🚀 のブログ

SRE になるために孊んでいくブログです

NVIDIA OpenShell を䜿った AI Agent 環境のガヌドレむル策

こんにちは。ゞェダむパンくず🍞 です。 以前の蚘事 自䜜 Go ツヌルに導入したガヌドレヌル策 や Google ADK Go 2.x の Dynamic Workflow ずその為のガヌドレヌル では、AI ゚ヌゞェントに䜜業させるずきのガヌドレヌルをコヌドやワヌクフロヌの偎で考えおいたした。䞀方で最近は LiteLLM 1.107.0 の PyPI パッケヌゞ䟵害 や、Cursor Marketplace で配垃された Claude Code 拡匵にバックドアが仕蟌たれた件 など、゚ヌゞェントが動く開発環境そのものが狙われる事件が続いおいたす。 そんな䞭で、NVIDIA の OpenShell が 0.1.x で安定したリリヌスサむクルに入り、Hacker News でも話題になっおいたした。OpenShell は「自埋 AI ゚ヌゞェントのための安党でプラむベヌトなランタむム」をうたうもので、゚ヌゞェントが觊れるファむル・ネットワヌク・API をポリシヌで宣蚀し、カヌネルレベルで匷制したす。README を読むだけでは実際にどこたで防げるのかが分からなかったので、サンプル環境を䜜っお手を動かしおみたした。 コヌドは䞋蚘に眮いおありたす。 https://github.com/jedipunkz/openshell-playground 怜蚌したバヌゞョンは OpenShell v0.1.6、環境は macOS + Docker Desktop です。 結論 詊したこず 結果 ポリシヌを指定せずに倖ぞ通信 TCP も DNS もすべお拒吊される GitHub API を GET のみ蚱可 GET は通り、POST は L7 で 403 になる。ルヌル远加は再起動䞍芁 credential を provider 経由で枡す ゚ヌゞェントには placeholder しか芋えず、玐付けた宛先にだけ本物の倀が送られる 窃取スクリプトの暡擬 倖郚送信・蚱可ホストぞの POST・別バむナリからの通信・metadata 参照・蚱可倖パスぞの読み曞きは拒吊される。曞き蟌み可胜な workspace ぞの氞続化は防げない policy prover 䞊限ポリシヌを超える倉曎を反䟋付きで怜出できる。CI に組み蟌める 「゚ヌゞェントが䜕を持ち出せお、どこに送れるか」をホスト・メ゜ッド・バむナリ単䜍で絞り蟌めお、その刀定がすべおログに残るのが OpenShell の䟡倀だず感じたした。逆に、蚱可した範囲の䞭で䜕が起きるかたでは面倒を芋おくれないので、workspace の扱いは別途考える必芁がありたす。 ...

2026-11-03 Â· 9 分 Â· jedipunkz

Grafana Alloy で独自メトリクスを扱う2぀のパタヌンを Go で曞く

こんにちは。ゞェダむパンくず🍞 です。 以前の蚘事 自前開発した Prometheus Exporter で自宅ルヌタのメトリクス監芖運甚しおいる話 や Prometheus Exporter 開発で Discord サヌバ運営の健党化を図る では、Go で Prometheus Exporter を曞いお Prometheus Server に scrape させおいたした。 最近は Grafana の゚ヌゞェントずしお Grafana Alloy を䜿う構成が増えおいたす。Alloy は Prometheus の scrape や remote_write、OpenTelemetry、ログ収集などを 1 ぀のバむナリで扱えるテレメトリコレクタで、prometheus.exporter.* ずいう圢で倚くの exporter を内蔵しおいたす。そこで「自䜜 exporter を Alloy の䞖界に持ち蟌むにはどうするのか」「Alloy の component そのものを Go で曞けるのか」を調べお、実際に手を動かしおみたした。 コヌドは䞋蚘に眮いおありたす。 https://github.com/jedipunkz/alloy-playground 結論 自䜜のメトリクスを Alloy で扱う方法は倧きく 2 ぀ありたす。 パタヌン 内容 A: 独立 exporter + prometheus.scrape 埓来通り Go で exporter を曞き、公匏の Alloy から HTTP で scrape する B: Alloy を fork しお component を远加 Alloy の゜ヌスツリヌに internal/component/prometheus/exporter/<name> を足しおビルドする Alloy の component は Go で曞けたす。ただし Alloy にはプラグむン機構が無く、exporter ç³» component が䜿う API は internal/ 配䞋にあるため、パタヌン B は Alloy を fork しおビルドするしかありたせん。自分のサヌビス向けの独自メトリクスであれば、運甚コストの䜎いパタヌン A を遞ぶのが良さそうだず感じたした。 ...

2026-10-22 Â· 6 分 Â· jedipunkz

自䜜 Go ツヌルに導入したガヌドレヌル策

こんにちは。ゞェダむパンくず🚀 です。 以前の蚘事 Go によるコマンド履歎・ファむル・Git ブランチ/Worktree/コミットを怜玢する Fish Plugin 開発 で玹介した fuzz.fish は、Fish shell のコマンド履歎・ファむル・Git ブランチなどをファゞヌ怜玢する Fish plugin です。plugin ですが、怜玢ず TUI の本䜓は Go で実装しおいお、Fish 偎のスクリプトconf.d/fuzz.fishはキヌバむンドの登録ず Go バむナリの呌び出しだけを担っおいたす。このツヌルを自分で毎日䜿いながら䞀人で開発・運甚しおいたす。最近はコヌドの倧半を Claude Code や opencode ずいった AI agent に曞いおもらっおいお、自分はレビュヌずマヌゞが䞭心です。 この開発スタむルで䞀番気になっおいたのは、LLM に䜕を意識させ続けられるかでした。具䜓的には次の 4 ぀です。 セキュリティ: シェルに文字列を枡しお実行する箇所や、サプラむチェヌンに穎を開けないこず バグ混入: 既存の挙動を壊さないこず、テストを枛らさないこず パフォヌマンス: キヌ入力のたびに走るフィルタ凊理を遅くしないこず 蚭蚈思想: パッケヌゞの䟝存方向や Bubble Tea の Model / Update / View の分担を厩さないこず これらは CLAUDE.md に曞いおありたす。ただ、プロンプトに曞いたルヌルは守られる保蚌がありたせんし、䞀床守られおも次の倉曎では忘れられたす。チヌムであれば他のメンバヌのレビュヌで拟えるこずも、䞀人だず自分が芋萜ずした時点で main に入っおしたいたす。 そこで「ルヌルは CLAUDE.md で宣蚀し、違反は linter ず CI で機械的に萜ずす」ずいう方針でガヌドレヌルを 17 ä»¶ issue 化しお実装したした。この蚘事はその蚘録です。 方針: 宣蚀 → 可芖化 → gate 化 ガヌドレヌルは次の 3 段階で考えたした。 ...

2026-10-12 Â· 8 分 Â· jedipunkz

Google ADK Go 2.x の Dynamic Workflow ずその為のガヌドレヌル

こんにちは。ゞェダむパンくず🚀 です。 前回の蚘事 ADK Go 2.0 のグラフワヌクフロヌを読んで SRE Agent ぞの応甚を考える の最埌に、こんな宿題を残しおいたした。 むンシデント察応は「調べお、分からなかったらもう少し調べる」ずいう反埩が本質なので、完党に静的なグラフでは衚珟しきれない郚分がありたす。NewDynamicNode で調査ルヌプを曞き、確定した察凊だけを静的グラフに戻す、ずいうハむブリッドが珟実解な気がしおいたすが、そうするず動的ノヌドの䞭身が結局ブラックボックスになるゞレンマがありたす。 その埌、Claude Agent SDK の agent loop や、Claude Code の dynamic workflows を眺めおいお、「自埋的に、動的に回るルヌプ」を Google の Agent Development KitADKでやるずどうなるのかが気になりたした。結論を先に曞くず、ルヌプそのものは ADK でも回せたす。ただし止める仕組みは自分で曞く必芁がありたす。この蚘事はその「止める仕組み」、぀たりガヌドレヌルの話です。 蚘事䞭のコヌドは jedipunkz/adk-playground の investigation-loop にあり、ADK Go v2.5.02026-09-30 リリヌスで go vet ずテストを通しおいたす。 「ルヌプ」は 2 皮類ある 最初に敎理しおおきたいのは、「自埋的なルヌプ」ず蚀ったずきに 2 ぀の別のものが混ざりがちだずいう点です。 Claude 偎 ADK Go 偎 agent loop1 ゚ヌゞェントの䞭で、モデル → ツヌル → モデルを繰り返す Claude Agent SDK の query() llmagent オヌケストレヌションのルヌプ゚ヌゞェントを䜕床も呌び、結果を芋お次を決める Claude Code の dynamic workflowsloop until done パタヌン workflow.NewDynamicNode Claude Code の dynamic workflows は、Claude 自身が JavaScript のオヌケストレヌション甚スクリプトを曞き、ランタむムがそれをバックグラりンドで実行する機胜です。スクリプトの䞭では agent() でサブ゚ヌゞェントを起動し、parallel() / pipeline() で fan-out したす。ルヌプ・分岐・途䞭結果はスクリプトの倉数が持぀ので、Claude のコンテキストには最終結果しか入りたせん。 ...

2026-10-12 Â· 7 分 Â· jedipunkz

[Go 再孊習] Go のテストを理解する 埌線: 性胜・堅牢性を確かめる

前線 では、テヌブル駆動テストからカバレッゞたで、コヌドが正しく動くこずを確かめるテストの曞き方を敎理したした。埌線では、正しさ以倖のこずを確かめるテストを扱いたす。 性胜: ベンチマヌク、サブベンチマヌク 堅牢性: Fuzzing 時間: testing/synctest 前線ず同じく Go 1.27 を前提にしおいお、実行結果は Go 1.27.1 で実行したものです。ベンチマヌクの数倀は実行環境によっお倉わりたす。 コヌドは以䞋のレポゞトリにありたす。 https://github.com/jedipunkz/go-playground/tree/main/testing パタヌン9: ベンチマヌク func BenchmarkXxx(b *testing.B) ずいう関数を曞き、go test -bench で凊理時間ずメモリ割り圓おを蚈枬するパタヌンです。 䜿い所 「+ で文字列を連結するより strings.Builder の方が速い」ずよく蚀われたすが、自分のナヌスケヌスでどれくらい差があるのかは、枬っおみないず分かりたせん。ベンチマヌクを曞いおおけば、実装を遞ぶずきや性胜改善をしたずきに、効果を数倀で確認できたす。 テスト察象ずしお、文字列を連結する 2 ぀の実装を甚意したした。 package concat import "strings" // Plus は + 挔算子で文字列を連結する func Plus(words []string) string { s := "" for _, w := range words { s += w } return s } // Builder は strings.Builder で文字列を連結する func Builder(words []string) string { var sb strings.Builder for _, w := range words { sb.WriteString(w) } return sb.String() } ベンチマヌクは for b.Loop() { ... } の䞭に蚈枬したい凊理を曞きたす。 ...

2026-10-11 Â· 9 分 Â· jedipunkz

[Go 再孊習] Go のテストを理解する 前線: 正しさを確かめる

Go の再孊習を続けおいたす。今回はテストです。テヌブル駆動テストやサブテスト、ベンチマヌクは普段から曞いおいるのですが、それ以倖にどんな曞き方や機胜があるのかを網矅的には把握できおいたせんでした。そこで暙準の testing パッケヌゞ呚りを䞀通り調べ盎し、前線・埌線の 2 本にたずめるこずにしたした。 前線 (この蚘事): 正しさを確かめる。テヌブル駆動テスト、サブテスト、䞊列実行、テストヘルパヌ、テストダブル、httptest、Example テスト、カバレッゞ 埌線: 性胜・堅牢性を確かめる。ベンチマヌク、サブベンチマヌク、Fuzzing、testing/synctest Go 1.27 を前提にしおいお、叀いバヌゞョンずの違いには觊れたせん。実行結果は Go 1.27.1 で実行したものです。 コヌドは以䞋のレポゞトリにありたす。 https://github.com/jedipunkz/go-playground/tree/main/testing Go のテストの基本 Go のテストは暙準の testing パッケヌゞず go test コマンドだけで曞けたす。ルヌルは次の 3 ぀です。 テストコヌドは xxx_test.go ずいう名前のファむルに曞く テスト関数は func TestXxx(t *testing.T) ずいう圢にする 倱敗を報告するには t.Error / t.Errorf か t.Fatal / t.Fatalf を呌ぶ t.Error ず t.Fatal の違いは重芁です。t.Error は倱敗を蚘録しおテスト関数の実行を続けたすが、t.Fatal は倱敗を蚘録した時点でそのテスト関数を終了したす。この違いがパタヌン 2 の話に぀ながりたす。 この蚘事では、次の割り算の関数をテスト察象にしお説明を始めたす。 package calc import "errors" var ErrDivideByZero = errors.New("divide by zero") // Div は a を b で割った結果を返す func Div(a, b int) (int, error) { if b == 0 { return 0, ErrDivideByZero } return a / b, nil } よく䜿う go test のオプションは以䞋です。 ...

2026-10-11 Â· 12 分 Â· jedipunkz

AI SRE Agent 評䟡ベンチマヌクを読んでみた

こんにちは。ゞェダむパンくず☁ です。 以前 2026幎6月珟時点においお SRE がどう AI に向き合っおいるか調べおみた や Google が提唱する AI in SRE ずは䜕か で、AI SRE ゚ヌゞェントの動向や Google の評䟡フレヌムワヌクに぀いお曞きたした。その埌 ADK Go 2.0 のグラフワヌクフロヌを読んで SRE Agent ぞの応甚を考える で、実際にむンシデントトリアヌゞのワヌクフロヌも曞いおみおいたす。 ここたでやっおみお、ずっず匕っかかっおいたのが「で、その゚ヌゞェントはどれくらい正しく原因を圓おられるの」ずいう問いです。ベンダヌの発衚では「MTTR が䜕割短瞮」ずいった数字がよく出おきたすが、その倚くは自瀟むンフラ䞊での自己申告で、暪䞊びで比范できるものではありたせん。 そこで 2026 幎に出た AI SRE ゚ヌゞェント向けの評䟡ベンチマヌク 4 本を読んでみたした。 OpenRCA 2.0 ORCA-bench Cloud-OpsBench SREGym 読んでみるず、4 本ずもアプロヌチは違うのに、゚ヌゞェントが間違えるパタヌンに぀いおはほが同じこずを蚀っおいお面癜かったです。本蚘事では、各ベンチマヌクの䞭身、各論文が挙げる課題ず解決策、そしお自分で SRE ゚ヌゞェントを䜜るずきに持ち垰れるこずを敎理したす。 なお 4 本ずもプレプリント (arXiv) で、数倀は論文に曞かれたものをそのたた匕甚しおいたす。 4 本の党䜓像 4 本ずも「LLM ゚ヌゞェントは障害の root cause を特定できるか」ずいう同じ問いを扱っおいたすが、䜕を゚ヌゞェントに枡しお、䜕を採点するかが違いたす。 ベンチマヌク ゚ヌゞェントに枡すもの 採点の重点 芏暡 OpenRCA 2.0 静的なテレメトリ (trace / metrics / log) 答えに加えお、原因から症状たでの䌝播経路 500 ä»¶ ORCA-bench 曖昧なナヌザヌ報告 + Grafana 経由の 6 日分テレメトリ + ゜ヌスコヌド on-call に近い条件で圓おられるか 1,079 タスク Cloud-OpsBench 障害時の Kubernetes 状態を固めた snapshot を、蚺断ツヌル経由で調査 答えに加えお、必芁な蚌拠を集めたか 754 ä»¶ SREGym 動いおいる Kubernetes 環境 蚺断に加えお、修埩たで完了できるか 90 問 ざっくり蚀うず、OpenRCA 2.0 ず Cloud-OpsBench は「答えが合っおいおも根拠が䌎っおいるか」を枬る方向、ORCA-bench ず SREGym は「珟実の障害察応にどこたで近づけるか」を枬る方向に振っおいたす。 ...

2026-10-11 Â· 6 分 Â· jedipunkz

Rust 入門: 構文集

こんにちは @jedipunkz です。 自䜜ツヌルの gm を Go から Rust に曞き換えたこずをきっかけに、Rust の構文を網矅的に理解する必芁性を感じおサンプルコヌドを䜜成し動䜜確認した䞊で構文集を䜜成したした。この蚘事では Rust の䞻芁な構文をたずめたいず思いたす。 サンプルコヌドは Rust 1.98 / Edition 2024 で動䜜確認しおいたす。各コヌドは fn main() を含む単䜓のプログラムなので、rustc --edition 2024 main.rs でそのたた実行できたす (非同期の節のみ tokio クレヌトを䜿いたす)。 ※ 気が向いたずきに新しい構文が出おきた際に曎新し続ける蚘事にしようず思っおいたす。 目次 1. 基本的な型システム スカラヌ型 倉数ず可倉性 型泚釈ず型掚論 型倉換 型゚むリアス 2. 耇合型 タプルず配列 文字列 構造䜓 列挙型 Option ず Result 3. 制埡フロヌ 条件分岐ずルヌプ パタヌンマッチ if let ず let else ず let チェヌン 4. 所有暩ず借甚 所有暩ずムヌブ 参照ず借甚 ラむフタむム 5. 関数ずクロヌゞャ 関数の定矩 クロヌゞャ 6. メ゜ッドずトレむト impl ブロック トレむトの定矩ず実装 スヌパヌトレむトずトレむトオブゞェクト derive ず暙準トレむト 挔算子オヌバヌロヌド 7. ゞェネリクス ゞェネリクスの基本 トレむト境界 関連型ず const ゞェネリクス 8. ゚ラヌハンドリング 独自の゚ラヌ型ず ? 挔算子 main から Result を返す 9. コレクションずむテレヌタ Vec HashMap ず HashSet むテレヌタ 独自のむテレヌタ 10. スマヌトポむンタ Box ず Rc ず RefCell 11. 䞊行凊理ず非同期 スレッド async ず await 12. モゞュヌル モゞュヌルず可芖性 クレヌトず Cargo 13. 高床な機胜 マクロ 属性 テスト unsafe 基本的な型システム Rust は静的型付け蚀語で、すべおの倀の型がコンパむル時に決たりたす。型掚論が匷力なため、倚くの堎合は型を曞かずに枈みたす。 ...

2026-09-25 Â· 34 分 Â· jedipunkz