開発者ファーストのサーバーレスDB「Neon」とは?

普段のお仕事に役立つ普遍的なプログラミングTIPSや、業界で注目度が高い最新情報をお届けする「編集部ピックアップ」。
今回は、クラウド時代の新しいデータベース体験を提供するサーバーレスPostgreSQLサービス「Neon」をご紹介します。

はじめに

システム開発ではクラウド環境の利用が一般的になり、AWSやAzure、Google Cloudなどのマネージドデータベースサービスが広く使われています。しかし、こうしたサービスは多機能である一方、設定やコスト管理の面で複雑さを感じることも少なくありません。

こうした中、サーバーレスで利用できるPostgreSQLプラットフォームとして登場したのが「Neon(ネオン)」です。Neonはデータベース機能に特化したクラウドサービスで、インフラ一式に組み込まれた従来のマネージドDBと比べて導入・運用が手軽で、料金設計もシンプルです。標準的なPostgreSQL互換であるため、アプリケーションやクラウド基盤への依存を抑えやすく、いわゆるベンダーロックインの懸念も小さくできます。

また、フロントエンドフレームワーク「Next.js」の開発元として知られるクラウドプラットフォーム「Vercel」とも簡単に統合して利用できる点など、開発者にとっても非常に便利な特徴を持っています。

本記事では、開発者ファーストのサーバーレスデータベース「Neon」の特徴や使い方を、実際に試しながらご紹介します。

Neonとは?

Neon公式サイト

Neonは、PostgreSQL互換のサーバーレスデータベースサービスです。インフラ管理を完全に不要にし、利用がないときには自動でスリープする「Scale to Zero」、負荷状況に応じてコンピューティングリソースを動的に調整する「オートスケーリング」など、コスト効率と使いやすさを両立しています。さらに、開発者にとってもっとも嬉しいのがブランチ機能です。

システム開発では、本番(Production)・ステージング(Staging)・開発(Development)・テスト(Testing/QA)など同一構成のデータベース環境が不可欠ですが、Neonならブランチを切るだけで同じスキーマを即座に複製し、各環境を独立して検証できるプレビュー(Preview)環境も低コストで用意できます。

Neonの主な特長

オートスケーリング

Neonは負荷に応じてリソース量を瞬時に最適化し、開発者の手動調整や再起動の手間をなくします。リソースの上限値も設定できるため、予期せぬコストの心配もありません。開発者はインフラ管理から解放され、安心して開発に集中できます。

Scale to Zero

「Scale to Zero」は、データベースへのアクセスが一定時間途絶えると自動的にコンピュートを停止し、その間のコンピュート料金が発生しない仕組みです。必要になれば数百ミリ秒程度で即座に再起動されるため、常時稼働が不要な開発環境や検証プロジェクトではコストを大幅に削減できます。

ブランチ機能

Neonのブランチ機能は、「コピーオンライト」技術で本番DBを瞬時に複製します。開発者は本番環境を汚す心配なく、安全なテスト環境を即座に用意可能。CI/CDパイプラインに組み込めば、コード変更ごとのDB作成も自動化され、開発速度が格段に向上します。さらに、過去の任意の時点からデータを安全に復旧・分析することも可能。インフラ管理の手間をなくし、開発の速度・品質・安全性を同時に高める画期的な機能です。

開発者向けのドキュメント・ツール

多くの開発者がNeonを利用できるように、さまざまなフレームワークからの接続ガイドや言語ガイド、ORMツールガイドをはじめとした、技術文書やツールなどを多く提供しています。

Neon on Azure

Neonは、クラウドサービスとして利用するだけでなく、Azure Marketplaceを通じて既存のAzure環境にデプロイすることも可能です。組織で利用しているAzure環境上でNeonを運用することにより、Azureネイティブの管理機能が利用でき、SSO(シングルサインオン)や課金管理などを一元化できます。

Neonを使ってみる

