コード内のすべてのconsole.logステートメントを迅速かつ便利に無効にする方法は?


257

console.logテスト目的で、JavaScriptコードのすべてのステートメントをオフにする方法はありますか?


11
「すべて置換」をサポートするテキストエディターを使用し、「console.log」を「//console.log」に置き換えます
helloandre

5
@helloandre-ログ、情報を使用し、デバッグとエラーを警告する場合、少し面倒になります
UpTheCreek

ブラウザーのデバッグツールが有効になっていない限り、ブラウザーの実装がコンソールステートメントを自動的にバイパスするようになると思います。
かすかな信号2015年

2
以下の答えは素晴らしいですが、これについての知識を再発明する必要はありません。見ていpicologを。(NodeJSの)コンソールと互換性のあるAPIを備えているため、ドロップインの代替として使用できます。それは、箱から出してログレベルをサポートし、ブラウザ、NodeJS、およびNashornで動作し、クエリ文字列(ブラウザ)または環境変数PICOLOG_LEVEL(ノード)から簡単に構成でき、非常に小さいです。900バイト未満に圧縮して圧縮しました。免責事項:私は著者です。
Stijn de Witt 2016

すべてのconsole関数をオーバーライドする簡単な方法があります。ただ、見てstapp.space/disable-javascript-console-on-production
ピョートル・スタップ

回答:


427

スクリプトでconsole.log関数を再定義します。

console.log = function() {}

それだけです。これ以上コンソールにメッセージはありません。

編集:

Cideのアイデアを拡張します。コードからログのオン/オフを切り替えるために使用できるカスタムロガー。

私のFirefoxコンソールから:

var logger = function()
{
    var oldConsoleLog = null;
    var pub = {};

    pub.enableLogger =  function enableLogger() 
                        {
                            if(oldConsoleLog == null)
                                return;

                            window['console']['log'] = oldConsoleLog;
                        };

    pub.disableLogger = function disableLogger()
                        {
                            oldConsoleLog = console.log;
                            window['console']['log'] = function() {};
                        };

    return pub;
}();

$(document).ready(
    function()
    {
        console.log('hello');

        logger.disableLogger();
        console.log('hi', 'hiya');
        console.log('this wont show up in console');

        logger.enableLogger();
        console.log('This will show up!');
    }
 );

上記の「ロガー」の使い方は?準備ができたイベントでlogger.disableLoggerを呼び出して、コンソールメッセージがログに記録されないようにします。メッセージをコンソールに記録するメソッド内に、logger.enableLoggerおよびlogger.disableLoggerへの呼び出しを追加します。


機能しないものについて詳しく教えてください。上記の行はあなたにエラーを与えますか?はいの場合、エラーメッセージは何ですか?
SolutionYogi

1
IE8で動作します。;-)
ユージーンラズトキン、

コードはconsole.log関数を上書きして復元します。IE7がconsole.logメソッドをサポートしていれば、動作するはずです。
SolutionYogi

3
console.log = function(){}はFirefoxでは機能しないようです。それでも「コンソールが定義されていません」エラーが発生します。
DA。

2
なんて恐ろしい解決策でしょう。変更console.log中...ロギングのためのブール値と条件付き関数を持たないのはなぜですか?
認知症

76

以下はより完全です:

var DEBUG = false;
if(!DEBUG){
    if(!window.console) window.console = {};
    var methods = ["log", "debug", "warn", "info"];
    for(var i=0;i<methods.length;i++){
        console[methods[i]] = function(){};
    }
}

これにより、コンソールに共通のメソッドが存在する場合はそれがゼロになり、エラーなしで呼び出すことができ、パフォーマンスのオーバーヘッドはほとんどありません。コンソールを持たないIE6のようなブラウザの場合、エラーを防ぐためにダミーメソッドが作成されます。もちろん、Firebugには、トレース、プロファイル、時間など、さらに多くの関数があります。コードで使用する場合は、リストに追加できます。

デバッガーにこれらの特別なメソッドがあるかどうか(つまりIE)を確認し、サポートしていないメソッドをゼロにすることもできます。

if(window.console && !console.dir){
var methods = ["dir", "dirxml", "trace", "profile"]; //etc etc
    for(var i=0;i<methods.length;i++){
        console[methods[i]] = function(){};
    }
}

