チャットを参加者それぞれの言語で読める「Frappe Chat Translate」を OSS として公開しました
Frappe / ERPNext 向けのチャットアプリ ClefinCode Chat に機能を追加するアプリ Frappe Chat Translate を、GPL-3.0 のオープンソースとして公開しました。
- リポジトリ: https://github.com/lifegence/frappe_chat_translate
- 対応: Frappe v15・v16、ClefinCode Chat 1.3.913
- ライセンス: GPL-3.0-or-later(ClefinCode Chat と同じ)
要旨
- 同じチャットを、参加者それぞれが自分の言語で読めます。 日本語で書いたメッセージは英語の利用者には英語で、英語で書いたメッセージは日本語の利用者には日本語で表示されます。
- アクセス制御を強化します。 ClefinCode Chat の API がデータを返す前に、ログイン中の利用者がそのチャンネルの参加者かを確かめます。
- ClefinCode Chat 本体は変更しません。 別のアプリとして追加する形で動作します。
1. 背景
海外拠点や外国籍のメンバーを抱える企業では、社内チャットの言語がそのまま壁になります。共通語を決めれば、その言語が得意でない人が発言を控えるようになります。翻訳ツールへの貼り付けは手間がかかり、会話の流れも途切れます。
ERPNext の中でチャットを使えば、業務データのすぐ横で会話ができます。そこに「言語を選ばずに書き、自分の言語で読む」仕組みを足すことにしました。
2. 翻訳のしくみ
| 内容 | |
|---|---|
| 翻訳するとき | メッセージが画面に表示されたとき |
| 翻訳先の言語 | 読む人のユーザー設定の「言語」 |
| キャッシュ | メッセージと言語の組ごとに保存。同じ言語の 2 人目からは翻訳しない |
| まとめて翻訳 | 未翻訳のメッセージは 1 回の依頼で最大 50 件まで |
| 翻訳しないもの | 読む人と同じ言語のメッセージ |
| 編集されたとき | 次に表示されたときに翻訳し直す |
書き手は何も意識する必要がありません。送信の手順も、書く言語も、これまでどおりです。
翻訳エンジンを選べます
翻訳エンジンは、サイトの管理者が次から選びます。
- Anthropic Claude
- Google Gemini
- OpenAI、または OpenAI 互換のサービス(Azure OpenAI や自社で運用するサーバーなど)
社内用語や固有名詞は用語集で扱いを固定できます。「この語は訳さない」「この語はこう訳す」を 1 行ずつ書くだけです。誰と誰の会話かを翻訳の前提として与えれば、言葉遣いや用語の選び方も合わせやすくなります。
データの扱い
翻訳のために、メッセージの本文は管理者が選んだ翻訳エンジンへ送られます。当社には何も送られません。 利用状況の収集もしていません。自社で運用する OpenAI 互換サーバーを選べば、メッセージは自社のサーバーの外に出ません。添付ファイル・音声・画像は送りません。
API キーはサイトのデータベースに暗号化して保存します。
3. アクセス制御の強化
開発の過程で、ClefinCode Chat 1.3.913 の API の多くが、操作する利用者やチャンネルをリクエストの値のまま受け取り、ログイン中の利用者と照合していないことが分かりました。このため、ログインできる利用者であれば、自分が参加していないチャンネルのメッセージを読めてしまう状態でした。
翻訳を加えるアプリがこの問題を放置すれば、翻訳されたメッセージまで同じ経路で漏れます。そこで本アプリは、ClefinCode Chat が外部に公開しているすべての API の手前で、次を確かめるようにしました。
- 指定されたチャンネル・トピック・メッセージが、ログイン中の利用者の参加しているチャンネルのものか
- 「操作する利用者」として指定された値が、ログイン中の利用者本人か
- ログインしていない利用者には、害のない操作しか許さないか
誤検知の調査用に、拒否せず記録だけする動作モードも用意しています。この問題は ClefinCode の開発者に連絡済みです。
4. 管理者向けの機能
- チャットのワークスペース:アプリ画面に「チャット」のアイコンを追加し、チャットの履歴・翻訳のキャッシュ・各種設定を 1 か所にまとめました
- チャットボタンの見た目:画面の隅に出るチャットボタンの画像・色・大きさ・位置を、自社の画面に合わせて変えられます
5. 導入方法
bench get-app https://github.com/lifegence/frappe_chat_translate
bench --site your-site install-app frappe_chat_translate
bench build --app frappe_chat_translate
bench restart
導入後、チャット > 設定 > 翻訳設定 で翻訳エンジンと API キーを設定すれば使えます。詳しくはリポジトリの 日本語の README をご覧ください。
現時点での制限
- プッシュ通知とメール通知は原文のまま届きます
- 相手が画面を開いている間にメッセージが編集されると、再読み込みまで古い訳が表示されます
- Frappe v15 では、チャットボタンの色・位置・大きさの設定は反映されません(画像の設定は反映されます)
今後
ほかのチャットアプリへの対応
Frappe のエコシステムでは、ClefinCode Chat のほかにも複数のチャットアプリがオープンソースで公開されています。どのチャットアプリを選ぶかは、企業ごとの使い方や好みによって異なります。
当社は、どのチャットアプリを使っていても、参加者それぞれが自分の言語で読める状態を目指し、これらのアプリへの対応を順次追加していく構想です。
翻訳エンジンの呼び出し、用語集、翻訳の前提といった翻訳の中心となる部分は、特定のチャットアプリに依存しません。これらを共通の部品として使い回し、アプリごとに異なる部分(メッセージの保存のしかた、画面への表示、参加者の確かめ方)を合わせ込むことで対応を広げていきます。対応するアプリの順番は、利用者の多さとご要望をもとに決めていきます。
そのほかの予定
- Frappe Cloud Marketplace へ掲載を申請済みです。掲載されれば、Frappe Cloud の利用者は画面の操作だけで導入できるようになります
- 通知の翻訳など、上記の制限を順次解消していきます
当社はこのほかにも、Frappe / ERPNext の日本語訳 frappe_japanese_translations、多言語管理アプリ I18n Manager などを公開しています。
多言語のチームで ERPNext をお使いの方へ。 導入のご相談や、自社の環境に合わせた設定・拡張のご依頼を承っています。お気軽にお問い合わせください。
この記事を書いた人