📝

SSSAPIと他のサービスをいろいろ比較してみた(GAS/SheetDB/sheety/Stein/sheetsu)

2021/09/02に公開

開発中のGoogleスプレッドシートのAPI化サービス「SSSAPI
似たようなサービスはいくつかあるんですが、どういう特徴があるかまとめてみました。

まとめ

SSSAPIのいいところ

  • 速い ... 比較的レスポンスが早く、小規模であればGASの約4倍
  • 安い ... 個人開発でも使えるように安めの価格設定
  • 安心 ... 不要な権限を要求せず、退会も簡単
  • + ドメイン制限によるクライアントサイドでのアクセス制御も可

SSSAPIにないところ

  • 更新系の操作はできない(※1)
  • レスポンスの内容が自動で更新されず、手動で更新が必要(※2)
  • JSON以外の形式に対応してない(※3)

(※1) スプレッドシートではロックの仕組みなどがなく、
データの不整合が発生する懸念があるため、SSSAPIでは対応していません。。
(※2) 編集中にAPIにアクセスされると不正なレスポンスになる可能性があるため、
手動更新の形となっています。自動更新のオプションは今後対応を予定しています。
(※3) 今後対応を予定しています。

調査したサービス

調査したのは、この5つ。GAS以外は、
SSSAPIと同様にスプレッドシートをAPI化するWebサービス。

調査した項目

調査したのは、この5項目。

  • レスポンスタイム
  • 価格/制限
  • 利用できる機能
  • 認証/アクセス制限
  • 必要な権限と退会方法

レスポンスタイム

3種類のサイズのスプレッドシートで計測。
全件取得のAPIをcURLを利用して10回の平均値を調査した。

  1. 20列x50行 ... SSSAPIのFreeプラン上限
  2. 20列x200行 ... SSSAPIのStandardプラン上限
  3. 20列x2000行 ... SSSAPIのPremiumプラン上限

スプレッドシートはこんな感じ。

それぞれの結果は以下の通り。

(※) sheetsuの無料枠は20行までのため、20行での値

SheetDBが早く、SSSAPIは次いで2位だけど、
Standardプラン上限までは大きな差はない感じ。

SheetDBは15秒間キャッシュをするので速いけど、
SSSAPIはドメイン制限などのチェックがあるための差。

全件取得であれば、GASがよく利用されるけど、
GASだとリダイレクトを挟むこともあり、少し遅めな結果。

sheety/Stein/sheetsuでは1秒以上差があるのでよさそう。

価格/制限

(※1) β版での価格/制限。正式版で変更する可能性があります。
(※2) リクエスト上限は20,000/日のため、30日で換算
(※3) 競合の月額価格はドルのため、1ドル=110円で換算

SSSAPIはβ版中なので制限をかけていないこともあるけど、
それぞれ月のリクエスト上限がある。

利用するサービスのアクセス数や呼び出し方にもよるけど、
プランごとに大きく差があるので注意が必要。

SSSAPIの最大行数が少なめだが、その分価格が低い形になっている。
(このあたりはβ版のフィードバックをもらいつつ調整予定)

また、GASではこれ以外に同時接続数が30の上限がある。

GASの制限

利用できる機能

全件取得などのAPI操作関連の機能。

(※1) 自分でスクリプトを書くので、実装すれば利用可能。
(※2) sheetyは行指定で追加/更新/削除を行う。ID指定じゃない。

多くが更新系にも対応しているけど、SSSAPIは前述の通り非対応。
その分、1件取得や並び替えなどに対応していて、参照に特化してる。

各サービスの他の機能は以下の通り。

  • SSSAPI
    • {"user": { "age": 10 } }のようなネストオブジェクトにも変換可能
  • SheetDB
    • カウント/バッチ更新/全件削除などもある
    • タブの作成/削除も可能
  • sheety
    • sheetyを使ったHTMLのテンプレートを提供
  • Stein
    • OSSで提供。セルフホストもできる
  • sheetsu
    • 更新系用のフォームも作成できる
    • HTMLスニペットに変換できるJavaScriptも提供

他のサービスは、DBとして利用する形が多い。
(SSSAPIは管理画面/フォーム画面をスプシで代替えする方針)

認証/アクセス制限

認証やアクセス制限に関する調査。

  • SSSAPI ... ドメイン制限/アクセストークンによる認証
  • GAS ... Bearerトークンによる認証
  • SheetDB ... Basic認証
  • sheety ... Basic認証/Bearerトークンによる認証
  • Stein ... Basic認証
  • sheetsu ... Basic認証

他のサービスでは、基本的にBasic認証が用意されている。
SSSAPIのみドメインの制限ができる。

GASの場合、Bearerトークンを利用することもできるが、
Googleドライブの権限が必要なので広めの権限になる。

Basic認証だけだと、ソースが見れてしまう環境の場合、
あまり意味がない状態になる。

SSSAPIでは、SPAなどでも利用できるようにドメインで制限を用意している。
クライアントサイドからはドメインで制限して、
サーバサイドからはアクセストークンを利用するイメージ。

必要な権限と退会方法

ログイン/API利用時に必要な権限と退会方法に関する調査。

SSSAPIを作った理由の一つでもあるけど、
他のサービスでは基本的に広い権限を要求するけど、退会方法がわからない。。

そのため、普段づかいのGoogleアカウントだとすごく利用しにくく感じた。。

SSSAPIでは、必要な権限のみになるように、
すこして手間だけど、サービスアカウントを共有設定に追加する形にしている。

参照権限だけあればよく、使わなくなったら共有を外せばOK。
スプレッドシート上で対応できるようにしている。

まとめ

いろんなサービスと比べてみたところ、

SSSAPIのいいところは、

  • 速い ... 比較的レスポンスが早く、小規模であればGASの約4倍
  • 安い ... 個人開発でも使えるように安めの価格設定
  • 安心 ... 不要な権限を要求せず、退会も簡単
  • + ドメイン制限によるクライアントサイドでのアクセス制御も可

ただ、参照に特化しているので、更新系の操作には対応してない。。
(SSSAPIは管理画面/フォーム画面をスプシで代替えする方針)

自動更新やJSON以外の形式への対応は、今後予定しています!!
β版のフィードバックを踏まえ、優先度を検討する予定です。

SSSAPIでは、β版ユーザを募集中です!

β期間中はプレミアムプランの内容を無料で使えるのでお得!
ぜひぜひ、この機会にお試しいただければ〜!

わからないところやこんなのあったらいいなぁ〜などあれば、
Twitterやお問い合わせなどからお気軽にご連絡ください〜!

GoogleスプレッドシートのAPI化サービス
SSSAPI
Twitter: @sssapi_app

https://sssapi.app

開発の励みや記事を書くモチベにもなるので、
いいねやシェア、はてブなどしてもらえるとかなりよろこびます!!

おまけ

調査に使ったGAS

シート名をパラメタで指定する形で全件取得するコード。

function getData_(sheetName) {
  const sheet = SpreadsheetApp.getActive().getSheetByName(sheetName);
  const rows = sheet.getDataRange().getValues();
  const keys = rows.splice(0, 1)[0];
  return rows.map(row => {
    const obj = {};
    row.map((item, index) => {
      obj[String(keys[index])] = String(item);
    });
    return obj;
  });
}

function doGet(e) {
  var data = getData_(e.parameter.s);
  return ContentService.createTextOutput(JSON.stringify(data, null, 2))
  .setMimeType(ContentService.MimeType.JSON);
}

Discussion