Ubuntu Weekly Recipe

第610回 Nextcloud Talkでリモートミーティング

この記事を読むのに必要な時間:およそ 6 分

最近,巷では新型コロナウィルスが流行っています。コロナウィルスに夢中になった結果,満員電車からリモートワークへと「推し変」する人・組織が増えているんだとか。そこで今回は,リモートワークに欠かせないツールのひとつである「ビデオ会議」をNextcloudで構築してみましょう。

会議をすれば仕事した気になれる

日本人は通勤と同じくらい会議が大好きです※1⁠。その中でも「ビジネスパーソン」と呼ばれる種族は,一日のうち2時間ぐらいを通勤に,残りのすべてを会議に使っていると言っても過言ではないという意見もあります※2⁠。そんなに会議ばかりやっていると会議に参加する人の調整が難しくなりますし,議題もなくなってくるため,会議を開催するために会議を行うこともあるくらいです。

※1
[要出典]
※2
医学的エビデンスはありません。

日本語では「会議」との言葉をよく用いますが,必ずしも「会って議する」とは限りません。議論はお飾りでただ「会うだけ」だったり,会うことすら目的ではなく「会議を開催した事実」のみが重要視されることもあるのです。ミーティングからブレインストーミング・ブリーフィング・カンファレンスに至るまで,すべてを内包する便利な言葉・仕組みとも言えるでしょう。

そんな日本の伝統的な商慣習が現在,危急存亡の時を迎えています。そう,新型コロナウィルス(SARS-CoV-2)の登場に伴うリモートワークの流行です。

これまでは仕事上で何か行き詰まったら,気分転換がてら「よし,会議だ!」と招集をかけられたのに対し,リモートワークだと安易には声かけできません※3⁠。招集するとなるとメールやチャットを使うことになるのですが,だったらそのまま議論の流れを記録しやすい文字媒体で議論をすればいいのでは,となるわけです※4⁠。

※3
国難に際し「とりあえず関係者全員を集めた会議」を開催して,そのままなし崩し的に宴会になるのは神代からの日本のお家芸です
※4
キーボード入力が一般教養である業界のみを想定した発言です。

他にもリモートワークは「仕事した感」を得ることが難しいとも言われています。環境が普通の生活の延長になってしまうためか,ずるずると働き続けたり,適度な緊張感を維持できなかったりするそうです。そこで会議です。意味もなく会議を開いて,なんとなく議題について語り合えば,その日はもうバッチリ仕事をした気分になれます!

つまりリモートワークにこそ会議を行う仕組みが必要なのです。とりわけボイスチャットを導入すれば,⁠最近,人類とは会話してないなぁ」みたいなこともなくなります。さらにビデオチャットだと部屋の中の特定の方向がきれいに整頓されるという副次的効果もあります。

前置きが長くなってしまいましたが,そろそろリモートワークにおける会議の有効性について納得していただけたことでしょう。そこでビデオ会議に対応したFLOSSなツールとして,Nextcloud Talkの導入方法を説明します。

オンラインストレージサービスであるNextcloudのアプリ

Nextcloudはオンラインストレージを構築できるソフトウェアとして人気のあったownCloudから,開発者ごとフォークする形でスタートしたプロジェクトです。現在では単なるオンラインストレージだけでなく,ウェブブラウザベースのコラボレーションツールとしてさまざまな機能を備えるようになりました。さらに「アプリ」という形で,機能を拡張できます。アプリはNextcloud公式が作っていることもありますし,コミュニティで開発されているものも存在します。

今回紹介するNextcloud Talk(spreed)もそんな公式アプリのひとつです。具体的には次のようなことを実現できます。

  • Nextcloud上の他のユーザーとのチャット
  • WebRTCを利用した音声通話・ビデオ通話
  • チャットや通話への特定のユーザーの呼び出し
  • カメラの代わりにデスクトップ・特定のウィンドウ画面の共有
  • ファイルの送受信
  • グループ・ユーザーごとの権限の管理
  • AndroidiOS向けの専用アプリ

サーバーのスペックはそこまで高くなくて良いようです。たとえばRaspberry Pi 3+でも参加者4名でのチームミーティングが可能だったという報告もありました。

Nextcloudのアプリをインストールするためには,まずはNextcloudをインストールする必要があります。Nextcloudそのものは,PHPベースのWebアプリケーションとして実装されています。よって一般的なソフトウェアをサーバーにインストールするだけです。さらにUbuntuならsnapパッケージが用意されているので,次のようにコマンドひとつでインストールできます。

$ sudo snap install nextcloud

