ランサーズ Advent Calendar 2019 14日目の記事です。

Alfredとは

AlfredはMacOS向けのいわゆるランチャーです。
マウスを使わずにキーボードから手を離さずに色々ことが出来るという点が最も便利な所です。
アプリケーションを呼び出すのに便利なツールで、Alfredで最も一般的な利用方法でいて、且つこの機能については無料でも使用可能です。

https://www.alfredapp.com/

前職で教えてもらってから、あまりにも便利なのでパワーパックを購入したほど愛用しています。
パワーパックは買い切り45ユーロなので、今だと約5500円で購入できます。
5500円を払うのは抵抗があるとは思いますが、それだけ価値があるツールなのでパワーパックを購入することでどんな所が便利なのか、私が主に使っている機能を中心に紹介していきます。

アプリケーション検索、起動

Alfredで最も基本的な使い方です。
文字を入力するとリアルタイムでフィルタリングされていくので、少ない文字列でアプリケーションを検索して起動することが可能です。
※ただし、この機能はMacOS標準のSpotlightでも利用可能です。


ここからはパワーパックでないと使えない機能も含めて紹介していきます。

クリップボード管理

通常OS標準のクリップボードは1つだけですが、Alfredを使うと複数のクリップボードを管理して、ペーストすることができます。

テキスト以外に画像やファイルも管理でき、「24時間, 7日, 31日, 3ヶ月」から保存期間を選択できます。
作業の証跡を残したり、ブログやGitHubに画像を貼り付けたりするのに大変重宝しています。

スニペット

いわゆるスニペットを作成して、展開することができます。

上記のように事前に登録して選択すると、クリップボードに入るのでそのままペーストができます。
加えて、このスニペット機能がめっっっっっちゃくちゃ便利で、クリップボードじゃなくて自動展開することも可能です。

この自動展開は本当に色々活用できます。
シェルのaliasに登録しているようなワンライナーとかを、サーバー上で実行したりできるので、gitの便利なやつとか、Dockerのイメージを削除して作り直したりとか、よく使うものを自動展開させると作業効率が抜群にあがります。
自動展開機能はスニペットごとにオンオフを設定できるので、自動展開してほしくないやつはオフにしておけばOKです。
また、カーソル位置や日付などをテンプレートで入れておくことも可能なので、展開した後にカーソル移動する必要もありません。

計算機

これは使用頻度は少ないですが、ちょっと計算したい時とかに便利です。
計算結果はそのままクリップボードで管理されます。

私はSlackやissueとか、ざっくり数値で良いから結果を残しておきたいときとかに、さっと計算して貼り付けています。

辞書

さっくりなにかの単語を調べたいときに便利な辞書です。
辞書はMacOSにある情報をもとに展開されるようです。

英単語も検索できるので地味に便利です。

日本語を入力して、そのままOSの辞書で呼び出してよく使うフレーズを検索することもできるのでこれも地味に便利です。

WorkFlow

ここからはAlfredに拡張として追加できるWorkFlowをご紹介します。

alfred-github-workflow

これはGitHubのリポジトリにアクセスできるやつですが、もしかしたら一日で一番これを使っているかもしれません。
https://github.com/gharlan/alfred-github-workflow

これもインクリメンタルサーチされるので、文字を入力することで対象のリポジトリが絞られていきます。
また、対象リポジトリを選択したのち、issueやPRを開いたり、新規issue作成ページに飛んだりできるのでGitHubのアクセスがしやすくなります。
これはGitHub Enterpriseにも対応しています。

alfred-chrome-bookmarks

これはChromeのブックマークを呼び出すやつです。これも凄い使ってます。

https://github.com/blainesch/alfred-chrome-bookmarks

普段ブックマークバーから呼び出すことは少ないですが、Alfredで呼び出せるようにすると途端にブクマが捗るようになります。
例えば会社で重要なリンクなどはまとめてブクマしておくと、さくっと呼び出せるようになります。

alfred-chrome

Chromeのプロファイル切り替えをするやつです。

https://github.com/ShogunPanda/alfred-chrome

私は2通りの使い方をしていて、一つはAWSの本番アカウントへアクセスする際に意図的にプロファイルを分けているので、そこにアクセスする際に使っています。
本番アカウントは真っ赤なテーマを適用しているので、ひと目で本番で作業をしているのがわかり、不必要にアクセスしないようにしています。
プロファイル切り替えはデフォルトではショートカットが割り当てられていないようで、自分で設定する必要があるため、私の場合はこのWorkFlowで呼び出して使っています。

