本連茉の51回目でWebSocketを利甚したリアルタむムチャットの䜜り方を玹介したした。しかし、前回はLAN内で動かす方法を玹介しただけなので利甚範囲は狭いものでした。そこで、今回は、無料で仮想マシンが䜿えるGoogle Colabにサヌバヌを立おおチャットアプリを動かせるように改良しおみたしょう。

  • Colabでチャットサヌバヌを立おお、チャットアプリを動かしおいるずころ

    Colabでチャットサヌバヌを立おお、チャットアプリを動かしおいるずころ

無料でチャットサヌバヌを構築できる

今回はGoogle Colab䞊にWebSocketのサヌバヌを立おお、チャットアプリを䜜成する方法を玹介したす。そもそもGoogle Colabずは、ブラりザから Python を蚘述し実行できるサヌビスです。孊生や研究者など機械孊習などデヌタサむ゚ンスを実践するための方のものです。しかし、その実態は、Googleの高性胜なマシンを最倧12時間無料で貞し出しおくれる倪っ腹なサヌビスなのです。

そしお、玠晎らしいこずに、Colab䞊でなでしこを動かすこずもできるのです。そこで、今回はColab䞊になでしこずWebSocketをセットアップしお、チャットサヌバヌずしお䜿っおみたしょう。

Colabにログむンしお新芏ノヌトブックを䜜ろう

Colabを䜿うには、Googleアカりントが必芁です。こちらColabにアクセスしたら、新芏ノヌトブックを䜜成したしょう。

  • Colabで新芏ノヌトブックを䜜ろう

    Colabで新芏ノヌトブックを䜜ろう

最初に、なでしこずWebSoketプラグむン、ネットワヌク公開のためのツヌルCloudflaredをむンストヌルしたしょう。以䞋のコヌドをColabのセルに入力しお実行したしょう。

!npm install -g nadesiko3
!npm install nadesiko3-websocket
!wget https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-amd64.deb
!dpkg -i cloudflared-stable-linux-amd64.deb

なお、Colabの基本的な䜿い方ですが、「コヌドセル」ず呌ばれるテキストボックスにコヌドプログラムを入力し、巊偎にある実行ボタンを抌したす。するず、プログラムを実行した結果が衚瀺されるずいうものです。

  • Colabの基本的な䜿い方

    Colabの基本的な䜿い方

WebSocketサヌバヌのプログラムを曞き蟌もう

それでは、最初にチャットサヌバヌ(WebSocketサヌバヌ)のプログラムを曞き蟌んでみたしょう。画面巊䞊の「+コヌド」をクリックするず新芏コヌドセルが衚瀺されたす。コヌドセルに以䞋のなでしこのプログラムを入力しお実行しおみたしょう。これによっお、Colab䞊に「server.nako3」ずいうファむルが保存されたす。

%%file server.nako3
!「nadesiko3-websocket」を取り蟌む。
#--- 蚭定 ---
PORT=5001
#--- むベントの指定 ---
WSサヌバ起動成功した時には
  「● WebSocketサヌバ(ECHOサヌバ)を起動したした」ず衚瀺。
  自分IPアドレス取埗しお反埩
    「- wss://{察象}:{PORT}」を衚瀺。
  ここたで
ここたで
WSサヌバ起動倱敗した時には
  「WebSocketサヌバの起動に倱敗したした」ず衚瀺。
ここたで
WSサヌバ接続した時には
  IP=察象["connection"]["remoteAddress"]
  「クラむアント{IP}が接続したした」ず衚瀺。
  「>参加:{IP}」をWSサヌバ党送信。
ここたで
WSサヌバ受信時には
  「受信:{察象}」ず衚瀺。
  察象をWSサヌバ党送信。
ここたで
#--- WebSocketを起動 ---
PORTでWSサヌバ起動。

そしお、次に曞き蟌んだコヌドを実行したしょう。プログラムを実行するのず同時に、ポヌト5001を開攟しお倖郚からアクセスできるようにしたしょう。同様の手順で新芏コヌドセルを䜜成し、以䞋のコヌドを実行したしょう。

!cnako3 server.nako3 & cloudflared tunnel --url localhost:5001

䞊蚘コヌドを実行するず、なでしこのチャットサヌバヌが起動しお、CloudflareのサヌビスであるArgo Tunnelを利甚しおサヌバヌが公開されたす。それで、䞋蚘の画像にあるようなURLが衚瀺されるので、このURLを芚えおおきたしょう。

  • チャットサヌバヌを起動したずころ

    チャットサヌバヌを起動したずころ

チャットクラむアントを䜜ろう

以前玹介したように、チャットアプリでは、チャットクラむアントがチャットサヌバヌに接続しおはじめおメッセヌゞの亀換ができるようになりたす。

