文章を一瞬で入力する|市販ツールをやめて自作に切り替えた理由

「毎回止まる…」
「処理が重い…」
「起動できない…」

文章を一瞬で入力できる「PhraseExpress」を使っていました。

しかし、なかなか起動が安定せず…。

そこで、自作ツール(AutoHotkey)に乗り換えたので、その経緯をまとめました。

※自作したツールの呼び出し画面(若干手作り感はありますが)

Contents

PhraseExpressへの不満

PhraseExpressを使えば、メルマガやメール、YouTube説明欄などの定型文を「決めたキー」で一瞬で呼び出せるので便利でした。

しかし、次のような不満がありました。
(私の使い方が悪いのかもしれませんが。)

  • 毎回、アプリを起動しないとツールが動かない
  • 起動に時間がかかる・途中で止まる
  • 動作が安定しない

当初はそこまで感じていなかった違和感も、毎日積み重なると徐々にストレスを感じるように。

「このままでは良くないなぁ」

と思い、自作する選択をしました。

他のツールに移行することも一瞬考えましたが、ひとりで使う分なら自作で十分だろうということで。

AutoHotkeyでの実装方法(自作スニペット)

具体的には「AutoHotkey」を使います。

導入の仕方については、以下の記事やYouTube動画をご覧いただければ。

導入関係の記事・動画

◇ブログ記事

◇YouTube
【Gmail×AutoHotkey】複数のGmailアカウントをワンキーで一瞬切り替え(PC)

フォルダの構成

まず、全体像です。

  • SnippetsTrigger.ahk
  • snippetsフォルダ
    • 呼び出したい文章.txt

という2階層に分けて運用します。

コードの内容

SnippetsTrigger.ahkには、呼び出し用のコードを書いていきます。

コードの詳細はこちらを。
#Requires AutoHotkey v2.0
#SingleInstance Force
SendMode "Input"

; ============================================
; 設定
; ============================================
SNIP_DIR := EnvGet("USERPROFILE") "●●(snippetsフォルダのパスを記載)"

; ここに追加して管理
SNIPS := [
    ["●●(呼び出しキーを記載)", "●●(タイトルを記載)",         "●●.txt"],
    
]

; ============================================
; 長文用・安定貼り付け
; ============================================
PasteText(text) {
    A_Clipboard := ""
    Sleep 30
    A_Clipboard := text

    if !ClipWait(2.0)
        return false

    ; Web入力欄向け猶予
    Sleep 80
    SendEvent "^v"
    Sleep 120
    return true
}

ExpandByFile(file) {
    global SNIP_DIR
    try {
        PasteText(FileRead(SNIP_DIR . file, "UTF-8"))
    }
}

ExpandByHotstring(hs) {
    global SNIPS
    for item in SNIPS {
        if (item[1] = hs) {
            ExpandByFile(item[3])
            return
        }
    }
}

; ============================================
; Hotstring 自動登録(安全版)
; ============================================
HotCb(hs, *) {
    ExpandByHotstring(hs)
}

for item in SNIPS {
    hs := item[1]
    Hotstring(":?:" hs, HotCb.Bind(hs))
}

; ============================================
; Alt + S → 一覧 → 選択 → 展開
; ============================================
!s::
{
    global SNIPS

    list := ""
    i := 1
    for item in SNIPS {
        list .= i ": " item[2] "  [" item[3] "]  <" item[1] ">`n"
        i++
    }

    ib := InputBox(
        "番号 or キーワードを入力してください`n"
        . "(例: 1 / メルマガ / YouTube / 校閲 / mail / 1mmm)`n`n"
        . list,
        "スニペット選択(Alt+S)"
    )

    if (ib.Result != "OK")
        return

    q := Trim(ib.Value)
    if (q = "")
        return

    ; ① 番号
    if RegExMatch(q, "^\d+$") {
        idx := Integer(q)
        if (idx >= 1 && idx <= SNIPS.Length)
            ExpandByFile(SNIPS[idx][3])
        return
    }

    ; ② Hotstring一致
    for item in SNIPS {
        if (q = item[1]) {
            ExpandByFile(item[3])
            return
        }
    }

    ; ③ 表示名 / ファイル名 部分一致
    for item in SNIPS {
        if InStr(item[2], q) || InStr(item[3], q) {
            ExpandByFile(item[3])
            return
        }
    }
}

5行目周辺の以下を更新すれば、コピペで使えます。

他の箇所は触れる必要はありません。

; ============================================
; 設定
; ============================================
SNIP_DIR := EnvGet("USERPROFILE") "●●(snippetsフォルダのパスを記載)"

; ここに追加して管理
SNIPS := [
    ["●●(呼び出しキーを記載)", "●●(タイトルを記載)",         "●●.txt"],
    
]

“●●(snippetsフォルダのパスを記載)”

は、該当フォルダを右クリックして「パスのコピー」を選択すれば取得できます。
(もしくはフォルダを選択して「Ctrl+Shift+C」でも)

そして、.txtファイルは呼び出したい文章を記載すればOKです。

使い方

「●●(呼び出しキーを記載)」に記載した文字を入力すれば呼び出せます。
環境によってはEnterを押さないと起動しないこともあるため、その場合はEnterを押せばOKです。

もしくは、「Alt +S」で一覧を表示して入力することも可能です。
(冒頭の写真のように)

自作後に感じたメリット

メリット①:動作が軽い

まず、大きなメリットとしては

「動作が軽い」

ということが挙げられます。

PhraseExpressの動作は割と重くて、カクつくことも多かったので。

メリット②:カスタマイズ性が高い

2つ目は、カスタマイズ性が高いということです。

.txtファイルを追加すれば、いくらでも入力種類を増やせますし、その更新も簡単です。
またUIが気に入らなければ、「SnippetsTrigger.ahk」ファイルを編集して改善することも可能です。

メリット③:無料で使える

PhraseExpressも無料版がありますが、AutoHotkeyは完全に無料です。
(ひとりならPhraseExpressの無料版で十分かもしれませんが)

そして、少しだけコードの知識があれば、他の使い方も数多くあります。

「実現したいこと」が明確であれば、AIを活用してコードを組んでもいいでしょう。

以上、ひとりで使う分には、
世の中のツールより自作した方が使いやすいケースもある、という話でした。

もし響くところがあれば、一度試してみてください。

では、また次回。

編集後記

◇日記
 昨日は、早朝にラン・メルマガ・YouTube・ブログから。
 日中は三男と過ごしつつ、執筆作業を中心に。
 次男が発熱して、途中で幼稚園から帰宅。
 三男を抱っこ紐しつつ、長男の習い事の送り迎えを。
 妻と分担しながら対応し、合間に執筆も。

◇ブログネタ経緯
 とても快適になった事例だったので紹介したく。

◇1日1新
 PhraseExpressをAutoHotkeyに乗り換え

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
Contents