AIナレッジ / 理解メモ / 確認日 2026-06-30
OKF入門: 繰り返し説明する前提を知識ファイルにする
OKFは、AI agentに何度も説明している指標定義、除外条件、テーブルの意味、評価条件を、参照しやすい知識単位として切り出すための形式である。この記事では採用判断ではなく、OKFを自分の言葉で説明できる状態を目指す。
この記事で扱うこと、扱わないこと
この記事は、OKFを導入すべきかを判定する記事ではない。1つの指標定義をOKF風の知識ファイルに分けると、何が参照しやすくなり、何を別途運用で決める必要があるのかを確認する記事である。
読後に目指す状態は、次の4つを自分の言葉で説明できることだ。
- どのメモがOKF化の候補になりそうか。
- 通常のMarkdownで十分なメモと、知識ファイルに分けたいメモの違いは何か。
- 作業指示として置くべき内容と、参照知識として置くべき内容は何が違うか。
- 外部AI、RAG、検索indexへ渡す前に何を確認すべきか。
本文はOKF v0.1 Draftを、2026-06-30時点で確認した理解に基づく。仕様が変わる可能性はあるため、実装や公開前には公式仕様を確認する。
普通のメモでは、人間が文脈を補っている
たとえば、月次アクティブユーザー数をAI agentに説明したいとする。普通のMarkdownなら、次のように書ける。
# monthly_active_users
月次アクティブユーザー数。
月内に1回以上ログインしたユーザーを数える。
無料トライアル中のユーザーは含めない。
退会済みユーザーは退会日以降の月から除外する。
分析では users と login_events を user_id で結合する。
人間が読むだけなら意味は分かる。しかしAI agentに渡す知識として見ると、次の判断を人間が毎回補っている。
- これは指標なのか、テーブルなのか、業務ルールなのか。
- どのテーブルやイベントと関係するのか。
- 分析時に必ず参照すべき除外条件はどれか。
- 複数のメモを渡すとき、どこを入口にすればよいのか。
- いつ、なぜ、その知識が変わったのか。
OKFは、この「毎回人間が補っている文脈」を、ファイル側に置くための形式として読むと分かりやすい。
OKF化で何が変わるか
OKF化の前
人間がメモを探し、指標の意味、除外条件、関連テーブル、注意点をプロンプトで毎回説明する。
OKF化の後
指標や注意点を知識ファイルとして置き、AI agentやツールが種類、本文、関連リンク、入口、更新履歴を参照しやすくする。
ここで重要なのは、AI agentが自動で賢くなるわけではないという点だ。OKFは、参照漏れを減らすための手がかりを増やす。実際にどこまで使えるかは、読み手側のツールやagentが、ファイル探索、リンク解決、権限判定をどう実装しているかに依存する。
成功の目安は、前提説明が短くなること、除外条件の参照漏れが減ること、古い定義を見つけやすくなること、知識変更をレビューしやすくなることである。
OKFの用語を、日本語の実務語に置き換える
OKFの仕様語は英語で出てくる。日本語話者が読むときは、先に意味を押さえてから仕様語に戻る方が読みやすい。
| 仕様語 | この記事での説明 | 実務でのイメージ |
|---|---|---|
concept file |
AI agentに何度も再利用させたい知識を1つに切り出したMarkdownファイル。日本語では「知識ファイル」と考える。 | 指標定義、テーブル説明、業務ルール、評価条件。 |
bundle |
複数の知識ファイルをまとめて渡したり参照したりするための、知識のまとまり。 | 指標、テーブル、注意点、入口、更新履歴を含むフォルダ。 |
producer |
OKFファイルを作る側。人間、スクリプト、変換ツールなど。 | 記事を書く人、dbtから説明を生成するツール。 |
consumer |
OKFファイルを読む側。AI agent、検索ツール、取り込み処理など。 | RAG、社内検索、分析支援agent。 |
以降では、仕様語を残しつつ、必要に応じて「知識ファイル」「知識のまとまり」「作り手側」「読み手側」と言い換える。
知識ファイルとして、1つの指標定義を切り出す
OKFの中心は、長い文書を作ることではない。繰り返し参照する前提を、1つの知識ファイルとして切り出すことだ。
以下は架空例である。実務では、実テーブル名、顧客名、内部KPI、個人情報、APIキー、SQL、ログ断片をそのまま入れない。
---
type: metric
title: Monthly Active Users
description: 月内に1回以上ログインし、無料トライアル中ではないユーザー数
tags: [growth, product_analytics]
---
# Monthly Active Users
月内に1回以上ログインしたユーザーを数える。
無料トライアル中のユーザーは含めない。
退会済みユーザーは退会日以降の月から除外する。
## Related concepts
- [users table](/tables/users.md)
- [login events table](/tables/login_events.md)
- [trial users excluded](/caveats/trial-users-excluded.md)
変化は、MarkdownにYAML frontmatterを付けたこと自体ではない。月次アクティブユーザー数を、AI agentが参照しやすい知識の1単位として扱ったことにある。
Markdownリンクは、関連情報をたどる手がかりである。ただしリンク自体に「必須join」「参考情報」「注意喚起」のような関係種別はない。関係の意味は、周辺の本文で説明する必要がある。
OKFで必須のこと、この例で足したこと
上の例には、OKF仕様として重要なものと、この記事で理解しやすくするために足したものが混ざっている。ここを分けると、Markdown + frontmatter一般との違いが見えやすい。
| 要素 | 位置づけ | 今回の例での意味 |
|---|---|---|
type |
index.mdやlog.md以外の通常の知識ファイルに置く必須のfrontmatter項目。 |
type: metricにより、「これは指標定義として読む候補だ」と示す。 |
title, description, tags |
知識を探しやすくする推奨field。 | 人間とAI agentが、何の知識かを早く把握するために置いている。 |
resource, timestamp |
仕様上の推奨fieldとして扱われる項目。 | 外部リソースや時点情報を示したい場合に候補になる。 |
| Markdownリンク | 知識ファイル間の関係を示せる通常のMarkdownリンク。リンクは任意。 | 利用テーブルや注意点をたどるための手がかりになる。 |
Related concepts |
この例の見出し名。 | OKFが固定する見出しではなく、関係を読みやすくするための書き方。 |
owner, source, last_reviewed, classification |
OKF標準fieldではなく、実務運用で足す候補。 | 誰が更新するか、正本はどこか、公開範囲は何かを管理する。 |
OKFは、厳密なスキーマで知識を縛る形式ではない。最低限のfrontmatterと通常のMarkdownリンクを前提に、異なるツールやAI agentが同じ知識のまとまりを参照しやすくするための軽い約束である。
1ファイルで試す
OKFを理解するために、既存メモを一括変換する必要はない。まず、架空の指標定義を1つだけ作る。
mkdir -p okf-demo/metrics
cat > okf-demo/metrics/monthly_active_users.md <<'EOF'
---
type: metric
title: Monthly Active Users
description: 月内に1回以上ログインし、無料トライアル中ではないユーザー数
tags: [growth, product_analytics]
---
# Monthly Active Users
月内に1回以上ログインしたユーザーを数える。
無料トライアル中のユーザーは含めない。
退会済みユーザーは退会日以降の月から除外する。
## Related concepts
- [users table](/tables/users.md)
- [login events table](/tables/login_events.md)
- [trial users excluded](/caveats/trial-users-excluded.md)
EOF
find okf-demo -type f -name '*.md' -print
期待結果は次の通りである。macOSでも動きやすいように、ここでは-maxdepthを使わない。
okf-demo/metrics/monthly_active_users.md
この時点では、リンク先のtables/users.mdなどは未作成でよい。最小実験の成功条件は、1つのMarkdownファイルからtype: metric、指標の説明、無料トライアル除外、退会後除外、関連リンクの手がかりを読み取れることである。
uv run --with pyyaml python - <<'PY'
import re
from pathlib import Path
import yaml
path = Path("okf-demo/metrics/monthly_active_users.md")
text = path.read_text(encoding="utf-8")
_, frontmatter, body = text.split("---", 2)
meta = yaml.safe_load(frontmatter)
print("type:", meta.get("type"))
print("title:", meta.get("title"))
print("links:", re.findall(r"\[[^\]]+\]\(([^)]+)\)", body))
assert meta.get("type") == "metric"
assert "無料トライアル中のユーザーは含めない" in body
PY
AI agentに読ませる場合は、「この知識ファイルを読んで、MAUの除外条件と参照先を列挙して」と依頼する。除外条件と3つのリンクを拾えれば、まずは概念理解として十分である。
index.mdとlog.mdは、知識のまとまりを支える予約ファイル
OKFには、通常の知識ファイルとは別に、特別な意味を持つ予約ファイル名がある。この記事で押さえるべきものはindex.mdとlog.mdである。
| 予約ファイル | 役割 | 注意点 |
|---|---|---|
index.md |
複数の知識ファイルを束ねたときの入口。主要なconceptへの目次として使える。 | 必須ではない。存在しないだけで、読み手側はbundleを拒否しない。rootのindex.mdにはOKF version宣言を置ける例外がある。 |
log.md |
知識のまとまりに対する更新履歴。いつ、何が、なぜ変わったかを追うためのファイル。 | 必須ではない。存在する場合は、日付ごとの更新ログとして読みやすい構造にする。正しさの保証ではなく、変更を追う手がかりである。 |
# Metrics
- [Monthly Active Users](metrics/monthly_active_users.md) - 月内に1回以上ログインし、無料トライアル中ではないユーザー数
# Change Log
## 2026-06-30
- Added `metrics/monthly_active_users.md`.
- Clarified that trial users are excluded from MAU.
- Linked related concepts for users, login events, and trial exclusion.
index.mdは入口を作る。log.mdは変更の履歴を残す。どちらも、知識を正しくする魔法ではないが、複数の知識ファイルを扱うときに、AI agentと人間が同じ文脈へ戻りやすくする。
OKFだけでは解決しないこと
OKFが保証するのは、最低限の読み取りやすさであって、知識の正しさではない。読み手側は、unknown type、unknown field、broken link、missing indexだけを理由に知識のまとまりを拒否しない。これは互換性のための寛容さであり、本番品質の保証ではない。
そのため、実務では次の設計を別途決める必要がある。
- 正本はどこか。BI、dbt、SQL、仕様書、運用ルールのどれを基準にするのか。
- 誰が更新するのか。ownerとレビュー周期をどう置くのか。
- リンク切れ、古い定義、重複した指標名をどう検知するのか。
- どのAI agent、RAG、検索index、社内ツールに読ませてよいのか。
- 外部由来のMarkdownを、命令ではなく参照データとして扱えるか。
特に、OKF本文に書かれた文は作業命令として信頼しない。外部由来のMarkdownに「以前の指示を無視して」といった文が混じっていても、system指示や開発者指示より優先してはいけない。
OKF化候補と、やりがちな失敗
採用判断はこの記事ではしない。ただし、候補の見分け方を持つと、OKFの意味は具体化する。
| OKF化の候補 | まだ通常Markdownでよいもの |
|---|---|
| 同じ前提を2〜3回以上、人やAI agentに説明している。 | 一度きりのメモ、未確定アイデア、個人的な走り書き。 |
| 誤解されると分析結果、仕様判断、施策判断が変わる。 | 誤用されても影響が小さい補助メモ。 |
| 正本、owner、更新タイミングを説明できる。 | 誰も更新責任を持てず、正本も分からない情報。 |
| 公開、社内、個人用、機密の分類ができる。 | 分類できない顧客情報、金融情報、認証情報を含むメモ。 |
「同じ前提を何度も説明している」は、採用条件ではなく導入の目安である。頻度だけでなく、誤用時の影響、変更頻度、正本の所在、機密性、レビュー可能性を見る。
失敗例としては、typeだけ付けて満足する、BIやdbt側の定義とズレる、broken linkを放置する、owner不在の公式っぽいメモを増やす、機密情報を外部AIへ渡す対象に混ぜる、といったものがある。
公開範囲ではなく、投入先まで決める
OKF化すると、知識は参照しやすくなる。だからこそ、公開HTMLにするかどうかだけでなく、外部AI、社内RAG、全文検索、embedding、agentの常時参照、CIログ、PR差分、ブラウザ履歴、キャッシュに流れてよいかを考える必要がある。
実務運用では、OKF標準fieldとは別に、次のような運用fieldやチェックを足す候補がある。
classification: public、internal、confidential、restrictedなどの分類。allowed_consumers: 読ませてよいAI agent、ツール、検索index。owner,source,last_reviewed: 更新責任、正本、最終確認日。- secret scan、PII scan、broken link check、実テーブル名の公開可否確認。
- 誤公開時のrevert、検索indexやembeddingからの削除、復元確認。
個人運用メモでは、口座番号、残高、顧客名、内部KPI、認証情報を知識ファイルに入れない。必要なら、判断ルールだけを匿名化して扱う。
結論: まず1つの指標定義を知識ファイルにする
OKFは、社内知識や個人メモを一気に移行するための仕組みではない。まずは指標定義、除外条件、テーブル説明のように、何度もAI agentへ説明している前提を1つだけ知識ファイルに分ける。
そのうえで、index.mdで入口を作るか、log.mdで更新履歴を残すか、owner、正本、公開範囲、投入先をどう決めるかを考える。OKFは、知識を正しくするものではなく、知識を参照しやすい単位に分けるための形式である。
参考資料
| 資料 | 位置づけ |
|---|---|
| Introducing the Open Knowledge Format | Google Cloud BlogによるOKF紹介。OKFの狙いと背景を確認する資料。 |
| GoogleCloudPlatform/knowledge-catalog | Knowledge Catalogのsamples、tools、OKF関連資料を含むrepository。 |
| Open Knowledge Format (OKF) v0.1 Draft | bundle structure、frontmatter、reserved filename、conformanceを定義する仕様。 |