ブログ内検索

プログラミング教材開発
大阪府高槻市原地区で肥料教室を開いています
検索キーワード:「apt-get」
 

PHPで形態素解析エンジンのMaCabを使用する為の手順のメモ

/** Geminiが自動生成した概要 **/
Ubuntu 19.10環境でPHPからMeCab形態素解析エンジンを使用する手順をまとめたメモです。MeCab、辞書(mecab-ipadic-utf8, mecab-ipadic-neologd)、php-mecabをインストールし、PHPからMeCabを呼び出すテストコードを実行しています。 php-mecabインストールでは、phpize、configure、make、installを行い、mecab.iniを作成、ApacheとCLIで有効化しました。テストコードは"今日は晴天なり"を解析し、結果を配列で出力しています。ブラウザと端末の両方から実行し、期待通りの解析結果が得られました。

 

UbuntuでさくらのVPS for Windows Serverを使用する

/** Geminiが自動生成した概要 **/
Ubuntu環境で、Remminaを使ってさくらのVPS for Windows Serverに接続する方法を解説。Remminaをインストール後、起動し、新規プロファイルを作成。VPSの接続情報を入力する際、色数をGFX RFX (32 bpp)に変更することが重要。標準の色数のままだと接続エラーとなる。設定保存後、接続ボタンをクリックすることで、Windows Serverのデスクトップ環境にアクセスできる。

 

Go言語でKVSのRedisを使ってみる

/** Geminiが自動生成した概要 **/
Go言語で複数サーバ間のセッション共有を実現するため、KVSのRedisを導入した。UbuntuにRedisをインストール後、Go言語でRedigoパッケージを用いてRedisに接続。`conn.Do("コマンド", "キー", "バリュー")`でRedisを操作し、SETで値を格納、GETで取得、DELで削除できることを確認した。ただし、削除済みキーを取得するとGo側ではエラーが発生する点に注意が必要。Redisを用いることで複数サーバ間のデータ共有が可能となる。

 

Go言語でQtを扱ってみる on Ubuntu

/** Geminiが自動生成した概要 **/
Ubuntu 18.04にGo言語とQtをインストールし、GoでQtアプリケーションを開発する手順を記録した記事です。Go 1.11、Qt 5.11.1をインストールし、QtのサンプルWebブラウザの実行を確認後、GoのQtバインディングパッケージ`github.com/therecipe/qt`をインストールしました。`qtsetup`コマンドでパッケージの準備中に問題が発生しましたが、`generate`終了時点で中断し、サンプルプログラムを実行したところ、正常に動作することを確認しました。

 

UbuntuでAndroid Debug Bridgeを使ってみる

/** Geminiが自動生成した概要 **/
Ubuntu 18.04でAndroid Debug Bridge (ADB) を使用してAndroidアプリをデプロイする方法を紹介しています。ADBをインストール後、Go Mobileのサンプルコードをエミュレータと実機(ZTE Blade V580, Android 5.1)にデプロイしました。エミュレータではバージョン不一致でアプリは起動しませんでしたが、実機では開発者モードを有効化し、USBデバッグをONにすることで、`gomobile install`コマンドでアプリのデプロイと起動に成功しました。

 

UbuntuにAndroidのエミュレータを入れる

/** Geminiが自動生成した概要 **/
Ubuntu 18.04にAndroidエミュレータを導入する方法。必要なライブラリをインストール後、Android Studioをダウンロード、インストールし、パスを通す。次に、KVM関連のライブラリをインストールし、ユーザーにKVMの使用権限を与える。Android Studioを再起動し、AVDマネージャーから好みのエミュレータを作成、実行することで、開発機上でAndroidアプリの動作確認が可能になる。

 

Go言語のGo MobileでAndroidアプリを開発してみる

/** Geminiが自動生成した概要 **/
Ubuntu 18.04 でGo言語を用いてAndroidアプリ開発を行う手順を解説。Go Mobileを利用し、サンプルコードをAndroid端末で実行するまでを扱う。 開発環境としてJava8、Android NDK r16b、Go 1.10.3を導入。 zshを使用しているため、`.zshrc` にパスを設定。 Go Mobileのインストールと初期化後、サンプルコード`golang.org/x/mobile/example/basic`を取得し、`go run`で動作確認。 `gomobile build`コマンドでapkファイルを生成し、Dropbox経由でAndroid端末に転送、インストール、実行。 端末の設定で「提供元不明のアプリ」を許可する必要がある。

 

