MonacaアプリやWebアプリを開発する際に、常に問題になるのが「バックエンドをどうするか」です。アプリ単体で完結できるものは多くなく、大抵何らかのバックエンドを用意するでしょう。
クラウドサービスを使ったり、自分で開発したりと複数の選択肢がありますが、今回はオープンソース・ソフトウェアのバックエンドインフラであるAppwriteを紹介します。オープンソースなのでセルフホストもできます。
Appwriteについて
Appwriteは、オープンソース・ソフトウェアのバックエンドインフラソフトウェアです。

主に以下のような機能があります。
- 認証
- データベース
- ストレージ
- ファンクション(FaaS)
- メッセージ
- リアルタイム通信
- Webホスティング
これだけの機能があれば、大抵のアプリ開発であれば事足りるのではないでしょうか。ここから、各機能について細かく解説します。
認証
認証はデータベースやストレージなどを安全に保存、利用するために必須の機能です。Appwriteでは、以下のような認証機能が用意されています。
- メール/パスワード
- SMS
- マジックURL
- メールベースのOTP
- OAuth2
- JWT(JSON Web Token)
- SSR
- カスタムトークン
- 匿名認証
- 多要素認証
OAuth2を利用すれば、GoogleやFacebook、GitHubなどの外部プロバイダーを利用した認証も行えます。カスタムトークンではPassKeyや生体情報を使った認証にも利用できます。
データベース
データベースはFirebaseなどと似ていて、以下の3段階で管理されます。
- データベース
- コレクション
- ドキュメント
使い方はシンプルで、以下のコードでデータの取得が可能です。
import { Client, Databases, Query } from "appwrite";
const client = new Client()
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1")
.setProject("<PROJECT_ID>")
const databases = new Databases(client);
const response = await databases.listDocuments(
"<DATABASE_ID>",
"<COLLECTION_ID>",
[
Query.equal("title", "Hamlet")
]
);
console.log(response);
各データに対して、先ほど利用した認証情報などを用いてアクセス制御できます。
ストレージ
ストレージはバケットと呼ぶ単位で管理されます。S3に似た概念です。
以下は、ファイルをアップロードするコードです。
import { Client, Storage, ID } from "appwrite";
const client = new Client()
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1")
.setProject("<PROJECT_ID>");
const storage = new Storage(client);
const response = await storage.createFile(
"[BUCKET_ID]",
ID.unique(),
document.getElementById("uploader").files[0]
);
console.log(response); // Success
ファンクション(FaaS)
ファンクションは、コードをAppwrite上にアップロードして、アプリから実行する機能です。APIキーを隠蔽化したり、異なるプラットフォーム上のロジックを共有化することができます。
Appwriteではランタイムとして、以下の言語が指定できます。
- JavaScript
- Node.js
- Node.js + TypeScript
- Bun
- Deno
- Python
- PHP
- Dart
- Ruby
- Kotlin
- C++
- .NET
- Java
- Swift
- Go
これらのコードをアップロードして、アプリから呼び出したり、データを保存したタイミングなどのトリガーで実行します。
import { Client, Functions } from "appwrite";
const client = new Client();
const functions = new Functions(client);
client
.setProject("<PROJECT_ID>") // Your project ID
;
const response = await functions.createExecution(
"<FUNCTION_ID>", // functionId
"<BODY>", // body (optional)
false, // async (optional)
"<PATH>", // path (optional)
"GET", // method (optional)
{} // headers (optional)
);
これはAPIとして、curlやfetchなどで呼び出すことも可能です。
curl -X POST https://64d4d22db370ae41a32e.appwrite.global \
-H "X-Custom-Header: 123" \
-H "x-appwrite-user-jwt: <YOUR_JWT_KEY>" \
-H "Content-Type: application/json" \
-d "{"data":"this is json data"}"
メッセージ
Appwriteは、以下のメッセージングに対応しています。
- プッシュ通知
- SMS
- メール
リアルタイム通信
リアルタイム通信は、いわゆるPub/Sub通信になります。以下のようなコードで、特定のチャンネルのイベントをウォッチできます。
import { Client } from "appwrite";
const client = new Client()
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1")
.setProject("<PROJECT_ID>");
// Subscribe to files channel
client.subscribe("files", response => {
if(response.events.includes("buckets.*.files.*.create")) {
// Log when a new file is uploaded
console.log(response.payload);
}
});
Webホスティング
いわゆるWebサイトのホスティング機能です。静的サイトだけでなく、各種フレームワークを利用したWebアプリケーションもホスティングできます。ドキュメントに依れば、以下のフレームワークが利用可能です。
- Next.js
- Nuxt
- SvelteKit
- Astro
FlutterやReact Nativeなど、他のフレームワークも利用できるようです。
Start with Sites - Docs - Appwrite
AI
AppwriteはいくつかのAI機能をサードパーティプロバイダーのAPIで実現しています。執筆時点で利用できるのは、以下の機能です。
- 画像の判別
- オブジェクト認識
- テキスト生成
- テキスト翻訳
- 音声認識
- TTS(テキストを音声に)
これらの機能を利用する際にはHugging FaceのAPIキーなどが必要になります。
Artificial intelligence - Overview - Appwrite
フロントエンドとの親和性
もし、これからPWAやMonacaアプリなどを開発していくのであれば、Appwriteは良い選択肢になるでしょう。オープンソースなので、自分でセルフホストできますし、もしそれが面倒ならクラウドサービスを利用しても良いでしょう。
データベースにはオフライン同期機能というのが用意されています。ネットワークがない状態でもデータの取得、追加、更新などが行えて、あとで同期できます。この辺りはPWAにとって嬉しい機能ではないでしょうか。
SDKが充実しているので、モバイルアプリとサーバーサイドでデータを相互に触れるのも容易です。
他のBaaSとの比較
他のBaaSとの簡易的な比較です。参考にしてください。
項目 | Appwrite | Firebase | Supabase |
---|---|---|---|
URL | URL | URL | URL |
ライセンス | Apache‑2.0 | クラウドのみ | オープンソース |
開始年 | 2019年 | 2011年 | 2020年 |
認証 | メール/OAuth2/匿名/その他 | メール/電話/SNSなど | メール/OAuthなど |
データベース | NoSQL風 | Realtime DB + Firestore(NoSQL) | PostgreSQL + REST / GraphQL |
ストレージ | あり | あり | あり |
プッシュ通知 | あり | Firebase Cloud Messaging (FCM) | Edge Functions経由で実装 |
ホスティング | あり(動的にも対応) | 静的サイト + Next.jsなど | 静的配信のみ |
ファンクション | 多数の言語に対応 | Node.js | Deno |
リアルタイム | PubSub | Realtime DB / Firestore同期 | LISTEN/NOTIFYによるリアルタイム |
解析 | なし | Analytics・Crashlytics等統合 | なし |
クラウド利用料 | 無料から。有料は月15ドル〜 | 無料枠あり、従量制 | 無料枠から。有料は月25ドル〜 |
機能面だけで見ると、Firebaseはアクセス解析機能などもあり、充実しています。AppwriteやSupabaseは、オープンソースでセルフホストできるのが大きな利点になりそうです。
FirebaseやAppwriteではAIに対しても活発に開発が行われている印象です。SupabaseはAI Assistantを提供していますが、こちらはダッシュボード利用をサポートしてくれるAIになります。
まとめ
AppwriteはモバイルアプリやWebアプリのバックエンドをまるっとサポートしてくれるソフトウェアになります。自分でホスティングもできますし、クラウドサービスを利用することもできます。
活発に開発が行われているので、今後もどんどん進化していくと思われます。ぜひ試してみてください。