オンライン勉強会を支える技術: 鹿児島らぐの事例

はじめに

鹿児島らぐというLinux User Groupでは、月に一度のペースで勉強会を行っています。現在は主にオンラインで活動しており、オープンソースのソフトウェアをさくらインターネットから提供されたVPSにセルフホストして、それを利用してオンライン勉強会を開催しています。ここでは、利用しているビデオカンファレンスサーバーとリアルタイムオンラインテキストエディターを紹介します。

オープンソースのビデオカンファレンスサーバーについて

これまで、オープンソースのビデオミーティングソフトウェアとしてJitsi Meet1Nextcloud Talkなどをセルフホストして試したこともありますが、安価なVPSなどではスペックが足りず失敗して、プロプライエタリのDiscordなどのサービスを利用していました。 Discordもウェブブラウザだけで利用できて便利ですが、いつまで無料利用ができるか分からず、また、アカウントを作らないといけないので、初めて利用する方へ説明する時が面倒でした。

音声だけならMumbleを利用したことが何度かあります。Mumbleはサーバー、クライアント共に軽量です。しかし、専用クライアントが必要であったり、最近はスライドなどを画面共有して進めることが多いので、それができないことが不満です。

そんな折、Galèneというオープンソースのビデオカンファレンスサーバーを知りました。 GalèneはGo製MITライセンスのソフトウェアでLinux/amd64、Linux/arm64、Linux/armv7、Linux/mipsと各種Linuxや、macOS、Windowsでも動作するようです。利用者はウェブブラウザで接続することで利用可能です。 サーバーのスペックについてFAQを見ると、256MBのRAMで動作するとなっています(知ったときは128MBでした)。自分の場合、自宅のテスト環境はRaspberry Pi 3 model B(RAM 512MB)で、本番環境はさくらのVPS 1G(RAM 1GB)で実行しており、問題なく動作しています。さくらのVPSの最低スペックの512MBでも動作すると思います。 GalèneはWebRTC2のSFU3を利用しており、これによりサーバーではクライアント間でのデータの中継だけを行い、サーバーの負荷がこれまで試したMCUを利用したソフトウェアに比べ軽量になっているようです。

Galèneを導入する

GalèneはGo製なので、Go言語のコンパイラを導入してビルドします。今回はDebian/Raspberry Pi OSでパッケージから導入しました。 その後、Galèneのソースを入手してビルドします。

$ sudo apt install golang
$ git clone https://github.com/jech/galene
$ cd galene
$ CGO_ENABLED=0 go build -ldflags='-s -w'

次にGalèneグループの設定ファイルを作成して起動します。

$ mkdir groups
$ echo '{"users": {"bob":{"password":"secret", "permissions":"op"}}}' > groups/example.json
$ ./galene &

https://localhost:8443/group/example/に接続し、 Usernameに「bob」、Passwordに「secret」を入力することで利用できます。 TLS証明書がない場合、自己署名証明書が自動生成されます。設定については、READMEやINSTALLファイルを参照してください。

本番運用する際はTLS証明書を設置しましょう。
以下は、Let's Encryptの証明書をコピーして利用するときの例です。

$ cp /etc/letsencrypt/live/server.example.org/fullchain.pem data/cert.pem
$ sudo cp /etc/letsencrypt/live/server.example.org/privkey.pem data/key.pem
$ sudo chown galene:galene data/*.pem
$ sudo chmod go-rw data/key.pem

設定の詳細は公式のドキュメントを参照してください。

Galèneでミーティング中に共有された画面をピクチャーインピクチャーで視聴している様子

リアルタイムオンラインテキストエディター

リアルタイムオンラインテキストエディターは、利用者全員が同じドキュメントを同時に編集できるツールです。これまでオープンソースのCollabora OnlineGobbyを試したことがありました。 Collabora Onlineはウェブブラウザで動作するため便利ですが、動作が重いのが難点でした。Gobbyは軽量で動作も問題ないのですが、専用クライアントが必要なのがネックでした。 そこで現在はEtherpad-liteを利用しています。Etherpad-liteはオリジナルのEtherPadをJavaScriptとNode.jsで書き直したもので、Apache License 2.0のオープンソースソフトウェアです。Gobbyよりは重いですが、ウェブブラウザから利用できるので手軽に利用できます。

Etherpad-liteの導入

Etherpad-liteの導入は、以前はNode.jsのパッケージマネージャーで導入していましたが、依存関係が壊れて動かなくなることが何度かあったので、サーバ移行のタイミングでDockerの中で動かすようにしました。

$ docker pull etherpad/etherpad

起動例です。 プラグインも色々ありますが、ほぼデフォルトで利用しています。

$ docker run -v etherpad_data:/opt/etherpad-lite/var -p 9001:9001 etherpad/etherpad

起動すると、 http://localhost:9001 で利用できます。

詳細はドキュメントを参照してください。

実際の勉強会の参加者や発表の管理に使っています。参加者の方に発表タイトルなどを書いてもらい、それをもとに進行しています。後で振り返るときにも便利です。

Etherpad-liteを勉強会で利用している様子

おわりに

今回は、ビデオカンファレンスサーバーのGalèneと、リアルタイムオンラインテキストエディターのEtherpad-liteを紹介しました。プロプライエタリなソフトウェアを使う方が慣れている人が多く、便利なことも多いですが、Linuxの勉強会ということもあり、なるべくLinux上でオープンソースソフトウェアを自分たちの管理下で使いたいと考え、このようなソフトウェアを利用しています。今回紹介したソフトウェアはさくらのVPS 1G 1台の上で、他のウェブサーバーなどと一緒に動作しており、コストもあまりかかりません。ソフトウェアのアップデートやバックアップなどの手間はかかりますが、興味のある方は試してみてはいかがでしょうか。この記事を見て興味を持ってもらえたら嬉しく思います。

  1. 8x8がスポンサーをしているJitsi Meetを使ったり、高性能なサーバを時間単位で借りている勉強会もあります ↩︎
  2. 【基礎知識】WebRTCとは?仕組みやサーバー構成を解説|画像変換・ライブ配信クラウドサービスImageFl ↩︎
  3. SFU (Selective Forwarding Unit) ↩︎