これは完璧に機能しましたが、少し調整しましたが、環境をチェックしました(本番環境では無効にしたいだけです)
Muganwas

27

ドキュメントからわかる限り、Firebugはデバッグ状態を切り替えるための変数を提供していません。代わりに、console.log()を条件付きで呼び出すラッパーでラップします。

DEBUG = true; // set to false to disable debugging
function debug_log() {
    if ( DEBUG ) {
        console.log.apply(this, arguments);
    }
}

既存のすべての呼び出しを変更する必要がない場合は、代わりにこれを使用できます。

DEBUG = true; // set to false to disable debugging
old_console_log = console.log;
console.log = function() {
    if ( DEBUG ) {
        old_console_log.apply(this, arguments);
    }
}

1
ありがとうございます。これは、すべてのconsole.logステートメントをdebug.logに書き換える必要があることを意味します。
ザックバート、

これは、正しい方法です。最初からやり直す場合はもちろんです。
オープンソース

3
エディタに適切な検索/置換機能がある場合にも、これは正しい方法です。
BaroqueBobcat 09

2
少なくともjQueryを使用している場合は、独自のラッパーを作成する必要はありません。jQuery Debugging Pluginは素晴らしい働きをします。おまけとして、ブラウザなしでconsole.logのエミュレーションを提供します。 trainofthoughts.org/blog/2007/03/16/jquery-plugin-debug
ネルソン

もちろん、唯一の[マイナー]問題は、プラグインをインストールする必要があることです。:)しかし、知っておくと良い-ありがとう!
CIDE

17

貴方はするべきではない!

組み込み関数を上書きすることはお勧めできません。すべての出力を抑制する保証もありません。使用する他のライブラリが変更を元に戻す可能性があり、コンソールに書き込む可能性のある他の関数があります。.dir().warning().error().debug().assert()など

一部の人が示唆したように、DEBUG_MODE変数を定義して条件付きでログに記録できます。コードの複雑さと性質によっては、コンソールオブジェクトをラップし、この機能が組み込まれた独自のロガーオブジェクト/ロガー関数を記述することをお勧めします。これは、インストルメンテーションに対処するのに適切な場所です。

つまり、「テスト」の目的で、コンソールに出力する代わりにテストを書くことができます。テストを行わず、これらのconsole.log()行がコードを作成するための補助にすぎない場合は、単に削除します


7
"other libraries you use may revert your changes"console.log最初に無効にすると、古い機能に戻せません。まあ、彼らはconsole.logソースコードを書き換えることができますが、なぜですか?"it may be a good idea to write your own logger object/function that wraps around the console object":私は過去にこれをやったことがあり、それは悪い考えです。コンソール出力のトレースはラッパーを参照し、それを呼び出す行を参照しないため、デバッグがより困難になります。
Marco Sulla

3
@LucasMalorは、「最初の段階で」コードがそのインフラストラクチャに結合されているため、再利用性が制限されていることを意味します。ただし、一般化するのは困難です。ゲーム、一部のDOMアニメーションは、複雑なSPA内のドメインロジックと同じではありません。後者は、「コンソール」と呼ばれるものについては言うまでもなく、ブラウザ対応であってはなりません。その場合console.log('Look ma, it reaches this point');、コードの一部をハッキングするのではなく、適切なテスト戦略を用意する必要があります。他のすべてが失敗した場合は、実際にdebugger;命令を使用できます。
istepaniuk

"the code is coupled to that infrastructure":おそらくコードですが、パターンは違います。ロギング機能が無効になっているページに共通の基本テンプレートを作成する場合、それはどこにでも適用できるロジックです。"the later shouldn't be browser-aware":そうですね、JSを使用しないでください:P
Marco Sulla

3
@MarcoSulla彼はよりクリーンなコードを書いていると思います。「……JSを使うべきではない」と言うのは少し強引です。理想的には、プログラマーとして、どのような環境であっても、できるだけモジュール化する必要があります。ブラウザーを気にしない場合は、より多くの場所にデプロイできます。これは、データの破損を心配するための依存関係が1つ少なくなります。だから、私見そうそう、彼は実際に正しい。「共通の基本テンプレートを作成する場合...」と言うことから始めて、それ自体が依存関係を導入することを覚えておいてください。このような考え方がソフトウェアを複雑にします。思考の糧。
dudewad 2015

