最近、エディタを VS code に移行し、校正ツールを TextLint にしました。
以前、RedPen の SuggestExpression のために作成した TSV があり、
これを prh.yml に変換したかったので、Google スプレッドシート の内容を prh.yml にする Google Apps Script を作ってみました。

作成したものについて記載します。


作成したスクリプト

kemsakurai/gas-prhConfigGenerator: Container bind script to generate prh configuration file from Google Spreadsheet

に、置いてあります。clasp を使って TypeScript で 実装してみました。
以下の機能があります。

  1. 初期化。config シートを作成する。
  2. config シート の記載内容を元に、prh.yml を生成する。

使い方

kemsakurai/gas-prhConfigGenerator: Container bind script to generate prh configuration file from Google Spreadsheet使い方を説明します。

前提

Node.js と、clasp のインストールが前提で必要です。
参考になる記事をリンクしておきます。

リポジトリをクローンする

git clone https://github.com/kemsakurai/gas-prhConfigGenerator.git <project_name>   

クローンしたディレクトリに移動して、npm install実行する

cd <project_name>
npm install

.clasp.jsonスクリプト ID を変更する

記録先となるスプレッドシートを作成し、コンテナバインドスクリプト のスクリプト ID を取得します。
スクリプト ID の取得手順は以下の通りです。

  • 作成したスプレッドシートのツールからスクリプトエディタを開きます。
    2019-02-03 17.44.41.png - Google ドライブ
  • スクリプトエディタが起動します。ファイルメニューのプロジェクトのプロパティを開きます。
    2019-02-03 17.45.11.png - Google ドライブ

  • ウィンドウが開きます。スクリプト ID が表示されるのでコピーします。
    2019-02-03 17.46.15.png - Google ドライブ

  • .clasp.json内容を修正
    .clasp.json scriptId に 取得した スクリプト ID を貼り付けます。

    {
      "scriptId": "<your_script_id>",
      "rootDir": "dist"
    }
    

ビルド、デプロイ

  • ビルド
    bundle.js dist ディクレトリ配下に作成します。

    npm run build     
    

  • デプロイ
    ビルドし、.clasp.json指定したスクリプトに対してデプロイを実施します。

    npm run deploy     
    

スプレッドシートの設定、prh.yml 生成

スクリプトのデプロイが完了すると、以下のようなメニューが表示されます。
2019-02-03 19.12.07.png - Google ドライブ
config のシートの作成、prh.ymlの作成を行います。

1. Initialize

initialize を実行し、config シートを作成します。
以下のようなレイアウトのシートが作成されます。
2019-02-03 19.15.47.png - Google ドライブ

2. Open Download Dialog

config シートの内容をもとに、Google ドライブ上に、prh.yml を作成し、作成したファイルのダウンロード URL を ダイアログに表示します。
以下、作成した prh.yml の抜粋です。
* prh.yml

version: 1
rules:
  - expected: 10
    pattern: 10
  - expected: 1
    pattern: 1
  - expected: 2
    pattern: 2
  - expected: 3
    pattern: 3
  - expected: 4
    pattern: 4
  - expected: 5
    pattern: 5
  - expected: 6
    pattern: 6
  - expected: 7
    pattern: 7
  - expected: 8
    pattern: 8
  - expected: 9
    pattern: 9
  - expected: ActionController
    pattern: Action Controller
....

スクリプトの動作の説明、作り込みできてない部分

以下、スクリプトの動作について説明します。

  • 作成する yml ファイルについて
    Google Drive の ルートディレクトリに、PrhConfigいうディレクトリを作成し、その中に {Date.getTime()の<wbr>戻り値}_prh.yml形式でファイルを作成します。

  • yml ファイルのサポートする書式について
    prh任意項目で入力されている場合は、以下のような出力になります。

      - expected: ActionController
        pattern: Action Controller
        prh: ActionController が正しい    
    

prh はその他のフォーマットもサポートしていますが、スプレッドシート の入力内容からの変換が手間がだったのと、 RedPen の SuggestExpression の TSV ファイルを変換するのが目的だったので、このレベルの実装でなんとかなりました。

  • 正規表現について
    正規表現のエスケープする処理を実装していますが、上手く変換できていないようで、幾つか prh に読み込ませる際にエラーになったパターンがありました。

      public static regExpEscape(literal_string) {
        return literal_string.replace(/[\\^$.*+?()[\]{}|]/g, '\\$&');
      }
    
    現状は、正規表現記号を含まない文字列を入力してもらえればいいかと思います。

  • Google Apps Script の ファイルダウンロード処理について
    ファイルを保存せずに、ファイルダウンロード処理を実装できるかと思いましたが、ダメでファイルを一度出力して保存するようにしました。
    保存せずにダウンロードを実現している情報もあったので、できるのかとは思いますが、ファイルのエスケープとかの問題があるのかもしれません。


RedPen SuggestExpression についての記事

RedPen の SuggestExpression について以前記事を書きました。
今回のスプレッドシート に記載した TSVの元ネタが記載してあります。
RedPen SuggestExpression を使ってブログの文言が統一されているかチェックする | Monotalk


参考

以下、作成時に参考にした記事になります。
* GoogleAppsScript JavaScriptを用いてCSVをローカルに書き出す実装 - Qiita

コメント