JavaScriptのNavigatorオブジェクトでブラウザ情報を取得する方法を徹底解説

JavaScriptには、ウェブブラウザに関する多くの情報を取得するための機能が備わっています。その中でも特に重要なものが「Navigatorオブジェクト」です。このオブジェクトを利用することで、ブラウザの名前やバージョン、ユーザーの言語設定、オンライン状態など、さまざまな情報を簡単に取得することができます。これらの情報は、ウェブサイトやアプリケーションをユーザーの環境に最適化するために非常に役立ちます。本記事では、Navigatorオブジェクトを使ってブラウザ情報を取得する具体的な方法やその応用例について詳しく解説します。

目次

Navigatorオブジェクトとは

Navigatorオブジェクトは、JavaScriptでウェブブラウザに関する情報を提供するためのインターフェースです。このオブジェクトを使用することで、ブラウザの種類、バージョン、プラットフォーム、言語設定、オンライン状態、クッキーの有効性など、さまざまな情報にアクセスすることが可能です。Navigatorオブジェクトは、ウェブアプリケーションがユーザーの環境に応じた動作をするために不可欠な存在であり、ユーザーエクスペリエンスを向上させるための重要なツールです。

Navigatorオブジェクトで取得できる情報

Navigatorオブジェクトを使用すると、ウェブブラウザに関するさまざまな情報を取得できます。以下は、その代表的なプロパティと取得できる情報です。

userAgent

ユーザーのブラウザとそのバージョン、プラットフォームの情報を含む文字列を取得します。この情報を解析することで、ユーザーがどのブラウザを使用しているかを判断できます。

platform

ユーザーが使用しているOS(オペレーティングシステム)に関する情報を提供します。これにより、ユーザーがWindows、macOS、Linuxなど、どのプラットフォームを使用しているかを知ることができます。

language

ユーザーのブラウザで設定されている言語を取得します。この情報は、ウェブサイトのコンテンツをユーザーの言語に合わせて表示する際に役立ちます。

cookieEnabled

クッキーが有効かどうかを確認するためのブール値を返します。クッキーが無効な場合、セッション管理やトラッキングが機能しないため、アプリケーションの動作に影響を与える可能性があります。

onLine

ユーザーのブラウザがオンライン状態かオフライン状態かを判定します。これを利用して、インターネット接続がない場合にユーザーに通知を行うことができます。

Navigatorオブジェクトは、この他にも多くのプロパティを持ち、ユーザーの環境に関する詳細な情報を提供します。これらの情報を活用することで、よりパーソナライズされたウェブ体験を提供することが可能です。

実際のコード例

Navigatorオブジェクトを使ってブラウザ情報を取得する具体的なコード例を紹介します。以下のコードでは、主要なプロパティを利用して、ユーザーのブラウザ情報を取得し、コンソールに出力しています。

ブラウザ情報を取得する基本的なコード

// ユーザーエージェント情報の取得
const userAgent = navigator.userAgent;
console.log("User Agent: ", userAgent);

// プラットフォーム情報の取得
const platform = navigator.platform;
console.log("Platform: ", platform);

// 言語設定の取得
const language = navigator.language;
console.log("Language: ", language);

// クッキーの有効性確認
const cookiesEnabled = navigator.cookieEnabled;
console.log("Cookies Enabled: ", cookiesEnabled);

// オンライン状態の確認
const onlineStatus = navigator.onLine ? "オンライン" : "オフライン";
console.log("Online Status: ", onlineStatus);

コードの解説

  1. userAgent: navigator.userAgentで、ユーザーのブラウザとそのバージョン、使用しているOSなどの情報を取得します。例えば、Chromeを使用している場合、"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36"のような文字列が返されます。
  2. platform: navigator.platformで、ユーザーのOSに関する情報を取得します。例えば、Windowsを使用している場合、"Win32"などの文字列が返されます。
  3. language: navigator.languageで、ブラウザに設定されている言語コードを取得します。例えば、日本語に設定されている場合、"ja-JP"が返されます。
  4. cookieEnabled: navigator.cookieEnabledで、クッキーが有効かどうかを確認します。クッキーが有効であればtrue、無効であればfalseが返されます。
  5. onLine: navigator.onLineで、ブラウザのオンライン状態を確認します。オンラインであればtrue、オフラインであればfalseが返されます。

