ブログ内検索

micro:bitページ
とにかく速いブログサイトを目指す

カテゴリー : Google

 

Google TV StreamerでSteam Linkを試してみた

/** Geminiが自動生成した概要 **/
Google TV StreamerでSteam Linkを試した結果、Chromecast with Google TVであったカクつきはメモリ増強により解消された。しかし、Raspberry Pi 4B 8Gと比較するとまだ動きが荒く、更なる設定調整が必要である。 動作改善にはメモリ増強が有効であることが示唆されたが、Raspberry Pi 4B 8Gとの性能差の原因はメモリ以外の部分にもある可能性がある。

 

ChromecastでSteam Linkを試してみた

/** Geminiが自動生成した概要 **/
著者は、Chromecast with Google TVでSteam Linkを使ってゲームができるか検証しました。しかし、ゲーム動作がカクカクしてしまい、原因を調査。ネットワーク速度を向上させるためにイーサネットアダプターを導入しましたが改善されず、Chromecastのスペック不足が原因と推測しました。そこでRaspberry Pi 4Bで試したところ、スムーズに動作。Chromecastのメモリ容量が影響している可能性を指摘し、他のスペックのマシンでの検証を希望しています。追記として、Chromecastの後継機であるGoogle TV Streamerでも同様の検証を行った記事へのリンクが掲載されています。

 

golangのunsafeパッケージで配列の操作をしてみる

/** Geminiが自動生成した概要 **/
## プログラミング教育で注目すべきはARM + Debian + Pythonであるはずだ**要約**近年、プログラミング教育の重要性が高まる一方で、環境構築の難しさや高額な機材が課題となっています。そこで注目すべきは、安価で入手しやすい「Raspberry Pi」を教材として活用することです。Raspberry PiはARMアーキテクチャを採用した小型コンピュータで、DebianベースのOSが動作します。Pythonは初学者にも扱いやすい言語として人気があり、Raspberry Piとの相性も抜群です。Raspberry PiとPythonを組み合わせることで、電子工作やIoTなど、実用的で興味深い教材を開発できます。さらに、Linuxやオープンソースの文化に触れることで、生徒の技術的な興味関心をさらに広げることが期待できます。

 

SOY ShopのSign In With Googleプラグインでボタンをカスタマイズする

/** Geminiが自動生成した概要 **/
SOY ShopのSign In With Googleプラグインのボタンカスタマイズ方法について解説。Googleが提供するジェネレータを使用し、クライアントID、Data Context、ID token nonce、Callback functionを設定。Nextボタンをクリック後、Enable Sign in with Google buttonをチェックし、ボタンデザインを設定後、Get codeボタンを押下。生成されたHTMLをプラグイン詳細画面に貼り付けて更新することでカスタマイズ完了。

 

SOY ShopのGoogle Sign-In for WebsitesプラグインをSign In With Googleに変更しました

/** Geminiが自動生成した概要 **/
SOY ShopのGoogleログインプラグインが、Google Sign-In for WebsitesからSign In With Googleにアップデートされました。変更に伴い、HTMLタグやスクリプトを修正する必要があります。 以前は`googleUser.getBasicProfile()`でユーザー情報が取得できていましたが、現在はJWTが返却されるため、Base64デコードが必要です。`parseJwt`関数でJWTをデコードし、`json.email`でメールアドレスを取得します。 詳細はプラグイン詳細画面とサイト(saitodev.co/soycms/soyshop/)を参照してください。

 

ARM版ChromebookにDropboxをインストールする

/** Geminiが自動生成した概要 **/
ARM版ChromebookでLinuxアプリのDropboxを使うには、.debパッケージが使えないためDbxfsを利用する。pip3でDbxfsをインストール後、Dropboxフォルダを作成し、dbxfsコマンドを実行。表示されるURLにアクセスし、Dropboxにログインして認証コードを取得、端末に入力する。パスフレーズを設定すれば、Linuxファイル配下でDropboxのファイルが操作可能になる。Android版DropboxはChromebookのFilesのLinux共有に対応していないため、この方法が必要。

 

ChromebookのLinuxアプリで日本語入力をできるようにする

