Obsidian

ドキュメント作成ツール

Obsidian

概要

Obsidianは強力な個人ナレッジベースツールです。マークダウンベースのノート作成とグラフ表示により、アイデアとノート間の繋がりを視覚化し、「第二の脳」として機能する革新的なノート管理システムです。

詳細

Obsidian(オブシディアン)は2020年にShida Li(Licat)とErica Xu(Silver)によって開発され、デジタルノート管理に革命をもたらしました。双方向リンク機能により、ノート間の関連性を自然に構築できます。グラフビューにより、知識の繋がりを視覚的に把握し、新たな洞察を発見できます。マークダウンを基盤とし、ローカルファイルとして保存されるため、データの所有権と永続性を保証します。豊富なコミュニティプラグインエコシステムにより、無限のカスタマイズが可能です。Zettlekasten方式、GTD、PARA Method等の知識管理手法をサポートします。Canvas機能により、アイデアの視覚的マッピングとプレゼンテーション作成が可能です。テーマシステムにより、見た目と機能性を完全にカスタマイズできます。2025年現在、研究者、作家、エンジニア、学生など幅広いユーザーに愛用され、個人知識管理の新しいスタンダードとなっています。Obsidian Sync、Obsidian Publishなどのクラウドサービスにより、マルチデバイス同期と知識共有も実現できます。プラグイン開発APIにより、TypeScriptでのカスタム機能開発が可能で、高度なワークフロー自動化を実現できます。

メリット・デメリット

メリット

  • 双方向リンク: ノート間の自然な関連性構築と知識ネットワーク形成
  • グラフビュー: 知識の繋がりと構造の視覚的理解と新たな発見
  • ローカルファイル: データ所有権の保証とベンダーロックイン回避
  • 豊富なプラグイン: コミュニティによる多様な機能拡張とカスタマイズ
  • マークダウン完全対応: 標準的な記法での記述と将来性の確保
  • オフライン動作: インターネット接続なしでの完全な利用可能
  • 無料コア機能: 基本機能は無料で商用利用も可能

デメリット

  • 学習コスト: 双方向リンクとグラフ思考の習得に時間が必要
  • デスクトップ中心: モバイルアプリは機能制限があり操作性に課題
  • 同期・共有コスト: Obsidian Syncは有料サービス(月額$8)
  • プラグイン依存: 高度な機能にはプラグインの理解と管理が必要
  • パフォーマンス: 大量ノート(10,000+)でのグラフ表示が重くなる場合
  • コラボレーション: リアルタイム共同編集機能は限定的

主要リンク

書き方の例

基本的なノート作成

# プロジェクト計画

## 概要
新しいプロジェクトの計画書です。

## 関連ノート
- [[要件定義]]
- [[スケジュール]]
- [[チームメンバー]]

## タスク
- [ ] 要件の整理
- [x] プロジェクト概要の作成
- [ ] スケジュール策定

## メタデータ
- 作成日: 2025-06-20
- 担当: [[田中太郎]]
- ステータス: #進行中

## リンクと参照
[[プロジェクト管理手法]]の[[アジャイル]]手法を採用予定。
過去の[[成功事例]]も参考にする。

#プロジェクト #計画 #2025

双方向リンクの活用

# 機械学習

機械学習は[[人工知能]]の一分野であり、[[アルゴリズム]]を用いてデータから[[パターン]]を学習する技術です。

## 主要な手法
- [[教師あり学習]]
  - [[線形回帰]]
  - [[決定木]]
  - [[ニューラルネットワーク]]
- [[教師なし学習]]
  - [[クラスタリング]]
  - [[主成分分析]]
- [[強化学習]]
  - [[Q学習]]
  - [[ポリシー勾配法]]

## 応用分野
[[機械学習]]は以下の分野で活用されています:
- [[自然言語処理]] - [[文書分類]]、[[感情分析]]
- [[コンピュータビジョン]] - [[画像認識]]、[[物体検出]]
- [[レコメンデーション]] - [[協調フィルタリング]]

## 関連概念
機械学習を理解するには[[統計学]]と[[数学]]の知識が重要です。
特に[[線形代数]]、[[微積分]]、[[確率論]]は必須です。

![[機械学習の分類.png]]

