管理人のふたこと Tweet
Raspberry Pi Zero WをPCに繋ぎ、マウスのフリをさせてハードウェア版マウスふるふるを作ってみる
公開日:2021/05/07
【目次】
- ラズパイZeroのUSBデバイス化の話を聞いて
- 基本的なRaspberry Pi OSの導入手順
- ラズパイZeroのHID化
- Raspberry Pi OSのReadOnly化
- マウスふるふるスクリプトの改修
- 関連(ラズピコの話、ガワの話)
■ラズパイZeroのUSBデバイス化の話を聞いて
Raspberry Pi Zero(および4)シリーズは、PCとUSB接続するとUSB機器(特にHID……例えばマウスなど)として認識させることができるという話を耳にしました(※1)。となると、これまで対応できなかった、「シンクライアント-VDI環境向けのマウスふるふる」が作れるんじゃね?という発想に至るのは時間の問題。
そこから、別にRaspberry Piでなくてもググればメルカリでも手に入りそうとか、現物のマウス+プラレールを使った代替手段があるとか、諸々の思考とか購入までの話は5月6日付の管理人のひとことを見ていただくとして、ここでは技術的に「Raspberry Pi Zero WをPCに繋ぎ、マウスのフリをさせてハードウェア版『マウスふるふる』を作ってみる」ことについて書いてみたいと思います。
というわけで、Raspberry Pi Zero W(すでにGPIOピンは設置済みだが使用予定はない)と、micro SDカード(KIOXIA製, 16GB)を準備しました。

■基本的なRaspberry Pi OSの導入手順
最近は、Raspberry Pi OS(昔はRaspbeanと呼ばれていた)をゼロからインストールしていなかったのですが、今はSDカードにOSイメージを書き込むためのプログラムをダウンロードできるんですね。

(1) Windowsであれば、赤枠で囲ったリンクからダウンロードします。
ダウンロードしたプログラムを実行します。これはイメージライター(Raspberry Pi Imager)のプログラムですので、[Install]ボタンを押してインストールします。

(2) Raspberry Pi Imagerをインストールしたら、スタートメニューから実行します。
USBデバイスとして動作させたいだけで、デスクトップ環境は不要なので、Lite版を利用します。Lite版をSDカードに書き込みますので、「CHOOSE OS」→「Raspberry Pi OS(other)」→「Raspberry Pi OS Lite(32-bit)」を選びます。

↓

↓

(3) 「WRITE」を押す前に、Ctrl+Shift+Xを同時押ししてAdvanced options画面を表示します。

(4) ここで、hostnameの設定や、SSHの有効化、Wi-Fiの設定などを行います。Raspberry Pi Zeroは5GHz帯のWi-Fiには対応していないことに注意。

(5) 「WRITE」を押し、書き込み完了まで待ちます。

↓

(6) Raspberry PiにmicroSDカードを挿入し、micro USBに電源を供給してやると、Raspberry Piが起動します。micro USBの差込口は2つありますが、とりあえず今回はPCに接続したいわけではないので、PWRの側が望ましいと思いますが、まぁどちらでもOKです。
(7) ACTの緑色のLEDの点滅が落ち着いたら、PCからSSH接続します。TeraTermで、先ほどの書き込み時に指定したホスト名で繋いでやります。