このコード例を使用することで、ユーザーのブラウザ情報を簡単に取得し、アプリケーションの動作をユーザーの環境に合わせることができます。

ユーザーエージェント情報の解析

NavigatorオブジェクトのuserAgentプロパティを使用すると、ブラウザやデバイスに関する詳細な情報が取得できます。この情報を解析することで、ユーザーがどのブラウザを使用しているか、どのOS上で動作しているかを判別することができます。

userAgent情報の構造

userAgentプロパティが返す文字列は、以下のように複数の要素から構成されています。

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36

この例では、以下の情報を読み取ることができます。

  • ブラウザのエンジン: "AppleWebKit/537.36"は、WebKitをベースにしたブラウザエンジンを使用していることを示しています。
  • ブラウザのバージョン: "Chrome/84.0.4147.89"は、Chromeブラウザのバージョンが84であることを示しています。
  • OS情報: "Windows NT 10.0; Win64; x64"は、Windows 10の64ビット版を使用していることを示しています。

userAgent情報の解析方法

userAgent情報を解析するためには、正規表現を使用する方法が一般的です。以下に、簡単な解析コード例を示します。

const userAgent = navigator.userAgent;

// ブラウザ名を取得
let browserName;
if (userAgent.indexOf("Chrome") > -1) {
    browserName = "Chrome";
} else if (userAgent.indexOf("Firefox") > -1) {
    browserName = "Firefox";
} else if (userAgent.indexOf("Safari") > -1) {
    browserName = "Safari";
} else {
    browserName = "Other";
}

console.log("Browser Name: ", browserName);

// OS名を取得
let osName;
if (userAgent.indexOf("Windows NT 10.0") > -1) {
    osName = "Windows 10";
} else if (userAgent.indexOf("Mac OS X") > -1) {
    osName = "macOS";
} else if (userAgent.indexOf("Linux") > -1) {
    osName = "Linux";
} else {
    osName = "Other";
}

console.log("Operating System: ", osName);

コードの解説

  • ブラウザ名の取得: indexOfメソッドを使って、userAgent文字列内に特定のブラウザ名が含まれているかを確認します。Chrome、Firefox、Safariが検出され、それ以外の場合は「Other」と表示されます。
  • OS名の取得: 同様に、OSに関連するキーワードをuserAgent文字列から検索し、Windows 10、macOS、LinuxなどのOSを特定します。

注意点

userAgent情報は、ユーザーやブラウザの設定によって変更されることがあるため、解析結果が必ずしも正確であるとは限りません。特に、カスタムユーザーエージェントを設定している場合や、プライバシー保護のために偽装されている場合があります。

ユーザーエージェント情報を使用する際には、過度に依存せず、他の手段と併用してユーザーの環境を判断することが重要です。

オンライン状態の確認

Navigatorオブジェクトには、ユーザーのブラウザがオンライン状態かオフライン状態かを確認するためのプロパティがあります。これは、ネットワークの接続状況に応じてアプリケーションの動作を適切に調整するために非常に役立ちます。

onLineプロパティの使用

navigator.onLineプロパティは、ブラウザがインターネットに接続されているかどうかを示すブール値を返します。オンラインであればtrue、オフラインであればfalseが返されます。このプロパティを使って、接続状況に応じた処理を実行できます。

基本的な例

以下に、onLineプロパティを使用して、オンライン状態をチェックするシンプルな例を示します。

if (navigator.onLine) {
    console.log("オンラインです。インターネットに接続されています。");
} else {
    console.log("オフラインです。インターネットに接続されていません。");
}

このコードは、ユーザーがインターネットに接続されているかどうかを確認し、それに応じたメッセージをコンソールに出力します。

オンライン状態の変化に対応するイベント

ブラウザがオンライン状態とオフライン状態を切り替える際に、対応するイベントを使用してアプリケーションの動作を動的に変更することも可能です。これには、onlineofflineという2つのイベントを使用します。

例: オンライン/オフラインのイベントリスナー

// オンライン状態に変わったときのイベントリスナー
window.addEventListener('online', function() {
    console.log("ネットワーク接続が再確立されました。");
    // オンラインになったときに実行したい処理をここに追加
});