/** Geminiが自動生成した概要 **/
ChromebookのLinuxアプリで日本語入力をするために、MozcとFcitxをインストール・設定する方法を解説。locale設定後、MozcとFcitxをインストールし、設定ファイルを編集してFcitxを自動起動するように設定。fcitx-configtoolでMozcを追加し、geditで日本語入力を確認。geditでは挙動が怪しかったが、他のアプリでは正常に動作。Javaアプリでも日本語入力可能になった。cros-imを使う方法もあるが、geditでは漢字変換できない問題がある。

 

【SEO対策】Google Analyticsのスクリプトをページ読み込み直後にする

/** Geminiが自動生成した概要 **/
HTMLScriptElement は `<script>` タグを制御するインターフェース。`src` 属性で外部スクリプトを読み込み、`async` 属性を設定すると解析を妨げずに非同期でスクリプトを実行、`defer` 属性はHTML解析完了後に実行、`type` 属性でスクリプト言語を指定。`text` 属性に直接コードを記述も可能。`onload` イベントで読み込み完了を検知、`onerror` でエラー処理。`crossorigin` 属性はCORSリクエストを制御。`integrity` 属性はSubresource Integrity を使用し、読み込んだスクリプトの整合性を検証。`referrerpolicy` はリファラーヘッダーを制御。`nomodule` はES Modulesをサポートしないブラウザでスクリプトを実行。

 

郵便番号を入力したら半径3km内のすべての町名を取得する

/** Geminiが自動生成した概要 **/
Google Geocoding APIを用いて、指定住所(安岡寺)から半径3km以内の町名を取得する方法を検証した。APIで中心座標を取得後、緯度経度を0.01(約1km)ずつずらした地点の逆ジオコーディングを繰り返し、町名を収集した。しかし、1kmグリッドでは範囲内の全町名を網羅できず、グリッドを細かくするとAPI使用回数が増加する問題点が残った。より効率的な方法の検討が必要。

 

さくらのメールボックスからのメールをGmailで受信した際の?のアイコンを回避

/** Geminiが自動生成した概要 **/
さくらのメールボックスからGmailへメール送信時、送信元認証がされていないため「?」アイコンが表示される問題を解決する方法。お名前.comで取得したドメインのDNS設定で、さくらのメールボックスのホスト名を用いてSPFレコード `v=spf1 a:ホスト名 mx ~all` をTXTレコードとして追加する。設定後、mxtoolbox.comでSPFレコードを確認し、Gmailで受信したメールのアイコンが「?」から人物アイコンに変われば成功。

 

gRPC for PHPのインストール

/** Geminiが自動生成した概要 **/
この記事はUbuntu 19.10環境でGoogle Ads APIを使用するためのgRPC for PHPのインストール手順を解説しています。PEAR/PECL、Composerをインストール後、`pecl install grpc`、`pecl install protobuf`コマンドでgRPCとprotobufをインストールします。その後、`/etc/php/7.4/cli/php.ini`と`/etc/php/7.4/fpm/php.ini`両方に`extension=grpc.so`と`extension=protobuf.so`を追加し、`phpinfo()`や`php -m`でインストールを確認します。記事ではComposerのインストール手順も解説していますが、gRPCのインストール自体はComposerを使わずPECL経由で行っています。

 

Google AdsのMCCアカウントでキーワードプランナーを無料で使えるようにするまで

/** Geminiが自動生成した概要 **/
Google Ads APIを利用するにはMCCアカウントが必要で、キーワードプランナーを無料で使う方法を解説。MCCアカウント作成後、キーワードプランナーは有効な広告アカウントがないため使えない。そこで、エキスパートモードで「キャンペーンなしでアカウントを作成」し、生成されたお客様IDをメモ。MCCアカウントに戻り、サブアカウント設定で「既存のアカウントをリンク」し、お客様IDを入力してリクエストを送信、承認する。これでMCCアカウントでキーワードプランナーが無料で使えるようになる。

 

PHPのexec関数でセッションの値の引き継ぎに苦戦した時のメモ

/** Geminiが自動生成した概要 **/
Amazon Linux 2のLAMP環境で、PHPの`exec`関数を使ってGoogle Analytics APIにアクセスする際にセッションの引き継ぎに失敗した。`exec`で実行した`cmd.php`内で`session_start()`してもセッション情報が取得できなかった。調査の結果、`cmd.php`内では`session_save_path()`の戻り値が空文字列になっていた。`session_save_path("/var/lib/php/session");`を`session_start()`前に追加することでセッション情報が取得できるようになり、APIアクセスも成功した。`php.ini`の`session.save_path`の設定が原因と考えられるが、未検証。

 

