「Sign In With Google JavaScript API」のリファレンス

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

このリファレンス ページでは、Sign-In JavaScript API について説明します。この API を使用すると、ワンタップ プロンプトまたは「Google でログイン」ボタンをウェブページに表示できます。

メソッド: google.accounts.id.initialize

google.accounts.id.initialize メソッドは、構成オブジェクトに基づいて「Google でログイン」クライアントを初期化します。メソッドの次のコード例をご覧ください。

google.accounts.id.initialize(IdConfiguration)

次のコードサンプルでは、onload 関数を指定して google.accounts.id.initialize メソッドを実装しています。

<script>
  window.onload = function () {
    google.accounts.id.initialize({
      client_id: 'YOUR_GOOGLE_CLIENT_ID',
      callback: handleCredentialResponse
    });
    google.accounts.id.prompt();
  };
</script>

google.accounts.id.initialize メソッドは、同じウェブページ内のすべてのモジュールで暗黙的に使用できる「Google でログイン」クライアント インスタンスを作成します。

  • 同じウェブページで複数のモジュール(ワンタップ、パーソナライズド ボタン、取り消しなど)を使用する場合でも、google.accounts.id.initialize メソッドを呼び出す必要があるのは 1 回だけです。
  • google.accounts.id.initialize メソッドを複数回呼び出すと、最後の呼び出しの構成のみが記憶され、使用されます。

google.accounts.id.initialize メソッドを呼び出すたびに構成をリセットすると、同じウェブページ内のすべてのメソッドが新しい構成をすぐに使用します。

データ型: IdConfiguration

次の表に、IdConfiguration データ型のフィールドと説明を示します。

項目
client_id アプリケーションのクライアント ID
auto_select 自動選択を有効にします。
callback ID トークンを処理する JavaScript 関数。Google One タップと [Google でログイン] ボタン popup UX モードでは、この属性を使用します。
login_uri ログイン エンドポイントの URL。「Google でログイン」ボタン redirect UX モードでは、この属性が使用されます。
native_callback パスワードの認証情報を処理する JavaScript 関数。
cancel_on_tap_outside ユーザーがプロンプトの外側をクリックすると、プロンプトがキャンセルされます。
prompt_parent_id ワンタップ プロンプト コンテナ要素の DOM ID
nonce ID トークンのランダムな文字列
context ワンタップ プロンプトのタイトルと単語
state_cookie_domain 親ドメインとそのサブドメインで One Tap を呼び出す必要がある場合は、親ドメインをこのフィールドに渡して、単一の共有 Cookie を使用します。
ux_mode 「Google でログイン」ボタンの UX フロー
allowed_parent_origin 中間 iframe の埋め込みを許可するオリジンこのフィールドが存在する場合、ワンタップは中間 iframe モードで実行されます。
intermediate_iframe_close_callback ユーザーがワンタップを手動で終了した場合の、デフォルトの中間 iframe の動作をオーバーライドします。
itp_support ITP ブラウザでアップグレードされた One Tap UX を有効にします。

client_id

このフィールドは、アプリケーションのデベロッパー ID です。この ID は Google Developers Console で確認、作成されます。詳しくは、次の表をご覧ください。

種類 必須
文字列 client_id: "CLIENT_ID.apps.googleusercontent.com"

自動選択

このフィールドは、以前にアプリを承認した Google セッションが 1 つしかない場合に、ID トークンが自動的にユーザーの操作なしで返されるかどうかを決定します。デフォルト値は false です。詳細については、次の表をご覧ください。

種類 必須
boolean 任意 auto_select: true

callback

このフィールドは、ワンタップ プロンプトまたはポップアップ ウィンドウから返される ID トークンを処理する JavaScript 関数です。Google ワンタップまたは [Google でログイン] ボタン popup UX モードを使用する場合、この属性は必須です。 詳しくは、次の表をご覧ください。

種類 必須
関数 ワンタップと popup UX モードでは必須 callback: handleResponse

login_uri

この属性は、ログイン エンドポイントの URI です。現在のページがログインページの場合、デフォルトでは認証情報がこのページに送信されます。

ユーザーが「Google でログイン」ボタンをクリックし、リダイレクトの UX モードが使用されると、ID トークンの認証情報レスポンスがログイン エンドポイントに送信されます。

