# ログ解析システム
これは自社開発した暗号通貨クライアントが不安定だったころに開発したものです。簡単にいえばカスタマーがソフトに不具合が発生したとカスタマーサポートに連絡した際、そのソフトのログファイルを解析し、実施可能な解決策をメールを通じて提供します。
当時、カスタマーサポートにはほんの数名のスタッフしかおらず、かつソフトが非常に不安定だったため、毎日100件以上くるサポートメールに対応することができず、その結果、返信すらできていない状態のメールが4万件以上ありました。その対応のほとんどが、10万行以上あるログファイルから特定のキーワードを探索し、それに応じてテンプレート化されているメールを送信することでした。
そこでログファイルを取得し、それを解析、その解析に基づいた提案をユーザーに提供するという一連の流れを自動化できないかと考えました。そこで僕がこの解析ソフトを提案し、開発しました。
### 概要
開発言語はHaskellです。理由としては
- 弊社がHaskellのエキスパート達を多数雇用していたため、他のチームからサポートを得られやすかった
- 純粋関数型によって高速な開発、容易なリファクタリングが可能だった
- QuickCheckという強力なテストライブラリが利用可能だから
が挙げられます。
### アプローチ
解析ソフトは以下の流れに沿って処理を行います。
- ログファイルの取得
- 解析
- 解析したデータを基にメール文書を作成
- メールを送信するとともにカスタマーサポートシステムにて保管されているメールの状態を変更
##### ログファイルの取得
ログファイルを解析するにはまずシステムがファイルを取得する必要があります。これはZendeskのWebAPIを用いました。
##### 解析
ログファイルを解析するにはファイル内にある特定のキーワードを探索する必要があります。これに関してはあらかじめ用意したCSVファイルを基にログファイルに対して照合作業を行うという処理を行いました。CSVファイルを選んだ理由としてはITに詳しくないカスタマーサポートのリーダーであっても容易に修正可能なものにしたかったからです。
#### 解析したデータを基にメール文書を作成
解析したデータをそのままユーザーに送っては何の解決にもなりません。そこでデータをメール文書に変換する処理を行いました。これはShakespeareというHaskell製のテンプレートエンジンで実装しました。
#### メールの送信
メールを送信はカスタマーサポートが利用していたシステムのWebAPIを用いました。また送信を行うだけではなく、役員の方たち及び暗号通貨クライアントの開発チームに解析データの統計を提出する必要があったためその処理も行いました。
### 成果
このアプリケーションにより4万件近くあった未処理のメールをすべて処理することができました。解析ソフトはかなり精度が高かったため、ユーザーの満足度も非常に高かったです。またこれによってユーザーコミュニティからの不満もかなり解消されました。