Ubuntu19.10でGoogle Photoでデジカメの画像のアップロードがエラーになる時の対応

/** Geminiが自動生成した概要 **/
Ubuntu 19.10でGoogleフォトにUSB接続のデジカメ画像をアップロードしようとしたら、「Permission denied」エラーが発生。原因はChromiumブラウザの設定でリムーバブルメディアへのアクセスが許可されていなかったため。UbuntuソフトウェアからChromiumの詳細設定を開き、「リムーバブルストレージデバイスのファイルの読み取り/書き込み」を有効化することで解決。

 

Google Analytics APIの承認で苦戦したので、承認されるまでの流れをまとめてみた

/** Geminiが自動生成した概要 **/
Google Analytics APIの承認取得に苦労した著者が、その過程を詳述。OAuth同意画面の設定から始まり、Googleからの度重なるメールでの指摘に対応していく。 ホームページ、プライバシーポリシーの設置、アプリ操作動画の提出を求められ、動画はクライアントIDの表示や言語設定など細かい指示に従い作成し直した。最終的に承認を得るまで、動画の翻訳やスコープ設定の不備など、多くの修正を余儀なくされた。

 

SOY InquiryでGoogleのreCAPTCHA v3に対応しました

/** Geminiが自動生成した概要 **/
SOY InquiryがGoogle reCAPTCHA v3に対応しました。reCAPTCHA v3は、ユーザーの行動を分析してボットを判別する仕組みで、従来の文字入力やチェックボックス操作は不要です。SOY CMSのプラグインとして提供され、有効化するとサイト右下にreCAPTCHAロゴが表示されます。v3は学習ベースで精度が向上するため、初期は精度が低い可能性があります. 現時点ではJavaScript無効環境への対策は未対応です。最新版は公式サイトからダウンロード可能です。関連記事では、同一IPからの連続問い合わせをブロックする方法を紹介しています。

 

Go言語でSearch Consoleの値を取得してみる

/** Geminiが自動生成した概要 **/
Go言語でGoogle Search Console APIから検索クエリデータを取得する方法を解説しています。必要な手順として、Google Cloud ConsoleでSearch Console APIを有効化し、認証情報を作成、Search Console側でユーザー権限を設定します。Goのコードでは、`golang.org/x/oauth2`、`google.golang.org/api/webmasters/v3`ライブラリを使用し、認証情報`secret.json`を用いてSearch Console APIにクエリを送信、過去7日間の検索クエリデータを取得・表示します。

 

自作アプリを介してのGoogle検索でService Unavailableになった

/** Geminiが自動生成した概要 **/
自作PHPアプリでGoogle検索結果を集計する際、cURLで検索を実行したところ「503 Service Unavailable」エラーが発生した。Googleはスクリプトからの自動検索を制限しており、エラーメッセージは異常トラフィックの検出を示していた。解決策として、`curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER["HTTP_USER_AGENT"]);`をcURLに追加し、ブラウザのユーザーエージェントを送信するように変更した。これによりエラーが解消し、検索結果の集計が可能になった。単に適当なユーザーエージェントを設定するだけでは解決せず、実際に使用しているブラウザの情報を送ることが重要だった。

 

チャットワークとGoogle Apps Scriptで音声入力で投稿してみる

/** Geminiが自動生成した概要 **/
Googleドキュメントの音声入力とGoogle Apps Scriptを連携させ、チャットワークへの投稿を音声で行う方法を紹介。 「チャットワーク(投稿内容)終了」と話しかけると、内容がチャットワークに送信されるスクリプトを作成。1分毎にスクリプトが実行され、ドキュメントの内容をチェック、投稿後ドキュメントはクリアされる。APIトークン、ルームIDの設定が必要。音声入力はドキュメントのツールから利用可能。Androidスマホでは音声入力の設定を事前に確認する必要がある。この方法で、両手が塞がっている状況でもチャットワークに投稿可能。実用時はタスク登録ルールやToの指定が推奨される。

 

