【注意】エクセルWEBSERVICE関数でのアクセス発生件数に注意
WEBSERVICE関数でサーバアクセスがどれくらい発生するか実験してみた
エクセルにWEBSERVICE関数という関数があります。
これを使うと、インターネット上で公開されているWEB APIに問い合わせをして、その結果をセルに表示させることができます。
公式の解説ページへのリンクはこちら↓
何も考えずに使うとアクセス先のWEB APIに大量のアクセスが発生してしまい、先方に迷惑をかけてしまう可能性があります(利用規約で過剰なアクセスが禁止されている場合には、利用規約に違反する可能性もあります)。
そこで、WEBSERVICE関数を使ったときに、どのタイミングでどれくらいアクセスが発生するか実験をしてみました。
この記事の目次
実験環境準備
手元のPCにウェブサーバを立てる
手元のPCに、ウェブサーバを立てます。
「http://localhost:3000/test」へのアクセスごとに、「1」「2」「3」・・・と、返答する数を1ずつ数を増やすようなWEB APIを作りました。
参考までにソースコードを載せておきます(Node.js、Expressで構築しています)。
import express from 'express';
const app = express();
let accessCount = 0;
app.get('/test', (req, res) => {
accessCount++;
console.log(accessCount);
res.send(String(accessCount));
});
app.listen(3000, () => {
console.log(`listening to port 3000`);
});
実験
同一URLを複数のセルに入力してみる
非現実的ですが、まずは、まったく同じURLを複数のURLに入力してみます。
最初に、A1セルにWEBSERVICE関数を入力します。
次に、その数式をコピーして、A2セル以下に貼り付けてみます。
すると、A2セル以下には、すべて同じ値が表示されました。
これから、同一URLを貼り付けたときには、貼り付けたセルの数にかかわらず、サーバに1回しかアクセスしていないことがわかります。
別のURLを複数のセルに入力してみる
実際にWEBSERVICE関数を使う時には、セルごとにWEBSERVICE関数で呼び出すURLは変わるケースがほとんどです。
そこで、今度は、A2~A7セルに、あらかじめ値を入力しておきましょう。
そして、B2セルにはWEBSERVICE関数を入力します。このとき、A2セルの値に応じて問い合わせをするURLが変わるような数式を入れてみます。
この数式をコピーしてB3~B7セルに貼り付けると、今度は、B3~B7セルに別々の値が表示されました。
このように、セルごとに呼び出しているURLが異なるときには、貼り付けたセルの数だけサーバにアクセスしていることがわかります。
セルの値を入力・変更してみる
この状態で、セルに値を入力・変更してみましょう。
まず、B2セル~B7セルの数式に無関係なセル(たとえば、E2セル)に値を入力しても、B列の値は変わりません。
一方で、B列の数式から参照しているA列の値を変えると、関連しているセルだけ再リクエストがかかります。
たとえば、A7セルの値を「8」に変えると、B7セルの値だけ変わります。
つまり、B7セルに入力したWEBSERVICE関数だけが実行されたということになります。
サーバへのアクセスを必要最小限で抑えようとしてくれているようですね。
保存・再読み込みしてみる
次に、このファイルを保存して、再読み込みしてみます。
結論からいうと、再読み込みのタイミングでもサーバへのアクセスは発生しないようです。
「コンテンツの有効化」ボタンを押しても、サーバへのアクセスは発生しませんでした。
とりあえず、保存・再読み込みだけならサーバへのアクセスが発生することはなさそうです。
その他の操作
ここまでの実験だと、最初に数式を入力した時点以外では、比較的サーバへのアクセスは控えめなように感じました。
が、意外なタイミングでサーバへのアクセスが発生するようです。たとえば、行の挿入・削除で、サーバへのアクセスが発生しました。
実際、1行目に行を挿入すると、すべてのセルについてサーバへのアクセスが発生します。
これは、結構痛いですね。
仮に、1,000行分WEBSERVICE関数を入力してある状態で1行目に行を挿入したら、瞬間的に1,000回のリクエストが送信されるということになります。
なお、サーバへのリクエストは、同時には10リクエストを上限とするように制限されているようです(ExcelAPIの運営者の方から情報提供を頂きました)。
そして、ExcelからのAPIを受ける前提のAPIサーバであれば、この程度の負荷ならば許容範囲だろうとのことでした。
ExcelAPIも、この程度の負荷なら許容範囲とのことで、(外部APIサーバにリクエストを出す一部の機能を除き)基本的にはサーバの負荷を考慮することなくガンガン使ってほしいとのことでした。
「祝日一覧取得」など、便利なAPIが揃っていますので、興味がある方は見てみてください。
結論
安易にWEBSERVICE関数を使うと、瞬間的に大量のリクエストが送られて相手に迷惑をかけてしまうおそれがあります。相手に迷惑がかからないか、慎重に検討をしたほうが良いでしょう。
また、思わぬタイミングで、サーバへのアクセスが発生する場合もあるので注意しましょう。たとえば、「1秒に○リクエストまで」「1日に○リクエストまで」といった制限がある場合には、この制限を超過しないか慎重に検討してください。