リリースノート

CHANGE

後方互換性のない変更

UPDATE

後方互換性がある変更

ADD

後方互換性がある追加

FIX

バグ修正

2024.2.0

メジャーアップデート

リリース:

2024 年 12 月 18 日

重要

Sora 2024.1.x から 2024.2.x への移行については 2024.1.x から 2024.2.x への移行 をご確認ください。

ハイライト

  • 録画アーカイブファイルの MP4 形式による出力に対応しました

  • 録画アーカイブファイルの H.265 コーデックによる出力に対応しました

  • リアルタイムメッセージング機能で、メッセージのヘッダーに送信元の connection_id を付与する機能を追加しました

  • 実験的機能として、転送フィルター機能で複数のフィルターを設定できる「マルチ転送フィルター機能」を追加しました

  • 実験的機能として、 session.created の払い出しに、セッションの同時接続数を制限する trial_max_connections を追加しました

  • 指定したコネクションにキーフレームを要求する RequestKeyFrame API を追加しました

正式版

今回のリリースで以下の機能が実験的機能から正式版になりました。

破壊的変更

廃止情報

  • JoinCluster API を廃止しました

  • E2EE 機能を廃止しました

    • 将来的に Message Layer Security (MLS) を利用した E2EE 機能を提供予定です

    • ウェブフックに含まれる e2ee 項目は予約項目として常に false が含まれます

    • sora.conf から e2ee 項目を廃止しました

  • sora.conf の移行用の設定 legacy_auth_webhook_log 設定を廃止しました

  • sora.conf の移行用の設定 legacy_event_webhook_connection_destroyed_reason 設定を廃止しました

非推奨情報

  • 転送フィルターを認証成功時やセッション生成時の払い出しで指定できる forwarding_filter を非推奨にしました

    • forwarding_filter は 2025 年 12 月リリース予定の Sora で廃止します

    • 代わりに複数の転送フィルターを指定できる forwarding_filters をご利用ください

  • シグナリング接続時に転送フィルターを指定できる signaling_forwarding_filter を非推奨にしました

  • session.vanished を非推奨にしました

    • session.vanished は 2025 年 6 月リリース予定の Sora にて廃止します

    • 代わりに GetStatsReport API の total_ongoing_connections をご利用ください。

    • 値の監視については Sora Exporter の利用をお勧めします

  • RTP ストリーム停止/再開 API を非推奨にしました

変更履歴

  • [CHANGE] 統計情報に含まれる total_received_intra_frametotal_received_key_frame に変更しました

  • [CHANGE] spotlight.focusedspotlight.unfocused イベントウェブフックの送信を行わない場合はログを書き込まないよう変更しました

  • [CHANGE] ウェブフックを送信を行わない (ignore) の設定した場合でも以下のウェブフックはログを出力するように変更しました

    • recording.started セッションウェブフック

    • session.updated セッションウェブフック

    • session.vanished セッションウェブフック

    • connection.failed イベントウェブフック

    • archive.started イベントウェブフック

    • recording.started イベントウェブフック

  • [CHANGE] E2EE 機能を廃止しました

    • sora.confe2ee を廃止しました

    • ウェブフックに含まれる e2ee は常に false が含まれます

  • [ADD] copy_websocket_signaling_header_names で指定した WebSocket シグナリングの HTTP ヘッダーを rtc_stats.jsonlconnection.jsonlcopy_headers 項目で出力するようにしました

  • [ADD] 特定環境向けに TURN 利用時に 5-TUPLE を無視する設定を追加しました

    • この機能を利用する場合は事前にサポートまでご連絡ください

    • sora.confignore_turn_five_tupletrue に設定することで、送られてくるパケットの 5-TUPLE を無視するようになります

  • [ADD] "type": "offer" メッセージに audiovideo 関連項目を追加しました

    • audio は必ず含まれます

    • audio_codec_type はオプションで、 audiotrue かつ rolesendrecv または sendonly の場合に含まれます

    • audio_bit_rate はオプションで、 audiotrue かつ rolesendrecv または sendonlyaudio_bit_rate が指定された場合に含まれます

    • video は必ず含まれます

    • video_codec_type はオプションで、 videotrue かつ rolesendrecv または sendonly の場合に含まれます

    • video_bit_rate はオプションで、 videotrue かつ rolesendrecv または sendonly の場合に含まれます

  • [ADD] サイマルキャスト機能の設定項目に scaleResolutionDownTo を追加しました

  • [ADD] connection.jsonlsimulcast_encodingssimulcast_codecs 項目を追加しました

    • simulcast のみ true の場合は simulcast_encodings を出力します

    • simulcastsimulcast_multicodectrue の場合は simulcast_codecs も出力します

  • [FIX] Safari や Chrome Canary で H.265 の配信ができない問題を修正しました

  • [FIX] コネクションの切断が発生しない録画失敗のログレベルを error から warning に修正しました

  • [FIX] 録画ファイル書き込みに失敗するとクラッシュログが出力されることがある問題を修正しました

  • [FIX] サイマルキャスト機能利用時に simulcast_encodingsactive を未指定だと接続が失敗する問題を修正しました

  • [FIX] H.264 の RTP ペイロードヘッダーが不正な場合、サイレントディスカードするように修正しました

