新しいプログラミング言語「Pkl」

プログラミング

新プログラミング言語「Pkl」とは

アップル社が、新しいプログラミング言語を公開しました。

その名も「Pkl」。

(発音は「ピックル」と読むそうです)

オーブンソースでの公開となっており、ドキュメント関連もすでに公開されています↓

Introduction :: Pkl Docs

Pklは静的型付けの言語となっており、
コンフィグレーション設定ファイルを生成するのに特化した言語になっているようです。

コンフィグレーションを規定するためのフォーマットとしては現在JSON、YAML、toml、XMLなど無数のフォーマットが乱立していて、
保守が無秩序化して混乱の元になったり文法がこんがらがってしまったりと
さまざまなデメリットを生み出す状況になってしまっています。

そういった状況を打開すべく、最適な表現でコンフィグレーションを生成できるようにと開発された言語のようですね。

ドキュメントではPkl自身のことを「configuration-as-code(コードとしてのコンフィグレーション)」と表現しています。

ユースケース

サービスやアプリケーションのコンフィグレーションにPklを使用することにより、以下のようなメリットを生むことができます。

・コンフィグレーションにおける無駄な冗長性を減らす
・テンプレート化や再利用、抽象化によって保守性を向上

またPklで定義したコンフィグレーションをJSONに変換するなどしてアプリケーションに適用するのではなく、Pklそのものをネイティブなコンフィグとして使うことで
用意されているコンフィグレーションライブラリを使うこともできます。

高水準のAPIでコンフィグを扱うことを可能にしてくれるので、色々と便利そうです。↓

pkl-config-java Library :: Pkl Docs

現時点(2024/02/05)ではこのライブラリはJVMランタイム、Swift、Go言語でしかサポートされていませんが、対応言語は追って拡大予定だそうです。

コンセプト

Pklでは重きを置いているコンセプトがいくつかあります。

詳しくは公式のドキュメントに記載されていますが、ここで重要そうなものをいくつかピックアップしてみました。

Concepts :: Pkl Docs

抽象化

コンフィグレーションというものは時間が経てば経つほど肥大化、複雑化していくものですが、そのサイズを押さえ込み、かつ極力シンプルにするための仕様がPklにはあります。

具体的には

似ている設定項目をそれぞれの違いがわかるように表現したり
共通の設定項目を抽象化させたり
コンフィグレーションのデータと構成を分離したり

といった工夫がされています。

不変

Pklで定義するすべてのデータは不変です。データを操作して新しい値が返ったとしても、元の値は変わらず存在し続けます。
これによって多くのエラーを防ぐことができます。

レンダリング

Pklのデータを別のコンフィグレーションフォーマット(JSON、XML、YAML、、etc)に変換できます。

サポートされていないフォーマットも、カスタムレンダラーを自作することで対応させることができるようです。

類似性

Pklのコードそのものと実際に生成されるコンフィグレーションは、構造的に似たものになります。

それによってコードを読解する時の理解度が上がりますし、コーディングのしやすさも上がります。

まとめ

・Pklは、アップルによって開発されたコンフィグレーション特化のプログラミング言語である
・Pklは従来のコンフィグレーションフォーマット(JSON、XMLなど)の欠点を補い、シンプルかつ保守性を重視した仕様になっている

メリットがたくさんある一方で、
Pklは従来のフォーマットに比べてバイナリが大きくなりやすいといった欠点もあります。

またリリースされたばかりということもあってコミュニティの規模も小さく、使用に基づいた知見もまだ十分たまっていません。
そこらへんは、これから盛り上がっていくことを期待したいです。

僕もまだ本格的に試してみていないので、使ってみての感想なんかを今後書きたいなーと思います。

コメント

タイトルとURLをコピーしました