OpenClawロシア語インターフェース実装:ノンインパクトリバースプロキシとランタイム翻訳ソリューション詳細

1. プロジェクト概要:OpenClaw管理パネルに「ロシア語の外衣」を

OpenClaw、強力なセキュリティと自動化管理プラットフォームを使用しているが、デフォルトの英語インターフェースに不便を感じている場合、「OpenClaw RU Layer」というプロジェクトがあなたのためにあるかもしれません。簡単に言えば、これは非侵入型のロシア語インターフェース層、あるいは「翻訳プラグイン」とも言えます。その核心的な目標は非常に明確です:OpenClawバックエンドコアコードに触れることなく、リバースプロキシ技術を通じてWeb管理インターフェースのすべてのテキストコンテンツをロシア語にリアルタイムで置き換えることです。

このソリューションの優れた点は「非侵入型」の設計哲学にあります。OpenClaw自体を一切変更しないため、既存システムの安定性を損なう心配がなく、公式の今後のアップデートとも完全に互換性があります。これは透明なフィルターのように、あなたのOpenClawサービス(デフォルトで 127.0.0.1:18789 で実行)とブラウザの間に静かに存在します。ブラウザが管理ページを要求すると、リクエストはまずこの「ロシア語層」(18790 ポートで実行)を通過し、元の英語ページを取得し、その後巧妙なJavaScriptオーバーレイを使用してページ上のテキストを動的にロシア語に置き換え、「加工」されたページをブラウザに返します。ユーザーにとっては、アクセスしているのは同じ管理パネルアドレスですが、表示されているのは親しみのある母国語インターフェースです。

このプロジェクトは、チームや顧客にローカライズされた体験を提供したいが、OpenClawソースコードを直接変更できない、あるいは望まない運用担当者、システムインテグレーター、セキュリティエンジニアに最適です。インストールスクリプトによる簡単なデプロイ、Systemdサービス、Dockerコンテナなど、さまざまな実行方式をサポートし、異なる本番環境に適応します。

2. コア原理とアーキテクチャ設計の詳細解説

2.1 リバースプロキシとランタイム翻訳メカニズム

OpenClaw RU Layerがどのように機能するかを理解するには、2つの主要な技術要素、リバースプロキシとランタイム翻訳を分解する必要があります。

まず、リバースプロキシはこのプロジェクトの基盤です。Node.js(通常はExpressや類似のHTTPフレームワークベース)を使用して独立したWebサーバーを起動します。このサーバーの核心的な設定は:新しいポート(例えば 18790)をリッスンし、受信したすべてのHTTPリクエスト(HTML、CSS、JS、APIインターフェースへのリクエストを含む)をそのままバックエンドのOpenClawサービス(127.0.0.1:18789)に転送します。OpenClawからの応答を受け取った後、プロキシサーバーは直接クライアントに返すのではなく、まず「加工」を行います。

ここでの「加工」がランタイム翻訳です。プロキシサーバーは応答コンテンツの Content-Type をチェックします。もし text/html、つまりHTMLページであれば、返されたHTMLドキュメントの <head> 部の末尾に、準備された翻訳ファイル ru-overlay.js を指すカスタムJavaScriptスクリプトタグを注入します。このスクリプトがインターフェースのロシア語化を実現する「魔法使い」です。

2.2 JavaScriptオーバーレイの動作フロー

注入された ru-overlay.js スクリプトはユーザーのブラウザで実行され、その動作フローは「検索-置換-表示」と要約できます:

  1. DOM準備完了後の実行:スクリプトはWebページ全体のDOM(ドキュメントオブジェクトモデル)が読み込まれるのを待ちます。
  2. 翻訳辞書の構築:スクリプト内部には大規模なキーと値のペアの辞書が維持されています。キーはOpenClawインターフェースに表示される元の英語テキスト、値は対応するロシア語翻訳です。この辞書はプロジェクトのメンテナンス担当者が手動またはツールを使用してOpenClawインターフェースから抽出・翻訳する必要があります。
  3. 走査と置換:スクリプトは document.querySelectorAll などのAPIを使用して、<div><span><label><button><option>、フォーム要素の placeholder 属性など、テキストを含む可能性のあるすべてのDOM要素を走査します。
  4. テキストのマッチングと置換:要素のテキストコンテンツを取得後、翻訳辞書とマッチングします。完全に一致する英語キーが見つかれば、そのノードのテキストコンテンツを対応するロシア語値に置き換えます。このプロセスは動的かつリアルタイムで、ユーザーにはほとんど感知されません。
  5. 動的コンテンツの処理:JavaScriptで非同期に読み込まれるコンテンツ(例えば、ボタンクリック後に表示されるモーダルウィンドウ)については、スクリプトがDOMの変化を監視する必要があるかもしれません(MutationObserver APIを使用)、新しく挿入されたコンテンツも適時に翻訳されるようにします。

