guides

EspansoのYAML設定からGUIテキストエキスパンダーへの移行

著者 Lightning Assist チーム2026年9月14日9 分で読了
espansoyamlmigrationguitext-expanderlinuxwindowsmacos
シェア:

簡単な回答: EspansoはすべてのスニペットをYAMLのマッチファイル(~/.config/espanso/match/*.yml)内のtrigger/replaceペアとして保存しています。つまりスニペットの追加や編集はテキストエディタでYAMLのインデント規則を守って編集し、サービスを再起動してテストする必要があります。Lightning AssistのようなGUIテキストエクスパンダに移行すると、各マッチがビジュアルエディタのスニペットになります。同じトリガーテキスト、同じ展開ですが、ファイルではなくフォームフィールドで管理します。Lightning Assist 2.6以降はマッチファイルを直接インポート可能です:.ymlを選ぶとすべてのtrigger/replaceペアがスニペットになり、{{date}}{{clipboard}}、フォーム変数はプレースホルダーに変換されます。シェルコマンドや正規表現マッチだけは手動で確認が必要です。

開示:私たちは有料のテキストエキスパンダー Lightning Assist を開発しており、Espanso は競合製品にあたります。Espanso は無料のオープンソースソフトウェアで、以下の解決策はすべて Espanso 自体に対するものです。乗り換えを必要とするものは一つもありません。

~/.config/espanso/match/base.ymlを一度も開いたことがない方には、ここまでの話はピンとこないかもしれません。そしてそれこそが、このガイドが想定する読者です。つまり、Espansoを動かせるようになり、十数個のスニペットを追加してみたものの、YAMLのことを一切考えずに済むバージョンがあるのではないかと思い始めている人たちです。

EspansoのYAML設定が摩擦になる理由

Espansoは本当によく作られたソフトウェアです。無料でオープンソース、クロスプラットフォームであり、ファイルベースのモデルは見落としではなく意図的な設計上の選択です——YAMLは移植性があり、差分を取りやすく、スクリプトからも扱えます。摩擦が表面化するのは後になってから、実際に日々使い始めてからです。

matchファイルがファイルシステム内に分散する。 Espansoは設定をmatch/フォルダ(何を展開するか)とconfig/フォルダ(展開の挙動をどう制御するか)に分けて管理しており、起点はmatch/base.ymlです。スニペットの数が増えるにつれ、1つのファイルに追加し続けるか、複数の.ymlファイルに分割していくことになります——どちらにしても、半年後に「料金についてのあれ」を探すには、検索ボックスがないためファイルを開いて目で探すしかありません。

インデントそのものが構文になる。 基本的なmatchは次のようになります。

matches:
  - trigger: ":br"
    replace: "Best Regards,\nJon Snow"

Espanso自身のドキュメントもこの点をはっきりと述べています。「インデントを必ず含めてください。さもないと有効なYAML構文にはなりません」。テキストエディタの扱いに慣れた開発者であればそれで問題ありませんが、Slackからスニペットを貼り付けたり、複数行のブロックをコピーした際に空白がうまく引き継がれなかったりすると、まさに静かに壊れる典型例です。たいていの場合、気づくきっかけはトリガーが展開されないことだけです——ダイアログも赤い波線も出ず、迷い込んだ余分な空白を探し当てるまで、スニペットはただ黙って何もしません。

同期もチーム共有もない。 Espansoは設計上、すべてをローカルに保存します——プライバシーの観点では本当に優れていますが、その代わりスニペットを2台目のマシンに持っていくには、手動でのファイルコピーか、Dropboxフォルダか、自分で維持するgitリポジトリが必要になります。アカウントも組み込みのマルチデバイス同期もなく、同僚にスニペットライブラリを渡す方法は、.ymlファイルを送って正しいフォルダに置いてもらうよう頼む以外にありません。

テストのたびに再起動が必要。 matchファイルを編集して動作を確認するには、たいてい保存してからテスト対象のアプリに切り替え、トリガーを入力し——もし発火しなければ——ファイルを確認しに戻る、という流れになります。短いループではありますが、変更のたびに、これからもずっと繰り返すことになるループです。

だからといってEspansoが悪いソフトウェアというわけではありません。設定をコードとして扱うことに抵抗がない人向けに作られたソフトウェアだ、というだけのことです。もしそこに時間を使いたくないのであれば、解決策はGUIです——「もっと良い」YAMLエディタではありません。

GUI版は実際にはどういうものか

GUI版のテキストエキスパンダーでは、スニペットはファイルではなく1行のデータです。パネルを開き(Lightning Assistでは「My Snippets」です)、「Create Snippet」をクリックして、片方のフィールドにトリガーを、もう片方に展開内容を入力し、保存するだけです。探すべきファイルはなく、再起動が必要なサービスもなく、正しく合わせるべきインデントもありません——そもそもインデントという概念自体が存在しないからです。リッチテキスト、HTML形式、複数行の内容は、いずれもエスケープ処理なしで展開フィールドに直接入力・貼り付けできます。スニペットは自分で名前を付けたフォルダに整理でき、ファイルを目で探す代わりにライブラリ全体を検索できます。

トレードオフは想像どおりのものです。ファイルへの直接アクセス(スニペットの履歴をgit diffで見たり、Vimで編集したりすること)を手放す代わりに、そもそもYAMLの仕組みを一切必要としなくなります。

Espanso → Lightning Assist:概念対応表

すでにEspansoの用語で考える習慣がある方向けに、それぞれの概念がどう対応するかをまとめました。

Espansoの概念 YAMLでの表現 GUIでの対応
Match .ymlファイル内のmatches:の下にあるエントリ スニペット——Snippetsパネル内の1行
Trigger trigger: ":br" Triggerフィールド——同じ略語をそのまま入力するだけ。コロンは残したい場合のみ付ければよい
Replace replace: "Best Regards,\nJon Snow" スニペットの展開テキスト——リッチテキスト、HTML、複数行の内容をネイティブにサポート
Vars/拡張機能(日付、シェル、クリップボード、フォーム) 変数の種類を参照するvars:ブロック 展開内容に挿入するプレースホルダー——[#Date#][#Name#]など
Matchファイルbase.yml、独自の.yml ~/.config/espanso/match/内のファイル Snippetsパネル内のフォルダ——ファイル名ではなく見た目で整理
リロード/espanso restart 変更を反映するための手動サービス再起動 何もする必要なし——保存した瞬間にスニペットが有効になる
正規表現トリガー、シェルコマンドmatch YAML+スクリプト、Espanso特有の機能 再現されていない。 これがワークフローの中心であれば、その用途にはEspansoを使い続けてください

最後の行は重要です。これは移行ガイドであって、「Lightning AssistはEspansoにできることを全部できる」という主張ではありません。正規表現パターンのトリガーやシェルコマンドに基づくmatchは、Espansoならではの強みであり、ここにはGUI版の対応物がありません。

ステップバイステップ:マッチファイルのインポート

2026年9月7日更新:Lightning AssistはEspansoのマッチファイルを直接インポートできるようになったため、以前のように一つずつ再作成する必要はありません。

  1. 既存のマッチを探す。 espanso pathを実行し、指し示すmatchフォルダ(通常は~/.config/espanso/match/)を開きます。matches:リストを含むすべての.ymlファイルはそのままインポート可能で、事前にマージする必要はありません。
  2. GUIエクスパンダをインストールし、設定ファイルはスキップ。 Lightning Assistを14日間無料で試す — クレジットカード不要。アプリはスニペットパネルを直接開き、最初に設定ファイルを書く必要はありません。
  3. 各マッチファイルをインポート。 My Snippetsで「Import」をクリックし、.ymlファイルを選択します。各マッチは1つのスニペットになります:trigger(またはtriggersの最初のエントリ)がトリガー、replaceが展開、labelがあればスニペット名になります。先頭の記号は保持されるため、:brはそのまま:brです。インポートはすべてのプランで利用可能。無料プランは1回のインポートで最大5マッチ、ライブラリは20スニペットまで。14日間のトライアルは1回のインポート上限を20に増やし、Proプランは制限なし。除外されたものはリストアップされ、無言で削除されることはありません。
  4. 変数を確認。 {{date}}{{clipboard}}{{form.field}}は対応するプレースホルダー(例:[#date#][#clipboard#])に変換されます。インポーターが変換できないもの(シェルコマンド変数、スクリプト、正規表現トリガー)は展開テキスト内にそのまま残るため、確認と修正が可能です。これらが重要なマッチの場合はEspansoに残してください。
  5. トリガーモードを設定。 デフォルトはAs-You-Type展開(トリガーを入力すると即展開)で設定不要です。トリガー入力後にキーを押して展開したい場合は、設定→トリガーで一度設定してください。
  6. 削除前にテスト。 スクラッチドキュメントで各スニペットを試してください。移行後のセットが期待通り動作するまでEspansoの設定は残しておくことを推奨します。両方を一時的に併用しても問題ありません。

インポート自体は数秒で終わります。時間がかかるのはステップ4のシェルコマンドや正規表現を使ったマッチの確認です。通常のプレーンテキストマッチのライブラリなら、移行は数分で完了します。

得られるものと失うもの

得られるもの: 設定ファイル不要、テストのための再起動ループなし、フォルダで整理された検索可能なスニペットライブラリ、ホットキーから選択テキストをリライト・翻訳するAIコマンド、同じアプリ内でのプッシュトゥトーク音声入力、自動クラウド同期、必要に応じたチームスニペット共有。これらはすべてWindows、macOS、Linuxで同じアカウントから利用可能です。

失うもの: Espansoは永遠に無料のオープンソースですが、Lightning Assistのテキスト展開は無料かつ無制限で最大20スニペット、フォルダ1つ、チーム1つまで含まれます。より大きなライブラリや複数チームは14日間のトライアル後に月額$5.99が必要です(Proプランにはコマンドや音声用のAIクレジットが月間付与されます)。また、正規表現トリガーやシェルコマンドマッチはGUIモデルに対応していないため失われます。これらがEspansoを使う理由なら、この移行は適しませんし、それは正当な理由です。

Espansoのエコシステムを完全に離れずにGUIを使いたい場合、コミュニティプロジェクトがあります — espansoGUI(Rust/Iced、Flathub)、EspansoEdit(Windowsフリーウェア)、EspansoGUI IDE。試す価値はありますが、いずれも同じYAMLファイルの上にボランティアが作った別レイヤーであり、Espanso自体は検索ウィンドウ以外に公式GUIを持ちません(コアプロジェクトの最新安定版は2026年9月2日リリースのv2.4.1)。GUIが製品そのもののツールを求めるなら、この移行がそのギャップを埋めます。

よくある質問

EspansoのYAMLファイルを直接インポートできますか?

はい。My Snippetsで「Import」をクリックし、マッチファイル(.yml)を選択してください。各trigger/replaceペアがスニペットになり、labelは名前に、{{date}}{{clipboard}}、フォームフィールドはプレースホルダーに変換されます。シェルコマンド変数や正規表現トリガーは対応がなく、展開テキスト内にそのまま残るので確認してください。

正規表現トリガーやシェルコマンドマッチは失いますか?

はい。これらはEspanso固有のYAML/スクリプトモデルに基づく機能で、GUIには対応していません。正規表現トリガーやシェルコマンドマッチが重要なら、Espansoを使い続け、GUIエクスパンダはより単純な静的スニペット用に検討してください。

:br/addrのようなトリガーテキストはそのまま使えますか?

はい。トリガーフィールドは入力したテキストをそのまま受け入れます。慣れている先頭の:/もそのまま使えます。移行時に省略形を変える必要はありません。

Espansoの公式GUIはありますか?完全に乗り換える前に試したほうがいいですか?

公式のものはありません。espansoGUI、EspansoEdit、EspansoGUI IDEなどのコミュニティプロジェクトはグラフィカルレイヤーを追加していますが、いずれも同じYAMLファイルの上にボランティアが作った別ツールであり、設定はまだYAMLで行います。GUIが単なるアドオンではなく製品そのものを求めるなら、この移行がその違いを埋めます。

関連記事

出典