// オフライン状態に変わったときのイベントリスナー
window.addEventListener('offline', function() {
    console.log("ネットワーク接続が失われました。");
    // オフラインになったときに実行したい処理をここに追加
});

このコードでは、ユーザーがオンラインまたはオフライン状態に切り替わった際に、それぞれのイベントリスナーが起動し、適切なメッセージを表示します。また、必要に応じて、オンライン/オフライン状態に応じた処理を追加することができます。

実際の応用例

例えば、ウェブアプリケーションでユーザーがオフラインになった場合、データの保存をローカルストレージに切り替え、オンラインに復帰した際にサーバーへデータを送信する、といったロジックを実装できます。これにより、ネットワーク障害に強いアプリケーションを構築することが可能になります。

オンライン状態の確認とその変化に対応することで、ユーザーに途切れない体験を提供することができます。ネットワーク状況が不安定な環境でも、ユーザーがアプリケーションをスムーズに利用できるように設計することが重要です。

クッキーの有効性確認

クッキーは、ウェブブラウザにデータを保存してユーザーの状態を管理するための重要な手段です。クッキーが有効でないと、セッション管理やパーソナライズされた設定が機能しないため、アプリケーションのユーザー体験に影響を与える可能性があります。NavigatorオブジェクトのcookieEnabledプロパティを使用して、クッキーがブラウザで有効になっているかを簡単に確認できます。

cookieEnabledプロパティの使用

navigator.cookieEnabledプロパティは、クッキーがブラウザで有効かどうかを示すブール値を返します。クッキーが有効であればtrue、無効であればfalseが返されます。この情報を使って、アプリケーションがクッキーに依存した機能を使用するかどうかを判断することができます。

クッキー有効性の確認コード

以下に、クッキーが有効かどうかを確認する簡単なコード例を示します。

if (navigator.cookieEnabled) {
    console.log("クッキーは有効です。");
} else {
    console.log("クッキーは無効です。クッキーを有効にしてください。");
}

このコードは、クッキーが有効かどうかを確認し、それに応じてメッセージをコンソールに出力します。クッキーが無効である場合、ユーザーにクッキーを有効にするよう促すメッセージを表示することが考えられます。

クッキーが無効な場合の対応

クッキーが無効な場合、セッション管理やユーザーの設定をローカルストレージやセッションストレージに保存することで、クッキーに依存しない方法でデータを管理することができます。これにより、クッキーが無効でもアプリケーションが適切に動作するように設計することが可能です。

ローカルストレージを使用したセッションデータの保存例

if (!navigator.cookieEnabled) {
    // クッキーが無効な場合、ローカルストレージを使用
    localStorage.setItem('sessionData', JSON.stringify({user: "exampleUser"}));
    console.log("セッションデータをローカルストレージに保存しました。");
} else {
    // クッキーが有効な場合、通常のクッキーを使用
    document.cookie = "user=exampleUser; path=/";
    console.log("セッションデータをクッキーに保存しました。");
}

このコードは、クッキーが無効な場合にローカルストレージを使用してセッションデータを保存し、クッキーが有効な場合は通常通りクッキーを使用する例です。こうした対応により、クッキーが無効なブラウザでもユーザーの状態を適切に管理できます。

セキュリティとプライバシーの考慮

クッキーを使用する際には、セキュリティとプライバシーの問題にも注意が必要です。特に、クッキーに保存されるデータが機密情報である場合、暗号化を行ったり、セキュアフラグを使用してHTTPS接続でのみ送信されるように設定することが重要です。

クッキーの有効性を確認し、必要に応じて代替手段を提供することで、ユーザーがどのようなブラウザ設定をしていても、アプリケーションが一貫して正しく動作するように設計することが可能です。

ブラウザ言語設定の取得

ウェブアプリケーションがユーザーに対して最適な言語でコンテンツを提供するためには、ユーザーのブラウザで設定されている言語情報を取得することが重要です。Navigatorオブジェクトを使用することで、簡単にブラウザの言語設定を取得することができます。

languageプロパティの使用

