水平野(すいへいや)

思ったこと考えたことを書いていく

世界を変えるコードを創った、かもしれない

先日も書いた通り、JSONのスキーマをXMLで表現するということにチャレンジししてみたのだが、思いのほかうまくいった。これはそれを処理するJavaコードと一緒にGitHubにあげている。
https://github.com/inomoto-hironobu/xjsonschema
github.com

この中のsrc/main/resourcesにスキーマのXML Schemaを置いている。

ただ、問題としてはどの程度の表現力を持たせるかということで、どの方向性に行くかで悩んでいた。シンプルさを重要視するか、多機能性を追求するか。

両方創る

この答えは、2つ作るということで解決した。つまりシンプル・イズ・ベストなスキーマと、多機能性を重要視するスキーマの両方を同時に開発していくことにしたのだ。とりあえず多機能性バージョンはTypea、タイピーと名づけ、シンプルバージョンはTypeb、タイペブと名づけた。

これによって唯一絶対の真理を追究するというおおよそ人間で成しえないことをすることは避けられた。そして、これによってとてもいいことが起きた。

シンプルさを考慮したスキーマ、タイペブが完成したのだ。というのも、シンプルであるがゆえにこれ以上付け加える要素がないので、これで開発終了となった。

タイペブは世界を変えるかもしれない

そしてこのタイペブだが、実用性は十分にある。まずはnpmで使われるpackage.jsonがあるとする。とりあえずこんな感じで。

{
  "name": "hoge",
  "version": "0.0.0",
  "description": "JSON用のスキーマのサンプル",
  "main": "src/js/main.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "http": "http-server",
    "build": "node src/js/main"
  },
  "repository": {
    "type": "git",
    "url": "https://hoge.com"
  },
  "author": "ほげ",
  "license": "MIT",
  "bugs": {
    "url": "https://hoge.com"
  },
  "homepage": "https://hoge.com",
  "devDependencies": {
    "typescript": "^2.2.1"
  },
  "dependencies": {
    "@types/jquery": "^3.2.1",
    "babel": "^6.23.0",
    "babel-cli": "^6.24.1",
    "eslint": "^3.15.0",
    "jsdom": "^11.1.0",
    "vue": "~2.1.10",
    "vue-router": "2.4.0"
  }
}

そしてこれのスキーマをタイペブで表現する場合はどうなるかというと、こうなる。

<?xml version="1.0" encoding="UTF-8"?>
<json-schema name="npm.package" xmlns="https://www.json.org/typeb">
	<string name="name" />
	<string name="version" />
	<string name="description" />
	<string name="main" />
	<typed-object name="scripts" type="string"/>
	<object name="repository">
		<string name="type" />
		<string name="url" />
	</object>
	<string name="author" />
	<string name="license" />
	<object name="bugs">
		<string name="url" />
	</object>
	<typed-object name="devDependencies" type="string"/>
	<typed-object name="dependencies" type="string"/>
</json-schema>

実際のpackage.jsonはもっといろいろ要素があるのだろうけど、それを表現するのはそれほど難しくはないだろう。そして、package.json以外の、世界にあまたあるJSONのスキーマとしてはほとんどの場合タイペブで事足りるのではないだろうか。現在開発されているJSON Schemaはパッと見た限り複雑になりそうなので、それに比べれば一般的には書きづらいとされるXMLでもこれならほとんどのITエンジニアならスラスラと書けるだろう。

後は検証するプログラミングコード

この単純さはスキーマを表現するプログラミングコードを作りやすいという面でもメリットは大きい。実際試しにJavaで書いてみたのだけれど苦も無く書けた。もっともプログラムコードの書き方が特殊だしあとで大きく変える可能性はある。しかし、なんにせよコードを書きやすいというところは変わらないはずだ。
そして、後は検証するコードを書きたいのだが、ここで苦労が大きそうだし、一人でやっていくのは難しい。これは世界を変えるコードであるという絶対の自信があるが、協力者が必要だ。