🌐

Go 1.24 が Wasm のサポートを拡張。Service Extension でエッジ コンピューティングをより手軽に!

2025/02/17に公開

はじめに

こんにちは!ラリオスです。

この記事は、エッジ コンピューティングに関心のある開発者、特に Go のアップデートや WebAssembly について知りたい方を対象としています。

概要

エッジ コンピューティングのニーズが高まる中、Go 1.24 の Wasm サポート強化(2025 年 2 月 11 日リリース。現地時間)と、Google Cloud の Service Extension での Go 対応によって、Go でエッジ コンピューティングをより手軽に実現できるようになりました。この記事では、これらの技術要素を解説し、組み合わせることで生まれるエッジ コンピューティングの具体的なメリットとユースケースを紹介します。

1. はじめに:エッジ コンピューティングの重要性と Go の可能性

私たちの身の回りには、スマートフォン、スマートウォッチ、スマート家電、産業用ロボットなど、日々大量のデータを生成するデバイスがあふれています。これらのデバイスから生まれる膨大なデータを、従来のクラウド コンピューティングに頼って処理しようとすると、通信の遅延 (レイテンシ) やネットワーク帯域幅の圧迫といった課題が生じます。

そこで注目されているのが、エッジ コンピューティングという考え方です。エッジ コンピューティングとは、データが発生する場所の近く、つまりネットワークの「エッジ」でデータ処理を行うことで、レイテンシを削減し、帯域幅を効率的に利用する技術です。自動運転、遠隔医療、スマート ファクトリーなど、リアルタイム性が求められる分野では、エッジ コンピューティングが不可欠な存在となりつつあります。


画像引用元:https://cloud.google.com/blog/topics/hybrid-cloud/announcing-google-distributed-cloud-edge-and-hosted?hl=en

また、エッジでデータを処理することで、クラウドに送信するデータ量を減らし、プライバシー保護やセキュリティ向上にも貢献できます。 しかし、エッジ環境は、クラウド環境と比べてリソースが限られていることが多く、効率的なアプリケーション開発と実行が求められます。

そこで、高速な処理速度、軽量な実行ファイル、高い並行処理性能を兼ね備えた Go 言語が、エッジ コンピューティングの選択肢として考えられています。 Go は、そのシンプルさと効率性から、クラウド ネイティブなアプリケーション開発で利用されていますが、エッジ環境においてもその能力を発揮し始めています。

特に、Go 1.24 で強化された WebAssembly (Wasm) のサポートと、Google Cloud の Service Extension での Go 対応は、Go がエッジ コンピューティングで重要な役割を担う可能性を示しています。

本記事では、Go、Wasm、Service Extension という 3 つの要素技術を組み合わせることで、エッジ コンピューティングがどのように進化し、どのような可能性が生まれるのかを、ユースケースを交えながら解説していきます。

2. Go 1.24 による Wasm サポートの進化

WebAssembly (Wasm) とは ?

WebAssembly (Wasm) は、ウェブブラウザで動作するアプリケーションのために設計された、新しいタイプのコードです。従来の JavaScript よりも高速に動作し、C++、Rust、Go など、様々な言語で記述されたプログラムをコンパイルして実行できます。Wasm の大きな特徴は、特定の CPU アーキテクチャに依存しないバイナリコード形式であるため、様々なプラットフォームで実行できることです。

https://developer.mozilla.org/ja/docs/WebAssembly

Wasm の特徴

Wasm は、従来の JavaScript と比較して、以下の点で優れています。

  • 高速性:事前コンパイルが可能で、JavaScript エンジンによる解析・コンパイルのオーバーヘッドが少ないため、高速に実行できます。
  • 安全性:サンドボックス化された環境で実行されるため、ホスト OS や他のアプリケーションに影響を与えることなく、安全に動作します。
  • 移植性:特定の CPU アーキテクチャに依存しないため、様々なプラットフォームで実行できます。

Wasm は当初、ウェブブラウザでの利用を想定して開発されましたが、その高い性能と安全性から、現在では、ウェブブラウザだけでなく、サーバーサイド、エッジ コンピューティング、組み込みシステムなど、様々な環境で利用されています。

Wasm を利用するメリット:エッジ コンピューティングとの親和性