navigator.languageプロパティは、ブラウザの言語設定を示す文字列を返します。この文字列は、通常、言語コードと地域コードを含んでおり、ユーザーがブラウザで設定している言語を特定するために利用できます。

ブラウザの言語設定を取得するコード例

以下に、languageプロパティを使用してブラウザの言語設定を取得し、その情報を使用して適切なメッセージを表示する例を示します。

const userLanguage = navigator.language || navigator.userLanguage;
console.log("ブラウザの言語設定: ", userLanguage);

if (userLanguage === "ja-JP") {
    console.log("日本語のコンテンツを表示します。");
} else {
    console.log("英語のコンテンツを表示します。");
}

このコードでは、navigator.languageが利用できない場合にはnavigator.userLanguageを代わりに使用することで、言語設定を取得します。取得した言語コードに基づいて、適切な言語のコンテンツを表示する処理を実装しています。

言語コードの解釈

navigator.languageプロパティが返す文字列は、通常、ISO 639-1言語コードとISO 3166-1アルファ2地域コードの組み合わせで構成されています。例えば、以下のような言語コードが使用されます。

  • "en-US": アメリカ英語
  • "en-GB": イギリス英語
  • "ja-JP": 日本語
  • "fr-FR": フランス語(フランス)

この情報を使用することで、ユーザーの言語に合わせたコンテンツを提供することができます。

複数言語対応の実装

ユーザーが複数の言語を設定している場合も考慮して、navigator.languagesプロパティを使用することも可能です。navigator.languagesは、ユーザーが優先する言語のリストを配列で返します。この情報を使用することで、より柔軟な言語対応を実装できます。

複数言語設定の取得例

const userLanguages = navigator.languages;
console.log("ユーザーの優先言語リスト: ", userLanguages);

if (userLanguages.includes("ja-JP")) {
    console.log("日本語のコンテンツを表示します。");
} else if (userLanguages.includes("en-US")) {
    console.log("アメリカ英語のコンテンツを表示します。");
} else {
    console.log("デフォルトの言語(英語)のコンテンツを表示します。");
}

このコードは、ユーザーが優先する言語リストを取得し、その中に日本語や英語が含まれているかをチェックして、適切なコンテンツを提供する例です。

言語設定を使ったコンテンツの最適化

ブラウザの言語設定に基づいて、以下のような対応を行うことができます。

  • 自動的に適切な言語のコンテンツを表示: ユーザーが日本語を使用している場合は日本語のページを、英語を使用している場合は英語のページを表示します。
  • ユーザーが言語を選択できるオプションを提供: デフォルトで検出された言語とは異なる言語を希望するユーザーのために、言語選択メニューを提供します。
  • 地域に応じたフォーマットの設定: 日付や数値の表示形式を、ユーザーの地域設定に基づいて適切に調整します。

言語設定の取得とその応用により、ユーザーが最も理解しやすい形式でコンテンツを提供することができ、グローバルなユーザー体験を向上させることが可能です。

Geolocationとの併用例

Navigatorオブジェクトには、ユーザーのブラウザ情報を取得するだけでなく、位置情報を取得するためのGeolocation APIも含まれています。このAPIを使用することで、ユーザーの現在位置を取得し、それに基づいて動的なコンテンツを提供することができます。NavigatorオブジェクトとGeolocation APIを組み合わせることで、よりパーソナライズされたウェブ体験を提供することが可能です。

Geolocation APIの基本

Geolocation APIを使用することで、ユーザーの緯度と経度を取得できます。これは、マップアプリケーションや位置に基づいたサービスを提供する際に非常に有用です。以下のコード例は、ユーザーの位置情報を取得し、その緯度と経度をコンソールに出力する方法を示します。

ユーザーの位置情報を取得するコード例

if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position) {
        const latitude = position.coords.latitude;
        const longitude = position.coords.longitude;
        console.log("緯度: ", latitude);
        console.log("経度: ", longitude);
    }, function(error) {
        console.error("位置情報の取得に失敗しました: ", error.message);
    });
} else {
    console.log("Geolocationはこのブラウザでサポートされていません。");
}

このコードでは、navigator.geolocation.getCurrentPositionメソッドを使用して、ユーザーの現在位置を取得しています。位置情報の取得に成功した場合は、その緯度と経度がコンソールに出力されます。失敗した場合は、エラーメッセージが表示されます。

