オープンソースでセルフホスト可能&自由自在にプランをカスタマイズ可能な課金管理システム「Lotus」使用レビュー
![](https://i.gzn.jp/img/2023/05/07/lotus/00_m.png)
「使った分だけ課金」という仕組みはシンプルで分かりやすいですが、一方で使用量をユーザーごとに計測して請求金額を算出する仕組みはなかなか複雑になってしまいがちです。「Lotus」はそうした複雑な課金管理を一発で解決できるツールとのことで、どんなことができるのか実際に確かめてみました。
Lotus — Open Source Pricing and Billing Infrastructure
https://www.uselotus.io/
LotusのサーバーはDockerを利用して起動するため、下記のリンクから自分の環境に合った方法でDockerをインストールします。
Install Docker Engine | Docker Documentation
https://docs.docker.com/engine/install/
今回はCentOSを利用するため、下記のコマンドを入力しました。
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl start docker
サーバーにsshで接続し、下記のコマンドでリポジトリをクローンします。
git clone https://github.com/uselotus/lotus.git && cd lotus
今回はDocker-composeのバージョン2を利用するため、「scripts」フォルダ内にある「self-host.sh」を一部書き換えておきます。
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2026_m.png)
書き換えたら下記のコマンドを入力。自動で必要なファイルがダウンロードされ、サーバーのビルドがスタートします。クラウドサービスの安価な低スペックサーバーでビルドするとメモリが足りずに失敗するため、8GB程度のメモリが搭載されたマシンが必要な模様です。
sudo ./scripts/self-host.sh
数十分待つとビルドが完了し、自動でサーバーが立ち上がります。ブラウザでサーバーにアクセスするとログイン画面が表示されるので、ユーザーネーム欄とパスワード欄に「change_me」と入力して「Login」をクリック。
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2027_m.png)
ダッシュボードが表示されます。一通りの使い方をマスターしたいので、左下の「Quick Start」をクリックしてクイックスタートガイドを表示します。
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2028_m.png)
まずAPIキーを作成する必要があるとのこと。「Create an API Key」をクリック。
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2029_m.png)
APIキーの管理画面に移動するので、「Add API Key」をクリックします。
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2030_m.png)
キーの名前を入力して「Confirm」をクリック。
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2031_m.png)
APIキーが作成されました。新しいAPIキーはこのタイミングでしか確認できないので、コピーして保存しておきます。保存できたら「Okay」をクリック。
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2032_m.png)
もう一度「Quick Start」をクリックし、「Track your first event」をクリックします。下にイベントを送信するためのコマンドが表示されるのでコピーし……
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2033_m.png)
URLをサーバーのURLに書き換え、APIキーの部分を先ほどコピーしておいたAPIキーに書き換えます。
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2035_m.png)
この状態で送信してみると、JSONの形式が間違っているというエラーがでました。
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2036_m.png)
よく見るとキーがダブルクオートで囲まれていなかったり、項目間のコンマが無かったりと全然JSONの形式として正しくありませんでした。先行きがやや不安ですが、手で形式を整えていきます。
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2037_m.png)
再びエラーが発生。イベントの発生日時は30日以内にする必要があるとのこと。
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2038_m.png)
というわけで日時を適当に書き換えます。
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2039_m.png)
ついにイベントの送信に成功しました。
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2040_m.png)
ダッシュボードを見ると「Events Tracked」の数値が1になっており、イベントを受け取れているのが確認できます。
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2041_m.png)
もう一度「Quick Start」を開き、今度は「Create a Metric」をクリック。
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2043_m.png)
Metricsの画面が開きました。ここでイベントの詳しい内容を確認できる模様です。右上の「Create Metric」をクリックします。
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2042_m.png)
Metricではイベントの計測方法を設定します。テンプレートの「API Calls」を選択し、Metric Nameに何を計測するのかを分かりやすく記載します。Event Name欄にはこのMetricで処理するイベントの名前を入力すればOK。Typeは3種類あり、単純な回数を計算する「Counter」と、保存されているファイルの容量など一定期間内の利用量を計算する「Gauge」、数秒間や数分間など短時間の間に発生したイベントの回数を計測する「Rate」が用意されています。今回はテンプレート通り「Counter」のままにして「Create」をクリック。
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2044_m.png)
Metricが作成できました。
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2045_m.png)
左のメニューから「Quick Start」をクリックし、「Create a Plan」をクリックします。
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2046_m.png)
プランの作成画面が表示されます。プランでは料金を設定することが可能です。名前と説明を入力し、プランの更新タイミングを選択します。今回は毎月更新のPlanにするため、「Monthly」をクリックしました。設定できたら「Next step」をクリック。
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2047_m.png)
料金の発生日時を選択します。今回は毎月1日に設定しました。Localized Name欄に通貨に対応したこのプランの名前を入力し、通貨を選択します。記事作成時点ではドルやユーロを始め19個の通貨が設定可能でしたが日本円はありませんでした。ドルを選択して「Next step」をクリック。
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2048_m.png)
最後に料金の設定を行います。「Add Component」をクリック。
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2049_m.png)
作成したMetricの中から課金の対象にするものを選択し、数量を入力します。今回は数量を「10」にしたので、10回まで無料で「API Post Calls」イベントを発生させることができるというわけ。
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2050_m.png)
「Add Tier」をクリックするとさらに数量が増えた場合の金額を設定できます。10個を超えたらイベントの発生1回ごとに0.01ドルの料金が発生するようにしてみました。
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2051_m.png)
利用量の計測タイミングやリセットタイミングを自由にカスタマイズ可能ですが、今回はプランの期間と同じに設定しておきます。設定が完了したら「Create New Component」をクリック。
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2052_m.png)
Componentが作成できました。このイベント比例の料金設定に加えて、課金期間ごとの固定料金や割引額・割引率を設定できますが、今回はそのまま「Publish」をクリック。
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2053_m.png)
ところがエラーが出てプランの作成ができませんでした。しばらく検証を重ねてみたところ、「Component」を付けているとサーバー内部のエラーでプランの作成に失敗することが分かったのでComponentの右上にあるゴミ箱マークをクリックしてComponentを削除し、「Publish」をクリックします。
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2064_m.png)
プランの作成に成功しました。作成したプランをクリックして中身を確認してみます。
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2065_m.png)
プランの画面はこんな感じ。プランの中身を顧客に合わせて修正するカスタムプランやプランのバージョンを管理することができるようです。
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2066_m.png)
「Quick Start」をクリックして確認すると次のステップは支払い関連の処理でした。最後の2個は開発者とのコミュニケーション用なので、支払い関連の処理が実質的に最後のQuick Startとなっています。「Connect a payment method or a webhook endpoint」をクリック。
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2074_m.png)
決済プロバイダとして「Stripe」「Braintree」「Salesforce」「Snowflake」「Netsuite」「Segment」と接続可能。こうした決済プロバイダを使わない場合は、「Developer Settings」をクリックして……
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2075_m.png)
Webhookを利用すればOK。「Add URL」をクリックします。
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2085_m.png)
Endpointの名前とURLを設定し、どのイベントの通知を受け取るかを選択して「Confirm」をクリック。subscription関連の通知を受け取ればサービスの提供・中止を判断でき、invoice関連の通知を受け取れば誰にどの金額を請求すれば良いのかが分かります。
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2086_m.png)
Webhookはsvixに対応しているため、ちゃんと正当なLotusサーバーからの通知であることを検証できて安心です。
![](https://i.gzn.jp/img/2023/05/07/lotus/snap2087_m.png)
今回は設定にバグがあって実際に課金額を計測することができませんでしたが、Lotusにはライブデモが用意されており、計測に成功した場合にどのような表示になるのかを確認可能となっています。
![](https://i.gzn.jp/img/2023/05/07/lotus/00_m.png)
・関連記事
最適な価格設定に役立つ5つの原則 - GIGAZINE
SaaSが本当に軌道に乗っているかを理解するための売上継続率・総収入継続率などの求め方一覧 - GIGAZINE
Netflixはどのようにして自社データ基盤の費用対効果を高めているのか? - GIGAZINE
5分の設定でAWSの料金を最大57%カットしてくれるサービス「Usage」の仕組み&レビュー - GIGAZINE
メール・プッシュ通知・SMS・チャットへの送信を一括でまとめて管理できるツール「Courier」レビュー - GIGAZINE
・関連コンテンツ
in レビュー, ソフトウェア, ネットサービス, ウェブアプリ, Posted by log1d_ts
You can read the machine translated English article Open source self-hostable & freely c….