詳しくは、次の表をご覧ください。

種類 任意
URL デフォルトは現在のページの URI、または指定した値です。
ux_mode: "redirect" が設定されている場合にのみ使用されます。
login_uri="https://www.example.com/login"

ログイン エンドポイントは、本文に ID トークン値を含む credential キーを含む POST リクエストを処理する必要があります。

ログイン エンドポイントへのリクエストの例を次に示します。

POST /login HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-form-urlencoded

credential=ID_TOKEN

ネイティブ コールバック

このフィールドは、ブラウザのネイティブ認証情報マネージャーから返されたパスワード認証情報を処理する JavaScript 関数の名前です。詳細については、次の表をご覧ください。

種類 必須
関数 任意 native_callback: handleResponse

cancel_on_tap_outside

このフィールドは、ユーザーがプロンプトの外側をクリックしたときにワンタップ リクエストをキャンセルするかどうかを設定します。デフォルト値は true です。値を false に設定すると、この機能を無効にできます。詳しくは、次の表をご覧ください。

種類 必須
boolean 任意 cancel_on_tap_outside: false

プロンプト ID

この属性は、コンテナ要素の DOM ID を設定します。設定されていない場合は、ウィンドウの右上にワンタップのプロンプトが表示されます。詳細については、次の表をご覧ください。

種類 必須
文字列 任意 prompt_parent_id: 'parent_id'

nonce

このフィールドは、リプレイ攻撃を防ぐために ID トークンで使用されるランダムな文字列です。詳しくは、次の表をご覧ください。

種類 必須
文字列 任意 nonce: "biaqbm70g23"

ノンスの長さは、環境でサポートされている JWT の最大サイズと、個々のブラウザとサーバーの HTTP サイズの制約に制限されています。

context

このフィールドでは、ワンタップ プロンプトのタイトルとメッセージのテキストを変更します。詳しくは、次の表をご覧ください。

種類 必須
文字列 任意 context: "use"

次の表に、使用可能なコンテキストとその説明を示します。

コンテキスト
signin 「Google でログイン」
signup 「Google で登録」
use 「Google で使用」

親ドメインとそのサブドメインに One Tap を表示する必要がある場合は、このフィールドに親ドメインを渡して、共有 Cookie を 1 つだけ使用します。詳しくは、次の表をご覧ください。

種類 必須
文字列 任意 state_cookie_domain: "example.com"

UX モード

このフィールドを使用して、「Google でログイン」ボタンで使用する UX フローを設定します。デフォルト値は popup です。この属性は、OneTap の UX には影響しません。詳細については、次の表をご覧ください。

種類 必須
文字列 任意 ux_mode: "redirect"

次の表に、利用可能な UX モードとその説明を示します。

UX モード
popup ポップアップ ウィンドウでログイン UX フローを実行します。
redirect ページ全体にリダイレクトしてログインの UX フローを実行します。

allowed_parent_origin

中間 iframe の埋め込みを許可するオリジンこのフィールドが存在する場合、ワンタップは中間 iframe モードで実行されます。詳細については、次の表をご覧ください。

種類 必須
文字列または文字列配列 任意 allowed_parent_origin: "https://example.com"

次の表に、サポートされている値の型と説明を示します。

値の型
string 単一のドメイン URI。 "https://example.com"
string array ドメイン URI の配列。 ["https://news.example.com", "https://local.example.com"]

ワイルドカード接頭辞もサポートされます。たとえば、"https://*.example.com" は、すべてのレベルで example.com とそのサブドメイン(news.example.comlogin.news.example.com など)と一致します。ワイルドカードを使用する際には、次の点に注意してください。

  • パターン文字列は、ワイルドカードとトップレベル ドメインのみで構成することはできません。たとえば、https://*.comhttps://*.co.uk は無効です。前述のとおり、"https://*.example.com"example.com とそのサブドメインに一致します。また、配列を使用して 2 つの異なるドメインを表すこともできます。たとえば、["https://example1.com", "https://*.example2.com"] はドメイン example1.comexample2.comexample2.com のサブドメインに一致します
  • ワイルドカード ドメインは、安全な https:// スキームで始める必要があります。"*.example.com" は無効とみなされます。

allowed_parent_origin フィールドの値が無効の場合、中間 iframe モードのワンタップの初期化は失敗し、停止します。