位置情報を利用したコンテンツ提供の例

位置情報を利用することで、ユーザーに対してその地域に特化した情報やサービスを提供することができます。例えば、ユーザーが特定の都市にいる場合、その都市に関連するイベント情報や天気予報を表示することが考えられます。

例: 位置情報に基づく天気情報の表示

以下は、取得した位置情報を使って、天気情報を提供するためのAPIにリクエストを送る例です。

if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position) {
        const latitude = position.coords.latitude;
        const longitude = position.coords.longitude;

        // 天気情報APIにリクエストを送信
        const apiKey = 'YOUR_API_KEY_HERE';
        const weatherApiUrl = `https://api.weatherapi.com/v1/current.json?key=${apiKey}&q=${latitude},${longitude}`;

        fetch(weatherApiUrl)
            .then(response => response.json())
            .then(data => {
                console.log(`現在の天気: ${data.current.condition.text}`);
                console.log(`気温: ${data.current.temp_c}°C`);
            })
            .catch(error => {
                console.error("天気情報の取得に失敗しました: ", error);
            });
    }, function(error) {
        console.error("位置情報の取得に失敗しました: ", error.message);
    });
} else {
    console.log("Geolocationはこのブラウザでサポートされていません。");
}

この例では、Weather APIを使用して、ユーザーの現在地に基づいた天気情報を取得し、表示しています。fetchメソッドを使ってAPIにリクエストを送り、その結果を処理しています。

Geolocation APIとNavigatorオブジェクトの併用

Navigatorオブジェクトの情報とGeolocation APIを組み合わせることで、さらに高度なパーソナライズが可能になります。例えば、ユーザーのブラウザ情報に基づいて、特定の地域や言語に対応した情報を提供することができます。

例: ユーザーの言語と位置情報に基づく動的なメッセージの表示

if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position) {
        const latitude = position.coords.latitude;
        const longitude = position.coords.longitude;
        const language = navigator.language || navigator.userLanguage;

        console.log(`ユーザーの言語: ${language}`);
        console.log(`ユーザーの位置: 緯度 ${latitude}, 経度 ${longitude}`);

        // 言語と位置情報に基づくメッセージの表示
        if (language === "ja-JP") {
            console.log("日本語でメッセージを表示します。");
        } else {
            console.log("英語でメッセージを表示します。");
        }
    }, function(error) {
        console.error("位置情報の取得に失敗しました: ", error.message);
    });
} else {
    console.log("Geolocationはこのブラウザでサポートされていません。");
}

このコードは、ユーザーの言語設定と位置情報に基づいて、動的にメッセージを表示する例です。これにより、よりパーソナライズされたコンテンツを提供することが可能になります。

セキュリティとプライバシーの考慮

Geolocation APIを使用する際には、ユーザーのプライバシーを尊重し、必要な場合にのみ位置情報を取得するように設計することが重要です。ユーザーの同意を得るプロンプトが表示され、同意しない限り位置情報が取得されない仕組みになっています。また、取得した位置情報は適切に保護し、第三者に無断で共有しないようにすることが求められます。

このように、NavigatorオブジェクトとGeolocation APIを組み合わせることで、ユーザーに対して位置に基づいたリッチな体験を提供することができます。

応用例:ユーザーの環境に応じた動的コンテンツ提供

Navigatorオブジェクトを活用することで、ユーザーのブラウザ情報や位置情報に基づいて、動的にコンテンツを変化させることができます。これにより、ユーザーの環境や好みに応じた最適な体験を提供することが可能です。このセクションでは、Navigatorオブジェクトを使った応用例として、ユーザーの環境に応じた動的コンテンツの提供方法を紹介します。

ブラウザ情報に基づくコンテンツの最適化

ユーザーが使用しているブラウザの種類やバージョンに基づいて、最適なコンテンツを提供することができます。例えば、特定のブラウザでのみ動作する機能や、古いブラウザではサポートされていない機能を適切に処理することが可能です。

例: 古いブラウザに対する警告メッセージの表示

const userAgent = navigator.userAgent;

