🏠 公式ポータルトップへ戻る

🌐 外部デバイス向け中継サーバー構築マニュアル

⚠️ 注意: この機能は、Node.jsやターミナル(コマンドプロンプト)の基本的な操作がわかる開発者向けの応用機能です。

🤔 なぜ「Node.jsで専用のサーバー」を作らないの?

「スマホやIoT機器から変換APIを叩きたいなら、Node.jsで普通に漢字変換サーバーを組めばいいのでは?」と思うかもしれません。しかし、あえて「Node.jsを単なる土管(中継)として使い、Chromeブラウザに処理を丸投げする」のには、3つの強烈なメリットがあります。

🧠 1. 育てた「自分専用の脳みそ」を全デバイスで使い回せる

Node.jsで新しくサーバーを立てると、それは「生まれたての状態」です。しかしこの構成なら、PCのブラウザで一生懸命登録した単語や学習履歴を、スマホやIoT機器からそのまま引き継いで使うことができます。

🗂️ 2. 面倒な「管理画面の自作」が不要になる

辞書の追加や単語の削除を行うためのWeb画面をNode.js側に自作する必要がありません。管理はすべてChrome拡張機能の「総合管理パネル」で行えるため、中継サーバーのコードは驚くほどシンプルになります。

⚡ 3. サーバー(Node.js)のメモリ消費が「ほぼゼロ」

巨大なSKK辞書データをメモリに抱え込む重たい処理は、すべてPCのChromeが負担します。中継サーバー自体はただ通信を流すだけなので、Raspberry Piなどの非力なデバイス上で動かしても全く重くなりません。

⚙️ システムの全体構成図

📱 スマホ・IoT機器 ( 変換リクエスト )

🌐 Node.js 中継サーバー ( http://192.168.x.x:3000/api/convert )
⬇ WebSocket で通信をパス ⬇
💻 PCのChromeブラウザ ( http://localhost:3000 を開いて待機 )
⬇ 拡張機能へ sendMessage ⬇
🧩 ローカル漢字変換エンジン ( 辞書検索 & 学習 )

変換結果を逆のルートでスマホへ返す!

🛠️ 構築ステップ

1 プロジェクトの準備

空のフォルダを作成し、ターミナルで以下のコマンドを実行して Node.js のプロジェクトを初期化し、必要なパッケージ(Express と Socket.io)をインストールします。

mkdir relay-server cd relay-server npm init -y npm install express socket.io

2 サーバーコードの作成

以下のコードを server.js として保存します。これが「土管」の役割を果たすサーバーです。

server.js
const express = require('express'); const http = require('http'); const { Server } = require('socket.io'); const app = express(); const server = http.createServer(app); const io = new Server(server); app.use(express.json()); app.use(express.static('public')); // publicフォルダのファイルを返す let chromeClient = null; // Chromeブラウザの接続を保持 // ChromeブラウザからのWebSocket接続を待受 io.on('connection', (socket) => { console.log('クライアントが接続しました:', socket.id); chromeClient = socket; socket.on('disconnect', () => { console.log('切断されました:', socket.id); chromeClient = null; }); }); // 外部デバイスからのAPIリクエスト(POST)を受け取る app.post('/api/convert', (req, res) => { if (!chromeClient) { return res.status(503).json({ error: "Chromeブラウザが接続されていません" }); } const requestData = req.body; // Chromeブラウザへ変換を依頼 chromeClient.emit('request_convert', requestData, (response) => { // Chromeからの返事をそのまま外部デバイスへ返す res.json(response); }); }); const PORT = 3000; server.listen(PORT, '0.0.0.0', () => { console.log(`中継サーバー起動: http://localhost:${PORT}`); });

3 Chromeを繋ぐ「ブリッジ画面」の作成

プロジェクトフォルダの中に public というフォルダを作り、その中に以下の index.html を保存します。
このページが、中継サーバーとChrome拡張機能(エンジン)の間の通訳をします。

public/index.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>中継ブリッジ待機中</title> <script src="/socket.io/socket.io.js"></script> </head> <body style="font-family: sans-serif; background: #2c3e50; color: white; text-align: center; padding: 50px;"> <h1>🌐 変換エンジン 中継ブリッジ</h1> <p>このタブを開いている間、外部デバイスからの変換リクエストを処理します。</p> <div id="log" style="background: #1a252f; padding: 15px; border-radius: 5px; height: 300px; overflow-y: auto; text-align: left; font-family: monospace;"></div> <script> // ★ここにインストールした拡張機能のIDを入れます const ENGINE_ID = "cddamopplhdhbpgphpnaineilgecdiaa"; const socket = io(); const logEl = document.getElementById('log'); function addLog(msg) { logEl.innerHTML += `<div>[${new Date().toLocaleTimeString()}] ${msg}</div>`; logEl.scrollTop = logEl.scrollHeight; } socket.on('connect', () => addLog("中継サーバーに接続しました。待機中...")); socket.on('disconnect', () => addLog("中継サーバーから切断されました。")); // サーバーから「変換して!」とお願いされた時の処理 socket.on('request_convert', (data, callback) => { addLog(`リクエスト受信: ${data.text}`); // Chrome拡張機能のエンジンにそのまま投げる chrome.runtime.sendMessage(ENGINE_ID, { action: "CONVERT", text: data.text, mode: data.mode || "segmented" }, (response) => { if (chrome.runtime.lastError) { addLog("❌ エラー: 拡張機能に接続できません。"); callback({ success: false, error: "Engine not found" }); return; } addLog(`✅ 変換完了`); // サーバー(外部デバイス)へ結果を返す callback(response); }); }); </script> </body> </html>

4 実際に動かしてみよう!

1. サーバーを起動する
ターミナルで以下のコマンドを実行し、サーバーを立ち上げます。

node server.js

2. Chromeでブリッジ画面を開く
PCのChromeブラウザで http://localhost:3000 にアクセスします。「待機中...」と表示されればOKです。
※このタブを開いている間だけ、通信が通ります。

3. 外部からAPIを叩く
同じWi-Fiに繋がっているスマホや別のPCから、APIに向けてデータをPOSTします。(以下の例はMac/Linuxのターミナル用です。192.168.x.x はサーバーPCのIPアドレスに変えてください)

curl -X POST http://192.168.x.x:3000/api/convert \ -H "Content-Type: application/json" \ -d '{"text": "きょうはいいてんき", "mode": "auto"}'

無事に漢字変換されたJSONデータがスマホ側に返ってくれば、中継サーバーの構築は成功です!この仕組みを応用すれば、自作のIoTキーボードやスマホアプリの「脳みそ」として、PCのエンジンをフル活用できます。