{
    "componentChunkName": "component---src-templates-blog-post-js",
    "path": "/2022-09-30_workerd-hello-world/",
    "result": {"data":{"site":{"siteMetadata":{"title":"365"}},"markdownRemark":{"id":"741e6238-98c6-5abb-a09f-fbf88dad3c71","excerpt":"Cloudflare Workers のランタイム workerd が出たので Hello World をやってみる https://github.com/cloudflare/workerd やってみる プロジェクトを作成して、 workerd を入れる Hello World…","html":"<p>Cloudflare Workers のランタイム workerd が出たので Hello World をやってみる<br>\n<a href=\"https://github.com/cloudflare/workerd\">https://github.com/cloudflare/workerd</a></p>\n<h2>やってみる</h2>\n<p>プロジェクトを作成して、 workerd を入れる</p>\n<div class=\"gatsby-highlight\" data-language=\"sh\"><pre class=\"language-sh\"><code class=\"language-sh\">$ yarn init -y\n$ yarn add -D workerd</code></pre></div>\n<p>Hello World を返すスクリプト <code class=\"language-text\">hello.js</code> を作成</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token function\">addEventListener</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"fetch\"</span><span class=\"token punctuation\">,</span> <span class=\"token parameter\">event</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    event<span class=\"token punctuation\">.</span><span class=\"token function\">respondWith</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token class-name\">Response</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Hello World\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>設定 <code class=\"language-text\">config.capnp</code> を作成<br>\n中で <code class=\"language-text\">hello.js</code> を指定する</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\">using Workerd <span class=\"token operator\">=</span> <span class=\"token keyword\">import</span> <span class=\"token string\">\"/workerd/workerd.capnp\"</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> <span class=\"token literal-property property\">config</span> <span class=\"token operator\">:</span>Workerd<span class=\"token punctuation\">.</span>Config <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>\n  services <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>\n    <span class=\"token punctuation\">(</span>name <span class=\"token operator\">=</span> <span class=\"token string\">\"main\"</span><span class=\"token punctuation\">,</span> worker <span class=\"token operator\">=</span> <span class=\"token punctuation\">.</span>mainWorker<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n\n  sockets <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>\n    # Serve <span class=\"token constant\">HTTP</span> on port <span class=\"token number\">8080.</span>\n    <span class=\"token punctuation\">(</span> name <span class=\"token operator\">=</span> <span class=\"token string\">\"http\"</span><span class=\"token punctuation\">,</span>\n      address <span class=\"token operator\">=</span> <span class=\"token string\">\"*:8080\"</span><span class=\"token punctuation\">,</span>\n      http <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n      service <span class=\"token operator\">=</span> <span class=\"token string\">\"main\"</span>\n    <span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">]</span>\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> <span class=\"token literal-property property\">mainWorker</span> <span class=\"token operator\">:</span>Workerd<span class=\"token punctuation\">.</span>Worker <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>\n  serviceWorkerScript <span class=\"token operator\">=</span> embed <span class=\"token string\">\"src/hello.js\"</span><span class=\"token punctuation\">,</span>\n  compatibilityDate <span class=\"token operator\">=</span> <span class=\"token string\">\"2022-09-16\"</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>動かしてみる</p>\n<div class=\"gatsby-highlight\" data-language=\"sh\"><pre class=\"language-sh\"><code class=\"language-sh\">$ yarn workerd serve config.capnp\n\n## other terminal\n$ curl -XGET http://localhost:8080/\nHello World</code></pre></div>\n<h2>Hono でやってみる</h2>\n<p>実は先にこっちで試してた<br>\n流れはだいたい同じ</p>\n<p>プロジェクトを作成して、 workerd と hono を入れる</p>\n<div class=\"gatsby-highlight\" data-language=\"sh\"><pre class=\"language-sh\"><code class=\"language-sh\">$ yarn init -y\n$ yarn add -D workerd\n$ yarn add hono</code></pre></div>\n<p>Hono を使った <code class=\"language-text\">src/index.ts</code> を作成</p>\n<div class=\"gatsby-highlight\" data-language=\"ts\"><pre class=\"language-ts\"><code class=\"language-ts\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> Hono <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"hono\"</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> app <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Hono</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\napp<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/\"</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span>c<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> c<span class=\"token punctuation\">.</span><span class=\"token function\">text</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Hello workerd\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> app<span class=\"token punctuation\">;</span></code></pre></div>\n<p>JavaScript で動かすので esbuild を実行</p>\n<div class=\"gatsby-highlight\" data-language=\"sh\"><pre class=\"language-sh\"><code class=\"language-sh\">$ yarn esbuild --bundle --format=esm --outfile=dist/worker.mjs src/index.ts</code></pre></div>\n<p>設定 <code class=\"language-text\">config.capnp</code> を作成</p>\n<div class=\"gatsby-highlight\" data-language=\"ts\"><pre class=\"language-ts\"><code class=\"language-ts\">using Workerd <span class=\"token operator\">=</span> <span class=\"token keyword\">import</span> <span class=\"token string\">\"/workerd/workerd.capnp\"</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> config <span class=\"token operator\">:</span>Workerd<span class=\"token punctuation\">.</span>Config <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>\n\tservices <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>\n\t\t<span class=\"token punctuation\">(</span>name <span class=\"token operator\">=</span> <span class=\"token string\">\"main\"</span><span class=\"token punctuation\">,</span> worker <span class=\"token operator\">=</span> <span class=\"token punctuation\">.</span>mainWorker<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n\t<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n\n\tsockets <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>\n\t\t# Serve <span class=\"token constant\">HTTP</span> on port <span class=\"token number\">8080.</span>\n\t\t<span class=\"token punctuation\">(</span> name <span class=\"token operator\">=</span> <span class=\"token string\">\"http\"</span><span class=\"token punctuation\">,</span>\n\t\t\taddress <span class=\"token operator\">=</span> <span class=\"token string\">\"*:8080\"</span><span class=\"token punctuation\">,</span>\n\t\t\thttp <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n\t\t\tservice <span class=\"token operator\">=</span> <span class=\"token string\">\"main\"</span>\n\t\t<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n\t<span class=\"token punctuation\">]</span>\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> mainWorker <span class=\"token operator\">:</span>Workerd<span class=\"token punctuation\">.</span>Worker <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>\n\tcompatibilityDate <span class=\"token operator\">=</span> <span class=\"token string\">\"2022-09-17\"</span><span class=\"token punctuation\">,</span>\n\n\tmodules <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>\n\t\t<span class=\"token punctuation\">(</span> name <span class=\"token operator\">=</span> <span class=\"token string\">\"dist/worker.mjs\"</span><span class=\"token punctuation\">,</span> esModule <span class=\"token operator\">=</span> embed <span class=\"token string\">\"dist/worker.mjs\"</span> <span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n\t<span class=\"token punctuation\">]</span>\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>動かしてみる</p>\n<div class=\"gatsby-highlight\" data-language=\"sh\"><pre class=\"language-sh\"><code class=\"language-sh\">$ yarn workerd serve config.capnp\n\n## other terminal\n$ curl -XGET http://localhost:8080/\nHello workerd</code></pre></div>\n<h2>参考</h2>\n<ul>\n<li><a href=\"https://yusukebe.com/posts/2022/workerd/\">Cloudflare Workersのランタイム「workerd」を触ってみた - ゆーすけべー日記</a></li>\n</ul>","frontmatter":{"title":"Cloudflare Workers のランタイム workerd で Hello World","date":"2022/09/30","description":"Cloudflare Workers のランタイム workerd が出たので Hello World をやってみる"}},"previous":{"fields":{"slug":"/2022-09-16_lefthook_run/"},"frontmatter":{"title":"Git hooks の Lefthook を使ってみる"}},"next":{"fields":{"slug":"/2022-10-09_chrome-bookmark-backup/"},"frontmatter":{"title":"macOS Google Chrome ブックマークと Session Buddy 拡張機能の保存場所"}}},"pageContext":{"id":"741e6238-98c6-5abb-a09f-fbf88dad3c71","previousPostId":"6728a4a8-8572-5b36-820d-f9ee527fd5ca","nextPostId":"47cc0665-2ef6-5ddf-a7f2-31b89dee542a"}},
    "staticQueryHashes": ["2841359383","3257411868"]}