中間_iframe_close_callback

ユーザーがワンタップ UI で ' X' ボタンをタップすることにより、手動でワンタップを閉じたときのデフォルトの中間 iframe 動作をオーバーライドします。デフォルトの動作では、中間 iframe は直ちに DOM から削除されます。

intermediate_iframe_close_callback フィールドは、中間 iframe モードでのみ有効になります。また、影響があるのは One Tap iframe ではなく中間 iframe のみです。コールバックが呼び出される前に、One Tap UI が削除されます。

種類 必須
関数 任意 intermediate_iframe_close_callback: logBeforeClose

itp_support

このフィールドは、Intelligent Tracking Prevention(ITP)をサポートするブラウザで、アップグレードされた One Tap UX を有効にするかどうかを決定します。デフォルト値は false です。詳しくは、次の表をご覧ください。

種類 必須
boolean 任意 itp_support: true

メソッド: google.accounts.id.prompt

google.accounts.id.prompt メソッドは、initialize() メソッドが呼び出された後、ワンタップ プロンプトまたはブラウザのネイティブ認証情報マネージャーを表示します。メソッドの次のコード例をご覧ください。

 google.accounts.id.prompt(/**
 @type{(function(!PromptMomentNotification):void)=} */ momentListener)

通常、ページ読み込み時に prompt() メソッドが呼び出されます。Google 側のセッション ステータスとユーザー設定により、ワンタップのプロンプト UI が表示されない場合があります。UI ステータスに関する通知をさまざまなタイミングで受け取るには、UI ステータス通知を受信する関数を渡します。

通知が発生するタイミングは以下のとおりです。

  • 表示モーメント: prompt() メソッドが呼び出された後に発生します。通知には、UI が表示されるかどうかを示すブール値が含まれます。
  • スキップされた瞬間: 自動キャンセル、手動キャンセル、または Google が認証情報の発行に失敗した(選択したセッションが Google からログアウトしたなど)によって One Tap プロンプトが閉じられた場合に表示されます。

    そのような場合は、次の ID プロバイダがある場合は、次の手順に進みます。

  • 拒否モーメント: Google が認証情報を取得するか、ユーザーが認証情報取得フローを停止しようとした場合に発生します。たとえば、ユーザーがログイン ダイアログにユーザー名とパスワードを入力し始めると、google.accounts.id.cancel() メソッドを呼び出してワンタップ プロンプトを閉じて、閉じたタイミングをトリガーできます。

次のコードサンプルは、スキップされたモーメントを実装します。

<script>
  window.onload = function () {
    google.accounts.id.initialize(...);
    google.accounts.id.prompt((notification) => {
      if (notification.isNotDisplayed() || notification.isSkippedMoment()) {
        // continue with another identity provider.
      }
    });
  };
</script>

データの種類: PromptMomentNotification

次の表に、PromptMomentNotification データ型のメソッドと説明を示します。

方法
isDisplayMoment() これは通知の表示用ですか?
isDisplayed() この通知は表示されている時間で、UI が表示されていますか?
isNotDisplayed() この通知は一瞬だけ表示され、UI は表示されませんか?
getNotDisplayedReason()

UI が表示されない詳細な理由。使用できる値は次のとおりです。

  • browser_not_supported
  • invalid_client
  • missing_client_id
  • opt_out_or_no_session
  • secure_http_required
  • suppressed_by_user
  • unregistered_origin
  • unknown_reason
isSkippedMoment() この通知はスキップされたタイミングですか?
getSkippedReason()

スキップされた理由の詳細な理由。使用できる値は次のとおりです。

  • auto_cancel
  • user_cancel
  • tap_outside
  • issuing_failed
isDismissedMoment() この通知は閉じられた時間のものですか?
getDismissedReason()

拒否する詳細な理由。使用できる値は次のとおりです。

  • credential_returned
  • cancel_called
  • flow_restarted
getMomentType()

モーメント タイプの文字列を返します。使用できる値は次のとおりです。

  • display
  • skipped
  • dismissed

データの種類: CredentialResponse

callback 関数が呼び出されると、CredentialResponse オブジェクトがパラメータとして渡されます。次の表に、認証情報レスポンス オブジェクトに含まれるフィールドを示します。

