Upgrade to Pro — share decks privately, control downloads, hide ads and more …

cuelangについて / Learn CUE

cuelangについて / Learn CUE

株式会社Exciteさんと弊エンジニアコミュニティVolareの共同開催のLTイベントにてお話させていただいた内容です。
https://volare.connpass.com/event/218767/

非常に多くの参加者にお越しいただき、誠にありがとうございました。

CUE言語では、jsonやyamlのようなスキーマセットでありながら、プログラミング言語としてバリデーションや拡張が行える。
特にKubernetesなどの大規模なyamlを扱う際に非常に便利である。
また、Kubernetesの設定ファイルのテンプレートには、HelmとKustomizeがよく使われているが、それらとは一線を画す画期的な仕組みを採用しているのがCUE言語である。
これまでのjsonなどで取られていた値に型をつけるというアプローチとは全く異なる型と値はlatticeを成すというような考え方だ。
latticeとは何かはスライドの方を見て欲しい。
また、latticeがただ一つの値に収束することをCUEでは、resolveと読んでいる。
この設計は極めて秀逸である。
最も秀逸であると感じる点が、宣言的なアプローチが取れること。
これまでの黒魔術や継承といった考え方では、手続き的な処理が必要だったので、処理なくして値は一つに定まらなかったということだ。

Keyword: Cue, Cuelang, Kubernetes, yaml, json

reference

https://zenn.dev/riita10069/articles/plactice_cuelang

https://qiita.com/riita10069/items/1c9077657fcd62843aaf

Abde1cc59b4baaec3c12d65581c5d017?s=128

riita10069

August 13, 2021
Tweet

Transcript

  1. 設定記述言語CUEについて 東京工業大学 工学院情報通信系 山田 遼太

  2. 山田 遼太 東工大 情報通信系 Berrar Labs. 機械学習モデルの評価指標について 株式会社メルカリ Microservice Platform CI/CD

    merpay Architect
  3. ਓ͕هड़͢ΔઃఆϑΝΠϧͰ͋Δ

  4. ͨͩͷσʔλߏ଄Ͱ͸ͳ͍ ܧঝͱΦʔόʔϨΠΛೝΊ͍ͯͳ͍఺͕ඇৗʹ༏Ε͍ͯΔʂʂ https://cuelang.org/docs/concepts/logic/

  5. ͲͷΑ͏ͳ৔໘Ͱ࢖͏ͷ͔ʁ

  6. ௨ৗͷϓϩάϥϛϯάݴޠͱͷҧ͍ • ܕΛ஋ͱಉ༷ʹѻ͏ɻ • ͢΂ͯͷ஋͸ɺlatticeʹॱং෇͚ΒΕΔɻ

  7. latticeͱ͸ͳʹ͔ • Latticeͱ͸ɺ൒ॱংू߹Ͱ͋Γɺ̎ͭͷཁૉΛબΜͩͱ͖ ʹɺ࠷খ্ݶͱ࠷େԼݶ͕Ұҙʹଘࡏ͢Δɻ

  8. boolʹ͓͚Δlattice • ࣍͸ɺbool ʹ͍ͭͯΈͯΈ·͠ΐ͏ɻ • trueͱfalseͷ྆ํ͕boolͷΠϯελϯε • ྫ͑͹ɺ͋Δ஋͕trueͰ͋ΓɺboolͰ 
 ͋Δͱߟ͑ͨ৔߹࠷େԼݶ͸trueʹͳΔ

    • Bool΋஋Ͱ͋ΔͷͰɺtrue | false ͷ݁Ռ 
 ͸ɺCUEͰ͸ɺ͔ͨ͠ʹboolʹͳΔ
  9. numberʹ͓͚Δlattice • NumberͷΠϯελϯε͸ɺintͱ fl oat • ཁૉ਺͸ແݶͳͷͰӈਤ͸Ұ෦෼ • ͋Δ஋ʹɺnumber, <10,

    20.0Ͱ͋Ε͹ 
 ࠷େԼݶ͸ɺ20.0͕ͩɺ͜͜ʹint͕ 
 ՃΘΕ͹ɺbottomͰ͋Δɻ • CUE͕࣮ࡍʹ͜ͷΑ͏ʹ࣮૷͍ͯ͠Δ͜ͱ 
 Λআ͚͹౰વͷ͜ͱͰ͋Δɻ
  10. ͦͷଞͷܕʹ͓͚Δlattice

  11. ੜ໋ɺӉ஦ɺͦͯ͠ສ෺ʹ͍ͭͯͷ ڀۃͷٙ໰ͷ౴͑

  12. Ͱ͖Δ͜ͱ • Data Validation • Schema De fi nition •

    Code Generation and Extraction • Querying • Scripting • Integration
  13. Data Validation

  14. Schema De f inition

  15. Default Value

  16. Default Value

  17. Integration • Json • YAML • Go • Protobuf •

    OpenAPI • CRDs • Kubernetes