📝

Scrapbox内を検索するAlfred Workflowを作った

2022/07/18に公開

概要

この記事で伝えたいこと

  • 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で公開しているので是非使ってください。

https://github.com/uma-the390/scrapbox-alfred-workflow

Scrapboxの検索

Scrapboxプロジェクト内のページを検索します。

これによって、「確か、昔にメモってたはず。。。」という時にすぐに該当のページに辿り着くことができます。

ヒットしたページにはタイトル/ページ内の文章で一致の2パターンあったので、タイトルで一致したものが一覧の上位に来るようにしています。

こちらはRubyでScrapboxのAPIを実行して結果を表示しています

Scrapboxに外部ページを記録する

Scrapboxに外部ページを記録するときには、

  • URLをScrapbox形式で貼り付ける
  • ブックマークページを作成する

の2通りがあります。どちらもネット上に公開されているJavaScriptのブックマークレットで実現できますが、マウスクリックをする必要があり、若干面倒でした。

この機能をAlfredから簡単に行えるようにしました。


ブックマークページ作成


[サイト名 https://xxxx] のようにScrapbox形式でURLコピー

これらはAppleScriptで実装しました。

その他の機能

  • 最近作ったページ一覧の表示
  • 新規ページの作成

こちらに画像を載せています。

https://github.com/uma-the390/scrapbox-alfred-workflow#usage

自作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

JXAでChrome操作(1) - 雑多なブログ

Safari のページタイトルとURLをクリップボードにコピーする AppleScript - Qiita

Scrapbox

Scrapbox REST APIの一覧 - Scrapbox研究会

Discussion