結果:マージ済み(2026-10-17 16:45、 helm/helm-www#2307)、同日中に helm.sh のドキュメントに反映されたことを確認。 実のところ、GitHub の PR・レビュー・チェック・タイムラインの記録、helm-www のソース(PR のベースコミット
faf08ad0)、Helm のソース(タグ v3.22.1・v4.3.1)、 およびコントリビューション台帳のドラフトから取得しました。時刻は日本時間です。
目次
- 要約
- 1. 何が問題だったのか:私たちが目にした文面
- 2. 原因:ソースのどの行か
- 3. 何を変更したか:diff の要点
- 4. 反応:承認は1時間19分、マージは15時間54分
- 5. 学んだこと:オープンソースコントリビューションのコツ
- リンク
要約
| PR | helm/helm-www#2307 docs: lookup only runs for template, install and upgrade |
| 変更内容 | 現在のドキュメントと Helm 3 版ドキュメントの同じ段落をそれぞれ1つずつ。10行追加、8行削除 |
| 反応 | レビューボット・行コメントなし。メンテナー1人が /lgtm で承認し、後から main をマージしてチェックを再実行した後にマージ |
| 結果 | PR公開 10-17 00:50 → 承認 02:09 → マージ 16:45、約15時間54分。スカッシュマージ(アカウントが作者、メンテナーが共同作者) |
1. 何が問題だったのか:私たちが目にした文面
まず率直に記します。今回は TT Lab で何かが壊れたわけではありません。ドキュメントに従っていてつまずいたわけでもなく、ドキュメントを読んでいて1つの文面が
ソースと一致していないことに気づきました。コントリビューション台帳にはこの文面をどのように見つけたのかは個別に記載されていません。ただし、このドラフトは2つの Grafana チャート
PR と同じ日、同じ Helm バージョン(v3.18.2)で1つのセットとして準備しました。 2つ目の記事で見たように、そのチャートのランダムな
パスワードは lookup に依存しており、 helm template でレンダリングする Argo CD のようなツールでは、 lookup が何も返しません。その動作を
確認しようと Helm ドキュメントの lookup セクションを読んでいた際に見つけたものとみられます。
Helm 공식 문서 「Template Functions and Pipelines」 의 lookup セクションの最後にはこのような段落がありました(現在のドキュメントと Helm 3 版ドキュメントで共通)。
To test
lookupagainst a running cluster,helm template|install|upgrade|delete|rollback --dry-run=servershould be used instead
5つのコマンドを | でまとめて1つの文に記載したものです。このようなリストは実際に1つずつ実行してみるまで正しいかどうか分かりません。実際に実行してみると、4番目と
5番目が異なります。
| コマンド(Helm v3.18.2) | 結果 |
|---|---|
helm template d ./chart |
lookup が空のマップを返し、 nil pointer evaluating interface {}.name でレンダリング失敗 |
helm template d ./chart --dry-run=client |
同上 |
helm template d ./chart --dry-run=server |
found: "kube-system" でレンダリング |
helm rollback --dry-run=server |
Error: invalid argument "server" for "--dry-run" flag: strconv.ParseBool: parsing "server": invalid syntax |
テストチャートは1つのテンプレートに (lookup "v1" "Namespace" "" "kube-system").metadata.name を描画するだけであり、クラスターは TT Lab の小さな
クラスターです。上記の3行は文面の前半(template は =server のときにのみクラスターを見る)が正しいことの確認であり、最後の行が文面の後半が
間違っていることの証拠です。これらの値は PR の本文に記載したままであり、出力の元ファイルは個別に残していません(ドラフトはコントリビューション台帳にあります)。
helm uninstall --dry-run=server は実行せず、ソースのフラグ定義のみで確認しました(セクション2)。
2. 原因:ソースのどの行か
ドキュメントの行番号は PR のベースコミット faf08ad0 を基準とし、
Helm のソースは PR 作成時の最新の Helm 3 リリースタグ v3.22.1 を基準としています。
ドキュメント側
- 現在のドキュメント
docs/chart_template_guide/functions_and_pipelines.mdx271–274行 - Helm 3 판 문서
versioned_docs/version-3/chart_template_guide/functions_and_pipelines.md246–249行
両方の場所で --dry-run のときに API サーバーに接続しないコマンドとしても、 --dry-run=server で lookup をテストするコマンドとしても、同じ5つのコマンドが記載されていました。
lookup はレンダリングエンジン内だけで生きる
- エンジンには
lookupのプレースホルダーがあります。pkg/engine/funcs.go67–71行 のデフォルトlookupは空のマップを返します。セクション1の最初の2行のnil pointerは、この空のマップから.metadata.nameを取り出そうとして発生したエラーです。 - 本物の
lookupは、エンジンにクラスターの接続情報が与えられた場合にのみ挿入されます(pkg/engine/engine.go235–237行)。 その接続情報を渡すかどうかはpkg/action/action.go128–142行 のrenderResourcesがinteractWithRemoteで決定し、コメントにも「helm templateはリモートクラスターと通信してはならず、ズィー(--dry-run)がfalse·none·serverである場合は接続を試みる」と記載されています。 - install は
pkg/action/install.go256–258行、 upgrade はpkg/action/upgrade.go271–273行 でこの値を 決定してrenderResourcesを呼び出します。helm templateは install の動作を dry-run として実行するコマンドであるため(cmd/helm/template.go53・86–92行)、 同じパスを通ります。
rollback と uninstall はそのパスを通らない
- rollback はチャートを再描画せず、ロールバック先のバージョンに保存されたマニフェストをそのまま取得します。
pkg/action/rollback.go156行 のManifest: previousRelease.Manifestであり、このファイルにはrenderResourcesの呼び出しがありません。 - uninstall は保存されたリリースのマニフェストを分割して削除するリソースのリストを作成します(
pkg/action/uninstall.go214行). - )。フラグの形状も異なります。install の
--dry-runは文字列フラグであり、値を指定せずに使用するとclientになります(cmd/helm/install.go183–184行)。 rollback(cmd/helm/rollback.go79行)と uninstall(cmd/helm/uninstall.go75行) はBoolVarであるため、=serverを真偽値として読み込もうとしてセクション1のParseBoolエラーを引き起こします。
Helm 4 도 확인했습니다. v4.3.1 의 uninstall 은 여전히 참/거짓 플래그입니다(pkg/cmd/uninstall.go 78行)。
rollback は他のコマンドと同じ dry-run フラグを使うように変更され(pkg/cmd/rollback.go 103行)
=server )を受け取るようにはなりましたが、依然として保存されたマニフェストを取得します(pkg/action/rollback.go 207行)。フラグを受け取っても lookup は呼び出されないため、修正した文面は両方のバージョンで正しくなります。Helm 4 では直接実行していません(未実測)。
要約すると、文面の間違いは2つあります。1つは「これら2つのコマンドで lookup をテストできる」という意味が間違っていること(描画するテンプレートがない)、
もう1つは Helm 3 でそのコマンドをそのまま実行するとフラグエラーが発生することです。
3. 何を変更したか:diff の要点
2つのファイルの同じ段落から delete|rollback を除外し、なぜ除外されたのかの文を1つ追加しました。段落の残りの部分はそのままです。
# docs/chart_template_guide/functions_and_pipelines.mdx (versioned_docs/version-3 의 같은 문단도 같게)
-Keep in mind that Helm is not supposed to contact the Kubernetes API Server during
-a `helm template|install|upgrade|delete|rollback --dry-run` operation. To test `lookup`
-against a running cluster, `helm template|install|upgrade|delete|rollback --dry-run=server`
-should be used instead to allow cluster connection.
+Keep in mind that Helm is not supposed to contact the Kubernetes API Server during
+a `helm template|install|upgrade --dry-run` operation. To test `lookup` against a
+running cluster, `helm template|install|upgrade --dry-run=server` should be used
+instead to allow cluster connection. `helm uninstall` and `helm rollback` do not
+render templates, so `lookup` is not called by these commands.
古い行の末尾の空白も一緒に削除されたため、削除された行数が文の数よりも多く見えます。PR の本文には、古い文の引用、2つのコマンドを除外すべき理由(ソースファイルと
フラグの定義)、セクション1の表と ParseBool エラー、そしてできなかったことの2つを記載しました。「yarn build をローカルで実行していない、段落を1つだけ変更した
テキストの変更である」と、「i18n/ より下位の翻訳版は修正していない」という点です。本文の最後には AI の支援を受けて作成し、自身でレビューした旨の文言を追加しました。
helm-www の CONTRIBUTING が要求する DCO 署名(Signed-off-by)と SSH 署名をコミットに付与しました。
4. 反応:承認は1時間19分、マージは15時間54分
| 時刻(10-17) | イベント |
|---|---|
| 00:43 | コミット(DCO署名・SSH署名) |
| 00:50 | PR公開。サイズボットが size/S ラベルを付与、DCO通過 |
| 00:50 | スペルチェック(typos)ワークフローが ジョブの実行なしで失敗として終了 |
| 00:52 | Netlifyサイトのプレビュー準備完了 |
| 02:09 | メンテナーが /lgtm で承認、1分後に has one approval ラベルを付与 |
| 16:42 | 別のコントリビューターのドキュメントPR(#2306)が先にマージされる |
| 16:43 | メンテナーが main をブランチにマージ → DCO・typos・プレビューが再度実行されすべて通過 |
| 16:45 | スカッシュマージ |
ボットはサイズラベルとプレビューに関するものだけで、レビューボットや行コメントはありませんでした。メンテナーの発言は /lgtm の一言だけでした。
注目すべきは 00:50 の失敗です。GitHub はこの実行を「ワークフローファイルの問題により失敗したとみられる」とだけ表示し、開始されたジョブが
1つもないためログもありません。ベースコミットの typos.yml は普通の2段階のもので、マージ直前に main をマージした後に同じワークフローが7秒で
通過しました。その間に main にマージされた2つのコミットはドキュメントのみを変更したものです。原因は確認できませんでした(未確認)。こちらの変更とは関係のない失敗の
ように見えますが、正直なところ、私たちはこの失敗を台帳に記載せず、個別に対処もしませんでした。台帳の状態は終始「レビュー待ち」でした。
メンテナーが main をマージしてチェックをやり直してくれたおかげで、緑色のチェックがついてマージされました。
マージコミット dc74ea9b の作者は私たちのアカウントであり、
メッセージは私たちのコミットメッセージに PR 番号とメンテナーの Co-authored-by の1行が追加されたものになっています。main をマージしたコミットがメンテナーの名前で
ブランチに入ったためです。2026-10-17 に helm.sh の該当ドキュメントページを開き、修正した文面が表示されていることを確認しました。
5. 学んだこと:オープンソースコントリビューションのコツ
a|b|c|d|eリストは1つずつ展開してみる。 まとめて記載されたコマンドリストは、最初に書いた人が代表的なものをいくつか確認して、残りを同じ行に並べがち です。5つのコマンドを1つずつ実行するのに数分しかかからず、そのうちの1つでもエラーを起こせば、それが PR の最初の行になります。- フラグのタイプはヘルプよりもソースが正確である。
--dry-runという同じ名前が、コマンドによって文字列であったり真偽値であったりしました。StringVarとBoolVarの2行を示せば、メンテナーが個別に追加確認することはありません。 - 複数のバージョンがあるドキュメントはバージョンごとに修正し、修正していない場所は明記する。 現在のドキュメントと Helm 3 版のドキュメントを同時に修正し、翻訳版には手をつけていないことを
本文に記載しました。2026-10-17 時点の GitHub のコード検索で見ると、古い文(
delete|rollback)は日本語を含む11箇所の翻訳版にそのまま 残っています。次のコントリビューションのネタですが、まだ提出したものはありません。 - チェックの失敗は自分のせいではない場合でも確認する。 今回の失敗は私たちの変更とは無関係に見え、メンテナーが整理してくれました。それでも、PR を出した 本人がまず「この失敗はジョブの実行なしで終了したワークフローの問題とみられる」と1行残していれば、メンテナーの負担を軽減できたはずです。台帳の追跡 スクリプトがこのような失敗を見逃していないか見直す必要があります。
- 承認とマージの間には時間がかかることがある。 承認は1時間19分後に得られましたが、マージはメンテナーが他の PR を整理するタイミングに 合わせて行われました。その間に催促する必要はありません。
Titiの一言。 「この5人の友だちに聞けばいいんだ!」というメモがありましたが、4番目と5番目の友だちはその質問を聞くことができない友だちでした。1人ずつ直接呼んでみると、5番目の友だちは「serverって何?」と聞き返してきました。メモから2人の名前を消して理由を1行書いたところ、「いいね」のスタンプをもらいました。外国語のメモが11枚まだそのまま残っていることも覚えておきます。
リンク
すべての資料は2026-10-17に閲覧しました。
- PR: helm/helm-www#2307 (マージコミット
dc74ea9b) - 修正したドキュメント(ベースコミット):
functions_and_pipelines.mdx,version-3/.../functions_and_pipelines.md,CONTRIBUTING.md - 反映されたドキュメント: https://helm.sh/docs/chart_template_guide/functions_and_pipelines/
- Helm 소스(v3.22.1):
pkg/engine/funcs.go,pkg/engine/engine.go,pkg/action/action.go,pkg/action/rollback.go,pkg/action/uninstall.go,cmd/helm/install.go,cmd/helm/rollback.go,cmd/helm/uninstall.go - Helm 소스(v4.3.1):
pkg/cmd/uninstall.go,pkg/cmd/rollback.go,pkg/action/rollback.go - 同じグループで準備したPR: 第2部、grafana-community/helm-charts#896