## 参考文献
- [[パターン認識と機械学習]] - C. Bishop著
- [[機械学習の基礎]] - 講義ノート

#機械学習 #AI #データサイエンス

テンプレートとクイックアクション

# 日次レビューテンプレート

## 日付
{{date:YYYY-MM-DD}}

## 今日の振り返り

### 完了したタスク
- [ ] タスク1
- [ ] タスク2
- [ ] タスク3

### 学んだこと
- 

### 改善点
- 

### 明日の予定
- [ ] タスク1
- [ ] タスク2

## 気分・体調
- 気分: 😊😐😞
- 体調: 😊😐😞
- エネルギーレベル: ⭐⭐⭐⭐⭐

## メモ・アイデア


## リンク
- [[昨日のレビュー]]
- [[明日の計画]]
- [[週次レビュー]]

#デイリーノート #振り返り #{{date:YYYY-MM-DD}}

プラグイン開発の基本例

// main.ts - Obsidianプラグインの基本構造
import { App, Editor, MarkdownView, Modal, Notice, Plugin, PluginSettingTab, Setting } from 'obsidian';

// プラグイン設定のインターフェース
interface ExampleSettings {
    dateFormat: string;
    defaultTemplate: string;
    enableNotifications: boolean;
}

// デフォルト設定
const DEFAULT_SETTINGS: ExampleSettings = {
    dateFormat: 'YYYY-MM-DD',
    defaultTemplate: '',
    enableNotifications: true
}

// メインプラグインクラス
export default class ExamplePlugin extends Plugin {
    settings: ExampleSettings;

    async onload() {
        await this.loadSettings();

        // リボンアイコンの追加
        const ribbonIconEl = this.addRibbonIcon('dice', 'Sample Plugin', (evt: MouseEvent) => {
            new Notice('Hello, Obsidian!');
        });

        // ステータスバーアイテムの追加
        const statusBarItemEl = this.addStatusBarItem();
        statusBarItemEl.setText('Status Bar Text');

        // コマンドの追加
        this.addCommand({
            id: 'open-sample-modal-simple',
            name: 'Open sample modal (simple)',
            callback: () => {
                new SampleModal(this.app).open();
            }
        });

        // エディターコマンドの追加
        this.addCommand({
            id: 'sample-editor-command',
            name: 'Sample editor command',
            editorCallback: (editor: Editor, view: MarkdownView) => {
                const cursor = editor.getCursor();
                const line = editor.getLine(cursor.line);
                editor.replaceRange("**" + line + "**", 
                    { line: cursor.line, ch: 0 }, 
                    { line: cursor.line, ch: line.length }
                );
            }
        });

        // 設定タブの追加
        this.addSettingTab(new ExampleSettingTab(this.app, this));

        // マークダウンポストプロセッサーの登録
        this.registerMarkdownPostProcessor((element, context) => {
            const codeblocks = element.findAll('code');
            for (let codeblock of codeblocks) {
                const text = codeblock.innerText.trim();
                if (text.startsWith('TODO:')) {
                    codeblock.addClass('todo-highlight');
                }
            }
        });

        // マークダウンコードブロックプロセッサーの登録
        this.registerMarkdownCodeBlockProcessor('chart', (source, el, ctx) => {
            const chartContainer = el.createDiv({ cls: 'chart-container' });
            chartContainer.createEl('p', { text: 'Chart: ' + source });
        });
    }

    onunload() {
        // クリーンアップ処理
    }

    async loadSettings() {
        this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
    }

    async saveSettings() {
        await this.saveData(this.settings);
    }
}

// サンプルモーダル
class SampleModal extends Modal {
    constructor(app: App) {
        super(app);
    }

    onOpen() {
        const { contentEl } = this;
        contentEl.setText('Hello, Modal!');
        
        const button = contentEl.createEl('button', { text: 'Close' });
        button.addEventListener('click', () => {
            this.close();
        });
    }

    onClose() {
        const { contentEl } = this;
        contentEl.empty();
    }
}

// 設定タブ
class ExampleSettingTab extends PluginSettingTab {
    plugin: ExamplePlugin;

    constructor(app: App, plugin: ExamplePlugin) {
        super(app, plugin);
        this.plugin = plugin;
    }