つぎに、Chromeを使っていて複数ユーザーアカウント(Gmail)でログインしていると、会社で共有されたスプレッドシートのリンクをSlackで共有された際に、アクセスできなかったりする場合があります。
それはChromeでプロファイルがアクティブなユーザーでリンク先にアクセスするので、個人のGmailアカウント権限ではアクセスできないリンクの場合に発生します。
そこで、このプロファイル切り替えで事前に会社用、個人用で切り替えておけばリンクを踏んでも権限が求められることがなくなります。

alfred-mfa-workflow

MFA Tokenを呼び出せるやつです。

https://github.com/u-minor/alfred-mfa-workflow
https://qiita.com/u-minor/items/597c4463ba75ca90d82b

AWSアカウントはMFAを設定しているので、ここでMFA Tokenを呼び出すと、アクティブなフォームにトークンが入力されます。
それにより、AuthyなどのMFA管理ツールを呼び出すことなく、AWSコンソールまでログインすることができるようになります。

alfred-aws-console-services-workflow

AWSの各サービスへアクセスするためのWorkFlowです。

https://github.com/rkoval/alfred-aws-console-services-workflow

AWSコンソールへログインした後に、このWorkFlowを使うことで各サービスにアクセスできるシンプルなWorkFlowです。

ここまでのWorkFlowを活用することで、

  • 1. ChromeのProfileを呼び出す
  • 2. ブックマークで各AWSアカウントIDに紐付くログインURLへアクセスする
  • 3. MFA Tokenを入力する
  • 4. AWSのサービスを呼び出す
  • という一連の作業を全てキーボードのみで行えるようになり、大変効率的にAWSなどのサイトへアクセスできるようになります。

    自作WorkFlow

    パワーパックを購入すると自分でWorkFlowを作成することができます。
    システムRuby, Python, osascript以外にも外部スクリプトを呼び出すことができ、Alfred4からはノンプログラミングでもいくつかのアクションは自動的に呼び出すことができるようになっています。
    それらを組み合わせて作った自作のWorkFlowを幾つか紹介します。

    alfred-workflow-lancers

    自社サービスの「ランサーズ」の各ページを一発で開くためのWorkFlowです。

    https://github.com/inamuu/alfred-workflow-lancers

    これはノンプログラミングで作成しました。
    といっても大変シンプルで、呼び出し元キーワードを設定し、入力した文字列をクエリとしてURLへ渡してあげるだけです。
    ログインしなくてもクエリストリングを渡せば検索できるようなパターンであれば、基本的にはこれで検索ページへひとっ飛びできます。
    ※ただし、インクリメンタルサーチはできません。

    alfred-wp-rest-search

    WordPressから記事を検索するためのWorkFlowです。

    https://github.com/inamuu/alfred-wp-rest-search

    最近自分のナレッジを別のWordPressのサイトに作り始めています。
    WordPressサイトへいって検索するでも良いのですが、WordPressは4.7系あたりから標準でREST APIが実装されているので、それを使って記事を取得することが可能です。
    デフォルトでGETで記事取得するのはインターネット上からも行えるので、それをPythonに落とし込んで作成しました。

    # coding: utf-8
    
    import json
    import os
    import requests
    
    path = str(os.environ['HOME']) + '/.alfred.workflow.wps.siteurl'
    
    if os.path.isfile(path) is True:
        filepath = open(path, 'r')
    for row in filepath:
        siteurl = row.strip()
    
    url = siteurl + "/wp-json/wp/v2/posts?per_page=10&search={query}"
    headers = { "content-type": "application/json" }
    data = requests.get(url, headers=headers)
    jsondata = data.json()
    
    search_list = []
    for i in jsondata:
        search_result = { "title" : i["title"]["rendered"], "arg" : i["guid"]["rendered"] }
        search_list.append(search_result)
    
    postsdata = json.dumps({ "items": search_list }, ensure_ascii=False)
    print(postsdata)
    
    

    これくらいのコード量で作成することができました。
    ちなみに、別のフィルターを使ってサイトURLを登録していますが、そちらはAlfredで用意されている機能を使ってファイル書き込みまで実現しています。

    まとめ

    他にも紹介しきれていませんが、todoistでタスク管理したり、Ansibleのドキュメントを呼び出すようなWorkFlowや、勤怠システムをヘッドレスブラウザでログインして打刻するようなWorkFlowを自作して使っていたりします。
    少しプログラムするだけで、WorkFlowを自作することが出来、自分がいつもやっている定常的な作業を格段に効率化することができます。
    設定ファイルはGoogleDriveに保存することができるので、自宅と会社で同じ設定で使用することも可能です。
    エンジニアにとって大変便利で、面白いツールですので是非利用してみてください。

    カテゴリー: Daily