スニペットツール(テキスト展開ツール)は、キーワードを入力するだけで定型文やコードブロックに自動展開してくれるツールです。メールの署名、住所、コードテンプレートなど、繰り返し入力する手間を大幅に削減できます。

有名どころでは PhraseExpressaTextTextExpander などがありますが、いずれも有料やサブスクであったり、そのわりに安定性に不満があったり、macOS限定だったりと一長一短。

そこでおすすめしたいのが Espanso です。


    Espanso とは

    Espansoは Rust製のオープンソース・テキスト展開ツール です。

    • 完全無料(GPL-3.0ライセンス)
    • クロスプラットフォーム(Windows / macOS / Linux)
    • システムワイド(ブラウザ、エディタ、WordPressの管理画面など、どこでも動作)
    • プライバシー重視(100%ローカル動作、データ送信なし)
    • YAML形式の設定ファイル(Gitで管理可能)

    公式サイト: https://espanso.org/
    GitHub: https://github.com/espanso/espanso


    有料ツールとの比較

    筆者はこれまで PhraseExpress(買い切り版)と aText を使ってきましたが、以下のような不満がありました。

    ツール 問題点
    PhraseExpress 買い切りで購入したが、入力されないことが多々あり不安定
    aText サブスクリプション。再起動しないと入力されなくなることがある
    TextExpander サブスク制。料金が高すぎ
    Dash macOS限定

    Espanso に乗り換えて、これらの問題がほぼ解消されました。動作が軽快で安定しており、設定ファイルも見通しが良いです。


    インストール方法

    macOS(Homebrew)

    brew install espanso
    

    Windows

    公式ダウンロードページ からインストーラーをダウンロードするか、以下のコマンドでインストールします。

    winget install espanso
    

    Linux

    # Snap
    sudo snap install espanso --classic
    
    # または公式サイトからdeb/AppImageを取得
    

    初回起動

    インストール後、ターミナルで以下を実行します。

    # サービス登録(初回のみ)
    espanso service register
    
    # 起動
    espanso start
    

    macOS の場合

    アクセシビリティの許可 が必要です。Espansoがキーボード入力を検知するための設定です。

    システム設定 → プライバシーとセキュリティ → アクセシビリティ からEspansoを許可してください。

    動作確認

    テキストエリア(メモ帳やブラウザの入力欄など)で :espanso と入力してみてください。「Hi there!」と展開されれば正常に動作しています。


    基本的な使い方

    設定ファイルの場所

    # 設定ファイルをエディタで開く
    espanso edit
    
    # 設定ファイルのパスを確認
    espanso path
    

    設定ファイルの場所は以下のとおりです。

    OS パス
    macOS ~/Library/Application Support/espanso/match/base.yml
    Windows ~UsersUSER-NAMEAppDataRoamingespansomatchbase.yml
    Linux ~/.config/espanso/match/base.yml

    スニペットの書き方(YAML形式)

    match/base.yml にYAML形式で記述します。

    matches:
      # 基本:キーワード → テキスト置換
      - trigger: " &mail;"
        replace: "your-email@example.com"
    
      # 複数のトリガーで同じ内容に展開
      - triggers: [" &tel;", " ☎"]
        replace: "090-1234-5678"
    
      # 今日の日付を動的に挿入
      - trigger: " &today;"
        replace: "{{mydate}}"
        vars:
          - name: mydate
            type: date
            params:
              format: "%Y年%m月%d日"
    
      # シェルコマンドの出力を挿入
      - trigger: " &ip;"
        replace: "{{output}}"
        vars:
          - name: output
            type: shell
            params:
              cmd: "curl -s ifconfig.me"
    

    保存すると自動で反映されます。反映されない場合は espanso restart を実行してください。

    Espansoのスニペット管理用のGUIツール

    base.yml を直接編集するのは面倒なので、GUI で管理できるデスクトップアプリ Espanso Manager を作りました。macOS 向けの DMG を GitHub で無料公開しています。

    Espanso Manager:Espansoのスニペット管理をGUIで効率化するWebアプリを作った Espansoのbase.ymlをブラウザ上で直感的に管理できるWebアプリ「Espanso Manager」をリリースしました。aTextライクな2ペイン構成で、検索・ソート・カテゴリフィルタ・YAML/CSVエクスポートに対応。React + TypeSc...  続きを読む

    トリガーの命名ルール

    普段の入力と衝突しないように、プレフィックス(接頭辞) を統一するのがおすすめです。

    記号 / 特殊文字  :  (スペース) + && + keyword + ;    例) &&iq; → ¿
    (※`& + ;` は文字参照自体の表記と同じなので、`&&` で2回にしている)
    HTML             :  (スペース) + < + keyword + ;     例) <p; → <p></p>
    PHP              :  (スペース) + <? + keyword + ;    例) <?echo; → <?php echo() ;?>
    WordPress        :  (スペース) + <?wp:keyword + ;    例) <?wp:part; → <?php get_template_part(); ?>
    CSSプロパティ    :  (スペース) + : + keyword + ;     例) :p; → padding: 1rem;
    CSSクラス定義    :  (スペース) + . + keyword + ;     例) .grid; → .grid {display: grid;}
    CSSメディアクエリ:  (スペース) + @ + keyword + ;     例) @pc; → @media print, screen and (min-width: 744px) {}
    インラインCSS    :  (スペース) + = + keyword + ;     例) =ml; → style="margin-left:1rem;"
    JavaScript       :  (スペース) + $ + keyword + ;     例) $fn; → (function () {})();
    TypeScript       :  (スペース) + $ts: + keyword + ;  例) $ts:interface; → interface MyInterface{}
    Bash             :  (スペース) + % + keyword + ;  例) %run; → npm run, %gst; → git status
    Shell(シェルスクリプトの中身/#!/bin/bash` で始まるスクリプト内容)
                     :  (スペース) + # + keyword + ;     例) #for; → for i in "${array[@]}"; do ... done
    Python           :  (スペース) + #! + keyword + ;    例) #!def; → def greet():
    Markdown         :  (スペース) + #@ + keyword + ;    例) #@tbl; → |col1|col2|col3|
    

    ファイル分割で整理

    match/ フォルダ内に複数のYAMLファイルを作成できます。用途別に分けると管理しやすくなります。

    espanso/
    ├── config/
    │   └── default.yml     ← 全体設定
    └── match/
        ├── base.yml        ← 基本スニペット
        ├── email.yml       ← メール定型文
        ├── code.yml        ← コードスニペット
        └── html.yml        ← HTMLテンプレート
    

    特殊文字・制御文字の書き方

    スニペットで改行やタブを使いたい場面は多いです。Espanso(YAML)での書き方を整理します。

    複数行テキスト(改行を含むスニペット)

    YAMLの ブロックスカラー | を使うのが最も読みやすい書き方です。

    # ブロックスカラー(|):改行がそのまま保持される
    - trigger: " &sig;"
      replace: |
        お世話になっております。
        株式会社サンプル
        山田太郎
        TEL: 090-1234-5678
    

    | のかわりに |- を使うと、末尾の改行を除去できます。

    # |-(末尾の改行なし)
    - trigger: " &hello;"
      replace: |-
        こんにちは。
        本日はよろしくお願いいたします。
    

    よく使う制御文字の一覧

    ダブルクォートで囲んだ文字列の中では、バックスラッシュによるエスケープシーケンスが使えます。

    記法 意味 用途
    n LF(改行) Unix/macOS/Linux の改行
    rn CR+LF(改行) Windows の改行
    r CR(復帰) 単体ではほとんど使わない(旧Mac)
    t タブ インデントや表の整形
    \ バックスラッシュ パスの記述(C:\Users\...
    " ダブルクォート 文字列内にクォートを含める

    ダブルクォート内での使用例

    # 改行を含む1行記述(ダブルクォートで囲む)
    - trigger: " &memo;"
      replace: "【メモ】n日時:n内容:n担当:n"
    
    # タブ区切りのテンプレート
    - trigger: " &tsv;"
      replace: "名前tメールt電話番号n"
    
    # Windows形式の改行
    - trigger: " &wintext;"
      replace: "1行目rn2行目rn3行目"
    
    # ファイルパス(バックスラッシュのエスケープ)
    - trigger: " &appdata;"
      replace: "C:\Users\username\AppData\Roaming\espanso"
    

    ブロックスカラー(|)とダブルクォートの使い分け

    方式 特徴 向いているケース
    | (パイプ) そのまま書ける。見やすい 長文、HTML、コードブロック
    |- (パイプ+ハイフン) 末尾改行なし 定型文、署名
    "..." (ダブルクォート) nt が使える 1行で制御文字を含めたいとき

    基本的には ブロックスカラー | でそのまま書く のが可読性が高くおすすめです。タブ文字や特殊な制御文字が必要な場合のみダブルクォートを使いましょう。


    便利な機能

    検索バー

    トリガーを忘れたときは ALT + Space(macOSでは Option + Space)でスニペット検索バーが開きます。キーワードで部分検索が可能です。

    日付・時刻の動的展開

    - trigger: " &now;"
      replace: "{{mytime}}"
      vars:
        - name: mytime
          type: date
          params:
            format: "%Y/%m/%d %H:%M"
            # 出力例: 2026/02/12 10:30
    

    主なフォーマット指定子は以下のとおりです。

    指定子 出力例 意味
    %Y 2026 年(4桁)
    %m 02 月(2桁)
    %d 12 日(2桁)
    %H 14 時(24時間)
    %M 30
    %S 05
    %A Wednesday 曜日(英語)

    シェルコマンド連携

    # クリップボードの内容をURLエンコード
    - trigger: " &urlencode;"
      replace: "{{output}}"
      vars:
        - name: output
          type: shell
          params:
            cmd: "pbpaste | python3 -c 'import sys,urllib.parse; print(urllib.parse.quote(sys.stdin.read().strip()))'"
    

    よく使うコマンド一覧

    コマンド 説明
    espanso start 起動
    espanso stop 停止
    espanso restart 再起動
    espanso status 動作状態の確認
    espanso edit 設定ファイルを開く
    espanso path 設定ファイルのパスを表示
    espanso log ログの確認(デバッグ用)
    espanso service register サービス登録(初回)
    espanso service unregister サービス解除

    トラブルシューティング

    macOS:launchctl exited with non-zero code exit status: 3

    macOSでサービス起動に失敗するケースがあります。以下のコマンドで unmanagedモード で起動してください。

    espanso service start --unmanaged
    

    それでも解決しない場合は、クリーンに再登録を試します。

    espanso service unregister
    rm ~/Library/LaunchAgents/com.federicoterzi.espanso.plist
    rm -rf ~/Library/Caches/espanso/
    espanso service register
    espanso start
    

    macOS:展開が動作しない

    アクセシビリティの許可を再設定 してみてください。

    システム設定 → プライバシーとセキュリティ → アクセシビリティ でEspansoを一度削除(−ボタン)してから再追加(+ボタン)します。macOSのアップデートで許可が無効化されることがあります。

    Windows:一部アプリで展開されない

    管理者権限で起動しているアプリでは、Espansoの展開が効かない場合があります。

    設定ファイル(config/default.yml)で バックエンドを変更 すると改善する場合があります。

    # config/default.yml
    backend: Clipboard
    # または
    backend: Inject
    

    スニペットが反映されない

    # YAMLの構文エラーがないか確認
    espanso log
    
    # 再起動して反映
    espanso restart
    

    YAMLはインデント(スペース)が重要です。タブ文字は使えません。半角スペース2つでインデントしてください。


    aText / PhraseExpress 等からの移行

    既存ツールのスニペットが多い場合、エクスポート機能でJSON等に書き出し、スクリプトで一括変換するのが効率的です。

    例えばaTextの場合は snippet.json ファイル(JSON形式)をエクスポートし、Pythonスクリプト等でEspansoのYAML形式に変換できます。トリガー文字列と置換テキストの対応を抽出して、YAMLの trigger / replace に変換するだけなので、プログラミングの基本知識があれば難しくありません。

    移行の際に大量のスニペットを変換する場合は、YAMLライブラリ(PythonのPyYAMLなど)を使って出力すると、エスケープ処理を安全に行えます。


    まとめ

    Espansoは無料かつオープンソースでありながら、有料ツールと遜色ない機能を備えたスニペットツールです。

    • 有料ツールの不安定さや課金に悩んでいる方
    • クロスプラットフォームで統一したスニペット環境が欲しい方
    • Git管理できるテキストベースの設定が好みの方

    にとっては、非常に有力な選択肢になるでしょう。

    設定がYAMLファイルなので、VS Codeなどのエディタで快適に編集でき、Gitでバージョン管理もできます。

    公式リンク

    関連記事

    Espanso Manager:Espansoのスニペット管理をGUIで効率化するWebアプリを作った Espansoのbase.ymlをブラウザ上で直感的に管理できるWebアプリ「Espanso Manager」をリリースしました。aTextライクな2ペイン構成で、検索・ソート・カテゴリフィルタ・YAML/CSVエクスポートに対応。React + TypeSc...  続きを読む