項目
credential このフィールドは、返された ID トークンです。
select_by このフィールドでは、認証情報の選択方法を設定します。

認証情報

このフィールドは、Base64 でエンコードされた JSON ウェブトークン(JWT)文字列としての ID トークンです。

デコードされると、JWT は次の例のようになります。

header
{
  "alg": "RS256",
  "kid": "f05415b13acb9590f70df862765c655f5a7a019e", // JWT signature
  "typ": "JWT"
}
payload
{
  "iss": "https://accounts.google.com", // The JWT's issuer
  "nbf":  161803398874,
  "aud": "314159265-pi.apps.googleusercontent.com", // Your server's client ID
  "sub": "3141592653589793238", // The unique ID of the user's Google Account
  "hd": "gmail.com", // If present, the host domain of the user's GSuite email address
  "email": "elisa.g.beckett@gmail.com", // The user's email address
  "email_verified": true, // true, if Google has verified the email address
  "azp": "314159265-pi.apps.googleusercontent.com",
  "name": "Elisa Beckett",
                            // If present, a URL to user's profile picture
  "picture": "https://lh3.googleusercontent.com/a-/e2718281828459045235360uler",
  "given_name": "Elisa",
  "family_name": "Beckett",
  "iat": 1596474000, // Unix timestamp of the assertion's creation time
  "exp": 1596477600, // Unix timestamp of the assertion's expiration time
  "jti": "abc161803398874def"
}

sub フィールドには、Google アカウントにグローバルに一意の識別子が含まれます。

emailemail_verifiedhd フィールドを使用して、Google がメールアドレスをホストしているか、権威メールアドレスであるかを確認できます。Google が権威を有する場合、ユーザーは現在、正当なアカウント所有者であると言えます。

Google が信頼できるケース:

  • email には @gmail.com 接尾辞が付いています。これは Gmail アカウントです。
  • email_verified が true で、hd が設定されている場合、これは G Suite アカウントです。

ユーザーは Gmail または G Suite を使用せずに Google アカウントに登録できます。email@gmail.com サフィックスがなく、hd が存在しない場合、Google は信頼できるとみなされず、ユーザーを確認するパスワードなどの本人確認方法をおすすめします。email_verfied は、Google アカウントの作成時に Google によって最初にユーザーが確認されたものの、サードパーティのメール アカウントの所有権が変更されている可能性があるためです。

select_by

次の表に、select_by フィールドに指定できる値を示します。ボタンの種類は、セッションや同意状況とともに使用され、値の設定に使用されます。

  • ユーザーがワンタップまたは「Google でログイン」ボタンを押した場合、またはタッチレス自動ログイン プロセスを使用した場合。

  • 既存のセッションが見つかったか、ユーザーが Google アカウントを選択してログインし、新しいセッションを確立しました。

  • ID トークンの認証情報をアプリと共有する前のユーザーは、以下のいずれかになります。

    • [確認] ボタンを押して、認証情報の共有に同意する
    • 以前に同意し、アカウントを使用して Google アカウントを選択している。

このフィールドの値は、次のいずれかのタイプに設定されます。

Value 説明
auto 認証情報の共有に同意済みの既存のセッションを持つユーザーの自動ログイン。
user 以前に同意を与えた既存のセッションがあるユーザーが、ワンタップの [続行] ボタンを押して認証情報を共有した。
user_1tap 既存のセッションを持つユーザーが、ワンタップで [同意して続行] ボタンを押して同意し、認証情報を共有する。Chrome v75 以降にのみ適用されます。
user_2tap 既存のセッションのないユーザーは、ワンタップでアカウントを選択してから、ポップアップ ウィンドウで [確認] ボタンを押して同意に同意し、認証情報を共有します。Chromium 以外のブラウザに適用されます。
btn 以前にセッションを承諾したユーザーは、[Google でログイン] ボタンを押し、Google アカウントを選択して [認証情報を選択] から認証情報を共有します。
btn_confirm 既存のセッションを持つユーザーが [Google でログイン] ボタンを押し、[確認] ボタンを押して同意し、認証情報を共有する。
btn_add_session 既存のセッションに同意していないユーザーが、Google でログインボタンを押し、Google アカウントを選択して認証情報を共有した場合。
btn_confirm_add_session 既存のセッションのないユーザーは、まず [Google でログイン] ボタンをクリックして Google アカウントを選択し、確認ボタンを押して同意し、認証情報を共有します。