sora.conf

  • [CHANGE] sora.conflegacy_recording のデフォルトを true から false に変更しました

  • [CHANGE] sora.conf の移行用の設定 legacy_auth_webhook_log 設定を廃止しました

  • [CHANGE] sora.conf の移行用の設定 legacy_event_webhook_connection_destroyed_reason 設定を廃止しました

  • [CHANGE] sora.confdefault_h264_param_profile_level_id のデフォルト値を 42e01f から 42e02a へ変更しました

    • Chrome / Edge がデフォルト値を変更した事への追従です

  • [UPDATE] sora.confconnection_created_wait_timeout の最小値を 1 s から 0 s へ変更しました

    • 挙動確認などで意図的にエラーを発生させられるように変更しました

  • [FIX] ウェブフック送信時にボディを待つ時間に webhook_response_timeout が反映されていない問題を修正しました

  • [FIX] ウェブフック送信時に TCP コネクションの確立を待つ時間に webhook_connect_timeout が反映されていない問題を修正しました

API

  • [UPDATE] ListConnections API の戻り値に node_name を追加しました

  • [UPDATE] ListChannelConnections API の戻り値に node_name を追加しました

  • [UPDATE] GetStatsAllConnections API の戻り値に session_id を追加しました

  • [UPDATE] GetStatsConnection API の戻り値に session_id を追加しました

  • [UPDATE] GetStatsClient API の戻り値に session_id を追加しました

  • [ADD] 指定したクライアントにキーフレームを要求する RequestKeyFrame API を追加しました

  • [FIX] GetStatsReport API のウェブフック統計情報はウェブフックを送信したときのみカウントされるように修正しました

  • [FIX] GetStatsReport API のウェブフック統計情報が正しくカウントされない問題を修正しました

    • total_ignored_session_webhook が実際よりも少なくカウントされていた問題を修正しました

    • audio-streaming.startedaudio-streaming.stopped のウェブフック統計情報が total_ignored_XXX_webhooktotal_successful_XXX_webhook の両方がカウントされていた問題を修正しました

セッション単位での同時接続数制限機能

これは実験的機能です

認証ウェブフックでの接続制限はウェブフックが並列で送信されるため、厳密な同時接続制限ができませんでした。 この機能ではセッション単位での同時接続数を制限することで、厳密に同時接続制限ができるようになります。

この機能を利用することで認証に成功した場合でも、セッションに接続できない場合があります。 その場合は、クライアントには SERVICE-UNAVAILABLE が通知されます。

この機能は実験的機能のトライアル中です。 将来的にロール単位やクライアント ID 単位での接続制限機能などを加えていく予定です。

正式版と明確に区別するため trial_ を prefix として付与しています。

  • [ADD] session.created の払い出しにセッションの同時接続数を制限する trial_max_connections を追加しました

    • デフォルトは未指定で制限がない状態です

    • 指定できる範囲は 0..10000 です

    • trial_max_connections0 の場合は誰も接続することができなくなります

    • セッションが同時接続数制限に達した場合はクライアントに SERVICE-UNAVAILABLE を通知します

