JAXA Earth API for JavaScript
    検索インデックスを準備しています...

    実用的なAgent Skillsの作成

    JAXA Earth API for JavaScript を使うと生成AIと連携するためのAgent Skillsの開発も可能です。 このチュートリアルではGemini CLIを使用したAgent Skillsによる生成AI連携を紹介します。

    この解説内容は次の環境で動作確認済です(2026.3時点)。

    • Windows 11
    • Node.js (v24.14.0)
    • Gemini CLI (0.32.1)

    下記リンクからAgent Skillsのファイル一式をダウンロードしてZIPファイルを展開して、後述のフォルダに保存します。

    Agent Skillsファイル一式

    ソースコードには次のようなファイルが含まれます。

    - jaxa-earth-api/
    - SKILL.md //Agent Skillsの設定ファイル
    - package.json //このパッケージに関する情報を記載したNode.js用のファイル

    - scripts/ //生成AIが実行するコマンドラインツール
    - getImage.js //PNG画像を保存する機能
    - getPixelGridCsv.js //CSVファイル(ピクセル並び順)で保存する機能
    - getLngLatValuesCsv.js //CSVファイル(緯度経度値の組)で保存する機能
    - getValue.js //1点の値を返す機能
    - getMonthlyTimeSeriesValues.js //月単位の時系列データを返す機能
    - getDailyTimeSeriesValues.js //日単位の時系列データを返す機能
    - getLinks.js //関連リンクを返す機能
    - jaxa.earth.esm.js //JAXA Earth APIのモジュールファイル
    - jaxa.earth.esm.d.ts //JAXA Earth APIのモジュールの型定義ファイル

    - references/ //生成AIが参照するためのAPIドキュメントやカタログファイル
    - docs.md //マークダウン形式のAPIドキュメント
    - catalog.v2.md //マークダウン形式のデータセットのカタログファイル

    - assets/ //参考となるサンプルコードや解析に用いる関連データ
    - example/ //各種サンプルコード
    - geojson/ //都道府県単位でマスク処理するためのGeoJSONファイル

    このように、値、画像、関連情報を返す機能や資料のファイルなどをセットにしました。

    SKILL.mdには生成AIに対して何をどのように実行してほしいかを明記しています。下記の通り、APIドキュメントに書かれていない暗黙知に関しても、明確に手順と考え方を記載しています。

    ---
    name: jaxa-earth-api
    description: JAXA Earth API for JavaScriptを利用して、地形(標高、DSM)、地表面温度(LST)、海面水温(SST)、植生指数(NDVI)、降水量、クロロフィルa濃度(CHLA)、土壌水分量(SMC)などの地球観測データを画像や数値で取得することが可能です。地球観測データを使ったウェブアプリケーション(HTML、JavaScript)も開発できます。
    ---
    
    # Agent Skills by JAXA Earth API for JavaScript
    
    ## Overview
    
    このスキルを使用すると、地球観測データを画像や数値で取得することが可能です。
    利用できるデータは地形(標高、DSM)、地表面温度(LST)、海面水温(SST)、植生指数(NDVI)、降水量、クロロフィルa濃度(CHLA)、土壌水分量(SMC)などです。
    
    必要に応じて次の処理を実行してください。
    - データセットカタログを読んで、必要なデータセットを選択すること。
    - scriptsにあるコマンドラインツールの引数にデータセット名や緯度経度などを指定することで簡易的に実行し、STDIO出力の文字列として統計値などを取得したり、PNG画像として保存すること。
    - 既存のコマンドラインツールでは機能が足りない場合は、APIドキュメントを理解し、scriptsにあるコマンドラインツールやassetsにあるexampleを参考に新たなコマンドラインツールを作成し、実行すること。
    - ブラウザ上でデータをより高度に表現、利用したい場合は、HTMLでウェブアプリケーションを作成すること。
    - 得られたデータを提示する際は、どのデータセットを用いて、どのように取得、処理した結果なのかを明示すること。また、`getLinks.js`で得られる詳細情報へのリンクも提示すること。
    - 得られたデータを解説するための知見については公開情報を検索し、地球科学や気象、宇宙工学の専門知識を生かして解説すること。
    
    ~~~~~~~~~~(途中省略)~~~~~~~~~~
    
    ## How to select a dataset
    
    データセットカタログを読んで回答に必要なデータセットを探します。次の優先度で選択することを推奨します。
    
    1. データセットカタログに書かれているMain Recommended Dataにあるものから優先的に選びます。
    2. 季節変化を把握したい場合は月次データ(temporalResolution: monthly)を選ぶことで、欠損が少なめで空間分布を把握しやすいデータを利用できます。なるべく細かな時間単位で調べたい場合は日別データ(temporalResolution: daily)のものを選びます。ただし、観測範囲外や雲の下などの一部のピクセルが欠損している場合があります。
    3. 同じ物理量のデータセットでも空間解像度(spatialResolution)が異なるものがある場合があります。なるべく良いもの(km単位の数値が小さいもの)を選んでください。
    4. 観測値(normal: false)か平年値(normal: true)かにも注意してください。平年値は、平年との差を計算する場合に基準として利用するものです。
    
    複数の候補が見つかった場合はそれぞれの長所と短所を示したうえで、ユーザーに選択を求めてください。
    また、最終的な結果を出力する際は、どのデータセットを使用したのかを理由とともに明確に表示してください。
    
    ## How to use CLI tools
    
    簡易的な実行のために次のコマンドラインツールを利用できます。
    保存されたファイルはユーザーが分かりやすいように現在の作業ディレクトリに移動させるか、作業ディレクトリからコマンドラインツールを相対パスで指定して実行してください。
    
    エラーが発生した場合は、collectionUrlとbandの組み合わせがデータセットカタログの情報と完全に一致しているか、指定した日付がデータセットの提供期間内であるかを再確認してください。
    
    また、このスキルを実行する端末のネットワーク条件によってはSSLエラーが発生する場合もあります。
    その場合は、コマンドラインツールの行頭に、`process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = "0";`を記載してSSLエラーを回避してください。
    
    ### `getImage.js`
    
    指定した緯度経度範囲のデータをPNG画像として取得できるコマンドラインツールです。
    
    ~~~~~~~~~~(途中省略)~~~~~~~~~~
    
    ## How to calculate statistics
    
    取得されたdataObjectに対して統計値を計算するためには、`je.data.stat`または`je.data.globalStat`を利用します。
    `je.data.stat`では実際の地球表面上におけるピクセルごとの面積の違いは考慮していません。
    緯度経度範囲が十分に狭く、ピクセルごとの面積の違いを無視できる場合はこの簡易的な計算でも問題ありませんが、ピクセルごとの面積の違いがある広い緯度経度範囲のデータで厳密な評価を行なうためには、`je.data.globalStat`を利用してください。
    
    また、都道府県単位での統計値を取得したい場合は、`assets/example/65_mask/`のソースコードを参考にGeoJSONでマスク処理することで計算可能です。
    各都道府県のGeoJSONは`assets/geojson/`に保存されています。
    
    ## How to search a location with specific value
    
    緯度経度を指定して値を取得するのではなく、最大の場所、最小の場所、のように特定の条件を持つ場所を逆引きで探す場合は、`getLngLatValuesCsv.js`を利用してください。
    1. `getLngLatValuesCsv.js`を利用して、まずは広域にデータを取得し、その中から候補となる場所を絞り込む。
    2. さらにその候補地周辺の狭い範囲に対して`getLngLatValuesCsv.js`を実行し、高い精度で場所を特定する。
    3. 場所が特定された場合は、その場所の意味や、そのような値を持つ理由も専門的な知見を活かして解説してください。
    
    ## How to search a date with specific value
    
    日時を指定して値を取得するのではなく、最大の時期、最小の時期、のように特定の条件を持つ日時を逆引きで探す場合は、`getMonthlyTimeSeriesValues.js`や`getDailyTimeSeriesValues.js`を利用してください。
    1. `getMonthlyTimeSeriesValues.js`を利用して、まずは年単位のデータを取得し、その中から候補となる時期を絞り込む。利用するデータセットはMonthlyのものを使うことを推奨します。
    2. その候補となる期間に対して、`getDailyTimeSeriesValues.js`を利用して、該当する条件の日付を絞り込む。利用するデータセットはDailyやHalf-monthlyのものを使うことを推奨します。
    3. 日付が特定された場合は、その日時の季節を踏まえた理由も専門的な知見を活かして解説してください。
    
    ## How to create web applications
    
    `assets/example/`内のサンプルコードを参考にしつつ、APIドキュメントを理解し、現在の作業ディレクトリにHTMLを作成してください。
    
    なお、サンプルコードとは異なりますが、`jaxa.earth.esm.js`については、`import * as je from "https://data.earth.jaxa.jp/api/javascript/v2.0.0/jaxa.earth.esm.js";`のように書けばオンラインから直接取得できるため、コピーを作成する必要がなくなります。
    
    ## How to select colors
    
    新しいコマンドラインツールやウェブアプリケーションを作成する際の、画像出力時の`je.image.ColorMapObject`の設定については下記を推奨します。
    
    ### colors
    
    `je.image.ColorMapObject#colors`については次の通りです。
    
    - **je.Colors.GRAY**: 黒→白に塗ります。ユーザーから白黒の画像を求められた場合にのみ使用してください。
    - **je.Colors.JET**: 青→水色→緑→黄色→赤 (虹色)に塗ります。下記に該当しない場合は優先的に使用してください。
    - **je.Colors.NDVI**: 茶→緑に塗ります。植生指数を可視化する場合に適しています。数値が小さいほど植物が少ない(枯れた)様子、数値が大きいほど植物の緑が多い様子を表現できます。
    - **je.Colors.SMC**: 赤→白→青に塗ります。土壌水分量を可視化する場合に適しています。数値が小さいほど赤く乾燥した様子、数値が大きいほど湿っている様子を表現できます。
    - **je.Colors.IC**: 紺→白に塗ります。海氷密接度を可視化する場合に適しています。数値が小さいほど氷が少ない様子、数値が大きいほど氷が多い様子を表現できます。
    
    上記以外にも任意の色コード文字列の配列でも指定できます。効果的なデータの可視化に必要な色の組み合わせを提案することを推奨します。
    例えば、値の範囲がゼロを中心とする-10~+10のような場合、マイナスを青、中央の0を白、プラスを赤としたい場合は、`colors: ["0000ff", "ffffff", "ff0000"]`のように指定します。
    
    ### min, max
    
    値の範囲`je.image.ColorMapObject#min`、`je.image.ColorMapObject#max`については、画像を1枚だけ出力する際には`je.data.stat(dataObject)`によって得られる`min`、`max`に動的に合わせることも可能ですが、時系列でアニメーションにする時には画像ごとに値の範囲が変わってしまうのは適切ではありません。
    
    そのような場合には、主なデータセットに関しては下記の値に指定することを推奨します。
    
    - **地形(標高、DSM)**: 全球規模の場合は0~6000m、日本域の場合は0~4000m。
    - **地表面温度(LST)**: 全球規模の場合は-50~50℃、日本域の場合は-20~50℃。データセットがケルビン単位の場合はそれぞれ273.15を加算してください。
    - **海面水温(SST)**: 0~40℃。データセットがケルビン単位の場合はそれぞれ273.15を加算してください。
    - **植生指数(NDVI)**: 0~1
    - **降水量**: 0~10mm/hr。`je.image.ColorMapObject#log: true`を指定して対数スケールにしてください。
    - **クロロフィルa濃度(CHLA)**: 0~100mg/m^3。`je.image.ColorMapObject#log: true`を指定して対数スケールにしてください。
    - **土壌水分量(SMC)**: 0~30%。
    - **海氷密接度(IC)**: 0~100%。
    
    同じ物理量でも単位が異なると値が大きく異なる場合があります。
    特に温度関連のデータセットについては摂氏単位のものとケルビン単位のものがありますので、単位によって値の範囲指定を間違えないようにしてください。
    データセットを決定後に`getValue.js`を実行することで、そのデータセットの単位を確かめられます。
    
    また、地表面温度と海面水温を同時に表示させるような場合には、両方の値の範囲を合わせるのも効果的です。
    
    ## How to select bbox, width, height
    
    `je.getDataObject`に指定する`bbox`, `width`, `height`については縦横比が崩れないように気を付けてください。
    関心領域に合わせて`bbox`を決め、画面のサイズから`width=1000`程度に固定し、縦横比が崩れないような`height`を求めて利用することを推奨します。
    
    ~~~~~~~~~~(以降省略)~~~~~~~~~~
    

    Gemini CLIの公式情報に従ってGemini CLIのインストールとGoogleアカウントの認証をします。 最新のNode.jsを利用して、次のコマンドでインストールできます。

    npm install -g @google/gemini-cli
    

    次のコマンドで起動します。

    gemini
    

    求めに応じてGoogleアカウントの認証を行ってください。

    Gemini CLIを実行するフォルダに.gemini/skills/フォルダを作成し、前述のjaxa-earth-api/内のファイル一式を保存します。

    - (作業中のファイルやGemini CLIが実行した出力結果などのファイル)
    - .gemini/
    - skills/
    - jaxa-earth-api/ //このフォルダごと保存
    - SKILL.md
    - package.json
    - scripts/
    - references/
    - assets/

    Gemini CLIが起動している場合は[Ctrl] + Cを2回押して終了し、再度起動します。

    起動したGemini CLIに対して、「jaxa-earth-apiのスキルでは何ができますか」と質問してみてください。 Agent Skillsの実行を承認した後に、次のように機能を回答できればインストール完了です。



    Agent Skillsの機能を駆使することで、生成AIが必要なデータセットを選択し、値や画像を取得したり、詳細ページへの案内をすることが可能になります。 データを表示させるウェブページを生成することもできます。

    また、Gemini CLIでは組み込まれているサンプルコードとAPIドキュメントなどを元に、必要に応じてデータ処理用のソースコードを自動で作って実行して、結果を出力することも可能です。 作成されたソースコード、機能については「スキルの機能として反映してください」と指示することで、このAgent Skillsを更新することもできます。

    なお、本ページは生成AIが地球観測データを自律的に扱うデモの紹介を目的としたものです。 下記の生成AIの出力内容については、出力された原文のままであり、科学的な正確性は未確認であることにご留意ください。 また、利用する生成AIの種類やバージョン、過去の会話の内容等によっては、同じ質問に対してもツールの使い方や入力するパラメータに差異が生じて、異なる結果が得られることがあります。

    scripts/内には2種類のデータセットを合成した画像を保存する機能は予め用意されていないため、合成したPNG画像を保存するためのソースコードを自動で作って実行します。




    SKILL.mdに記載した通り、地表面温度と海面水温の色をそろえてくれました。また、同じ条件の画像をブラウザ上で表示させるためにHTMLを生成します。



    PNG画像とは異なり、ブラウザの地図上で自由にスクロールできるページができあがりました。

    時系列データを取得する機能を繰り返し使用することで、地表面温度が最も低かった日などを特定します。 都道府県のGeoJSONでマスク処理するソースコードについては、Agent Skillsに組み込まれているサンプルコードを参考にして自動で作成、実行されます。




    画像の解像度が低い場合は、解像度が高いものを選び直して再実行させることも可能です。