1
Adobe SiteCatalyicsを使用すると、コンソールに大量のジャンクが発生し、場合によってはデバッグが面倒になります。私は、サードパーティのコールを実行したときに一時的に無効にconsole.logにできることだから、私にとってはかなり有用であろう
spinn

16

これは古い投稿ですが、Googleの検索結果の一番上に表示されるので、最新のChrome、FF、IEで機能する、よりエレガントな非jQueryソリューションを次に示します。

(function (original) {
    console.enableLogging = function () {
        console.log = original;
    };
    console.disableLogging = function () {
        console.log = function () {};
    };
})(console.log);

12

console.logを無効にする方法を尋ねたのはわかっていますが、これはあなたが本当に望んでいることかもしれません。この方法では、コンソールを明示的に有効または無効にする必要はありません。それは単にそれを開いたりインストールしたりしていない人々のためのそれらの厄介なコンソールエラーを防ぐだけです。

if(typeof(console) === 'undefined') {
    var console = {};
    console.log = console.error = console.info = console.debug = console.warn = console.trace = console.dir = console.dirxml = console.group = console.groupEnd = console.time = console.timeEnd = console.assert = console.profile = function() {};
}

2
IE固有のログの無効化については、Chris S.の回答を参照してください。
GuruM 2013

11

フラグDEBUGを変更してconsole.log関数をオーバーライドするだけです。これでうまくいくはずです。

var DEBUG = false;
// ENABLE/DISABLE Console Logs
if(!DEBUG){
  console.log = function() {}
}

2
さらに一歩進んで、これをロガー関数/クラスにラップします。次のようなもの:function myLog(msg) { if (debug) { console.log(msg); } }
sleblanc

Angularを使用する場合は、それをapplication.jsファイルのグローバル構成として使用し、グローバルプロパティとして使用してログのオン/オフを切り替えることができます。IEで開発者ツールバーを開いている場合、コンソールが未定義になることはありません。
スワニディ

10

これらすべての答えのうち、誰も組み合わせないことに驚いています。

  • jqueryなし
  • グローバル名前空間を汚染しない匿名関数
  • window.consoleが定義されていない場合の処理
  • コンソールの.log関数を変更するだけです

私はこれに行きます:

(function () {

    var debug = false

    if (debug === false) {
        if ( typeof(window.console) === 'undefined') { window.console = {}; }
        window.console.log = function () {};
    }
})()

9

私もこの問題を検索し、cordovaアプリ内で試した後、すべての開発者にWindows Phoneが上書きされないよう警告するだけです

    console.log

アプリが起動時にクラッシュするためです。

幸運なことにローカルで開発している場合はクラッシュしませんが、ストアで送信するとアプリがクラッシュします。

上書きするだけ

    window.console.log 

もしあなたが必要ならば。

これは私のアプリで動作します:

   try {
        if (typeof(window.console) != "undefined") {
            window.console = {};
            window.console.log = function () {
            };
            window.console.info = function () {
            };
            window.console.warn = function () {
            };
            window.console.error = function () {
            };
        }

        if (typeof(alert) !== "undefined") {
            alert = function ()
            {

            }
        }

    } catch (ex) {

    }

「警告」をありがとう。ただし、コルドバベースのアプリをGooglePlayストアにリリースし、電話デバイスでテストしたところ、すべて問題ありませんでした。あなたの警告は「ウィンドウズベースの」アプリストアに限定されたと思いますか?...しかし、爆発した場合に備えて、opsをtry-catchブラケット内に配置することをお勧めします。したがって、賛成です。
パニーニランチャー

8

IE7を使用している場合、コンソールは定義されません。したがって、よりIEに適したバージョンは次のようになります。

if (typeof console == "undefined" || typeof console.log == "undefined") 
{
   var console = { log: function() {} }; 
}

5

これは、SolutionYogiChris Sからの回答のハイブリッドです。console.logの行番号とファイル名を維持します。jsFiddleの例

// Avoid global functions via a self calling anonymous one (uses jQuery)
(function(MYAPP, $, undefined) {
    // Prevent errors in browsers without console.log
    if (!window.console) window.console = {};
    if (!window.console.log) window.console.log = function(){};

    //Private var
    var console_log = console.log;  

    //Public methods
    MYAPP.enableLog = function enableLogger() { console.log = console_log; };   
    MYAPP.disableLog = function disableLogger() { console.log = function() {}; };

}(window.MYAPP = window.MYAPP || {}, jQuery));


