Akamai EdgeWorkers tips : 開発の際に活用できるリクエスト情報とユースケースとは

# Akamai EdgeWorkersとは何か？

Akamai EdgeWorkersは、AkamaiのCDN上でJavaScriptを実行することができる、世界最大級かつ低レイテンシーのサーバーレスプラットフォームです。
コード実行のランタイムには V8 JavaScript Engineを利用しています。
EdgeWorkers上で処理を実行することで、高速で大規模な処理能力を手に入れることができ、オリジンでの処理を肩代わりすることができます。

今回はEdgeWorkersを活用していく上でのTipsを紹介していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/71b0181a-3f7e-db3d-0758-ad9baa084c08.png)

## EdgeWorkersのサンプルコード

初めてEdgeWorkersを触る際に何から着手してよいかわからない場合や、ユースケースが思い浮かばない場合にはデモサイトへのアクセスをおすすめします。
デモサイトでは、複数のユースケースを用意しており、コードとその出力結果をあわせて確認することができます。

**[https://www.edgecompute.live/](https://www.edgecompute.live/)**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/5a5a24b2-8a34-9be7-b274-a210ed71cc0a.png)

## EdgeWokersで利用できるリクエスト情報

EdgeWorkersでは、サービス利用者のアクセスで生成されるHTTP/Sリクエストのから様々な情報を引き出すことができます。
これらの情報は、EdgeWorkersでのアプリケーション開発に利用できます。

|機能|説明|
|---|---|
|**[Request Object](https://techdocs.akamai.com/edgeworkers/docs/request-object)** |HTTPリクエストの内容確認と修正|
|**[User Location Object](https://techdocs.akamai.com/edgeworkers/docs/user-location-object)**|リクエスト元のロケーション情報を確認|
|**[Device Object](https://techdocs.akamai.com/edgeworkers/docs/device-object)**|リクエストのデバイス情報を確認|
|**[CacheKey Object](https://techdocs.akamai.com/edgeworkers/docs/cachekey-object)**|リクエストのキャッシュキー情報を修正|
|**[Response Object](https://techdocs.akamai.com/edgeworkers/docs/response-object)**|応答する際のステータス確認とヘッダーの修正|


### Objectの情報を表示させるEdgeWorkersのコード例

Object情報の取得は簡単なコードで実現することができ、追加のモジュールなどは必要としません。

以下は、取得した情報を表示するコード例です。

https://gist.github.com/isss802/8288e10c8017afcd122378e5bc0eadc7


### レスポンス例

```json
{
  "geoInfo": {
    "areaCodes": [],
    "cbandwidthity": "5000",
    "city": "TOKYO",
    "continent": "AS",
    "country": "JP",
    "dma": "N/A",
    "fips": [],
    "latitude": "35.69",
    "longitude": "139.75",
    "networkType": "mobile",
    "region": "13",
    "timezone": "GMT+9",
    "zipCode": "N/A"
  },
  "deviceInfo": {
    "acceptsThirdPartyCookie": "N/A",
    "brandname": "N/A",
    "hasAjaxSupport": true,
    "hasCookieSupport": true,
    "hasFlashSupport": "N/A",
    "isMobile": true,
    "isTablet": "N/A",
    "isWireless": true,
    "marketingName": "N/A",
    "mobileBrowser": "Safari",
    "mobileBrowserVersion": "16.4",
    "modelName": "iPhone",
    "os": "iPhone OS",
    "osVersion": "16.4",
    "physicalScreenHeight": 89,
    "physicalScreenWidth": 50,
    "resolutionHeight": 1920,
    "resolutionWidth": 1080,
    "xhtmlSupportLevel": 4
  },
  "requestInfo": {
    "method": "GET",
    "scheme": "https",
    "host": "hoge.link",
    "path": "/objects",
    "query": "N/A",
    "url": "/objects"
  }
}
```


## ユースケースの検討

### User Location Objectのユースケース

User Location Objectでは、Akamaiが提供するGeoデータベースのサービスを利用することができます。
この地域データをEdgeWorkersで利用することで、様々なオリジンサーバー上の処理をエッジサーバーにオフロードすることができます。

##### 地域に応じたコンテンツのカスタマイズ
User Location Objectを利用すると、ユーザーの位置情報に基づいて、ウェブサイトのコンテンツ表示をカスタマイズできます。例えば、地域ごとに、異なるキャンペーンやイベント情報を出し分けられます。これにより、訪問者に対してより地域に密着した情報を提供し、コンバージョン率の向上につなげることができます。

##### 言語や通貨の自動選択
User Location Objectを活用して、ユーザーの地域に基づいて自動的に言語や通貨の単位を選択することができます。これにより、訪問者がブラウザ上で言語や通貨を選択する手間を省くことができ、ユーザーエクスペリエンスを向上させることができます。

##### 地域制限コンテンツの制御
地域によっては、特定のコンテンツの配信が制限されている場合があります。UserLocationを利用して、これらの制限を遵守することができます。例えば、特定の国や地域でのみ視聴可能な動画コンテンツを提供する場合、User Location Objectによってアクセス可能な地域を制御することができます。

### Device Objectのユースケース

Device ObjectはAkamaiのが提供するデバイスデータベースのサービスを利用することができます。
デバイスの詳細な情報を把握することで、最適なコンテンツの配信などに役立てることができます。

##### レスポンシブWebデザインの実装
Device Objectを使用することで、クライアントデバイスのタイプや画面サイズに応じて、適切なコンテンツやデザインを提供することができます。これにより、ユーザーはデバイスに最適化された体験を得ることができます。

##### パーソナライズされたコンテンツの提供
デバイスの情報を使用して、ユーザーにパーソナライズされたコンテンツを提供することができます。例えば、モバイルデバイスのユーザーには、モバイルアプリのダウンロードリンクを表示し、デスクトップデバイスのユーザーには、ウェブサイトへのリンクを表示することができます。

##### デバイスごとのパフォーマンス最適化
Device Objectを利用して、デバイスの性能に合わせてリソースを最適化することができます。例えば、低性能なデバイスには軽量な画像や動画を提供し、高性能なデバイスには高解像度の画像や動画を提供することができます。

##### ターゲット広告の配信
デバイス情報を活用して、ユーザーのデバイスタイプに応じたターゲット広告を配信することができます。これにより、広告主はより効果的な広告キャンペーンを展開することができます。

### CacheKey Objectのユースケース

CacheKey Objectを使用することで、キャッシュキーの構成を変更し、特定のパラメータ（例：クエリストリング、クッキー、ヘッダー情報）をキャッシュキーに含めることができます。これにより、キャッシュの粒度をコントロールし、ウェブアプリケーションやAPIのキャッシュ管理をより効率的で柔軟に行うことができます。

##### キャンペーントラッキング
マーケティングキャンペーンで使用されるパラメータなどのクエリストリングをキャッシュキーに含めることで、キャンペーンごとのページビューやコンバージョンを正確に追跡できます。

##### ユーザーのプリファレンスに基づく広告表示
ユーザーが閲覧履歴や興味に基づいてパーソナライズされた広告を表示する場合、Cookie情報をキャッシュキーに追加できます。これにより、ユーザーごとに最適な広告が効率的に表示されます。

##### A/Bテストの最適化
A/BテストをEdgeWorkers上で実装することで、異なるバージョンのコンテンツをEdge Server上にキャッシュすることができます。これにより、バージョンごとに最適なキャッシュ設定が可能となり、サイトのパフォーマンスが向上します。


# まとめ

Akamai EdgeWorkersを利用することで、JavaScriptを使用して、HTTP/Sのリクエストやレスポンスを世界中に分散配置されたエッジで編集・制御できるため、開発者は低レイテンシーなサーバーレス処理を実現できます。
是非、様々なシステムにEdgeWorkersを導入して、ウェブパフォーマンスやパーソナライゼーションの向上を図ってみてください。