はじめに

エンジニアになった当初から Windows ユーザーで、メモにはサクラエディタを使っていました。

しかし、仕事用端末を Mac に乗り換えることになり、サクラエディタに使い勝手が近いと評判の CotEditor を使い始めました。

サクラエディタではマクロを使って JSON の整形などを行っていたので、CotEditor でも同様のことができるだろうと思っていましたが、なかなか活用できていませんでした。

今回、CotEditor のスクリプト機能に挑戦してみようと思います。

CotEditorサイト:https://coteditor.com/
本記事で使用しているバージョン:4.0.9

まずはヘルプを確認

ヘルプにスクリプトの利用方法が書いてあるのですが、少し見つけづらかったので記載しておきます。

①画面上部のメニューのヘルプ > CotEditorスクリプトガイド > スクリプトについて をクリック

②CotEditorスクリプトのページが立ち上がるので「UNIXスクリプトとの連携」をクリック

③ UNIXスクリプトとの連携のページに具体的なPythonスクリプトのサンプルが記載されています。

Pythonスクリプトの記載方法

スクリプトファイルの配置場所

画面上部の「スクリプトフォルダを開く」をクリックすると Finder が立ち上がるのでそこにPythonファイルを配置します。

スクリプトファイルの命名

参考:CotEditorスクリプトのファイル名規則 (ヘルプ内のページ)

表示順

ファイル名の先頭に『「数字」+「)」』とすると順番に並んで表示される
例) 01)test.py

キーボードショートカット

ファイル名の拡張子の直前に 『「.」+「修飾キー」+「ショートカットキー」』を追加すると、キーボードショートカットを割り当てることができる
@ = コマンドキー, ^ = コントロールキー
例) test.@1.py とするとコマンド + 1 でスクリプトを実行

Pythonスクリプトファイルの中身

#!/usr/bin/env python
# %%%{CotEditorXInput=Selection}%%%
# %%%{CotEditorXOutput=ReplaceSelection}%%%

import sys
for line in sys.stdin:
    print(">" + line.rstrip())

上記は、ヘルプに記載されているサンプルコードです。

1行目

#!/usr/bin/env python

Shebang(シェバン)の記載
上記だと python にパスが通っている必要があります。
ターミナル上でpython -V を実行して確認、こちらで何も表示されない場合は
python3 -V で表示されれば #!/usr/bin/env python3 と記載してあげればよいです。

2行目

# %%%{CotEditorXInput=Selection}%%%

入力についての設定
CotEditorXInput=xxx のxxxの記載に応じて変更可能です。

xxx 意味
Selection 現在選択しているテキスト
AllText 書類のすべてのテキスト
None 何も渡さない(デフォルト)

3行目

# %%%{CotEditorXOutput=ReplaceSelection}%%%

出力についての設定
CotEditorXOutput=xxx のxxxの記載に応じて変更可能です。

xxx 意味
ReplaceSelection 現在選択しているテキストを出力内容で置き換えます。
ReplaceAllText 書類のすべてのテキストを出力内容で置き換えます。
InsertAfterSelection 選択範囲の直後に出力内容を挿入します。
AppendToAllText 書類の末尾に出力内容を挿入します。
NewDocument 新規書類を作成し、そこに出力内容を挿入します。
Pasteboard puts クリップボードに出力内容を格納します。
Discard 何もしない(デフォルト)

4行目以降

4行目以降は Python の記載です。
sys.stdin で入力を受け取り、print で出力のようです。

JSON整形スクリプトを作ってみる

ファイル名

01)format_json.@1.py
  • 並び順を指定するためにファイル名の頭に 01) を付けました。
  • ショートカットで起動できるように.@1 を拡張子の直前に記載しました。
  • こちらの記載でコマンド + 1 のショートカットでスクリプトを実行できるようになります。

Pythonスクリプトファイル

#!/usr/bin/env python3
# %%%{CotEditorXInput=Selection}%%%
# %%%{CotEditorXOutput=ReplaceSelection}%%%

import json
import sys

try:
    # 選択範囲のテキストを取得
    json_string = sys.stdin.read()

    # JSON をパース
    json_data = json.loads(json_string)

    # JSON を整形
    formatted_json = json.dumps(json_data, indent=2, ensure_ascii=False)

    # 整形した JSON を出力
    print(formatted_json)

except json.JSONDecodeError as e:
    # JSONのパースに失敗した場合はエラーメッセージを出力
    print(f"JSONのパースに失敗しました: {e}")

選択箇所のテキストを読み取りJSONを整形して、選択箇所のテキストを置き換えるスクリプトを作成しました。

スクリプトを実行

①CotEditorで整形前のテキストを選択

コマンド+1 のショートカットで整形されたJSONが出力されました。

おわりに

以前から気になっていた CotEditor のスクリプト機能を、今回ついに試すことができました。

以前、少し調べて試してみたのですが、うまく動作させることができず諦めていました。

今回は公式ドキュメントをよく読んでから試したところ、無事に動作させることができました。やはり、公式ドキュメントをよく読むことが重要ですね。

今回の JSON を整形するスクリプトも、生成 AI に一瞬で作ってもらえました。便利そうな活用方法を思いついたらスクリプトを作成しどんどん試していきたいです。