🤖
RaycastとAmazon QでObsidianメモを自動タグつけ
はじめに
本記事は、@wagomuさんの素晴らしい記事「RaycastでObsidianのデイリーノートのハードルを更に下げる」を基に、Amazon Q Developer CLIを活用したAI自動タグ付け機能を追加した魔改造版です。
元記事では、RaycastからObsidianのデイリーノートへシームレスにメモを追加する方法が紹介されていました。この仕組みにAmazonQ CLIを使ってメモに自動でハッシュタグを付与する機能を実装しました。
謝辞
この記事の基礎となるアイデアとスクリプトは、@wagomuさんの記事から着想を得ています。記事を公開してくださったことに深く感謝いたします。
魔改造ポイント
Amazon Q Developer CLIによるAI自動タグ付け
元記事のスクリプトは、入力されたメモをそのままObsidianに追記するシンプルな実装でした。
今回の魔改造版では、メモの内容を分析し、適切なハッシュタグを自動生成。という機能を追加しています。
これにより、メモの整理と検索が格段に容易になる。かもしれない⋯
(自分で運用していろいろ検証中⋯)
(最初はOllamaとGemma3でやってたんですが、あれ?そういえばAmaQ使えるわ。と思い出して乗り換えました。レスポンスはGemma3のほうが良いけど精度はこっちがいい感じ)
必要なもの
- Raycast
- Obsidian
- Obsidian Advanced URI(コミュニティプラグイン)
- Amazon Q Developer CLI
セットアップ
※必要なもののインストールとセットアップは全て済んでいるものとします。
1. Amazon Q Developer CLIのパス確認
# パスを確認
which q
# 例: /Users/yourname/.local/bin/q
2. Raycast Script Commandの作成
- Raycastを開く(
Cmd + Space) -
Create Script Commandを検索
- タイトルを付けてスクリプトファイル作成
3. スクリプト内容の作成
以下のスクリプト内容で置き換えます。
#!/bin/bash
# Required parameters:
# @raycast.schemaVersion 1
# @raycast.title AI Memo (Amazon Q)
# @raycast.mode compact
# Optional parameters:
# @raycast.icon 🤖
# @raycast.argument1 { "type": "text", "placeholder": "Take memos" }
# --- 0. 設定 ---
Q_CMD_PATH="/Users/yourname/.local/bin/q" # 自分の環境に合わせて変更
# --- 1. AIタグ付け処理 ---
memo_raw="$1"
read -r -d '' prompt_template << EOT
<context>
あなたは知識管理システムのためのタグ付けエキスパートです。
ユーザーのメモを分析し、後で検索やフィルタリングに役立つ適切なハッシュタグを生成します。
</context>
<input_text>
$memo_raw
</input_text>
<instructions>
1. テキストの主要トピックを特定:
- 技術用語、プロジェクト名、ツール名を優先
- 行動(会議、開発、学習等)を識別
- 感情や状態(疲労、難しい等)を検出
- 一日の開始・終了マーカー(おはよう、おやすみ等)を認識
2. タグ数の決定:
- 技術的内容: 2-5個
- 日常的内容: 1-3個
- 短い呟き: 1個
- 開始/終了マーカー: 1個
3. 出力形式:
- タグのみを出力(説明不要)
- スペース区切り
- #で始まる日本語または英語
</instructions>
<examples>
<example>
<input>LLMのローカル実行環境としてOllamaが便利だ。</input>
<output>#Ollama #LLM #ローカルAI</output>
</example>
<example>
<input>今日のランチは近所のカフェでカレーだった。美味しかった。</input>
<output>#食事 #カレー #日記</output>
</example>
<example>
<input>プロジェクトの進捗会議でデータベース設計の見直しとAPI実装の遅延について議論した</input>
<output>#会議 #データベース #API #プロジェクト管理</output>
</example>
<example>
<input>疲れた</input>
<output>#日記</output>
</example>
<example>
<input>ReactのuseMemoフックの使い方を調べている。パフォーマンス最適化が難しい。</input>
<output>#React #useMemo #パフォーマンス最適化 #学習</output>
</example>
<example>
<input>おはよう</input>
<output>#一日の開始</output>
</example>
<example>
<input>今日も一日お疲れ様でした</input>
<output>#一日の終了</output>
</example>
</examples>
<input_text>の内容を分析し、上記のルールに従ってタグを生成してください。
EOT
q_response=$(echo "$prompt_template" | "$Q_CMD_PATH" chat --no-interactive)
# ANSIカラーコードとプロンプト記号を削除
tags=$(echo "$q_response" | sed -E 's/\x1b\[[0-9;]*m//g' | sed -E 's/^[[:space:]]*[>]+[[:space:]]*//' | tr -d '\n' | xargs)
memo_with_tags="$memo_raw $tags"
# --- 2. Obsidian連携処理 ---
current_time=$(date +"%H:%M")
memo_encoded=$(echo "$memo_with_tags" | sed -e 's/ /%20/g' -e 's/#/%23/g')
# Vault名を自分の環境に合わせて変更
open --background "obsidian://advanced-uri?vault=YourVaultName&daily=true&mode=append&data=-%20$current_time%20$memo_encoded"
echo "Obsidianに保存しました (Tags: '$tags')"
使い方
- Raycastを開く(
Cmd + Space) -
AI Memoと入力 - メモを入力してEnter
例:
React Hooksの使い方を勉強中。useEffectの依存配列が難しい
↓ 自動でタグ付けされてObsidianに保存
- 14:23 React Hooksの使い方を勉強中。useEffectの依存配列が難しい #React #Hooks #useEffect #学習
↓obsidian側の表示例(時間が違うのは気にしないで⋯)

Discussion
おっっっっそくて実用性は低い⋯Ollamaでローカルgemma3n e4bのほうが良かったな⋯戻すか⋯⋯
(甘キューでもhaikuが選べたら早くなりそうだけど選べないしな)