<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Zig on Blog</title><link>https://blog.wtnqk.org/tags/zig/</link><description>Recent content in Zig on Blog</description><generator>Hugo -- gohugo.io</generator><language>ja</language><lastBuildDate>Mon, 19 Jan 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.wtnqk.org/tags/zig/index.xml" rel="self" type="application/rss+xml"/><item><title>webassemblyで画像フィルタをつくる</title><link>https://blog.wtnqk.org/posts/2026-01-19/</link><pubDate>Mon, 19 Jan 2026 00:00:00 +0000</pubDate><guid>https://blog.wtnqk.org/posts/2026-01-19/</guid><description>&lt;p&gt;この記事は以前企業ブログに寄稿したものとなります&lt;/p&gt;
&lt;h2 id="リンク"&gt;&lt;a href="https://tec.tecotec.co.jp/entry/2025/12/03/000000"&gt;リンク&lt;/a&gt;&lt;/h2&gt;
&lt;h1 id="1-webassemblyとは何か"&gt;1. WebAssemblyとは何か&lt;/h1&gt;
&lt;p&gt;── WASMがなぜ使われるのか、どこが嬉しいのか&lt;/p&gt;
&lt;p&gt;WebAssembly（WASM）はもう珍しい技術ではなく、すでに&lt;strong&gt;普段使用している主要Webサービスの裏側で動いています&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Google Meet&lt;/strong&gt;：背景ぼかし・ノイズ除去&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Google Earth Web&lt;/strong&gt;：3D処理のコア&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;「JavaScriptじゃ重い画像処理や数学処理を軽くするための技術」…&lt;br&gt;
として広く紹介されていますが、個人的には&lt;strong&gt;設計の自由度が上がること&lt;/strong&gt;にあると考えています&lt;/p&gt;
&lt;!-- more --&gt;
&lt;p&gt;MDNはWebAssemblyを次のように説明しています：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“WebAssembly（Wasm）は、ネイティブに近いパフォーマンスで実行されるコンパクトなバイナリフォーマット”&lt;/strong&gt;&lt;br&gt;
— &lt;a href="https://developer.mozilla.org/ja/docs/WebAssembly"&gt;https://developer.mozilla.org/ja/docs/WebAssembly&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“WebAssembly コードは安全な、サンドボックス化された実行環境で実行される”&lt;/strong&gt;&lt;br&gt;
— &lt;a href="https://developer.mozilla.org/ja/docs/WebAssembly/Concepts"&gt;https://developer.mozilla.org/ja/docs/WebAssembly/Concepts&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;公式仕様書では、以下のように定義されています：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“WebAssembly defines a portable, efficient and safe low-level bytecode.”&lt;/strong&gt;&lt;br&gt;
— &lt;a href="https://webassembly.github.io/spec/core/intro/introduction.html"&gt;https://webassembly.github.io/spec/core/intro/introduction.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;また、内部実行モデルについて：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“The execution semantics of WebAssembly are defined using a stack machine.”&lt;/strong&gt;&lt;br&gt;
— &lt;a href="https://webassembly.github.io/spec/core/exec/instructions.html"&gt;https://webassembly.github.io/spec/core/exec/instructions.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;つまりWebAssemblyは、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ブラウザで直接実行される&lt;/li&gt;
&lt;li&gt;スタックマシンベースの &lt;strong&gt;仮想命令セット（virtual ISA）&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;安全なサンドボックス上で動く&lt;/li&gt;
&lt;li&gt;コンパクトで高速なバイトコード形式&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;といった特徴を備えた実行環境です&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id="2-wasmで画像フィルタ"&gt;2. WASMで画像フィルタ&lt;/h1&gt;
&lt;p&gt;JS→WASM→JSの流れでCanvasに反映します&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;HTML (UI)
↓
JavaScript (画像読込・Canvas)
↓
WebAssembly (ピクセル処理)
↓
JavaScript (結果描画)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;JavaScriptはUI/Canvasのみ担当し、&lt;br&gt;
&lt;strong&gt;ピクセル処理はWASMが行う&lt;/strong&gt;という責務分離が実現します&lt;/p&gt;</description></item></channel></rss>