多様な環境にわたって業務の効率化を目指す経営者にとって、統合は大きな課題です。各ツールが孤立していると、スタッフは非効率性に悩まされ、フラストレーションを感じ、ビジネスの機会を逃す可能性があります。
Web ブラウザー外で WebAssembly モジュールを実行するための共通規格である WebAssembly System Interface (WASI) は、企業で使用されている他のシステムやソフトウェアとのスムーズな統合を可能にし、この問題を解決します。
以下では、WASI に関する詳細と、WASI を導入することでプロセス を最適化し、開発者の生産性を高め、ビジネスを新たな高みに導くことができる理由をご説明します。
WebAssembly System Interface(WASI) は、WebAssembly (Wasm) がブラウザー外で実行できることを拡張することを目的とする取り組みの一環です。WASI は Wasm モジュール用の標準化されたシステムインターフェイス (API) を提供し、一貫した動作を維持しながら、さまざまなプラットフォーム間でシステムリソースと安全かつ効率的にやり取りできるようにします。
Wasm と WASI は似ているように見えるかもしれませんが、運用の最適化につながる異なる目的の下に構築されています。それぞれの強みを組み合わせて活用するには、このふたつの違いを理解することが重要です。早速、詳しく見てみましょう。
Wasm によって、あらゆる CPU でコードを迅速かつ効率的に実行できるようになるため、場所を問わず優れたパフォーマンスを発揮するアプリケーションの開発が可能になります。Wasm の主な目的は、さまざまなハードウェアでバイナリ形式の命令を実行することにあります。
以下は主な特徴の一部です。
ユニバーサル使用 : 一度コードを書くだけで WebAssembly をサポートするあらゆるプラットフォームで実行できます。
スピード : コンパクトな形式で、直接コンパイルできるため、ネイティブに近いパフォーマンスを達成できます。
セキュリティ : コードを保護された領域に隔離し、脆弱性を軽減します。
モジュール性 : 作業を再利用可能なコンポーネントに分割できます。
基本的に、WebAssembly によって業界全体で使用されているさまざまな CPU を抽象化し、これらの CPU 間でコードを移植できるようになります。
WASI によって WebAssembly のコードが基盤となるシステムとやり取りすることが可能になるため、WebAssembly の機能を拡張できます。Wasm がさまざまなプラットフォームでの迅速な実行に重点を置く一方、WASI は追加機能の提供を可能にします。
WASI は主に以下の点において優れています。
システムアクセス : ファイルの読み取りと書き込み、ネットワーキングなどを可能にします。
標準化 : 一貫性のある API により、プラットフォーム間で一貫した動作が保証されます。
セキュリティ : 必要な権限のみを付与することでリスクを最小限に抑えます。
柔軟性 : モジュール式のアプローチにより、必要なシステムインタラクションのみを実装できます。
Wasm と WASI には違いがあ るものの、連携して動作するように設計されています。Wasm はユニバーサルな実行を効率的に行うことを可能にし、WASI はシステムレベルの機能を提供して、コードが重要なタスクを実行するあらゆる場所で機能性を強化します。両方を併用することで、要件に合わせてカスタマイズされた強力なクロスプラットフォームアプリケーションを作成できます。
WASI は、WebAssembly (Wasm) が企業の間で普及するにつれて生じた特定の課題に対処するために開発されました。Wasm はさまざまなプラットフォームでコードを効率的に実行することに優れていますが、その制約によって幅広い採用が妨げられています。
そこで Wasm の制約について見てみましょう。
限られたアクセス : Wasm は安全な環境で動作し、これは特にブラウザのセキュリティにとって重要ですが、Wasm がファイルやネットワークなどのシステムリソースに直接アクセスできないことも意味します。
ネイティブ統合の制限 : 主に Web 向けに設計されている Wasm は、システム機能とのインタラクションが最小限に限られています。システム API に直接 アクセスできない Wasm モジュールは、ファイルシステムへのアクセスやブラウザ外でのネットワーク通信などのタスクを実行できません。
断片化されたツール : Wasm がリソースとやり取りする標準化された方法が無かったため、開発者は環境固有の拡張機能やカスタムソリューションに頼らざるを得ませんでした。その結果、多様なアプローチのためにツールが断片化され、Wasm モジュールの動作が環境によって異なり、クロスプラットフォーム開発が複雑化しました。
Wasm がブラウザ外でも普及するにつれ、統一されたシステムインターフェイスの需要が大きく高まりました。そして、このような需要が WASI の開発へとつながったのです。WASI は以下の目的に欠かせません。
分断の解決 : WASI は、さまざまなプラットフォームで使用できる単一の API セットを提供し、Wasm モジュールがどこで実行されても同じように動作することを保証します。これにより開発が簡素化され、互換性の問題が軽減されるため、サーバーやエッジ デバイスなど向けのアプリケーションを構築できるようになります。
セキュリティと移植性の強化 : システム間のインタラクションを可能にする標準インターフェイスを定義することでセキュリティも強化されます。機能ベースのセキュリティモデルに従い、必要な権限のみが Wasm モジュールに付与されるため、リスクを軽減できます。
WASI は、WebAssembly アプリケーションを実行する強力な環境を提供するために連携して動作する複数の重要なパーツで構成されています。これらのコンポーネントによって WebAssembly の機能やセキュリティ、柔軟性が強化され、ブラウザー以外のさまざまな用途に使用できるようになります。以下は WASI の主なコンポーネントです。
WASI インターフェイスは、WebAssembly モジュールが、基盤となるシステムとやり取りできるようにする API を提供します。これらの API は、モジュールがさまざまなタスクを実行するためのインターフェイスとして機能し、モジュールが環境内で効果的に動作するのに必要なツールを使用できることを保証します。主要 API には以下が含まれます。
File I/O : WASI を通じてモジュールはホストシステム上でファイ ルを読み書きできるようになります。この機能により、モジュールはデータストレージ、コンフィグファイル、ユーザーが作成したコンテンツを管理できるようになります。これは、永続的なデータに依存するアプリケーションにとって不可欠です。
ネットワーク : インターフェイスにはネットワーク API が含まれており、モジュールによるネットワーク接続の確立と管理が可能になります。この機能は、インターネットまたはローカルネットワークを介して通信する必要があるアプリケーションにとって非常に重要であり、単純な HTTP リクエストからより複雑なネットワーク操作に至るまで、幅広いタスクをサポートします。
時間 : このインターフェイスにより、WebAssembly モジュールはシステムクロックと通信して現在時刻を取得したり、時間間隔を測定したりすることが可能になります。この API は、イベントのログ記録やタスクのスケジュール管理、操作にかかる時間の測定などのタスクに不可欠です。
ランダム性 : このインターフェイスは、暗号化キーの生成や一意の識別子の作成、安全なプロトコルの実装など、質の高いランダム性を必要とするタスクに最適です。
端末の入出力 : これらの API は標準的な入力や出力、エラーストリームに対応し、コンソールまたはその他の I/O ストリームとのやり取りを可能にします。
WASI 0.2 は進化を続けており、ソケット、HTTP、キーバリューストア、BLOB ストレージ、設定、メッセージング、暗号化、コンポーネントモデルなどの新しい機能を導入する継続的な取り組みが行われています。多くの業界や組織が、クロスプラットフォーム開発を簡素化し、ビジネスアプリケーションのセキュリティとパフォーマンスを強化するために WASI を採用しています。
今後も、互換性と組み合わせやすさという基本原則が、WASI のバージョンアップを導くことになるでしょう。これらの原則により、WASI が進化しても、システムアクセスを必要とする既存の WebAssembly アプリケーションが機能し続けることが保証されます。そのため、現行の WASI API を使用して構築されたアプリケーションに、今後追加される機能を組み込むことが可能になります。
Fastly は Wasm と WASI の開発と採用に大きく貢献しており、World Wide Consortium (W3C) と Bytecode Alliance による標準化やオープンソースの取り組みに積極的に参加し続けます。
早速 Fastly の無料アカウントを作成して、オープンソースをサポートする Fastly の取り組みや、Fastly Compute によってエンドユーザーが満足する最高のエクスペリエンスを簡単に構築できる理由をご覧ください。