Show HN:Example が作成した CEL

(「Show on Hacker News」の略称として「Show HN」と表記し、Example によって作られた CEL を紹介するタイトルです。)

2026/02/18 23:05

Show HN:Example が作成した CEL (「Show on Hacker News」の略称として「Show HN」と表記し、Example によって作られた CEL を紹介するタイトルです。)

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

要約

Japanese Translation:


要約

Common Expression Language(CEL)は、開発者が単純な値、Protobufメッセージ、またはJSONオブジェクトに対して式を高速・移植性・安全に評価できるようにするものです。サンプルユーザーJSONオブジェクトを用いてCELの構文を示します。

  • フィールド
    name
    roles
    admin
    editor
    viewer
    )、
    age
    email
    created
    (タイムスタンプ)、
    email_verified
    (タイムスタンプ)
  • 基本比較
    user.age >= 18
  • 文字列関数
    user.email.endsWith("@example.com")
  • メンバーシップチェック
    "admin" in user.roles
  • 条件付き存在テスト
    user.roles.exists(r, r.startsWith("ad"))
  • リストフィルタリング
    user.roles.filter(r, r != "viewer")
    ["admin", "editor"]
  • 時間比較
    user.email_verified - user.created < duration("24h")
  • 論理 AND
    user.age >= 18 && "admin" in user.roles
  • 条件演算子
    user.age >= 18 ? "adult" : "minor"
  • マップ変換
    1. ロールと成人フラグのマップを作成
    2. 各ロールを昇格フラグ付きオブジェクトにマッピング
    3. 書き込みアクセスロールでフィルタリングし、結合

CELはすでにKubernetesのアドミッションコントロール、Google Cloud IAM条件、Firebaseセキュリティルール、Envoy Proxyルーティング、およびProtovalidate制約強制に利用されています。CELを採用することで、開発者とオペレーターは複数のクラウドサービス間でポリシーロジックを統一し、可読性を向上させ実行時オーバーヘッドを削減し、異なるプラットフォームでも一貫した動作を保証できます。

本文

CEL(Common Expression Language) は、シンプルな値、Protobuf メッセージ、または JSON オブジェクトに対して式を評価します。
CEL は高速で移植性があり、安全です。Kubernetes の承認制御、Google Cloud IAM の条件付け、Firebase のセキュリティールール、Envoy Proxy のルーティング、Protovalidate の制約ルールなどで利用されています。


CEL を一緒に探ってみましょう。まずは簡単な User メッセージから:

{
  "name":          "Alice",
  "roles":         ["admin", "editor", "viewer"],
  "age":           30,
  "email":         "alice@example.com",
  "created":       timestamp("2025-12-14T00:00:00Z"),
  "email_verified":timestamp("2025-12-14T18:30:00Z")
}

文字列と数値

基本的な比較: ユーザーは 18 歳以上ですか?

user.age >= 18   // 結果:true(bool)

ユーザーのメールドメインを文字列関数で確認します。

user.email.endsWith("@example.com")   // 結果:true(bool)

コレクション

ユーザーは特定のロールを持っていますか?

in
はリスト内のメンバーシップをチェックします。

"admin" in user.roles   // 結果:true(bool)

一致が完全でなくてもどうでしょうか?

exists()
は要素のいずれかが条件を満たすかをテストします。

user.roles.exists(r, r.startsWith("ad"))   // 結果:true(bool)

ユーザーは 3 つのロールを持っています—昇格したものだけに絞りたい場合は?

user.roles.filter(r, r != "viewer")   // 結果:["admin", "editor"](list)

タイムスタンプと期間

ユーザーはサインアップ後 24 時間以内にメールを確認しましたか?
CEL は時間をネイティブに扱います。2 つのタイムスタンプを減算して期間を取得し、比較します。

user.email_verified - user.created < duration("24h")   // 結果:true(bool)

論理演算子

論理演算子はチェックを単一の式に結合します。

user.age >= 18 && "admin" in user.roles   // 結果:true(bool)

条件演算子を使えば分岐ロジックが可能です。

user.age >= 18 ? "adult" : "minor"   // 結果:"adult"(string)

データの変換

CEL の式は任意の型を返します。
ユーザーから PII を除去したマップを構築しましょう。

{"roles": user.roles, "is_adult": user.age >= 18}   
// 結果:{"roles": ["admin", "editor", "viewer"], "is_adult": true}(map)

各ロールに昇格しているかどうかを付与します。

user.roles.map(r, {"role": r, "elevated": r != "viewer"})  
// 結果: [{"role":"admin","elevated":true},{"role":"editor","elevated":true},{"role":"viewer","elevated":false}](list)

map()
はフィルタリングも行えます—昇格したロールを選択し、書き込み権限を一度に付与します。

user.roles.map(r, r != "viewer", r + ":write")  
// 結果:["admin:write","editor:write"](list)

同じ日のほかのニュース

