TypeScriptとPythonの連携について徹底解説
TypeScriptとPythonは、それぞれ異なる特徴と強みを持つプログラミング言語です。TypeScriptは、JavaScriptに型付け機能を追加した言語であり、フロントエンドやサーバーサイド開発でよく使われます。一方で、Pythonはその柔軟性と豊富なライブラリにより、データ分析や機械学習、スクリプト言語として幅広い分野で利用されています。
これら2つの言語を組み合わせることで、フロントエンドでTypeScriptを使い、バックエンドやデータ処理にPythonを使うといった高度なシステムやアプリケーションの構築が可能です。本記事では、TypeScriptとPythonの連携方法を、初心者向けにわかりやすく解説します。
TypeScriptとPythonの連携アプローチ
TypeScriptとPythonを連携させる方法はいくつかあります。ここでは、代表的な3つのアプローチを紹介します。
- TypeScriptからPythonスクリプトを呼び出す
- PythonからTypeScriptのコードを呼び出す
- TypeScriptとPython間で通信を行う (例: HTTPやWebSocketを利用)
TypeScriptからPythonスクリプトを呼び出す方法
TypeScriptからPythonスクリプトを呼び出す方法は、Node.jsのchild_process
モジュールを使って外部プログラムとしてPythonスクリプトを実行する方法です。以下にサンプルコードを示します。
まず、Node.jsでTypeScriptコードを書き、Pythonスクリプトを実行する方法を紹介します。
import { exec } from 'child_process'; // Pythonスクリプトを実行 exec('python3 hello.py', (error, stdout, stderr) => { if (error) { console.error(`Error executing Python script: ${error}`); return; } // Pythonスクリプトの出力を表示 console.log(`Python script output: ${stdout}`); });
この例では、hello.py
というPythonスクリプトをTypeScriptから呼び出しています。Pythonスクリプトの内容は次のようにシンプルです。
# hello.py print("Hello from Python!")
このTypeScriptコードを実行すると、次のような結果が得られます。
Python script output: Hello from Python!
child_process
モジュールを利用することで、TypeScriptからPythonのスクリプトを外部コマンドとして実行し、その出力を簡単に取得できます。
PythonからTypeScriptコードを呼び出す方法
次に、PythonからTypeScriptのコードを呼び出す方法を見てみましょう。TypeScriptのコードはNode.js上で実行できるため、Pythonではsubprocess
モジュールを使ってNode.js経由でTypeScriptコードを実行します。
以下にPythonコードの例を示します。
import subprocess # TypeScriptコード(Node.jsで実行)を呼び出す result = subprocess.run(["node", "hello.js"], capture_output=True, text=True) # TypeScriptプログラムの出力を表示 print("Output from TypeScript program:", result.stdout)
この例では、hello.ts
というTypeScriptファイルを事前にhello.js
にコンパイルした状態を想定しています。TypeScriptのコードは次のような内容です。
// hello.ts console.log("Hello from TypeScript!");
TypeScriptコードを事前にJavaScriptにコンパイルするためには、以下のようにtsc
(TypeScriptコンパイラ)を使用します。
tsc hello.ts
その後、Pythonスクリプトを実行すると、次のような結果が得られます。
Output from TypeScript program: Hello from TypeScript!
このように、PythonからTypeScriptを実行するのも簡単に行うことができます。
HTTP通信を用いたTypeScriptとPythonの連携
次に紹介するのは、HTTP通信を使用してTypeScriptとPythonを連携させる方法です。この方法では、TypeScriptがクライアントとしてリクエストを送り、Pythonがサーバーとしてレスポンスを返します。これにより、両者間でデータをシームレスにやり取りできます。
PythonでFlaskを使ったHTTPサーバー
まず、Pythonで簡単なHTTPサーバーを作成します。Pythonでは、Flaskという軽量Webフレームワークを使用してサーバーを構築できます。
from flask import Flask, jsonify app = Flask(__name__) @app.route('/api/hello', methods=['GET']) def hello(): return jsonify(message="Hello from Python!") if __name__ == '__main__': app.run(debug=True, port=5000)
このコードは、/api/hello
エンドポイントに対してGETリクエストを受け取ると、"Hello from Python!"
というメッセージを返すPythonサーバーです。
TypeScriptでHTTPクライアント
次に、TypeScript側でこのPythonサーバーにリクエストを送るHTTPクライアントを実装します。axios
というHTTPクライアントライブラリを使用すると簡単にリクエストを送ることができます。
まず、axios
をインストールします。
npm install axios
次に、以下のようなTypeScriptコードを書きます。
import axios from 'axios'; // PythonサーバーにGETリクエストを送信 axios.get('http://localhost:5000/api/hello') .then(response => { console.log('Response from Python server:', response.data.message); }) .catch(error => { console.error('Error fetching data from Python server:', error); });
このTypeScriptコードを実行すると、次のような出力が得られます。
Response from Python server: Hello from Python!
この方法を使えば、TypeScriptとPythonがHTTP通信を通じてデータをやり取りできるようになります。Python側でFlaskのようなWebフレームワークを使うことで、REST APIを簡単に構築でき、TypeScript側からリクエストを送信してデータを取得できます。
WebSocketを利用したTypeScriptとPythonのリアルタイム通信
さらに高度な方法として、WebSocketを使ってTypeScriptとPythonの間でリアルタイム通信を行う方法があります。WebSocketは、サーバーとクライアント間での双方向通信を可能にし、リアルタイム性が求められるアプリケーション(チャットアプリ、ライブ更新のダッシュボードなど)に最適です。
PythonでWebSocketサーバーの構築
Pythonでは、websockets
ライブラリを使って簡単にWebSocketサーバーを構築できます。
まず、websockets
ライブラリをインストールします。
pip install websockets
次に、Python側のWebSocketサーバーのコードを示します。
import asyncio import websockets async def hello(websocket, path): name = await websocket.recv() print(f"Received: {name}") greeting = f"Hello {name} from Python!" await websocket.send(greeting) print(f"Sent: {greeting}") start_server = websockets.serve(hello, "localhost", 8765) asyncio.get_event_loop().run_until_complete(start_server) asyncio.get_event_loop().run_forever()
このPythonコードは、クライアントからの接続を待ち受け、名前を受け取り、それに対する挨拶メッセージを送信するWebSocketサーバーです。
TypeScriptでWebSocketクライアント
次に、TypeScriptでWebSocketクライアントを実装します。
const websocket = new WebSocket('ws://localhost:8765'); // WebSocket接続が開いたときの処理 websocket.onopen = () => { console.log('Connected to the Python WebSocket server'); websocket.send('TypeScript'); }; // メッセージを受け取ったときの処理 websocket.onmessage = (event) => { console.log('Message from Python server:', event.data); }; // エラーが発生したときの処理 websocket.onerror = (error) => { console.error('WebSocket error:', error); };
このTypeScriptコードを実行すると、WebSocketサーバーに接続し、"TypeScript"という名前を送信します。その後、Pythonサーバーからのメッセージを受信して表示します。
実行結果は次のようになります。
``
` Connected to the Python WebSocket server Message from Python server: Hello TypeScript from Python!
これにより、WebSocketを利用してリアルタイムにTypeScriptとPythonが通信できることがわかります。 ### まとめ TypeScriptとPythonの連携は、フロントエンドとバックエンド、あるいは異なるシステム間でのデータ通信を効果的に行うための重要な手法です。`child_process`や`subprocess`を使った直接的なコマンド実行から、HTTP通信やWebSocketを用いたリアルタイム通信まで、さまざまな方法があります。