コンテンツにスキップ

JSONNET

出典: フリー教科書『ウィキブックス(Wikibooks)』

概要

[編集]

JSONNETは、アプリケーションおよびツール開発者向けの設定言語です。JSONを拡張した構文を持ち、設定データの生成や管理を効率化します。

主な特徴

[編集]

基本機能

[編集]
  • 設定データの生成
  • 副作用のない純粋な処理
  • 設定の整理、単純化、統合
  • 大規模な設定の管理

JSONの拡張として

[編集]
  • オープンソース(Apache 2.0ライセンス)
  • 親しみやすい構文
  • フォーマッタとリンターの提供
  • エディタとIDE統合
  • 形式的な仕様定義

プログラミング例

[編集]

オブジェクト指向による重複排除

[編集]

例1:基本的なオブジェクトの継承

{
  person1: {
    name: "Alice",
    welcome: "Hello " + self.name + "!",
  },
  person2: self.person1 { name: "Bob" },
}

関数の使用

[編集]

例2:関数によるオブジェクト生成

// オブジェクトを返す関数
local Person(name='Alice') = {
  name: name,
  welcome: 'Hello ' + name + '!',
};

{
  person1: Person(),
  person2: Person('Bob'),
}

複数フォーマットの生成

[編集]

例3:異なる設定ファイルの生成

local application = 'my-app';
local module = 'uwsgi_module';
local dir = '/var/www';
local permission = 644;

{
  'uwsgi.ini': std.manifestIni({
    sections: {
      uwsgi: {
        module: module,
        pythonpath: dir,
        socket: dir + '/uwsgi.sock',
        'chmod-socket': permission,
        callable: application,
        logto: '/var/log/uwsgi/uwsgi.log',
      },
    },
  }),

  'init.sh': |||
    #!/usr/bin/env bash
    mkdir -p %(dir)s
    touch %(dir)s/initialized
    chmod %(perm)d %(dir)s/initialized
  ||| % {dir: dir, perm: permission},

  'cassandra.conf': std.manifestYamlDoc({
    cluster_name: application,
    seed_provider: [
      {
        class_name: 'SimpleSeedProvider',
        parameters: [{ seeds: '127.0.0.1' }],
      },
    ],
  }),
}

歴史

[編集]

JSONNETという名前は、JSONと「sonnet」(ソネット)を組み合わせた造語で、「ジェイ・ソネット」と発音します。2014年初頭にGoogleの20%プロジェクトとして始まり、8月6日に公開されました。設計はGoogleの社内で使用されている複数の設定言語の影響を受けており、世界で最も複雑なITシステムの設定経験が反映されています。

現状

[編集]
  • 多くの企業やプロジェクトで使用
  • Googleによるオフィシャルプロダクトではない
  • オープンソースとしてGoogleが所有権を持つ

ライセンス

[編集]

特に明記がない限り、このコンテンツはCreative Commons Attribution 2.5でライセンスされています。