Google Apps Scriptからチャットワークに投稿してみる

/** Geminiが自動生成した概要 **/
Google Apps Script (GAS)を使ってChatWorkに投稿する方法を紹介。ChatWorkClient for Google Apps Scriptライブラリを利用し、APIトークンとルームIDを指定することで簡単にメッセージを送信できる。GASのトリガー機能と組み合わせれば、Gmail受信やGoogleカレンダーの予定に基づいて自動投稿するなど、業務効率化に役立つアプリを簡単に作成可能。ChatWorkとG Suiteの連携で業務改善を実現できる。

 

社会人・学生向けプログラミング教室でHTML Serviceの勉強会を行いました

/** Geminiが自動生成した概要 **/
社会人・学生向けプログラミング教室で、Google Apps ScriptのHTML Serviceを使ったGoogleドキュメント連携の勉強会が行われました。前回のスプレッドシート拡張の勉強会に続き、今回はHTML Serviceを用いてGoogleドキュメントのUIをどこまでカスタマイズできるかを検証しました。これにより、業務改善に繋がる新たなアイディア創出を期待しています。関連として、Google Apps ScriptでJPEG画像からOCRで文字列を取得する内容も扱われました。

 

Google Apps ScriptのHTML Serviceでファイルアップロードを行う

/** Geminiが自動生成した概要 **/
Google Apps Script (GAS)のHTML Serviceでファイルアップロード機能を実装する方法を紹介。サンプルコードでは、HTMLフォームでファイルを選択・送信し、GAS側でGoogleドライブに保存、生成されたURLをHTMLに返す非同期処理を行っている。`google.script.run.withSuccessHandler()`でGAS側の関数を実行し、成功時の処理をHTML側で記述。フォーム送信イベント`onsubmit`でこの処理を呼び出し、アップロード後のURL表示を実現。この仕組みにOCR処理を組み合わせることで、画像アップロードと文字列抽出を同一画面で行うWebアプリ開発が可能になる。

 

Google Apps ScriptでJPEGの画像からOCRで画像内の文字列を取得してみた

/** Geminiが自動生成した概要 **/
Google Apps ScriptでJPEG画像からOCRで文字列を取得する方法を検証。GoogleドキュメントでのOCRをGASで自動化する方法を紹介している。 Drive APIを有効化し、画像URLを指定して`Drive.Files.insert`メソッドでGoogleドライブに挿入、`ocr:true`オプションでOCRを実行。 生成されたGoogleドキュメントには画像とOCR結果のテキストが含まれる。日付や画像中の文字認識は難しいが、本文は高精度で取得できた。以前試したGoogleドキュメント直接OCRより精度は高い。

 

Google Apps ScriptのHTML ServiceでGoogle Calendarの予定を取得してみる

/** Geminiが自動生成した概要 **/
社会人・学生向けプログラミング教室で、Googleスプレッドシートの拡張機能開発に関する勉強会が開催されました。参加者はGoogle Apps Scriptを用いて、スプレッドシートの操作やWeb API連携を学ぶことで、業務効率化やデータ分析に役立つ実践的なスキルを習得しました。具体的には、HTML ServiceとSpreadsheet Serviceを活用し、スプレッドシートデータの取得・表示、カスタムメニューの追加、外部サービスとの連携などを実践。参加者からは、日々の業務に活かせる具体的な知識を得られたと好評を得ました。さらに、Google Apps Scriptの基礎から応用までを体系的に学べるため、プログラミング初心者でも安心して参加できたという声も寄せられました。

 

Google Apps ScriptのHTML Serviceで自作した関数の結果を出力してみる

/** Geminiが自動生成した概要 **/
社会人・学生向けプログラミング教室で、Googleスプレッドシートの拡張機能開発をテーマにした勉強会が開催されました。内容はスプレッドシート操作の自動化をGASを用いて行うもので、参加者は「Google Apps Script完全入門」を教材に学習しました。勉強会では、GASの基本的な使い方、HTML Serviceを用いたWebアプリ作成、スプレッドシート操作、API連携、トリガー設定などを実践的に学びました。参加者からはGASの利便性や可能性を実感する声が上がり、業務効率化やデータ分析への応用について関心を示していました。

 

Google Apps ScriptのHTML Serviceを試してみた