注意:このランタイム翻訳ソリューションの限界性 このソリューションは完璧な国際化(i18n)ソリューションではありません。その翻訳品質は ru-overlay.js 辞書の完全性と正確性に完全に依存します。OpenClawがフロントエンドコードを更新し、インターフェーステキストを追加または変更し、辞書が同期して更新されていない場合、新しいテキストは英語で表示されます。したがって、この翻訳辞書のメンテナンスはプロジェクトの継続的な使用における鍵となります。

2.3 なぜこのアーキテクチャを選んだのか?利点とトレードオフ

なぜ直接OpenClawのソースコードを変更して多言語を実装しないのでしょうか?これはいくつかの層にわたる考慮事項に基づく重要なアーキテクチャ決定です:

  • ゼロリスクと高互換性:これが最大の利点です。バックエンドを変更しないということは、変更によるバグの導入、システムクラッシュ、セキュリティ脆弱性のリスクを完全に回避することを意味します。OpenClawがどのようにアップデートされても、そのフロントエンドHTML構造とAPIインターフェースに破壊的な変更がなければ、この翻訳層は理論的には引き続き機能します。
  • シンプルなデプロイとメンテナンス:ユーザーはOpenClawの複雑なコードベースを理解する必要がありません。単純なインストールスクリプトを実行するだけです。インストール、更新、アンインストールはすべてOpenClaw自体から独立しているため、運用のハードルが低下します。
  • 軽量かつ一般的な技術スタック:Node.jsとリバースプロキシはWeb開発において非常に成熟し一般的なパターンで、コミュニティのサポートが良く、理解・デバッグが容易です。
  • 明確な代償:前述のように、その代償は翻訳の「遅延性」と「カバー範囲」が人工的にメンテナンスされた辞書に依存することです。画像内のテキストを処理することはできず、非常に複雑な動的インターフェースの場合、翻訳スクリプトは置換のタイミングを制御するためにより精巧なロジックを必要とし、ページの機能を破壊しないようにするかもしれません。

3. 詳細なデプロイと構成ガイド

3.1 環境準備と前提条件チェック

デプロイを開始する前に、サーバー環境が以下の条件を満たしていることを確認してください:

  1. 実行中のOpenClaw:OpenClawが正しくインストールされ、Web管理インターフェースが http://127.0.0.1:18789(またはカスタムアドレス)で正常にアクセスできることを確認します。curl http://127.0.0.1:18789 または直接ブラウザでアクセスして検証できます。
  2. Node.jsとnpm:OpenClaw RU Layerは通常Node.js実行環境を必要とします。Node.js 14以降のインストールを推奨します。node --versionnpm --version で確認できます。
  3. Git:コードリポジトリをクローンするために使用します。git --version で確認します。
  4. Nginx(オプションだが推奨):ドメインやSSL証明書の構成、またはインストールスクリプトの --patch-nginx 機能を使用してNginx構成を自動的に変更したい場合は、事前にNginxをインストールする必要があります。nginx -v で確認します。

3.2 標準インストール手順(インストールスクリプトを使用)

これが最も推奨され、最速のデプロイ方法です。プロセス全体はスクリプトによって自動化されます。

# 1. プロジェクトリポジトリをローカルにクローン
git clone https://github.com/perfectinn/openclaw-ru-layer.git
cd openclaw-ru-layer

# 2. インストールスクリプトを実行
# --patch-nginx パラメータを使用すると、スクリプトはNginx構成を自動的に変更し、
# トラフィックをOpenClawの元のポートから翻訳層に向けるように試みます。
sudo bash scripts/install.sh --patch-nginx

