- 投稿日:2020-11-23T22:03:12+09:00
【Node.js ~環境構築~】勉強メモ
開発環境用意
- Node.jsが既にインストールされているか確認
ターミナルで下記のコマンドを実行
~ % node -v
v12.13.1
のようにバージョンが表示された場合は、既にNode.jsがインストール済み
command not found: node
と表示された場合は、まだインストールされていない。
- Node.jsのインストール
Node.jsのインストーラーは公式サイトからダウンロード。
Node.js公式サイト
今回は、推奨版をダウンロード。
後は、OSに合わせて、Windows及びmacを選択。
ちなみに、Node.jsに加えて、npmもインストールされる。
(ダウンロードの下に同梱npmと記載あり)
npm (Node Package Manager)とは、パッケージを用意する為のシステム、
Railsでいうとgemみたいなものでしょうか。
- 最後に、Node.js及びnpmが正常にインストールができているか確認
~ % node -v ~ % npm -vここまでで、Node.jsのインストールは完了、
次からは、Node.jsを実際使用して、アプリケーションを作成する為の準備の流れ
アプリケーション作成準備
- 新規アプリケーション用のフォルダを作成
どこでも良いのでファルダを作成する。
今回は、こんな感じで作ったとする。
/Users/ユーザ名/projects/practiceそして、ターミナルのcdコマンドを使用して、practiceフォルダ迄移動する。
sample@sampleMBP ~ % cd sample@sampleMBP ~ % cd projects sample@sampleMBP projects % cd practice sample@sampleMBP practice %
- パッケージをインストール
必要なパッケージをインストールします。
まず以下のコマンドを移動したフォルダ、今回ならpracticeフォルダで実行
practice % npm init --yesこれは、npmの設定ファイルであるpackage.jsonを生成するコマンド。
package.jsonには、npmパッケージの設定情報などが書き込まれていく。
次に、npmパッケージのインストールをする。
今回は、expressと ejs というパッケージをインストールする。以下のコマンドを実行
practice % npm install express ejs※
npm install express
npm install ejs
と1つずつinstallコマンドを実行していくことも可能
サーバーを起動してページ表示
これでひとまず必要なパッケージは揃い、
また必要なファイルは既に作成されています(◯◯◯.jsonというファイルが2つ程作成されています)後は、viewファイルと、JavaScriptを記載するファイルの作成
viewファイルは、名前はなんでも良いが、拡張子は.ejs
例:sample.ejsJavaScriptを記載するファイルの拡張子は
.js
例:app.jsこれでファイルの準備は完了。
最後に、サーバーを起動する下記のコマンドをターミナル上で打つ。practice % node app.js
これでファイルの中見をちゃんと記載していれば
正常にブラウザ上でアプリケーションが起動する。
- 投稿日:2020-11-23T21:57:38+09:00
商業雑誌連動企画!Jetson & Pi 電力測定ボードを発売してオリジナルノードを公開した話
はじめに
とあるご縁で、商業雑誌 (シェルスクリプトマガジン) の連動企画で BitTradeOne から Jetson Nano と Raspberry Pi (以降、ラズパイ) で共通で使用可能な電力測定ボードを発売する企画の製作に協力することになり、Node-RED から電力測定ボードを操作するノードを作成しました。
製作過程の話とノード作成のノウハウをまとめておこうと思います。
https://bit-trade-one.co.jp/adjtsb01/製作過程
4 月
お話をいただいて大まかに企画を練りました。
- Jetson Nano と ラズパイ の両方で使用可能とする
- Jetson Nano でアプリケーションを実行した時のシステム全体の消費電流・電力を測れるものがあると面白いのではないか
- 拡張ボードに電力を受けるMicro USB ポート、DC ジャックを設けて、GPIO ヘッダーへ 5V を入力する構成で、途中にシャント抵抗を入れて電流を計測する
- Raspberry Pi 4 で USB Type-C 給電に変更されたため、Micro USB 給電を使える救済手段にもなる
拡張ヘッダーの互換性
Jetson Nano と ラズパイ とで拡張ヘッダーのピン配列に互換性があり、その特徴を生かして共通で使用可能なようにしました。
5〜6 月
ブレッドボードとパーツを使用してプロトタイピングや動作確認を行い、基板の回路図を起こすまでをゴールとしました。シャント抵抗の接続方法は 2 種類 (ハイサイド接続とローサイド接続) ありますが、今回はローサイド接続としました。
7〜8 月
試作基板の製作に取り組みました。Raspberry Pi Zero W と同じサイズになるようにデザインしました。
9〜10 月
試作基板の動作確認が問題なかったため、量産基板の製作に向けて基板にプリントするロゴを作成したり、10月に発表された Jetson Nano の新製品 (2GB) の動作確認を緊急で行いました。
11 月
9月頃から原稿の執筆を開始し、査読・校正・校正確認・修正を経て無事に脱稿、印刷所への入稿 (11/14) となりました。物理書籍を 11/21 に受領しました。
Node-RED のオリジナルノードを作成
雑誌は Adafruit 社製のライブラリを使用して Python コードで執筆しました。
他のプログラミング言語でも拡張ボードを簡単に使用できるようにしたかったため、執筆の傍ら、Node-RED のオリジナルノードを作成することにしました。
ノードは
https://flows.nodered.org/node/node-red-contrib-ina-sensor
で公開しています。
電力測定ボードには テキサス・インスツルメント社製デジタル出力電流・電力・電圧モニター IC (INA260) と 単色有機 EL ディスプレイ (SSD1306) が搭載されています。
このノードは INA260 を操作するためのノードです。
単色有機 EL ディスプレイ (SSD1306) については
https://flows.nodered.org/node/node-red-contrib-oled
が公開されています。実装
INA260 と SSD1306 は I2C 接続方式でアクセスする仕様のため、Jetson Nano と ラズパイ でノードを共通化でき、内部で i2c-bus npm モジュールを使用しています。
また、内部で ina226 npm モジュールを使用しています。INA226 と INA260 の差分は電流を測定するためのシャント抵抗を外部に実装するか、内部に含まれるかの違いです。INA260 は 2 ミリオーム (2 mΩ) のシャント抵抗を内臓しているため、ノードのデフォルト設定 (I2C アドレス: 0x40、シャント抵抗: 0.002) で動作するようにしています。
SSD1306 については I2C アドレスを 0x60 から 0x3c へ変更する必要があります。
ノードの公開
ノードの作成が完了し、GitHub レポジトリの作成、npm パッケージの登録までは順調でしたが、いざ Node-RED Library へ登録しようとした際になかなか公開されずに試行錯誤した結果、登録方法が自動から手動に変わっていたことが判明しました。
この件については、Node-REDノード公開方法が変わっていた件 (自動→手動登録) で記事を書いています。Node-RED のインストール
Jetson Nano とラズパイとで Node-RED のインストール方法が多少異なります。
ラズパイの場合はシンプルに apt コマンドで Node-RED をインストールできます。
$ sudo apt install -y noderedJetson Nano の場合は apt コマンドで curl をインストールした後、Node-REDのインストーラーコマンドを実行します。
Ubuntu のソフトウェアセンターからも Node-RED をインストールできますが、オリジナルノードのビルドに必要なツール類がインストールされないため、手動コマンドでインストールします。$ sudo apt install -y curl $ bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)インストーラーコマンドを実行した後、2つの質問に答える必要がありますので、いずれも「y」を選択します。
実行例$ bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered) This script will remove versions of Node.js prior to version 12.x, and Node-RED and if necessary replace them with Node.js 12.x LTS (erbium) and the latest Node-RED from Npm. It also moves any Node-RED nodes that are globally installed into your user ~/.node-red/node_modules directory, and adds them to your package.json, so that you can manage them with the palette manager. It also tries to run 'npm rebuild' to refresh any extra nodes you have installed that may have a native binary component. While this normally works ok, you need to check that it succeeds for your combination of installed nodes. To do all this it runs commands as root - please satisfy yourself that this will not damage your Pi, or otherwise compromise your configuration. If in doubt please backup your SD card first. Are you really sure you want to do this ? [y/N] ? y Would you like to install the Pi-specific nodes ? [y/N] ? yインストーラーコマンド実行中は進捗が表示され、全て完了すると「All done.」と表示され、コマンドプロンプトに戻ります。
実行中Running Node-RED install for user jetson at /home/jetson on ubuntu This can take 20-30 minutes on the slower Pi versions - please wait. Stop Node-RED ✔ Remove old version of Node-RED ✔ Remove old version of Node.js ✔ Install Node.js LTS ✔ Node v12.20.0 Npm 6.14.8 Clean npm cache ✔ Install Node-RED core ✔ 1.2.6 Move global nodes to local ┌──────────────────────────────────────────────────────────┐ │ npm update check failed │ │ Try running with sudo or get access │ │ to the local update config store via │ │ sudo chown -R $USER:$(id -gn $USER) /home/jetson/.config │ └──────────────────────────────────────────────────────────┘ Move global nodes to local -/nodered-install.log Install extra Pi nodes ✔ Npm rebuild existing nodes ✔ Add shortcut commands ✔ Update systemd script ✔ All done. You can now start Node-RED with the command node-red-start or using the icon under Menu / Programming / Node-RED Then point your browser to localhost:1880 or http://{your_pi_ip-address}:1880 Started 2020年 12月 9日 水曜日 23:39:35 JST - Finished 2020年 12月 9日 水曜日 23:50:09 JSTNode-RED の起動と停止
Node-RED の起動はコマンドラインから node-red と打つだけです。停止する場合は Ctrl + C を入力します。
$ node-red
サービスとして起動・停止する場合は以下のとおりです。
# 起動する場合 $ node-red-start # 停止する場合 $ node-red-stopノードの追加
ノードの追加方法はメニューを表示して「パレットの管理」→「ノードを追加」→「ノードを追加」→「node-red-contrib-ina-sensorを入力」→「追加ボタンを押下」で追加することができます。
node-red-contrib-oled についても同様の手順で追加することができます。
まとめ
これまで簡単な関数や機能をオリジナルノードで作成することはありましたが、ハードウェアを操作するノードの作成は今回初めて行いました。
今回の経験が同じ状況になった方に少しでもお役に立てれば幸いです。
では、良き Node-RED ライフを!
- 投稿日:2020-11-23T15:33:31+09:00
Elasticsearchの検索結果をベクトルタイルとして配信するNodejsのサーバーを作りました
概要
個人的な興味で、ベクトルタイル活用の可能性を試してみたいと思い、Elasticsearchでの検索結果をMapboxのバイナリベクトルタイル形式にして配信するというよくわからないタイルサーバーをNodejsで作って、オープンソースプロジェクトとして公開してみました。作ったリポジトリは以下の通り。
- elastic2mvt: z/x/yと検索クエリを受け取ってバイナリベクトルタイルを1枚だけ生成するモジュール
- es_tileserv: NodejsのExpressで構築したElasticsearch用のベクトルタイル配信サーバー
こういう使い方がそもそも可能なのかも含めて、かなり試験的で、手探りでAPI仕様など考えていますので、今後ここで書いた以上に内容がガラッと変わる可能性がありますが、もし何かアイデアなどいただけたらと思い、ツールの紹介をします。
長くなりそうなので、ソースコードの説明はここではしませんので、ご興味のある方は各自ご覧ください。不明点があればリポジトリにIssueください。
使い方
DockerでElasticsearchも含めて、全て起動できるように設定しています。タイルサーバーのDockerイメージもDocker hubに上げていますので、最新のソースコードで実行する場合は以下のようにすれば、Elasticsearchと配信サーバーがpm2で立ち上がります。
git clone git@github.com:JinIgarashi/es_tileserv.git cd es_tileserv npm run docker:startもしソースコードを修正したら、
npm run docker:build
すれば最新のイメージをビルドします。テストデータとしてケニアのナロックタウンの建物ポリゴンデータだけ用意しました。以下のコマンドでElasticsearchにインデックスを作ります。ogr2ogrを使いますので、GDALが入っていない場合はインストールをお願いします。
cd sample-data ./insert_test_data.sh次のようにして、
osm_building_narok
というインデックスができていればOKです。ogrinfo ES:http://localhost:9200 INFO: Open of `ES:http://localhost:9200' using driver `Elasticsearch' successful. 1: osm_building_narok (Multi Polygon)APIの仕様について
サーバーを立ち上げたあと、http://localhost:8080/docsをブラウザで開くとSwaggerでAPIを試せます。
/api/tile/{z}/{x}/{y}.{ext}
というAPIを使います。Try it out
ボタンを押して、デフォルトのExampleのままExecuteを押して、200が返れば成功しています。これだけだとよくわからないので、ブラウザで以下のURLを叩いてみます。
http://localhost:8080/api/tile/14/9824/8241.pbf?indices=%5B%7B%22name%22%3A%22osm_building_narok%22%2C%22geometry%22%3A%22geometry%22%2C%22query%22%3A%7B%22term%22%3A%7B%22building%22%3A%22school%22%7D%7D%7D%5D
8241.pbf
がダウンロードされましたので、QGIS3.14以上のバージョンでドラッグ&ドロップしてみてみます。なんかポリゴンが表示されました!QGISのダウンロードはこちらから。でももっと動的に画面動かしながらベクトルタイルを見たいということで、QGISのベクトルタイル機能でみてみます。
URLには次のものを指定してみます。学校だけではつまらないのでとりあえず、検索条件なしで設定します。
http://localhost:8080/api/tile/{z}/{x}/{y}.pbf?indices=[{"name":"osm_building_narok","geometry":"geometry"}]ブラウザパネルの
Vector Tiles
に表示されました。追加したベクトルタイルを表示する前に、ケニアのナロックタウンの場所をQGISで表示しておきましょう。ここではMaptiler PluginのBasicを追加してみます。アクセスキーは事前に取得お願いします。
思いっきりズームしましょう。人口5万人程度の小さなマサイ族の街です。なんでこのナロックタウンをサンプルデータとして選んだかというと、自分が以前住んで仕事してたから。
さてここで、作成したベクトルタイルを地図に追加します。ブラウザパネルの
Vector Tile
のelastic MVT test
をダブルクリックすれば良いです。QGISにElasticsearchからのベクトルタイルがちゃんと表示されました!
ターミナルを見るとログがちゃんと出ていて動いているらしいことがわかります。
es_tileserv_1 | 06:18:20 2|es_tileserv | GET /api/tile/13/4914/4121.pbf?indices=[%7B%22name%22:%22osm_building_narok%22,%22geometry%22:%22geometry%22%7D] 200 51.559 ms - 0 es_tileserv_1 | 06:18:20 1|es_tileserv | GET /api/tile/13/4914/4122.pbf?indices=[%7B%22name%22:%22osm_building_narok%22,%22geometry%22:%22geometry%22%7D] 200 53.046 ms - 0今後の展望
- フロントエンドでMapboxGL JSを使って動的に検索ワードを変えつつ、ベクトルタイルを地図に表示したい。
- もしできたら、
es_tileserv
で検索して表示するMapbox GL JSのプラグインを作りたい。- Elasticsearchのいろんな検索に対応できるようにAPIの仕様を洗練させたい(自分はElasticsearchは素人同然なので検索ワードのAPIへの指定方法とかかなり手探りで作りました。)。
一昨日くらいから突貫で作ったので、いろいろと突っ込みどころがあるかと思いますが、もし何かAPI仕様について良い案や、こんな使い方もできるんではというアイデアなどありましたら、GithubのリポジトリにIssueください。
よろしくお願いします。
- 投稿日:2020-11-23T15:33:31+09:00
Elasticsearchの検索結果をベクトルタイルとしてNodejsで配信する
概要
個人的な興味で、ベクトルタイル活用の可能性を試してみたいと思い、Elasticsearchでの検索結果をMapboxのバイナリベクトルタイル形式にして配信するというよくわからないタイルサーバーをNodejsで作って、オープンソースプロジェクトとして公開してみました。作ったリポジトリは以下の通り。
- elastic2mvt: z/x/yと検索クエリを受け取ってバイナリベクトルタイルを1枚だけ生成するモジュール
- es_tileserv: NodejsのExpressで構築したElasticsearch用のベクトルタイル配信サーバー
こういう使い方がそもそも可能なのかも含めて、かなり試験的で、手探りでAPI仕様など考えていますので、今後ここで書いた以上に内容がガラッと変わる可能性がありますが、もし何かアイデアなどいただけたらと思い、ツールの紹介をします。
長くなりそうなので、ソースコードの説明はここではしませんので、ご興味のある方は各自ご覧ください。不明点があればリポジトリにIssueください。
使い方
DockerでElasticsearchも含めて、全て起動できるように設定しています。タイルサーバーのDockerイメージもDocker hubに上げていますので、最新のソースコードで実行する場合は以下のようにすれば、Elasticsearchと配信サーバーがpm2で立ち上がります。
git clone git@github.com:JinIgarashi/es_tileserv.git cd es_tileserv npm run docker:startもしソースコードを修正したら、
npm run docker:build
すれば最新のイメージをビルドします。テストデータとしてケニアのナロックタウンの建物ポリゴンデータだけ用意しました。以下のコマンドでElasticsearchにインデックスを作ります。ogr2ogrを使いますので、GDALが入っていない場合はインストールをお願いします。
cd sample-data ./insert_test_data.sh次のようにして、
osm_building_narok
というインデックスができていればOKです。ogrinfo ES:http://localhost:9200 INFO: Open of `ES:http://localhost:9200' using driver `Elasticsearch' successful. 1: osm_building_narok (Multi Polygon)APIの仕様について
サーバーを立ち上げたあと、http://localhost:8080/docsをブラウザで開くとSwaggerでAPIを試せます。
/api/tile/{z}/{x}/{y}.{ext}
というAPIを使います。Try it out
ボタンを押して、デフォルトのExampleのままExecuteを押して、200が返れば成功しています。これだけだとよくわからないので、ブラウザで以下のURLを叩いてみます。
http://localhost:8080/api/tile/14/9824/8241.pbf?indices=%5B%7B%22name%22%3A%22osm_building_narok%22%2C%22geometry%22%3A%22geometry%22%2C%22query%22%3A%7B%22term%22%3A%7B%22building%22%3A%22school%22%7D%7D%7D%5D
8241.pbf
がダウンロードされましたので、QGIS3.14以上のバージョンでドラッグ&ドロップしてみてみます。なんかポリゴンが表示されました!QGISのダウンロードはこちらから。でももっと動的に画面動かしながらベクトルタイルを見たいということで、QGISのベクトルタイル機能でみてみます。
URLには次のものを指定してみます。学校だけではつまらないのでとりあえず、検索条件なしで設定します。
http://localhost:8080/api/tile/{z}/{x}/{y}.pbf?indices=[{"name":"osm_building_narok","geometry":"geometry"}]ブラウザパネルの
Vector Tiles
に表示されました。追加したベクトルタイルを表示する前に、ケニアのナロックタウンの場所をQGISで表示しておきましょう。ここではMaptiler PluginのBasicを追加してみます。アクセスキーは事前に取得お願いします。
思いっきりズームしましょう。人口5万人程度の小さなマサイ族の街です。なんでこのナロックタウンをサンプルデータとして選んだかというと、自分が以前住んで仕事してたから。
さてここで、作成したベクトルタイルを地図に追加します。ブラウザパネルの
Vector Tile
のelastic MVT test
をダブルクリックすれば良いです。QGISにElasticsearchからのベクトルタイルがちゃんと表示されました!
ターミナルを見るとログがちゃんと出ていて動いているらしいことがわかります。
es_tileserv_1 | 06:18:20 2|es_tileserv | GET /api/tile/13/4914/4121.pbf?indices=[%7B%22name%22:%22osm_building_narok%22,%22geometry%22:%22geometry%22%7D] 200 51.559 ms - 0 es_tileserv_1 | 06:18:20 1|es_tileserv | GET /api/tile/13/4914/4122.pbf?indices=[%7B%22name%22:%22osm_building_narok%22,%22geometry%22:%22geometry%22%7D] 200 53.046 ms - 0今後の展望
- フロントエンドでMapboxGL JSを使って動的に検索ワードを変えつつ、ベクトルタイルを地図に表示したい。
- もしできたら、
es_tileserv
で検索して表示するMapbox GL JSのプラグインを作りたい。- Elasticsearchのいろんな検索に対応できるようにAPIの仕様を洗練させたい(自分はElasticsearchは素人同然なので検索ワードのAPIへの指定方法とかかなり手探りで作りました。)。
一昨日くらいから突貫で作ったので、いろいろと突っ込みどころがあるかと思いますが、もし何かAPI仕様について良い案や、こんな使い方もできるんではというアイデアなどありましたら、GithubのリポジトリにIssueください。
よろしくお願いします。
- 投稿日:2020-11-23T10:37:08+09:00
サーバから Soracom API を叩くために API Key と Token をどうやって取得するべきか
Soracom API を叩くには
API Key
とToken
のペアが必用となる。例:
curl -X GET \ --header 'Accept: application/json' \ --header 'X-Soracom-API-Key: api-xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx' \ --header 'X-Soracom-Token: eyJQiOiJBUraWUVDQ(以下略)' \ 'https://api.soracom.io/v1/subscribers/your_imsi/data?sort=desc'この
API Key
とToken
をサーバとかLambdaとか、要はUIの無いバックエンドサービスからどう叩くべきか?の話。
基本、公式ドキュメントをはじからはじまでちゃんと目を通せば書いてあるのだが、以下の要因からすげー迷ったので備忘録兼ねて書いとく。
- 巷にあふれる解説記事が API Reference で暫定的に取得した値を使用する前提のものが多い。
- 認証に係る要素が、
Auth Key ID
,Auth Key Secret
,API key
,Token
の 4セットあるのだが、
- 日本語と英語の表記の空目
API Key
とAuth Key ID
がまぎらわしい。- 公式APIでも
Auth Key Secret
を入れるべきフィールドをauthKey
ってたりするので、仕様書読んでて混乱する。- 先にAPIリファレンスを斜め読みして、
API Key
で調べて SORACOM API 利用ガイド の 「API Key と API Token」 だけ 読むと混乱する。
- その数項目先の 「API 呼び出し例」 まで読み進めると、認証に係る4つの要素の使い分けをちゃんと理解できる。
- Ruby 以外に公式のSDKが無い。
- 公式ドキュメントにユースケースとベストプラクティスがあんま載ってない。
Overview
- まず、プログラムアクセス用の SAMユーザを作れ。
- AWS の IAM ユーザと同じ理解。
- SAMユーザの 認証キーID (
Auth Key Id
) と 認証キーシークレット (Auth Key Secret
) は固定で持ってOK。
- AWS Secrets Manager で管理するなり、 CIで環境変数に突っ込むなりお好きにどうぞ。
- ただし、これは絶対に漏らしたらNG。漏れたら再発行する。
API Key
とToken
は SAMユーザの認証を通すことによって即時で発行して使い捨てるべきもの。ちゃんと Overview 理解できてればシンプルで使いやすいよ!
詳細
SAM ユーザ作成
- 基本は公式ドキュメントの通りでOK
- コンソールログイン用のパスワードは設定するな。何のためにSAMユーザ分けたかわからなくなる。
- SAM ユーザーの権限設定 は多分
:list*
とか:get*
とか。かならず絞るように。API Key, Token の取得
SORACOM API 利用ガイド の 1. API Key, API Token の取得 の SAM ユーザーの API Key と API Token を取得する例 を参照のこと。
具体的には以下。curl -X POST \ -H 'Content-Type: application/json' \ -d '{"authKeyId": "keyId-xxxxxxx", "authKey": "secret-xxxxxxx"}' \ https://api.soracom.io/v1/auth # Response: # 200 OK # # { # "apiKey": "API Key", # "token": "API Token", # "operatorId": "当該OperatorのID", # "userName": "SAMユーザー名" # }なお、node で axios 使う場合はこんな感じ。
const axios = require('axios'); const getTokenByAuthKey = async (authKeyId, authKeySecret, tokenTimeoutSeconds) => { const url = 'https://api.soracom.io/v1/auth'; const body = { authKeyId, authKey: authKeySecret, tokenTimeoutSeconds }; const headers = { 'Content-Type': 'application/json' }; const res = await axios.post(url, body, { headers, responseType: 'json' }); console.log(res.data); const apiKey = res.data.apiKey; const token = res.data.token; // const operatorId = res.data.operatorId; return { apiKey, token }; }; // SAM user の情報 (認証キー ID と認証キーシークレット) const authKeyId = 'keyId-xxxxxxxxxxxxxxxxxxxxxxxxxxx'; const authKeySecret = 'secret-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; // SAM user の認証をかけて、 API Key, Token を取得する const tokenTimeoutSeconds = 3 * 60; // 最短3分 const { apiKey, token } = await getTokenByAuthKey(authKeyId, authKeySecret); // 以降、 apiKey, token を使用して Soracom の API を呼び出しできる。理解すればこんだけ。
tokenTimeoutSeconds
は SORACOM API 利用ガイド によれば 「デフォルトでは24時間で、最短3分、最長で48時間まで指定でき」る。
- 通常のサーバちっくなデータ取得であれば 3分あれば十分すぎるので、3分で良い認識。
operatorId
は別途設定で持つでいいと思うが、auth のレスポンスで取得できるものを使うでも良さそう。
- API設計思想的にどっちを想定してるんだろう?
その他
公式の API Reference 読んでも
API Key
,Token
をどうやって取得するか書いてないので、ぐぐるじゃないですか?「API Key と API Token に移動」 するじゃないですか?
え、Token更新し続けろって言ってる?ってなるんすわ。
このページをだーっと下まで読んでいって「1. API Key, API Token の取得」まで行くと、別途SAMユーザと認証キーID/認証キーシークレットがちゃんとあるのね!って理解できる。。。
あと、流石にそろそろ公式で node 版の SDKが欲しいです... async/await 対応したやつ......
(Soracom Beam 使えってことですよねわかります)