/** Geminiが自動生成した概要 **/
Google Apps Script (GAS) のHTML Serviceを利用して、HTMLファイルとGASのコードを連携させる方法を紹介しています。 具体的な手順として、Googleドライブ上にGASプロジェクトを作成し、index.htmlファイルに"Hello, World!"と記述、コード.gsファイルにはdoGet関数でHTMLファイルを読み込むコードを記述します。 その後、ウェブアプリケーションとして公開することで、ブラウザでHTMLの内容が表示されることを確認しています。 さらに、GASを学ぶ上でJavaScriptの知識が重要であることを補足し、関連技術としてNode.js、NW.js、GoogleドキュメントのOCR機能についても言及しています。

 

社会人・学生向けプログラミング教室でGoogleスプレットシートの拡張の勉強会を行いました

社会人・学生向けプログラミング教室でGoogleフォームの拡張の勉強会を行いましたの続きで、Google DriveのGoogleスプレットシートを活用して、備品の管理と足りなければ調達の指示をメールで送信するといった業務アプリのようなものを作成してみました。Google ドライブ - 写真やドキュメントなど、ファイルのクラウド ストレージとバックアップGoogle スプレッドシート - オンラインでスプレッドシートを作成、編集できる無料サービスGoogleス

 

Googleドキュメントで画像ファイルから文字列を抜き取ってみる

Faxで送られてくる書類から文字列を抜き出したいということで、光学文字認識(Optical character recognition:OCR)ができるオープンソースを探していたところ、光学文字認識 - WikipediaGoogleドライブのGoogleドキュメントでできるよという情報を見つけ、早速試してみることにした。早速このように適当な位置に名前を書いた画像ファイルを用意する。このファイルをGoogleドライブ内でOCR用で作成したフ

 

SOY ShopでGoogle Sign-In for Websitesプラグインを作成しました

表題の通りなのですが、SOY Shopのマイページのログイン画面にGoogleのアカウントでも会員登録やログインできるGoogle Sign-In for Websitesのログインボタンを設置できるプラグインを作成しました。Google Sign-In for Websites  |  Google Developersこのプラグインを管理画面に記載されている手順で設定を行うと、※画面左下のログインボタンSOY Shopサイトの公開側のマ

 

社会人・学生向けプログラミング教室でGoogleフォームの拡張の勉強会を行いました

社会人・学生向けプログラミング教室でGASで業務改善の勉強会を行いましたの続きで、Google DriveのGoogleフォームをGAS(Google Apps Script)で自分好みにカスタマイズするという勉強会を行いました。Google ドライブ - 写真やドキュメントなど、ファイルのクラウド ストレージとバックアップGoogle フォーム - アンケートを作成、分析できる無料サービスGoogleフォームでお問い合わせフォームを設置すると、お問い

 

SOY Shopの顧客詳細と顧客グループでGoogle Mapsとの連携を追加しました

表題の通り、SOY Shopの顧客詳細の編集画面と顧客グループの各グループでGoogle Mapsとの連携を行いまいした。SOY Shopで顧客グループプラグインを作成しました具体的な内容は、顧客詳細の編集画面では住所の入力フォームの下顧客グループプラグインでは地図付き住所のフィールドを追加顧客情報は管理画面でのみ使用するデータなのに、何故、緯度経度を含む情報を扱えるようにしたのか?それは近々詳細を投稿する予定です。今回

 

社会人・学生向けプログラミング教室でGASで業務改善の勉強会を行いました

社会人・学生向けプログラミング教室でコードレビューをしてみましたにも記載したとおり、以前からTera schoolで中学生向けのプログラミング教室と平行して、大学生・社会人向けにプログラミングの勉強会を行っています。今までJavaScriptで色々と触れてきたので、そろそろ日々の業務改善のためにGAS(Google Apps Script)に触れてみました。Apps Script | Google DevelopersGASを簡単に説明すると、

 

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

前回、圧縮の性能が高いと言われるBrotliを試してみた。Googleの圧縮アルゴリズムBrotliを試してみた性能は圧縮後のファイルサイズで確認して、容量が標準のgzipよりも少なくなっていることを確認した。これはApacheサーバにも入れてみたい!ということでサーバにインストールしてみた。はじめにサーバの環境だけど、さくらのVPS 512Ubuntu 14.04Apache 2.4.25当サイトをHTTP/2対応して表示の爆速化して

 

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