Ubuntuでsendmailをインストールする

/** Geminiが自動生成した概要 **/
UbuntuサーバーにSendmailをインストールする際、SSL設定で処理が停止する問題が発生。解決策として、手動でSSL証明書関連ファイルを作成し、所有権とパーミッションを設定後、`dpkg --configure -a`コマンドでインストールを完了させた。その後、SOY CMS/Shopのテスト送信機能を用いて、Sendmail経由のメール送受信が正常に行えることを確認した。最後に、停止中のジョブをkillするかサーバー再起動の必要性について言及している。

 

さくらVPSにJenkinsを入れて、Selenium + php-webdriverを動かせるようにする

/** Geminiが自動生成した概要 **/
さくらVPS(Ubuntu 16.04)にJenkinsを導入し、Seleniumとphp-webdriverでUIテストを自動化する方法を紹介。Jenkinsインストール後、初期設定、ジョブ作成、Git連携、ビルドトリガー設定、シェルスクリプト実行設定、メール通知設定を行い、Apacheの設定を調整してテスト実行環境を構築。15分毎にGitリポジトリをポーリングし、変更があれば自動的にテストを実行、結果をメールで通知。これにより、月700円のVPS費用で継続的なUIテストを実現。

 

さくらVPS上でSeleniumとphp-webdriverを利用する

/** Geminiが自動生成した概要 **/
さくらVPS(Ubuntu 16.04)にSeleniumとphp-webdriverによるUIテスト環境を構築する方法。Selenium実行には仮想デスクトップ(Xvfb)とChromiumが必要で、手順はApache/PHP設定、Java8、Selenium、Xvfb、Chromium、ChromeDriverインストール、そしてSelenium起動スクリプト(load.sh)作成。load.shはXvfbとSeleniumを同時に起動し、ブラウザは仮想デスクトップ上で動作する。動作確認は http://(VPSのIPアドレス):4444 で行う。Jenkinsの設定とload.shの自動起動設定は今後の課題。

 

Dropboxで同期しないフォルダを設定する

/** Geminiが自動生成した概要 **/
Dropboxの有料プランで、既に280GB使用しているアカウントに、容量20GBのVPSサーバにある4GBのサイトをバックアップする必要があった。Dropboxの容量がサーバ容量を大きく超えていたため、同期でサーバ容量が逼迫する懸念があった。しかし、Dropboxの「exclude add」コマンドで同期しないフォルダを指定し、不要なフォルダを逐次除外することで、サーバ容量の問題を回避できた。最終的に、バックアップスクリプトを作成しcronに登録することで、Dropboxを使ったサイトバックアップを実現した。

 

Node.jsとSocket.IOでリアルタイムのチャットアプリを作ってみる

/** Geminiが自動生成した概要 **/
Node.jsとSocket.IOを用いたチャットアプリ構築後、Let's Encryptで常時SSL化する方法を解説。自己署名証明書ではブラウザ警告が出るため、無料のLet's Encryptを利用。Certbotによる証明書取得手順、Nginxの設定変更(SSL設定追加、httpトラフィックのhttpsリダイレクト)を説明。 Socket.IOのサーバー側コード修正では、httpsオプションを追加し、取得した証明書と秘密鍵を指定。これにより、チャットアプリがセキュアなhttps接続で利用可能になる。

 

Apache2.4.27の標準設定ではHTTP/2が使用できなくなったのでその対応

/** Geminiが自動生成した概要 **/
Apache 2.4.27にアップグレード後、prefork設定ではHTTP/2が使えなくなったため、workerに変更した事例。preforkではHTTP/2が無効化される仕様変更が原因。Ubuntu 16.04環境で、PHPをFastCGI(php7.0-fpm)にし、`a2dismod`と`a2enmod`コマンドでMPMをworkerに切り替えた。`apachectl -V`で確認後、ブラウザでHTTP/2が有効化されたことを確認。ただし、画像はキャッシュの影響でHTTP/1.1だったが、キャッシュクリアで解決した。

 

ApacheサーバでBrotliを使用してみた

