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

有名どころでは 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サブスク制。料金が高すぎ
    DashmacOS限定

    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~\Users\USER-NAME\AppData\Roaming\espanso\match\base.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 を実行してください。

    トリガーの命名ルール

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

    記号 / 特殊文字  :  (スペース) + & + keyword + ;;    例) &iq;; → ¿
    (※セミコロン1回は文字参照自体の表記と同じため、セミコロン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: |-
        こんにちは。
        本日はよろしくお願いいたします。
    

    よく使う制御文字の一覧

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

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

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

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

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

    方式特徴向いているケース
    | (パイプ)そのまま書ける。見やすい長文、HTML、コードブロック
    |- (パイプ+ハイフン)末尾改行なし定型文、署名
    "..." (ダブルクォート)\n\t が使える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
    

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

    指定子出力例意味
    %Y2026年(4桁)
    %m02月(2桁)
    %d12日(2桁)
    %H14時(24時間)
    %M30
    %S05
    %AWednesday曜日(英語)

    シェルコマンド連携

    # クリップボードの内容を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でバージョン管理もできます。

    公式リンク