Scrapbox内を検索するAlfred Workflowを作った
概要
この記事で伝えたいこと
- Scrapboxの便利なAlfred Workflowを作成したので紹介したい
- Alfred WorkflowとAppleScriptの組み合わせが最高なこと
- 参考になった資料
想定読者
- Scrapboxユーザー
- Alfred課金者
- Alfred Workflowの自作に興味があるが作ったことがない人
Scrapboxを使う上で困っていたこと
僕は普段、調べたことをScrapboxのプライベートプロジェクトにメモしています。しかしちょっとした面倒な操作を単一のAlfred Workflowで実現できるものが公開されていなかったので不便を感じていました。
生活の調べ物からエンジニアリング関連のメモを全て管理
- 記事のブックマークやURLコピーをブックマークレット経由でやるので、クリックするのが面倒
- ちょっと軽くメモしとこうと思った時に一発で新規ページを作成できない
- Scrapbox内の検索が最小アクションでできない
こういった課題を抱えていました。
課題一つ一つに対してはAlfredのWeb Search機能や既存の公開されているWorkflowを導入することで解決できます。
しかしScrapbox関連の操作を単一のWorkflowにまとめて、実現したいので自分で作ることにしました。
自作のAlfred Workflowの機能説明
細かい話をする前に作ったものをGIF画像で紹介します。
作ったものはGithubで公開しているので是非使ってください。
Scrapboxの検索
Scrapboxプロジェクト内のページを検索します。
これによって、「確か、昔にメモってたはず。。。」という時にすぐに該当のページに辿り着くことができます。
ヒットしたページにはタイトル/ページ内の文章で一致の2パターンあったので、タイトルで一致したものが一覧の上位に来るようにしています。
こちらはRubyでScrapboxのAPIを実行して結果を表示しています
Scrapboxに外部ページを記録する
Scrapboxに外部ページを記録するときには、
- URLをScrapbox形式で貼り付ける
- ブックマークページを作成する
の2通りがあります。どちらもネット上に公開されているJavaScriptのブックマークレットで実現できますが、マウスクリックをする必要があり、若干面倒でした。
この機能をAlfredから簡単に行えるようにしました。
ブックマークページ作成
[サイト名 https://xxxx]
のようにScrapbox形式でURLコピー
これらはAppleScriptで実装しました。
その他の機能
- 最近作ったページ一覧の表示
- 新規ページの作成
こちらに画像を載せています。
自作Alfred Workflowを作成する時に使った技術
JavaScirpt for AppleScript(JAX)でMac上のアプリを簡単操作
AlfredからMac上のアプリを操作するためにはJAXを使うのが便利でした。
- AppleScriptでMac上のアプリを操作可能
- AppleScriptのネット上のドキュメントは少ないがエディタ付属のドキュメントでなんとか分かる
- JavaScirpt for AppleScript(JAX)を使えば、AppleScriptの文法を覚えないで良い
紹介したURLのコピー機能やブックマークページ作成機能を実現するためにJavaScirpt for AppleScript(AppleScriptをJSで記述して使える)を使用しました。
AppleScriptを使うことでMac上のアプリ(今回はGoogle Chrome)を操作できます。
URLをクリップボードにコピーするにはブックマークレット内のJavaScriptでは実現できないため、AppleScriptを使用しました。
const chrome = Application("Google Chrome");
chrome.includeStandardAdditions = true;
const currentTab = chrome.windows[0].activeTab;
const title = currentTab.title();
const url = currentTab.url();
chrome.setTheClipboardTo(`[${title} ${url}]`);
const notifier = Application.currentApplication();
notifier.includeStandardAdditions = true
notifier.displayNotification(title, {
withTitle: "コピーしました",
})
このような感じでAppleScriptをJSで記述することができます。
AppleScriptを使えれば今後Alfredから一括でいろんな操作をできるので重宝しそうだと思いました。
Ruby
AlfredではRuby/PHP/Perl/Python/Bashを使ってスクリプトを実行できるのでAPIを実行するのに便利でした。
Alfred Workflowを作成するときに参考にしたもの一覧
最後に参考にした記事一覧を貼っておきます
Alfred
ワークフローをGitHubで公開する #alfred - < /gecko >
Script Filter ordering - Workflow Help & Questions - Alfred App Community Forum
JXA
Safari のページタイトルとURLをクリップボードにコピーする AppleScript - Qiita
Discussion