はじめに
Raycast・OpenAI API・Obsidian を組み合わせて構築したお手軽ジャーナリングを運用してみて、とても便利だったので紹介します。 Raycast の Script Commands からテキストを投げると、AI が体裁を整え、タイトル・タグ・感情などを自動生成して Obsidian のノートとして保存してくれます。 どのアプリを開いていてもホットキーから一発で起動できるため、入力のハードルを極限まで下げることができます。
コードは以下のリポジトリで公開しています。 README に従ってセットアップすれば数分で導入できます。
デモ
動画内のテキスト入力ではタイプミスをしていますが、出力されるノートでは意図を汲み取り修正されていることがわかります。
入力テキスト
Obsidian に素早くジャーナルを作成する Script Command を作成した。思考や感情を手軽に残せるので、続けやっす層です。
出力されたノート
そもそもジャーナリングとは
ジャーナリングは、頭の中にある思考や感情、出来事をそのまま外に出して可視化する記録術です。 自己理解の促進、感情の整理とストレス軽減、自己成長の記録、問題解決力の向上、クリエイティビティの刺激、記憶の定着・再認識、習慣化に寄る安定感、目標達成のサポートなどのメリットがあるとされています。 日記よりも手軽で、「整えること」より「書き出すこと」を重視し、続けやすいのが特徴です。
何を書き出すかは人それぞれですが、私は以下のような内容を書き出すことが多いです。
- ちょっとした気付きや学び
- 周りの人のよかった行動
- 感じている課題感、不安やモヤモヤ
- 取り組んでみたいアイデア
- 物事に対する自身の考え
いずれもまとまった文章として整理するにはやや大げさでつい放置してしまいがちですが、こういった小さな思考の断片をそのままにしておくと自分でも気づかないうちに少しずつ脳のリソースを消費しているものです。 これらを書き出すことで思考を整理できる上、もし忘れてしまっても見返せばそこにあるという安心感を得ることができるため、脳のリソースを解放してくれる効果があります。
なぜジャーナリングに Raycast × LLM × Obsidian が適しているか
ジャーナリングを継続し、意味あるものにするには以下が重要です。
- 思い立った瞬間に手軽に書ける
- 蓄積された情報を検索・分析できる
- 継続できなくなるリスクが低い
このワークフローでは、Raycast で「すぐ書ける入口」を作り、LLM で体裁(タイトル/タグ/感情)を自動化することで、できるだけラクに書ける状態を作り出します。
また、Obsidian はローカルに markdown ファイルとして保存されるため LLM と相性が良く、後から好きなように検索・分析できます。 ジャーナリング専用のアプリもたくさんありますが、アプリが提供する分析機能しか使えないため、蓄積した情報を最大限に活用したい場合は自由度の高い Obsidian にメリットがあります。
さらに、ジャーナリングは長期間蓄積されていくという性質があります。 特定アプリに依存するとサービス終了などの要因で継続できなくなったり、蓄積した情報が失われてしまうリスクがあります。 Obsidian であれば単にローカルファイルなので、適切にバックアップを取ってさえいれば仮に Obsidian が使えなくなったとしても継続できなくなるリスクは低いです。
処理フロー
全体は以下のような流れです。
テキストを入力する
テキストの入力は Raycast Script Commands から行います。 これはデスクトップ上のどこからでも独自のスクリプトを実行できる機能です。 Bash, Apple Script, Swift, Python, Ruby, Node.js の言語を使用できますが、今回は Bash を採用しました。
ファイルの先頭に専用のコメントを追加することで Script Commands のアーギュメントや振る舞いを設定します。
テキストの体裁を整える
OpenAI API で入力したテキストを送信し、以下の作業を代わりにやってもらいます。
- 本文の軽い整形
- タイトルの生成
- タグの自動抽出
- 感情の推定(15種の感情タイプ、3段階感情レベル)
具体的には以下のプロンプトを使用しています。
あなたはジャーナル整形アシスタントです。
入力されたテキストを整形し、適切なタグとタイトルを生成し、感情を分析してください。
テキスト修正のルール:
- 入力されたテキストに明らかな誤字脱字や変換ミスがある場合は修正する
- 文法的な誤りも適切に修正する
- ただし、意図的な表現や方言、俗語は修正しない
感情分析のルール:
- 入力内容から感情を読み取り、以下の15種類から最も適切なものを1つ選択
- 感情タイプ: 喜び、安心、感謝、興奮、驚き、悲しみ、孤独、不安、恐怖、怒り、罪悪感、恥、嫌悪、期待、愛情
- 感情の強さを「弱」「中」「強」の3段階で評価
- 感情が読み取れない場合やニュートラルな内容の場合は、emotion_typeをnull、emotion_levelをnullとする
タグのルール:
- タグは内容に応じて1〜4個設定
- タグは可能な限り日本語を使用
- 英語のタグで複数語の場合はPascalCase
- タグに#記号は含めない
- タグにドット(.)は絶対に使用しない(例: Vue.js → VueJS、Node.js → NodeJS、Next.js → NextJS)
タイトルのルール:
- 簡潔で内容を表すもの
本文のルール:
- 入力されたテキストの整形のみ行う
- 誤字脱字や変換ミスは修正する
- ユーザーが書いていない内容は一切追加しない
- Markdown記法(見出し、リスト、コードブロック)は使用可
- ただし強調(*、**)や斜体(_、__)は使用しない
API を叩く際に Structured Outputs を使うと、出力形式がブレずに扱いやすい JSON として取得できます。
Obsidian にノートを作成する
Obsidian のノートの作成は Obsidian URI を使用します。 直接ファイルをいじるよりも安全に操作できます。
なお、参考にした記事などではデイリーノートに追記するというやり方をしているものもありましたが、今回は個別にノートを新規作成するようにしました。 用途にもよりますが、日付でまとめてしまうと後で内容で分類したくなった際に面倒なので、独立していた方が扱いやすいはずです。
使ってみた感想
「書き出す最初の一歩」が圧倒的に軽くなるのがメリットだと思っています。 タイトルやタグ付けを AI に丸投げできるので、書き出すことに集中できます。
私自身はこれまでジャーナリングという方法にかなり懐疑的なイメージを持っていました。 いくつか専用のアプリを試してみたこともありますが、わざわざアプリを開くのが面倒だったりと、なんとなく効果に対して手間が大きすぎるというイメージがありました。 このワークフローを導入したことで、手間に感じていた部分が解消され、これなら継続できそうという感覚が得られました。
まとめ
Raycast × OpenAI API × Obsidian の組み合わせで、お手軽なジャーナリング環境を作れました。 Structured Outputs による JSON 固定は、実践的にはかなり効くポイントです。 タイトルやタグ付けなどの整理作業を AI に任せられるので、考えることと書き出すことに集中できます。 Aqua Voice などの音声入力と組み合わせてみてもよさそうです。
まずはリポジトリをフォークして試してみてください。 日々のジャーナリングが一段と続けやすくなるはずです。
参考資料
Views: 0