Edited at
pythonDay 16

pythonでAlfred3のworkflowを作ってみた

More than 1 year has passed since last update.

この記事は Python Advent Calendar 2017 16日目の記事です。

エンジニアは怠惰な人が多いと思いますが、ご多分に漏れず私も怠惰な人間です。

(不労所得で暮らしたい)

そんな怠惰なエンジニアである私は普段からいかに楽して作業をするか常々考えております。

特にキーボードからはなるべく手を離したくない、マウスやトラックパッドは極力使いたいくないという方にはランチャーアプリが欠かせません。

MacのランチャーではAlfredが有名ですね。


Alfredとは


  • Macで使えるランチャーアプリ(Spotlightの強化版みたいなもの)

  • アプリの起動、システム操作、ファイル検索、web検索などなど色々な機能が使える

これまで自分はAlfredをアプリ起動や、スニペットなどで使ってはいたのですが、いまいち有効活用できていない機能がいくつかあるなぁと悶々としていました。

その有効活用できていない機能の代表格が今回お話する「Workflows」です。


Workflowsとは



  • Alfred powerpackを購入すると使える機能

  • GUIで外部の様々なアプリの処理同士をブロックのようにつなげることで、ひとまとまりのタスクを作成することが可能

パット見難しそうで、自分にはあまり縁のない機能かなぁと思い見てみぬふりをしていたのですが、Advent Calendarを気に実際に触ることを決意しました。


環境


  • Alfred

  • Alfred powerpack

  • python(今回のバージョンは2.7.10)


作成したWorkflowsの説明

いきなり複雑で難しい機能を作っても使わなかったら意味が無いので、今回は、最近お世話になり始めたタスク管理ツールTodoistへタスクを登録する簡単なWorkflowsを作成しました。

Workflowsの処理単位であるブロックにはスクリプトファイルを指定することも可能です。

ruby, php, shell等様々な言語で記述できるんですが、今回は学習の意味も兼ねてpythonで書くことにしました。

(やっとpythonの話ができた...)

上は実際のWorkflows作成画面。

処理が簡単なので画面が寂しいですねw

左のブロックはは実際にAlfredから入力を受け付ける処理。

右のブロックは受け取った入力をTodoistに登録するpythonスクリプトを指定しています。

実際の処理は以下のとおりです。


import sys
from pytodoist import todoist

class Todoist:
def __init__(self):
self.user = todoist.login('id', 'password')

def add_task_to_inbox(self, task):
inbox = self.user.get_project('Inbox')
inbox.add_task(task)
self.sync()

def sync(self):
self.user.sync()

if __name__ == '__main__':

if len(sys.argv) != 1:
sys.stderr.write('Invalid argument\n')
sys.exit(1)

query = "{query}"
argv = query.split(' ')

todoist = Todoist()
todoist.add_task_to_inbox(argv[0])

Todoistクラスを作り、add_taskを実行しているだけのシンプルなものです。

Todoistは開発者用のAPIドキュメントページがあり、pythonのライブラリも公開されています。

使用しているpytodoistというモジュールは、公式のAPIのラッパーです。


実際の使用方法

使用する場合は「todoist 登録したいタスク名」と入力することで、todoistのInboxへタスクが登録されます。


まとめ・感想

pythonを利用して、Todoistのタスク登録 Alfred workflows を作成しました。

今回のワークフローは機能としてはかなりしょぼいですが、今後自分に欲しい機能を追加していき、いずれ公開したいと思ってます。

また、普段はiOSエンジニアとしてswiftばかり書いているので、あまり書かないpythonに久々に触れるととまどいがありましたw

python自体は今後身につけていきたい言語なのでこれからも精進します。