WebアプリやWebサイト、スマホアプリを開発する際、
バージョンやAPIのURL、メンテナンスモードなどの設定情報を外部で持ちたいときも。
そのためだけに、APIと管理画面を用意するのは少し手間で、
環境構築やサーバを用意するオーバヘッドが大きく感じます。
Firebaseを利用している場合では、Firebase Remote Configの利用する方法もありますが、
設定情報をキャッシュするため、即時性には少し欠ける面も。
この記事では設定情報をスプレッドシートを管理画面としたAPIを
SSSAPIで用意し、活用する方法をご紹介します。
APIであればWebサイト/スマホアプリの両方にも対応できます。
SSSAPIでも各プランの上限値をAPI化しており、
LPサイト/管理画面/サーバという複数の環境で、
設定値を共有でき、簡単に一括で変更することができています。
活用事例
例1 メンテナンスモード
一時的にメンテナンスモードに切り替えたい場合での例です。
この例では開発環境(develop
)と本番環境(production
)の2行を用意しています。
作成したAPIを呼ぶと全件取得しますが、
$ curl -s "https://api.sssapi.app/<API_ID>" | jq
[
{ "id": "develop", "isMaintenance": true },
{ "id": "production", "isMaintenance": false }
]
id
を指定することで1件だけを取得することができます。
$ curl -s "https://api.sssapi.app/<API_ID>/develop" | jq
{ "id": "develop", "isMaintenance": true }
$ curl -s "https://api.sssapi.app/<API_ID>/production" | jq
{ "id": "production", "isMaintenance": false }
環境変数などを利用し、実行する環境によって取得する行を切り替えることで、
特定の環境だけ変更することも可能です。
あとは、このAPIのisMaintenance
のフラグに応じて、
メンテナンスモードにするかどうかを判定すればOKです。
例2 APIのエントリーポイント
APIのエントリーポイントやURLを変更したい場合も。
特にiOSやAndroidなどのスマホアプリでは、
アップデートが必要なため、外部から設定できると重宝します。
この例のようにAPIのエントリーポイントを設定情報として管理しておけば、
スプレッドシートを編集するだけで、アクセス先を変えることできます。
$ curl -s "https://api.sssapi.app/<API_ID>/develop" | jq
{
"id": "develop",
"isMaintenance": true,
"apiUrl": "http://localhost:8080"
}
例3 バージョン
強制的に更新したり、アップデートを促したい場合も。
スマホアプリではデータモデルの変更や不具合などにより強制アップデートさせたい場合や WebアプリでもPWAなどのキャッシュをクリアしたいことがあります。
そういった場合、バージョンを設定情報として用意しておくと便利です。
環境変数などでソースコード内にバージョンを組み込んでおき、
このAPIのversion
と比較することで、バージョンアップを通知するかどうか判定できます。
$ curl -s "https://api.sssapi.app/<API_ID>/develop" | jq
{
"id": "develop",
"isMaintenance": true,
"apiUrl": "http://localhost:8080",
"version": "v1.1.0"
}
シートごとに環境を分離する
上の例では1シートの各行に各環境の設定情報を記載していましたが、
SSSAPIではシートごとにAPIを作成するため、
環境ごとにAPIを用意することも可能です。
オプション無しでそのままだと、リストになってしまいますが、
$ curl -s "https://api.sssapi.app/<API_ID>" | jq
[
{
"isMaintenance": true,
"apiUrl": "http://localhost:8080",
"version": "v1.1.0"
}
]
「1行の場合は配列にしない」オプションを有効にすると、
さきほどと同様のJSONを取得することができます。
$ curl -s "https://api.sssapi.app/<API_ID>" | jq
{
"isMaintenance": true,
"apiUrl": "http://localhost:8080",
"version": "v1.1.0"
}