一覧に戻る →

2026/02/19 3:37

**「宇宙的にユニークなID」**

## Japanese Translation: > **概要:** > 本文では、真にグローバルなユニーク識別子は衝突を避けるために極めて長くなるべきだと主張しつつ、実際には短いランダムIDや追加の複雑性を伴う決定論的分散アルゴリズムが有効であることを示しています。 > 宇宙の熱死(約 10¹²⁰ 回の演算)に先立つ計算上の物理制限から、絶対安全性を確保するには約 10²⁴0 の可能性―すなわち約 798 ビットの ID 空間が必要です。実務では、122‑bit UUID‑v4 が現実的データサイズに対して天文学的に低い衝突リスクを提供します。 > 中央カウンタや「Dewey」階層方式などの決定論的手法はオブジェクト数に対し対数スケールで拡張されますが、Binary、2‑adic、Token などの代替木構造アプローチは最悪の場合線形増加します。典型的な使用では多くの場合対数スケールで振る舞います。シミュレーションにより、数百万ノードの場合、最大 ID 長は異なる定数を持つ log n で伸びることが示されています。 > この結果から、長いランダム ID(理論上の安全性を確保するためには ≥798 ビット、実務では 122‑bit UUID)が採用されればグローバルな調整を回避し衝突リスクを無視できることが示唆されています。決定論的手法は追加インフラストラクチャを必要とし、ストレージや通信オーバーヘッドを増大させる可能性があります。また、署名・誤り訂正・バージョン管理などの補完策がシステム間でデータ整合性を維持するために必要になる場合もあります。

2026/02/19 6:18

女性用サイズ

## Japanese Translation: ## 要約 この記事は、米国の女性服のサイズシステムが壊れている―欠陥があり、一貫性がなく排他的である―と主張し、多様な体型を反映したカスタマイズ可能なサイズチャートへの移行を訴えている。 「バニティサイズ」が測定値を膨らませる一方、ラベルは変わらずに残っていることから、普遍的な基準が存在しないと指摘する。歴史データでは、標準サイズ8のウエストに合う女性は10 %未満であるにもかかわらず、多くの商品はそのテンプレートを前提として作られている。ブランドごとのチャートは大きく異なり、バスト・ウエスト・ヒップの範囲が混乱しやすい。また、オンライン注文ではサイズ不一致時に返品手数料が発生するケースもある。 このシステムの起源は1940年代に遡り、若い白人女性を基準としていた点でASTMも偏見を認めている。研究では2021‑23年の国立健康統計センター(NCHS)データと、2025年7月時点のマス・マーケット、ファストファッション、高級品を含む主要ブランドのサイズチャート(「レギュラー」と「プラス」サイズのみ)を用いた。著者自身が58件以上の身体測定値を収集しカスタムパターンを縫製した経験も示され、サイズミスマッチが明らかになっている。 この記事は業界に対して、ティーンエイジャーがトゥインからアダルト服へ移行する際に「年齢アウト」させる代わりに柔軟で包摂的なサイズ設定を採用し、返品率の低減・顧客満足度向上、データ駆動型サイズ提供へのシフトを促すべきだと訴えている。

2026/02/19 1:46

テイルスケール・ピアリレーは、現在一般利用可能となりました。

## Japanese Translation: **概要:** Tailscale は Peer Relays を一般公開し、すべてのプラン(無料 tier も含む)で高スループットと低レイテンシを実現できる本番用リレー経路を顧客に提供します。新しいリレーは静的エンドポイント (`--relay-server-static-endpoints`) をサポートし、AWS Network Load Balancer などの制限付きクラウドロードバランサーの背後で実行できるようにすることで、自動検出が失敗した場合にも機能します。 パフォーマンス向上はロック競合の削減と複数インターフェース間での UDP トラフィックの賢い分散によって実現され、クライアントは最適な経路を選択できるようになります。Peer Relays は従来のサブネットルーターに取って代わり、Tailscale SSH と MagicDNS を使用したフルメッシュ展開をプライベートサブネット内でも可能にします。 観測性はさらに強化されます。`tailscaled_peer_relay_forwarded_packets_total` や `tailscaled_peer_relay_forwarded_bytes_total` などのメトリクスが Prometheus 用に公開され、`tailscale ping` コマンドではリレー遅延、信頼性、および到達可能性が表示されます。この機能はすべての Tailscale プランで利用でき、CLI と ACL グラントを介して有効化でき、既存のリレー設定と共存するよう設計されているため、段階的に導入できます。 Peer Relays はエンドツーエンド暗号化、最小権限アクセス、およびシンプルな運用という Tailscale のコア保証を維持しつつ、テイルネット全体でインテリジェントかつレジリエントなパス選択を追加します。

Show HN:Example が作成した CEL (「Show on Hacker News」の略称として「Show HN」と表記し、Example によって作られた CEL を紹介するタイトルです。) | そっか~ニュース