{"id":15266,"date":"2025-06-07T15:28:31","date_gmt":"2025-06-07T06:28:31","guid":{"rendered":"https:\/\/www.sambuichi.jp\/?p=15266"},"modified":"2025-06-07T15:28:31","modified_gmt":"2025-06-07T06:28:31","slug":"amazon-ec2%ef%bc%88linux%ef%bc%89%e3%81%ab-un-cefact-spec-jsonschema%e3%83%86%e3%82%b9%e3%83%88%e7%92%b0%e5%a2%83%e6%a7%8b%e7%af%89","status":"publish","type":"post","link":"https:\/\/www.sambuichi.jp\/?p=15266","title":{"rendered":"Amazon EC2\uff08Linux\uff09\u306b UN\/CEFACT spec-JSONschema\u30c6\u30b9\u30c8\u74b0\u5883\u69cb\u7bc9"},"content":{"rendered":"<p>Views: 6<\/p><div id=\"header\">\n<h1>Amazon EC2\uff08Linux\uff09\u306b UN\/CEFACT spec-JSONschema\u30c6\u30b9\u30c8\u74b0\u5883\u69cb\u7bc9<\/h1>\n<div class=\"details\">\n<span id=\"author\" class=\"author\">ChatGPT (\u7de8\u96c6\uff1a\u4e09\u5206\u4e00\u4fe1\u4e4b\uff09<\/span><br \/>\n<span id=\"revdate\">2025-06-07<\/span>\n<\/div>\n<\/div>\n<div id=\"content\">\n<div class=\"sect1\">\n<h2 id=\"_amazon_ec2linux\u306b_uncefact_spec_jsonschema_\u30ea\u30dd\u30b8\u30c8\u30ea_\u3092\u30af\u30ed\u30fc\u30f3\">1. Amazon EC2\uff08Linux\uff09\u306b UN\/CEFACT spec-JSONschema \u30ea\u30dd\u30b8\u30c8\u30ea \u3092\u30af\u30ed\u30fc\u30f3<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Amazon EC2\uff08Linux\uff09\u306b UN\/CEFACT spec-JSONschema \u30ea\u30dd\u30b8\u30c8\u30ea \u3092\u30af\u30ed\u30fc\u30f3\u3059\u308b\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u624b\u9806\u3067\u884c\u3048\u307e\u3059\u3002<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\u2705 \u624b\u9806\uff1aGitHub \u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u30af\u30ed\u30fc\u30f3\u3059\u308b\uff08Amazon Linux 2\/2023 \u5171\u901a\uff09<\/p>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_\u5fc5\u8981\u306a\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\">1.1. \u5fc5\u8981\u306a\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/h3>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-bash\" data-lang=\"bash\">sudo dnf install -y git  # Amazon Linux 2023 \u306e\u5834\u5408\r\n# sudo yum install -y git  # Amazon Linux 2 \u306e\u5834\u5408<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_\u4efb\u610f\u306e\u4f5c\u696d\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\u4f8b\u30db\u30fc\u30e0\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\">1.2. \u4efb\u610f\u306e\u4f5c\u696d\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\uff08\u4f8b\uff1a\u30db\u30fc\u30e0\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\uff09<\/h3>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-bash\" data-lang=\"bash\">cd ~\r\nmkdir uncefact &amp;&amp; cd uncefact<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u30af\u30ed\u30fc\u30f3\">1.3. \u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u30af\u30ed\u30fc\u30f3<\/h3>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-bash\" data-lang=\"bash\">git clone https:\/\/github.com\/uncefact\/spec-JSONschema.git<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\u51fa\u529b\u4f8b\uff1a<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-bash\" data-lang=\"bash\">Cloning into 'spec-JSONschema'...\r\nremote: Enumerating objects: ...\r\nremote: Counting objects: ...\r\n...<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_\u78ba\u8a8d\">1.4. \u78ba\u8a8d<\/h3>\n<div class=\"paragraph\">\n<p>\u2705 \u5185\u5bb9\u78ba\u8a8d<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u306f\u6b21\u306e\u3088\u3046\u306a\u69cb\u9020\u306e\u30d5\u30a1\u30a4\u30eb\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\uff1a<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-bash\" data-lang=\"bash\">hema\/\r\n\u251c\u2500\u2500 JSONschema2020-12\/\r\n\u2502   \u251c\u2500\u2500 library\/\r\n\u2502   \u2502   \u2514\u2500\u2500 BuyShipPay\/\r\n\u2502   \u2502       \u2514\u2500\u2500 D23B\/\r\n\u2502   \u2502           \u2514\u2500\u2500 BasicComponents.json\r\n\u251c\u2500\u2500 LICENSE\r\n\u251c\u2500\u2500 README.md\r\n...<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\u2705 \u88dc\u8db3\uff08\u66f4\u65b0\u30fb\u540c\u671f\uff09<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\u6700\u65b0\u7248\u3092\u53d6\u5f97\u3059\u308b\u306b\u306f\u30af\u30ed\u30fc\u30f3\u5f8c\u306b\u4ee5\u4e0b\u3092\u5b9f\u884c\uff1a<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-bash\" data-lang=\"bash\">git pull origin main<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_xbrl_gl_json_schema_\u5bfe\u5fdc\u30c6\u30b9\u30c8\u74b0\u5883\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u624b\u9806\">2. XBRL GL JSON Schema \u5bfe\u5fdc\u30c6\u30b9\u30c8\u74b0\u5883\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u624b\u9806<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>\ud83d\udccc \u76ee\u7684<\/p>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_\u524d\u63d0\u74b0\u5883\u306e\u6e96\u5099amazon_linux_2023\">2.1. \u524d\u63d0\u74b0\u5883\u306e\u6e96\u5099\uff08Amazon Linux 2023\uff09<\/h3>\n<div class=\"listingblock\">\n<div class=\"title\">ajv \u306a\u3069\u3067 JSON \u306e\u59a5\u5f53\u6027\u3092\u691c\u8a3c\u3059\u308b\u958b\u767a\u74b0\u5883\u3092 Amazon Linux 2023\uff08\u307e\u305f\u306f\u4ed6\u306eLinux\uff09\u4e0a\u306b\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7<\/div>\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-bash\" data-lang=\"bash\"># Node.js \u3068 Git \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\r\nsudo dnf install -y nodejs git\r\n# \u5fc5\u8981\u3067\u3042\u308c\u3070 tree \u3082\r\nsudo dnf install -y tree<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_\u4f5c\u696d\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u4f5c\u6210\u3068ajv\u74b0\u5883\u69cb\u7bc9\">2.2. \u4f5c\u696d\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u4f5c\u6210\u3068AJV\u74b0\u5883\u69cb\u7bc9<\/h3>\n<div class=\"paragraph\">\n<p>\u30b3\u30de\u30f3\u30c9<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-bash\" data-lang=\"bash\">mkdir ~\/xbrl-gl-jsonschema &amp;&amp; cd ~\/xbrl-gl-jsonschema\r\nnpm init -y\r\nnpm install ajv ajv-formats<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\u5b9f\u884c\u7d50\u679c<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-bash\" data-lang=\"bash\">$ mkdir ~\/xbrl-gl-jsonschema &amp;&amp; cd ~\/xbrl-gl-jsonschema\r\nnpm init -y\r\nnpm install ajv ajv-formats\r\nWrote to \/home\/ec2-user\/xbrl-gl-jsonschema\/package.json:\r\n\r\n{\r\n  \"name\": \"xbrl-gl-jsonschema\",\r\n  \"version\": \"1.0.0\",\r\n  \"main\": \"index.js\",\r\n  \"scripts\": {\r\n    \"test\": \"echo \\\"Error: no test specified\\\" &amp;&amp; exit 1\"\r\n  },\r\n  \"keywords\": [],\r\n  \"author\": \"\",\r\n  \"license\": \"ISC\",\r\n  \"description\": \"\"\r\n}\r\n\r\nadded 6 packages, and audited 7 packages in 2s\r\n\r\n2 packages are looking for funding\r\n  run npm fund for details\r\n\r\nfound 0 vulnerabilities<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p><strong>ChatGPT<\/strong><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\ud83d\udc4d \u5b8c\u4e86\u3067\u3059\uff01<br \/>\nxbrl-gl-jsonschema \u74b0\u5883\u304c\u6b63\u5e38\u306b\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3055\u308c\u3001ajv\uff08JSON Schema \u30d0\u30ea\u30c7\u30fc\u30bf\uff09\u3068 ajv-formats\uff08\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u62e1\u5f35\uff09\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u307e\u3057\u305f\u3002<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_xbrl_gl_json\">3. XBRL GL JSON<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<div class=\"title\">xbrl-gl-instance.json<\/div>\n<p>\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u6587\u66f8<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-json\" data-lang=\"json\">{\r\n    \"$schema\": \".\/xbrl-gl-cor-schema.json\",\r\n    \"accountingEntries\": [\r\n        {\r\n            \"entryHeader\": [\r\n                {\r\n                    \"id\": {\r\n                        \"content\": \"Book1\"\r\n                    },\r\n                    \"date\": {\r\n                        \"content\": \"2025-05-12\"\r\n                    },\r\n                    \"description\": {\r\n                        \"content\": \"test book\"\r\n                    },\r\n                    \"entryDetail\": [\r\n                        {\r\n                            \"lineNumber\": {\r\n                                \"content\": \"1\"\r\n                            },\r\n                            \"description\": {\r\n                                \"content\": \"Test entry\"\r\n                            },\r\n                            \"debitAmount\": {\r\n                                \"content\": \"1000\",\r\n                                \"currencyId\": \"JPY\"\r\n                            },\r\n                            \"creditAmount\": {\r\n                                \"content\": \"1000\",\r\n                                \"currencyId\": \"JPY\"\r\n                            },\r\n                            \"accountCode\": {\r\n                                \"content\": \"JSD0010\"\r\n                            }\r\n                        }\r\n                    ]\r\n                }\r\n            ]\r\n        }\r\n    ]\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<div class=\"title\">xbrl-gl-cor.json<\/div>\n<p>\u30b9\u30ad\u30fc\u30de\u5b9a\u7fa9<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-json\" data-lang=\"json\">{\r\n    \"$schema\": \"http:\/\/json-schema.org\/draft-07\/schema#\",\r\n    \"$id\": \"http:\/\/xbrl.org\/XBRL-GL-YYYY-MM-DD\/schemas\/gl-cor.json\",\r\n    \"title\": \"XBRL GL Core Module Schema (Garden of Eden)\",\r\n    \"description\": \"Fully modular schema where all definitions and properties are declared globally and referenced.\",\r\n    \"type\": \"object\",\r\n    \"properties\": {\r\n        \"accountingEntries\": {\r\n            \"$ref\": \"#\/$defs\/AccountingEntries\"\r\n        }\r\n    },\r\n    \"required\": [\r\n        \"accountingEntries\"\r\n    ],\r\n    \"$defs\": {\r\n        \"AccountingEntries\": {\r\n            \"type\": \"array\",\r\n            \"items\": {\r\n                \"$ref\": \"#\/$defs\/AccountingEntry\"\r\n            }\r\n        },\r\n        \"AccountingEntry\": {\r\n            \"type\": \"object\",\r\n            \"properties\": {\r\n                \"entryHeader\": {\r\n                    \"$ref\": \"#\/$defs\/EntryHeaders\"\r\n                }\r\n            },\r\n            \"required\": [\r\n                \"entryHeader\"\r\n            ]\r\n        },\r\n        \"EntryHeaders\": {\r\n            \"type\": \"array\",\r\n            \"items\": {\r\n                \"$ref\": \"#\/$defs\/EntryHeader\"\r\n            }\r\n        },\r\n        \"EntryHeader\": {\r\n            \"type\": \"object\",\r\n            \"properties\": {\r\n                \"id\": {\r\n                    \"$ref\": \"#\/$defs\/ID\"\r\n                },\r\n                \"date\": {\r\n                    \"$ref\": \"#\/$defs\/Date\"\r\n                },\r\n                \"description\": {\r\n                    \"$ref\": \"#\/$defs\/Description\"\r\n                },\r\n                \"entryDetail\": {\r\n                    \"$ref\": \"#\/$defs\/EntryDetails\"\r\n                }\r\n            },\r\n            \"required\": [\r\n                \"id\",\r\n                \"date\"\r\n            ]\r\n        },\r\n        \"EntryDetails\": {\r\n            \"type\": \"array\",\r\n            \"items\": {\r\n                \"$ref\": \"#\/$defs\/EntryDetail\"\r\n            }\r\n        },\r\n        \"EntryDetail\": {\r\n            \"type\": \"object\",\r\n            \"properties\": {\r\n                \"lineNumber\": {\r\n                    \"$ref\": \"#\/$defs\/LineNumber\"\r\n                },\r\n                \"accountCode\": {\r\n                    \"$ref\": \"#\/$defs\/AccountCode\"\r\n                },\r\n                \"debitAmount\": {\r\n                    \"$ref\": \"#\/$defs\/DebitAmount\"\r\n                },\r\n                \"creditAmount\": {\r\n                    \"$ref\": \"#\/$defs\/CreditAmount\"\r\n                },\r\n                \"description\": {\r\n                    \"$ref\": \"#\/$defs\/Description\"\r\n                }\r\n            },\r\n            \"required\": [\r\n                \"lineNumber\",\r\n                \"accountCode\"\r\n            ]\r\n        },\r\n        \"ID\": {\r\n            \"$ref\": \"D23B\/UNECE-BasicComponents.json#\/$defs\/udt\/$defs\/idType\"\r\n        },\r\n        \"Date\": {\r\n            \"$ref\": \"D23B\/UNECE-BasicComponents.json#\/$defs\/udt\/$defs\/dateType\"\r\n        },\r\n        \"Description\": {\r\n            \"$ref\": \"D23B\/UNECE-BasicComponents.json#\/$defs\/udt\/$defs\/textType\"\r\n        },\r\n        \"LineNumber\": {\r\n            \"$ref\": \"D23B\/UNECE-BasicComponents.json#\/$defs\/udt\/$defs\/numericType\"\r\n        },\r\n        \"AccountCode\": {\r\n            \"$ref\": \"D23B\/UNECE-BasicComponents.json#\/$defs\/udt\/$defs\/codeType\"\r\n        },\r\n        \"DebitAmount\": {\r\n            \"$ref\": \"D23B\/UNECE-BasicComponents.json#\/$defs\/udt\/$defs\/amountType\"\r\n        },\r\n        \"CreditAmount\": {\r\n            \"$ref\": \"D23B\/UNECE-BasicComponents.json#\/$defs\/udt\/$defs\/amountType\"\r\n        }\r\n    }\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\u30b9\u30ad\u30fc\u30de\u5b9a\u7fa9\u3067\u306f\u3001UN\/CEFACT\u304c\u63d0\u4f9b\u3059\u308bUDT\uff08Unqualified Data Type\uff09\u5b9a\u7fa9\u3092\u53c2\u7167\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><strong>ChatGPT<\/strong><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\u2705 \u4eca\u306e\u69cb\u6210\u6982\u8981<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>xbrl-gl-instance.json \u306f\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\uff08\u30c7\u30fc\u30bf\uff09<br \/>\nxbrl-gl-cor-schema.json\uff08\u8aa4\uff1axbrl-gl-cor.json\uff09\u306f JSON Schema \u672c\u4f53<br \/>\n$defs \u3092\u4e2d\u5fc3\u306b\u30e2\u30b8\u30e5\u30fc\u30eb\u5b9a\u7fa9\u3057\u3066\u3044\u308b<br \/>\n\u5404\u57fa\u672c\u578b\uff08idType, amountType \u306a\u3069\uff09\u306f UNECE-BasicComponents.json \u304b\u3089 $ref \u3057\u3066\u3044\u308b\uff08D23B\/\uff09<\/p>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u9020\u3092\u6e96\u5099\">3.1. \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u9020\u3092\u6e96\u5099<\/h3>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-bash\" data-lang=\"bash\">mkdir -p schemas\/D23B\r\nmv xbrl-gl-cor.json schemas\/xbrl-gl-cor-schema.json\r\nmv xbrl-gl-instance.json instance.json<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\u6b21\u306b UNECE BasicComponents.json \u3092\u53d6\u5f97\uff1a<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-bash\" data-lang=\"bash\">curl -o schemas\/D23B\/UNECE-BasicComponents.json \\\r\n  https:\/\/raw.githubusercontent.com\/uncefact\/spec-JSONschema\/main\/JSONschema2020-12\/library\/BuyShipPay\/D23B\/UNECE-BasicComponents.json<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_\u691c\u8a3c\u30b9\u30af\u30ea\u30d7\u30c8_validate_js_\u3092\u4f5c\u6210\">3.2. \u691c\u8a3c\u30b9\u30af\u30ea\u30d7\u30c8 validate.js \u3092\u4f5c\u6210<\/h3>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-js\" data-lang=\"js\">const Ajv2020 = require(\"ajv\/dist\/2020\").default;\r\nconst addFormats = require(\"ajv-formats\");\r\nconst fs = require(\"fs\");\r\nconst path = require(\"path\");\r\n\r\n\/\/ AJV\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u4f5c\u6210\r\nconst ajv = new Ajv2020({\r\n  strict: false,\r\n  loadSchema: async (uri) =&gt; {\r\n    const filePath = path.resolve(\"schemas\", uri.replace(\/^.*\\\/D23B\\\/\/, \"D23B\/\"));\r\n    return JSON.parse(fs.readFileSync(filePath));\r\n  }\r\n});\r\naddFormats(ajv);\r\n\r\n\/\/ \u30b9\u30ad\u30fc\u30de\u3068\u30c7\u30fc\u30bf\u306e\u8aad\u307f\u8fbc\u307f\r\n(async () =&gt; {\r\n  const schema = JSON.parse(fs.readFileSync(\"schemas\/xbrl-gl-cor-schema.json\"));\r\n  const data = JSON.parse(fs.readFileSync(\"instance.json\"));\r\n\r\n  \/\/ \u5916\u90e8\u53c2\u7167\u3092\u542b\u3080\u30b9\u30ad\u30fc\u30de\u3092\u975e\u540c\u671f\u306bcompile\r\n  const validate = await ajv.compileAsync(schema);\r\n  const valid = validate(data);\r\n\r\n  if (valid) {\r\n    console.log(\"\u2705 Valid!\");\r\n  } else {\r\n    console.error(\"\u274c Validation errors:\", validate.errors);\r\n  }\r\n})();<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_\u5b9f\u884c\">3.3. \u5b9f\u884c<\/h3>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-bash\" data-lang=\"bash\">node validate.js<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\u2705 \u6ce8\u610f\u70b9<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>$ref \u306e\u30d1\u30b9 &#8220;D23B\/UNECE-BasicComponents.json#&#8230;&#8203;&#8221; \u306f \u30ed\u30fc\u30ab\u30eb\u76f8\u5bfe\u30d1\u30b9\u306b\u306a\u308b\u305f\u3081\u3001validate.js \u3067 loadSchema() \u3092\u4f7f\u3063\u3066\u624b\u52d5\u89e3\u6c7a\u304c\u5fc5\u8981\u3002<br \/>\nAjv.compileAsync() \u306f $ref \u89e3\u6c7a\u306e\u305f\u3081\u306b\u5fc5\u9808\u3002<br \/>\nJSON Schema \u306e $schema \u306f &#8220;https:\/\/json-schema.org\/draft\/2020-12\/schema&#8221; \u306b\u3059\u308b\u3068\u3055\u3089\u306b\u5c06\u6765\u7684\u306b\u6574\u5408\u6027\u304c\u826f\u3044\u3067\u3059\uff08\u4eca\u306f draft-07 \u306b\u306a\u3063\u3066\u3044\u308b\uff09\u3002<\/p>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_\u73fe\u72b6\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u6210\">3.4. \u73fe\u72b6\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u6210<\/h3>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-bash\" data-lang=\"bash\">$ tree -L 3\r\n.\r\n\u251c\u2500\u2500 jsonschema-dev\r\n\u2502   \u251c\u2500\u2500 node_modules\r\n\u2502   \u2502   \u251c\u2500\u2500 ajv\r\n\u2502   \u2502   \u251c\u2500\u2500 ajv-formats\r\n\u2502   \u2502   \u251c\u2500\u2500 fast-deep-equal\r\n\u2502   \u2502   \u251c\u2500\u2500 fast-uri\r\n\u2502   \u2502   \u251c\u2500\u2500 json-schema-traverse\r\n\u2502   \u2502   \u2514\u2500\u2500 require-from-string\r\n\u2502   \u251c\u2500\u2500 package-lock.json\r\n\u2502   \u251c\u2500\u2500 package.json\r\n\u2502   \u2514\u2500\u2500 validate.js\r\n\u251c\u2500\u2500 uncefact\r\n\u2502   \u2514\u2500\u2500 spec-JSONschema\r\n\u2502       \u251c\u2500\u2500 CODEOWNERS\r\n\u2502       \u251c\u2500\u2500 JSONschema2020-12\r\n\u2502       \u251c\u2500\u2500 README.md\r\n\u2502       \u251c\u2500\u2500 compatibility\r\n\u2502       \u251c\u2500\u2500 examples\r\n\u2502       \u2514\u2500\u2500 images\r\n\u2514\u2500\u2500 xbrl-gl-jsonschema\r\n    \u251c\u2500\u2500 node_modules\r\n    \u2502   \u251c\u2500\u2500 ajv\r\n    \u2502   \u251c\u2500\u2500 ajv-formats\r\n    \u2502   \u251c\u2500\u2500 fast-deep-equal\r\n    \u2502   \u251c\u2500\u2500 fast-uri\r\n    \u2502   \u251c\u2500\u2500 json-schema-traverse\r\n    \u2502   \u2514\u2500\u2500 require-from-string\r\n    \u251c\u2500\u2500 package-lock.json\r\n    \u2514\u2500\u2500 package.json\r\n\r\n22 directories, 7 files<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p><strong>ChatGPT<\/strong><br \/>\n\u3042\u308a\u304c\u3068\u3046\u3054\u3056\u3044\u307e\u3059\u3002\u73fe\u5728\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u6210\u3092\u898b\u308b\u9650\u308a\u3001uncefact\/spec-JSONschema\/JSONschema2020-12\/library\/BuyShipPay\/D23B\/UNECE-BasicComponents.json \u3092 XBRL GL\u7528 JSON Schema \u306e $ref \u3067\u53c2\u7167\u3059\u308b\u6e96\u5099\u306f\u6574\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\u2705 \u6b21\u306e\u30b9\u30c6\u30c3\u30d7\uff1axbrl-gl-cor-schema.json \u3068 xbrl-gl-instance.json \u3092\u8ffd\u52a0<br \/>\n\u307e\u305a\u3001XBRL GL \u7528\u30b9\u30ad\u30fc\u30de\u3068\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u914d\u7f6e\u3057\u307e\u3059\uff1a<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-bash\" data-lang=\"bash\">mkdir -p ~\/xbrl-gl-jsonschema\/schemas\r\nmkdir -p ~\/xbrl-gl-jsonschema\/samples<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\ud83d\udd39 xbrl-gl-cor-schema.json \u3092\u4f5c\u6210\uff08schemas \u914d\u4e0b\uff09<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-bash\" data-lang=\"bash\">nano ~\/xbrl-gl-jsonschema\/schemas\/xbrl-gl-cor-schema.json<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\u305d\u306e\u4e2d\u3067 UNECE-BasicComponents.json \u3092\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u76f8\u5bfe\u53c2\u7167\uff1a<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-json\" data-lang=\"json\">\"DebitAmount\": {\r\n  \"$ref\": \"..\/..\/uncefact\/spec-JSONschema\/JSONschema2020-12\/library\/BuyShipPay\/D23B\/UNECE-BasicComponents.json#\/$defs\/udt\/$defs\/amountType\"\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\u5fc5\u8981\u306a\u3059\u3079\u3066\u306e $ref \u3092\u3053\u306e\u30d1\u30bf\u30fc\u30f3\u306b\u3057\u307e\u3059\u3002<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\ud83d\udd39 xbrl-gl-instance.json \u3092\u4f5c\u6210\uff08samples \u914d\u4e0b\uff09<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\u2705 \u691c\u8a3c\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u914d\u7f6e\u3068\u5b9f\u884c<br \/>\n\ud83d\udd39 validate.js \u306e\u4f5c\u6210\uff08\u30eb\u30fc\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\uff09<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-js\" data-lang=\"js\">const Ajv = require(\"ajv\/dist\/2020\").default;\r\nconst addFormats = require(\"ajv-formats\");\r\nconst fs = require(\"fs\").promises;\r\nconst path = require(\"path\");\r\n\r\nconst ajv = new Ajv({\r\n  strict: false,\r\n  loadSchema: async (uri) =&gt; {\r\n    const base = path.resolve(__dirname, \"uncefact\/spec-JSONschema\/JSONschema2020-12\/library\/BuyShipPay\/D23B\");\r\n    if (uri.includes(\"UNECE-BasicComponents.json\")) {\r\n      const fullPath = path.join(base, \"UNECE-BasicComponents.json\");\r\n      return JSON.parse(await fs.readFile(fullPath, \"utf8\"));\r\n    }\r\n    throw new Error(`Unknown schema URI: ${uri}`);\r\n  }\r\n});\r\n\r\naddFormats(ajv);\r\n\r\n(async () =&gt; {\r\n  const schema = JSON.parse(await fs.readFile(\"schemas\/xbrl-gl-cor-schema.json\", \"utf8\"));\r\n  const data = JSON.parse(await fs.readFile(\"samples\/xbrl-gl-instance.json\", \"utf8\"));\r\n\r\n  const validate = await ajv.compileAsync(schema);\r\n  const valid = validate(data);\r\n\r\n  if (valid) {\r\n    console.log(\"\u2705 Valid!\");\r\n  } else {\r\n    console.error(\"\u274c Validation errors:\");\r\n    console.error(validate.errors);\r\n  }\r\n})();<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\u2705 \u5b9f\u884c<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-bash\" data-lang=\"bash\">cd ~\/xbrl-gl-jsonschema\r\nnode validate.js<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\u2705 \u7d50\u679c\u4f8b<br \/>\n\u6210\u529f \u2192 \u2705 Valid!<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\u30a8\u30e9\u30fc \u2192 \u30a8\u30e9\u30fc\u5185\u5bb9\u304c validate.errors \u306b\u51fa\u529b\u3055\u308c\u307e\u3059\uff08\u30d1\u30b9\u3084 $ref \u306e\u6307\u5b9a\u30df\u30b9\u3082\u542b\u3081\uff09<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-js\" data-lang=\"js\">onst fs = require(\"fs\").promises;\r\nconst path = require(\"path\");\r\nconst Ajv2020 = require(\"ajv\/dist\/2020\");\r\nconst addFormats = require(\"ajv-formats\");\r\n\r\nasync function loadSchema(uri) {\r\n\u00a0 const base = path.resolve(__dirname, \"schemas\");\r\n\r\n\u00a0 \/\/ Draft 2020-12 \u30e1\u30a4\u30f3\u30b9\u30ad\u30fc\u30de\r\n\u00a0 if (uri === \"http:\/\/json-schema.org\/draft\/2020-12\/schema\") {\r\n\u00a0 \u00a0 const fullPath = path.join(base, \"draft2020-12.json\");\r\n\u00a0 \u00a0 const schema = JSON.parse(await fs.readFile(fullPath, \"utf8\"));\r\n\u00a0 \u00a0 delete schema[\"$id\"];\r\n\u00a0 \u00a0 return schema;\r\n\u00a0 }\r\n\r\n\u00a0 \/\/ \u5404 vocabulary \u30e1\u30bf\u30b9\u30ad\u30fc\u30de\r\n\u00a0 const vocabularies = [\r\n\u00a0 \u00a0 \"core\",\r\n\u00a0 \u00a0 \"applicator\",\r\n\u00a0 \u00a0 \"unevaluated\",\r\n\u00a0 \u00a0 \"validation\",\r\n\u00a0 \u00a0 \"meta-data\",\r\n\u00a0 \u00a0 \"format-annotation\",\r\n\u00a0 \u00a0 \"content\"\r\n\u00a0 ];\r\n\r\n\u00a0 for (const name of vocabularies) {\r\n\u00a0 \u00a0 if (uri === `http:\/\/json-schema.org\/draft\/2020-12\/meta\/${name}`) {\r\n\u00a0 \u00a0 \u00a0 const fullPath = path.join(base, \"meta\", `${name}.json`);\r\n\u00a0 \u00a0 \u00a0 const schema = JSON.parse(await fs.readFile(fullPath, \"utf8\"));\r\n\u00a0 \u00a0 \u00a0 delete schema[\"$id\"];\r\n\u00a0 \u00a0 \u00a0 return schema;\r\n\u00a0 \u00a0 }\r\n\u00a0 }\r\n\r\n\u00a0 \/\/ \u305d\u306e\u4ed6\u30ab\u30b9\u30bf\u30e0\u30b9\u30ad\u30fc\u30de\r\n\u00a0 if (uri.includes(\"UNECE-BasicComponents.json\")) {\r\n\u00a0 \u00a0 const fullPath = path.join(\r\n\u00a0 \u00a0 \u00a0 __dirname,\r\n\u00a0 \u00a0 \u00a0 \"..\/uncefact\/spec-JSONschema\/JSONschema2020-12\/library\/BuyShipPay\/D23B\/UNECE-BasicComponents.json\"\r\n\u00a0 \u00a0 );\r\n\u00a0 \u00a0 return JSON.parse(await fs.readFile(fullPath, \"utf8\"));\r\n\u00a0 }\r\n\r\n\u00a0 if (uri.includes(\"codelists\/\")) {\r\n\u00a0 \u00a0 const fileName = path.basename(uri);\r\n\u00a0 \u00a0 const fullPath = path.join(\r\n\u00a0 \u00a0 \u00a0 __dirname,\r\n\u00a0 \u00a0 \u00a0 \"..\/uncefact\/spec-JSONschema\/JSONschema2020-12\/library\/BuyShipPay\/D23B\/codelists\",\r\n\u00a0 \u00a0 \u00a0 fileName\r\n\u00a0 \u00a0 );\r\n\u00a0 \u00a0 return JSON.parse(await fs.readFile(fullPath, \"utf8\"));\r\n\u00a0 }\r\n\r\n\u00a0 throw new Error(`Unknown schema URI: ${uri}`);\r\n}\r\n\r\nconst ajv = new Ajv2020({\r\n\u00a0 loadSchema,\r\n\u00a0 strict: false\r\n});\r\naddFormats(ajv);\r\n\r\n(async () =&gt; {\r\n\u00a0 try {\r\n\u00a0 \u00a0 const schemaPath = path.join(__dirname, \"schemas\/xbrl-gl-cor-schema.json\");\r\n\u00a0 \u00a0 const instancePath = path.join(__dirname, \"samples\/xbrl-gl-instance.json\");\r\n\r\n\u00a0 \u00a0 const schema = JSON.parse(await fs.readFile(schemaPath, \"utf8\"));\r\n\u00a0 \u00a0 const data = JSON.parse(await fs.readFile(instancePath, \"utf8\"));\r\n\r\n\u00a0 \u00a0 const validate = await ajv.compileAsync(schema);\r\n\u00a0 \u00a0 const valid = validate(data);\r\n\r\n\u00a0 \u00a0 if (valid) {\r\n\u00a0 \u00a0 \u00a0 console.log(\" Validation successful: data is valid against the schema.\");\r\n\u00a0 \u00a0 } else {\r\n\u00a0 \u00a0 \u00a0 console.error(\" Validation errors:\");\r\n\u00a0 \u00a0 \u00a0 console.error(validate.errors);\r\n\u00a0 \u00a0 }\r\n\u00a0 } catch (err) {\r\n\u00a0 \u00a0 console.error(\" Runtime error:\", err);\r\n\u00a0 }\r\n})();<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div id=\"footer\">\n<div id=\"footer-text\">\nLast updated 2025-06-07 15:26:30 +0900\n<\/div>\n<\/div>\n<div id=\"toc\" class=\"toc2\">\n<div id=\"toctitle\">\u76ee\u6b21<\/div>\n<ul class=\"sectlevel1\">\n<li><a href=\"#_amazon_ec2linux\u306b_uncefact_spec_jsonschema_\u30ea\u30dd\u30b8\u30c8\u30ea_\u3092\u30af\u30ed\u30fc\u30f3\">1. Amazon EC2\uff08Linux\uff09\u306b UN\/CEFACT spec-JSONschema \u30ea\u30dd\u30b8\u30c8\u30ea \u3092\u30af\u30ed\u30fc\u30f3<\/a>\n<ul class=\"sectlevel2\">\n<li><a href=\"#_\u5fc5\u8981\u306a\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\">1.1. \u5fc5\u8981\u306a\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/a><\/li>\n<li><a href=\"#_\u4efb\u610f\u306e\u4f5c\u696d\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\u4f8b\u30db\u30fc\u30e0\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\">1.2. \u4efb\u610f\u306e\u4f5c\u696d\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\uff08\u4f8b\uff1a\u30db\u30fc\u30e0\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\uff09<\/a><\/li>\n<li><a href=\"#_\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u30af\u30ed\u30fc\u30f3\">1.3. \u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u30af\u30ed\u30fc\u30f3<\/a><\/li>\n<li><a href=\"#_\u78ba\u8a8d\">1.4. \u78ba\u8a8d<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#_xbrl_gl_json_schema_\u5bfe\u5fdc\u30c6\u30b9\u30c8\u74b0\u5883\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u624b\u9806\">2. XBRL GL JSON Schema \u5bfe\u5fdc\u30c6\u30b9\u30c8\u74b0\u5883\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u624b\u9806<\/a>\n<ul class=\"sectlevel2\">\n<li><a href=\"#_\u524d\u63d0\u74b0\u5883\u306e\u6e96\u5099amazon_linux_2023\">2.1. \u524d\u63d0\u74b0\u5883\u306e\u6e96\u5099\uff08Amazon Linux 2023\uff09<\/a><\/li>\n<li><a href=\"#_\u4f5c\u696d\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u4f5c\u6210\u3068ajv\u74b0\u5883\u69cb\u7bc9\">2.2. \u4f5c\u696d\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u4f5c\u6210\u3068AJV\u74b0\u5883\u69cb\u7bc9<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#_xbrl_gl_json\">3. XBRL GL JSON<\/a>\n<ul class=\"sectlevel2\">\n<li><a href=\"#_\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u9020\u3092\u6e96\u5099\">3.1. \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u9020\u3092\u6e96\u5099<\/a><\/li>\n<li><a href=\"#_\u691c\u8a3c\u30b9\u30af\u30ea\u30d7\u30c8_validate_js_\u3092\u4f5c\u6210\">3.2. \u691c\u8a3c\u30b9\u30af\u30ea\u30d7\u30c8 validate.js \u3092\u4f5c\u6210<\/a><\/li>\n<li><a href=\"#_\u5b9f\u884c\">3.3. \u5b9f\u884c<\/a><\/li>\n<li><a href=\"#_\u73fe\u72b6\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u6210\">3.4. \u73fe\u72b6\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u6210<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Views: 6 Amazon EC2\uff08Linux\uff09\u306b UN\/CEFACT spec-JSONschema\u30c6\u30b9\u30c8\u74b0\u5883\u69cb\u7bc9 ChatGPT (\u7de8\u96c6\uff1a\u4e09\u5206\u4e00\u4fe1\u4e4b\uff09 2025-06-07 1. Amazon EC2\uff08Linux [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":15182,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[71,21,65,77,82],"tags":[],"_links":{"self":[{"href":"https:\/\/www.sambuichi.jp\/index.php?rest_route=\/wp\/v2\/posts\/15266"}],"collection":[{"href":"https:\/\/www.sambuichi.jp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sambuichi.jp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sambuichi.jp\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sambuichi.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=15266"}],"version-history":[{"count":1,"href":"https:\/\/www.sambuichi.jp\/index.php?rest_route=\/wp\/v2\/posts\/15266\/revisions"}],"predecessor-version":[{"id":15267,"href":"https:\/\/www.sambuichi.jp\/index.php?rest_route=\/wp\/v2\/posts\/15266\/revisions\/15267"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.sambuichi.jp\/index.php?rest_route=\/wp\/v2\/media\/15182"}],"wp:attachment":[{"href":"https:\/\/www.sambuichi.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=15266"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sambuichi.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=15266"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sambuichi.jp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=15266"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}