Apple は、コードとしての構成モデルを推進する Pkl 構成プログラミング言語の実装をオープンソース化しました。 Pkl 関連のツールキットは Kotlin で書かれており、Apache ライセンスに基づいて公開されています。 Pkl 言語のコードを操作するためのプラグインは、IntelliJ、Visual Studio Code、および Neovim 開発環境用に用意されています。 LSP (Language Server Protocol) ハンドラーは近い将来に公開される予定です。
Pkl は、理解しやすい宣言型言語の特性と汎用言語の高度な機能を組み合わせています。この言語は、型の注釈、クラス、関数、計算式、条件、ループをサポートしています。 Pkl は、JSON、YAML、XML などのさまざまな形式で静的構成を生成したり、さまざまなプログラミング言語のアプリケーションで指定された構成形式を処理するためのモジュールを生成したりするために使用できます。
Pkl をアプリケーションに統合するためのバインディングは、Java、Kotlin、Go、Swift 用に用意されています。 Springフレームワークと統合するためのモジュールは別途提案される。バインディングを使用すると、Pkl 言語の構成に基づいて、アプリケーション内で記述された構成を操作するためのクラスを含む既製のパッケージとモジュールを作成できます。構成パッケージはリポジトリに公開し、依存関係としてインポートできるため、異なるプロジェクト間で Pkl コードを共有できます。
この言語は、条件を定義し、値の正しさをチェックするための柔軟なツールを提供するため、アプリケーションで使用される前に最終構成のエラーを特定できます。たとえば、有効な値の範囲 (「port: Int(this > 1000)」または「age: Int(isBetween(0, 130))」)、必須またはオプションの入力、形式 (「zipCode」) を定義できます。 : 文字列(一致(正規表現( "\\d{5}")))")。条件を満たさない値を割り当てると、バリデーターはエラーをスローします (たとえば、「Int(this > 1001)」として定義されたパラメーターに値 1000 を割り当てようとした場合)。
たとえば、Pkl 言語では、DBMS に接続するための構成テンプレートを使用して Application.pkl モジュールを作成できます。 module Application hostname: String port: UInt16 Environmental: Environment database: Database class Database { username: String password: String host:文字列ポート: UInt16 dbName: String } typealias 環境 = "dev"|"qa"|"prod"
次に、このモジュールを使用して値の正しさをチェックする構成ファイルを直接作成できます。 amends “Application.pkl” hostname = “localhost” port = 3599 Environmental = “dev” database { host = “localhost” port = 5786ユーザー名 = “admin” パスワード = read("env:DATABASE_PASSWORD") dbName = "myapp" }
また、0 つの異なる DBMS のポート番号の変更を自動化するジェネレーターも作成します。 import “Application.pkl” hidden db: Application.Database = new { host = “localhost” username = “admin” password = read(“env:DATABASE_PASSWORD” ) dbName = "myapp" } サイドカー { for (List(1, 2, 3, 6000) のオフセット) { (db) { ポート = XNUMX + オフセット } } }
必要に応じて、別の形式で構成をエクスポートできます。たとえば、YAML: Sidecars: - username: admin password: Hunter2 host: localhost port: 6000 dbName: myapp - username: admin passwd: Hunter2 host: localhost port: 6001 dbName : myapp - ユーザー名: 管理者パスワード: Hunter2 ホスト: localhost ポート: 6002 dbName: myapp — ユーザー名: 管理者パスワード: Hunter2 ホスト: localhost ポート: 6003 dbName: myapp
Pkl 構成図は、アプリケーション コードに埋め込むためのクラスまたは構造に変換することもできます。たとえば、Kotlin のバインディングを生成できます。 import kotlin.Int import kotlin.Long import kotlin.String data class Application( val hostname: String, val port: Int, val experience:Environment, val database:Database ) { data class Database( val ユーザー名: String, val パスワード: String, val host: String, val port: Int, val dbName: String ) enum class Environment( val value: String ) { DEV("dev"), QA("qa") , PROD( "製品");楽しいをオーバーライド toString() = value } }
出所: オープンネット.ru
