はじめに
Jitsi Meetには管理GUIが用意されていないため、Web画面では会議の開催履歴を確認できません。
しかし、会議室の管理や参加者の認証と権限管理、メディアセッション制御を担うJicofoコンポーネントのログに、会議の開催状況が記録されており、そのログを解析することで、会議の開催履歴を作成できそうです。
、、、といったことは、以下の記事で知りました。
ありがとうございます!
(参考)
・Jitsi Meetの会議開催状況をログ・ファイルから取得する – 枯木春開
https://shyunsei.9ten.net/2021/09/jitsi-meet.html
↑こちらにあるPHPコードですが、残念ながら、Jitsi Meetのバージョンアップによりログフォーマットが変わったようで、僕が使用したDocker版JitsiMeet バージョン 10433 では使用できませんでした。
開催履歴取得PHPコードの改修
上記参考記事内のPHPコードの改修を試みます。
Jicofoのログの中で、会議室とメンバーに関してポイントとなるのは以下の4つです。
・会議作成時の「Created new conference.」
Jicofo 2025-05-08 14:29:17.385 INFO: [1245] [room=testmeeting@muc.meet.jitsi] JitsiMeetConferenceImpl.<init>#309: Created new conference.
・会議メンバー参加時の「Member joined」
Jicofo 2025-05-08 14:29:17.857 INFO: [1419] [room=testmeeting@muc.meet.jitsi meeting_id=18de34f1-cd7f-45f5-bfd1-62fb90fe578f] JitsiMeetConferenceImpl.onMemberJoined#751: Member joined:0019b927 stats-id=Demarcus-S3B region=null audioMuted=true videoMuted=true role=PARTICIPANT isJibri=false isJigasi=false isTranscriber=false, room=main
・会議メンバー退席時の「Member left」
Jicofo 2025-05-08 15:21:53.979 INFO: [1432] [room=testmeeting@muc.meet.jitsi meeting_id=18de34f1-cd7f-45f5-bfd1-62fb90fe578f] JitsiMeetConferenceImpl.onMemberLeft#965: Member left:876dc82e
・会議終了時の「Room destroyed」
Jicofo 2025-05-08 15:21:55.311 INFO: [1430] [room=testmeeting@muc.meet.jitsi meeting_id=18de34f1-cd7f-45f5-bfd1-62fb90fe578f] JitsiMeetConferenceImpl$ChatRoomListenerImpl.roomDestroyed#2476: Room destroyed with reason=The meeting has been terminated
これらを基に、参考記事のPHPコードを改修してみました。
jitsi_meeting_history.php として保存します。
<!-- Jitsi Meet 会議開催履歴取得PHP -->
<!-- https://shyunsei.9ten.net/2021/09/jitsi-meet.html のPHPコードを改修 -->
<!-- $ docker compose logs jicofo | cut -d ' ' -f 4- > /tmp/jicofo.log -->
<!-- jicofo.log を php と同じ階層に配置して、Web経由でこのPHPにアクセスする -->
<!-- バージョン 10133, PHP 8.1 で動作確認済み -->
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width">
<meta http-equiv="refresh" content="300";>
<title>Jitsi log</title>
</head>
<body>
<?php
date_default_timezone_set('Asia/Tokyo');
$date = new DateTime();
print "<hr>Jitsiビデオ会議利用状況 更新日時:".$date->format('Y-m-d H:i:s')."<hr>";
function log2table($logfile) {
$filter=['Created','Member','Room'];
$room_used=[];
$start_time=[];
$total_member=[];
$current_member=[];
$end_time=[];
$fp=fopen($logfile,'r');
while (!feof($fp)) {
$line=fgets($fp);
$fields=explode(" ",$line);
if ( (isset($fields[7]) && in_array($fields[7],$filter))
|| (isset($fields[8]) && in_array($fields[8],$filter)) ) {
$room = preg_replace('/.* \[room=([^ ]*)@muc.meet.jitsi(.*)/i','$1',$line);
if (!array_key_exists($room,$room_used)) {
$room_used[$room]=0;
$today=$fields[1];
}
if ($fields[7]=='Created'){
$room_used[$room]=$room_used[$room]+1;
$start_time[$room."#".$room_used[$room]]=$fields[1]." ".$fields[2];
$total_member[$room."#".$room_used[$room]]=0;
$current_member[$room."#".$room_used[$room]]=0;
}
if ($fields[8]=='Member'){
if (substr($fields[9],0,6)=='joined'){
$total_member[$room."#".$room_used[$room]]=$total_member[$room."#".$room_used[$room]]+1;
$current_member[$room."#".$room_used[$room]]=$current_member[$room."#".$room_used[$room]]+1;
}
if (substr($fields[9],0,4)=='left'){
$current_member[$room."#".$room_used[$room]]=$current_member[$room."#".$room_used[$room]]-1;
}
}
if ($fields[8]=='Room' && $fields[9]=='destroyed'){
$end_time[$room."#".$room_used[$room]]=$fields[1]." ".$fields[2];
$current_member[$room."#".$room_used[$room]]=0;
}
}
}
fclose($fp);
print '<table border=1><tr><td>会議名 #開催回</td><td>開始時刻</td><td>終了時刻</td><td>延べ参加者数</td><td>現在参加者数</td></tr>';
foreach ($start_time as $key => $value){
$endtime2 = "";
if (isset($end_time[$key])) {
$endtime2 = $end_time[$key];
}
if (isset($total_member[$key]) && isset($current_member[$key])) {
print '<tr><td>'.$key."</td><td>".$value." "."</td><td>".$endtime2." "."</td><td>".$total_member[$key]."</td><td>".$current_member[$key]."</td></tr>";
}
}
print '</table>';
}
log2table("./jicofo.log");
?>
</body>
</html>
開催履歴取得PHPコードの使い方
以下、Docker版JitsiMeet バージョン 10433 のjicofoコンテナのログと、Linux Webサーバーの PHP 8.1 環境で確認しました。
まず、Dockerホストサーバーで、jicofoコンテナのログを取得します。
最初の3つのフィールドは、コンテナに関する情報なのでカットして、4フィールド目以降を出力します。
$ docker compose logs jicofo | cut -d ' ' -f 4- > /tmp/jicofo.log
この jicofo.log と改修したPHPコード jitsi_meeting_history.php を、PHPが動作するWebサーバーの同じ階層に保存します。
Webブラウザから、Web経由でこのPHPにアクセスすると、以下のように、会議の開催情報がHTMLテーブル形式で表示されます。
参加メンバーの名前までは表示されませんが、この会議システムがどれぐらいの頻度で利用されているかは、把握できますね。
Jitsi Meetについて書いた記事まとめ。

