BrowserContext
BrowserContext は、複数の独立したブラウザセッションを操作する方法を提供します。
ページが、例えば window.open
の呼び出しで別のページを開くと、ポップアップは親ページのブラウザコンテキストに属します。
Playwright は、browser.newContext()
メソッドで、分離された非永続的なブラウザコンテキストを作成することを許可します。非永続的なブラウザコンテキストは、ブラウジングデータをディスクに書き込みません。
// Create a new incognito browser context
const context = await browser.newContext();
// Create a new page inside context.
const page = await context.newPage();
await page.goto('https://example.com');
// Dispose context once it's no longer needed.
await context.close();
メソッド
addCookies
v1.9より前に追加このブラウザコンテキストにクッキーを追加します。このコンテキスト内のすべてのページにはこれらのクッキーがインストールされます。クッキーは browserContext.cookies()
を介して取得できます。
使用法
await browserContext.addCookies([cookieObject1, cookieObject2]);
引数
cookies
Array<Object>#-
name
string -
value
string -
url
string (オプション)url または domain / path のいずれかが必要です。オプション。
-
domain
string (オプション)クッキーをすべてのサブドメインにも適用するには、ドメインの前にピリオドを付けます (例: ".example.com")。url または domain / path のいずれかが必要です。オプション。
-
path
string (オプション)url または domain / path のいずれかが必要です。オプション。
-
expires
number (オプション)Unix時間(秒)。オプション。
-
httpOnly
boolean (オプション)オプション。
-
secure
boolean (オプション)オプション。
-
sameSite
"Strict" | "Lax" | "None" (オプション)オプション。
-
戻り値
addInitScript
v1.9より前に追加以下のいずれかのシナリオで評価されるスクリプトを追加します
- ブラウザコンテキストでページが作成されるか、またはナビゲートされるたびに。
- ブラウザコンテキスト内の任意のページで子フレームがアタッチされるか、またはナビゲートされるたびに。この場合、スクリプトは新しくアタッチされたフレームのコンテキストで評価されます。
スクリプトは、ドキュメントが作成された後、かつそのスクリプトが実行される前に評価されます。これは、JavaScript 環境を修正するために役立ちます。例えば、Math.random
のシードを設定する場合などです。
使用法
ページ読み込み前に Math.random
をオーバーライドする例
// preload.js
Math.random = () => 42;
// In your playwright script, assuming the preload.js file is in same directory.
await browserContext.addInitScript({
path: 'preload.js'
});
browserContext.addInitScript()
および page.addInitScript()
を介してインストールされた複数のスクリプトの評価順序は定義されていません。
引数
-
script
function | string | Object#-
path
string (オプション)JavaScriptファイルへのパス。
path
が相対パスの場合、現在の作業ディレクトリを基準に解決されます。オプション。 -
content
string (オプション)生のスクリプトコンテンツ。オプション。
ブラウザコンテキスト内のすべてのページで評価されるスクリプト。
-
-
arg
Serializable (オプション)#script
に渡すオプションの引数(関数を渡す場合にのみサポートされます)。
戻り値
backgroundPages
追加バージョン: v1.11バックグラウンドページは Chromium ベースのブラウザでのみサポートされています。
コンテキスト内の既存のすべてのバックグラウンドページ。
使用法
browserContext.backgroundPages();
戻り値
browser
v1.9より前に追加コンテキストのブラウザインスタンスを返します。永続的なコンテキストとして起動された場合は null が返されます。
使用法
browserContext.browser();
戻り値
clearCookies
v1.9より前に追加コンテキストからクッキーを削除します。オプションのフィルターを受け入れます。
使用法
await context.clearCookies();
await context.clearCookies({ name: 'session-id' });
await context.clearCookies({ domain: 'my-origin.com' });
await context.clearCookies({ domain: /.*my-origin\.com/ });
await context.clearCookies({ path: '/api/v1' });
await context.clearCookies({ name: 'session-id', domain: 'my-origin.com' });
引数
options
Object (オプション)
戻り値
clearPermissions
v1.9より前に追加ブラウザコンテキストのすべてのパーミッションオーバーライドをクリアします。
使用法
const context = await browser.newContext();
await context.grantPermissions(['clipboard-read']);
// do stuff ..
context.clearPermissions();
戻り値
close
v1.9より前に追加ブラウザコンテキストを閉じます。ブラウザコンテキストに属するすべてのページが閉じられます。
デフォルトのブラウザコンテキストは閉じることができません。
使用法
await browserContext.close();
await browserContext.close(options);
引数
戻り値
cookies
v1.9より前に追加URLが指定されていない場合、このメソッドはすべてのクッキーを返します。URLが指定されている場合、それらのURLに影響するクッキーのみが返されます。
使用法
await browserContext.cookies();
await browserContext.cookies(urls);
引数
戻り値
exposeBinding
v1.9より前に追加このメソッドは、コンテキスト内のすべてのページのすべてのフレームの window
オブジェクトに name
という関数を追加します。呼び出されると、この関数は callback
を実行し、callback
の戻り値に解決される Promise を返します。callback
が Promise を返す場合、それは待機されます。
callback
関数の最初の引数には、呼び出し元に関する情報が含まれます: { browserContext: BrowserContext, page: Page, frame: Frame }
。
ページのみのバージョンについては page.exposeBinding()
を参照してください。
使用法
コンテキスト内のすべてのページのすべてのフレームにページURLを公開する例
const { webkit } = require('playwright'); // Or 'chromium' or 'firefox'.
(async () => {
const browser = await webkit.launch({ headless: false });
const context = await browser.newContext();
await context.exposeBinding('pageURL', ({ page }) => page.url());
const page = await context.newPage();
await page.setContent(`
<script>
async function onClick() {
document.querySelector('div').textContent = await window.pageURL();
}
</script>
<button onclick="onClick()">Click me</button>
<div></div>
`);
await page.getByRole('button').click();
})();
引数
-
window オブジェクト上の関数の名前。
-
Playwright のコンテキストで呼び出されるコールバック関数。
-
options
Object (オプション)
戻り値
exposeFunction
v1.9より前に追加このメソッドは、コンテキスト内のすべてのページのすべてのフレームの window
オブジェクトに name
という関数を追加します。呼び出されると、この関数は callback
を実行し、callback
の戻り値に解決される Promise を返します。
callback
が Promise を返す場合、それは待機されます。
ページのみのバージョンについては page.exposeFunction()
を参照してください。
使用法
コンテキスト内のすべてのページに sha256
関数を追加する例
const { webkit } = require('playwright'); // Or 'chromium' or 'firefox'.
const crypto = require('crypto');
(async () => {
const browser = await webkit.launch({ headless: false });
const context = await browser.newContext();
await context.exposeFunction('sha256', text =>
crypto.createHash('sha256').update(text).digest('hex'),
);
const page = await context.newPage();
await page.setContent(`
<script>
async function onClick() {
document.querySelector('div').textContent = await window.sha256('PLAYWRIGHT');
}
</script>
<button onclick="onClick()">Click me</button>
<div></div>
`);
await page.getByRole('button').click();
})();
引数
戻り値
grantPermissions
v1.9より前に追加ブラウザコンテキストに指定されたパーミッションを付与します。指定された場合、対応するパーミッションを特定のオリジンにのみ付与します。
使用法
await browserContext.grantPermissions(permissions);
await browserContext.grantPermissions(permissions, options);
引数
-
付与するパーミッションのリスト。
危険サポートされているパーミッションはブラウザによって異なり、同じブラウザの異なるバージョン間でも異なります。アップデート後、一部のパーミッションが動作しなくなる可能性があります。
一部のブラウザでサポートされる可能性があるパーミッションを以下に示します
'accelerometer'
'ambient-light-sensor'
'background-sync'
'camera'
'clipboard-read'
'clipboard-write'
'geolocation'
'gyroscope'
'magnetometer'
'microphone'
'midi-sysex'
(system-exclusive midi)'midi'
'notifications'
'payment-handler'
'storage-access'
-
options
Object (オプション)-
パーミッションを付与するオリジン(例: "https://example.com")。
-
戻り値
newCDPSession
追加バージョン: v1.11CDPセッションはChromiumベースのブラウザでのみサポートされています。
新しく作成されたセッションを返します。
使用法
await browserContext.newCDPSession(page);
引数
-
新しいセッションを作成するターゲット。下位互換性のために、このパラメータは
page
と名付けられていますが、Page
またはFrame
型にすることができます。
戻り値
newPage
v1.9より前に追加ブラウザコンテキストに新しいページを作成します。
使用法
await browserContext.newPage();
戻り値
pages
v1.9より前に追加コンテキスト内のすべての開いているページを返します。
使用法
browserContext.pages();
戻り値
removeAllListeners
追加バージョン: v1.47指定されたタイプのすべてのリスナー(またはタイプが指定されていない場合は登録されているすべてのリスナー)を削除します。非同期リスナーの完了を待機したり、これらのリスナーからのその後のエラーを無視したりできます。
使用法
await browserContext.removeAllListeners();
await browserContext.removeAllListeners(type, options);
引数
type
string (オプション)#options
Object (オプション)-
behavior
"wait" | "ignoreErrors" | "default" (オプション)#既に実行中のリスナーを待機するかどうか、およびエラーがスローされた場合の対処方法を指定します
'default'
- 現在のリスナー呼び出し(ある場合)の終了を待機しません。リスナーがエラーをスローした場合、未処理のエラーになる可能性があります'wait'
- 現在のリスナー呼び出し(ある場合)の終了を待機します'ignoreErrors'
- 現在のリスナー呼び出し(ある場合)の終了を待機しません。削除後にリスナーによってスローされたすべてのエラーは、静かに捕捉されます
-
戻り値
route
v1.9より前に追加ルーティングは、ブラウザコンテキスト内の任意のページによって行われるネットワークリクエストを変更する機能を提供します。ルーティングが有効になると、URLパターンに一致するすべてのリクエストは、続行、完了、または中止されない限り、停止します。
browserContext.route()
は、Service Worker によって傍受されたリクエストを傍受しません。この問題を参照してください。リクエスト傍受を使用する場合は、serviceWorkers
を 'block'
に設定して Service Worker を無効にすることをお勧めします。
使用法
すべての画像リクエストを中止する単純なハンドラの例
const context = await browser.newContext();
await context.route('**/*.{png,jpg,jpeg}', route => route.abort());
const page = await context.newPage();
await page.goto('https://example.com');
await browser.close();
または、代わりに正規表現パターンを使用する同じスニペット
const context = await browser.newContext();
await context.route(/(\.png$)|(\.jpg$)/, route => route.abort());
const page = await context.newPage();
await page.goto('https://example.com');
await browser.close();
リクエストを調べてルーティングアクションを決定することができます。例えば、特定のPOSTデータを含むすべてのリクエストをモックし、その他のすべてのリクエストはそのままにする場合などです
await context.route('/api/**', async route => {
if (route.request().postData().includes('my-string'))
await route.fulfill({ body: 'mocked-data' });
else
await route.continue();
});
ページルーティング(page.route()
で設定)は、リクエストが両方のハンドラに一致する場合、ブラウザコンテキストルーティングよりも優先されます。
ハンドラ付きのルートを削除するには、browserContext.unroute()
を使用できます。
ルーティングを有効にすると、HTTPキャッシュが無効になります。
引数
-
url
string | RegExp | function(URL):boolean#ルーティング中に一致させる URL を受け取るグロブパターン、正規表現パターン、または述語。コンテキストオプションで
baseURL
が設定されており、提供されたURLが*
で始まらない文字列の場合、new URL()
コンストラクターを使用して解決されます。 -
handler
function(Route, Request):Promise<Object> | Object#リクエストをルーティングするハンドラ関数。
-
options
Object (オプション)
戻り値
routeFromHAR
追加バージョン: v1.23指定した場合、コンテキストで行われるネットワークリクエストは HAR ファイルから提供されます。HARからのリプレイについて詳しくはこちらをご覧ください。
Playwright は、Service Worker によって傍受されたリクエストを HAR ファイルから提供しません。この問題を参照してください。リクエスト傍受を使用する場合は、serviceWorkers
を 'block'
に設定して Service Worker を無効にすることをお勧めします。
使用法
await browserContext.routeFromHAR(har);
await browserContext.routeFromHAR(har, options);
引数
-
事前に記録されたネットワークデータを含む HAR ファイルへのパス。
path
が相対パスの場合、現在の作業ディレクトリを基準に解決されます。 -
options
Object (オプション)-
notFound
"abort" | "fallback" (オプション)#- 「abort」に設定されている場合、HAR ファイルで見つからないリクエストは中止されます。
- 「fallback」に設定されている場合、ハンドラチェーンの次のルートハンドラにフォールバックします。
デフォルトは abort です。
-
指定した場合、ファイルから提供する代わりに、実際のネットワーク情報で指定された HAR を更新します。ファイルは
browserContext.close()
が呼び出されたときにディスクに書き込まれます。 -
updateContent
"embed" | "attach" (オプション)追加バージョン: v1.32#リソースコンテンツ管理を制御するオプションの設定。
attach
が指定されている場合、リソースは個別のファイルまたはZIPアーカイブ内のエントリとして永続化されます。embed
が指定されている場合、コンテンツは HAR ファイル内にインラインで保存されます。 -
updateMode
"full" | "minimal" (オプション)追加バージョン: v1.32#minimal
に設定すると、HAR からのルーティングに必要な情報のみが記録されます。これにより、HAR からリプレイする際に使用されないサイズ、タイミング、ページ、クッキー、セキュリティ、その他の種類の HAR 情報は省略されます。デフォルトはminimal
です。 -
リクエストURLに一致するグロブパターン、正規表現、または述語。パターンに一致するURLを持つリクエストのみがHARファイルから提供されます。指定しない場合、すべてのリクエストがHARファイルから提供されます。
-
戻り値
routeWebSocket
追加バージョン: v1.48このメソッドは、ブラウザコンテキスト内の任意のページによって行われるWebSocket接続を変更することを可能にします。
このメソッドが呼び出された後に作成された WebSocket
のみがルーティングされることに注意してください。ページを作成する前にこのメソッドを呼び出すことをお勧めします。
使用法
以下は、一部のWebSocketメッセージをブロックする単純なハンドラの例です。詳細と例については WebSocketRoute を参照してください。
await context.routeWebSocket('/ws', async ws => {
ws.routeSend(message => {
if (message === 'to-be-blocked')
return;
ws.send(message);
});
await ws.connect();
});
引数
-
url
string | RegExp | function(URL):boolean#このパターンに一致するURLを持つWebSocketのみがルーティングされます。文字列パターンは
baseURL
コンテキストオプションに対して相対的に指定できます。 -
handler
function(WebSocketRoute):Promise<Object> | Object#WebSocketをルーティングするハンドラ関数。
戻り値
serviceWorkers
追加バージョン: v1.11サービスワーカーは Chromium ベースのブラウザでのみサポートされています。
コンテキスト内の既存のすべてのサービスワーカー。
使用法
browserContext.serviceWorkers();
戻り値
setDefaultNavigationTimeout
v1.9より前に追加この設定は、以下のメソッドおよび関連するショートカットのデフォルトの最大ナビゲーション時間を変更します
使用法
browserContext.setDefaultNavigationTimeout(timeout);
引数
setDefaultTimeout
v1.9より前に追加この設定は、timeout
オプションを受け入れるすべてのメソッドのデフォルトの最大時間を変更します。
使用法
browserContext.setDefaultTimeout(timeout);
引数
setExtraHTTPHeaders
v1.9より前に追加追加のHTTPヘッダーは、コンテキスト内の任意のページによって開始されたすべてのリクエストとともに送信されます。これらのヘッダーは、page.setExtraHTTPHeaders()
で設定されたページ固有の追加HTTPヘッダーとマージされます。ページが特定のヘッダーをオーバーライドした場合、ブラウザコンテキストヘッダー値の代わりにページ固有のヘッダー値が使用されます。
browserContext.setExtraHTTPHeaders()
は、送信リクエストのヘッダーの順序を保証しません。
使用法
await browserContext.setExtraHTTPHeaders(headers);
引数
戻り値
setGeolocation
v1.9より前に追加コンテキストのジオロケーションを設定します。null
または undefined
を渡すと、位置情報が利用できない状態をエミュレートします。
使用法
await browserContext.setGeolocation({ latitude: 59.95, longitude: 30.31667 });
ブラウザコンテキストのページにジオロケーションを読み取るパーミッションを付与するには、browserContext.grantPermissions()
の使用を検討してください。
引数
戻り値
setOffline
v1.9より前に追加使用法
await browserContext.setOffline(offline);
引数
戻り値
storageState
v1.9より前に追加このブラウザコンテキストのストレージ状態を返します。現在のクッキー、ローカルストレージのスナップショット、IndexedDBのスナップショットが含まれます。
使用法
await browserContext.storageState();
await browserContext.storageState(options);
引数
options
Object (オプション)
戻り値
unroute
v1.9より前に追加browserContext.route()
で作成されたルートを削除します。handler
が指定されていない場合、url
のすべてのルートを削除します。
使用法
await browserContext.unroute(url);
await browserContext.unroute(url, handler);
引数
-
url
string | RegExp | function(URL):boolean#browserContext.route()
でルーティングを登録するために使用される URL を受け取るグロブパターン、正規表現パターン、または述語。 -
handler
function(Route, Request):Promise<Object> | Object (オプション)#browserContext.route()
でルーティングを登録するために使用されるオプションのハンドラ関数。
戻り値
unrouteAll
追加バージョン: v1.41browserContext.route()
および browserContext.routeFromHAR()
で作成されたすべてのルートを削除します。
使用法
await browserContext.unrouteAll();
await browserContext.unrouteAll(options);
引数
options
Object (オプション)-
behavior
"wait" | "ignoreErrors" | "default" (オプション)#既に実行中のハンドラを待機するかどうか、およびエラーがスローされた場合の対処方法を指定します
'default'
- 現在のハンドラ呼び出し(ある場合)の終了を待機しません。アンルートされたハンドラがエラーをスローした場合、未処理のエラーになる可能性があります'wait'
- 現在のハンドラ呼び出し(ある場合)の終了を待機します'ignoreErrors'
- 現在のハンドラ呼び出し(ある場合)の終了を待機しません。アンルーティング後にハンドラによってスローされたすべてのエラーは、静かに捕捉されます
-
戻り値
waitForEvent
v1.9より前に追加イベントの発生を待ち、その値を述語関数に渡します。述語が真の値を返すと、処理が再開されます。イベントが発生する前にコンテキストが閉じられた場合、エラーをスローします。イベントデータ値を返します。
使用法
const pagePromise = context.waitForEvent('page');
await page.getByRole('button').click();
const page = await pagePromise;
引数
-
イベント名。
browserContext.on(event)
に渡すものと同じです。 -
optionsOrPredicate
function | Object (オプション)#-
predicate
functionイベントデータを受け取り、待機が解決されるべきときに真の値を返します。
-
timeout
number (オプション)待機する最大時間(ミリ秒)。デフォルトは
0
- タイムアウトなしです。デフォルト値は、設定のactionTimeout
オプション、またはbrowserContext.setDefaultTimeout()
メソッドを使用して変更できます。
イベントを受け取る述語、またはオプションオブジェクトのいずれか。オプション。
-
-
options
Object (オプション)
戻り値
プロパティ
clock
追加バージョン: v1.45Playwright には、クロックと時間の経過をモックする機能があります。
使用法
browserContext.clock
型
request
追加バージョン: v1.16このコンテキストに関連付けられたAPIテストヘルパー。このAPIで行われたリクエストは、コンテキストのクッキーを使用します。
使用法
browserContext.request
型
tracing
追加バージョン: v1.12使用法
browserContext.tracing
型
イベント
on('backgroundpage')
追加バージョン: v1.11Chromium ブラウザの永続コンテキストでのみ機能します。
コンテキストで新しいバックグラウンドページが作成されたときに発行されます。
const backgroundPage = await context.waitForEvent('backgroundpage');
使用法
browserContext.on('backgroundpage', data => {});
イベントデータ
on('close')
v1.9より前に追加ブラウザコンテキストが閉じられたときに発行されます。これは、以下のいずれかの理由で発生する可能性があります
- ブラウザコンテキストが閉じられました。
- ブラウザアプリケーションが閉じられたか、クラッシュしました。
browser.close()
メソッドが呼び出されました。
使用法
browserContext.on('close', data => {});
イベントデータ
on('console')
追加バージョン: v1.34ページ内のJavaScriptがconsole APIメソッドのいずれか(例: console.log
または console.dir
)を呼び出したときに発行されます。
console.log
に渡された引数とページは、ConsoleMessage イベントハンドラの引数で利用可能です。
使用法
context.on('console', async msg => {
const values = [];
for (const arg of msg.args())
values.push(await arg.jsonValue());
console.log(...values);
});
await page.evaluate(() => console.log('hello', 5, { foo: 'bar' }));
イベントデータ
on('dialog')
追加バージョン: v1.34alert
、prompt
、confirm
または beforeunload
などの JavaScript ダイアログが表示されたときに発行されます。リスナーは dialog.accept()
または dialog.dismiss()
のいずれかでダイアログを処理する必要があります。そうしないと、ページはダイアログの応答を待ってフリーズし、クリックなどのアクションは完了しません。
使用法
context.on('dialog', dialog => {
dialog.accept();
});
page.on('dialog')
または browserContext.on('dialog')
リスナーが存在しない場合、すべてのダイアログは自動的に閉じられます。
イベントデータ
on('page')
v1.9より前に追加このイベントは、BrowserContext で新しい Page が作成されたときに発行されます。ページはまだ読み込み中である可能性があります。このイベントはポップアップページに対しても発行されます。特定のページに関連するポップアップに関するイベントを受け取るには、page.on('popup')
も参照してください。
ページが利用可能になる最も早いタイミングは、初期URLにナビゲートされたときです。例えば、window.open('http://example.com')
でポップアップを開く場合、このイベントは "http://example.com" へのネットワークリクエストが完了し、そのレスポンスがポップアップで読み込まれ始めたときに発行されます。このネットワークリクエストをルーティング/リッスンしたい場合は、Page の同様のメソッドではなく、それぞれ browserContext.route()
と browserContext.on('request')
を使用してください。
const newPagePromise = context.waitForEvent('page');
await page.getByText('open new page').click();
const newPage = await newPagePromise;
console.log(await newPage.evaluate('location.href'));
page.waitForLoadState()
を使用して、ページが特定の状態になるまで待機します(ほとんどの場合、これは必要ありません)。
使用法
browserContext.on('page', data => {});
イベントデータ
on('request')
追加バージョン: v1.12このコンテキストを介して作成された任意のページからリクエストが発行されたときに発行されます。request
オブジェクトは読み取り専用です。特定のページからのリクエストのみをリッスンするには、page.on('request')
を使用してください。
リクエストを傍受して変更するには、browserContext.route()
または page.route()
を参照してください。
使用法
browserContext.on('request', data => {});
イベントデータ
on('requestfailed')
追加バージョン: v1.12リクエストが失敗したとき(例: タイムアウトによる)に発行されます。特定のページからの失敗したリクエストのみをリッスンするには、page.on('requestfailed')
を使用してください。
404や503などのHTTPエラーレスポンスは、HTTPの観点からは依然として成功したレスポンスであるため、リクエストは browserContext.on('requestfinished')
イベントで完了し、browserContext.on('requestfailed')
イベントでは完了しません。
使用法
browserContext.on('requestfailed', data => {});
イベントデータ
on('requestfinished')
追加バージョン: v1.12リクエストがレスポンスボディのダウンロード後に正常に完了したときに発行されます。成功したレスポンスの場合、イベントのシーケンスは request
、response
、requestfinished
です。特定のページからの成功したリクエストをリッスンするには、page.on('requestfinished')
を使用してください。
使用法
browserContext.on('requestfinished', data => {});
イベントデータ
on('response')
追加バージョン: v1.12リクエストのレスポンスステータスとヘッダーが受信されたときに発行されます。成功したレスポンスの場合、イベントのシーケンスは request
、response
、requestfinished
です。特定のページからのレスポンスイベントをリッスンするには、page.on('response')
を使用してください。
使用法
browserContext.on('response', data => {});
イベントデータ
on('serviceworker')
追加バージョン: v1.11サービスワーカーは Chromium ベースのブラウザでのみサポートされています。
コンテキストで新しいサービスワーカーが作成されたときに発行されます。
使用法
browserContext.on('serviceworker', data => {});
イベントデータ
on('weberror')
追加バージョン: v1.38このコンテキスト内のいずれかのページで例外が処理されない場合に発生します。特定のページからのエラーをリッスンするには、page.on('pageerror') を使用してください。
使用法
browserContext.on('weberror', data => {});
イベントデータ
非推奨
setHTTPCredentials
v1.9より前に追加ブラウザは認証成功後に資格情報をキャッシュする場合があります。代わりに新しいブラウザコンテキストを作成してください。
使用法
await browserContext.setHTTPCredentials(httpCredentials);
引数
戻り値