2021.06.30

エンジニアの話す難しい専門用語を音声から自動翻訳する「エンジニンガル」の開発【GMOテクノロジーブートキャンプ参加レポート】

皆様初めまして。今年の4月に新卒で入社し、次世代システム研究室に配属となりました N.M と申します。GMOの新卒技術研修であるGMO Technology Bootcamp(以下GTB)に参加いたしました。

新卒技術研修 GMOテクノロジーブートキャンプ2021を実施しました【前編】
https://developers.gmo.jp/9088/

今回は私が所属するチームが制作した「エンジニンガル」というWebアプリを紹介いたします。このWebアプリは専門用語を音声から翻訳するアプリとなっており、用いている技術こそシンプルながら意外と面白いものになっています。ご覧いただけると幸いです。

「エンジニンガル」の概要

私たちのチームが開発したエンジニンガルは、難しい専門用語、カタカナ語、英語の略称などエンジニアと話をしていたら頻繁に出てくるものの、非エンジニアにとっては難しい単語を翻訳することで円滑にコミュニケーションをとれるようになることを狙ったアプリです。

エンジニンガルという言葉からも薄々感じ取れる通り、このアプリは2000年代初頭に流行した某翻訳機のように音声認識を行っており、音声から文字起こし → 専門用語を翻訳 →表示するというものとなっています。(下のgif画像参照)

demo

開発の方針

そもそもこのエンジニンガルのアイデアは、私たちのチームの中であまり開発やコーディングの経験のないメンバーがGTB期間で思ったことが始まりとなっています。「完全に単語の意味を理解するのではなく、その単語がどういうカテゴリの言葉なのかが分かれば、話についていけるのに」という意見がきっかけとなり、このアプリを開発することとなりました。

GTBでは、コーディングに慣れていない人のための基礎的なWebアプリケーションフレームワークのような内容から、DockerやAnsibleといった内容まで幅広い技術を知ることを目的とした講義が行われました。また、実際にプロダクションレベルで必須となるペルソナの決定やカスタマージャーニーといったユーザ中心の開発についても学ぶことができました。

私たちのチームでは、アイデア時点ではログインや専門用語の登録といった様々な機能を展開していく予定でしたが、このアプリを開発する上でペルソナはエンジニアとコミュニケーションをとる必要のある非エンジニアと設定しており、このペルソナはそのような機能を使うだろうか、むしろ Google翻訳のようにシンプルなものの方が使いやすいのではないかという結論に至り、最終的にはシンプルなアプリとなりました。

アプリの機能

layout
前述の通り、このアプリのメイン機能は音声認識によって得られた文字列を翻訳して表示するということに尽きます。メインページの録音開始ボタンを押すと録音が開始され、実際に録音されたままの文章を画面下部に、録音された文章の中に専門用語が含まれていた場合は専門用語を事前に登録した文章に差し替えて画面上部に表示します。また、専門用語がどのような文脈で使用されたかが分かるように、オプションとして右下の SAVEボタンを押すとテキストファイルが出力され、今までの会話の内容を保存できるようになっています。


これに加えて、メインページとは別にランディングページを用意していました。ランディングページにはロゴ、アプリのコンセプト、操作方法、チームメンバーなどの情報があり、GTBで唯一デザイナーがいないチームの割には綺麗なものに仕上がりました。

システム構成

system
このアプリのシステム構成は上の画像の様になっています。自社商材であるホスティングサービスConoHaのVPS 上に5つのDockerコンテナとそれをまとめるdocker-composeを配置して動作させています。

どうやって翻訳しているのか

冒頭のデモ動画でも触れていましたが、このアプリの機能のほとんどはjavascriptで記述されています。javascriptでは、音声認識を行うWeb Speech API、形態素解析を行うkuromoji.js、バックエンドのRuby on Railsとつなぐaxios が動いています。 Web Speech API によって取得したテキストデータをkuromoji.jsによって単語レベルまで分割し、
その中に事前に登録されている専門用語があれば Ruby on Rails を介して MySQLに接続してその専門用語に対する翻訳テキストを取得して元の単語と置換する、というフローによって翻訳を実現しています。

web サーバの役割を持つコンテナにはnginxを使用し、Web Speech APIを使用する際に必要となる SSL 通信は自動的にLet’s Encryptを介して証明書を取得できるhttps-portalというDockerコンテナを使用しました。また、このアプリは専門用語を事前にデータベースに登録しておく必要があり、専門用語をまとめたCSVファイルをMySQLへそのまま登録するために、Adminerと呼ばれるブラウザ上でデータベースを管理することができるツールを使用しています。

このような仕組みでエンジニンガルは動作しています。(※なお、現在は稼働していないためアクセスはできません。ご了承ください。)

最後に

学生時代、研究等でコーディングする機会はあったのですが、ハッカソンなどのイベントとは無縁の生活を送っていた人間だったため、 Webアプリ開発やチーム開発といったことを学ぶことができた良い 1 か月間でした。視野を広げ、視座を高めるというコンセプトのもとに行われた GTBは非常に勉強になったとともにとても楽しかったです。

次世代システム研究室では、 Web アプリケーション開発を行うアーキテクトを募集しています。募集職種一覧 からご応募をお待ちしています。

Pocket

関連記事