この install.sh スクリプトの背後で何が行われているか(具体的な実装はスクリプトソースコードを確認する必要がありますが、通常以下を含みます):

  • 依存関係のインストールnpm install または yarn install を実行し、プロジェクトに必要なNode.js依存パッケージをインストールします。
  • 環境設定:環境設定ファイル(.envなど)を作成または変更し、TARGET_ORIGIN=http://127.0.0.1:18789PORT=18790 を設定するかもしれません。
  • Systemdサービス設定openclaw-ru-layer.service という名前のSystemdサービスユニットファイルを作成し有効化します。このファイルはNode.jsアプリケーションをどのように起動、停止、再起動するかを定義し、自動起動、ログ管理などを設定します。
  • Nginx構成の修正(--patch-nginx):これは非常に便利なステップです。スクリプトはNginxのサイト構成(例えば /etc/nginx/sites-enabled/ の下のファイル)を探し、18789 ポート(OpenClawデフォルトポート)をリッスンする server ブロックを見つけ、その中の proxy_pass または listen ディレクティブをローカルの 18790 ポート(翻訳層)を指すように変更します。これにより、Nginxに到達するすべてのリクエストは無縫に翻訳層に向かい、ユーザーはアクセスの習慣を変更する必要がなくなります。
  • サービスの起動と検証:最後にスクリプトは openclaw-ru-layer.service を起動し、簡単なヘルスチェックを実行するかもしれません。

3.3 インストール後の検証とアクセス

インストールが完了したら、順次以下の検証を行ってください:

# Systemdサービスの状態を確認し、'active (running)'状態であることを確認します。
sudo systemctl status openclaw-ru-layer.service

# ヘルスチェックエンドポイントを確認し、'OK'や類似のヘルス状態情報が返ることを確認します。
curl -s http://127.0.0.1:18790/healthz

# --patch-nginxを使用した場合のNginx構成が正しいか確認
sudo nginx -t  # 構文テスト
sudo systemctl reload nginx  # 構成をリロードして有効化

検証が完了したら、ブラウザを直接開き、元々OpenClaw管理パネルにアクセスするために使用していたアドレス(サーバーのIPまたはドメイン)にアクセスします。すべてが順調であれば、今表示されているインターフェースはすでにロシア語になっているはずです。

実践的なヒント:Nginx構成変更の手動検証 インストールスクリプトの --patch-nginx 機能は便利ですが、構成の自動変更には常にリスクがあります。実行後、Nginx構成ファイルを手動で確認することを強くお勧めします。grep -r "18789" /etc/nginx/sites-enabled/ を使用して関連構成を見つけ、proxy_pass の後のアドレスが :18789 から :18790 に変更されているか確認してください。「スクリプトが終わったらサービスが落ちた」という事態を避けるための良い習慣です。

3.4 代替デプロイソリューション:Dockerコンテナ実行

環境がコンテナ化を好む場合、プロジェクトはDockerサポートも提供しています。この方法は分離性が高く、特にコンテナオーケストレーション環境(K8sなど)でのデプロイに適しています。

# 1. Dockerイメージをビルド
docker build -t openclaw-ru-layer .

# 2. コンテナを実行
# 主要なパラメータの説明:
# -p 18790:18790: ホストマシンの18790ポートをコンテナの18790ポートにマッピングします。
# -e PORT=18790: コンテナ内アプリケーションが実行されるポートを設定します。
# -e TARGET_ORIGIN=http://host.docker.internal:18789: リバースプロキシの対象アドレスを設定します。
#   `host.docker.internal`は特別なDNS名で、ホストマシンを指し、コンテナがホストマシン上のOpenClawにアクセスするのに便利です。
# --restart unless-stopped: コンテナの自動再起動ポリシーを設定し、安定性を向上させます。
docker run -d \
  --name openclaw-ru \
  -p 18790:18790 \
  -e PORT=18790 \
  -e TARGET_ORIGIN=http://host.docker.internal:18789 \
  --restart unless-stopped \
  openclaw-ru-layer