Nextcloudそのものの設定やsnapパッケージの使い方については,第476回「Nextcloudに学ぶsnapパッケージ入門」を参照してください。なお,通話を行うためにはNextcloudをHTTPS化しておく必要があります。

無事に設定できたらまずはNextcloudをインストールしたホストのアドレスにウェブブラウザーからアクセスします。

図1 初回アクセス時に管理者アカウントを作成する

画像

図2 しばらく待つとファイル一覧の画面が表示される

画像

ちなみにLXD内部にNextcloudをインストールしておくと,LXDコンテナごと別ホストに移動できるため,ホストのメンテナンスの際に便利です。この場合,次のいずれかの方法でホストの外からコンテナの中のNextcloudに通信できるようにする必要があります。

  • ホスト上にNginxなどのリバースプロキシーを導入する
  • 第533回のようにホスト上の特定のポートをLXDコンテナに転送する
  • iptablesを用いてホスト上の特定のポートをLXDコンテナに転送する

もっとも簡単で汎用性が高いのは,リバースプロキシーの導入です。ホスト上に複数のLXDコンテナを用意して,ホストごとに転送先を変えるといった使い方も可能になります。

せっかくなのでLXD上へのインストール方法も紹介しておきます。LXDに興味のない方は次の節までスキップしてください。

まずはNextcloud用のコンテナを作っておきます。

$ lxc launch ubuntu:18.04 talk

コンテナが起動してネットワークに接続されたら,パッケージのアップデートとnextcloudのインストールを行いましょう。

$ lxc exec talk -- sh -c "apt update && apt full-upgrade -y"
$ lxc exec talk -- locale-gen ja_JP.UTF-8
$ lxc exec talk -- update-locale LANG=ja_JP.UTF-8
$ lxc exec talk -- timedatectl set-timezone Asia/Tokyo
$ lxc exec talk -- snap install nextcloud
$ lxc restart talk

次にNextcloud側のTrusted proxyの設定を行います。これはLXDのネットワーク設定・外から見えるホスト名に合わせて設定してください。

  • lxc network get lxdbr0 ipv4.addressを実行したときに表示されるアドレス部分を「10.241.13.1」とする
  • インターネットからアクセスするときのホスト名を「talk.example.com」とする

上記の条件だと,次のような設定になります。

$ cat <<'EOF' | lxc file push --uid 0 --gid 0 --mode 644 - talk/var/snap/nextcloud/current/nextcloud/config/proxy.config.php
<?php
$CONFIG = array (
  "trusted_proxies"   => ['10.241.13.1'],
  "overwritehost"     => "talk.example.com",
  "overwriteprotocol" => "https",
  "overwritewebroot"  => "",
  "overwritecondaddr" => "^10\.241\.",
);
EOF
$ lxc exec talk -- systemctl restart snap.nextcloud.apache.service

最後のコマンドでHTTPサーバーごとNextcloudを再起動しています。

次にリバースプロキシーの設定です。こちらはNginxを利用するなら,コンテナではなくホスト上にNginxをインストールし,たとえば次のように設定します。

$ cat <<'EOF' | sudo tee /etc/nginx/sites-available/talk
server {
        listen 443 ssl;
        listen [::]:443 ssl;
        server_name talk.example.com;

        access_log /var/log/nginx/talk.example.com.access.log;
        error_log /var/log/nginx/talk.example.com.error.log;

        client_max_body_size 0;
        underscores_in_headers on;

        ssl on;
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

        ssl_stapling on;
        ssl_stapling_verify on;

        location / {
                proxy_headers_hash_max_size 512;
                proxy_headers_hash_bucket_size 64;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

                add_header Front-End-Https on;

                proxy_pass http://10.241.13.100;
        }
}
EOF

$ sudo ln -s /etc/nginx/sites-available/talk /etc/nginx/sites-enabled/
$ sudo systemctl reload nginx.service

「10.241.13.100」はNextcloudをインストールしたLXDコンテナのIPアドレスです。NginxとLXDの間はHTTP/IPv4で通信しています。別途インターネットからNginxへの通信をHTTPS/IPv4/IPv6に対応しておけばおこの設定でも問題ないはずです。逆にNginxとLXDの間はHTTPS/IPv6のみにするという手もあります。またssl_certificatessl_certificate_keyはHTTPS用の証明書ファイルを指定します。

Nginxの設定は状況によって設定内容が大きく変わるため,各自でNextcloudやNginxのドキュメントを参照してください。

ここまでの設定によりホストのインターネット側のIPアドレスに紐付いたホスト名にアクセスすると,コンテナ上のNextcloudサービスにアクセスできるようになりました。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。