コネヒト開発者ブログ

コネヒト開発者ブログ

Slackで簡単チェック!textlint で始める文字校正Bot


f:id:fortkle:20170216212251p:plain
 2 @fortkle 

SlackBot


issue



SlackBot





この文章はご存知の通り、ダミーテキストです ヽ(^o^)丿
そして、様々な、エラーチェックに、引っかかる文章になっています。そして、意味はありません。
この文章が書くのが自動ではなく手動なのが地味に大変だったところです。
いや、大変だったとはいえないこともないです。このBOTはナウでヤングなやり方で
文章をチェックすることができます。チェック結果はslackで即座に見れます。
焦ってしまうとと誤字をすることがありますよね。そんなときに便利です。

SlackBotcheckDM
check
ここにチェック
したい文章を
書きます。



f:id:fortkle:20170216183734g:plain
1行目:ご存知 => 用字(ご存じ)
1行目:(^o^) => 顔文字が使われています。2行目:様々 => 用字(さまざま)
2行目:エラーチェック => 半角カタカナが使われています。2行目:同じ接続詞が連続して使われています。3行目:一文に二回以上利用されている助詞 "が" がみつかりました。4行目:こともない => 二重否定()
4行目:ナウ => 死語が使われています。4行目:ヤング => 死語が使われています。4行目:一文に二回以上利用されている助詞 "で" がみつかりました。5行目:することができます => 冗長表現(できます)
5行目:見れ => ら抜き(見られ)
5行目:slack => 全角英数字が使われています。6行目:"と" が連続して2回使われています。

使 使

Bot

使


使使Slack BotDM


 prh 使使




 ng-word add []ng-word remove [] CRUD Slack


Bot Botkit  textlint使Slack BotkitBot

1. 使

textlint


textlint@azu LintJavaScriptESLint

1

 (Collection of textlint rule)  6


textlint-rule-no-doubled-conjunction





textlint-rule-no-doubled-joshi





textlint-rule-no-doubled-conjunctive-particle-ga





textlint-rule-ja-no-successive-word





textlint-rule-ja-yahoo-kousei

YahooAPI使



prh textlint-rule-prh

prh(proofread-helper) @vvakame 

prhtextlintazu/textlint-rule-prh使





2. 


textlintnpmyarn使
$ yarn add textlint textlint-rule-ja-yahoo-kousei textlint-rule-prh textlint-rule-no-doubled-conjunctive-particle-ga textlint-rule-no-doubled-conjunction textlint-rule-no-doubled-joshi textlint-rule-ja-no-successive-word

3. prh 使


yaml 
version: 1
rules:
  # 大文字小文字全角半角の統一
  - expected: Cookie
  # 以下と等価 正規表現には強制でgフラグが付く
  # - expected: Cookie
  #   pattern: "/[CcCc][OoOo][OoOo][KkKk][IiIi][EeEe]/g"

  # 表現の統一を図る
  - expected: デフォルト
    patterns:  ディフォルト

prh2NG使 expected  pattern
version: 1 
rules: 
  # 本来、expectedには「期待される値」が書かれるべきだがtextlint-rule-prhがprhフィールドに対応していないので「エラーメッセージ」を書く 
  - expected: 死語が使われています。 
    patterns: 
      - アイアム・ソーリー、ひげそーりー
      - あたりまえだのクラッカー 
      - アベック 
      - いただきマンモス 
      - うれピー 
      - おいくら万円 
      - オッケー牧場
      - ナウ
      - ヤング
      # (略)

4. textlint  ( .textlintrc )


textlint JSON .textlintrc  .textlintrc 
{ 
  "rules" : { 
    "no-doubled-conjunctive-particle-ga": true,
    "no-doubled-conjunction": true,
    "no-doubled-joshi": true,
    "ja-no-successive-word": true,
    "ja-yahoo-kousei": true,
    "prh": {
      "rulePaths": [
        "./dict/prh.yml"  ← ここでprhで使う辞書を読み込む
      ] 
    } 
  }
}

ja-yahoo-kouseiYahoo ID README

5. textlint使



import path from 'path'
import {TextLintEngine} from 'textlint'

export default function(controller) {

  const engine = new TextLintEngine({
    configFile: path.join(__dirname, '../.textlintrc'),
  })

  const formatResults = (results) => {
    let output = '```\n'
    const messages = results[0].messages
    for (let i = 0; i < messages.length; i++) {
      const msg = messages[i]
      const msgText = `${msg.line}行目:${msg.message}\n`
      output += msgText
    }
    output += '```'

    return output
  }

  controller.hears([/^check[\n\r]([\s\S]*)/], ['direct_message'], (bot, message) => {
    const msgBody = message.match[1]

    engine.executeOnText(msgBody).then(results => {
      if (! engine.isErrorResults(results)) {
        bot.reply(message, 'エラーは見つかりませんでした。')
        return
      }

      let output = ''
      output += 'エラーが見つかりました。\n\n'
      output += formatResults(results)

      bot.reply(message, output)
    })
  })
}



 textlint 使Bot

textlint使使 Yahoo! API使textlint

Bot