if (userAgent.indexOf("MSIE") > -1 || userAgent.indexOf("Trident/") > -1) {
    alert("ご使用のブラウザはサポートされていません。最新のブラウザにアップグレードしてください。");
} else {
    console.log("サポートされているブラウザを使用しています。");
}

このコードは、Internet Explorerを使用しているユーザーに対して、サポートされていないブラウザであることを警告する例です。ユーザーには、最新のブラウザにアップグレードするよう促すことができます。

言語設定に基づくコンテンツのローカライズ

ユーザーのブラウザで設定されている言語に基づいて、コンテンツを自動的にローカライズすることができます。これにより、ユーザーにとってより理解しやすい言語で情報を提供できます。

例: ブラウザの言語設定に基づくページのリダイレクト

const language = navigator.language || navigator.userLanguage;

if (language === "ja-JP") {
    window.location.href = "/ja/index.html";
} else if (language === "fr-FR") {
    window.location.href = "/fr/index.html";
} else {
    window.location.href = "/en/index.html";
}

このコードは、ユーザーの言語設定に基づいて適切な言語版のページにリダイレクトする例です。これにより、ユーザーが最も慣れ親しんだ言語でサイトを利用できるようになります。

位置情報に基づく地域特化コンテンツの提供

ユーザーの位置情報を活用して、地域に特化した情報やサービスを提供することができます。これにより、ユーザーの現在地に基づいたプロモーションやローカルイベントの案内などを行うことができます。

例: 位置情報に基づく店舗案内の表示

if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position) {
        const latitude = position.coords.latitude;
        const longitude = position.coords.longitude;

        // 位置情報に基づいて最寄りの店舗情報を取得・表示
        const storeApiUrl = `https://api.example.com/stores?lat=${latitude}&lon=${longitude}`;

        fetch(storeApiUrl)
            .then(response => response.json())
            .then(data => {
                console.log("最寄りの店舗情報: ", data);
                // 店舗情報をページに表示する処理をここに追加
            })
            .catch(error => {
                console.error("店舗情報の取得に失敗しました: ", error);
            });
    }, function(error) {
        console.error("位置情報の取得に失敗しました: ", error.message);
    });
} else {
    console.log("Geolocationはこのブラウザでサポートされていません。");
}

このコードは、ユーザーの現在位置に基づいて、最寄りの店舗情報を取得し、表示する例です。リアルタイムでユーザーの位置に合わせた情報を提供することで、利便性を高めることができます。

オンライン/オフライン状態に応じた機能の提供

ユーザーのオンライン/オフライン状態を監視し、ネットワーク接続状況に応じた動作を行うことで、ユーザーエクスペリエンスを向上させることができます。たとえば、オフライン時にはローカルキャッシュを使用し、オンライン時には最新の情報を取得するようにすることが可能です。

例: オフラインモードでのメッセージ表示

window.addEventListener('offline', function() {
    alert("現在オフラインです。インターネット接続が必要な機能は一部制限されます。");
});

window.addEventListener('online', function() {
    alert("インターネット接続が再確立されました。全ての機能が再び利用可能です。");
});

このコードは、ユーザーがオフラインになると警告メッセージを表示し、オンラインに戻るとその旨を通知する例です。これにより、ユーザーは現在の接続状況に応じた適切なアクションを取ることができます。

まとめ

Navigatorオブジェクトとその関連APIを活用することで、ユーザーのブラウザ情報、言語設定、位置情報、オンライン状態などに基づいた動的コンテンツの提供が可能になります。これにより、個々のユーザーに合わせた最適な体験を提供することができ、ウェブアプリケーションのユーザビリティを大幅に向上させることができます。

まとめ

本記事では、JavaScriptのNavigatorオブジェクトを使用してブラウザ情報を取得し、ユーザーの環境に応じた動的なコンテンツを提供する方法について詳しく解説しました。Navigatorオブジェクトを活用することで、ユーザーのブラウザ、言語設定、オンライン状態、さらには位置情報までを取得し、ウェブ体験をパーソナライズすることが可能です。これにより、ユーザーの満足度を高め、より効果的なウェブサイトやアプリケーションを構築するための基盤が整います。今回の内容を活用して、ユーザーにとって価値のある、最適化されたコンテンツ提供を目指してみてください。

コメント

コメントする

目次