AlfredのWorkflowを使って、今日の日付入りのScrapboxページを開く

皆さん、Alfredというアプリケーションをご存知ですか？
MacOSの生産性アプリの代表格のAlfred。そのAlfredには様々な機能があります。
その中でもPowerpackという有料のライセンスを購入したら使えるWorkflowという機能。
このWorkflowを使うとルーティンとしてやってる作業がキーボード上で完結できるので、生産性が物凄い上がります。

今回はこのWorkflowを使い、今日の日付入りのScrapboxが自動で開けるようにしたいと思います！


# 完成のイメージ
![ff84344a7bfdd9acfde1e90bd74a7add.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004329/d901178a-beb8-0fc5-73da-59603425ffbc.gif)


# 注意
- この方法は**Alfred4**を基準に作成されました。
- **Powerpack user**ではない場合、Workflow機能はご利用できません。

# 手順

## 1. 空のWorkflowを作る
AlfredのPreference(command + ,(カンマ))に入り、左側のサイドバーから「Workflows」をクリックします。
その後、左下の「＋」ボタンから「Blank workflow」を選択し、空のworkflowを作ります。
![76f563031535e826ded78ae3ff8b2b9d.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004329/56b4f0b7-4027-e07a-7464-032667861a69.gif)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004329/eb86c611-34cb-52d4-a7c0-0cddfe55d9e9.png)


## 2. Workflowを実行させるキーワードを設定する
先ほど作ったworkflowをクリックすると、右側に空のキャンバスが現れます。
キャンバスを右クリックし、**「Inputs」→「Keyword」** を選択します。
Alfred検索窓からこのWorkflowを呼び出す時に使うキーワードを設定できます。

**※「No Argument」に設定した理由**

- workflowの目的が「今日の日付を自動で持ってきて、タイトルの形式を合わせたScrapboxページを開く」だけなので、他のinputは要りません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004329/6c625d53-4fdf-08c8-ece0-dbf0ba4ae6d3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004329/a3be0962-aba3-bf39-a84f-af7738134f42.png)


## 3. 実行するスクリプトを作る
同じく、キャンバスを右クリックし「Action」→「Run Script」をクリックします。
下の画像のような画面が出るので、一旦「Save」を押しましょう。
（scriptの中身を完成したら、ここに実行のためのコマンドを入力します。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004329/1b7c42d9-6774-9f4f-303d-d36861ed859e.png)


## 4. 今日の日付入りのScrapboxページを開くPython Scriptを作成する]
python scriptを書く時に、こちらのWorkflow libraryがよく使われます。
https://github.com/deanishe/alfred-workflow
今回のworkflowもこのライブラリを活用して作ります。

### 4-1. Workflowにlibraryをインストール
作成中のworkflowを右クリックして「Open in terminal」クリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004329/1859b3e7-50a6-d263-6c29-6485fb731c29.png)
現れたターミナルwindowに、以下のコマンドを打ち、実行させます

```terminal:command
pip install --target=. Alfred-Workflow
```
下記のようなMessageが出たら、インストール完了です。

```terminal:インストール完了メッセージ
Collecting Alfred-Workflow
Using cached Alfred-Workflow-1.40.0.tar.gz (92 kB)
Using legacy 'setup.py install' for Alfred-Workflow, since package 'wheel' is not installed.
Installing collected packages: Alfred-Workflow
Running setup.py install for Alfred-Workflow ... done
Successfully installed Alfred-Workflow-1.40.0
```

確認のため、「Open in terminal」と同じ方法で、「Open in Finder」をクリックします。
すると、このようにライブラリがインストールできたことを確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004329/f10db812-56e7-d686-a666-5b512e3631f4.png)


### 4-2. 実行するPythonファイルを作成
cotEditor（テキストエディターならなんでもOK）から新しい`.py`ファイルを作成します。
今回はファイル名は`todays_diary.py`にします。
空のファイルができたら、先ほどライブラリをインストールしたフォルダに`todays_diary.py`を置きます。
以下のようになればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004329/c973dc47-3146-b306-cf94-0bc65b8e40d2.png)


### 4-3. Python Scriptの中身を入力する
`todays_diary.py`の中身を入力します。
今回は**「`yyyy/mm/dd 作業ログ`というタイトル形式を持つページがGoogle Chromeで開く」**コードを作成します。

```python:todays_diary.py
# encoding utf-8

import sys
import webbrowser
from datetime import date, timedelta
from workflow import web, Workflow

def main(wf):
	project = 'my-project'#scrapboxプロジェクト名
	url1 = 'https://scrapbox.io/'
	url2 = '_%E4%BD%9C%E6%A5%AD%E3%83%AD%E3%82%B0'#'_作業ログ'のutf-8 coding ver.
	td = date.today()
	url_date = td.strftime("%Y/%m/%d")#日付を'yyyy/mm/dd'形式に変更
	url = url1 + project + '/' + url_date + url2
	chrome_path = 'open -a /Applications/Google\ Chrome.app %s'#Google Chromeで開くためのパス設定
	webbrowser.get(chrome_path).open(url)
	
	wf.send_feedback()

if __name__ == '__main__':
	wf = Workflow()
	sys.exit(wf.run(main))
```

## 5. キーワードとPython Script実行を繋ぐ

### 5-1. 「Run Script」で、`todays_diary.py`の実行命令を作成

※ Python scriptの実行の方法は2つあります。
　1. Languageを`「/usr/bin/python」`にして、Python Scriptを直打ちする方法
　2. Languageを`「/bin/bash」`にして、shell script経由でPython Scriptを実行させる方法
 　(当該のPython Scriptファイルはworkflowのフォルダ内に入っていなきゃいけない。)
今回は2の「shell scriptを経由する方法」で進めます。

「Run Script」をダブルクリックし、下の画像のように設定してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004329/5bcbcb79-2975-933c-85fc-e441f4b04bdb.png)

```shell:script.sh
/usr/bin/python todays_diary.py
```

### 5-2. キーワードとPython Script実行を繋ぐ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004329/7825ac38-6e52-a439-578a-54a2e874d593.png)



これで完成です。

日付ベースで作業ログや日報を書く場合、自動でフォーマットに合わせてタイトルをつけてくれるので、
かなり手間が減って生産性が上がると思います。