メインコンテンツまでスキップ

誰でも簡単!! LR のスクリプトの作成とコマンドライン実行による自動化

近藤 匠真

Lightning Review (以下、LR)開発チーム、入社1年目の近藤です!
新人です!!と言いたいところですが、気付けばもう次の新人が入社する季節となりました。あっという間です。
日々、 頼れる LR メンバーの先輩たちに囲まれ、楽しく開発しています。ほんと感謝しかないです。😭
自分もそんな先輩になれるように努めます!!!

さて今回は、LR 2.5 に搭載された新機能「 ScriptEditor 」の便利な活用例として、誰でも簡単にできるスクリプトのコマンドライン実行を紹介します!

とはいえ、何のことやら??と思う方もいらっしゃると思います。
以前のブログでは、 ScriptEditor で LR の操作を自動化できることをご紹介しました。  
実は、バッチファイルを用意することで、 ScriptEditor を起動しなくても、作成したスクリプトを実行できてしまうんです!  
今回は、「たった10行のコードを書くだけで、指摘を重大度"高"でフィルタする機能が作成できて、いつでも実行できる!」ところをお見せします。
実際に作成したスクリプトを、バッチファイルにより実行している様子がこちらです。

スクリプトのコマンドライン実行のデモ画像

では実際に、上記画像の重大度"高"でフィルタするスクリプトを ScriptEditor 上で作成していきましょう。

大まかな流れは以下のようになります。
1 レビューファイルに関連する指摘の一覧を取得
2 指摘情報から重大度が高の指摘IDを取得
3 取得した指摘でフィルタ

まずアクティブなレビューウインドウを取得して LR への操作を可能にします。
下記画像のようにインテリセンスが効いているので、わざわざ公開されている LR の API を見に行かなくとも必要な情報を取得できます。

スクリプトのイ�ンテリセンス

次に、フィルタするために指摘の一覧を取得します。
review.GetAllIssues() で指摘の一覧を取得できます。

そして、指摘の一覧から重大度高の指摘IDを取得します。
インテリセンスをみると「重大度 本プロパティの・・・ Low 低 Middle 中 High 高」と表示されています。
従って、issue.Importance が High に一致する指摘の ID を取得すればよいですね。
重大度の情報

もし、優先度高によるフィルタを作成したいなと考えれば、issue.Priority が High に一致する指摘の ID を取得すればよいです。
優先度の情報

このようにインテリセンスを活用することで、簡単にフィルタしたい指摘を選択できます。
優先度"高"かつ重大度"高"のフィルタなど、用途に合ったオリジナルフィルタも作成できますね!
最終的に完成したコードは以下。

// アクティブなウインドウのレビューを取得する
var review = App.ActiveReviewWindow.Review;

// 重大度高の指摘のIDをカンマ区切りの文字列として設定する
var issueIds = string.Empty;
foreach(var issue in review.GetAllIssues())
{
 if (issue.Importance == "High")
 {
  issueIds += "," + issue.Id;
 }
}

// フィルタを適用する
App.ActiveReviewWindow.ApplyIdFilter(issueIds);

たった10行のコードでフィルタ機能が作れるのです。ものすごく簡単ですよね。

では、作成したスクリプトを実行するバッチファイルを、作成しましょう。
以下のように、実行したいスクリプトのファイルパスをコマンドラインの引数に設定したバッチファイルを作成します。

set exePath="C:\Program Files (x86)\Denso Create\Lightning Review\LightningReview.exe"
%exePath% --run "{作成したスクリプトのファイルパス}"

作成したバッチファイルを任意の場所に保存し、実行すると、冒頭の動画のようなフィルタが可能になります!

ScriptEditor を利用すれば、簡単に LR の操作を自動化できます!
上記の説明を参考に、ぜひ使ってみてください!

以下のリンク先にて、スクリプトのサンプルを公開しています。よろしければこちらもご確認ください。
https://docs.lightning-review.com/help/extensions/script-editor/sample-list