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