使い慣れたスプレッドシートに偽装されたリレーショナルデータベース
すべての開発者はいつか、ビジネスやマネジメントがデータ作業のための便利なインターフェースを必要とする状況に直面します。通常、選択肢は限られています。面倒めな管理パネル(Django AdminやForest Adminなど)をデプロイするか、すべてをGoogle Sheetsに委ねるかのどちらかですが、一週間もすれば数式が壊れ、データ型が混在し、外部キーで2つのテーブルをリンクすることが噩梦になります。
最近、grist-coreを見つけました—リレーショナルデータベースと柔軟なスプレッドシートという2つの全く異なる世界を橋渡ししようとするオープンソースエンジンです。
https://github.com/user-attachments/assets/fe152f60-3d15-4b11-8cb2-05731a90d273
内部構造
内部を見ると、Gristは標準的なExcelクローンとは全く似ていません。クラシックなスプレッドシートでは、セルは独立しています:列内の1行目は数値、次の行は文字列、その下は数式かもしれません。Gristでは、列は厳密に型指定されており、SQLテーブルのフィールドのように機能します。
同時に、各ドキュメントは単なる通常のSQLiteファイルです。これは、データがプロプライエタリなストレージにロックされていないことを意味します。SQLiteを読み取れるユーティリティなら、エクスポートされた.gristファイルを直接開けます。バックアップやサーバー間のポータビリティの観点から、このアプローチは大幅に簡素化されます:ファイルを掴む—データベース全体を掴むことができます。
興味深い事実:フランスの政府機関(ANCTとDINUM)がコードベースに積極的に投資しており、プロジェクトはアクセシビリティ、ローカライゼーション、エンタープライズセキュリティに関連するコミットを継続的に受け取っています。
マクロや数式方言の代わりにPython
コードを書ける人にとって主なキラー機能は、純粋なPythonでの計算です。制限された構文や奇妙な拡張はありません。セル数式は標準ライブラリと 함께標準的なPython構文を受け入れます。
たとえば、リスト内包表記、文字列スライシング、正規表現、またはdatetimeモジュールなどを自由に使用できます。SUMやVLOOKUPなどの表計算関数に慣れている場合、それらも利用できますが、ロジックが複雑になるとPythonに切り替えることで神経を大幅に節約できます。
# Пример вычисления в колонке: вытаскиваем домен из email и форматируем
if $Email and "@" in $Email:
domain = $Email.split("@")[1].lower()
return f"Корпоративный: {domain}" if domain != "gmail.com" else "Личный"
return "Не указан"
コードは分離されたサンドボックスで実行されます。環境に応じて、LinuxではgVisor、macOSではネイティブjailbreak、Windowsにデプロイする場合はWebAssembly経由でPyodideを使用して分離を設定できます。
手動で数式を作成したくない場合は、組み込みのAIアシスタントがあります。OpenAIに接続したり、OpenRouter経由で他のモデルを設定したりできます(Claude 3.7 SonnetやLM Studio経由のローカルLLMを含む)。
データリレーションシップとビジュアルダッシュボード
AirtableやNotionでは、1つの画面にリンクされたビューの適切な設定が頻繁に不足しています。Gristでは、ワークスペースは複数のカードやウィジェットに分割され、クリックで互いにリンクできます:
- 左側のクライアントテーブルが右側の注文リストをフィルタリングします。
- 注文を選択すると、Markdownの説明と添付ファイルを含む詳細カードが即座に更新されます。
- 組み込みのカレンダー、チャート、集計テーブルウィジェットが、中間的な非表示シートを作成せずに指標をグループ化します。
双方向参照(LOOKUP)は箱から出してすぐに動作します:タスクをスプリントにリンクすると—スプリントは自動的にそのリンクされたタスクリストにタスクを追加されます。
细微なアクセス制御
多くのオープンソースのコード不要ツールはセキュリティ面で不足しており、「全か無か」のベースでアクセスを提供します。Gristでは、アクセスルールは個々のテーブル、行、列のレベルで定義されます。
アクセス条件は数式介して設定することもできます:
- マネージャーは、自分のメールがOwnerフィールドと一致する取引のみ見えます。
- 給与列は、特定のSSO属性を持つユーザーのみが表示できます。
- IsArchivedフィールドが設定されている場合、アーカイブされたレコードの編集をブロックします。
エンタープライズインストールでは、OIDC、SAML、プロキシ経由のフォワード認証(例:TraefikやAuthentik)がサポートされており、SCIMによるユーザープロビジョニングも可能です。
Dockerでのクイックスタート
1つのコマンドで、数分以内にローカルでエンジンを試すことができます:
docker run -p 8484:8484 -v $PWD/persist:/persist -it gristlabs/grist
起動後、ブラウザでhttp://localhost:8484を開きます。コンテナは最初の管理者セットアップのためにコンソールに生成されたブートキーを出力します。ウィザードをスキップして追加の質問なしで単一インスタンスを取得したい場合は、GRIST_SINGLE_ORG環境変数を渡すだけで済みます。
外部システムとの統合は、標準的なREST APIとアウトバウンドWebhookを介で行われます。さらに、Webhookは柔軟に設定可能で、特定の列が変更されたときや特定の論理条件が満たされたときにのみイベントをトリガーできます。
エディションの比較と制限事項
grist-coreリポジトリはApache 2.0ライセンスの下で配布されています。ベースDockerイメージgristlabs/grist-coreには、エンタープライズ機能のためのオプションのプロプライエタリコードが含まれていますが、デフォルトでは無効になっています。厳密に第三方を含むことのない排他的なフリーソフトウェアが必要な場合、開発者は別個のイメージgristlabs/grist-core-buildをビルドしています。
いくつかの機能は、純粋なコアgrist-coreから商用バージョンに移動されています。たとえば、ストリーミング監査ログ、組み込みメール自動化チェーン、AIクライアント用のネイティブMCPサーバーなどがそうです。ただし、標準的なREST APIを使用してコミュニティアダプター経由で同じClaudeを接続することを妨げるものは何もありません。
インターフェース翻訳はWeblateコミュニティを通じて管理されています:
このプロジェクト誰が恩恵を受けるか
Airtableの行制限やユーザーごとのサブスクリプション料金なしで自己ホスト型の代替を探しているなら、Gristは優れた候補に見えます。
内部CRM、在庫トラッカー、財務レジストリ、シンプルなバックオフィスパネルなどのニーズを完璧にカバーします。完全なリレーショナルデータモデル、Pythonスクリプトの柔軟性、自分のサーバー上のSQLiteファイルへの完全なコントロールが得られます。
ソースコードとドキュメントは公式リポジトリgristlabs/grist-coreで入手可能です。
関連プロジェクト