従来のエッジ コンピューティングでは、主にコンテナ技術が利用されてきました。しかし、Wasm は、従来のコンテナ技術と比較して、起動時間が短く、リソース消費量が少ないというメリットがあります。エッジデバイスは、多くの場合、リソースが限られているため、軽量で高速な Wasm は、エッジ コンピューティングに最適な技術と言えます。 Wasm モジュールは、サンドボックス化された環境で実行されるため、ホストシステムのリソースに直接アクセスすることができません。これにより、悪意のあるコードが実行されるリスクを最小限に抑えることができます。

Wasm とコンテナ技術の比較

特徴 Wasm コンテナ
起動速度 高速 (ミリ秒単位) 低速 (秒単位)
リソース消費量 少量 (メモリ占有量が少なく、オーバーヘッドが小さい。コンテナよりもさらに軽量) 比較的少量 (OS レベルの仮想化を行うため、Wasm よりもリソース消費は大きい。ただし、従来の仮想マシンに比べると軽量)
セキュリティ 高い (サンドボックス化されており、システムコールへのアクセスが制限されている) 中程度 (コンテナ自体は隔離されているが、カーネルを共有するため、脆弱性があると影響を受ける可能性がある。ただし、適切な設定やセキュリティ対策を講じることで、セキュリティレベルを向上させることが可能。デフォルト設定やベスト プラクティスに従えば、セキュリティリスクを低減できる。
イメージサイズ 小さい (数 MB 程度。ただし、アプリケーションによっては大きくなる場合もある) 大きい (数百 MB から数 GB になる場合もある)
依存関係 少ない (Wasm ランタイムに依存) 多い (OS、ライブラリなど、様々な依存関係がある)

Go における Wasm サポートの歴史

Go 言語は、バージョン 1.11 から Wasm をサポートしており、Go で記述されたプログラムを Wasm にコンパイルして、ウェブブラウザ上で実行できるようになりました。

Go 1.24 の主なアップデート

Go 1.24 では、Wasm のサポートがさらに強化され、以下の新機能が追加されました。

  • go:wasmexport ディレクティブ:Go の関数を Wasm ホストにエクスポートできるようになりました。これにより、Wasm モジュールとホスト環境との連携が容易になりました。
  • WASI リアクタービルドフラグ:Go アプリケーションが初期化関数の終了後も動作し続けることが可能になりました。これにより、エクスポートされた関数を再初期化せずに呼び出すことができ、長時間実行されるアプリケーションやサービスにおいて重要な機能です。

https://tip.golang.org/doc/go1.24

3. Service Extension と Go:エッジでの柔軟な処理を実現

Service Extension とは ?

Service Extension は、Google Cloud の アプリケーション ロードバランサ(ALB) の機能を拡張するための仕組みです。通常、ALB は、受信したリクエストをバックエンドのサーバーに振り分ける役割を担いますが、Service Extension を利用することで、リクエストやレスポンスの処理をカスタマイズし、より高度な処理を行うことができます。 Service Extension には、主に以下の 2 つの方法があります。

  • プラグイン:ネットワーク データパスにカスタムコードを直接挿入し、インラインで処理を実行します。


画像引用元:https://cloud.google.com/service-extensions/docs/overview


  • コールアウト:データ処理中に、ALB がユーザー管理のサービスに対して gRPC 呼び出しを行い、外部サービスと連携します。


画像引用元:https://cloud.google.com/blog/ja/products/networking/understanding-service-extensions-callouts

※Service Extension は、Google Cloud 独自の機能であり、ALB の機能を拡張するための仕組みです。他のクラウド プロバイダーのロードバランサには、同様の機能がない場合もあります。

https://cloud.google.com/service-extensions/docs/overview
https://cloud.google.com/load-balancing/docs/application-load-balancer?hl=ja

Service Extension で Go が使えるようになったことの意義

これまで、Service Extension のプラグイン開発には、C++ などの言語が主に利用されていました。しかし、Service Extension で Go が利用できるようになったことで、より多くの開発者が、ALB の機能を拡張できるようになりました。 Go を利用する主なメリットは以下の通りです。

  • 開発効率の向上:Go は、シンプルで読みやすい構文を持ち、高速なコンパイルが可能です。これにより、開発者は、より短時間で効率的にプラグインを開発できます。
  • 高いパフォーマンス:Go は、並行処理に強く、多数の同時リクエストを効率的に処理できます。Service Extension のような、大量のトラフィックを処理する環境では、Go の高いパフォーマンスが活かされます。
  • 容易なメンテナンス:Go は、ガベージ コレクションを備えており、メモリ管理を自動化できます。これにより、メモリリークなどの問題を防止し、安定した長期稼働を実現できます。

https://ja.wikipedia.org/wiki/ガベージコレクション

Proxy-Wasm の活用

Service Extension のプラグインは、Proxy-Wasm という技術を活用しています。Proxy-Wasm は、Wasm モジュールをネットワーク プロキシ (この場合は ALB) に動的にロードし、リクエストやレスポンスの処理に組み込むための標準 API を提供します。これにより、プラグインのデプロイや更新を、ALB を停止することなく行うことができます。

https://github.com/proxy-wasm

従来の Service Extension (C++)との比較

特徴 Go C++
開発効率 高い (シンプルで読みやすい構文、高速なコンパイルにより、開発速度が向上しやすい) 低い (言語仕様が複雑で、記述量が多くなりがち。コンパイル時間も Go と比較して長い傾向がある)
パフォーマンス 良好 (並行処理に強く、多くのケースで十分なパフォーマンスを発揮する) 非常に高い (メモリ管理やハードウェアに近い制御が可能であり、最適化次第で最高のパフォーマンスを引き出せる)
メンテナンス 容易 (ガベージ コレクションによるメモリ管理により、メモリリークなどのリスクを軽減できる) 難しい (手動でのメモリ管理が必要であり、メモリリークなどのリスクがある。コードの品質によっては、デバッグや修正が困難になる)
開発者層 広い (比較的習得しやすい言語であり、Web 開発やクラウド ネイティブ開発で広く利用されている) 比較的狭い (メモリ管理、ポインタ、オブジェクト指向など、高度な知識が求められるため、習得難易度が高い)

4. Go + Wasm + Service Extension:エッジ コンピューティングの新たな可能性

エッジ コンピューティングとは ?

エッジ コンピューティングとは、データが発生する場所に近い場所でデータ処理を行うコンピューティング モデルです。従来のクラウド コンピューティングでは、データはクラウドに送信されて処理されていましたが、エッジ コンピューティングでは、データはエッジデバイス (IoT デバイス、センサー、ルーターなど) や、エッジサーバーで処理されます。

エッジ コンピューティングの主なメリットは以下の通りです。

  • 低レイテンシ:データ処理をデータ発生源の近くで行うため、クラウドにデータを送信する必要がなく、レイテンシを大幅に削減できます。
  • 帯域幅の節約:データ処理をエッジで行うことで、クラウドに送信するデータ量を削減し、ネットワーク帯域幅を節約できます。
  • 信頼性の向上:ネットワーク接続が不安定な環境でも、エッジでデータ処理を行うことで、アプリケーションの可用性を高めることができます。
  • セキュリティの向上:機密性の高いデータをエッジで処理することで、クラウドにデータを送信する必要がなく、セキュリティリスクを軽減できます。

Go、Wasm、Service Extension を組み合わせるメリット

Go、Wasm、Service Extension を組み合わせることで、エッジ コンピューティングの可能性をさらに広げることができます。

  • Go:高いパフォーマンス、軽量な実行ファイル、容易な開発により、エッジアプリケーションの開発を効率化します。
  • Wasm:高速な起動速度、低いリソース消費量、高いセキュリティにより、リソース制約の厳しいエッジ環境でのアプリケーション実行に適しています。
  • Service Extension:ALB の機能を拡張し、エッジでの柔軟なデータ処理を実現します。

これらの技術を組み合わせることで、開発者は、高性能でセキュアなエッジ アプリケーションを、迅速かつ容易に開発・デプロイすることができます。

具体的なユースケース

Go、Wasm、Service Extension を組み合わせることで、以下のようなユースケースを実現できます。

  • 動的なコンテンツ配信
    • 例:小売店において、顧客のスマートフォン アプリが店舗内の位置情報を取得し、その情報に基づいてクーポンやおすすめ商品をリアルタイムに表示します。その際、Service Extension が顧客の位置情報に応じて最適な Wasm モジュールを選択・実行し、Go で記述された Wasm モジュールがパーソナライズされたコンテンツを生成します


画像引用元:https://cloud.google.com/distributed-cloud?hl=ja#enable-modern-retail-experiences

  • IoT データのリアルタイム処理
    • 例:スマート ファクトリーにおいて、製造ラインのセンサーから収集されたデータをエッジサーバーでリアルタイムに分析し、機械の故障予兆を検知します。この際、Service Extension を利用して、センサーデータの種類や重要度に応じて、異なる Wasm モジュールにルーティングします。Go で記述されたアプリケーションが、Wasm モジュールとしてエッジサーバー上で実行され、収集されたセンサーデータを解析し、異常なパターンを検出した場合、即座にアラートを発行します。


画像引用元:https://cloud.google.com/distributed-cloud?hl=ja#enable-modern-retail-experiences

  • セキュリティ強化
    • 例:Web アプリケーションの手前に配置された ALB で、Service Extension を利用して、悪意のあるリクエストを検知し、ブロックします。Wasm モジュールとして実装された Web Application Firewall (WAF) が、リクエストのヘッダーやボディを検査し、既知の攻撃パターンに一致するリクエストを遮断します。
  • 高度なルーティング
    • 例:動画配信サービスにおいて、ユーザーのネットワーク環境やデバイスの性能に応じて、最適な動画品質で配信するために、Service Extension を利用して、リクエストを適切なバックエンド サーバーにルーティングします。Go で記述されたルーティング ロジックが、Wasm モジュールとして ALB 上で実行され、リクエスト ヘッダーに含まれる情報に基づいて、最適な配信サーバーを選択します。
  • 画像・動画処理
    • 例:監視カメラシステムにおいて、エッジで画像解析を行い、特定のオブジェクト (例:人、車両) を検知した場合にのみ、その画像をクラウドに送信します。Go で記述された画像解析アプリケーションが、Wasm モジュールとしてカメラに内蔵されたエッジデバイス上で実行され、リアルタイムで画像解析を行い、特定のオブジェクトを検知した場合に、その画像をクラウドに送信します。

これらのユースケースは、ほんの一例であり、Go、Wasm、Service Extension を組み合わせることで、様々な分野で革新的なエッジ コンピューティング アプリケーションを開発することができます。

5. まとめ:今後の展望と Go の可能性

本記事では、エッジ コンピューティングの重要性が高まる中、Go 1.24 で強化された Wasm サポートと、Service Extension での Go 対応が、エッジ コンピューティングをより手軽に実現する可能性について解説しました。 Go、Wasm、Service Extension という 3 つの要素技術を組み合わせることで、低レイテンシ、帯域幅の節約、信頼性の向上、セキュリティの強化といったエッジ コンピューティングのメリットを最大限に活かすことができます。 動的なコンテンツ配信、IoT データのリアルタイム処理、セキュリティ強化、高度なルーティング、画像・動画処理など、様々な分野で革新的なエッジ コンピューティング アプリケーションを開発できる可能性があります。

今後の展望

今後、5G の普及、IoT デバイスの増加、AI の進化などに加え、次世代通信技術である 6G の研究開発も進められており、エッジ コンピューティングの需要はますます高まっていくと考えられます。 エッジ コンピューティング市場は、今後数年間で急速に拡大すると予測されており、様々な業界でエッジ コンピューティングの導入が進むことが予想されます。

ただし、6G はまだ研究開発段階であり、実用化には時間を要します。技術的な課題や標準化の課題など、6G の実現に向けては、今後も様々な取り組みが必要です。

Go の可能性

Go は、その高いパフォーマンス、軽量な実行ファイル、容易な開発という特徴から、エッジ コンピューティングにおいて不可欠な存在になると考えています。 今回のような Go 1.24 での Wasm サポートの強化、ALB Service Extension での Go 対応など、Go エコシステムは、エッジ コンピューティングのニーズに対応するために進化を続けています。 今後、Go コミュニティによる、エッジ コンピューティングに特化したライブラリやフレームワークの開発が進むことで、Go は、エッジ コンピューティング開発において、より最適な選択肢となっていくのではないでしょうか。 Go が、エッジ コンピューティングの発展に大きく貢献することを期待しています。

参考ブログ
https://cloud.google.com/blog/products/application-development/go-1-24-expands-support-for-wasm?hl=en

合わせて読みたい
https://zenn.dev/ralios/articles/98d2fce8a71b76

※Google Cloud、Go、および Google Cloud 製品・サービス名称は Google LLC の商標または登録商標です。
※会社名および商標名は、それぞれの会社の商標または登録商標です。

Discussion