Jazzと読書の日々

iPadを筆記具として使う方法を模索します

今まで書いたノートの枚数をおぼえているのか

答:dataviewでObsidianの月別ノート数をカウントします。

蔵書データベース

データベースのファイル数を数えたら、買った本の冊数を月ごとに集計できるかなと。 dataviewでできそうに思ったけど、組み立てようとしたら途中でわからなくなって放っていました。 「月ごと」ってどう絞り込むんだろう。

別の文脈で x.cday.month という月だけ抜き出す方法を見つけたので、これを応用すれば判定できそうだ。 再度チャレンジしてみます。

Notes.md

dataviewの中でループして配列を作ります。

```dataviewjs
const FOLDER = ""

const notes = []
for(i=0; i<12 ; i++){
  const m = moment().subtract(i, "month")
  const year = m.format("YYYY")
  const month = m.format("MM")
  const d = dv.pages(`"${FOLDER}"`).file
    .filter(x => x.cday.month == month && x.cday.year == year)

  notes.push([`${year}/${month}`, d.length, `<progress value=${d.length} max=100></progress>`])
}
dv.table(["月別", "ノート数", ""], notes)
```

変数FOLDERに対象フォルダを設定すれば蔵書にも使えます。

使い方

progressのmaxを100にしているので、100を超えた月はフルスコア。 去年の7月8月が暇だったらしい。 猛暑だったから外に出るのをサボっていたと思われます。

dataviewはmoment.jsの関数が使えるので、年をまたいだ計算でも大丈夫。 月と年を取り出しフィルタにかける。 これで月ごとにノートを絞り込めるので、その数を配列notesにプッシュし、最後にdv.tableで表にします。

簡単そうに見えますが、これ、何度もエラーが出て挫けそうになったんですよ。

NotesBar.md

さらにChartsプラグインと組み合わせて棒グラフにしてみました。

```dataviewjs
const FOLDER = ""

const dates = []
const notes = []
for(i=0; i<12 ; i++){
  const m = moment().subtract(11-i, "month")
  const year = m.format("YYYY")
  const month = m.format("MM")
  const d = dv.pages(`"${FOLDER}"`).file
    .filter(x => x.cday.month == month && x.cday.year == year)

  dates.push(`${year}/${month}`)
  notes.push(d.length)
}

const Chart = {data:{datasets:[{backgroundColor:"brown"}]}}
Chart.type = "bar"
Chart.data.labels = dates
Chart.data.datasets[0].label = "ノート数"
Chart.data.datasets[0].data = notes
window.renderChart(Chart, this.container)
```

dataviewで下ごしらえしてChartsでグラフ化。

ほら、いいでしょ。

まとめ

シュピーゲル」と聞くとキャプテンウルトラと答えてしまう。