/** Geminiが自動生成した概要 **/
常時SSL化はSEO上効果がある。GoogleはHTTPSをランキングシグナルとして使用しており、サイトのセキュリティ向上はユーザー体験の向上に繋がるため、間接的にSEO効果が見込める。ただし、HTTPS化自体が劇的なランキング上昇をもたらすわけではない。相対的にHTTPサイトより優位になる程度の影響と考えられる。また、サイト表示速度の向上も期待できるが、適切な設定が必要。常時SSL化は必須事項となりつつあり、SEO対策としてだけでなく、セキュリティ向上とユーザーへの信頼感醸成という観点からも重要である。

 

Googleの圧縮アルゴリズムBrotliを試してみた

/** Geminiが自動生成した概要 **/
Brotli圧縮を試した結果、gzipよりも高い圧縮率を実現できることが分かり、サーバーでの利用を検討。Ubuntu 18.04ではaptでbrotliをインストール可能。画像ファイルの圧縮テストでは、オリジナル870.3kBに対し、Brotliは856.8kB、gzipは861.0kBと、Brotliが僅かに優れていた。圧縮コマンドは`brotli 元ファイル -o 圧縮ファイル`、解凍は`brotli -d 圧縮ファイル -o 元ファイル`。次の記事では、ApacheサーバーでBrotliを利用する方法を解説する。

 

FCrackZipでzipファイルに設定されたパスワードを調べる

/** Geminiが自動生成した概要 **/
Ubuntu 17.04環境で、パスワードを忘れたzipファイルをfcrackzipを用いて解凍する方法を紹介。fcrackzipをインストール後、パスワード付きzipファイルを作成し、`fcrackzip -l 4 -u hoge.zip`コマンドでパスワードを解析する。`-l`オプションで解析する文字数を指定し、`-u`オプションで解凍を試みることでパスワード「hoge」を発見。解析時間は文字数に比例するため、パスワード設定時は文字数が重要。記事では、SOY CMSへの総当り攻撃やサイバー攻撃増加についても関連付けて言及している。

 

FFmpegとAudacityで動画の音声の調整に挑戦!

/** Geminiが自動生成した概要 **/
動画編集ソフトFFmpegとAudacityを使って、動画の音声調整に挑戦した記録。元の動画の音量が小さく、ノイズが多かったため、Audacityで音量増幅とノイズ除去を実施。FFmpegで動画と音声の結合を行い、改善された動画を作成した。具体的には、Audacityで波形を見ながら音量を30dB増幅し、ノイズプロファイルを採取してノイズ除去を2回行った。結果、「サー」というノイズが消え、以前より聞き取りやすい音声になった。

 

PHPExcelを使ってみた

/** Geminiが自動生成した概要 **/
PHPExcelライブラリを使ってExcelファイルからデータ抽出する方法を紹介。Ubuntu 17.04、PHP 7.1.5環境で、php7.1-xml、php7.1-gd、php7.1-zipをインストール後、PHPExcelをダウンロード。サンプルxlsファイルからデータを読み込むPHPコードを掲載し、セル番号と値を出力する例を示している。コードは拡張子による読み込み方法の切り替え、複数シートへの対応、行とセルのイテレータによる値の取得を実装。出力結果の画像も掲載。

 

NW.jsを試す

/** Geminiが自動生成した概要 **/
中学生向けプログラミング教室で、JavaScriptでアプリ制作をする生徒が出てきたため、デスクトップアプリ作成の選択肢としてNW.jsをUbuntuで試した。npmでnw.jsをインストール後、index.htmlとpackage.jsonを作成し、`npm start`で実行した結果、"Hello World!"とNode.jsのバージョンが表示された。ランチャーに登録したNW.jsアイコンからも同じ画面が起動できた。しかし、端末操作が必要なため、中学生には敷居が高いと判断し、他の方法を検討することにした。

 

端末でupgradeの際の差異の確認で表示を終了する

/** Geminiが自動生成した概要 **/
apt upgrade中に設定ファイルの変更差分を確認したい時、差分表示の最後に(END)と表示され終了方法が分からなくなることがある。その場合は「q」を押せば終了する。EscやCtrl+C、Ctrl+Zでは終了しないので注意。

 

Muninで監視用サーバを構築する2