統計情報の追加

  • [ADD] GetStatsReport API に SRTP パケットの統計情報を追加しました

    • total_received_srtp

      • 受信した SRTP パケットの合計数

    • total_received_srtp_byte_size

      • 受信した SRTP パケットの合計バイト数

    • total_sent_srtp

      • 送信した SRTP パケットの合計数

    • total_sent_srtp_byte_size

      • 送信した SRTP パケットの合計バイト数

    • total_decrypted_srtp

      • 復号した SRTP パケットの合計数

    • total_decrypted_srtp_byte_size

      • 復号した SRTP パケットの合計バイト数

  • [ADD] GetStatsReport API に DataChannel で利用している SCTP パケットの統計情報を追加しました

    • total_received_sctp

      • DataChannel で受信した SCTP パケットの合計数

    • total_received_sctp_byte_size

      • DataChannel で受信した SCTP パケットの合計バイト数

    • total_sent_sctp

      • DataChannel で送信した SCTP パケットの合計数

    • total_sent_sctp_byte_size

      • DataChannel で送信した SCTP パケットの合計バイト数

  • [ADD] GetStatsReport API に無視されたウェブフックの統計情報を追加しました

    • total_ignored_session_webhook

      • 無視されたセッションウェブフックの合計数

    • total_ignored_event_webhook

      • 無視されたイベントウェブフックの合計数

    • total_ignored_stats_webhook

      • 無視された統計ウェブフックの合計数

Sora 側からのシグナリング切断時のクライアントへの通知改善

  • [CHANGE] WebSocket シグナリング利用時にメッセージサイズが大きすぎる場合の code4490 から 1009 に変更しました

    • メッセージサイズの最大は 5 MiB です

    • WebSocket の仕様に合わせました

  • [CHANGE] WebSocket シグナリング利用時に Sora 側からのクライアントへの通知を改善しました

    • 正常切断

      • code1000 です

      • reason には切断理由が含まれます

        • TYPE-DISCONNECT

        • DISCONNECTED-API

        • LIFETIME-EXPIRED

        • SESSION-DESTROYED

    • 異常切断

      • 異常が発生して Sora 側から切断した場合は code4490 が含まれます

      • reason には切断理由が含まれます

  • [ADD] sora.confdata_channel_signaling_close_message を追加しました

    • デフォルトは false です

    • true の場合は Sora からコネクションを切断する際、 DataChannel シグナリングが有効かつ、 ignore_disconnect_websockettrue な場合 signaling ラベルに "type": "close" メッセージを送信します

    • false の場合は今まで通り、 DataChannel を閉じます

    • "type": "close" メッセージには codereason が含まれます

    • 正常切断

      • 切断 API や期限切れで Sora 側から切断した場合は code1000 が含まれます

      • reason には切断理由が含まれます

        • LIFETIME-EXPIRED

        • SESSION-DESTROYED

        • DISCONNECTED-API

    • 異常切断

      • 異常が発生して Sora 側から切断した場合は code4490 が含まれます

      • reason には切断理由が含まれます

  • [ADD] sora.confsignaling_normal_close_reason を追加しました

    • デフォルトは true です

    • false を指定した場合、正常切断時の reason が空文字になります

    • false を指定した場合でも異常切断時は reason は含まれます