それでは、実際にNeonを使ってみましょう。今回は無料アカウントを利用しますので、事前にアカウントを作成しておいてください。また、作成したデータベースを .NETアプリケーションから利用するため、Visual Studioもご準備ください。

アカウント・開発環境

  • Neonアカウント
  • Visual Studio 2022(Version 17.14.13)

プロジェクトの作成

Neonにログインすると、次の画像のようにデータベースを利用するためのプロジェクト作成を促すメッセージが表示されています。画面の案内に従って、[Create project]ボタンをクリックし、新しいプロジェクトを作成していきましょう。

プロジェクトの作成1

プロジェクトの作成画面に移ると、「プロジェクト名」、「Postgres version」の指定に加え、データベースを作成する先のクラウドベンダーとリージョンを指定するダイアログが表示されます。

残念ながら現時点(2025年9月)では、「AWS」、「Azure」ともに日本リージョンはありません。今回は日本から比較的近い「シンガポール」が選択可能な、「AWS」、「AWS Asia Pacific1(Singapore)」を選択しました。

プロジェクトの作成2

プロジェクトの作成が完了したら、次のようにプロジェクトのダッシュボードが表示されます。ご覧いただけるとわかるように、すでに「production」、「development」の2つのブランチが用意されています。

プロジェクトダッシュボード

また、プロジェクト作成後に一定時間操作を行わず、ダッシュボードの「Monitoring」ウィジェットを確認すると、Computeが「IDLE」状態になり、自動スリープ機能「Scale to Zero」が有効になっていることが分かります。

プロジェクトダッシュボード2

テーブルの作成

プロジェクトの作成が完了し、データベースが使用可能になったので、次にテーブルを追加してみましょう。サイドバーから「SQL Editor」を選択し、SQLエディター画面を表示します。

SQLエディター画面を表示

SQLエディターを表示すると、エディター上には、テーブルの作成やデータの挿入、SELECT文などのサンプルSQLがあらかじめ記述されています。

では、実際にサンプルSQL文を実行してみます。

3つのSQLが正しく実行され、テーブルの作成、データの挿入、そしてSELECT文によるデータの取得まで問題なく行うことができました。

Neonでは、作成したテーブルなどを参照するために「Tables」機能が用意されています。この機能は、データベースのUI操作が可能なWebアプリ「Drizzle Studio」によって提供されており、画面上では「Database Studio」として表示されています。「Database Studio」を利用することで、画面上からレコードの追加・更新・削除、データのフィルタリング、カラムの追加や削除、テーブルの削除や初期化、さらにデータを.jsonや.csv形式でエクスポートすることも可能です。

Database Studio

AIアシスタントを使ってSQLを生成

さきほどは、あらかじめ設定済みのSQLを実行してテーブルの作成、データ挿入、データ取得など一連の動作を試しましたが、Neonの機能のひとつでもある、AIアシスタント機能を利用してSQLを生成してみたいと思います。

作成を依頼する内容は以下の通りです。

請求書を管理するためのテーブルを作成
サンプルとなるデータを10行追加
作成したテーブル全件をSELECT文で取得、また、プライマリキーでソートして

さっそく実行してみましょう。

テーブルのフィールドやデータについては細かく指定していないため、請求書を管理するテーブルとしてはやや情報が不足している印象もありますが、「顧客名」、「金額」、「発行日」、「支払期日」、「支払いステータス」など、最低限必要な項目は網羅されています。また、サンプルデータも各フィールドに適した内容が設定されていることが分かります。

今回は簡単なテーブルの作成のみを依頼しましたが、指示内容を詳しくすることで、さらに実用的なテーブルの作成も可能になりそうです。

データベースやSQLの知識がないとテーブル設計は難しいものですが、AIアシスタントを活用すれば自然言語でテーブルを作成できるため、非常に強力な機能だと実感しました。

.NETアプリから利用する

ここまで、Neonの基本的な使い方を試してみました。ここからは、フレームワークを利用してNeonに接続する方法について試していきます。