/** Geminiが自動生成した概要 **/
外部サービス監視のため、対象サーバ(192.168.80.80)にmunin-nodeをインストールし、監視サーバ(192.168.100.120)のIPを許可するよう設定ファイルを編集。ファイアウォールで4949ポートを開放する。次に、監視サーバ側でmunin.confに監視対象のホスト名(hoge.com)とIPアドレスを追記。Apacheを再起動後、Munin画面に新しいリンクが表示されれば設定完了。

 

Muninで監視用サーバを構築する1

/** Geminiが自動生成した概要 **/
Webサービスの利用者増加に備え、Ubuntu 16.04サーバにMuninを導入して監視環境を構築した。Apacheのインストールと設定、muninとmunin-nodeのインストール後、アクセス制限を解除し、Basic認証を設定した。最後にファイアウォールでポート80, 443, 4949を開放し、セキュリティを強化した。今回は監視サーバ自体の設定を行い、次回は監視対象サーバの設定を行う。

 

Dropboxにバックアップする時はパスワード付きzipにしておく

/** Geminiが自動生成した概要 **/
Dropboxへのバックアップ時に、個人情報を含むデータベースをzip圧縮する際のセキュリティ強化策として、パスワード付きzipファイルの作成方法を紹介している。 zipコマンドの-eオプションで暗号化が可能だが、対話式でパスワード入力を求められるため、crontabでの自動化にはexpectコマンドを使用する必要がある。サンプルスクリプトでは、expectでパスワード入力を自動化し、指定ディレクトリをパスワード付きzipファイルとしてDropboxにバックアップする方法を示している。 スクリプトの実行例として、Dropboxへのアップロードとダウンロード後の解凍時にパスワードが要求されることを確認し、セキュリティが向上したことを示している。さらに、パスワードの強度を高める方法や都度生成する仕組みの必要性にも言及している。

 

SOY CMSのサイトのバックアップをDropboxで行う

/** Geminiが自動生成した概要 **/
SOY CMSサイトのDropboxバックアップ方法を紹介。まずDropboxアカウントを作成し、サーバーに64ビット版CLI版Dropboxをインストール。サーバをDropboxアカウントにリンク後、バックアップスクリプト(dbbackup.sh)を作成し、cronで毎朝3時にサイトディレクトリをzip圧縮してDropboxへ同期させるよう設定。自動起動設定としてcrontabの@rebootを利用。debファイル経由のインストール方法も追記。再起動しない場合はdropbox start -iコマンドを試す。パスワード付きzip化などの関連記事へのリンクも掲載。

 

MySQLのバックアップスクリプトを作成してみた

/** Geminiが自動生成した概要 **/
CPIの仮想専用サーバで開発中に、無料の50GBバックアップサーバを利用してMySQLのデータベースをバックアップするシェルスクリプトを作成した。スクリプトは`mysqldump`で全データベースをダンプし、gzipで圧縮、`scp`と`expect`を用いてパスワード認証でバックアップサーバに転送する。`expect`はscpのパスワード入力を自動化し、cronでの実行を可能にする。古いバックアップファイルの削除処理は未実装。`chmod +x`で実行権限を与え、cronで毎日実行するように設定。最後にバックアップサーバにbackupディレクトリを作成し、動作確認を行った。

 

SOY CMSの画像のリサイズでJPEGのロスレス圧縮を追加した

/** Geminiが自動生成した概要 **/
SOY CMSでサーバサイド画像リサイズを実装後、PageSpeed Insightsで「ロスレス圧縮で容量削減可能」と指摘されたため、jpegoptimを導入した。Ubuntuに`sudo apt-get install jpegoptim`でインストール後、`/CMSインストールディレクトリ/common/im.inc.php`の`imagejpeg`実行後に`jpegoptim $savepath`を実行するよう改修。これにより、ロスレス圧縮の指摘が解消され、PageSpeed Insightsのモバイルスコアが93から96に向上した。変更コードはフォーラムで配布されている。

 

当サイトをHTTP/2対応して表示の爆速化してみた

/** Geminiが自動生成した概要 **/
Let's Encryptの証明書更新を自動化するため、CertBotを導入した。以前の方法は使えなくなったため、公式サイトの手順に従い、snapd経由でCertBotをインストール。`certbot certonly --apache`コマンドで証明書を取得し、Apacheの設定を自動更新。 cronで`certbot renew`を定期実行することで自動更新を実現。`--dry-run`オプションでテストも可能。以前の`letsencrypt-auto`コマンドは非推奨となったため、CertBotへの移行が必須。

 