    display(): void {
        const { containerEl } = this;
        containerEl.empty();

        containerEl.createEl('h2', { text: 'Example Plugin Settings' });

        new Setting(containerEl)
            .setName('Date format')
            .setDesc('Format for dates in templates')
            .addText(text => text
                .setPlaceholder('YYYY-MM-DD')
                .setValue(this.plugin.settings.dateFormat)
                .onChange(async (value) => {
                    this.plugin.settings.dateFormat = value;
                    await this.plugin.saveSettings();
                }));

        new Setting(containerEl)
            .setName('Enable notifications')
            .setDesc('Show notification messages')
            .addToggle(toggle => toggle
                .setValue(this.plugin.settings.enableNotifications)
                .onChange(async (value) => {
                    this.plugin.settings.enableNotifications = value;
                    await this.plugin.saveSettings();
                }));

        new Setting(containerEl)
            .setName('Default template')
            .setDesc('Default template for new notes')
            .addTextArea(text => text
                .setPlaceholder('Enter template content...')
                .setValue(this.plugin.settings.defaultTemplate)
                .onChange(async (value) => {
                    this.plugin.settings.defaultTemplate = value;
                    await this.plugin.saveSettings();
                }));
    }
}

カスタムテーマの作成

/* theme.css - Obsidianカスタムテーマ */

/* メインカラーパレット */
.theme-dark {
    --background-primary: #1a1a1a;
    --background-secondary: #242424;
    --background-modifier-border: #404040;
    --text-normal: #e0e0e0;
    --text-muted: #a0a0a0;
    --text-accent: #7c3aed;
    --text-accent-hover: #8b5cf6;
}

.theme-light {
    --background-primary: #ffffff;
    --background-secondary: #f8f9fa;
    --background-modifier-border: #e5e7eb;
    --text-normal: #1f2937;
    --text-muted: #6b7280;
    --text-accent: #7c3aed;
    --text-accent-hover: #8b5cf6;
}

/* エディターのカスタマイズ */
.markdown-source-view.mod-cm6 .cm-editor {
    font-family: 'JetBrains Mono', monospace;
    font-size: 14px;
    line-height: 1.6;
}

/* 見出しのスタイル */
.HyperMD-header-1 {
    font-size: 2em;
    font-weight: bold;
    color: var(--text-accent);
    border-bottom: 2px solid var(--text-accent);
    padding-bottom: 0.3em;
    margin-bottom: 1em;
}

.HyperMD-header-2 {
    font-size: 1.5em;
    font-weight: bold;
    color: var(--text-normal);
    margin-top: 1.5em;
    margin-bottom: 0.5em;
}

/* リンクのスタイル */
.internal-link {
    color: var(--text-accent);
    text-decoration: none;
    border-bottom: 1px dotted var(--text-accent);
    transition: all 0.2s ease;
}

.internal-link:hover {
    color: var(--text-accent-hover);
    border-bottom: 1px solid var(--text-accent-hover);
}

/* タグのスタイル */
.tag {
    background-color: var(--background-secondary);
    border: 1px solid var(--background-modifier-border);
    border-radius: 12px;
    padding: 2px 8px;
    font-size: 0.8em;
    color: var(--text-muted);
    transition: all 0.2s ease;
}

.tag:hover {
    background-color: var(--text-accent);
    color: var(--background-primary);
}

/* コードブロックのカスタマイズ */
.markdown-source-view.mod-cm6 .cm-line .HyperMD-codeblock {
    background-color: var(--background-secondary);
    border-radius: 4px;
    border: 1px solid var(--background-modifier-border);
}

/* グラフビューのカスタマイズ */
.graph-view.color-circle,
.graph-view.color-fill {
    color: var(--text-accent);
}

.graph-view.color-line {
    color: var(--background-modifier-border);
}

/* サイドバーのカスタマイズ */
.nav-folder-title {
    font-weight: 500;
    color: var(--text-normal);
}

.nav-file-title {
    color: var(--text-muted);
    transition: color 0.2s ease;
}

.nav-file-title:hover {
    color: var(--text-normal);
}

/* カスタムプラグインスタイル */
.todo-highlight {
    background-color: #fef3c7;
    color: #92400e;
    padding: 2px 4px;
    border-radius: 3px;
    font-weight: 500;
}

