Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CUE+Goで安全かつ簡単に設定ファイルを自動生成してみた
Search
kuro
December 01, 2023
0
710
CUE+Goで安全かつ簡単に設定ファイルを自動生成してみた
Go Conference mini 2023/12/02 Winter in Kyotoの登壇資料です。
kuro
December 01, 2023
Tweet
Share
More Decks by kuro
See All by kuro
最速Green Tea 🍵 Garbage Collector
kuro_kurorrr
1
190
fieldalignmentから見るGoの構造体
kuro_kurorrr
0
150
Go1.24 go vetとtestsアナライザ
kuro_kurorrr
2
950
Go1.24で testing.B.Loopが爆誕
kuro_kurorrr
0
210
PipeCDの歩き方
kuro_kurorrr
5
230
Go1.23で入った errorsパッケージの小さなアプデ
kuro_kurorrr
2
540
これで猛暑を乗り越えよう!2024年真夏の最新トレンドTerraform Tips集
kuro_kurorrr
5
970
データカタログ運用物語 〜令和6年夏の理想と現実〜
kuro_kurorrr
1
250
DynamoDB コスト最適化っぽいことの基本 with Terraform
kuro_kurorrr
3
750
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
56
9.4k
[RailsConf 2023] Rails as a piece of cake
palkan
55
5.5k
Testing 201, or: Great Expectations
jmmastey
42
7.5k
The Pragmatic Product Professional
lauravandoore
34
6.6k
Optimising Largest Contentful Paint
csswizardry
37
3.3k
The World Runs on Bad Software
bkeepers
PRO
68
11k
The Invisible Side of Design
smashingmag
299
50k
Music & Morning Musume
bryan
47
6.5k
How to Ace a Technical Interview
jacobian
276
23k
Building Adaptive Systems
keathley
41
2.6k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
19
1.2k
Transcript
CUE+Goで安全かつ簡単に設定 ファイルを自動生成してみた Go Conference mini 2023/12/02 Winter in Kyoto kuroda
naoki
自己紹介 kuro @knkurokuro7 - 名前:kuroda naoki - 所属:株式会社サイバーエージェントAI事業本部 プリズムパートナーカンパニー -
大学生の時、京都で過ごしました。 - 鴨川デルタで毎日のようにお酒を飲んだり、花火 をしたりしていました。 この三角のとこが鴨 川デルタです→
CUEについて - Goで書かれた設定記述言語 - JSONやYAMLのように値を設定するだけでなく、同時に型を設定すること もできる。→値と型を同等に扱う。 - 型や制約の表現が豊富(例. string型やint型、デフォルト値、配列、struct、 パターン制約、for文、if
) - 異なるファイル間に定義を分割できる。 →「package」(https://cuelang.org/docs/tutorials/tour/packages/packages/)を使う - Goの処理の中で呼び出して、JSONやYAMLに変換できる。
なぜCUEを使いたいのか PipeCDというCDツール(ArgoCDみたいなもの)を使いたい。 →そのために各環境×アプリケーション(ECS or Lambda)×(設定YAML+リソース 記述YAML)=約360YAMLファイル の数のYAMLファイルを作成する必要があった。 →ファイルごとに共通した部分も多く、なるべくcopy&pasteミスを減らしたい。 →CUEでバリデーションをしながらGoでファイルを自動生成 →さらにコマンド化する。
具体的な実装(CUE) 1. ベースファイル→全てのファイルで共通 する値(バージョンとか)や各値に対する制 約(cpuやmemoryとか) 2. 各設定ファイル→各YAMLで異なる具体 的な値 ↓同じpackageであればファイルを分割でき る。
具体的な実装(Go) 1. ベースファイルと各個別ファイル をマージしてインスタンスを作成 2. バリデーションを実行 3. 各CUEのvalueごとにYAMLに 変換 4.
YAMLファイルに出力 ("cuelang.org/go/cue"、"cuelang.or g/go/cue/load"、"cuelang.org/go/en coding/yaml"を使用)
バリデーションの挙動 例えば先ほどの_cpuの値を 25600としたとき。 make pipecdコマンドを叩くと、 {"time":"2023-12-02T06:08:45.056174+09:00","level": "ERROR","msg":"failed to generate cue
file: value error (path = cue/app/dev/fuga/taskdef.cue): _cpu: invalid value 25600 (out of bound <=4096)","syslog":{"appname":"unknown","env":"loca l","tag":"","commit":""}} make: *** [pipecd] Error 1
Pros&Cons Pros - バリデーションによってミスが減った(気がする?)。 - Goから直接呼び出して操作できるので、ロジックをGo側でも追加できる。 →特定のファイルは生成しないとか、特定の値はJSONファイルに出力する等 - 公式ドキュメントが詳しい。(https://cuelang.org/) Cons
- いろんな制約や型を追加したくなるので、慣れてないメンバーには読みにくい。 - CUE→YAMLという流れなので、YAMLを直接書き換えたくなる→CIでチェック。 - 日本語での記事があまりない→これからもっと広まってほしい。。
おまけ - CUEもっと広まってほしい。 - playground(https://cuelang.org/play/#cue@export@cue)もあるのでぜひ試 してみてください。 - 使えそうな部分は無限にありそうなので、もし何か思いついたらぜひ教えてくだ さい。 -
あと、sivchariさんスライドチェックしてもらってありがとうございます。