アップデート一覧に戻る
New releaseAug 19, 2026

kviklet v0.8.0

データベースクエリに対するプルリクエスト形式のレビュー/承認フロー。コンプライアンスを確保しつつ、エンジニアがスムーズに本番環境へアクセスできるようにします。

共有

Kviklet

Kviklet.dev | リリースノート | Discord

開発者の生産性を損なうことなく、本番環境への安全なアクセスを実現します。

Kviklet Kviklet

Kviklet(クイックレットと発音)は、本番データベースへのアクセスに四眼原則を適用し、個々のSQL文または時間制限付きのデータベースセッションに対して、プルリクエストのようなレビューと承認のワークフローを提供します。エンジニアは、すべてのクエリをDBAや運用チームに回すことなく、互いのリクエストをレビューし承認することができます。

Kvikletはセルフホスト型で、アプリケーションの状態管理用のPostgreSQLデータベースを備えたDockerコンテナとして動作します。Webインターフェースからリクエストの送信、レビュー、実行が可能です。オプションのエンタープライズライセンスにより、SAML認証、ロールベースのレビュー要件、ロール同期、APIキー、データベースプロキシ、およびAIエージェント向けのMCPサーバーが利用可能になります。エンタープライズライセンスはkviklet.devでお申し込みください。

対応データベースはPostgres、MySQL、MariaDB、MS SQL Server、MongoDBです。

アクセスモデル

Kvikletを既存のIDプロバイダーに接続することを推奨します。KvikletはOIDC(Google、Keycloakなど)またはSAML(エンタープライズ限定)によるSSO、およびLDAP認証(Active Directoryなど)をサポートしています。
ユーザーは、特定のデータベースユーザーにマッピングされた接続に対してリクエストを作成します。これらのリクエストは以下のいずれかです:

  • 単一クエリ:レビューのために提出された特定のSQL文。
  • 一時アクセス:複数の文を実行できる時間制限付きセッション。

設定に応じて、Kvikletが実行を許可する前に、リクエストは他のユーザーによってレビューおよび承認されます。

Kvikletはユーザーに代わってデータベースに接続します。接続のデータベースパスワードがユーザーに表示されることはありません。

管理者は、どのロールがどの接続にアクセスできるか、および実行にどのレビューゲートが必要かを設定できます。データベースレベルのアクセスは、基盤となるデータベースのRBACメカニズムによって管理されます。例えば、読み取り専用接続用に読み取り専用ロールを作成し、書き込み接続よりも少ないレビュー要件を割り当てることが可能です。

Kvikletは実行された文を記録し、ユーザーおよびアクセスリクエストに関連付けます。手動によるデータベースアクセスを完全にカバーするには、直接接続を制限し、手動アクセスはすべてKviklet経由でルーティングしてください。エンジニアは基盤となるデータベースの認証情報を受け取ったり共有したりする必要はありません。

追加のエンタープライズ機能は以下の通りです:

  • SAML:SAML認証のサポート。
  • プロキシ(Postgres、MariaDB、MySQL):一時パスワードを使用した承認済みの一時アクセスセッションを通じて、お好みのデータベースクライアントを利用できます。実行された文はKvikletの監査ログに記録されます。
  • ロールベースのレビューゲート:実行前に特定のロールからの承認を要求します。
  • ロール同期:IDプロバイダーのグループからユーザーロールを自動的に同期します。
  • APIキー:Kviklet APIへのプログラムによるアクセス。
  • MCPサーバー:Claude CodeやCodexなどのAIエージェントをKvikletに接続します。エージェントはユーザー自身の権限で動作し、同じレビューを経由します。
その他のスクリーンショット

リクエスト

すべてのデータリクエストが一か所に集約されます。本番データベースに対するオープンなPRのようなものです:

リクエスト リクエスト

ライブセッション

承認された一時アクセスリクエストは、ブラウザ上で直接ライブSQLセッションを開きます:

ライブセッション ライブセッション

監査ログ

実行されたすべての文が記録されます — レビュー済みの単一クエリとして実行された場合でも、ライブセッション内でも、データベースプロキシ経由でも同様です:

監査ログ 監査ログ

データベース/接続タイプ別の機能

ほとんどの機能はすべてのデータベースで利用可能です(SSO、LDAP、RBAC、レビュー/承認フロー、監査ログなど)。ただし、一部の機能は制限されています。単にまだ実装されていないか、その特定の目的に対して意味をなさないためです。次の表は、どの機能がどのデータベースタイプで利用可能かを示しています:

データベースステートメントレビュー一時アクセスプロキシ(ベータ)実行プラン
Postgres✓✓✓✓
MySQL✓✓✓✓
MariaDB✓✓✓✓
SQL Server✓✓✗✓
MongoDB✓✓✗✗
Kubernetes✓✗✗✗

セットアップ

KvikletはシンプルなDockerコンテナとして提供されます。 利用可能なバージョンはReleasesで確認できます。新しい機能を継続的に開発しているため、使用しているバージョンを定期的に更新することをお勧めします。
現在の最新バージョンはghcr.io/kviklet/kviklet:0.10.0です。:mainも使用できますが、時折誤ってバグのあるものをマージしてしまうことがあります。ただし、それは避けるように努めています。

クイックスタート

どのように動作するかを試してみたいだけの場合:

  1. 以下は最小限のdocker-compose.yamlです:

    クリックしてcomposeの内容を展開
    services:
      postgres:
        image: postgres:16
        restart: always
        environment:
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: postgres
          POSTGRES_DB: postgres
        ports:
          - "5432:5432"
        volumes:
          - ./postgres-data:/var/lib/postgresql/data
    #      - ./sample_data.sql:/docker-entrypoint-initdb.d/init.sql
    
      kviklet-postgres:
        image: postgres:16
        restart: always
        environment:
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: postgres
          POSTGRES_DB: kviklet
        ports:
          - "5433:5432"
        volumes:
          - ./kviklet-postgres-data:/var/lib/postgresql/data
    
      kviklet:
        image: ghcr.io/kviklet/kviklet:main
        ports:
          - "80:8080"
        environment:
          - SPRING_DATASOURCE_URL=jdbc:postgresql://kviklet-postgres:5432/kviklet
          - SPRING_DATASOURCE_USERNAME=postgres
          - SPRING_DATASOURCE_PASSWORD=postgres
          - [email protected]
          - INITIAL_USER_PASSWORD=admin
        depends_on:
          - kviklet-postgres
    
  2. docker-compose.yml を docker-compose up -d で実行します。Kviklet はポート 80 で起動するので、localhost にアクセスして試してみてください。管理者ログインは [email protected]、パスワードは admin です。

  3. docker-compose には、Kviklet で接続を設定できる追加の postgres データベースが含まれています。このデータベースにデータを入れるには、次の行のコメントを解除してください:

          - ./sample_data.sql:/docker-entrypoint-initdb.d/init.sql
    

    そして sample_data.sql ファイルを作成します:

    クリックして sample_data.sql の内容を展開
    CREATE TABLE Locations (
        Name VARCHAR(100) NOT NULL,
        Address VARCHAR(255) NOT NULL,
        City VARCHAR(100) NOT NULL,
        Country VARCHAR(100) NOT NULL,
        PostalCode VARCHAR(20) NOT NULL
    );
    
    alter table public.Locations
        owner to postgres;
    
    INSERT INTO public.Locations (Name, Address, City, Country, PostalCode) VALUES
    ('Central Park', '59th to 110th St', 'New York', 'USA', '10022'),
    ('Eiffel Tower', 'Champ de Mars, 5 Avenue Anatole', 'Paris', 'France', '75007'),
    ('Colosseum', 'Piazza del Colosseo, 1', 'Rome', 'Italy', '00184'),
    ('Sydney Opera House', 'Bennelong Point', 'Sydney', 'Australia', '2000'),
    ('Great Wall of China', 'Huairou District', 'Beijing', 'China', '101405');
    

DB セットアップ

Kviklet はクエリ、接続、承認などに関するメタデータを保存するために、独自の postgres データベース(または少なくともスキーマ)を必要とします。 公式イメージはこちらにあります: https://hub.docker.com/_/postgres、またはお好みのクラウドプロバイダーが提供するクラウドホスト版を利用することもできます。

kviklet コンテナを起動する際には、次の 3 つの環境変数を適切に設定する必要があります:

SPRING_DATASOURCE_PASSWORD = password
SPRING_DATASOURCE_USERNAME = username
SPRING_DATASOURCE_URL = jdbc:postgresql://[host]:[port]/[database]?currentSchema=[schema]

代替認証方法

  • IAM 認証: データベース接続に AWS IAM 認証を使用することが可能です。その場合はパスワードを省略し、ユーザー名のみを設定します。 また、次の環境変数も設定する必要があります:

    SPRING_DATASOURCE_IAMAUTH=true
    

    Kvikletは通常の場所(環境変数、インスタンスロールなど)から認証情報を読み込み、接続用のトークンを生成します。

カテゴリ