オープンソースでセルフホスト可能なBaaSプラットフォーム「Appwrite」を使ってみた
![](https://image.news.livedoor.com/newsimage/stf/1/3/13b93_88_d901fb7f0b8e09eaca1723f21af8893d.png)
ウェブサービスやスマートフォンアプリを開発する際には、アプリ自体に加えてアカウントやデータの管理を行うバックエンドサーバーを用意する必要があるものの、ゼロからバックエンドのシステムを組み上げるのはかなりの工数を必要とします。そこで活躍するのが、よく使われるバックエンドのシステムをまとめてAPIから簡単に利用できるようにした「Backend as a Service(BaaS)」と呼ばれるサービスです。ウェブアプリ・スマートフォンアプリの普及に伴ってさまざまなBaaSが登場していますが、「Appwrite」はオープンソースで開発されており、自分でホスティング可能なためデータを自社内にとどめておけるBaaSとのこと。どんな感じなのか、実際に使って確かめてみました。
https://appwrite.io/
Appwriteのページにアクセスし、「Get Started」をクリックします。
![](https://image.news.livedoor.com/newsimage/stf/6/c/6c01d_88_289c82b3af30aba5e1aee83a44828b5d.png)
すると、Dockerを利用したインストール方法を案内されます。今回はWindowsを搭載したPCにインストールするので、「PowerShell」のコードをコピーします。
![](https://image.news.livedoor.com/newsimage/stf/a/4/a4d73_88_bf62c19403bd6a9a23ab3b4b95e1b1ee.png)
PowerShellを開き、コードをそのままペーストしてEnterキーを押します。
![](https://image.news.livedoor.com/newsimage/stf/5/0/508ab_88_6682afd0d20113ec24adbbe281d2501c.png)
Dockerイメージの構築に必要なデータがダウンロードされていきます。
![](https://image.news.livedoor.com/newsimage/stf/7/6/7699a_88_aef37c2ec040b9a33d83729abfbb25de.png)
ダウンロードの完了後、続いてAppwriteの初期設定が必要です。
![](https://image.news.livedoor.com/newsimage/stf/e/7/e7397_88_64956239cefb4664b4676c1f73103113.png)
サーバーで利用するHTTPポートの番号、HTTPSポートの番号、シークレットキー、ホスト名などの設定を求められますが、今回は全て標準設定のままEnterキーを連打して設定完了しました。設定が終わるとdocker composeが始まるので、しばらく待機します。
![](https://image.news.livedoor.com/newsimage/stf/8/6/865a4_88_ebf20db654016b4672aacb19487cd77f.png)
「Appwrite installed successfully」と出力されればセットアップ完了です。
![](https://image.news.livedoor.com/newsimage/stf/c/a/cab95_88_ce70e90263d46cdf5468e6cdd6e0e3cf.png)
ブラウザを開き、「http://localhost/」にアクセスすると自動でアカウント登録画面にリダイレクトしました。
![](https://image.news.livedoor.com/newsimage/stf/6/5/656c4_88_0f904854f2a0b9cfb1966bf48bcc3384.png)
「名前」「メールアドレス」「パスワード」を入力し、利用規約の同意にチェックを入れて「Sign Up」をクリック。
![](https://image.news.livedoor.com/newsimage/stf/f/d/fd5e2_88_d4bfdaeea2055d7653f5ce302a8e8c52.png)
最初に「Create Project」をクリックして新しいプロジェクトを作成していきます。
![](https://image.news.livedoor.com/newsimage/stf/4/a/4a4c1_88_8609db1605fbaa2d9dcbb520432aa833.png)
プロジェクト名を入力し、「Create」をクリック。
![](https://image.news.livedoor.com/newsimage/stf/8/f/8f440_88_6fcc2a8ac97c2a35054b75168cb16c2f.png)
ダッシュボード画面になるので、下までスクロールしていきます。
![](https://image.news.livedoor.com/newsimage/stf/7/2/72783_88_b15dcfca821c713557406339dcae1874.png)
最下部にプラットフォームの追加メニューがあるので「Add Platform」をクリック。
![](https://image.news.livedoor.com/newsimage/stf/e/9/e9303_88_1c813b1af647fb2498c99b8146cc2d7e.png)
Appwriteはウェブアプリの他に、Flutterを利用した開発やiOS・Androidのネイティブアプリ開発にも対応しています。さらにUnityにも対応する予定があるとのこと。今回はウェブアプリで試してみる予定なので、「New Web App」をクリックします。
![](https://image.news.livedoor.com/newsimage/stf/9/8/98669_88_6c515f863a00c4db3c336503181ff5bb.png)
「アプリ名」「ホスト名」を入力し、「Register」をクリック。
![](https://image.news.livedoor.com/newsimage/stf/d/d/dda1f_88_144b75d0ce917d31d74056d35054000e.png)
続いてクライアント側の設定を行っていきます。左のメニューから「Settings」を開き、「Project ID」をコピーし……
![](https://image.news.livedoor.com/newsimage/stf/b/a/bac5d_88_d6a8fedf7020c5df82d07aee63d4eabf.png)
Appwriteの「ユーザー登録」チュートリアルに記載されている下記のコードのProject ID欄に設定し、適当に名前を付けて保存します。今回は「index.js」として保存しました。
import { Appwrite } from 'appwrite';
// Web SDKを初期化
const appwrite = new Appwrite();
appwrite
.setEndpoint('http://localhost/v1') // Appwriteのエンドポイント
.setProject('623f86ab9650e1d37f56') // project ID
;
// ユーザー登録
appwrite
.account.create('unique()', 'me@example.com', 'password', 'Jane Doe')
.then(response => {
console.log(response);
}, error => {
console.log(error);
});
さらにAppwriteのライブラリを利用する準備として、下記のコードを実行しておきます。
npm init -y
npm install appwrite
今回はテスト利用ということで、ブラウザではなくbabel-nodeで実行しました。実行すると、下図のようなレスポンスが返ってきます。
![](https://image.news.livedoor.com/newsimage/stf/e/0/e0efb_88_229c1b3d0a2b68b6feb5fc5804f6e311.png)
Appwriteの「Users」欄をチェックしてみると、無事先ほど入力したユーザーが登録されていました。
![](https://image.news.livedoor.com/newsimage/stf/4/9/49f1b_88_4823e9be5fee6de8380e828737a75238.png)
このように、Appwriteは簡単にセルフホスト可能なBaaSサービスとなっています。ユーザー管理を始め、利用可能なAPIに関してはドキュメントに記載されているほか、Appwriteは下記のような機能・特徴を持っています。
◆データベース
ドキュメントをJSON形式で保存し、検索やアクセスコントロール機能も付属しています。
◆認証・ユーザー
複数のログイン方法が利用可能な認証システムです。
◆ストレージ
ファイルをアップロード・ダウンロードおよびプレビューすることができます。
◆Functions
バックエンドのコードを安全な隔離環境で実行する機能で、アプリをカスタマイズできます。
◆GEO&ロケーション
ユーザーの位置情報を取得可能です。
◆コンソール
バックエンドAPIの利用状況をウェブで視覚的に確認できます。
◆プライバシー
セルフホストを利用することでデータを外部に漏らしません。
◆セキュリティ
保存・転送においてエンドtoエンドのセキュリティを確保しています。