ホーム > 使った

Flow LauncherのプラグインをPythonで作る

ガイド

引数を任意のプログラムに渡せます

目次

1本文

履歴

editor唯野
2026.3.7公開

今やこれなしでのPC生活は考えられないランチャーアプリですが、個人的には長らくLaunchyを使っていたものの更新されなくなったため、近年はFlow Launcherを使用しています。移行時点ではWoxからフォークした初期のPowerToys Runと比較して、こちらの方が機能的に優れていたからですが、そのまま現在でも使用中です。

このFlow Launcherの便利な機能のひとつとしてPluginによる拡張機能があります。これを用いるとランチャーの引数を任意のプログラムに渡すことが可能になり、さらに使い勝手がアップします。ここでは備忘録を兼ねてPythonでプラグインを作る場合の流れを説明します。

例として取り上げるのは引数をWebブラウザに渡してAmazonやヤフオクから串刺し検索を行うケースです。環境はFlow Launcher 2.1.0とPython 3.14.2です。

ちなみにAIとのペアプロで作業しましたが、やはり一部で正しくない回答がありました。しかしエラーの分析などでは非常に便利でした。

ディレクトリ作成

プラグインは「C:\Users\<ユーザ名>\AppData\Roaming\FlowLauncher\Plugins\」以下にプラグイン名でディレクトリを作成します。ここでは「buy」という名前です。またアイコンを入れるimagesディレクトリを更に作成します。

Plugins
└buy
  ├plugin.json
  ├buy.py
  └images
    └icon.png

JSON作成

プラグイン名のディレクトリに「plugin.json」を以下の内容で作成します。このファイル名は固定です。JSON内の名前などは適宜変更してください。ActionKeywordがFlow Launcherから呼び出すコマンド名になります。またIconPathやWebsiteは省略できませんので、下記が最小構成となります。

// plugin.json
{
    "ID": "<任意のUUID>",
    "Name": "python buy command",
    "ActionKeyword": "buy",
    "Description": "python buy command",
    "Author": "tadano",
    "Version": "0.1.0",
    "IcoPath": "images/icon.png",
    "Website": "https://kaimei.org/",
    "Language": "python",
    "ExecuteFileName": "buy.py"
}

このときIDには任意のUUIDをセットします。これはPowerShellで以下を実行すると生成できます。

> [Guid]::NewGuid()

UUID生成

合わせてアイコンとして64x64の適当なpngファイルをimagesディレクトリ内にicon.pngとして入れておきます。

Pythonスクリプト作成

先にPythonがFlow Launcherとやりとりをするために、flowlauncherモジュールをインストールします。

> pip install flowlauncher

それからプラグイン名ディレクトリに、JSONのExecuteFileNameで指定した名前のPythonスクリプトを作成します。

// buy.py
from flowlauncher import FlowLauncher
import sys
from urllib.parse import quote
import subprocess

class Buy(FlowLauncher):
    def query(self, query):
        return [{
            "Title": "buy",
            "SubTitle": f"{query}",
            "IcoPath": "images/icon.png",
            "JsonRPCAction": {
                "method": "open",
                "parameters": [query]
            }
        }]

    def open(self, query):
        urls = []
        urls.append("https://www.amazon.co.jp/s?k=")  # Amazon
        urls.append("https://auctions.yahoo.co.jp/search/search?&p=")  # ヤフオク
        urls.append("https://fril.jp/s?query=")  # ラクマ
        urls.append("https://jp.mercari.com/search?keyword=")  # メルカリ

        # 引数をURLエンコード
        url_encoded = quote(query)

        searchs = []
        for url in urls:
            searchs.append(url + url_encoded)

        ff = r"C:\Program Files\Mozilla Firefox\firefox.exe "

        for search in searchs:
            ff += (search + " ")

        subprocess.Popen(ff)

if __name__ == "__main__":
    Buy()

query()の引数queryにFlow Launcherのコマンド名以降で渡された引数が入っています。ここで実際の処理を行うメソッド名を指定し(ここではopen())、その関数を作成します。

open()では引数をURLエンコードして各サイトの検索文字列にセットしWebブラウザ(Firefox)をコマンドラインから起動しています。

ですので、後は今回のopen()で行っている処理を目的に応じて書き換えれば、Flow Launcherの引数を受け取る任意の処理が可能になります。

実行

作成が終わったらFlow Launcher自身を再起動します。この再起動もFlow Launcherで「flow」と入れれば候補に表示されます。

以下は上記を実行してみた様子です。

Flow Launcherでコマンド呼び出し

コマンドからWebブラウザ起動

もっともこれが単一のWebサイトへの検索であれば、標準プラグインの方をいじった方が早いかもしれません。