カテゴリ: Python 更新日: 2026/08/07

PythonでWebSocket通信を実装する方法を完全解説!websocketsライブラリ入門

PythonでWebSocket通信を実装する方法(websocketsライブラリ)
PythonでWebSocket通信を実装する方法(websocketsライブラリ)

先生と生徒の会話形式で理解しよう

生徒

「Pythonでリアルタイム通信ってどうやるんですか?チャットみたいな仕組みを作りたいです。」

先生

「それならWebSocket通信を使うといいですよ。サーバーとクライアントがずっとつながったままデータをやり取りできます。」

生徒

「普通のWeb通信と何が違うんですか?」

先生

「通常の通信はリクエストとレスポンスですが、WebSocketは常に双方向でやり取りできる仕組みです。では実際に作ってみましょう。」

1. WebSocketとは?初心者向けにやさしく解説

1. WebSocketとは?初心者向けにやさしく解説
1. WebSocketとは?初心者向けにやさしく解説

WebSocketとは、インターネット上でリアルタイム通信を行うための仕組みです。通常のWeb通信は「リクエストして返事をもらう」という一回きりのやり取りですが、WebSocketは一度接続するとそのまま通信が続きます。

例えば電話のようなものです。一度つながれば、何度でも会話できます。この仕組みはチャットアプリ、オンラインゲーム、株価の更新などに使われています。

2. PythonでWebSocketを使う準備(websocketsライブラリ)

2. PythonでWebSocketを使う準備(websocketsライブラリ)
2. PythonでWebSocketを使う準備(websocketsライブラリ)

PythonでWebSocket通信を行うには、websocketsというライブラリを使います。ライブラリとは便利な機能がまとめられた部品のようなものです。


pip install websockets

このコマンドでインストールできます。コマンドとはパソコンに指示を出すための文字です。

3. WebSocketサーバーを作ってみよう

3. WebSocketサーバーを作ってみよう
3. WebSocketサーバーを作ってみよう

まずはサーバーを作ります。サーバーとは、データを受け取ったり送ったりする側です。


import asyncio
import websockets

async def echo(websocket):
    async for message in websocket:
        print("受信:", message)
        await websocket.send("返事:" + message)

start_server = websockets.serve(echo, "localhost", 8765)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

このプログラムは、受け取ったメッセージをそのまま返すシンプルなサーバーです。

4. クライアントを作って通信してみよう

4. クライアントを作って通信してみよう
4. クライアントを作って通信してみよう

次にクライアントを作ります。クライアントとは、サーバーに接続する側です。


import asyncio
import websockets

async def send_message():
    async with websockets.connect("ws://localhost:8765") as websocket:
        await websocket.send("こんにちは")
        response = await websocket.recv()
        print(response)

asyncio.run(send_message())

このコードを実行すると、サーバーにメッセージを送り、返事を受け取ることができます。

5. WebSocket通信の流れを理解しよう

5. WebSocket通信の流れを理解しよう
5. WebSocket通信の流れを理解しよう

WebSocket通信の流れはとてもシンプルです。まずクライアントがサーバーに接続します。その後、自由にデータを送り合います。

ポイントは「接続が続くこと」です。通常のHTTP通信と違い、毎回接続し直す必要がありません。そのため高速で効率的です。

6. 複数メッセージを送る応用例

6. 複数メッセージを送る応用例
6. 複数メッセージを送る応用例

ループを使えば、何度もメッセージを送ることができます。


import asyncio
import websockets

async def chat():
    async with websockets.connect("ws://localhost:8765") as websocket:
        for i in range(3):
            msg = f"メッセージ{i}"
            await websocket.send(msg)
            reply = await websocket.recv()
            print(reply)

asyncio.run(chat())

このように繰り返し通信できるのがWebSocketの特徴です。

7. 非同期処理(async/await)とは?

7. 非同期処理(async/await)とは?
7. 非同期処理(async/await)とは?

コードに出てくるasyncawaitは非同期処理と呼ばれます。これは、処理を待っている間に別の作業ができる仕組みです。

例えば料理でお湯を沸かしている間に野菜を切るようなイメージです。効率よく処理を進めるために使われます。

8. エラーが出たときの対処方法

8. エラーが出たときの対処方法
8. エラーが出たときの対処方法

初心者の方はエラーが出ることがよくあります。よくある原因はサーバーが起動していないことです。


# サーバーが起動しているか確認
print("サーバー起動中...")

また、ポート番号やURLの書き間違いも多いので確認しましょう。エラー文を読むことも大切です。

まとめ

まとめ
まとめ

WebSocket通信とPython実装の重要ポイント

本記事では、PythonでWebSocket通信を実装する方法について、初心者にもわかりやすく解説しました。WebSocketはリアルタイム通信を実現するための重要な技術であり、チャットアプリやオンラインゲーム、通知システムなど幅広い分野で活用されています。特にPythonのwebsocketsライブラリを使用することで、比較的シンプルなコードで強力な双方向通信を構築できる点が大きな魅力です。

