😎

Windows のサクラエディタのマクロ作業を、macOS で無料ツールだけで再現する話(TextMate 編)

に公開

Windows のサクラエディタのマクロ作業を、macOS で無料ツールだけで再現する話(TextMate 編)

結論(先にざっくり)

  • サクラエディタの「マクロ記録 → ショートカット一発で再生」だけを macOS で再現したいなら、
    現時点では TextMate 2 が一番シンプルで現実的だと思う。

  • TextMate は macOS 専用のオープンソースのテキストエディタで、公式サイトから無料でダウンロード可能。

  • 追加のプラグインなしで、次のことができる。

    • 検索/次検索/前検索(Cmd+F, Cmd+G, Shift+Cmd+G)
    • マクロの記録開始/終了(Cmd+Opt+M)
    • 最後に記録したマクロの再生(Shift+Cmd+M)
  • Windows でサクラエディタを使っていたときのように、

    「ちょっと複雑な編集手順を 1 行分だけ手でやって → その操作をマクロとして記録 →
    あとはショートカット連打で何百行にも同じ編集を自動適用」

    というワークフローを、macOS 上でもほぼ同じ感覚で再現できる。


このノウハウの位置づけ

別記事で、WinMerge の「2 ファイル比較」を macOS / Windows / Linux で再現する方法をまとめた。

次の課題は、

Windows のサクラエディタの「マクロ機能」を、macOS でどう再現するか?

だった。

  • 有料ツールは、
    「現場から貸与された Mac に個人ライセンスで勝手に入れてよいのか?」という問題がある
  • なので、できるだけ「無料で、どこでも再現できる方法」を優先したい

この記事では、

  1. サクラエディタで実際にやっていたマクロ作業の例
  2. なぜ正規表現だけではしんどいのか
  3. いろいろ試した結果、TextMate にたどり着いた話
  4. TextMate のインストール手順
  5. TextMate での「検索&マクロ」の具体的な操作手順(ショートカット付き)

までをまとめる。


サクラエディタでやっていたマクロ作業の例

こういう編集を一気にやりたい

例えば、全行に必ず

  • 行の途中に ABC$==X という文字列が含まれていて
  • その後ろには、その行ごとにバラバラな文字列が続いている

というテキストが 500 行くらいあるとする。

xx2222222  ABC$==X  x3aaあああああ
xx2222222  ABC$==X  x3aaあああああ
xx2333322222  ABC$==X  x3aaあああああ
...

ここでやりたいのは、例えば:

  • ABC$==X より後ろの文字列を全部削除して
  • 行全体を "..." で囲む

というような、ちょっと複雑めの「パターン編集」。

正規表現で頑張るのがつらいケース

もちろん、正規表現だけで書ける場合もある。

でも現実には、

  • 行ごとに細かい例外が混ざっていたり
  • 半角/全角が入り混じっていたり
  • 途中に ", \ などのややこしい文字が散らばっていたり

という、「正規表現だけで全部やるには、ミスるリスクが高い」パターンが多い。

毎回、正規表現を組んで検証して…とやっていると、

その正規表現を組む時間の方が長いし、メンテもつらい

という本末転倒になりがち。

サクラエディタのマクロで、どのように、しのいでいたか

そこで、Windows ではサクラエディタのマクロをよく使っていた。

イメージとしてはこんな感じ:

事前に Ctrl+F で検索窓を開き、 ABC$==X を入力して検索する
1行目の ABC$==X がヒットしたことを確認する
その後、Homeキーや、Ctrl+←などで、1行目の行頭にキャレットを移動する

  1. サクラエディタのマクロの記録を開始
  2. F3 キーで ABC$==X を検索して、その位置まで移動
  3. 右矢印キーを1回押すと、ABC$==X の直後に移動
  4. Shift+End または、Shift+Ctrl+→ で行末まで選択
  5. Delete で選択範囲を削除
  6. " を入力
  7. Home または、Shift+Ctrl+← キーで行頭に戻る
  8. " を入力
  9. 下矢印キーで次の行の先頭へ移動
  10. ここでマクロの記録を停止

この「1 行分の一連の手作業」をマクロとして記録しておく。

あとは、

  • マクロ再生用のショートカットキーを押しっぱなしにする(または連打する)

