【Rider】File WatchersをActions on Saveに登録してファイル保存時に任意の処理を実行する

RiderでFile WatchersをActions on Saveに登録してファイル保存時に任意の処理を実行する方法です。

Rider 2023.2.1

はじめに

RiderのFile WatchersをActions on Saveに登録すると、変更が加わったファイルが保存されたときに任意の処理を実行することができます。

www.jetbrains.com

本記事ではこれの使い方についてまとめます。

実行するスクリプトを書く

まずファイル保存時に実行するためのシェルスクリプトを書きます。
シェルに限らずあらゆるものを実行できるのですが、今回はテストということで簡単なシェルを書きます。

引数としてファイルパスを受け取り、そのファイルの先頭にファイルパスをコメントとして書き込むシェルスクリプトを記述しました。

#!/bin/bash

# 引数からファイルパスを取得
FILE_PATH=$1

# ファイルパスをコメント形式でフォーマット
COMMENT="//filepath: $FILE_PATH"

# ファイルが存在するかチェック
if [ ! -f "$FILE_PATH" ]; then
    echo "指定されたファイルが存在しません: $FILE_PATH"
    exit 1
fi

# ファイルの最初の行を読み込み
FIRST_LINE=$(head -n 1 "$FILE_PATH")

# 最初の行が "//filepath:" で始まる場合
if [[ "$FIRST_LINE" == "//filepath:"* ]]; then
    # 最初の行が既に指定されたファイルパスと一致する場合、何もしない
    if [ "$FIRST_LINE" = "$COMMENT" ]; then
        echo "ファイルは既に適切なコメントを含んでいます。"
        exit 0
    fi

    # ファイルの残りの内容を取得
    tail -n +2 "$FILE_PATH" > "$FILE_PATH.tmp"

    # 新しいコメントとファイルの残りの内容を結合
    echo "$COMMENT" > "$FILE_PATH"
    cat "$FILE_PATH.tmp" >> "$FILE_PATH"

    # テンポラリファイルを削除
    rm "$FILE_PATH.tmp"
else
    # ファイルにコメントを追加
    echo "$COMMENT" | cat - "$FILE_PATH" > "$FILE_PATH.tmp" && mv "$FILE_PATH.tmp" "$FILE_PATH"
fi

ファイルの変更をトリガーとしてこのスクリプトを実行するので、変更する必要がない場合にはファイルを書き換えないようにしてください。
書き換えてしまうとそれがまたファイルの変更として検知されてしまい、このスクリプトが無限に実行され続けてしまいます。

実行権限を付与

次にこのシェルスクリプトに実行権限を付与しておきます。
これをやらないとRiderから実行したときにエラーになりました。

$chmod +x シェルスクリプトファイルのパス

File Watcherを作成

次にRiderでFile Watcherを作成します。

Settings > File Watchers > + ボタン > custom を選択します。

File Watcher作成

すると下図のウィンドウが現れるため、画像のように設定します。

File Watcherの設定

Advanced Optionsに関しては下図の通り設定します。

Advanced Options

以上で設定は終わりなので保存しておきます。

動作確認

あとは適当なC#スクリプトを作成して編集・保存すると最上部にファイルパスが記述されることが確認できます。

動作確認

参考

www.jetbrains.com