この記事は以下の記事で紹介したミーティングログのテンプレートの一例です。
Obsidianを利用して知的労働を効果的に進める方法 ##obsidian - Qiita
下記のテンプレートをプロジェクトごと、定例会議ごとに用意すると良いでしょう。
コード部分は、コードの始まりのコードブロック記号の横にdataviewjsをつけて、「```dataviewjs」となるように追記してください、dataviewプラグインが入っていればクエリされるようになります。
(ここから下がテンプレート)
前回の振り返り
(dataviewjsを使って、直近の日付の定例MTGの結論をクエリします、定例でない場合はこの段落ごと削除します。)
/* MTGごとに、prefixと、suffixを指定 */
//MTG用のprefixとsuffixを指定
const prefix = "🧪MTG:"
const suffix = "定例"
/* 入力ここまで */
//現在のページから日付を取得
const currentFileName = dv.current().file.name;
const currentDateMatch = currentFileName.match(/(\d{8})/)
const nowPageDate = currentDateMatch && currentDateMatch.length > 1 ? parseInt(currentDateMatch[1], 10) : null;
if (nowPageDate === null) {
dv.paragraph("現在のページの日付を識別できません。")
}
// prefixで始まるページと現在のページの日付の差を取得
const diffDateArr = dv.pages()
.where(page => page.file.name.startsWith(prefix))
.where(page => page.file.name.endsWith(suffix))
.map(page => {
// ページ名から日付部分を抽出し整数に変換
const pageDateMatch = page.file.name.match(/(\d{8})/);
if (!pageDateMatch) return null; // 日付が適切な形式でない場合はスキップ
const pageDate = parseInt(pageDateMatch[1], 10);
const diffDate = nowPageDate - pageDate;
return diffDate
})
.filter(diffDate => diffDate !== null && diffDate > 0);
// 配列の最小値を取得
const min_val = Math.min(...diffDateArr); // => 1
// 現在の日付から引いて直近の日付を取得
const lastDate = nowPageDate - min_val
// 直近の日付のファイル名のprefixを取得
const lastDateFilePrefix = `${prefix}${lastDate}`
// 直近の日付のファイル名を取得
const lastDateFilename = dv.pages()
.where(page => page.file.name.startsWith(lastDateFilePrefix))
.file.name[0]
dv.paragraph(`![[${lastDateFilename}#結論]]\n`);
dv.paragraph(`[[${lastDateFilename}]]`);
目的
(会議の最初に必ず書きましょう)
結論
(会議の最後に必ず書きましょう)
宿題
(ファイル内の「★」を含む行を抽出してここに一覧表示します。不要の場合はコードを削除します。)
// ファイルがロードされていることを確認
const activeFile = this.app.workspace.getActiveFile();
if (activeFile) {
const fileContent = await this.app.vault.read(activeFile);
// ファイルの内容を行ごとに分割
const lines = fileContent.split('\n');
// "★" を含む行を抽出(ただしコードブロック内は除外)
const codeBlockRegex = /^```/;
let inCodeBlock = false;
const starLines = lines.filter(line => {
// コードブロックの開始または終了を検出
if (codeBlockRegex.test(line)) {
inCodeBlock = !inCodeBlock;
return false; // コードブロックの開始/終了行は含めない
}
// コードブロック内の場合は除外
if (inCodeBlock) return false;
// "★"を含む行であり、かつコードブロック内でない行を返す
return line.includes("★");
}).map(line => {
// "★"より後ろの文字列を取得
const starIndex = line.indexOf("★");
return line.substring(starIndex);
});
// 抽出した文字列を表示
starLines.forEach(content => {
dv.paragraph(content);
});
} else {
dv.paragraph("No active file.");
}
参加者
資料
要点
内容
タグ
(タグをつけておくと、プロジェクトインデックスからクエリがしやすくなる)
#project1 #定例 #MTG
(一番下にタイトルとなるものを用意している、これを切り取ってファイル名にコピーする)
🧪MTG:<% tp.date.now("YYYYMMDD", tp.file.title)%> 定例