Nhostは、PostgreSQL・Hasura(GraphQL API)・認証・ストレージ・サーバーレス関数をひとつにまとめた、オープンソースのFirebase代替バックエンドです。クラウド版のホスティングサービスに加え、CLIによるローカル開発環境とセルフホスト用のdocker-composeも提供します。リポジトリはCLI(Go製)、ダッシュボード、各サービス(auth/storage/postgres)、SDK(nhost-js)などを含むモノレポです。
中核はGo製のCLI(cli/ディレクトリ)です。cmd/config配下のサブコマンド(default, apply, pull, validate, edit, show)がnhost.tomlという設定ファイルとsecretsファイルを生成・検証・クラウドへ反映します。apply.goを見ると、ローカルのモデル(model.ConfigConfig)をJSONにマーシャルし、Nhostクライアント経由でクラウドプロジェクトの設定を上書きする流れが確認できます。edit.goではtomlをJSONに変換してjsondiffでパッチを作り、環境ごとのoverlay(local.jsonなど)として保存する仕組みもあります。CLIバイナリはnpm配布時、cli/build/npm/platforms配下のOS・CPU別パッケージをoptionalDependenciesとして持たせることでネイティブバイナリを配る構成です。クライアント側は@nhost/nhost-jsパッケージのcreateClientで認証(signInEmailPassword)とGraphQLリクエスト(graphql.request)を呼び出すシンプルなAPIになっています。
- STEP 01
brewかnpmでCLIをインストールすると、cli/build/npm配下のOS別バイナリパッケージがoptionalDependenciesとして解決され、対応するネイティブバイナリが手元に届きます。
- STEP 02
nhost loginを実行すると、clienv/wf_login.goのフローに沿ってブラウザ認証などのログイン処理が走ります。
- STEP 03
nhost initを実行すると、cmd/config/default.goが呼ばれ、nhost.tomlと.secretsファイルがnhostフォルダに生成されます。
- STEP 04
nhost upを実行すると、cmd/dev/up.goとcompose.goがdocker-composeを組み立て、PostgreSQL・Hasura・Auth・Storageなどのコンテナがローカルに起動します。
- STEP 05
クラウド運用ではnhost config apply/pull/validateを使って、ローカルのnhost.tomlとクラウド上の設定を同期する操作を試すことになります。
- STEP 06
フロントエンドからは@nhost/nhost-jsのcreateClientでsubdomainとregionを指定し、signInEmailPasswordとgraphql.requestを呼び出してAPIレスポンスを受け取ります。
手元にはnhost.tomlという設定ファイルと.secretsファイル、そしてDocker上で動くPostgreSQL・Hasura・Auth・Storageのローカルスタックが残ります。加えてクラウドプロジェクトとの設定同期(apply/pull)ができる状態になり、フロントエンドからは@nhost/nhost-js経由で認証とGraphQL APIをすぐ呼び出せるようになります。
ローカルスタックの起動にはDockerが前提であり、実際のコンテナ起動やポート構成の細部はソースだけでは確認できません。
config applyやpullなどクラウド連携系コマンドはNhostアカウントとログインが必要で、無料枠や課金の実態は本リポジトリの範囲外です。
モノレポにはcli・dashboard・services・docs・examplesなど多数のサブプロジェクトがあり、全体の依存関係やビルド手順はMakefileやワークフローを個別に追わないと把握しきれません。
ダッシュボードのe2eテスト(dashboard/e2e配下)はUI操作を前提にしており、実際の管理画面の見た目や挙動はコードからの推測にとどまります。
PostgreSQLとGraphQLを軸に、Firebaseのような認証・ストレージ・サーバーレス関数込みのバックエンドをセルフホストしたい、あるいはCLIでローカル開発を素早く始めたいチームに向いています。CLIのサブコマンド構成(cmd/config, cmd/dev, clienv)や配布方法(npm optionalDependencies)、SDKの呼び出し形は実ソースから直接確認できており、README記載のnhost login/init/upという手順とコード構造は矛盾なく対応しています。ただしDocker起動後の実際の挙動やクラウド機能の細部までは、ソースの静的な確認だけでは断定できない点に留意してください。