はじめに
エンジニアになった当初から 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 に一瞬で作ってもらえました。便利そうな活用方法を思いついたらスクリプトを作成しどんどん試していきたいです。