Python転職初心者向けエンジニアリングブログ

Pythonに魅了されたあなたへ。エンジニアリングの扉を開く転職初心者向けのブログへようこそ。このブログでは、Pythonの奥深さに迫りながら、エンジニアリングへの転職に役立つ情報を提供しています。未経験者から始めるPythonエンジニアリングの世界への一歩を踏み出すためのガイダンス、ベストプラクティス、そして成功事例など、初心者の方でもわかりやすいコンテンツをお届けします。

TypeScriptとPythonの連携について徹底解説

LYPプレミアム会員 python

TypeScriptとPythonの連携について徹底解説

TypeScriptとPythonは、それぞれ異なる特徴と強みを持つプログラミング言語です。TypeScriptは、JavaScriptに型付け機能を追加した言語であり、フロントエンドやサーバーサイド開発でよく使われます。一方で、Pythonはその柔軟性と豊富なライブラリにより、データ分析や機械学習、スクリプト言語として幅広い分野で利用されています。

これら2つの言語を組み合わせることで、フロントエンドでTypeScriptを使い、バックエンドやデータ処理にPythonを使うといった高度なシステムやアプリケーションの構築が可能です。本記事では、TypeScriptとPythonの連携方法を、初心者向けにわかりやすく解説します。

TypeScriptとPythonの連携アプローチ

TypeScriptとPythonを連携させる方法はいくつかあります。ここでは、代表的な3つのアプローチを紹介します。

  1. TypeScriptからPythonスクリプトを呼び出す
  2. PythonからTypeScriptのコードを呼び出す
  3. 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を用いたリアルタイム通信まで、さまざまな方法があります。