メソッド: google.accounts.id.renderButton

google.accounts.id.renderButton メソッドは、ウェブページの [Google でログイン] ボタンをレンダリングします。

メソッドの次のコード例をご覧ください。

google.accounts.id.renderButton(
      /** @type{!HTMLElement} */ parent,
      /** @type{!GsiButtonConfiguration} */ options
    )

データの種類: GsiButtonConfiguration

次の表に、GsiButtonConfiguration データ型のフィールドと説明を示します。

属性
type ボタンのタイプ: アイコン、または標準のボタン。
theme ボタンのテーマ。たとえば、fill_blue や fill_black などが該当します。
size ボタンのサイズ。たとえば、小規模や大規模。
text ボタン テキスト。(例:「Google でログイン」)または「Google で登録」。
shape ボタンの形。例: 長方形、円形。
logo_alignment Google ロゴの配置: 左または中央
width ボタンの幅(ピクセル単位)
locale 設定すると、ボタン言語がレンダリングされます。

属性タイプ

以降のセクションでは、各属性のタイプの詳細と例について説明します。

タイプ

ボタンのタイプ。デフォルト値は standard です。

詳しくは、次の表をご覧ください。

種類 必須
文字列 type: "icon"

次の表に、使用可能なボタンのタイプとその説明を示します。

種類
standard テキストやパーソナライズされた情報を含むボタン:
icon テキストのないアイコンボタン:

テーマ別

ボタンのテーマ。デフォルト値は outline です。詳細については、次の表をご覧ください。

種類 必須
文字列 任意 theme: "filled_blue"

次の表に、使用可能なテーマとその説明を示します。

テーマ
outline 標準のボタンテーマ:
filled_blue 青い塗りつぶしのボタンのテーマ:
filled_black 黒い塗りつぶしのボタンのテーマ:

サイズ

ボタンのサイズ。デフォルト値は large です。詳細については、次の表をご覧ください。

種類 必須
文字列 任意 size: "small"

次の表に、利用可能なボタンのサイズとその説明を示します。

サイズ
large 大きいボタン:
大きな標準ボタン 大きなアイコンボタン カスタマイズされた、大きなボタン
medium 中規模のボタン:
中程度の標準ボタン 中程度のアイコンボタン
small 小さいボタン:
小さなボタン 小さなアイコンボタン

text

ボタン テキスト。デフォルト値は signin_with です。text 属性が異なるアイコンボタンのテキストの視覚的な違いはありません。 唯一の例外は、テキストが画面のアクセシビリティのために読み取られる場合です。

詳しくは、次の表をご覧ください。

種類 必須
文字列 任意 text: "signup_with"

次の表に、利用可能なボタンテキストとその説明を示します。

テキスト
signin_with ボタンのテキストは「Google でログイン」です。
signup_with ボタンのテキストは「Sign up with Google」です。
continue_with ボタンのテキストは「Continue with Google」です。
signin ボタンのテキストは [ログイン] です。

shape

ボタンの形。デフォルト値は rectangular です。詳細については、次の表をご覧ください。

種類 必須
文字列 任意 shape: "rectangular"

次の表に、利用可能なボタンの形状とその説明を示します。

rectangular 長方形のボタン。icon ボタンタイプに使用する場合、square と同じです。
pill 錠剤の形をしたボタン。icon ボタンタイプに使用する場合、circle と同じです。
circle 円形のボタン。standard ボタンタイプに使用する場合、pill と同じです。
square 正方形のボタン。standard ボタンタイプに使用する場合、rectangular と同じです。

logo_alignment

Google ロゴの配置。デフォルト値は left です。この属性は、standard ボタンタイプにのみ適用されます。詳細については、次の表をご覧ください。

種類 必須
文字列 任意 logo_alignment: "center"

次の表に、利用可能なアライメントとその説明を示します。

logo_alignment
left Google ロゴを左揃えにします。
center Google ロゴが中央揃えで表示されます。

ボタンの最小幅(ピクセル単位)。幅の最大値は 400 ピクセルです。

詳しくは、次の表をご覧ください。

種類 必須
文字列 任意 width: 400

locale

