GengoにおけるGo
Gengo のエンジニアチームは、お客さまとトランズレーターにより良いカスタマーエクスピリエンスを提供すべく、日々サービス開発に努めています。この一環として、サービスのスピードと信頼性を向上するために、オープンソースの新しいプログラミング言語であるGo言語を使い、GoShipとEmail Consumerという2つのサービスの開発を行いました。
GoShip
私たちが、はじめてGo言語で開発したサービスが、オープンソースのWebアプリケーションであるGoShipです。GoShipは、より簡単にコードをサーバーにデプロイすることができるサービスです。
このアプリケーションには、ホスト名や環境 (ステージングや本番など)、そしてリモートサーバーにおける Git リポジトリのロケーションが含まれた、YAML 設定ファイルが必要です。各プロジェクトにおいて、GoShip のSSHのGitリビジョンが、 GitHub の最新のリビジョンと合っているかをチェックします。リビジョンに違いがある場合は、デプロイボタンがページに表示され、プロジェクトごとのデプロイメントコマンドが実行されます。画面上にコンソールログが表示され、デプロイ時間とステータスとともに保存されます。
仕事に遊び心を取り入れることを大切にしているGengoでは、このプロジェクトのためにアート・ディレクターの小山が、Goの公式マスコットであるGo gopherを海賊に見立てたイラストを描いてくれました。
Eメール送信サービス(Email Consumer)
GoShip に加えて、Iron.ioのキューイングサービスであるIronMQ を使った、メール送信サービス、Email Consumerの開発も行いました。Email Consumerは、キューから送信されるJSONペイロードリクエストから必要なテンプレートを取得し、お客さまにメールを送信することができます。
{
"data": {
"display_name": "Shawn Smith"
},
"email_to": [
"shawn@example.com"
],
"from_email": "consumer@gengo.com",
"from_name": "Consumer Test",
"id": "welcome-c",
"lc": "ja"
}
例えば、新規のお客さまがGengoにサインアップした際に、WebアプリケーションがJSON ペイロードにID “welcome-c” を与えてキューに登録します。Email ConsumerがキューからJSONペイロードを受け取り、指定したIDからメールの件名と本文の テンプレートを取得しdata項目をマッピングしてトをレンダリングします。上記のdata項目の場合は、ユーザー名になります。また、お客さまの言語環境によって、テンプレートのローカライゼーションも行うことができ、SendGrid を通して、 Gengo のウェルカムメールをお客さまにお送りすることができます。
Gengoのメール送信機能を一つのサービスで管理することで、スタイルの維持や編集を簡単に行うことが可能になります。Email Consumerを使って、50種類以上のメールをお客さまとトランズレーターに送ることができ、現在までに50万通以上のメールを問題なく送信しています。
バックエンドのコードについて
私たちは、バックエンドのコードービスを PHPやPython から Go 言語に移行しています。これには、トランズレーターのワークベンチでのジョブのロードやバリデーション、そして用語集サービスのコードも含まれます。Go言語を使用することでコードの総行数 が、33,000 行から1,700 行に縮小するとともに、速度が10倍も改善されます。コードの行数縮小は Go言語 だけの効果ではなく、大量のレガシーコードを削除したことが確実に影響していると考えています。しかし、Go言語がコードのリファクタリングをよりシンプルなタスクにしてくれたのは事実です。
Go言語での開発はとても積極的におこなっています。今後も、さまざまなサービスをGo 言語に移行する予定です。Go 言語を試しに使ってみたいという方は、「はじめに」と 「Go コードの書き方」をご覧ください。