.chart-container {
    border: 1px solid var(--background-modifier-border);
    border-radius: 8px;
    padding: 16px;
    margin: 16px 0;
    background-color: var(--background-secondary);
}

高度なワークフロー設定

# Obsidianワークフロー設定

## プラグイン構成

### 必須プラグイン
1. **Dataview** - データクエリとレポート生成
2. **Templater** - 高度なテンプレート機能
3. **Calendar** - 日次ノートとカレンダービュー
4. **Advanced Tables** - テーブル編集の改善
5. **Tag Wrangler** - タグ管理とリネーム

### 生産性向上プラグイン
1. **QuickAdd** - クイックアクションとマクロ
2. **Hotkeys++** - 高度なホットキー設定
3. **Note Refactor** - ノートの分割と統合
4. **Sliding Panes** - Andy Modeによる効率的な画面管理
5. **Workspaces** - ワークスペース保存と復元

## Dataviewクエリ例

### 最近のタスク一覧
```dataview
TASK
FROM #タスク
WHERE !completed
SORT created DESC
LIMIT 10

プロジェクト進捗レポート

TABLE 
    file.link AS "プロジェクト",
    status AS "ステータス",
    progress AS "進捗",
    deadline AS "期限"
FROM #プロジェクト
WHERE status != "完了"
SORT deadline ASC

月次学習ログ

LIST
FROM #学習
WHERE date(created) >= date(2025-06-01) AND date(created) <= date(2025-06-30)
SORT created DESC

Templater設定例

日次ノートテンプレート

---
tags: [daily, <% tp.date.now("YYYY-MM-DD") %>]
created: <% tp.date.now("YYYY-MM-DD HH:mm") %>
---

# <% tp.date.now("YYYY年M月D日(dddd)") %>

## 今日の予定
<% tp.web.daily_weather() %>

## 振り返り
### 完了したこと
- 

### 学んだこと
- 

### 明日のタスク
- [ ] 

## メモ
- 

---
[[<% tp.date.now("YYYY-MM-DD", -1) %>]] ← 昨日 | 明日 → [[<% tp.date.now("YYYY-MM-DD", 1) %>]]

会議ノートテンプレート

---
tags: [meeting, <% tp.system.prompt("プロジェクト名") %>]
attendees: <% tp.system.prompt("参加者") %>
date: <% tp.date.now("YYYY-MM-DD") %>
---

# 会議: <% tp.system.prompt("会議名") %>

## 基本情報
- **日時**: <% tp.date.now("YYYY-MM-DD HH:mm") %>
- **参加者**: <% tp.system.prompt("参加者をカンマ区切りで入力") %>
- **場所**: <% tp.system.prompt("場所") %>

## 議題
1. 

## 討議内容


## 決定事項
- [ ] 

## アクションアイテム
- [ ] 【担当者】タスク内容(期限)

## 次回ミーティング
- 日時: 
- 議題: 

---
関連: [[プロジェクト管理]]

### 自動化とワークフロー
```bash
# Obsidian vault のバックアップ自動化
#!/bin/bash

# 設定
VAULT_PATH="/path/to/obsidian/vault"
BACKUP_PATH="/path/to/backup/location"
DATE=$(date +%Y%m%d_%H%M%S)

# バックアップディレクトリ作成
mkdir -p "$BACKUP_PATH/obsidian_backup_$DATE"

# ファイルをコピー(.obsidianフォルダも含む)
rsync -av --exclude='.trash' "$VAULT_PATH/" "$BACKUP_PATH/obsidian_backup_$DATE/"

# 7日以上前のバックアップを削除
find "$BACKUP_PATH" -name "obsidian_backup_*" -type d -mtime +7 -exec rm -rf {} +

echo "Backup completed: obsidian_backup_$DATE"

Git統合管理

# Obsidian vault の Git 管理
cd /path/to/obsidian/vault

# 日次自動コミット
#!/bin/bash
DATE=$(date +"%Y-%m-%d %H:%M:%S")

# 変更をステージング
git add .

# コミット(変更がある場合のみ)
if ! git diff --cached --quiet; then
    git commit -m "Daily update: $DATE"
    echo "Changes committed: $DATE"
else
    echo "No changes to commit: $DATE"
fi

# リモートにプッシュ(オプション)
# git push origin main