Tech Racho エンジニアの「?」を「!」に。
  • IT Tips
  • ライフ

日本語エラーチェックサイトenno.jpを作った理由

こんにちは、hachi8833です。はっと気がつくと、私が運営している日本語エラーチェックサイト「enno.jp」を開始してからもう8年が経過していましたので、たまには振り返ってみたいと思います。


enno.jpより

使い方はあきれるほど単純です。チェックしたい文章をフィールドに貼り付けてボタンを押すだけ。

enno.jpは、自分で作って自分で使い、自分で常にパターンを追加/更新しています。いわゆるドッグフーディングというヤツです。当然この記事もenno.jpでチェック・修正しました。

参考: ドッグフーディングとは:意味/解説 - シマウマ用語集

今年1月に突然enno.jpがバズッて自分でもびっくりしました。広めていただきありがとうございます🙇。

enno.jpはAIまたは機械学習ベースと一部で思われているようですが、実際ははるかに単純で、正規表現で記述したエラーパターンを大量に登録し、常にメンテを繰り返しているだけです。

アナリティクスを見てみた

以下は、今年2/16時点のGoogleアナリティクスです。1つ目は8年間のページビュー数の移り変わりです。

2つ目は8年間の目標完了数の移り変わりです。

上のツイートのおかげでバズッた今年1月だけスパイクがありますが、基本的に非常にじわじわと増え続けていることがわかります。

作った理由

enno.jpは実を言うと、2013年のBPSでの面接で出されたトライアル課題用に作ったRailsアプリです。

その年の5月頃、今ではめちゃくちゃ有名になった「Ruby on Rails チュートリアル」の最初の英日翻訳(自分が翻訳したのは量的には半分程度)と翻訳ディレクションを手掛け、その勢いでこのenno.jpを作りました。

手元でGitの履歴を参照してみると開始当時はRails 4.0.0、Ruby 2.0.0-p247でしたが、現在はRails 5.2.4、Ruby 2.7.2です。作り始めた日が2013/08/12、ひとまずリリースしたときが2013/09/12だったので、作成開始後ちょうど1か月でリリースしたことになります。

enno.jpは、Webアプリとしては極めて素朴な部類に入りますので、コード上見るべき点はほぼありません。強いて言うなら正規表現によるエラー検出結果をビューに反映する部分ですが、そこは公開するつもりはありません。

ただ、当時enno.jpを作った動機だけははっきりしています。「自分の欲しいエラーチェックツールがどこにもなかった」からです。

参考: へうげもの - Wikipedia–「己の欲しいものは己で作るしかない」というセリフが印象的でした

一般的な文章チェックツール

世の中には、昔からこの種の文章チェックツールがいろいろあります。近年だとtextlintが有名かと思います。

textlint/textlint - GitHub

さらに、textlint-jaにはJTF(日本翻訳連盟)公式のルールセットなど、さまざまなルールが掲載されています。

textlint-ja/textlint-rule-preset-JTF-style - GitHub


その他には、青山学院大学の「Tomarigi」も有名かと思います。私も使っていたことがありました。

最近だと、vscode用の「テキスト校正くん」もありますね。

参考: テキスト校正くん - Visual Studio Marketplace

既存ツールを使わなかった理由

端的に言うと、textlintなど既存ツールのインターフェイスは自分の欲しいものではなかったからです。

enno.jpの構想

自分がずっと欲しかった文章エラーチェックツールの仕様は、以下のようなものです。

  • 文章入力フィールドと、チェック結果の表示が横にきれいに並んでいること
  • 一度送信した文章が、結果表示と同時に入力フィールドにも自動で再入力されること
  • 長い文章を入力しても、入力フィールドとチェック結果の表示がずれないこと
  • 誤りのある箇所をハイライトしてくれること
  • ハイライト部分にマウスオーバーするとツールチップで説明が表示されること
  • さらにその説明の中に参考URLがあり、クリック可能であること
  • 誤りのある箇所をハイライトするだけでなく、誤りのリストも出力してくれること
  • 文章の種類を限定せず、どんな日本語文でもチェックできること

それを実現したかったからこそ、enno.jpを作りました。enno.jpの中身はこまごまと変わっていますが、それらのユーザーインターフェイスは以下のように最初から実現されています。


enno.jpより

セキュリティとプライバシー配慮について

流し込んだテキストは保存していない

enno.jpではマッチしたエラーのカウントを取っているだけで、流し込んだテキストは保存せずにすべて捨てています。

Railsのログ出力で以下のようにフィルタをかけているので、流し込んだテキストはログでもマスキングされます。

# config/initializers/filter_parameter_logging.rb
Rails.application.config.filter_parameters += [:password]
Rails.application.config.filter_parameters += [:typotext]

後にRailsのログ出力レベルを:errorに変えたので、通常の利用で流し込まれるテキストのログはそもそも出力されなくなりました。

# config/environments/production.rb
  config.log_level = :error

参考: 2.2 ログの出力レベル Rails アプリケーションのデバッグ - Railsガイド

ユーザーが流し込んだテキストを保存しないのは、セキュリティとプライバシー配慮のためです。
データベースに保存しているのは、エラーパターンごとのヒットカウントだけです。今見てみると、多いもので3979844件というパターンもありました。

送信前にダイアログボックスを表示する

enno.jpでは、上のフィルタ処理に加えて、チェックするテキストをブラウザから送信する前に以下のダイアログを表示し、ユーザーに注意を喚起しています。


enno.jpより


次回は「enno.jpであえて搭載しなかった機能」について書きたいと思います。

関連記事

はじめての正規表現とベストプラクティス1: 基本となる8つの正規表現


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。