Brotli - WikipediaオライリーのReal World HTTPを読んでいたら、ブラウザからサーバにリクエストを送信して返ってくるレスポンスでBrotliで圧縮できると記載があった。Brotliはよく使われているgzipよりも20%ちかく圧縮率を改善させたアルゴリズムらしい。最近のブラウザであれば、httpsから始まるURLでサーバにリクエストを送信すれば、Brotliで圧縮したレスポンスを返すことができるとのことで、Brotliを試してみること

 

SOY CMSのブログで地図アプリを作ろう3

SOY CMSのブログで地図アプリを作ろう2でhttps://saitodev.co/walk2eat/マップを表示させたブログトップページで詳細ページへのリンク付きのインフォウィンドウを表示できるようにした。ここの記載されているリンクから詳細ページへ遷移するわけだけど、詳細ページでもhttps://saitodev.co/walk2eat/restaurant/農場の家こんな感じでコンテンツの一つとして、店舗の位置を示した地図と、閲覧者が

 

SOY CMSのブログで地図アプリを作ろう2

SOY CMSのブログで地図アプリを作ろう1でSOY CMSのブログページを活用して、投稿型の簡単な地図アプリを作成しました。ただ、これだと地図にマーカーを設置しただけで、このマーカーが何と言う店を指していて、どのような情報があるかわからない。せっかくブログページを使っているのにそれではつまらない。というわけで今回は、https://saitodev.co/walk2eat/マーカーをクリックしたら店名とリンクを表示して、詳細(紹介)ペ

 

SOY CMSのブログで地図アプリを作ろう1

https://saitodev.co/walk2eat/どこに行ったかがすぐにわかるように、地図を表示して簡単にマーカーを設置したいということになりまして、Google Maps APIを利用したページを作ることになりました。Google Maps APIに対応したSOY Appを作成しても良かったのですが、作成直前で非常にめんどくさくなってきたので、SOY CMSのブログを利用することにした。はじめにGoogle Maps APIを利用でき

 

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

内部SEOのためにサーバ側で画像をリサイズしてから送信する様にした。PNGで透過している場合は、背景が黒にならないような対策もした。SOY CMSの画像のリサイズ時にPNGの透過を無効にするこの状態で、再度、GoogleのPageSpeed Insightsで測定してみると、PageSpeed Insights画像を最適化のところで、https://saitodev.co/…e/files3/yabugarashi_negi3.jpg&width=150

 

SOY CMSの画像のリサイズ時にPNGの透過を無効にする

SOY CMSで表示直前で画像のリサイズ表示を行う先日、ページの表示速度を向上するために、トップページのサムネイルの生成をサーバ側でやらせてみたけんだけど、ところどころ、黒いサムネイルが生成されていた。本来ここに表示されるべき画像が、陰イオン交換容量AECこれで、GIMPで作成した画像はリサイズしちゃいけないのかなぁ…なんていろいろ考えみたら原因がわかった。GIMP - GNU Image Manipulation Programこの画像は

 

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

Goで立ち上げたサーバを停止した後、再度同じポートで立ち上げるまだまだ課題は多いけど、最低限の機能は実装できてるので、さくらのVPSを借りて、アプリケーションサーバを立ち上げてみた。その時行ったことをメモに記す。さくらのVPSを借りて、Ubuntuを入れた。Ubuntuでファイアウォール等の設定は下記の、さくらのVPSでSOY CMSを動かした時のメモで記載したものを参考にして進め、今回は練習も兼ねて、この先はデプロイツールを使わず、一つ一つ丁寧に行ってみた。

 

SOY ShopでGoogle+の投稿ウィジェットを作成してみた

コトブキ園というサイトがあって、このサイトはSOY Shopで商品カタログを表示している。ここのサイトはGoogle+で新着情報を表示しているのだが、Google+は他のSNSと異なり、投稿を表示するウィジェットを公開していない。農場の家 - Google+ということで、Google+の投稿を表示するモジュールを作成してみた。SOY ShopにはPHPの記述を許可しつつ、テンプレートのHTMLにコメントのみで実装できるパーツモジュールというものがあるので、


Powered by SOY CMS  ↑トップへ