シグナリングエラーの改善

  • [ADD] sora.conf にレガシーシグナリングエラーを有効にする設定を追加しました legacy_signaling_error を追加しました

    • デフォルトは false です

    • この設定は移行用で 2025 年 6 月に廃止します

    • この設定は 2024.1.x までの Sora との後方互換性を維持するための機能です

    • false の場合は log/connection_created_wait_timeout にログが出力されなくなりました

    • false の場合は log/signaling_error.jsonl にシグナリングエラーログが出力されるようになりました

    • false の場合は connection.failed ウェブフックは 認証成功時 かつ connection.created が送信されていない場合のみ送信されるようになりました

    • false の場合は sora.jsonl に認証失敗ログが出力されなくなりました

    • false の場合は sora.jsonl にシグナリング失敗ログが出力されなくなりました

    • true の場合は今まで通り ignore_connection_failed_webhooktrue の場合、 event_webhook.jsonl にシグナリングログが出力されません

  • [CHANGE] クライアントに通知するエラーメッセージを変更しました

    • クライアントへ通知するエラーがあまりにもサーバーよりのメッセージが多く、混乱を招くため整理しました

    • Sora の内部的なエラーは INTERNAL-ERROR を通知するよう変更しました

      • 以下のメッセージはクライアントへは通知されなくなりました

      • SIGNALING-INTERNAL-ERROR

      • AUTH-WEBHOOK-RESPONSE-EMPTY-BODY

      • AUTH-WEBHOOK-RESPONSE-UNEXPECTED-STATUS-CODE

      • INVALID-AUTHZ-MEDIA

      • WHEP-INCOMPATIBLE-UPSTREAM-TRACK

      • DUPLICATED-CONNECTION-ID-ERROR

      • INVALID-SPOTLIGHT-NUMBER

      • DUPLICATED-CHANNEL-ID

      • UNMATCH-CODEC-TYPE-ERROR

    • Sora が一時的に利用できない場合は SERVICE-UNAVAILABLE を通知するように変更しました

      • 以下のメッセージはクライアントへは通知されなくなりました

      • EXCEED-MAX-CONNECTIONS

      • BLOCK-NEW-CONNECTION

      • BLOCK-NEW-SESSION

      • INVALID-MODE

    • Sora でタイムアウトが発生した場合は TIMEOUT を通知するように変更しました

      • 以下のメッセージはクライアントへは通知されなくなりました

      • CONNECTION-CREATED-WAIT-TIMEOUT-ERROR

      • CONNECT-WAIT-TIMEOUT-ERROR

      • ANSWER-TIMEOUT-ERROR

      • PONG-TIMEOUT-ERROR

    • シグナリングメッセージが不正な場合は INVALID-MESSAGE を通知するように変更しました

      • 以下のメッセージはクライアントへは通知されなくなりました

      • INVALID-JSON

      • INVALID-SIGNALING-TYPE

      • INVALID-SIGNALING-PARAMS

      • MISSING-TYPE

      • BAD-FINGERPRINT

      • TOO-LARGE-JSON

      • TOO-MANY-CANDIDATE

      • INVALID-VIDEO-FORMAT

      • FAILURE-SDP-PARSE

      • MISSING-ICE-SDP

      • INVALID-VIDEO-FORMAT

      • INVALID-AUDIO-FORMAT

      • FAILURE-JSON-DECODE

      • UNEXPECTED-SIGNALING-TYPE

      • UNKNOWN-AUDIO-CODEC-TYPE

      • INVALID-AUDIO-BIT-RATE

      • UNKNOWN-VIDEO-CODEC-TYPE

      • INVALID-VIDEO-BIT-RATE

録画機能

  • [CHANGE] 録画ファイル処理の開始に失敗した場合のログレベルを ERROR から WARNING に変更しました

  • [ADD] イベントウェブフック archive.*split-archive.* に項目を追加しました

    • split_only

      • 指定していない場合、値は false になります

    • format

      • mp4 または webm が含まれます

    • expire_time

      • 指定していない場合は項目が含まれません

    • expired_at

      • 指定していない場合は項目が含まれません

    • split_duration

      • 指定していない場合は項目が含まれません

  • [FIX] AV1 サイマルキャスト使用時に録画が正常に行われない問題を修正しました

MP4 録画機能

これは実験的機能です

MP4 形式での録画ファイル出力に対応しました。

  • [ADD] MP4 形式での録画に対応しました

  • [ADD] sora.confdefault_recording_format を追加しました

    • デフォルトは webm です

    • webmmp4 が指定できます

    • MP4 録画機能はレガシー録画機能では利用できません

  • [ADD] StartRecording API に format (オプション) を追加しました

    • format には webmmp4 が指定できます

    • format が未指定の場合は default_recording_format の値が利用されます

    • 映像コーデックが H.265 の場合 formatmp4 を指定しない場合、録画が行われません

  • [ADD] session.created の払い出しに recording_format を追加しました

    • recording_format には webmmp4 が指定できます

    • recording_format が未指定の場合は default_recording_format の値が利用されます

    • 映像コーデックが H.265 の場合 formatmp4 を指定しない場合、録画が行われません

  • [ADD] session.updatedrecordingformat を追加しました

    • "format": "webm" または "format": "mp4" が含まれるようになりました

  • [ADD] セッションウェブフック recording.*data.format を追加しました

    • "format": "webm" または "format": "mp4" が含まれるようになりました

  • [ADD] イベントウェブフック archive.*split-archive.*data.format を追加しました

    • "format": "webm" または "format": "mp4" が含まれるようになりました

  • [ADD] sora.conf に録画機能(セッション単位) 利用時に MP4 形式を利用した場合、クライアントへ送るキーフレーム要求 (PLI) の間隔を指定できる default_recording_mp4_pli_interval を追加しました

    • デフォルトは 20 s です

    • 最小は 1 s で、最大は 240 s です

    • WebM 形式ではキーフレームの間隔が最大でも 31 秒までという制約がありましたが、 MP4 形式ではこの制約がなくなりました

