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

CUE+Goで安全かつ簡単に設定ファイルを自動生成してみた

kuro
December 01, 2023
590

 CUE+Goで安全かつ簡単に設定ファイルを自動生成してみた

Go Conference mini 2023/12/02 Winter in Kyotoの登壇資料です。

kuro

December 01, 2023
Tweet

Transcript

  1. 自己紹介 kuro @knkurokuro7 - 名前:kuroda naoki - 所属:株式会社サイバーエージェントAI事業本部 プリズムパートナーカンパニー -

    大学生の時、京都で過ごしました。 - 鴨川デルタで毎日のようにお酒を飲んだり、花火 をしたりしていました。 この三角のとこが鴨 川デルタです→
  2. CUEについて - Goで書かれた設定記述言語 - JSONやYAMLのように値を設定するだけでなく、同時に型を設定すること もできる。→値と型を同等に扱う。 - 型や制約の表現が豊富(例. string型やint型、デフォルト値、配列、struct、 パターン制約、for文、if

    ) - 異なるファイル間に定義を分割できる。 →「package」(https://cuelang.org/docs/tutorials/tour/packages/packages/)を使う - Goの処理の中で呼び出して、JSONやYAMLに変換できる。
  3. バリデーションの挙動 例えば先ほどの_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
  4. Pros&Cons Pros - バリデーションによってミスが減った(気がする?)。 - Goから直接呼び出して操作できるので、ロジックをGo側でも追加できる。 →特定のファイルは生成しないとか、特定の値はJSONファイルに出力する等 - 公式ドキュメントが詳しい。(https://cuelang.org/) Cons

    - いろんな制約や型を追加したくなるので、慣れてないメンバーには読みにくい。 - CUE→YAMLという流れなので、YAMLを直接書き換えたくなる→CIでチェック。 - 日本語での記事があまりない→これからもっと広まってほしい。。