見出し画像

Raycastを使ってtextlintで自動修正を実行すると便利だった

昨日、「Fullstack AI Dev & Raycast Summit」というイベントに参加しました。

このイベントでは、AIの講演のほか、Raycastについての講演もありました。
そして、オフライン会場での懇親会(Networking)で、Raycastについていろいろな方とお話しできました。

その中で、「Raycastからtextlintを実行したい」という話がありました。
もちろん、Extensionを開発する方法もありそうですが、その場でもコマンドでできそう、という話をしていて、実際に試してみました。

コマンドを実行できる「Script Commands」

Raycastには「Script Commands」という機能が標準で用意されています。

bashやApple Script、Python、Ruby、node.jsなどを実行できる機能で、Raycastから「Create Script Command」を呼び出すと作成できます。

Create Script Command

ここでテンプレートやモード、タイトルなどを選ぶと、スクリプトが作成されます。
今回は「Template」の欄で「Bash」、「Mode」の欄で「Full output」、「Title」の欄で「textlint」を設定します。

その他は適当に設定して「Command + Enter」で作成します。
すると、指定したフォルダ(私はiCloudのRaycastフォルダ)に「textlint.sh」というファイルが生成されました。

生成された内容を確認する

生成されたファイルを見ると、次のようになっています。

#!/bin/bash

# Required parameters:
# @raycast.schemaVersion 1
# @raycast.title textlint
# @raycast.mode fullOutput

# Optional parameters:
# @raycast.icon 🤖

# Documentation:
# @raycast.author masuipeo
# @raycast.authorURL https://raycast.com/masuipeo

echo "Hello World!"

この「@raycast.icon」のところではアイコンを指定できます。
また、最終行に記述されているものが実行される内容で、今回は「Hello World!」を出力する処理だけが書かれています。

このScript Commandを実行するには、Raycastで「textlint」と入力します。
問題なく「Hello World!」が表示されることを確認しておきましょう。

textlintを実行できるようにする

続いて、textlintを実行できるようにします。
textlintのインストールについては、さまざまなWebサイトに情報がありますので、設定してみてください。

まずはターミナルから実行できることが第一段階です。
たとえば、次のように実行して問題なく出力されることを確認します。

$ npx textlint test.txt

これで、文章中の修正点を表示してくれます。
修正点を表示するだけでなく、自動的に修正するには、「--fix」というオプションを指定します。

$ npx textlint --fix test.txt

これで、自動的に修正した内容でファイルが上書きされます。

Script Commandを設定する

ここまでできれば、Script Commandでtextlintを実行します。

Script Commandでは引数を取得することもできますが、この引数では複数行のテキストを入力すると改行が除去されてしまいます。
そこで、クリップボードにコピーしてから呼び出すことにします。

そして、Script Commandでクリップボードを取得し、ファイルに保存します。
このファイルに対してtextlintで自動的に修正し、修正された内容をファイルに保存します。
そして、保存された内容を画面に表示することにします。

たとえば、次のような処理が考えられます。

#!/bin/bash

# Required parameters:
# @raycast.schemaVersion 1
# @raycast.title textlint
# @raycast.mode fullOutput

# Optional parameters:
# @raycast.icon ✅

# Documentation:
# @raycast.author masuipeo
# @raycast.authorURL https://raycast.com/masuipeo

cd /path/to/save
pbpaste > lint.txt && npx textlint --fix lint.txt 1> /dev/null && cat lint.txt

まずは保存先のディレクトリに移動します。
そして、「pbpaste」でクリップボードの内容を貼り付けてファイル「lint.txt」に保存しています。
そして、textlintを実行して自動修正します。
textlintの出力は不要なので、/dev/nullを指定して破棄しています。

最後に、「cat」でファイルの内容を出力すると、それがRaycastの画面上に表示されます。

Raycastに表示されたあとは、「Command + K」→「Shift + Command + C」でコピーできます。
もちろん、最後の「cat lint.txt」の部分を「cat lint.txt | pbcopy」のようにしてクリップボードにコピーするようなプログラムでもいいかもしれません。

まとめ

ちょっとした処理をtextlintするときは、VS Codeの「校正くん」などを使っていましたが、Raycastから実行できると便利ですね。

いいなと思ったら応援しよう!