// Example Usage:
$(function() {    
    MYAPP.disableLog();    
    console.log('this should not show');

    MYAPP.enableLog();
    console.log('This will show');
});


3

私は彼の問題に対処するために以下を使用しています:-

var debug = 1;
var logger = function(a,b){ if ( debug == 1 ) console.log(a, b || "");};

デバッグを有効にするには、debugを1に設定します。次に、デバッグテキストを出力するときにロガー機能を使用します。また、2つのパラメーターを受け入れるように設定されています。

したがって、代わりに

console.log("my","log");

使用する

logger("my","log");

3

私は以前ウィンストンロガーを使用しました。

今日私は経験から以下のより単純なコードを使用しています:

  1. cmd /コマンドラインから環境変数を設定します(Windowsの場合):

    cmd
    setx LOG_LEVEL info

または、必要に応じてコードに変数を含めることもできますが、上記の方が優れています。

  1. cmd /コマンドライン、またはNetbeansのようなIDE /エディターを再起動します。

  2. 以下のようなコードがあります:

    console.debug = console.log;   // define debug function
    console.silly = console.log;   // define silly function
    
    switch (process.env.LOG_LEVEL) {
        case 'debug':
        case 'silly':
            // print everything
            break;
    
        case 'dir':
        case 'log':
            console.debug = function () {};
            console.silly = function () {};
            break;
    
        case 'info':
            console.debug = function () {};
            console.silly = function () {};
            console.dir = function () {};
            console.log = function () {};
            break;
    
        case 'trace':   // similar to error, both may print stack trace/ frames
        case 'warn':    // since warn() function is an alias for error()
        case 'error':
            console.debug = function () {};
            console.silly = function () {};
            console.dir = function () {};
            console.log = function () {};
            console.info = function () {};
            break;
    }
  3. 次のように、すべてのconsole。*を使用します。

    console.error(' this is a error message '); // will print
    console.warn(' this is a warn message '); // will print
    console.trace(' this is a trace message '); // will print
    console.info(' this is a info message '); // will print, LOG_LEVEL is set to this
    
    console.log(' this is a log message '); // will NOT print
    console.dir(' this is a dir message '); // will NOT print
    console.silly(' this is a silly message '); // will NOT print
    console.debug(' this is a debug message '); // will NOT print

ここで、ポイント1で行ったLOG_LEVEL設定に基づいて(setx LOG_LEVEL logコマンドラインを再起動するなど)、上記の一部は印刷されますが、その他は印刷されません

お役に立てば幸いです。


2

警告:恥知らずなプラグ!

また、私のJsTraceオブジェクトのようなものを使用して、モジュールレベルの「切り替え」機能を備えたモジュール式トレースを行い、そのときに表示したいものだけをオンにすることもできます。

http://jstrace.codeplex.com

(気になる人のために、NuGetパッケージもあります)

すべてのレベルのデフォルトは「エラー」ですが、「オフ」にできます。でも、なぜエラーを見たくないのか考えられない

次のように変更できます。

Trace.traceLevel('ModuleName1', Trace.Levels.log);
Trace.traceLevel('ModuleName2', Trace.Levels.info);

より多くのドキュメントFORE、チェックアウトドキュメントを

T


2

このURLのJavaScriptのヒントにもう少し高度なコードが見つかりました。ヒント:バストを無効にしてconsole.logを無効にします

var DEBUG_MODE = true; // Set this value to false for production

if(typeof(console) === 'undefined') {
   console = {}
}

if(!DEBUG_MODE || typeof(console.log) === 'undefined') {
   // FYI: Firebug might get cranky...
   console.log = console.error = console.info = console.debug = console.warn = console.trace = console.dir = console.dirxml = console.group = console.groupEnd = console.time =    console.timeEnd = console.assert = console.profile = function() {};
}

2

このユースケース用のライブラリを開発しました:https : //github.com/sunnykgupta/jsLogger

特徴:

  1. これはconsole.logを安全に上書きします。
  2. コンソールが利用できない場合は注意してください(そうです、それも考慮する必要があります)。
  3. 後で取得できるように、すべてのログを(抑制されていても)保存します。
  4. ハンドルのような主要なコンソール機能をlogwarnerrorinfo