だけで、

  • 2 行目
  • 3 行目
  • 500 行目

まで、全く同じ手順で一気に編集されていく。

  • 本番機から吸い上げたログやデータを、
  • こういうマクロでガッと加工して、
  • テスト環境のデータをサクッと作る

という使い方をずっとしてきた。

この「ちょっと複雑な手作業を 1 行分だけやって、それをマクロで 500 行に適用する」という感覚を、
どうしても macOS でも再現したい、というのが今回の出発点。


macOS でサクラエディタのマクロ代替を探した条件

絶対に死守したい条件はこれ:

  • キーワード検索 → マクロの記録 → マクロの再生
    が、専用のショートカットキーだけで完結すること
  • 多少複雑なキー操作を含む編集を、そのまま記録してくれること
  • マクロ再生中、次の行に進む処理も含めて自動的に繰り返せること
  • macOS で、できれば無料で入手できること
  • 現場から貸与された Mac でも、一般的なやり方として導入しやすいこと
    (変なパッチや謎ビルドが要らない)

いろいろ検討したが、

  • VS Code の拡張機能系のマクロ
    → 動作が崩れたり、細かいカーソル挙動まで完全には再現しにくい
  • 有料エディタのマクロ機能
    → 機能的には強いが、「貸与 Mac に個人ライセンスを入れてよいか?」問題が残る

という理由で、「誰にでも勧められる一択」とは言い切れなかった。

その中で、最終的に落ち着いたのが TextMate 2 だった。


TextMate 2 とは何か(ざっくり)

  • macOS 専用のテキストエディタ
  • もともと商用だったが、現在は TextMate 2 がオープンソース化されている
  • 公式サイトから無料でダウンロードして使える
  • マクロ・スニペット・複数カーソルなど、開発向けの機能がいろいろ入っている

TextMate の入手とインストール

1. ダウンロードサイト

  1. ブラウザで次の URL を開く

  2. 「TextMate 2.0.23」などの最新版へのリンクからダウンロードする

    • ダウンロードされるファイル名の例:
      TextMate_2.0.23.tbz

2. 展開してアプリ本体を用意する

  1. ダウンロードフォルダで TextMate_2.0.23.tbz をダブルクリックする
  2. 自動的に展開されて、中に TextMate.app が現れる
    .tbz の中身がそのままアプリ本体)

3. Applications フォルダにインストール

  1. Finder で TextMate.app をドラッグ
  2. Applications フォルダにドロップする

これだけでインストール完了。

以後は、

  • Launchpad から「TextMate」を起動
  • あるいは /Applications/TextMate.app をダブルクリック

で普通のアプリとして使える。


TextMate での基本的な検索ショートカット

サクラエディタの「F3 で次を検索、Shift+F3 で前検索」に相当するものが、
TextMate では下記のとおりとなっています。

検索まわりのショートカット(デフォルト)

  • 検索ダイアログを開く:
    Cmd+F
  • 次を検索:
    Cmd+G
  • 前を検索:
    Shift+Cmd+G

macOS 共通のショートカットなので、他のアプリ(Safari 等)と同じ感覚で使える。


TextMate のマクロ機能(サクラエディタのマクロ相当)

マクロ関連のデフォルトショートカット

TextMate 2 には標準で「マクロの記録/再生」が用意されていて、デフォルトのキーは次の通り。

  • マクロの記録開始/記録終了:
    Cmd+Opt+M(Command + Option + M)
    • 1 回押すと「記録開始」
    • もう 1 回押すと「記録終了」
  • 最後に記録したマクロを再生:
    Shift+Cmd+M(Shift + Command + M)

サクラエディタの

  • 「マクロの記録開始/終了」
  • 「マクロの再生」

に相当する操作が、TextMate ではこの 2 つのショートカットに割り当てられているイメージ。


Mac のテキスト編集時のショートカット

行頭、行末に関するショートカット

  • 行頭へキャレットを移動
    ⌘←(Command + ←)

  • 行末へキャレットを移動
    ⌘→(Command + →)

  • 現在のキャレット位置から行頭まで選択する形で行頭へキャレットを移動
    ⇧⌘←(Shift + Command + ←)

  • 現在のキャレット位置から行末まで選択する形で行末へキャレットを移動
    ⇧⌘→(Shift + Command + →)