Neonでは、次のように「Next.js」などフロントエンドフレームワークをはじめとした、さまざまなフレームワークからNeonに接続するための手順が解説されています。今回はこの中から「Entity Framework(Core)」を利用してみます。

フレームワークからの接続

「Entity Framework(Core)」は、Microsoftが開発したオープンソースのオブジェクトリレーショナルマッパー(ORM)で、 .NET向けのORMツールです。そのため、Windows Formsアプリなどの .NETアプリケーションからNeonを利用することができます。

.NET プロジェクトの作成

それでは、VisualStudioから .NETプロジェクトを作成していきます。今回は、次の画像のように「ASP.NET Core Web API」のプロジェクトテンプレートを利用します。

.NETプロジェクトの作成1

プロジェクト名、保存場所、フレームワークを指定し、[作成]ボタンを押します。今回プロジェクト名は、「NeonDotNetWebAPI」としました。

.NETプロジェクトの作成2

Entity Framework Coreツールのインストール

プロジェクトを作成後、以下のように「Entity Framework Coreツール」をVisualStudio開発者用Powershellよりインストールします。

dotnet tool install --global dotnet-ef
Entity Framework Coreツールのインストール

コード実装

ここから、コード実装を行っていきます。まず、プロジェクトのデフォルトで用意されている次の「Controllers\WeatherForecastController.cs」、「WeatherForecast.cs」2つのファイルを削除します。

既存ファイル削除

続いて、次の3つのクラス「Invoices.cs」、「InvoicesController.cs」、「ApplicationDbContext.cs」を追加します。

クラス追加

追加したクラスのコードは以下の通りです。請求書の情報を管理するために「Invoices」モデルを定義し、Web APIとして外部から操作できるように「InvoicesController」を実装しています。さらに、データベースとのやり取りを行うための「ApplicationDbContext」も追加しています。

using System.ComponentModel.DataAnnotations;

namespace NeonDotNetWebAPI.Models
{
    public class Invoices
    {
        public int Id { get; set; }
        public string? BillNo { get; set; }
        public string? SlipNo { get; set; }
        public string? CustomerId { get; set; }
        public string? CustomerName { get; set; }
        public string? Products { get; set; }
        public int Quantity { get; set; }
        public decimal UnitPrice { get; set; }
        public DateTime? DeliveryDate { get; set; }
    }
}
using NeonDotNetWebAPI.Data;
using NeonDotNetWebAPI.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;

namespace NeonDotNetWebAPI.Controllers
{
    [ApiController]
    [Route("api/[controller]")]
    public class InvoicesController : ControllerBase
    {
        private readonly ApplicationDbContext _context;

        public InvoicesController(ApplicationDbContext context)
        {
            _context = context;
        }

        [HttpGet]
        public async Task<ActionResult<IEnumerable<Invoices>>> GetInvoices()
        {
            return await _context.Invoices.ToListAsync();
        }

        [HttpPost]
        public async Task<ActionResult<Invoices>> PostInvoices(Invoices Invoices)
        {
            _context.Invoices.Add(Invoices);
            await _context.SaveChangesAsync();
            return CreatedAtAction(nameof(GetInvoices), new { id = Invoices.Id }, Invoices);
        }
    }
}
using Microsoft.EntityFrameworkCore;
using NeonDotNetWebAPI.Models;

namespace NeonDotNetWebAPI.Data
{
    public class ApplicationDbContext : DbContext
    {
        public ApplicationDbContext (DbContextOptions<ApplicationDbContext> options)
            : base(options)
        {
        }

        public DbSet<Invoices> Invoices { get; set; } = default!;
    }
}

接続文字列の追加

続いて、「appsettings.json」ファイルに、Neonの接続文字列を追加していきます。

Neonのダッシュボードを開き、[Connect]ボタンを押すと、データベース接続情報ダイアログが表示されます。以下の青枠のように、今回利用するフレームワーク「 .NET」を選択し、「Connection string」から接続文字列を取得します。