変更可能であり、新しい提案が出されるたびに更新されます。


2

これにより、window.consoleのすべてのメソッドがオーバーライドされます。スクリプトセクションの最上部に配置できます。PHPフレームワークを使用している場合、このコードを印刷できるのは、アプリ環境が本番環境である場合、または何らかのデバッグフラグが無効になっている場合のみです。次に、開発環境またはデバッグモードで動作するコード内のすべてのログを取得します。

window.console = (function(originalConsole){
    var api = {};
    var props = Object.keys(originalConsole);
    for (var i=0; i<props.length; i++) {
        api[props[i]] = function(){};
    }
    return api;
})(window.console);

1

私はこれを書きました:

//Make a copy of the old console.
var oldConsole = Object.assign({}, console);

//This function redefine the caller with the original one. (well, at least i expect this to work in chrome, not tested in others)
function setEnabled(bool) {
    if (bool) {
        //Rewrites the disable function with the original one.
        console[this.name] = oldConsole[this.name];
        //Make sure the setEnable will be callable from original one.
        console[this.name].setEnabled = setEnabled;
    } else {
        //Rewrites the original.
        var fn = function () {/*function disabled, to enable call console.fn.setEnabled(true)*/};
        //Defines the name, to remember.
        Object.defineProperty(fn, "name", {value: this.name});
        //replace the original with the empty one.
        console[this.name] = fn;
        //set the enable function
        console[this.name].setEnabled = setEnabled

    }
}

残念ながら、strictモードの使用では機能しません。

だから、使用console.fn.setEnabled = setEnabledして、console.fn.setEnabled(false)どこfnほぼすべてのコンソール機能である可能性があります。あなたの場合は:

console.log.setEnabled = setEnabled;
console.log.setEnabled(false);

私もこれを書きました:

var FLAGS = {};
    FLAGS.DEBUG = true;
    FLAGS.INFO = false;
    FLAGS.LOG = false;
    //Adding dir, table, or other would put the setEnabled on the respective console functions.

function makeThemSwitchable(opt) {
    var keysArr = Object.keys(opt);
    //its better use this type of for.
    for (var x = 0; x < keysArr.length; x++) {
        var key = keysArr[x];
        var lowerKey = key.toLowerCase();
        //Only if the key exists
        if (console[lowerKey]) {
            //define the function
            console[lowerKey].setEnabled = setEnabled;
            //Make it enabled/disabled by key.
            console[lowerKey].setEnabled(opt[key]);
        }
    }
}
//Put the set enabled function on the original console using the defined flags and set them.
makeThemSwitchable(FLAGS);

したがってFLAGS、デフォルトの値を(上記のコードを実行する前に)FLAGS.LOG = false設定するだけでよく、log関数はデフォルトで無効になり、呼び出しを有効にすることができます。console.log.setEnabled(true)


これを使用して、運用環境でconsole.logをオンザフライで有効にできると思いますか?Chromeコンソールを開くように実行しconsole.log.setEnabled(true)、ログの表示を開始します
Rodrigo Assis

1
@RodrigoAssisはい、動作します。これは、発信者の回線を失わずにどこでも有効にできるようにするために作成したものですが、これは最善の方法ではありません。ログの最善の方法は、次のような短絡方法を使用するvar debug = false; debug && console.log(1/3)ことです。ログの内容が有効になっていない場合は評価する必要がないため(この場合1/3は評価されません)、発信者の回線を失わずに有効にできます。それも簡単です(constとしてvarsしない場合)。
Gabriel De Oliveira Rohden 2017

1

すべてのconsole.*機能を無効化/オーバーライドするための私の包括的なソリューションはこちらです。

もちろん、必要なコンテキストを確認した後、それが含まれていることを確認してください。たとえば、本番リリースにのみ含まれ、他の重要なコンポーネントを爆破することはありません。

ここで引用すると:

"use strict";
(() => {
  var console = (window.console = window.console || {});
  [
    "assert", "clear", "count", "debug", "dir", "dirxml",
    "error", "exception", "group", "groupCollapsed", "groupEnd",
    "info", "log", "markTimeline", "profile", "profileEnd", "table",
    "time", "timeEnd", "timeStamp", "trace", "warn"
  ].forEach(method => {
    console[method] = () => {};
  });
  console.log("This message shouldn't be visible in console log");
})();