実例:サクラエディタでやっていた ABC$==X の編集を TextMate で再現する

ここからは、冒頭で書いた「ABC$==X を含む 500 行の編集」を TextMate でどうやるかを、
実際のキー操作ベースで書いていく。

(以下の例では、「ABC$==X の後ろを削除して、行全体をダブルクォートで囲む」という編集を行う)

前提準備

  • Cmd+F で検索ダイアログを開く
  • 検索キーワードに ABC$==X を入力
  • Enter で 1 件目をヒットさせる
  • Cmd+G で、次の ABC$==X がヒットし、該当文字列が選択状態として、
    そのまま、→ キーを押すとキャレットがヒットした単語の末尾文字の一つ右になる
    状況を作っておく
  • その上で、1行目の行頭にキャレットをあわせる。

1 行分だけ手作業で編集する手順を「マクロとして記録」

  1. Cmd+Opt+M を押して、マクロの記録を開始する
    (ウィンドウ下部のステータスバーに Recording 的な表示が出る)

  2. 1行目を実際に自分で操作し、各行にすべきマクロの処理を記録する

    • Cmd+G で、1行目 ABC$==X がヒットし、該当文字列が選択状態になる
    • そのまま、→ キーを押してキャレットが、ヒットした単語の末尾文字の1つ右になる
    • Shift+Cmd+→で行末までを選択状態にする。
    • Deleteキーを押すと、 ABC$==X 以降、行末までの文字列が消える
      キャレットは、 ABC$==X の後ろ、つまり、行末の位置となる
    • " を入力する
    • Cmd+←で 行頭にキャレットを移動させる
    • " を入力する。
    • ↓ を押して2行目の行頭にキャレットを移動させる
      ⭐️ ここまで来たら、「次の行に対して同じ作業を始められる位置」にいる状態 ⭐️
  3. Cmd+Opt+M をもう一度押して、マクロの記録を終了

これで、「1 行目を編集して 2 行目の先頭に移動するまで」の一連の操作が、
最後に記録したマクロとして保存された。

マクロを 500 行分に一気に適用する

あとはひたすら、

  • Shift+Cmd+M

を押すだけ。
押しっぱなしでよい。連打でもよい。
最後まで行った時、やりすぎて変になったら、
Cmd+Zで部分的にやり直して、また、やるなどして微調整すればよい。

  • 2 行目の先頭で Shift+Cmd+M
    → 2 行目の編集+ 3 行目の先頭へ移動
  • 3 行目の先頭で Shift+Cmd+M
    → 3 行目の編集+ 4 行目の先頭へ移動

という形で、押すたびに 1 行ずつ同じ編集が適用されていく。

慣れてきたら、

  • Shift+Cmd+M を連打する
  • ある程度目視しながら、不審な行があればそこで一旦止める

という運用で、サクラエディタのマクロとほぼ同じノリで使える。


まとめ:WinMerge 問題が VS Code で解決したように、サクラのマクロ問題は TextMate でしのぐ

  • 2 ファイルの比較編集(WinMerge 的な用途)は、
    VS Code の diff 機能だけでかなりいい線まで再現できる、という話は別記事にまとめた。
  • 一方で、
    「ちょっと複雑な手作業を 1 行分やって → マクロで何百行にも適用する」
    というサクラエディタのマクロ文化は、VS Code の拡張だけだと再現が難しかった。

この記事では、その穴を埋めるために、

  • macOS 上で無料で使える
  • インストール手順もシンプル
  • デフォルトのショートカットだけで
    • 検索(Cmd+F, Cmd+G, Shift+Cmd+G)
    • マクロ記録(Cmd+Opt+M)
    • マクロ再生(Shift+Cmd+M)

が揃っている TextMate 2 を採用した。

これで、

  • Windows PC では「サクラエディタ + マクロ」
  • macOS では「TextMate + マクロ」
  • 2 ファイル比較は OS 共通で「VS Code の diff 機能」

という形で、

どの OS を渡されても、とりあえず自分の Zenn 記事を開けば
いつもの「マクロで大量編集」「2 ファイル比較」がすぐ再現できる

という状態を作れた

Discussion