接続文字列の取得

取得した接続文字列を「appsettings.json」ファイルに、次の強調表示箇所に追加します。

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*"
 ,"ConnectionStrings": {
    "InvoicesDbConnection": "取得した接続文字列を設定します"
  }
}

Neon接続用のミドルウェアの追加

最後にNeonに接続するためのミドルウェアを、「Program.cs」に追加します。以下の強調箇所を追加してください。この設定により、コントローラーなどからApplicationDbContextを通じたデータベース操作が可能になります。

using Microsoft.EntityFrameworkCore;
using NeonDotNetWebAPI.Data;
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers();
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseNpgsql(builder.Configuration.GetConnectionString("InvoicesDbConnection") ?? throw new InvalidOperationException("Connection string 'InvoicesDbConnection' not found.")));
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.Run();

Entity Framework Coreを使ったマイグレーション作業

ここまででWebアプリケーションの実装は完了しました。最後に、今回使用する「Invoices」テーブルをNeon上に作成します。Entity Framework Coreには、 .NETプロジェクトのデータモデルとデータベースのスキーマを整合させるための「マイグレーション」機能が用意されています。

この機能により、既存データを保持したまま、アプリケーションのデータモデルとデータベースを同期しつつ、テーブル定義を段階的に更新できます。

今回はデータベースにまだテーブルが存在しないため、マイグレーションを適用すると、Neon上にInvoicesテーブルが作成されます。

それでは、VisualStudio開発者用Powershellを利用して、以下のコマンド実行します。

dotnet ef migrations add InitialCreate

コマンドを実行すると、以下のように、プロジェクト内に「Migrations」フォルダが作成され、データベース同期用のコードが自動生成されます。

マイグレーションコード自動生成

続いて、以下のコマンドを実行し、実際にNeon上にテーブルを作成します。

dotnet ef database update

実行すると、Microsoft.EntityFrameworkCore.Database.Commandを介してデータベースへSQL文が発行されていることが確認できます。

マイグレーションの実行

コマンド実行後、Neon上のデータベースを改めて確認すると、「Invoices」テーブルが作成されているのが分かります。

Neonでテーブル生成を確認

動作確認

ここまででWebアプリケーションの作成とNeonでのテーブル作成がすべて完了しました。続いて、デバッグ実行で動作を確認しましょう。

アプリケーションを起動すると、ASP.NET Core Web API プロジェクトに標準で組み込まれているSwagger UIが表示されます。この画面からWeb APIの動作を確認できます。

動画でご覧いただけるように、POSTリクエストでテーブルにデータを追加し、GETリクエストでそのデータを取得できることがわかります。

さらに、Neonの管理画面でテーブルを確認すると、POSTリクエストで送信したデータが保存されていることがわかります。この結果から、実行中のアプリケーションによってNeonのデータベースへ正しくデータが書き込まれたことを確認できました。

さいごに

今回は、開発者ファーストのサーバーレスPostgreSQLサービス「Neon」をご紹介しました。データベース環境の準備は、オンプレミス・クラウドを問わず、本番・テスト・開発など同一構成の環境を用意する必要があるため、どうしてもコストがかかりがちです。しかし、「Neon」を利用することで、これらの環境構築にかかる時間やコストを大幅に削減でき、さらにクラウドサービスとして気軽に利用できる点も大きな魅力です。

今回は .NETアプリで試してみましたが、NeonはフロントエンドフレームワークやさまざまなORMツールからも利用できるため、技術スタックを選ばず柔軟に活用できます。

データベース環境の準備にお悩みの方は、ぜひ本記事を参考に、一度お試しください。

メシウスでは業務アプリケーション開発の工数削減に役立つ高機能なJavaScriptライブラリを提供しています。

メシウスのJavaScriptライブラリ

無償のトライアル版や、ブラウザ上で手軽に試せるデモアプリケーションも公開しているので、こちらも是非ご覧ください。

\  この記事をシェアする  /