1

gulpを使用している場合は、このプラグインを使用できます。

次のコマンドでこのプラグインをインストールします。

npm install gulp-remove-logging

次に、この行をgulpfileに追加します。

var gulp_remove_logging = require("gulp-remove-logging");

最後に、構成設定(以下を参照)をgulpfileに追加します。

タスク構成

gulp.task("remove_logging", function() {
     return gulp.src("src/javascripts/**/*.js")
    .pipe(
      gulp_remove_logging()
    )
    .pipe(
      gulp.dest(
        "build/javascripts/"
      )
    ); });

1

https://stackoverflow.com/a/46189791/871166の簡略化

switch (process.env.LOG_LEVEL) {
  case 'ERROR':
    console.warn = function() {};
  case 'WARN':
    console.info = function() {};
  case 'INFO':
    console.log = function() {};
  case 'LOG':
    console.debug = function() {};
    console.dir = function() {};
}

0

javascript AOP(例えばjquery-aop)を使用して、console.debug / log(around)へのすべての呼び出しをインターセプトし、一部のグローバル変数がfalseに設定されている場合は実際の呼び出しを続行しないでください。

(時々)ajax呼び出しを行うこともできるので、サーバーでログの有効化/無効化動作を変更して、ステージング環境などで問題が発生したときにデバッグを有効にすることが非常に興味深い場合があります。


私はそのような解決策を実装していませんでした。これまでのところ理論的です。
Stijn Geukens 2013

0

logeekを使用できます。これにより、ログメッセージの可視性を制御できます。その方法は次のとおりです。

<script src="bower_components/dist/logeek.js"></script>

logeek.show('security');

logeek('some message').at('copy');       //this won't be logged
logeek('other message').at('secturity'); //this would be logged

logeek.show('nothing')すべてのログメッセージを完全に無効にすることもできます。


0

この問題についていくつかの研究開発を行った後、私はこのソリューションに出くわしました。選択したとおりに警告/エラー/ログを非表示にします。

    (function () {
    var origOpen = XMLHttpRequest.prototype.open;
    XMLHttpRequest.prototype.open = function () {        
        console.warn = function () { };
        window['console']['warn'] = function () { };
        this.addEventListener('load', function () {                        
            console.warn('Something bad happened.');
            window['console']['warn'] = function () { };
        });        
    };
})();

JQueryを必要としないJavaScriptコードであるため、このコードをJQueryプラグイン(/../jquery.min.jsなど)の前に追加します。一部の警告はJQuery自体に含まれているためです。

ありがとう!!


0

私が書いたES2015(だけで使用できるソリューションをWebPACKの)。

class logger {
  static isEnabled = true;

  static enable () {
    if(this.constructor.isEnabled === true){ return; }

    this.constructor.isEnabled = true;
  }

  static disable () {
    if(this.constructor.isEnabled === false){ return; }

    this.constructor.isEnabled = false;
  }

  static log () {
    if(this.constructor.isEnabled === false ) { return; }

    const copy = [].slice.call(arguments);

    window['console']['log'].apply(this, copy);
  }

  static warn () {
    if(this.constructor.isEnabled === false ) { return; }

    const copy = [].slice.call(arguments);

    window['console']['warn'].apply(this, copy);
  }

  static error () {
    if(this.constructor.isEnabled === false ) { return; }

    const copy = [].slice.call(arguments);

    window['console']['error'].apply(this, copy);
  }
}

説明:

  1. logger.enableとlogger.disableに加えて、ロガークラスを使用してconsole。['log'、 'warn'、 'error']メソッドを使用できます。
  2. メッセージの表示、有効化または無効化にロガークラスを使用することで、コードがよりクリーンで保守しやすくなります。
  3. 以下のコードは、ロガークラスの使用方法を示しています。
    • logger.disable() -すべてのコンソールメッセージを無効にする
    • logger.enable() -すべてのコンソールメッセージを有効にする
    • logger.log('message1', 'message2') -console.logとまったく同じように機能します。
    • logger.warn('message1', 'message2') -console.warnとまったく同じように機能します。
    • logger.error('message1', 'message2')-console.errorとまったく同じように機能します。ハッピーコーディング...
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.