はじめに
本日、Obsidian 1.9.10でコアプラグインBasesが一般向けに公開された。公式サイトに則って現時点での使用方法をまとめておく。
β版のときの記事
Basesとは

既存のコミュニティプラグインDataviewに近い感覚だ。マークダウンファイルからプロパティを抽出しTableやCard表示する。Notion likeのデータベースを作成することができる。
Baseの作り方
baseファイルを作成する
コマンドパレット:
- コマンドパレットを開く。
- どちらかを選択
- Bases:Create new base:アクティブファイルと同じフォルダーにbaseを作成する。
- Bases:Insert new base:baseを作成し、現在のファイルに埋め込む。
ファイルエクスプローラー:
- ファイルエクスプローラーで、baseを作成したいフォルダーを右クリック
- New baseを選択

作成したbaseを開くとこのような見た目になる。
ファイルに埋め込む場合
baseファイルを埋め込む
![[File.base]]で他のファイルにbaseファイルを埋め込むことができる。デフォルトのビューを指定するには、![[File.base#view|View]]を使用する。
baseをコードブロックとして埋め込む
baseコードブロックとbases構文を使って、ノートに直接埋め込むこともできる。
```base
filters:
and:
- file.hasTag("example")
views:
- type: table
name: Table
```Views
1つのbaseファイル内に複数のviewを作成することができる。
Viewの追加

左上からViewを追加できる。
Table view

table viewは行の高さだけ設定できる。

table viewでは表示したプロパティを直接編集することができる。
Card view

Card viewは画像のプロパティを指定してカード状の表示になる。指定できるプロパティの書き方は下記のとおりだ。
- ローカルファイルへのリンク
"[[link/to/attachment.jpg]]" - 外部リンク(URL)
- カラーコード(
#000000)
その他アスペクト比や画像のfitのさせ方のオプションがある。
Filters

右上のFilterボタンからフィルターを書けることができる。baseファイルの全てのviewに適応するフィルターか、現在開いているviewのみに適応するフィルターか選ぶことができる。
種類は多種多様で、and/or/notに対応。組み合わせたFilter groupを作ることもできる。基本クリックと簡単な入力でできるようになっているが、</>を押して複雑なfunctionを直接記載することもできる。
Important
Newのボタンでフィルター条件に合致する新規ファイルを作成することができる!
Properties

チェックをいれることで表示させるプロパティを変更することができる。Add formulaでプロパティの組み合わせやfunctionを使用した表示が可能。
先程のカードビューで使用したimageというformulaは下記の通りだ。

Limit

表示数を制限したり、コピー、CSV出力ができる。
Functions
フィルターやforumulaを作る際に活用する。正確にはFunctions - Obsidian Helpに記載がある。下記はClaude Codeにまとめてもらったものになる。おそらく今後も追加される。
Global Functions
関数名 構文 説明 例 date()date(date: string): date文字列を解析してdateオブジェクトを返す date("2025-08-19")file()file(path: string | file | url): file指定されたファイルまたはパスのfileオブジェクトを返す file("path/to/file")if()if(condition: any, trueResult: any, falseResult?: any): any条件に基づいて結果を返す if(isModified, "Modified", "Unmodified")image()image(path: string | file | url): imageビューに画像を表示するimageオブジェクトを返す image("image.jpg")icon()icon(name: string): iconLucideアイコンをレンダリングする値を返す icon("arrow-right")max()max(value1: number, value2: number...): number提供された数値の最大値を返す max(1, 5, 3)min()min(value1: number, value2: number...): number提供された数値の最小値を返す min(1, 5, 3)link()link(path: string | file, display?: value): Link指定されたパスへのリンクオブジェクトを返す link("[[filename]]")list()list(element: any): List要素をリストでラップする list("value")now()now(): date現在の日時を表すdateオブジェクトを返す now()number()number(input: any): number値を数値として返す number("3.4")duration()duration(value: string): duration文字列を期間として解析する duration("1d")today()today(): date現在の日付(時刻は0)を返す today()
Any Functions
関数名 構文 説明 例 toString()any.toString(): string任意の値の文字列表現を返す 123.toString()isTruthy()any.isTruthy(): boolean値をブール値に変換する 1.isTruthy()
Date Functions
Dateフィールド
フィールド 型 説明 date.yearnumber 年 date.monthnumber 月(1-12) date.daynumber 日 date.hournumber 時間(0-23) date.minutenumber 分(0-59) date.secondnumber 秒(0-59) date.millisecondnumber ミリ秒(0-999) Date関数
関数名 構文 説明 例 date()date.date(): date時刻を除いたdateオブジェクトを返す now().date()format()date.format(format: string): stringMoment.js形式でフォーマットした日付を返す date.format("YYYY-MM-DD")time()date.time(): string時刻を返す now().time()relative()date.relative(): string現在時刻との相対的な表現を返す file.mtime.relative()isEmpty()date.isEmpty(): boolean常にfalseを返す date.isEmpty()
String Functions
Stringフィールド
フィールド 型 説明 string.lengthnumber 文字列の文字数 String関数
関数名 構文 説明 例 contains()string.contains(value: string): boolean文字列が指定された値を含むかチェック "hello".contains("ell")containsAll()string.containsAll(...values: string): boolean文字列がすべての値を含むかチェック "hello".containsAll("h", "e")containsAny()string.containsAny(...values: string): boolean文字列がいずれかの値を含むかチェック "hello".containsAny("x", "y", "e")endsWith()string.endsWith(query: string): boolean文字列が指定された文字列で終わるかチェック "hello".endsWith("lo")isEmpty()string.isEmpty(): boolean文字列が空かチェック "".isEmpty()replace()string.replace(pattern: string | Regexp, replacement: string): stringパターンを置換する "a,b,c,d".replace(/,/g, "-")lower()string.lower(): string小文字に変換 "HELLO".lower()reverse()string.reverse(): string文字列を逆順にする "hello".reverse()slice()string.slice(start: number, end?: number): string部分文字列を取得 "hello".slice(1, 4)split()string.split(separator: string | Regexp, n?: number): list文字列を分割してリストにする "a,b,c,d".split(",", 3)startsWith()string.startsWith(query: string): boolean文字列が指定された文字列で始まるかチェック "hello".startsWith("he")title()string.title(): stringタイトルケースに変換 "hello world".title()trim()string.trim(): string両端の空白を削除 " hi ".trim()
Number Functions
関数名 構文 説明 例 abs()number.abs(): number絶対値を返す (-5).abs()ceil()number.ceil(): number切り上げる (2.1).ceil()floor()number.floor(): number切り下げる (2.9).floor()round()number.round(digits?: number): number四捨五入する (2.5).round()toFixed()number.toFixed(precision: number): string固定小数点表記で文字列として返す (3.14159).toFixed(2)isEmpty()number.isEmpty(): boolean数値が存在しないかチェック 5.isEmpty()
List Functions
Listフィールド
フィールド 型 説明 list.lengthnumber リストの要素数 List関数
関数名 構文 説明 例 contains()list.contains(value: any): booleanリストが指定された値を含むかチェック [1,2,3].contains(2)containsAll()list.containsAll(...values: any): booleanリストがすべての値を含むかチェック [1,2,3].containsAll(2,3)containsAny()list.containsAny(...values: any): booleanリストがいずれかの値を含むかチェック [1,2,3].containsAny(3,4)isEmpty()list.isEmpty(): booleanリストが空かチェック [].isEmpty()join()list.join(separator: string): stringリストの要素を文字列として結合 [1,2,3].join(",")reverse()list.reverse(): listリストを逆順にする [1,2,3].reverse()sort()list.sort(): listリストをソートする [3,1,2].sort()flat()list.flat(): listネストしたリストを平坦化する [1,[2,3]].flat()unique()list.unique(): list重複要素を削除 [1,2,2,3].unique()slice()list.slice(start: number, end?: number): listリストの一部を取得 [1,2,3,4].slice(1,3)map()list.map(value: Any): list各要素を変換した新しいリストを作成 [1,2,3,4].map(value + 1)filter()list.filter(value: Boolean): list条件に合致する要素のみのリストを作成 [1,2,3,4].filter(value > 2)
Link Functions
関数名 構文 説明 例 linksTo()link.linksTo(file): booleanリンクが指定されたファイルにリンクしているかチェック link.linksTo(file)asFile()link.asFile(): fileリンクが有効なローカルファイルの場合、fileオブジェクトを返す link("[[filename]]").asFile()
File Functions
関数名 構文 説明 例 asLink()file.asLink(display?: string): Linkファイルのリンクオブジェクトを返す file.asLink()hasLink()file.hasLink(otherFile: file | string): booleanファイルが他のファイルにリンクしているかチェック file.hasLink(otherFile)hasProperty()file.hasProperty(name: string): booleanファイルが指定されたプロパティを持つかチェック file.hasProperty("tags")hasTag()file.hasTag(...values: string): booleanファイルが指定されたタグを持つかチェック file.hasTag("tag1", "tag2")inFolder()file.inFolder(folder: string): booleanファイルが指定されたフォルダーにあるかチェック file.inFolder("notes")
Object Functions
関数名 構文 説明 例 isEmpty()object.isEmpty(): booleanオブジェクトが空かチェック {}.isEmpty()keys()object.keys(): listオブジェクトのキーのリストを返す object.keys()values()object.values(): listオブジェクトの値のリストを返す object.values()
Regular Expression Functions
関数名 構文 説明 例 matches()regexp.matches(value: string): boolean正規表現が文字列にマッチするかチェック /abc/.matches("abcde")
Bases syntax
baseの中身はYAML形式のテキストとなっているので直接編集することも可能だ。Bases syntax - Obsidian Helpに構文のルールが記載してある。
ただ、基本的には構文を知らなくてもクリックと簡単な入力で動かすことができるようになっている。構文を知らないといけない時は、複雑なフィルターやプロパティの組み合わせを作りたい場合に限るだろう。もしくは構文ルールをLLMに読ませて書かせることもできるかもしれない。
おわりに
Basesの登場により、ObsidianでもNotionライクなデータベース機能が使えるようになった。これまでDataviewプラグインでやっていたことが、よりシンプルかつ直感的に操作できるのは大きな魅力だ。
特にNewボタンでフィルター条件に合致するファイルを瞬時に作成できる機能は、ノート管理のワークフローを大きく変える可能性がある。
Functionの数も今後増えていくだろうし、コミュニティプラグインとの連携も期待したい。BasesはObsidianの1つの転換点だろう。