ボタンテキストの事前設定された言語 / 地域。設定されていない場合は、ブラウザのデフォルトの言語 / 地域または Google セッション ユーザーの設定が使用されます。そのため、ローカライズされたボタンのバージョンがユーザーごとに異なることがあります。また、サイズも異なる場合があります。

詳しくは、次の表をご覧ください。

種類 必須
文字列 任意 locale: "zh_CN"

データの種類: 認証情報

native_callback 関数が呼び出されると、Credential オブジェクトがパラメータとして渡されます。次の表に、オブジェクトに含まれるフィールドを示します。

項目
id ユーザーを識別します。
password パスワード

メソッド: google.accounts.id.disableAutoSelect

ユーザーがウェブサイトからログアウトしたら、google.accounts.id.disableAutoSelect メソッドを呼び出して、ステータスを Cookie に記録する必要があります。これにより、UX のデッドループが回避されます。メソッドの次のコード スニペットをご覧ください。

google.accounts.id.disableAutoSelect()

次のコードサンプルでは、onSignout() 関数を指定して google.accounts.id.disableAutoSelect メソッドを実装しています。

<script>
  function onSignout() {
    google.accounts.id.disableAutoSelect();
  }
</script>

メソッド: google.accounts.id.storeCredential

このメソッドは、ブラウザのネイティブの認証情報マネージャー API の store() メソッドのシンプルなラッパーです。したがって、パスワード認証情報の保存にのみ使用できます。メソッドの次のコード例をご覧ください。

google.accounts.id.storeCredential(Credential, callback)

次のコードサンプルでは、onSignIn() 関数を指定して google.accounts.id.storeCredential メソッドを実装しています。

<script>
  function onSignIn() {
    let cred = {id: '...', password: '...'};
    google.accounts.id.storeCredential(cred);
  }
</script>

メソッド: google.accounts.id.cancel

証明書利用者の DOM からプロンプトを削除すると、ワンタップ フローをキャンセルできます。認証情報がすでに選択されている場合、キャンセル オペレーションは無視されます。メソッドの次のコード例をご覧ください。

google.accounts.id.cancel()

次のコードサンプルでは、onNextButtonClicked() 関数を指定して google.accounts.id.cancel() メソッドを実装しています。

<script>
  function onNextButtonClicked() {
    google.accounts.id.cancel();
    showPasswordPage();
  }
</script>

ライブラリ読み込みコールバック: onGoogleLibraryLoad

onGoogleLibraryLoad コールバックを登録できます。「Google でログイン」JavaScript ライブラリが読み込まれると、通知されます。

window.onGoogleLibraryLoad = () => {
    ...
};

このコールバックは window.onload コールバックのショートカットにすぎません。動作に違いはありません。

次のコードサンプルは、onGoogleLibraryLoad コールバックを実装しています。

<script>
  window.onGoogleLibraryLoad = () => {
   google.accounts.id.initialize({
     ...
   });
   google.accounts.id.prompt();
  };
</script>

メソッド: google.accounts.id.revoke

google.accounts.id.revoke メソッドは、指定したユーザーの ID トークンの共有に使用された OAuth 権限を取り消します。メソッドの次のコード スニペットをご覧ください。google.accounts.id.revoke(hint, callback)

パラメータ 種類 説明
hint 文字列 ユーザーの Google アカウントのメールアドレスまたは一意の ID。ID は、認証情報ペイロードの sub プロパティです。
callback 関数 オプションの RevocationResponse ハンドラ。

次のコードサンプルは、revoke メソッドを ID とともに使用する方法を示しています。

  google.accounts.id.revoke('1618033988749895', done => {
    console.log(done.error);
  });

データの種類: RevocationResponse

callback 関数が呼び出されると、RevocationResponse オブジェクトがパラメータとして渡されます。次の表に、取り消しレスポンス オブジェクトに含まれるフィールドを示します。

項目
successful このフィールドは、メソッド呼び出しの戻り値です。
error このフィールドには、必要に応じて詳細なエラー レスポンス メッセージが含まれます。

成功

このフィールドは、取り消しメソッドの呼び出しが成功した場合は true に設定され、失敗した場合は false に設定されるブール値です。

エラー

このフィールドは文字列値であり、取り消しメソッド呼び出しが失敗した場合、詳細なエラー メッセージが含まれます。成功時には未定義になります。