H.265 録画機能

これは実験的機能です

H.265 コーデックでの録画機能に対応しました。

  • [ADD] H.265 録画機能に対応しました

    • H.265 は formatmp4 が設定されている場合のみ録画ができます

    • WebM 形式を設定した場合 H.265 の録画は行われません

    • H.265 録画機能はレガシー録画では利用できません

ICE コネクションステート変更のシグナリング通知

これは実験的機能です

ICE コネクションステートが変更した際、 同一チャネルに接続している自分を含むクライアント全員へ通知する仕組みを追加しました。

この機能を利用することで、 自分の ICE コネクションステートの変更を 同じセッションに参加している自分を含むクライアント全員 へシグナリング通知が送信されます。 また、接続時に 既にチャネルに参加しているクライアント全員の ICE コネクションステート を取得できるようになります。

他のシグナリング通知機能とは異なり、この設定は有効にした場合、 自分を含むチャネル参加者全員へ通知を行いますので注意してください。

用途としては 4 人で双方向のビデオ通話をしている際、 特定のクライアントが不安定だという事を知ったり、 1:50 の片方配信の際に配信者の通信状態を視聴者側が知ったりすることができるようになります。

通知されるタイミングは 4 種類あります。

  1. connected から checking になった時

  2. checking から connected になった時

  3. checking から disconnected になった時

  4. disconnected から checking になった時

  • [ADD] sora_confsignaling_notify_ice_connection_state を追加しました

    • デフォルトは false です

    • true に設定すると ICE コネクションステートが変更された際に、同一チャネルに接続しているクライアントへシグナリング通知 ice-connection-state.changes を送信します

    • true にするとチャネル参加時のシグナリング通知 connection.created の既存参加者の dataice_connection_state が含まれるようになります

  • [ADD] 認証成功時の払い出しに signaling_notify_ice_connection_state を追加しました

    • デフォルトは signaling_notify_ice_connection_state の値が採用されます

    • false を払い出すことで自身の ICE コネクションステートの状態を他のチャネルに参加しているクライアントへシグナリング通知が送信されなくなります

  • [ADD] ICE コネクションステートを強制的に変更し維持する LockIceConnectionState テスト API を追加しました

転送フィルター機能

  • [CHANGE] 認証成功時の転送フィルターの払い出しがエラーになった場合、接続が失敗するように変更しました

    • INTERNAL-ERROR エラーとなります

  • [CHANGE] セッション生成時の転送フィルターの払い出しがエラーになった場合、セッションを破棄するように変更しました

マルチ転送フィルター機能

これは実験的機能です

マルチ転送フィルター機能は 1 チャネルや 1 コネクションに対して 1 つしか指定できなかった転送フィルターを 名前と優先度を設定し、複数の転送フィルターを指定できるようにする機能です。

  • [ADD] 認証成功時の払い出しに複数の転送フィルターを設定できる forwarding_filters を追加しました

    • 既存の forwarding_filter は 2025 年 12 月リリース予定の Sora にて廃止します

  • [ADD] セッション生成時の払い出しに複数の転送フィルターを設定できる forwarding_filters を追加しました

    • forwarding_filter は 2025 年 12 月リリース予定の Sora にて廃止します

  • [ADD] sora.conf にシグナリング時に複数の転送フィルターを設定できる forwarding_filters を設定できるようになる signaling_forwarding_filters を追加しました

  • [ADD] 転送フィルター設定時に namepriority を指定できるようになりました

  • [ADD] 転送フィルター API ListForwardingFilters にチャネルの転送フィルターをリストで表示する channel_forwarding_filters を追加しました

    • 既存の channel_forwarding_filter は 2025 年 12 月リリース予定の Sora にて廃止します

  • [ADD] 転送フィルター API CreateChannelForwardingFilterCreateConnectionForwardingFilternamepriority を追加しました

  • [ADD] 転送フィルター API UpdateChannelForwardingFilterUpdateConnectionForwardingFilternamepriority を追加しました

  • [ADD] 転送フィルター API DeleteChannelForwardingFilterDeleteConnectionForwardingFiltername を追加しました