apt-get upgradeで保留と表示された時

/** Geminiが自動生成した概要 **/
Ubuntuで`apt-get upgrade`を実行した際、「以下のパッケージは保留されます」と表示され、アップグレードが保留される場合がある。保留されたパッケージ(例: linux-generic)を`sudo apt-get install パッケージ名`で個別にインストール後、再度`apt-get update`と`apt-get upgrade`を実行すると、保留が解消されアップグレードが正常に完了する。

 

Terminator上でEmacsを起動すればxclipが使えるのか?

/** Geminiが自動生成した概要 **/
Emacsでxclipを使いたいが、tmuxではコピーモードの仕様でうまくいかない。そこで、itermのような端末を探し、terminatorをインストール。分割もでき、Emacsからシステムのクリップボードへコピー、貼り付けが期待通りに動作した。さらに、terminatorの別ウィンドウのEmacs間でもコピー、貼り付けができた。結果、開発環境をTerminator + Zsh + Emacsにすることに決定。

 

Emacsでクリップボードを使ってコピペしたい

/** Geminiが自動生成した概要 **/
Emacsでクリップボードの共有設定をしたが、GUI環境では動作するものの、端末(emacs -nw)では動作しない問題に直面。xclipをインストールし設定を追加することで端末上でもコピペが可能になった。しかし、tmux上でEmacsを起動した場合はxclipが機能せず、更なる設定が必要な状況に陥っている。

 

SSHで外部のネットワークからログインできるようにする

/** Geminiが自動生成した概要 **/
Sambaサーバに外部からSSH接続できるよう設定した手順の記録。まずSambaサーバにSSHをインストールし、プライベートIPアドレス(192.168.11.8)を設定、ルーターのIPアドレスをゲートウェイに設定した。次に外部からのSSH接続のため、rootログインを禁止し、無線LANルーターでポートフォワーディング(外部ポート71823→内部ポート22)を設定。外部IPアドレス(例:127.0.0.1)へポート71823を指定してSSH接続を確認した。パスワード認証はセキュリティ的に不安なので、次回は鍵認証を設定予定。

 

Goで運営しているサイトでLet's Encryptを利用してみた

/** Geminiが自動生成した概要 **/
Go製WebアプリをHTTP/2で運用するために、Let's EncryptでSSL証明書を取得した。取得手順は、letsencryptコマンドで証明書を作成し、Goのコードに証明書のパスを指定するだけ。`http.ListenAndServe`を`http.ListenAndServeTLS`に変更し、fullchain.pemとprivkey.pemのパスを設定することでHTTPS化。証明書取得後、サイトはHTTP/2で動作するようになった。

 

さくらのVPS + Apache2.4のサーバでSSL対応してみた

/** Geminiが自動生成した概要 **/
さくらVPS上のApache2.4でSSL証明書を設定する方法を解説した記事です。opensslを用いて秘密鍵とCSRを作成し、認証局に提出、発行された証明書と中間CA証明書を所定のディレクトリに配置、Apacheの設定ファイルを編集してSSLを有効化します。設定ファイルでは、証明書ファイル、秘密鍵ファイル、中間CA証明書のパスを指定します。最後にApacheを再起動し、httpsでアクセスしてSSL設定を確認します。記事ではLet's Encryptを使った簡便な設定方法への言及もあります。

 

デジカメ内の写真を間違えて消してしまった時はPhotoRec!

/** Geminiが自動生成した概要 **/
デジカメのSDカードから外付けHDDへ写真移動中、エラーでデータが消失。SDカード側も削除済みで焦ったが、PhotoRecというオープンソースの復元アプリを発見。Ubuntuにインストール(sudo apt-get install testdisk)後、sudo photorecを実行。SDカードを選択し、ホームディレクトリに復元先を設定。あっという間にデータが復元され、事なきを得た。

 

さくらのVPSにGoの環境を構築してみた

/** Geminiが自動生成した概要 **/
さくらのVPSにGo環境を構築し、アプリケーションサーバを起動した際のメモ。UbuntuにGit, Go, MySQLをインストールし、アプリをビルド、実行した。ポート80での起動はroot権限が必要だったため、`sudo ./app -addr=:80`で実行。バックグラウンド実行は`&`を追加し、停止は`kill -KILL プロセスID`を使用。セキュリティ設定は別途必要。

 