Dockerソリューションの重要な注意点host.docker.internal というホスト名はLinux版Dockerではデフォルトでサポートされていない場合があります。Linuxでは、より一般的な方法としてホストマシンの実際のIPアドレスを使用するか、--network=host モードでコンテナを実行する(ただし分離性が犠牲になります)方法があります。実際の状況に応じて TARGET_ORIGIN 環境変数を調整する必要があります。

3.5 手動実行(開発またはデバッグ用)

システムサービスとして実行したくない場合、またはデバッグが必要な場合は、npmで直接起動できます:

# プロジェクトディレクトリに移動
cd openclaw-ru-layer

# 環境変数を設定して起動
TARGET_ORIGIN=http://127.0.0.1:18789 PORT=18790 npm start

この方法で起動されたサービスはフォアグラウンドで実行され、すべてのログが現在のターミナルに出力され、リアルタイムのリクエストとエラーメッセージを確認するのに便利です。

4. メンテナンス、更新とトラブルシューティング

4.1 日常的なメンテナンスと更新プロセス

OpenClaw RU Layerのメンテナンスは主に2つの側面に围绕しています:プロジェクト自体の更新と翻訳辞書の更新。

プロジェクトコードの更新:プロジェクトリポジトリに新しいバージョンがリリースされ、バグが修正されたり機能が追加されたりした場合、デプロイを更新する必要があります。

cd /path/to/openclaw-ru-layer
git pull origin main  # 最新コードをプル
sudo bash scripts/install.sh --patch-nginx  # インストールスクリプトを再実行、依存関係の更新とサービスの再起動を処理
# --patch-nginxを使用していない場合は、サービスを手動で再起動
sudo systemctl restart openclaw-ru-layer.service

翻訳辞書の更新:これはより一般的なメンテナンスシナリオです。OpenClawがアップデートされ、インターフェースに新しい英語の単語や文章が表示された場合、public/ru-overlay.js ファイルの翻訳辞書を更新する必要があります。

  1. 手動またはツールを使用して、新旧インターフェースを比較し、未翻訳のテキストを見つけます。
  2. 新しい英語テキストと対応するロシア語翻訳を "English Text": "Russian Translation" の形式で ru-overlay.js ファイルの辞書オブジェクトに追加します。
  3. ファイルを更新した後、openclaw-ru-layer サービスを再起動すれば有効になります。
sudo systemctl restart openclaw-ru-layer.service

4.2 見られる問題とトラブルシューティングの実践

実際のデプロイと実行中に、以下の問題に遭遇するかもしれません。ここでは、私のトラブルシューティングのアプローチと解決策を記録します。

問題1:管理パネルにアクセスしてもインターフェースが英語のまま。

  • トラブルシューティング手順
  1. サービス状態の確認sudo systemctl status openclaw-ru-layer.service。サービスがアクティブであることを確認します。
  2. ポートリッスンの確認sudo ss -tlnp | grep 1879018790 ポートが正しくリッスンされているか、プロセスが正しいかを確認します。
  3. 翻訳層の直接テスト:サーバー上で curl http://127.0.0.1:18790 を使用します。返されるHTMLコードの <head> タグの末尾に <script src="/ru-overlay.js"> という行が含まれているか確認します。なければ、リバースプロキシがスクリプトを注入していない可能性があります。
  4. Nginx構成の確認(使用している場合):Nginxが実際にリクエストを 18790 ではなく 18790 にプロキシしていることを確認します。Nginx構成に一時的にアクセスログを追加し、リクエストの流れを確認することもできます。
  5. ブラウザ開発者ツール:ブラウザでF12を押し、「ネットワーク」タブを開いてページを更新します。ru-overlay.js ファイルが正常に返されているか(ステータスコード200)、その内容が完全かを確認します。同時にコンソールにJavaScriptエラーがないか確認します。

問題2:ページの一部は翻訳されているが、一部はされていない。

  • 原因と解決策:これはほぼ間違いなく翻訳辞書 ru-overlay.js が不完全であることが原因です。OpenClawの一部のページや新機能のテキストが辞書に収録されていません。
  • トラブルシューティング:ブラウザ開発者ツールを使用し、未翻訳のテキストに対応するHTML要素を確認します。その innerText または textContent 属性を確認し、正確な英語の原文を取得します。次にこの原文を ru-overlay.js 辞書に追加し、ロシア語翻訳を割り当て、最後にサービスを再起動します。

