次.インスタントdevデータベース提供によるJS開発


Next.js あなたが生産に期待する優れた機能を持つ反応アプリケーションを構築することが簡単になる本当にエキサイティングなフレームワークです.私は、ここで多くの詳細にここに行きませんNext.js documentation does that brilliantly , しかし、目立つもののうちの1つは、簡単な開発経験です.
使用によってcreate-next-app 変更を行うには、ブラウザでコードの変更を自動再読み込みする対話的なdevの経験を使用して、すぐに設定できます.次.他のAPIサーバを必要とせずにWeb APIを構築するためのサポートもあります.ASP.NET Core , Go’s net/http package ). それはあなたのフロントエンドを提供することができますし、APIのリクエストをすべて1つを処理します.
しかし、あなたのバックエンドAPIがデータベースからデータを要求する必要があるならば、どうですか?よく、これは十分なパッケージ経由で行うように簡単です serverless-mysql これで、データベースからMySQLデータベースへの接続を開始できます.依存関係を追加し、次のAPI呼び出しに応答してクエリを実行します.JSは、結果をフロントエンド(通常JSONとして)に戻します.簡単.

何か欠けている.


次.js自体は素晴らしいです.devの視点から簡単に環境とスタートコードを設定して取得するのは簡単です.
しかし、バックエンドデータベースを必要とするアプリケーションを構築することになると、物事は開発者として少しトリッキーになる.
生産においては、データベースを維持するために管理されているデータベース提供(またはDBA)の種類があります.あなたはいくつかの接続の詳細を与え、オフになる.
しかし、実際に変更を開始したいと思っているdevとして、これらの質問を自分で尋ね始めるかもしれません.
  • 私のマシンにデータベースエンジンをインストールする必要がありますか?
  • 私はそれをDockerコンテナで走らせるべきですか?
  • 私がDockerでそれを走らせるならば、どのように、私はコンテナ再起動の場合、私のデータを持続させますか?
  • データベースのインスタンスに接続するには、開発チームの残りの部分と共有しますか?
  • 私がデータのような生産を必要とするならば、どうですか?バックアップを復元するには長い時間がかかる.
  • あなたが次にセットしたならば.しかし、あなたはこのロードブロックをヒットしました、あなたは開発経験がこの点までどれくらい良いかについて欲求不満になるかもしれません.突然、あなたはあなたのdev環境と並んでstatutiveデータベースを維持することについて心配しなければなりません、そして、それは重要でありません.

    競技場を平らにする


    データベース環境の取得は、次の全体のscaffoldingとして簡単にする必要があります.JSアプリケーション.それで、我々はその現実を作ることに決めました.
    Spawn それは本当にあなたのdevとci環境にデータベースを含めることを容易にすることを目的として取り組んでいる新しいソリューションです.これは、データベース環境を取得する方法の周りの不確実性を除去する代わりに、あなたがそれらを上下に多くのように、インフラ上の任意の懸念なしにスピンを奨励する.
    本当にこれを視点に置くために、次にどのように卵が合うかを見ましょう.JSアプリケーション.
    あなたが議論するコードをチェックアウトしたい場合は、Githubリポジトリを確認することができますhere .

    フックのこと


    簡潔さのために、私はAをセットアップするチュートリアルに続きましたNext.js app with a MySQL Database That Builds and Deploys with Vercel . これは私があなたがチェックアウトすることを奨励する優れたチュートリアルです、しかし、我々は現在配備側で我々自身に関係していません.
    本当の質問は、どのようにしてデータベースをスピンして、次のAPIでフックするかです.JSは私達に利用できるか.
    まあ.Spawn はコマンドライン駆動である.このように、次のスクリプトスクリプトの直前に実行されるNPMスクリプトを設定できます.jsこのpredevスクリプトは一つのことを行いますSpawn data container と更新 .env.local APIが消費する接続の詳細ファイル.
    ここに、いくつかの断片がありますspawn.sh スクリプト
    if containersExist; then
        echo “Spawn data container already provisioned”
    else
        echo “Provisioning Spawn data container for dev”
        spawnctl create data-container --image $DATA_IMAGE \
          --name $CONTAINER_NAME -q
        echo “Spawn data container successfully provisioned”
    fi
    
    echo “Updating data container connection details in .env.local”
    
    db_conn_json=$(spawnctl get data-container $CONTAINER_NAME -o json)
    
    DB_HOST=$(echo $db_conn_json | jq .host)
    DB_PORT=$(echo $db_conn_json | jq .port)
    DB_USERNAME=$(echo $db_conn_json | jq .user)
    DB_PASSWORD=$(echo $db_conn_json | jq .password)
    
    cat << EOF > .env.local
    MYSQL_HOST=$DB_HOST
    MYSQL_PORT=$DB_PORT
    MYSQL_USERNAME=$DB_USERNAME
    MYSQL_PASSWORD=$DB_PASSWORD
    MYSQL_DATABASE=nextjs
    EOF
    
    これの最後に見ることができるように、私たちはデータベース接続の詳細を書く.環境変数ローカルファイル.これは私が既に持っていると仮定しますdata image 利用可能な(SQLスクリプトから作成することができるか、データのような生産を気にするならば、生産からの最新のバックアップ)、そして、そのデータイメージのコピーであるデータコンテナを作成します.このdata container 即座に作成されます-関係なく、データイメージのサイズです.
    私がここですることは絶対にない.代わりに、私のマシンにDockerやデータベースエンジンをインストールする必要があり、それを起動すると、接続を待って、それを通過するために正しい接続の詳細を把握し、通過するには、すべての私が行う必要がありますが、私はdevのデータベースと私は接続の詳細を持っている数秒後にスポーンを求めることです.
    これにより、データベースを含む全dev環境をブートストラップすることが非常に簡単になります.

    最高のビット?すべては、ソース管理にコミットされます.インストール後spawnctl , 私は私のマシンのリポジトリをチェックアウトすることができますyarn dev そして、私は私の次を得ました.JSアプリケーションのアップロードと実行、私のデータベースと即座に通信できるAPIによってバックアップ.新しいdevは、あなたのレポをクローンするように頼むのと同じくらい簡単です.
    卵は他の利点の束を持っているsave the state of my database as I work 私は誤って混乱していくつかのデータを削除する場合には、私も多くの保存ポイントを作ることができます私は改正の歴史を作成したい.同様に、私のチームの各devは、開発に使用するために独自の分離されたデータコンテナーを取得するので、単一のインスタンスを共有し、他の変更を上書きすることを心配する必要はありません.
    あなたがコードをより詳細に見ることを望むならば、あなたはGitHub repo .

    現在産卵する


    我々は現在、スポーンのベータユーザーを受け入れているので、このワークフローがあなたに興味がある何かのように見えるならsign up to get access here .