0Pricing
Helm Academy · レッスン

with でブロックの Scope を限定する

ドットをサブツリーに絞り込む方法と注意点を学びます。

「with でブロックの Scope を限定する」はCoddyKit上の無料Helm Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはHelm Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Helm Academyコースには全4レッスンが含まれています。

長いパスの繰り返しをやめる

.Values.image.repositoryを何度も入力すると冗長になります。withアクションはドットをサブツリーに絞り込み、より短いパスで記述できるようにします。

withアクション

withブロックは{{ with SOMETHING }}で始まり、{{ end }}で閉じます。その中では、dotが渡した値にリセットされます。

{{ with .Values.image }}
repository: {{ .repository }}
tag: {{ .tag }}
{{ end }}

ドットが内側へ移動する

中に入ると、.repositoryは.Values.image.repositoryを意味します。withキーワードがドットをサブツリーに再束縛するため、その下にあるすべてのパスを短くできます。

image:
  repository: nginx
  tag: "1.27"

ガードとしても使える

値がemptyまたは存在しない場合、withはブロック全体をスキップします。つまり、ドットのスコープを絞ると同時にifのような役割も果たします。🛡️

else を追加する

if と同様に、with では else 分岐を指定できます。値が空の場合に else がレンダリングされるため、任意の設定値に対するすっきりしたフォールバックを用意できます。

{{ with .Values.resources }}
resources:
{{ toYaml . | indent 2 }}
{{ else }}
# no resources set
{{ end }}

スコープの落とし穴

ここが落とし穴です。with の内部では、ドットはもはやルートではありません。そのため .Release.Name は機能しません。Release はそのサブツリーの下に存在しないためです。

$ でルートに戻る

with の内部でルートの値を使うには、$ を先頭に付けます。ドル記号は、どれだけ深くネストしていても常に元のルートコンテキストを指します。

{{ with .Values.image }}
name: {{ $.Release.Name }}
image: {{ .repository }}
{{ end }}

ブロックを小さく保つ

with によってドットの指す先が変わるため、大きなブロックはすぐに分かりにくくなります。ドットの指す先が明確になるよう、with セクションは短く保ちます。

with と if

フラグを確認するだけなら if を使い、その値の中に入ることも必要なら with を使います。with はドットの指す先を変えますが、if は変えません。

スコープを確認する

ドットが何を保持しているか分からない場合は、helm template でレンダリングして出力を確認するか、複雑な with ブロックのデバッグ中にスコープを出力します。

helm template ./mychart

with ブロックをネストする

with の中に別の with をネストして、さらに深い階層へ入ることができます。レベルが一つ進むたびに ドット も一段深い場所を指すため、現在位置を把握しておきます。

{{ with .Values.image }}
{{ with .pullSecrets }}
# . is now pullSecrets
{{ end }}
{{ end }}

確認問題

{{ with .Values.image }} ブロックの中で .Release.Name を読み取ろうとしましたが、空になっています。

まとめ

with でドットのスコープを変更し、空の場合のガードを自動的に適用し、else のフォールバックを追加して、$ でルートに戻れるようになりました。よりすっきりしたテンプレートを作れます! 🎯

よくある質問

「with でブロックの Scope を限定する」レッスンは無料ですか?

はい。「with でブロックの Scope を限定する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Helm Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Helm Academyコースには全4レッスンが含まれています。

「with でブロックの Scope を限定する」で何を学びますか?

ドットをサブツリーに絞り込む方法と注意点を学びます。 ブラウザで直接実行するハンズオンコードでHelm Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Helm Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのHelm Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「with でブロックの Scope を限定する」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このHelm Academyレッスンでコードを書いて実行できますか?

はい。すべてのHelm Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. if と else による条件ブロック
  2. 条件式の真偽値と演算子
  3. range でリストと Map をループする
  4. with でブロックの Scope を限定する
← Helm Academyに戻る