0
0

(Obsidianテンプレート)ミーティングログ

Last updated at Posted at 2024-09-09

この記事は以下の記事で紹介したミーティングログのテンプレートの一例です。
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)%> 定例

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0