使わなくなったパソコンにSambaを入れて、ファイル共有用のサーバを構築してみた

/** Geminiが自動生成した概要 **/
使わなくなったWindows7マシンにUbuntuをインストールし、Sambaでファイル共有サーバーを構築する方法。 手順は、Ubuntuインストール後、端末でSambaをインストールし、共有フォルダ`/home/share`を作成、パーミッションを設定。`/etc/samba/smb.conf`を編集し、ゲストアクセスを許可する設定を追加。Sambaを再起動し、ファイアウォールで必要なポートを開放。自動起動設定も実施。 Windowsからは、ネットワークドライブの割り当て機能を使い、`\\SambaサーバーのIPアドレス\Share`でアクセス可能。`Share`部分はsmb.confで設定した共有名。

 

Dockerの他コンテナにあるSOY CMSからMySQLのコンテナにアクセスしてみる

/** Geminiが自動生成した概要 **/
Docker Composeを用いて、PHP7/ApacheとMySQLのコンテナを連携させ、SOY CMSを動作させる方法を解説。MySQLコンテナでは`bind-address`を指定し、PHPコンテナでは`pdo_mysql`拡張をインストールする必要がある。データベース接続設定では、MySQLコンテナの内部IPアドレスとポート(3306)を指定。SOY CMSのデータベース設定ファイル(mysql.php)を適切に編集することで、コンテナ間のデータベースアクセスを実現。記事では、`docker-compose.yml`の設定例や、コンテナ内でのデータベース作成手順、SOY CMSの初期設定画面へのアクセス方法などを示している。また、PHP7環境でのSOY CMS動作に関する修正はGitHubで公開されている。

 

さくらのVPSにPHP7を入れてSOY CMSを動かしてみた

/** Geminiが自動生成した概要 **/
さくらのVPSにPHP7をインストールし、SOY CMSを動かす手順を解説した記事。共有サーバーの表示速度低下を改善するため、VPSに移行。手順は既存記事を参考に、PHPインストール部分を更新。 Apache2.4インストール後、Ondřej Surý氏のPPAを用いてPHP7.0を導入し、関連モジュールをインストール、Apache2の設定を行った。PHP7でSOY CMSを動かすにはファイル修正が必要で、修正済みパッケージはsaitodev.co/soycms/からダウンロード可能。

 

Dockerで構築したPHP7の環境でSOY CMSを動かしてみる

/** Geminiが自動生成した概要 **/
Docker上のPHP7環境でSOY CMSを動かす手順を解説。前回はmbstringが不足しエラーが発生したが、Dockerfileに`docker-php-ext-install mbstring`を追加し解決。elfinderは未対応だが、その他は動作し爆速に。Dockerfileとphp.iniの設定例、コンテナ起動コマンドも紹介。修正版SOY CMSはGitHubで公開中。

 

DockerでPHP7の環境を構築してみる

/** Geminiが自動生成した概要 **/
Dockerを使ってPHP7環境を構築する方法を紹介しています。UbuntuへのDockerインストール手順、Dockerfileの作成、コンテナイメージのビルド、コンテナの起動、PHPバージョン確認、ブラウザでのphpinfo表示確認までを解説。Dockerを使うことで、簡単にPHP7環境を構築し、動作確認できることを示しています。ルートディレクトリ操作の課題は残っていますが、Apache設定などを省略できる手軽さがメリットです。

 

さくらのVPSでSOY CMSを動かした時のメモ

/** Geminiが自動生成した概要 **/
Apacheサーバのバージョン表示はセキュリティリスクとなるため、非表示にすることが推奨されています。本記事では、Apacheの設定ファイル`httpd.conf`または`apache2.conf`を編集することで、バージョン情報を隠す方法を解説しています。具体的には、`ServerTokens`ディレクティブを`Prod`に設定することで、公開されるサーバ情報を最小限に抑えられます。また、`ServerSignature`ディレクティブを`Off`にすることで、エラーページなどからサーバのバージョン情報が削除されます。これらの設定変更後、Apacheを再起動することで変更が反映されます。さらに、セキュリティ対策としてmod_securityなどのセキュリティモジュール導入も推奨しています。

おすすめの検索キーワード
おすすめの記事

Powered by SOY CMS   ↑トップへ