詳細は マルチ転送フィルター機能 をご確認ください。

OBS WHIP

  • [FIX] OBS WHIP で H.264 で一部のエンコーダーを利用した際、録画ファイルの映像が正常に記録されない問題を修正しました

  • [FIX] OBS WHIP で AV1 で録画できない問題を修正しました

メッセージングヘッダー機能

リアルタイムメッセージング機能において、 メッセージに Sora 側でヘッダーを追加する機能です。 sender_connection_id を追加できます。

  • [ADD] data_channels にメッセージングにヘッダーを追加する header 項目を新しく追加しました

    • ヘッダーを付与するかどうかはメッセージを受信する側が指定します

      • {"label": "#spam", "direction": "recvonly", "header": [{"type": "sender_connection_id"}]

      • この設定を行ったクライアントは #spam ラベルのメッセージは常に先頭 26 バイトに sender_connection_id が含まれるようになります

    • ヘッダーは Sora 側で付与します

    • header はオプションです

    • header には [{"type": "sender_connection_id"}] のように指定します

    • typesender_connection_id のみ指定可能です

      • sender_connection_id はメッセージングの送信元の connection_id です

      • 先頭 26 バイトが sender_connection_id になります

      • 将来的に指定できる type を増やして行く予定です

    • "type": "offer" 時の data_channelsheader が含まれる場合、 length 項目を追加します

      • lengthsender_connection_id の長さです

      • length の単位はバイトです

      • sender_connection_id の場合 length は 26 固定です

音声ストリーミングヘッダー機能

音声ストリーミング機能において、HTTP/2 経由で送信する音声パケットに Sora 側でヘッダーを追加する機能です。

  • [ADD] 音声ストリーミング機能利用時に sora.confaudio_streaming_header を追加しました

    • デフォルトは false です

    • true に設定すると音声パケットに Sora がヘッダーを追加します

    • ヘッダーのフォーマットは [Timestamp:64 bit, SequenceNumber:64 bit, Length:32 bit] です

    • timestamp は音声パケット送信時の UTC 時間マイクロ秒の整数です

      • RTP のタイムスタンプとは異なります

    • seq_num は音声パケットのシーケンス番号で、 1 から始まります

      • RTP のシーケンス番号とは異なります

    • length はヘッダーを除いた音声パケットの長さです

        ---
title: "音声ストリーミングヘッダーフォーマット"
---
packet-beta
0-63: "Timestamp"
64-127: "SeqNum"
128-159: "Length"
    

プレイアウト遅延機能

実験的機能です

プレイアウト遅延機能の仕様を変更しました。 今までは配信側に影響する設定でしたが、今回のリリースから視聴側に影響する設定に変更しました。

この変更により視聴側毎にプレイアウト遅延を指定できるようになりました。

  • [ADD] sendrecv と recvonly のロールに影響するよう設定を変更しました

    • sendonly には影響しません

  • [CHANGE] sora.confdefault_playout_delay_min_delay は視聴側のプレイアウト遅延の最小値のデフォルトを指定するように変更しました

    • デフォルトは未指定です

  • [CHANGE] sora.confdefault_playout_delay_max_delay は視聴側のプレイアウト遅延の最大値のデフォルトを指定するように変更しました

    • デフォルトは未指定です

  • [CHANGE] 認証成功時の払い出し playout_delay_min_delay は視聴側の最小値を指定するように変更しました

    • playout_delay_max_delay も一緒に指定する必要があります

  • [CHANGE] 認証成功時の払い出し playout_delay_max_delay は視聴側の最大値を指定するように変更しました

    • playout_delay_min_delay も一緒に指定する必要があります

詳細は プレイアウト遅延機能 をご確認ください。

テスト API

  • [UPDATE] テスト API がクラスターで利用できるようになりました

  • [UPDATE] テスト向け API の録画失敗を意図的に起こす FailArchive API をクラスターに対応しました

  • [UPDATE] テスト向け API のシグナリング通知を送信する SendSignalingNotify API をクラスターに対応しました

© Copyright 2024, Shiguredo Inc Created using Sphinx 8.1.3