従来のHTTP通信では、クライアントからのリクエストに対してサーバーがレスポンスを返す一方向のやり取りが基本でした。しかしWebSocketでは、一度接続を確立するとその状態を維持しながら、サーバーとクライアントが自由にデータを送受信できるため、リアルタイム性が求められるアプリケーションに最適です。

Pythonとwebsocketsライブラリの活用

PythonでWebSocket通信を行う際には、websocketsライブラリを利用することで、非同期処理を活用した効率的な通信が可能になります。asyncやawaitを使うことで、通信待機中にも他の処理を進めることができ、パフォーマンスの高いアプリケーション開発が実現できます。

サーバー側では接続されたクライアントからのメッセージを受信し、それに応じたレスポンスを返す処理を記述します。一方、クライアント側ではサーバーへ接続し、メッセージを送信して応答を受け取る流れになります。この基本構造を理解することで、より高度なリアルタイムアプリケーションの開発へとステップアップできます。

応用開発と実践的な活用例

WebSocket通信は単純なメッセージのやり取りにとどまらず、複数クライアントとの同時通信やリアルタイムデータ配信などにも応用できます。例えばチャットアプリでは、複数のユーザーが同時に接続し、リアルタイムでメッセージを共有できます。また、株価やセンサー情報のように常に更新されるデータの配信にも適しています。

さらに、非同期処理を活用することで、大量の接続を効率よく処理できる点も重要です。これにより、スケーラブルなシステム設計が可能になり、実務レベルの開発にも対応できます。

サンプルプログラム(復習用)


import asyncio
import websockets

async def echo_server(websocket):
    async for message in websocket:
        print("受信:", message)
        await websocket.send("返信:" + message)

async def main():
    server = await websockets.serve(echo_server, "localhost", 8765)
    print("WebSocketサーバー起動中")
    await server.wait_closed()

asyncio.run(main())

import asyncio
import websockets

async def client():
    async with websockets.connect("ws://localhost:8765") as websocket:
        messages = ["こんにちは", "Python", "WebSocket"]
        for msg in messages:
            await websocket.send(msg)
            response = await websocket.recv()
            print("サーバー応答:", response)

asyncio.run(client())

上記のサンプルコードは、PythonでのWebSocket通信の基本を復習するためのものです。サーバーとクライアントの役割を明確に理解し、実際に動かして確認することで、より深く理解できるようになります。

先生と生徒の振り返り会話

生徒

「WebSocketって、ずっとつながっているからリアルタイム通信に向いているんですね。チャットアプリが作れる理由がわかりました。」

先生

「その通りです。Pythonとwebsocketsライブラリを使えば、比較的簡単にリアルタイム通信を実装できます。特に非同期処理が重要なポイントでしたね。」

生徒

「asyncやawaitは最初難しそうに感じましたが、待っている間に他の処理ができるという仕組みだと理解できました。」

先生

「良い理解です。これを活用すると、多くのユーザーが同時に接続しても効率よく処理できます。実務でもとても重要な技術ですよ。」

生徒

「今回学んだ内容を応用すれば、リアルタイム通知やゲームなども作れそうですね。」

先生

「その通りです。ぜひ自分で改良して、より実践的なアプリケーション開発に挑戦してみてください。」

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

Python のネットワークプログラミングの記事一覧へ
新着記事
New1
Claude
ClaudeにPHPデバッグを相談するコツ!原因候補を仮説に分けて確認する質問例
New2
Python
PythonのCLIで対話型メニューを作る方法(prompt_toolkit)
New3
ChatGPT
ChatGPTでPHPコードを理解する方法!読めない処理をわかりやすく質問しよう
New4
PHP
PHP の定数(define, const)を使った設定方法を徹底解説!
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonで文字列が数値か判定する方法!isdigit()・isnumeric()の違い
No.2
Java&Spring記事人気No2
Python
Pythonのコンストラクタ(__init__)の使い方!初心者でもわかるオブジェクトの初期化
No.3
Java&Spring記事人気No3
PHP
PHP のフォームデータの受け取り($_POST, $_GET)を完全解説!初心者向けガイド
No.4
Java&Spring記事人気No4
Python
Pythonでテキストファイルを1行ずつ読み込む方法(readline() / readlines())
No.5
Java&Spring記事人気No5
Python
PythonでSQLiteを使う方法を完全ガイド!初心者でもわかるデータベース基本操作
No.6
Java&Spring記事人気No6
Python
Pythonのシェルスクリプトを自動実行する方法(cron & Task Scheduler)
No.7
Java&Spring記事人気No7
Claude
ClaudeにPHPリファクタリングを相談するコツ!目的・前提・制約を仕様メモにまとめるコツ
No.8
Java&Spring記事人気No8
PHP
PHPのMVCパターンを完全解説!初心者でもわかるModel・View・Controller