ちなみに私はここでトラブルが発生し、うまくつなぐことができませんでした。Raspberry Pi Zeroが5GHz帯のWi-Fiに対応できないことを知らず、SSIDの指定を間違っていたためです。
こういうトラブル発生時には、本来であれば、mini HDMI経由でモニタに繋ぎ、開いているmicro USB端子にUSBキーボードを挿し、トラブルシュートをするべきなのですが、私はmini HDMIケーブルも持っていませんでしたし、micro USBに変換するケーブルも持っていませんでしたので、Raspberry Pi Zero単独としては詰んでしまいました。
ただ、予備で準備してあったRaspberry Pi 3 model Bがありましたので、そこにmicro SDカードを差し込み、HDMI経由でモニタに繋ぎ、USB端子にUSBキーボードを挿し、トラブルシュートができました。
ついでも含めて、下記の作業を行いました。
- SSIDの再設定。「sudo vi /etc/wpa_supplicant/wpa_supplicant.conf」でSSIDを設定しているファイルを開き、ssid="~~" の部分に正しいSSIDを設定してやります。
pi@raspberrypi5:~ $ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
country=JP ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev ap_scan=1 update_config=1 network={ ssid="○○○○○" psk="○○○○○○○○○○" } - ワイヤレスLANに対する固定IPの設定。ヘッドレス環境である以上、リモート操作が基本になるため、やはり接続先IPアドレスは固定になっていた方がなにかと都合が良いので。
pi@raspberrypi5:~ $ sudo vi /etc/dhcpcd.conf
: : : interface wlan0 static ip_address=192.168.○○.○○/24 static routers=192.168.○○.○○ static domain_name_servers=○○○○ - Raspberry Pi OS内の色々なソフトウェアのアップデート
pi@raspberrypi5:~ $ sudo apt-get update -y;sudo apt-get upgrade -y;sudo apt-get dist-upgrade -y;sudo apt-get autoremove -y;sudo apt-get autoclean -y
ちなみにこのあたりで、ファイル操作をしやすくするために、Windowsのファイル共有(samba)をインストールしたり設定したりしていたのですが、後々不要になったので削除しています。このページの手順でも省略しています。
- SDカードの寿命を延ばす(というか、後々、安全なシャットダウンではなく、電源ブチ切りを実現したいので、なるべくSDカードに書き込みを行わない)設定。
まずは、SWAPの無効化。pi@raspberrypi5:~ $ sudo swapoff --all pi@raspberrypi5:~ $ sudo apt-get purge -y --auto-remove dphys-swapfile Reading package lists... Done Building dependency tree Reading state information... Done The following packages will be REMOVED: dc* dphys-swapfile* 0 upgraded, 0 newly installed, 2 to remove and 0 not upgraded. After this operation, 208 kB disk space will be freed. apt-listchanges: Can't set locale; make sure $LC_* and $LANG are correct! perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LANG = "en_GB.UTF-8" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_MESSAGES to default locale: No such file or directory locale: Cannot set LC_ALL to default locale: No such file or directory (Reading database ... 40121 files and directories currently installed.) Removing dphys-swapfile (20100506-5+rpt2) ... Removing dc (1.07.1-2) ... Processing triggers for install-info (6.5.0.dfsg.1-4+b1) ... Processing triggers for man-db (2.8.5-2) ... (Reading database ... 40091 files and directories currently installed.) Purging configuration files for dphys-swapfile (20100506-5+rpt2) ... Purging configuration files for dc (1.07.1-2) ... Processing triggers for systemd (241-7~deb10u7+rpi1) ... pi@raspberrypi5:~ $ sudo rm -rf /var/swap pi@raspberrypi5:~ $ free -mh total used free shared buff/cache available Mem: 924Mi 46Mi 458Mi 17Mi 418Mi 802Mi Swap: 0B 0B 0B
- 続いて、頻繁に書き込みを行う個所のtmpfs(いわゆるRAMDISK)化。/etc/fstabの末尾に次のような内容を書き込みます。
pi@raspberrypi5:~ $ sudo vi /etc/fstab
: : : tmpfs /tmp tmpfs defaults,size=64m,noatime,mode=1777 0 0 tmpfs /var/tmp tmpfs defaults,size=16m,noatime,mode=1777 0 0 tmpfs /var/lib/systemd tmpfs defaults,size=64m,noatime,mode=0755 0 0 tmpfs /var/log tmpfs defaults,size=32m,noatime,mode=0755 0 0 - /etc/rc.local に、上記のtmpfsに対する初期ファイルの配置を行います。下記の内容を、rc.localの末尾(exit 0より前)に追加します。
sambaなどのすでに存在しないプログラムに対する設定も残ってしまっているかもしれませんね。そのあたりは、追々精査したいと思います。pi@raspberrypi5:~ $ sudo vi /etc/rc.local
: : : # add files for tmpfs mkdir -p /var/log/ConsoleKit mkdir -p /var/log/samba mkdir -p /var/log/fsck mkdir -p /var/log/apt mkdir -p /var/log/ntpstats chown root.ntp /var/log/ntpstats chown root.adm /var/log/samba touch /var/log/lastlog touch /var/log/wtmp touch /var/log/btmp chown root.utmp /var/log/lastlog chown root.utmp /var/log/wtmp chown root.utmp /var/log/btmp - 私の場合は、このあたりでいったん、Raspberry Pi 3 model Bでの作業を終え、Raspberry Pi Zeroでの作業に移ることにしました。次のコマンドを実行し、安全に終了し、Raspberry Pi 3 model BからmicroSDカードを抜いて、Raspberry Pi Zeroに挿し直しました。
pi@raspberrypi5:~ $ sudo shutdown -h now
■ラズパイZeroのHID化
PCに対してHID (Human Interface Device) なUSBデバイスだと認識させるための設定を行います。以下の内容は、TomoSoftさんの内容を参考に構成していますが、一部、rootユーザーからcronで実行したいための改変を入れています。
(8) 次の内容で hid.sh を作成します。接続したPCに対し、マウスデバイスとして認識させるシェルスクリプトです。
pi@raspberrypi5:~ $ vi hid.sh
#!/bin/bash /usr/sbin/modprobe libcomposite cd /sys/kernel/config/usb_gadget/ mkdir -p g1 cd g1 echo 0x1d6b > idVendor # Linux Foundation echo 0x0104 > idProduct # Multifunction Composite Gadget echo 0x0100 > bcdDevice # v1.0.0 echo 0x0200 > bcdUSB # USB2 mkdir -p strings/0x409 echo "S/N DUMMY 000-00" > strings/0x409/serialnumber echo "inasoft.org" > strings/0x409/manufacturer echo "Generic USB Mouse" > strings/0x409/product N="usb0" mkdir -p functions/hid.$N echo 1 > functions/hid.$N/protocol echo 1 > functions/hid.$N/subclass echo 8 > functions/hid.$N/report_length echo -ne \\x05\\x01\\x09\\x02\\xa1\\x01\\x09\\x01\\xa1\\x00\\x05\\x09\\x19\\x01\\x29\\x03\\x15\\x00\\x25\\x01\\x95\\x03\\x75\\x01\\x81\\x02\\x95\\x01\\x75\\x05\\x81\\x01\\x05\\x01\\x09\\x30\\x09\\x31\\x15\\x81\\x25\\x7f\\x75\\x08\\x95\\x02\\x81\\x06\\xc0\\xc0 > functions/hid.usb0/report_desc C=1 mkdir -p configs/c.$C/strings/0x409 echo "Config $C: ECM network" > configs/c.$C/strings/0x409/configuration echo 250 > configs/c.$C/MaxPower ln -s functions/hid.$N configs/c.$C/ # End functions ls /sys/class/udc > UDC
pi@raspberrypi5:~ $ chmod 744 hid.sh
(9) マウスふるふる的にマウスを動かすために、OS起動時にrootのcronから実行されるシェルスクリプトを作成します。
pi@raspberrypi5:~ $ vi rspi_mousefr.sh
#!/bin/sh # rootで動作していなければ終了 if [ `whoami` != "root" ]; then echo rootユーザーで実行してください。 exit 1 fi # 接続したPCに対し、マウスデバイスとして認識させる if [ ! -e /dev/hidg0 ]; then bash /home/pi/hid.sh fi # mousefrの動作(動作テスト用:6秒に1回マウスを大きく左右に動かす) # 動作させるタイミングで基板上のLEDを点滅させる while true do # マウスカーソルを右へ echo -ne "\0\x0F\0" > /dev/hidg0 echo heartbeat > /sys/class/leds/led0/trigger /usr/bin/sleep 1 # マウスカーソルを左へ echo -ne "\0\xF0\0" > /dev/hidg0 echo actpwr > /sys/class/leds/led0/trigger /usr/bin/sleep 5 # 計画停止ファイル /tmp/stop が見つかればループを抜け終了 if [ -e /tmp/stop ]; then rm /tmp/stop exit 0 fi done
pi@raspberrypi5:~ $ chmod 744 rspi_mousefr.sh
実行しているのがrootユーザーかどうかを確認する部分は、本当はUID=0を判定するのが正当っぽいのですが、そもそも運用が始まってしまうと、このシェルスクリプトを手動で実行することが無くなってしまうので、後回しで。
計画停止のファイルチェックについても、実運用が始まってしまうと使用しない(というか、試運用でも再設定後の反映はsudo rebootでOSごと再起動することになる)ので、実質的には役立たないかも。
(10) さきほど準備したrspi_mousefr.shを、rootのcronでOS起動時に実行するようにします。末尾に下記の内容を追加します。
pi@raspberrypi5:~ $ sudo crontab -e
MAILTO="" @reboot bash /home/pi/rspi_mousefr.sh > /tmp/errlog.txt 2>&1
(11) USB OTGドライバ「dwc2」が動作可能になるように設定します。参考先のサイトでは、シェルを作ってそれを実行することにより登録をするような手順になっていたのですが、

