{"id":60328,"date":"2023-04-20T11:00:02","date_gmt":"2023-04-20T02:00:02","guid":{"rendered":"https:\/\/www.creationline.com\/?p=60328"},"modified":"2023-08-29T15:28:57","modified_gmt":"2023-08-29T06:28:57","slug":"ruby%e3%81%a7webassembly%e3%82%92%e8%a9%a6%e3%81%97%e3%81%a6%e3%81%bf%e3%82%88%e3%81%86-ruby-webassembly-wasm-wasi","status":"publish","type":"post","link":"https:\/\/www.creationline.com\/tech-blog\/others\/ruby\/60328","title":{"rendered":"Ruby\u3067WebAssembly\u3092\u8a66\u3057\u3066\u307f\u3088\u3046 #ruby #WebAssembly #WASM #WASI"},"content":{"rendered":"<p><a href=\"https:\/\/developer.mozilla.org\/ja\/docs\/WebAssembly\" target=\"_blank\" rel=\"noopener\">WebAssembly<\/a> (WASM)\u3092\u4f7f\u3046\u3068\u3001\u30a6\u30a7\u30d6\u30d6\u30e9\u30a6\u30b6\u4e0a\u3067JavaScript\u4ee5\u5916\u306e\u8a00\u8a9e\u3092\u52d5\u4f5c\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u904e\u53bb\u8a18\u4e8b\u306b<a href=\"\/lab\/58019\" target=\"_blank\" rel=\"noopener\">Python\u3092\u52d5\u4f5c\u3055\u305b\u305f\u4f8b<\/a>\u3082\u3042\u308a\u307e\u3057\u305f\u3002\u672c\u8a18\u4e8b\u3067\u306f<a href=\"https:\/\/www.ruby-lang.org\/\" target=\"_blank\" rel=\"noopener\">Ruby<\/a>\u3092\u52d5\u304b\u3057\u3066\u307f\u307e\u3059\u3002<\/p>\n<h2>ruby.wasm<\/h2>\n<p>Ruby\u3067\u306eWASM\u306b\u306f\u3001\u305d\u306e\u3082\u306e\u305a\u3070\u308a\u306a\u540d\u79f0\u306e <a href=\"https:\/\/ruby.github.io\/ruby.wasm\/\" target=\"_blank\" rel=\"noopener\">ruby.wasm<\/a> \u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u3092\u4f7f\u3063\u3066\u30d6\u30e9\u30a6\u30b6\u4e0a\u3067\u7c21\u5358\u306aRuby\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u52d5\u304b\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"ruby\">\nputs &quot;Hello, world!&quot;\n<\/pre>\n<p>\u304a\u306a\u3058\u307f Hello, world! \u3092\u51fa\u529b\u3059\u308b\u3060\u3051\u306eRuby\u30b9\u30af\u30ea\u30d7\u30c8\u3067\u3059\u3002\u3053\u308c\u3092\u30d6\u30e9\u30a6\u30b6\u4e0a\u3067\u52d5\u304b\u3059\u306b\u306f <a href=\"https:\/\/github.com\/ruby\/ruby.wasm#quick-example-ruby-on-browser\" target=\"_blank\" rel=\"noopener\">Quick Example: Ruby on browser<\/a> \u306b\u5f93\u3044\u3001\u6b21\u306eHTML\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\">\n\n&lt;script src=&quot;https:\/\/cdn.jsdelivr.net\/npm\/ruby-3_2-wasm-wasi@1.0.1\/dist\/browser.script.iife.js&quot;&gt;&lt;\/script&gt;\n&lt;script type=&quot;text\/ruby&quot;&gt;&lt;br \/&gt;\n    puts &quot;Hello, world!&quot;&lt;br \/&gt;\n  &lt;\/script&gt;\n\n<\/pre>\n<p>\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u3092Google Chrome\u3084Firefox\u3067\u958b\u3044\u3066\u307f\u308b\u3068\u2026\u4f55\u3082\u8d77\u3053\u308a\u307e\u305b\u3093\u3002\u30d6\u30e9\u30f3\u30af\u30da\u30fc\u30b8\u304c\u958b\u304b\u308c\u308b\u3060\u3051\u3067\u3059\u3002\u4f55\u304b\u9593\u9055\u3063\u3066\u3044\u308b\u306e\u3067\u3057\u3087\u3046\u304b\uff1f \u3053\u3053\u3067Google Chrome\u306a\u3089\u30c7\u30d9\u30ed\u30c3\u30d1\u30fc\u30c4\u30fc\u30eb\u3001Firefox\u306a\u3089\u30a6\u30a7\u30d6\u958b\u767a\u30c4\u30fc\u30eb\u3092\u958b\u304d\u3001\u30b3\u30f3\u30bd\u30fc\u30eb\u3092\u898b\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<p>Chrome:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-60339\" src=\"\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/04\/wasm-ruby-devtool-chrome-1024x306.png\" alt=\"\" width=\"1024\" height=\"306\" srcset=\"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/04\/wasm-ruby-devtool-chrome-1024x306.png 1024w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/04\/wasm-ruby-devtool-chrome-360x108.png 360w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/04\/wasm-ruby-devtool-chrome-768x230.png 768w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/04\/wasm-ruby-devtool-chrome.png 1208w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>Firefox:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-60340\" src=\"\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/04\/wasm-ruby-devtool-firefox-1024x115.png\" alt=\"\" width=\"1024\" height=\"115\" srcset=\"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/04\/wasm-ruby-devtool-firefox-1024x115.png 1024w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/04\/wasm-ruby-devtool-firefox-360x41.png 360w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/04\/wasm-ruby-devtool-firefox-768x87.png 768w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/04\/wasm-ruby-devtool-firefox.png 1287w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>\u3053\u306e\u3088\u3046\u306b\u3001\u30d6\u30e9\u30a6\u30b6\u306e\u30a6\u30a3\u30f3\u30c9\u30a6\u5185\u3067\u306f\u306a\u304f\u3001\u30b3\u30f3\u30bd\u30fc\u30eb\u306b Hello, world! \u304c\u51fa\u529b\u3055\u308c\u3066\u3044\u307e\u3057\u305f\uff01<\/p>\n<p>\u6b21\u306f\u30d6\u30e9\u30a6\u30b6\u306e\u30a6\u30a3\u30f3\u30c9\u30a6\u5185\u306b Hello, world! \u3092\u51fa\u529b\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002 <a href=\"https:\/\/ruby.github.io\/ruby.wasm\/JS.html\" target=\"_blank\" rel=\"noopener\">ruby.wasm\u306eJS\u30e2\u30b8\u30e5\u30fc\u30eb<\/a> \u3092\u5229\u7528\u3059\u308b\u3053\u3068\u3067\u3001Ruby\u30b9\u30af\u30ea\u30d7\u30c8\u4e2d\u304b\u3089JavaScript\u3092\u64cd\u4f5c\u3067\u304d\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\">\n\n&lt;script src=&quot;https:\/\/cdn.jsdelivr.net\/npm\/ruby-3_2-wasm-wasi@1.0.1\/dist\/browser.script.iife.js&quot;&gt;&lt;\/script&gt;\n&lt;script type=&quot;text\/ruby&quot;&gt;&lt;br \/&gt;\n    require &#039;js&#039;&lt;br \/&gt;\n    JS.global[:document].call(:write, &quot;Hello, world!&quot;)&lt;br \/&gt;\n  &lt;\/script&gt;\n\n<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\">\n\n&lt;script src=&quot;https:\/\/cdn.jsdelivr.net\/npm\/ruby-3_2-wasm-wasi@1.0.1\/dist\/browser.script.iife.js&quot;&gt;&lt;\/script&gt;\n&lt;script type=&quot;text\/ruby&quot;&gt;&lt;br \/&gt;\n    require &#039;js&#039;&lt;br \/&gt;\n    message = JS.global[:document].call(:getElementById, &#039;message&#039;)&lt;br \/&gt;\n    message[:innerText] = &quot;Hello, world!&quot;&lt;br \/&gt;\n  &lt;\/script&gt;\n&lt;div id=&quot;message&quot;&gt;&lt;\/div&gt;\n<\/pre>\n<p>\u3053\u306e\u3069\u3061\u3089\u3082\u3001\u30d6\u30e9\u30a6\u30b6\u306e\u30a6\u30a3\u30f3\u30c9\u30a6\u5185\u306b Hello, world! \u3092\u63cf\u753b\u3057\u307e\u3059\u3002<\/p>\n<h2>WASI (WebAssembly System Interface)<\/h2>\n<p><a href=\"https:\/\/wasi.dev\/\" target=\"_blank\" rel=\"noopener\">WASI<\/a> (WebAssembly System Interface)\u3068\u306f\u7c21\u5358\u306b\u8a00\u3046\u3068\u3001WASM\u3092\u30d6\u30e9\u30a6\u30b6\u5916\u3067\u52d5\u4f5c\u3055\u305b\u308b\u305f\u3081\u306e\u4ed5\u7d44\u307f\u3067\u3059\u3002WASI\u306f\u300c\u30b3\u30f3\u30c6\u30ca\u306e\u6b21\u300d\u3068\u306a\u308b\u30dd\u30fc\u30bf\u30d6\u30eb\u3067\u30bb\u30ad\u30e5\u30a2\u306a\u4ed5\u7d44\u307f\u3068\u3057\u3066\u3001\u306b\u308f\u304b\u306b\u6ce8\u76ee\u3092\u96c6\u3081\u3066\u3044\u307e\u3059\u3002\u3053\u3053\u304b\u3089\u306fRuby\u30b9\u30af\u30ea\u30d7\u30c8\u3092 WASI \u3067\u52d5\u304b\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<p>ruby.wasi \u516c\u5f0f\u30da\u30fc\u30b8\u306b\u306f <a href=\"https:\/\/ruby.github.io\/ruby.wasm\/#label-Quick+Example-3A+How+to+package+your+Ruby+application+as+a+WASI+application\" target=\"_blank\" rel=\"noopener\">Quick Example: How to package your Ruby application as a WASI application<\/a> \u3068\u3057\u3066\u3001\u304a\u306a\u3058\u307f Hello, world! \u3092\u51fa\u529b\u3059\u308b\u3060\u3051\u306eRuby\u30b9\u30af\u30ea\u30d7\u30c8\u3092 WASI \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u5909\u63db\u3057\u3066\u52d5\u304b\u3059\u65b9\u6cd5\u304c\u8a18\u8f09\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306b\u5f93\u3063\u3066\u9032\u3081\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n<p>\u307e\u305a\u3001Hello, world! \u3092\u51fa\u529b\u3059\u308b\u3060\u3051\u306eRuby\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n% mkdir src\n% echo &#039;puts &quot;Hello, world!&quot;&#039; &gt; src\/hello.rb\n% ruby -v\nruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux-gnu]\n% ruby src\/hello.rb\nHello, world!\n%\n<\/pre>\n<p>\u3053\u306e\u3088\u3046\u306b x86_64-linux \u4e0a\u3067\u52d5\u4f5c\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u6b21\u306b <a href=\"https:\/\/github.com\/kateinoigakukun\/wasi-vfs\" target=\"_blank\" rel=\"noopener\">wasi-vfs<\/a> \u3092\u7528\u610f\u3057\u307e\u3059\u3002\u3053\u308c\u306fRuby\u30b9\u30af\u30ea\u30d7\u30c8\u3092 WASI \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u5909\u63db\u3059\u308b\u969b\u306b\u5229\u7528\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n% export WASI_VFS_VERSION=0.2.0\n% curl -LO &quot;https:\/\/github.com\/kateinoigakukun\/wasi-vfs\/releases\/download\/v${WASI_VFS_VERSION}\/wasi-vfs-cli-x86_64-unknown-linux-gnu.zip&quot;\n% unzip wasi-vfs-cli-x86_64-unknown-linux-gnu.zip\n% .\/wasi-vfs\nwasi-vfs-cli 0.2.0\n\nUSAGE:\nwasi-vfs\n\nFLAGS:\n-h, --help Prints help information\n-V, --version Prints version information\n\nSUBCOMMANDS:\nhelp Prints this message or the help of the given subcommand(s)\npack Package directories into Wasm module\n<\/pre>\n<p>\u305d\u3057\u3066 <a href=\"https:\/\/github.com\/ruby\/ruby.wasm\" target=\"_blank\" rel=\"noopener\">ruby.wasm<\/a> \u306e WASI \u4e92\u63db\u74b0\u5883\u3092\u6e96\u5099\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n% curl -LO https:\/\/github.com\/ruby\/ruby.wasm\/releases\/latest\/download\/ruby-3_2-wasm32-unknown-wasi-full.tar.gz\n% tar xf ruby-3_2-wasm32-unknown-wasi-full.tar.gz\n% ls .\/3_2-wasm32-unknown-wasi-full\/usr\/local\/bin\/\nbundle bundler erb gem irb racc rake rbs rdbg rdoc ri ruby typeprof\n%\n<\/pre>\n<p>\u3053\u306e ruby \u306f WASI \u4e92\u63db\u74b0\u5883\u306a\u306e\u3067 Linux \u4e0a\u3067\u306f\u5b9f\u884c\u3067\u304d\u307e\u305b\u3093\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n% .\/3_2-wasm32-unknown-wasi-full\/usr\/local\/bin\/ruby\nzsh: \u5b9f\u884c\u5f62\u5f0f\u30a8\u30e9\u30fc: .\/3_2-wasm32-unknown-wasi-full\/usr\/local\/bin\/ruby\n% file .\/3_2-wasm32-unknown-wasi-full\/usr\/local\/bin\/ruby\n.\/3_2-wasm32-unknown-wasi-full\/usr\/local\/bin\/ruby: WebAssembly (wasm) binary module version 0x1 (MVP)\n%\n<\/pre>\n<p>\u3053\u3053\u3067 <a href=\"https:\/\/wasmtime.dev\/\" target=\"_blank\" rel=\"noopener\">Wasmtime<\/a> \u3092\u6e96\u5099\u3057\u307e\u3057\u3087\u3046\u3002\u3053\u308c\u306f WASI \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u884c\u3067\u304d\u308b\u30b9\u30bf\u30f3\u30c9\u30a2\u30ed\u30fc\u30f3\u30e9\u30f3\u30bf\u30a4\u30e0\u3067\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n% curl -LO https:\/\/github.com\/bytecodealliance\/wasmtime\/releases\/download\/v7.0.0\/wasmtime-v7.0.0-x86_64-linux.tar.xz\n% tar xf wasmtime-v7.0.0-x86_64-linux.tar.xz\n% .\/wasmtime-v7.0.0-x86_64-linux\/wasmtime 3_2-wasm32-unknown-wasi-full\/usr\/local\/bin\/ruby -- -v\nruby 3.2.0 (2022-12-25 revision a528908271) [wasm32-wasi]\n%\n<\/pre>\n<p>\u3053\u306e\u3088\u3046\u306b wasmtime \u3092\u565b\u307e\u305b\u308b\u3053\u3068\u306b\u3088\u3063\u3066\u3001 WASI \u4e92\u63db\u74b0\u5883\u306e ruby \u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3057\u305f\u3002<\/p>\n<p>\u3067\u306f\u3001wasi-vfs \u3068 WASI \u4e92\u63db\u74b0\u5883\u306e ruby \u3092\u4f7f\u3063\u3066\u3001Ruby\u30b9\u30af\u30ea\u30d7\u30c8\u3092 WASI \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u5909\u63db\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n% .\/wasi-vfs pack .\/3_2-wasm32-unknown-wasi-full\/usr\/local\/bin\/ruby --mapdir \/src::.\/src --mapdir \/usr::.\/3_2-wasm32-unknown-wasi-full\/usr -o hello.wasm\n% file .\/hello.wasm\n.\/hello.wasm: WebAssembly (wasm) binary module version 0x1 (MVP)\n%\n<\/pre>\n<p>Hello, world! \u3092\u51fa\u529b\u3059\u308b WASI \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092 wasmtime \u3067\u5b9f\u884c\u3057\u3066\u307f\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n% .\/wasmtime-v7.0.0-x86_64-linux\/wasmtime hello.wasm -- \/src\/hello.rb\nHello, world!\n%\n<\/pre>\n<p>\u3053\u306e\u3088\u3046\u306bHello, world!\u3092\u51fa\u529b\u3067\u304d\u307e\u3057\u305f\u3002\u304c\u3001\u300c -- \/src\/hello.rb\u300d\u306e\u3088\u3046\u306b WASM \u30d1\u30c3\u30b1\u30fc\u30b8\u5185\u3067\u5b9f\u884c\u3059\u308b\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u5f15\u6570\u306b\u6307\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u306e\u3067\u3001\u672c\u5f53\u306b WASI \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3068\u3057\u3066\u52d5\u3044\u3066\u3044\u308b\u306e\uff1f \u30ed\u30fc\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u3092\u5b9f\u884c\u3057\u3066\u3044\u308b\u3093\u3058\u3083\u306a\u3044\u306e\uff1f \u3068\u3044\u3046\u7591\u554f\u304c\u3042\u308b\u3067\u3057\u3087\u3046\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n% echo &quot;puts RUBY_DESCRIPTION&quot; &gt;&gt; src\/hello.rb\n% ruby .\/src\/hello.rb\nHello, world!\nruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux-gnu]\n% .\/wasmtime-v7.0.0-x86_64-linux\/wasmtime hello.wasm -- \/src\/hello.rb\nHello, world!\n%\n<\/pre>\n<p>\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u5909\u66f4\u3057\u3066\u5b9f\u884c\u3057\u3066\u3082\u53cd\u6620\u3055\u308c\u3066\u3044\u306a\u3044\u306e\u3067\u3001\u3069\u3046\u3084\u3089\u5b9f\u969b\u306b WASI \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u52d5\u4f5c\u3057\u3066\u3044\u308b\u3088\u3046\u3067\u3059\u3002\u3082\u3046\u4e00\u5ea6\u30d3\u30eb\u30c9\u3057\u3066\u78ba\u8a8d\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n% .\/wasi-vfs pack .\/3_2-wasm32-unknown-wasi-full\/usr\/local\/bin\/ruby --mapdir \/src::.\/src --mapdir \/usr::.\/3_2-wasm32-unknown-wasi-full\/usr -o hello.wasm\n% .\/wasmtime-v7.0.0-x86_64-linux\/wasmtime hello.wasm -- \/src\/hello.rb\nHello, world!\nruby 3.2.0 (2022-12-25 revision a528908271) [wasm32-wasi]\n%\n<\/pre>\n<p>\u554f\u984c\u306a\u304f WASI \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3068\u3057\u3066\u52d5\u4f5c\u3057\u3066\u3044\u307e\u3057\u305f\u3002<\/p>\n<p>\u307e\u305f\u3001wasmtime \u4ee5\u5916\u306eWASM\u30b9\u30bf\u30f3\u30c9\u30a2\u30ed\u30fc\u30f3\u30e9\u30f3\u30bf\u30a4\u30e0\u3068\u3057\u3066 <a href=\"https:\/\/wasmer.io\/\" target=\"_blank\" rel=\"noopener\">Wasmer<\/a> \u304c\u3042\u308a\u307e\u3059\u3002\u3053\u3061\u3089\u3082\u8a66\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\">\n% curl -LO https:\/\/github.com\/wasmerio\/wasmer\/releases\/download\/v3.2.0\/wasmer-linux-amd64.tar.gz\n% tar xf wasmer-linux-amd64.tar.gz\n% .\/bin\/wasmer hello.wasm -- \/src\/hello.rb\nHello, world!\nruby 3.2.0 (2022-12-25 revision a528908271) [wasm32-wasi]\n%\n<\/pre>\n<p>wasmtime \u3068\u540c\u69d8\u306b wasmer \u3067\u3082\u5b9f\u884c\u3067\u304d\u307e\u3057\u305f\u3002<\/p>\n<h2>\u307e\u3068\u3081<\/h2>\n<p>\u672c\u7a3f\u3067\u306f Ruby \u3067 WASM \/ WASI \u3092\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\u3002\u6587\u4e2d\u3067\u8ff0\u3079\u305f\u3088\u3046\u306b\u3001WASI\u306f\u300c\u30b3\u30f3\u30c6\u30ca\u306e\u6b21\u300d\u3068\u306a\u308b\u30dd\u30fc\u30bf\u30d6\u30eb\u3067\u30bb\u30ad\u30e5\u30a2\u306a\u4ed5\u7d44\u307f\u3068\u3057\u3066\u6ce8\u76ee\u3092\u96c6\u3081\u3066\u3044\u307e\u3059\u3002\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3\u3067\u306f\u5f15\u304d\u7d9a\u304d WebAssmbly \u306b\u3064\u3044\u3066\u8abf\u67fb\u3057\u3066\u3044\u304d\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>WebAssembly (WASM)\u3092\u4f7f\u3046\u3068\u3001\u30a6\u30a7\u30d6\u30d6\u30e9\u30a6\u30b6\u4e0a\u3067JavaScript\u4ee5\u5916\u306e\u8a00\u8a9e\u3092\u52d5\u4f5c\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u904e\u53bb\u8a18\u4e8b\u306bPython\u3092\u52d5\u4f5c\u3055\u305b\u305f\u4f8b\u3082\u3042\u308a\u307e\u3057\u305f\u3002\u672c\u8a18\u4e8b\u3067\u306fRuby\u3092\u52d5\u304b\u3057\u3066\u307f\u307e\u3059\u3002 ruby. [&#8230;]<\/p>\n","protected":false},"author":2,"featured_media":58360,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":""},"categories":[31,819],"tags":[],"class_list":["post-60328","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-higuchi","category-ruby"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Ruby\u3067WebAssembly\u3092\u8a66\u3057\u3066\u307f\u3088\u3046 #ruby #WebAssembly #WASM #WASI - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3<\/title>\n<meta name=\"description\" content=\"d-higuchi, Ruby |WebAssembly\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.creationline.com\/tech-blog\/others\/ruby\/60328\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ruby\u3067WebAssembly\u3092\u8a66\u3057\u3066\u307f\u3088\u3046 #ruby #WebAssembly #WASM #WASI - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3\" \/>\n<meta property=\"og:description\" content=\"d-higuchi, Ruby |WebAssembly\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.creationline.com\/tech-blog\/others\/ruby\/60328\" \/>\n<meta property=\"og:site_name\" content=\"Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/creationline\" \/>\n<meta property=\"article:published_time\" content=\"2023-04-20T02:00:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-29T06:28:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/01\/WebAssembly_Logo_02.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1506\" \/>\n\t<meta property=\"og:image:height\" content=\"795\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Daisuke Higuchi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@creationline\" \/>\n<meta name=\"twitter:site\" content=\"@creationline\" \/>\n<meta name=\"twitter:label1\" content=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"Daisuke Higuchi\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"3\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/others\\\/ruby\\\/60328#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/others\\\/ruby\\\/60328\"},\"author\":{\"name\":\"Daisuke Higuchi\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/#\\\/schema\\\/person\\\/16f1373831fb6fd17387f16ae1195206\"},\"headline\":\"Ruby\u3067WebAssembly\u3092\u8a66\u3057\u3066\u307f\u3088\u3046 #ruby #WebAssembly #WASM #WASI\",\"datePublished\":\"2023-04-20T02:00:02+00:00\",\"dateModified\":\"2023-08-29T06:28:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/others\\\/ruby\\\/60328\"},\"wordCount\":536,\"image\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/others\\\/ruby\\\/60328#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cms_x3GWkuX\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/WebAssembly_Logo_02.png\",\"articleSection\":[\"d-higuchi\",\"Ruby\"],\"inLanguage\":\"ja\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/others\\\/ruby\\\/60328\",\"url\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/others\\\/ruby\\\/60328\",\"name\":\"Ruby\u3067WebAssembly\u3092\u8a66\u3057\u3066\u307f\u3088\u3046 #ruby #WebAssembly #WASM #WASI - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/others\\\/ruby\\\/60328#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/others\\\/ruby\\\/60328#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cms_x3GWkuX\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/WebAssembly_Logo_02.png\",\"datePublished\":\"2023-04-20T02:00:02+00:00\",\"dateModified\":\"2023-08-29T06:28:57+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/#\\\/schema\\\/person\\\/16f1373831fb6fd17387f16ae1195206\"},\"description\":\"d-higuchi, Ruby |WebAssembly\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/others\\\/ruby\\\/60328#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/others\\\/ruby\\\/60328\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/others\\\/ruby\\\/60328#primaryimage\",\"url\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cms_x3GWkuX\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/WebAssembly_Logo_02.png\",\"contentUrl\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cms_x3GWkuX\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/WebAssembly_Logo_02.png\",\"width\":1506,\"height\":795},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/others\\\/ruby\\\/60328#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"HOME\",\"item\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u305d\u306e\u4ed6\",\"item\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/others\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Ruby\",\"item\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/others\\\/ruby\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Ruby\u3067WebAssembly\u3092\u8a66\u3057\u3066\u307f\u3088\u3046 #ruby #WebAssembly #WASM #WASI\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/#website\",\"url\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/\",\"name\":\"Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3\",\"description\":\"\u30a2\u30b8\u30e3\u30a4\u30eb\uff06DevOps\u3001\u30af\u30e9\u30a6\u30c9\u30cd\u30a4\u30c6\u30a3\u30d6\u3001AI\uff06LLM\u306e\u5148\u7aef\u6280\u8853\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ja\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/#\\\/schema\\\/person\\\/16f1373831fb6fd17387f16ae1195206\",\"name\":\"Daisuke Higuchi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cms_x3GWkuX\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/d-higuchi-wp-icon-230x230.png\",\"url\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cms_x3GWkuX\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/d-higuchi-wp-icon-230x230.png\",\"contentUrl\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cms_x3GWkuX\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/d-higuchi-wp-icon-230x230.png\",\"caption\":\"Daisuke Higuchi\"},\"description\":\"Chef\u30fbDocker\u30fbMirantis\u88fd\u54c1\u306a\u3069\u306e\u6280\u8853\u8981\u7d20\u306b\u52a0\u3048\u3066\u3001\u4f1a\u8b70\u306e\u9032\u3081\u65b9\u30fb\u6587\u7ae0\u306e\u66f8\u304d\u65b9\u306a\u3069\u306e\u696d\u52d9\u6539\u5584\u306b\u3082\u53d6\u308a\u7d44\u3093\u3067\u3044\u307e\u3059\u3002\u300cChef\u6d3b\u7528\u30ac\u30a4\u30c9\u300d\u5171\u8457\u306e\u307b\u304b\u3001Debian Official Developer\u3082\u3084\u3063\u3066\u3044\u307e\u3059\u3002\",\"url\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/author\\\/higuchi\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Ruby\u3067WebAssembly\u3092\u8a66\u3057\u3066\u307f\u3088\u3046 #ruby #WebAssembly #WASM #WASI - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3","description":"d-higuchi, Ruby |WebAssembly","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.creationline.com\/tech-blog\/others\/ruby\/60328","og_locale":"ja_JP","og_type":"article","og_title":"Ruby\u3067WebAssembly\u3092\u8a66\u3057\u3066\u307f\u3088\u3046 #ruby #WebAssembly #WASM #WASI - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3","og_description":"d-higuchi, Ruby |WebAssembly","og_url":"https:\/\/www.creationline.com\/tech-blog\/others\/ruby\/60328","og_site_name":"Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3","article_publisher":"https:\/\/www.facebook.com\/creationline","article_published_time":"2023-04-20T02:00:02+00:00","article_modified_time":"2023-08-29T06:28:57+00:00","og_image":[{"width":1506,"height":795,"url":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/01\/WebAssembly_Logo_02.png","type":"image\/png"}],"author":"Daisuke Higuchi","twitter_card":"summary_large_image","twitter_creator":"@creationline","twitter_site":"@creationline","twitter_misc":{"\u57f7\u7b46\u8005":"Daisuke Higuchi","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"3\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.creationline.com\/tech-blog\/others\/ruby\/60328#article","isPartOf":{"@id":"https:\/\/www.creationline.com\/tech-blog\/others\/ruby\/60328"},"author":{"name":"Daisuke Higuchi","@id":"https:\/\/www.creationline.com\/tech-blog\/#\/schema\/person\/16f1373831fb6fd17387f16ae1195206"},"headline":"Ruby\u3067WebAssembly\u3092\u8a66\u3057\u3066\u307f\u3088\u3046 #ruby #WebAssembly #WASM #WASI","datePublished":"2023-04-20T02:00:02+00:00","dateModified":"2023-08-29T06:28:57+00:00","mainEntityOfPage":{"@id":"https:\/\/www.creationline.com\/tech-blog\/others\/ruby\/60328"},"wordCount":536,"image":{"@id":"https:\/\/www.creationline.com\/tech-blog\/others\/ruby\/60328#primaryimage"},"thumbnailUrl":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/01\/WebAssembly_Logo_02.png","articleSection":["d-higuchi","Ruby"],"inLanguage":"ja"},{"@type":"WebPage","@id":"https:\/\/www.creationline.com\/tech-blog\/others\/ruby\/60328","url":"https:\/\/www.creationline.com\/tech-blog\/others\/ruby\/60328","name":"Ruby\u3067WebAssembly\u3092\u8a66\u3057\u3066\u307f\u3088\u3046 #ruby #WebAssembly #WASM #WASI - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3","isPartOf":{"@id":"https:\/\/www.creationline.com\/tech-blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.creationline.com\/tech-blog\/others\/ruby\/60328#primaryimage"},"image":{"@id":"https:\/\/www.creationline.com\/tech-blog\/others\/ruby\/60328#primaryimage"},"thumbnailUrl":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/01\/WebAssembly_Logo_02.png","datePublished":"2023-04-20T02:00:02+00:00","dateModified":"2023-08-29T06:28:57+00:00","author":{"@id":"https:\/\/www.creationline.com\/tech-blog\/#\/schema\/person\/16f1373831fb6fd17387f16ae1195206"},"description":"d-higuchi, Ruby |WebAssembly","breadcrumb":{"@id":"https:\/\/www.creationline.com\/tech-blog\/others\/ruby\/60328#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.creationline.com\/tech-blog\/others\/ruby\/60328"]}]},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/www.creationline.com\/tech-blog\/others\/ruby\/60328#primaryimage","url":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/01\/WebAssembly_Logo_02.png","contentUrl":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/01\/WebAssembly_Logo_02.png","width":1506,"height":795},{"@type":"BreadcrumbList","@id":"https:\/\/www.creationline.com\/tech-blog\/others\/ruby\/60328#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"HOME","item":"https:\/\/www.creationline.com\/tech-blog"},{"@type":"ListItem","position":2,"name":"\u305d\u306e\u4ed6","item":"https:\/\/www.creationline.com\/tech-blog\/others"},{"@type":"ListItem","position":3,"name":"Ruby","item":"https:\/\/www.creationline.com\/tech-blog\/others\/ruby"},{"@type":"ListItem","position":4,"name":"Ruby\u3067WebAssembly\u3092\u8a66\u3057\u3066\u307f\u3088\u3046 #ruby #WebAssembly #WASM #WASI"}]},{"@type":"WebSite","@id":"https:\/\/www.creationline.com\/tech-blog\/#website","url":"https:\/\/www.creationline.com\/tech-blog\/","name":"Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3","description":"\u30a2\u30b8\u30e3\u30a4\u30eb\uff06DevOps\u3001\u30af\u30e9\u30a6\u30c9\u30cd\u30a4\u30c6\u30a3\u30d6\u3001AI\uff06LLM\u306e\u5148\u7aef\u6280\u8853","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.creationline.com\/tech-blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ja"},{"@type":"Person","@id":"https:\/\/www.creationline.com\/tech-blog\/#\/schema\/person\/16f1373831fb6fd17387f16ae1195206","name":"Daisuke Higuchi","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/08\/d-higuchi-wp-icon-230x230.png","url":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/08\/d-higuchi-wp-icon-230x230.png","contentUrl":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/08\/d-higuchi-wp-icon-230x230.png","caption":"Daisuke Higuchi"},"description":"Chef\u30fbDocker\u30fbMirantis\u88fd\u54c1\u306a\u3069\u306e\u6280\u8853\u8981\u7d20\u306b\u52a0\u3048\u3066\u3001\u4f1a\u8b70\u306e\u9032\u3081\u65b9\u30fb\u6587\u7ae0\u306e\u66f8\u304d\u65b9\u306a\u3069\u306e\u696d\u52d9\u6539\u5584\u306b\u3082\u53d6\u308a\u7d44\u3093\u3067\u3044\u307e\u3059\u3002\u300cChef\u6d3b\u7528\u30ac\u30a4\u30c9\u300d\u5171\u8457\u306e\u307b\u304b\u3001Debian Official Developer\u3082\u3084\u3063\u3066\u3044\u307e\u3059\u3002","url":"https:\/\/www.creationline.com\/tech-blog\/author\/higuchi"}]}},"_links":{"self":[{"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/posts\/60328","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/comments?post=60328"}],"version-history":[{"count":13,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/posts\/60328\/revisions"}],"predecessor-version":[{"id":65845,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/posts\/60328\/revisions\/65845"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/media\/58360"}],"wp:attachment":[{"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/media?parent=60328"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/categories?post=60328"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/tags?post=60328"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}