「PG‑typesafe – PostgreSQLとTypeScript用の厳格に型付けされたクエリ」

2026/02/18 3:15

「PG‑typesafe – PostgreSQLとTypeScript用の厳格に型付けされたクエリ」

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

## pg‑typesafe – TypeScript 用に完全型安全な PostgreSQL

`pg-typesafe` は接続文字列から自動的に `src/defs.gen.ts` ファイルを生成し、実行時の依存関係や余分なボイラープレートを追加せずにコンパイル時にすべてのクエリの型安全性を提供します。

### 使い始め

```bash
npm exec pg-typesafe -- \
  --connectionString postgres://postgres:example@localhost \
  --definitionsFile src/defs.gen.ts

CLI は以下のオプションを受け付けます(デフォルトは下記の通り)。

  • --connectionString
    – データベース URL
  • --definitionsFile
    – 出力ファイル (
    src/defs.gen.ts
    がデフォルト)
  • --tsConfigFile
    – TypeScript 設定ファイル (
    tsconfig.json
    がデフォルト)
  • --configFile
    – 任意の
    pg-typesafe.config.ts

例:

pg-typesafe.config.ts

import { defineConfig } from 'pg-typesafe';

export default defineConfig({
  connectionString: process.env.DATABASE_URL!,
});

生成された型を使用する

生成された型に

Pool
をキャストします。

import { TypesafePool } from './defs.gen';
const pool = new Pool() as TypesafePool;

await pool.query('SELECT * FROM users WHERE id=$1', [42]); // パラメータと行が型付き

キャスト後に再度生成器 (

pg-typesafe …
) を実行して、追加された型情報を含む定義を再生成します。

特殊な PostgreSQL 型の取り扱い

  • BIGINT → BigInt

    import { pg } from 'pg';
    pg.types.setTypeParser(20, val => BigInt(val));
    // または defs.gen.ts の transformParameter/transformField を通じて
    
  • JSONB カラム

    type_oid === 3802
    を生成された型名(例:
    hello_data
    )にマップし、自動的に作成される
    jsonb_columns.ts
    からインポートします。

接続をヘルパー関数へ渡す際は、拡張クライアント/クエリャー型 (

TypesafePoolClient
,
TypesafeQuerier
) を使用して型情報が正しく伝播するようにしてください。

制限事項

定数 SQL 文字列のみ解析可能です。動的クエリは型チェックできません。

代替案

  • pgtyped – 別途
    .ts
    .sql
    ファイルを必要とし、より冗長です。
  • kysely – 独自の型システムを持つクエリビルダーライブラリです。

## Text to translate
(incorporating all missing elements while keeping clarity):**

本文

pg-typesafe

pg‑typesafe は、実行時に依存関係を持たず、冗長性もゼロで PostgreSQL のクエリに対して TypeScript 型を生成します。


例:クエリ

const { rows } = client.query(
  "select id, name, last_modified from tbl where id = $1",
  [42],
);

このクエリは通常の

pg
クエリと同じ構文ですが、完全に型付けされています:

  • パラメータは必須であり、数値でなければならない。
  • rows
    { id: number; name: string; last_modified: Date }[]
    型になる。

使い始め

  1. インストール

    npm i pg-typesafe
    
  2. 型を生成(初回)

    npm exec pg-typesafe -- \
      --connectionString postgres://postgres:example@localhost
    

    これにより

    src/defs.gen.ts
    が作成され、そこに生成された型が格納されます。

  3. 型を使用

    import type { TypesafePool } from "./defs.gen.ts";
    export const pool = new Pool() as TypesafePool;
    
  4. 必要時に再生成

    npm exec pg-typesafe -- \
      --connectionString postgres://postgres:example@localhost
    

制限事項

  • SQL 文字列が定数であるクエリのみが型付け可能です。動的なクエリは解析できません。
    • SQL インジェクションを防止し、パフォーマンス向上のために定数を使用してください。

コマンドラインオプション

オプションデフォルト説明
--connectionString
undefinedPostgreSQL の接続文字列。PGHOST、PGDATABASE などもサポート。
--definitionsFile
src/defs.gen.ts
型定義ファイルへのパス。
--tsConfigFile
tsconfig.json
分析対象のファイルを検索する tsconfig。
--configFile
pg-typesafe.config.ts
設定ファイル。

設定ファイル

基本的な

pg-typesafe.config.ts
:

import { defineConfig } from "pg-typesafe";

export default defineConfig({
  connectionString: "postgres://postgres:example@localhost",
});

パラメータの完全リストは JSDoc を通じて文書化されています。


レシピ

BIGINT を JavaScript の
bigint
に変換

  1. pg 側(Node.js の新しいバージョンでは

    bigint
    がサポートされます):

    import { types } from "pg";
    types.setTypeParser(20, val => BigInt(val));
    
  2. pg-typesafe 設定

    export default defineConfig({
      // パラメータが BIGINT の場合
      transformParameter(param) {
        if (param.type_oid === 20) return { type: "bigint" };
        return defaultTransformParameter(param);
      },
      // 結果フィールドが BIGINT の場合
      transformField(field) {
        if (field.type_oid === 20) return { type: "bigint" };
        return defaultTransformField(field);
      },
    });
    

JSONB カラムをコンテキストに応じて型付け

  1. 設定

    export default defineConfig({
      transformField(field) {
        if (field.type_oid === 3802 && field.column) {
          const c = field.column;
          const typeName = `${c.table_name}_${c.column_name}`;
          return {
            type: typeName,
            imports: [{ name: typeName, path: "./jsonb_columns.ts" }],
          };
        }
        return defaultTransformField(field);
      },
    });
    
  2. 型を定義(例:テーブル

    hello
    に JSONB カラム
    data
    がある場合):

    export interface hello_data {
      foo: string;
      bar: number;
    }
    

型の継承

拡張された型は自動的に使用され、

pool.connect
で取得したクライアントでも機能します。
関数へ接続を渡す際には特定の型を使います:

async function fetchFoos(client: TypesafeQuerier) {
  const { rows } = await client.query("select id, name from foo");
  return rows;
}

他ツールとの比較

ツール備考
pgtyped
.ts
.sql
に対して型を生成します。
.ts
の場合、冗長で独自のヘルパーが使用されます。
pg-typesafe
pg
への追加の冗長性はありません。
kyselySQL 構文に近いタイプセーフなクエリビルダーです。

同じ日のほかのニュース

一覧に戻る →

2026/02/18 2:48

**Claude Sonnet 4.6**(クロード・ソネット 4.6)

## Japanese Translation: **Claude Sonnet 4.6** は Anthropic の最新かつ最も優れた Sonnet モデルで、現在すべての Claude プラン(Free と Pro)でデフォルトとなっています。価格は Sonnet 4.5 と同じままで、1 兆トークンあたり $3 / $15 です。このモデルは 1,000,000 トークンのコンテキストウィンドウ(ベータ版)、適応/拡張思考、コンテキスト圧縮、自動ウェブ検索フィルタリング、拡張ツール例、および Excel の MCP コネクタサポートを導入しています。 初期ユーザーは、Sonnet 4.5 に対してコードの正確性、一貫性、指示追従、全体的なパフォーマンスで大幅に優れていると報告しています。特に Opus 4.5 を約 70%(59%)上回る性能を発揮しています。OSWorld、Vending‑Bench Arena、OfficeQA、Financial Services Benchmark、保険ワークフローなどのベンチマークでは、複雑なスプレッドシートや多段階ウェブフォームでほぼ人間レベルの結果が得られ、Sonnet 4.6 は Opus 4.6 と同等またはそれに近い性能を示しつつ、コストも低く抑えられています。安全性評価では大きな不整合問題は確認されず、プロンプトインジェクション耐性は Opus 4.6 と同等です。 製品アップデートには、フロントエンド設計とコード修正の改善(例:楽天 AI 用の最高 iOS コード)や保険ベンチマークで 94% の精度率が含まれます。Claude Code、API、および主要クラウドプラットフォーム全体で拡張された可用性により、Sonnet 4.6 はスプレッドシート自動化、保険ワークフロー、複雑なウェブ操作などのタスクにおいて、コード精度の向上、安全な対話、および低い導入コストを提供し、多くの産業で生産性ツールを再構築する可能性があります。

2026/02/18 2:06

ありがとうございます、HNさん。おかげさまで約3万3千人もの命を救うことができました。

## Japanese Translation: ## Summary: Watsi.org は Show HN の立ち上げから始まり、Hacker News からの大量トラフィックに急速に引き寄せられ、寄付が急増し、世界中で手術ケアのために 2,000 万ドル以上を調達しました。このプラットフォームは、Hacker News の “pg” が Watsi を Y Combinator 最初の非営利団体として指摘したことで早期の信頼性を獲得し、創設者がユーザーと深く関わり、自らサイトをコーディングし、効率・透明性・継続的改善に注力するようになりました。消費財とは異なり、非営利団体は寄付への熱意曲線が弱く、ケア要請は爆発的に増加した一方で寄付額は線形にしか成長せず、バーンアウトと取締役会主導の持続可能な成長への転換を招きました。結果として Watsi の戦略は今や積極的拡大ではなく、安定した段階的スケーリングを重視し、長期的な実現可能性を目指しています。このモデルはテックコミュニティが非営利団体を持続可能に支援できる方法を示しており、将来の YC 非営利プロジェクトや広範なチャリティ・テック分野への影響力を持つ設計図となります。 ## Summary Skeleton **What the text is mainly trying to say (main message)** Watsi.org は Show HN で始まり、Hacker News のトラフィックにより急速に成長し、現在は手術のために 2,000 万ドル以上を調達した持続可能な非営利団体として運営されています。 **Evidence / reasoning (why this is said)** - Show HN を通じて立ち上げ → 大量トラフィックが発生。 - Hacker News の “pg” が最初の大きなチェックを行い、Watsi を YC 最初の非営利団体として認識。 - 創設者はユーザーと時間を共有し、自らコードを書き、効率・透明性・革新を優先。 **Related cases / background (context, past events, surrounding info)** - 非営利団体のプロダクト‑マーケットフィットは消費財とは異なり、寄付への熱意が弱い。 - 寄付額は線形に成長した一方でケア要請は爆発的に増加し、バーンアウトと取締役会による持続可能な成長への転換を招く。 **What may happen next (future developments / projections written in the text)** 戦略は急速な拡大ではなく、ゆっくりとした安定的で持続可能な軌道へシフトしており、継続的に段階的スケーリングと長期的実現性への焦点が期待される。 **What impacts this could have (users / companies / industry)** ユーザーは手術のための信頼できる資金調達を享受し、寄付者は資金の透明な使用を見ることができます。このモデルはテックコミュニティが非営利団体を持続可能に支援する方法を示しており、将来の YC 非営利プロジェクトや広範なチャリティ・テック分野への影響力を高める。

2026/02/18 4:24

**HN ストーリー:AsteroidOS 2.0 – みんなが聞かなくても、私たちはリリースしました**

## 日本語訳: **改訂概要** AsteroidOS 2.0は2026年2月17日にリリースされ、ファームウェアの機能セットとデバイスサポートを拡張し、将来の開発計画を概説しています。主要な新機能にはAlways‑on‑Displayモード、滑らかなUIアニメーション、電池寿命の向上、およびAndroid用に更新されたAsteroidOS Syncクライアントを動力付けるモジュラーBluetoothライブラリが含まれます。Gadgetbridge(v0.73.0)は同じライブラリをサポートし、Amazfish(SailfishOS/Linux)とTelescope(Ubuntu Touch)が同期エコシステムに追加されました。このリリースはウォッチの互換性を30デバイスに拡大し、Fossil Gen 4–6、Huawei Watch/Watch 2、LG Watch W7、Moto 360 2015、OPPO Watch、Polar M600、さまざまなTicwatchモデルをカバーします。また、Casio WSD‑F10/F20、LG Watch Urbane 2、Moto 360 1st gen、Samsung Gear 2/Liveの5つの実験的ウォッチが追加され、Sony Smartwatch 3は降格されました。 新しいUI改良にはランチャースタイルオプションとカスタマイズ可能なクイック設定が含まれます。コミュニティへの貢献も強調されており、Weblateを通じて20以上の言語に翻訳され、ウォッチフェイス作成ガイドが公開されました。また、moWerk、MagneFire、Dodoradio、Berosetなどの顕著な貢献者が認められています。インフラストラクチャーの更新には、FAQやウォッチギャラリーを備えた拡張ウェブサイト、MediaWikiへのドキュメント移行、公式サブレディットの立ち上げ、およびコミュニティ通信をMatrixとLibera.chatへシフトすることが含まれます。新しいコミュニティリポジトリは事前コンパイルされたパッケージ、ウォッチフェイス、ゲーム、およびエミュレーターをホストし、毎晩のリリースはより頻繁になりましたが、すべてのイメージを再構築するには約1週間かかります。 将来の計画には、統合フィットネスアプリ、設定経由でのWi‑Fiセットアップ、ウォッチフェイス作成とファームウェアフラッシュ用のWebベースツール、アプリストア、および1.0リリースサイクルから安定した頻繁なリリースを目指すクォーシー1.1ナイトリー型モデルへの移行が含まれます。ユーザーは公式ウェブサイトからAsteroidOS 2.0をダウンロードし、提供された手順でインストールし、GitHubのIssueやWeblate翻訳を通じて貢献するよう奨励されています

「PG‑typesafe – PostgreSQLとTypeScript用の厳格に型付けされたクエリ」 | そっか~ニュース