SSSAPIと他のサービスをいろいろ比較してみた(GAS/SheetDB/sheety/Stein/sheetsu)
開発中の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回の平均値を調査した。
- 20列x50行 ... SSSAPIのFreeプラン上限
- 20列x200行 ... SSSAPIのStandardプラン上限
- 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の上限がある。
利用できる機能
全件取得などの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
開発の励みや記事を書くモチベにもなるので、
いいねやシェア、はてブなどしてもらえるとかなりよろこびます!!
おまけ
調査に使った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