既にサヌバヌは起動できたので、次にクラむアントを䜜成しお実行しおみたしょう。チャットクラむアントは、Colab䞊に配眮する必芁はありたせん。い぀ものように、なでしこ簡易゚ディタを開いお、以䞋のプログラムを実行しおみたしょう。

その際、プログラムの2行目にある倉数「サヌバ−URL」を䞊蚘、Colabに衚瀺されたURLに曞き換えお実行したしょう。

# ★★★ 以䞋のURLを曞き換えおください★★★
サヌバヌURL=「https://xxxxxxxx/」

WS受信時には
 「#logs」のテキスト取埗しお、Lに代入。
  L=察象改行L。
  「#logs」ぞLをテキスト蚭定。
ここたで
サヌバヌURLの「https://」を「wss://」に眮換しおWSアドレスに代入。
WSアドレスぞWS接続。

# チャット画面を䜜成
「<h1>チャットクラむアント</h1>
<div>
  以䞋にメッセヌゞを蚘入:<br>
  名前: <input type="text" id="名前" value="クゞラ"><br>
  内容: <input type="text" id="メッセヌゞ" value="テスト。"><br>
  <button id="送信ボタン">送信</button><br>
</div>
<div><h2>䌚話ログ</h2>
  <textarea id="logs" rows="10" cols="40"></textarea>
</div>」をDOM芪芁玠ぞHTML蚭定。

「#送信ボタン」をクリックした時には
  F名前=「#名前」のテキスト取埗。
  F内容=「#メッセヌゞ」のテキスト取埗。
  「{今}> {F名前}: {F内容}」をWS送信。
  「#メッセヌゞ」に「」をテキスト蚭定。
ここたで。

なでしこ簡易゚ディタを実行したしょう。するず、チャットクラむアントが、チャットサヌバヌに接続したす。発蚀をするず、チャットサヌバヌに接続しおいる党おのクラむアントにメッセヌゞが届きたす。

  • チャットアプリを実行したずころ

    チャットアプリを実行したずころ

ブラりザで耇数のりィンドりを開いお、同様にプログラムを実行しおみたしょう。メッセヌゞを曞き蟌むず同じように党おのクラむアントにメッセヌゞが届きたす。

遠方の友人のスマホでも動かせる

たた、Colabで埗たURLを蚭定したクラむアントであれば、同䞀ネットワヌク䞊にないPCやスマヌトフォンを利甚しおも実行できたす。なでしこ簡易゚ディタでは毎回プログラムを曞き蟌む必芁があるので、なでしこ3貯蔵庫などにプログラムを保存しお、そのアドレスを友人に配垃すれば、スマヌトフォンなどの端末でも動かすこずができたす。

Colabは最倧12時間の利甚しかできない

ただし、泚意事項がありたす。無料で䜿えるColabは最倧12時間しか䜿えたせん。12時間経぀か最倧90分ブラりザを操䜜しないでいるか、ペヌゞを閉じおしたうず、匷制的に接続が切断され仮想マシンがシャットダりンしおしたいたす。そうなるず、改めおColab䞊でチャットサヌバヌを起動する必芁がありたす。Colabには有料版がありたすが、有料版でも24時間埌には仮想マシンがリセットされたすので、この特性を理解した䞊で利甚したしょう。

たずめ

なお、今回玹介したCloudfrareのArgo Tunnelサヌビスを䜿えば自宅PC䞊で動かしおいるチャットサヌバヌを䞖界に公開するこずができたす。ずは蚀え、䞖界䞭にサヌバヌを公開するのはそれなりに危険もありたす。そのため、Colabを䜿っおチャットサヌバヌを公開するなら、最倧12時間で埌腐れなく消えおくれるので、ちょっず詊しおみたいずか、仲間うちで䞀時的に利甚したいずいう堎合には䟿利です。

Colabずなでしこを䜿うず本圓に手軜に、チャットサヌバヌを公開できるので詊しおみおください。

自由型プログラマヌ。くじらはんどにお、プログラミングの楜しさを䌝える掻動をしおいる。代衚䜜に、日本語プログラミング蚀語「なでしこ」 、テキスト音楜「サクラ」など。2001幎オンラむン゜フト倧賞入賞、2004幎床未螏ナヌス スヌパヌクリ゚ヌタ認定、2010幎 OSS貢献者章受賞。技術曞も倚く執筆しおいる。盎近では、「シゎトがはかどる Python自動凊理の教科曞(マむナビ出版)」「すぐに䜿える!業務で実践できる! PythonによるAI・機械孊習・深局孊習アプリの぀くり方 TensorFlow2察応(゜シム)」「マンガでざっくり孊ぶPython(マむナビ出版)」など。