問題3:インストールスクリプト --patch-nginx の実行に失敗。

  • 考えられる原因
  • Nginxがインストールされていない。
  • Nginx構成ファイルがスクリプトが期待するパス(例えば /etc/nginx/sites-enabled/)にない。
  • 18789 ポートをリッスンする server ブロックの書き方が特殊で、スクリプトの正規表現が一致しない。
  • 手動処理:自動修正を諦め、Nginx構成を手動で変更します。対応する構成ファイルを見つけ、location / ブロック内の proxy_pass http://127.0.0.1:18789;proxy_pass http://127.0.0.1:18790; に変更し、sudo nginx -t && sudo systemctl reload nginx を実行します。

問題4:Systemdサービスの起動に失敗。

  • トラブルシューティングsudo journalctl -u openclaw-ru-layer.service -f --lines=50 を使用してサービスの詳細ログを確認します。一般的な原因は以下の通りです:
  • Node.js依存関係のインストール失敗(npm install エラー)。/path/to/openclaw-ru-layer ディレクトリのパーミッションとネットワークを確認します。
  • 環境変数 TARGET_ORIGIN または PORT が正しく設定されていない。Systemdサービスファイル(通常 /etc/systemd/system/openclaw-ru-layer.service)の Environment ディレクティブを確認します。
  • ポート 18790 が他のプロセスによって使用されている。sudo lsof -i:18790 で確認します。

4.3 セキュリティとパフォーマンスの考慮事項

このプロジェクト自体は機密ビジネスロジックを処理しませんが、ネットワークミドルウェアとして、以下の点に注意する必要があります:

  • パフォーマンスのボトルネックではない:リバースプロキシとJavaScript注入はごくわずかな遅延(通常ミリ秒レベル)を導入しますが、管理パネルのようなアプリケーションではほとんど感知されません。サーバーリソースが極端に不足していない限り、パフォーマンス問題を心配する必要はありません。
  • セキュリティの推奨:OpenClawサービス(18789 ポート)と翻訳層サービス(18790 ポート)はローカルループバックアドレス(127.0.0.1)のみでリッスンするようにしてください。公開しないでください。外部アクセスは常に前置のNginx/ApacheなどのWebサーバーを経由し、ファイアウォールとSSL/TLS暗号化(HTTPS)を適切に構成してください。翻訳層プロジェクト自体も、セキュリティ修正を取得するために定期的に公式リポジトリから更新してください。

5. プロジェクトの拡張とカスタマイズのアイデア

OpenClaw RU Layerのアーキテクチャは明確な実例を提供しています。この考えに基づき、さらに多くの機能を実装するために拡張できます:

  1. 多言語サポート:プロジェクト構造を複製し、fr-overlay.js(フランス語)、zh-overlay.js(中国語)などの辞書ファイルを作成できます。プロキシサーバーのロジックを変更し、ユーザーのブラウザ言語設定(Accept-Language リクエストヘッダー)またはユーザーの手動言語選択に基づき、対応する翻訳スクリプトを動的に注入できます。
  2. UIのカスタマイズ:テキストの翻訳に加え、JavaScriptオーバーレイは理論的にページの任意の部分を変更できます。追加のCSSを注入してインターフェースのスタイルを調整(テーマ色、フォント、レイアウトの微調整)、または追加のJSを注入して小さな機能(カスタムダッシュボードウィジェットなど)を追加できます。
  3. リクエスト/レスポンスのインターセプトと変更:リバースプロキシの位置により、クライアントとOpenClaw間のすべてのリクエストとレスポンスをインターセプトして変更できます。これは単純なAPIデータ形式変換、カスタムHTTPヘッダーの追加、特定の監査ログの記録などに使用できます。ただし、既存のビジネスロジックを破壊しないよう、特に注意してください。

このプロジェクトの価値は、優雅で低リスクなWebアプリケーションのローカライズとカスタマイズソリューションを示している点にあります。それは既存システムの完全性を尊重し、「プロキシ+オーバーレイ」という薄い技術層を通じて、顕著な体験改善を実現し、運用担当者と開発者に貴実践的な参考を提供します。

タグ: OpenClaw リバースプロキシ ローカライズ javascript Node.js

6月15日 20:22 投稿