要は各ファイルの末尾に特定のテキストが追加されればよいのだと思うので、次の手順でもよいはず。たぶん。
pi@raspberrypi5:~ $ sudo vi /boot/config.txt
: : dtoverlay=dwc2
pi@raspberrypi5:~ $ sudo vi /etc/modules
# /etc/modules: kernel modules to load at boot time. # # This file contains the names of kernel modules that should be loaded # at boot time, one per line. Lines beginning with "#" are ignored. dwc2
(12) とりあえず動作テストをしてみます。まず、Raspberry Pi Zeroを安全にシャットダウンします。
pi@raspberrypi5:~ $ sudo shutdown -h now
(13) Raspberry Pi ZeroとPCをUSB接続します。Raspberry Pi Zero側のmicro USB端子は、「PWR」ではなく「USB」の方を使用します。PCとRaspberry Pi Zeroが接続されると、Raspberry Pi Zeroが起動します。

(14) 動作テストです。待っていると、PC側でマウスとして認識されます。さらに待つと、PC側のマウスが6秒に一回、大きめに動きます。
- 0:00 PCとRaspberry Pi ZeroをUSBケーブルで接続
- 0:40 PC側(Windowsのデバイス マネージャー)で、Raspberry Pi Zeroが「HID 準拠マウス」として認識される
- 0:45 Raspberry Pi Zeroがマウスの移動信号を送り、PC側でマウスが動き始める
■Raspberry Pi OSのReadOnly化
(15) Raspberry Pi Zeroにブチ切り可能な設定をします。SDカードをReadOnly化する設定です。
Raspberry Pi OSは、なんだかんだでLinuxなので、シャットダウンするにはsudo shutdown - h nowコマンドなりなんなりを打ち込んで、正しく終了させなければなりません。ブチ切りを繰り返していると、何回かは耐えられても、そのうち起動しなくなると言われています。
でも、今回のように、USBデバイスとして利用したい場合「ケーブルを抜いたら終了」としたいところです。そこらへん、うまくいく方法がないかなとTwitterで呟いたところ、ご紹介いただけたのがSDカードをリードオンリーでマウントする方法が書かれたサイトでした。(※2)
なるほど、その方法でいいのか。
参考先のサイトでは、X Window環境を立ち上げるために大変難しいことをしているようですが、こちらは最低限の動作しかさせていないので、やるべきことはかなり少なくて済むはず。(※3)
(※2)(※3) まだ十分な耐久テストを行えたわけではなく、本当にブチ切りに耐えられているのかは、今後継続的に検証していくことになるかなと考えています。というか、Raspberry Piは学習用の簡易なワンボードコンピュータなのですから、そもそも耐久テストとかの概念は合わないですね…。
- tmpfs(いわゆるRAMDISK)化のために編集した /etc/fstab を、さらに次のように修正(赤字の部分)します。
pi@raspberrypi5:~ $ sudo vi /etc/fstab
proc /proc proc defaults 0 0 PARTUUID=○○○○-01 /boot vfat ro 0 2 PARTUUID=○○○○-02 / ext4 ro 0 1 # a swapfile is not a swap partition, no line here # use dphys-swapfile swap[on|off] for that tmpfs /tmp tmpfs defaults,size=64m,noatime,mode=1777 0 0 tmpfs /var/tmp tmpfs defaults,size=16m,noatime,mode=1777 0 0 tmpfs /var/log tmpfs defaults,size=32m,noatime,mode=0755 0 0 tmpfs /var/lib/systemd tmpfs defaults,size=64m,noatime,mode=0755 0 0 - piユーザーにttyグループを追加します。piが/dev/ttyXデバイスを処理するために必要…とかいう話らしいですが、正直よくわからんです。
pi@raspberrypi5:~ $ sudo gpasswd -a pi tty
- 上記の続きです。/etc/rc.localの方にも修正(赤字の部分)を入れます。
pi@raspberrypi5:~ $ sudo vi /etc/rc.local
# add files for tmpfs mkdir -p /var/log/ConsoleKit mkdir -p /var/log/samba mkdir -p /var/log/fsck mkdir -p /var/log/apt mkdir -p /var/log/ntpstats chown root.ntp /var/log/ntpstats chown root.adm /var/log/samba touch /var/log/lastlog touch /var/log/wtmp touch /var/log/btmp chown root.utmp /var/log/lastlog chown root.utmp /var/log/wtmp chown root.utmp /var/log/btmp chmod g+rw /dev/tty? exit 0
(16) 今後、一時的にReadOnlyを解除したくなった時のためのコマンドを作成します。
pi@raspberrypi5:~ $ vi mountfs.sh
#!/bin/bash case "${1}" in rw) sudo mount -o remount,rw / echo "Filesystem mounted in READ-WRITE mode" ;; ro) sudo mount -o remount,ro / echo "Filesystem mounted in READ-ONLY mode" ;; *) if [ -n "$(mount | grep mmcblk0p2 | grep -o 'rw')" ] then echo "Filesystem is mounted in READ-WRITE mode" else echo "Filesystem is mounted in READ-ONLY mode" fi echo "Usage ${0} [rw|ro]" ;; esac
pi@raspberrypi5:~ $ chmod 744 mountfs.sh
microSDカード内の情報を簡単に更新したい場合に、一時的に書き込みを許可するためのシェルスクリプトです。sudo apt-get update -y;sudo apt-get upgrade -y;sudo apt-get dist-upgrade -y などでブートローダーを更新する必要が生じた場合、上記の「/」に加え「/boot」もrwでremountします。(sudo mount -o remount,rw /boot)
(17) mountfs.shを手動で簡単に打ち込めるように、エイリアス(省略化コマンドみたいな感じ)を作っておくといい感じです。
pi@raspberrypi5:~ $ vi .bashrc
: : alias mountfs='~/mountfs.sh' : :
なお、シェルスクリプト内ではエイリアスは使えません。
expand_aliasesオプションが必要だそうですが、まぁ、いらないでしょう。
今後は、次のコマンドを打ち込めば、一時的にReadOnlyが解除されます。
pi@raspberrypi5:~ $ mountfs rw Filesystem mounted in READ-WRITE mode
Raspberry Piを安全に再起動、または、次のコマンドを打ち込むと、再びReadOnly状態になります。
pi@raspberrypi5:~ $ mountfs ro Filesystem mounted in READ-ONLY mode
■マウスふるふるスクリプトの改修
(18) 本格的な利用にあたって
先ほど作成した rspi_mousefr.sh はテスト用なので、マウスカーソルは頻繁に&大きく移動しますが、実用としては、1分弱で1回の頻度で、小さめに動けばよいです。例えば次のような感じにすると、最小の揺れ幅になります。シェルスクリプトの変更後は、再起動するのがラクです。
pi@raspberrypi5:~ $ mountfs rw Filesystem mounted in READ-WRITE mode pi@raspberrypi5:~ $ vi rspi_mousefr.sh
#!/bin/sh # rootで動作していなければ終了 if [ `whoami` != "root" ]; then echo rootユーザーで実行してください。 exit 1 fi # 接続したPCに対し、マウスデバイスとして認識させる if [ ! -e /dev/hidg0 ]; then bash /home/pi/hid.sh fi # mousefrの動作(50秒に1回、マウスを左右に小さく動かす) # 動作させるタイミングで基板上のLEDを点滅させる while true do # マウスカーソルを右へ echo -ne "\0\x01\0" > /dev/hidg0 echo heartbeat > /sys/class/leds/led0/trigger /usr/bin/sleep 1 # マウスカーソルを左へ echo -ne "\0\xFF\0" > /dev/hidg0 echo actpwr > /sys/class/leds/led0/trigger /usr/bin/sleep 49 # 計画停止ファイル /tmp/stop が見つかればループを抜け終了 if [ -e /tmp/stop ]; then rm /tmp/stop exit 0 fi done
pi@raspberrypi5:~ $ sudo reboot
これでも、スクリーン セーバーへ/スリープモードへの移行は防げるのですが、すでにスクリーン セーバーが動いている場合に、それを解除できなかったりします。おそらく、最小の揺れ幅だと、ちょっとした振動によるものである可能性もあって、スクリーン セーバーを解除するほどではないと判断されてしまうのかもしれません。
また、マウスふるふる的には対象とはしていませんが、VDI接続のクライアントとか、Skypeとか、Teamsとかに対しても反応をさせたければ、もう少し振れ幅が大きい方が良いのかもしれません。
pi@raspberrypi5:~ $ mountfs rw Filesystem mounted in READ-WRITE mode pi@raspberrypi5:~ $ vi rspi_mousefr.sh
#!/bin/sh # rootで動作していなければ終了 if [ `whoami` != "root" ]; then echo rootユーザーで実行してください。 exit 1 fi # 接続したPCに対し、マウスデバイスとして認識させる if [ ! -e /dev/hidg0 ]; then bash /home/pi/hid.sh fi # mousefrの動作(50秒に1回、マウスを左右にちょっと大きめに動かす) # 動作させるタイミングで基板上のLEDを点滅させる while true do # マウスカーソルを右へ echo -ne "\0\x08\0" > /dev/hidg0 echo heartbeat > /sys/class/leds/led0/trigger /usr/bin/sleep 1 # マウスカーソルを左へ echo -ne "\0\xF8\0" > /dev/hidg0 echo actpwr > /sys/class/leds/led0/trigger /usr/bin/sleep 49 # 計画停止ファイル /tmp/stop が見つかればループを抜け終了 if [ -e /tmp/stop ]; then rm /tmp/stop exit 0 fi done
pi@raspberrypi5:~ $ sudo reboot
(※1) 本当はRaspberry Pi Picoに魅力を感じて調べていたのですが、その過程でZeroでもPCと繋げばUSB機器として認識できるっぽいと知ったことと、Zeroなら他のラズパイで培った知識やLinuxの知識を応用して容易に実現できそうだと思い至りました。実際、構想したのは5月3日、本記事執筆は5月6日なので、実質4日間ほどで実現できました。ですが、Picoの方でも同じことはやってみたいと思っています。Picoはお急ぎ便で注文し、5月8日には自宅に到着予定です。
参考:
- Raspberry PiにSSH接続できるまで (Raspi Zeroを購入) - たねやつの木
- RapberryPi Zero WをUSBマウスに - TomoSoft
- How to build a web kiosk with Raspberry Pi and make the SD read-only.
- Raspberry Pi Zero でLチカ(オンボードLED編)
関連(ラズピコの話、ガワの話):
- 管理人のひとこと 2021/05/09 前々から気になってた、Raspberry Pi ZeroってFRISKのケースに入るって本当かな。ずっと試したかった
- 管理人のひとこと 2021/05/13 Raspberry Pi Picoを買ったけど、あまり上手くいかず。上手くいかないうちにだんだん熱が冷めて…
- 管理人のひとこと 2021/05/14 最後にこれだけは試しておきたい!Raspberry Pi PicoをMINTIAケースに入れられるか?
- 管理人のひとこと 2021/05/15 ちゃんとやり遂げておきたい。Raspberry Pi ZeroをFRISKケースに入れる件
- 管理人のふたこと 2021年11月 Raspberry Pi Zero WをPCに繋ぎ、ボタン(タクトスイッチ)を押したら「管」の文字を入力する仕組みを作りたい
- 管理人のひとこと 2023/08/11 Raspberry Pi Pico+MINTIAケースでマウスを揺らしてみる
本ページへは、自己責任の範囲内であれば自由にリンクしていただいて構いません。
本ページに掲載されている内容は、自由にお使いいただいて構いませんが、必ずしも筆者が内容を保証するものではありませんので、ご利用に際しては自己の責任においてお使いいただきますよう、お願いいたします。
このページのURLやアンカーは、サーバ運営・サイト運営・ページ運営・その他の都合により無告知で一時的あるいは永遠に消滅したり、変更したりする可能性がありますので、あらかじめご了承下さい。