---
title: "Crush CLIをBright DataのBright Data MCPで"
slug: crush-cli-with-web-mcp
date: 2025-08-21T12:40:23+00:00
modified: 2025-11-04T08:47:01+00:00
permalink: https://brightdata.jp/blog/ai/crush-cli-with-web-mcp
type: blog
---

[ ブログ ](https://brightdata.jp/blog "ブログ") / [AI](https://brightdata.jp/blog/ai)







 [AI](https://brightdata.jp/blog/ai)

# Crush CLIをBright DataのBright Data MCPで

Bright DataのWeb MCP統合を使用して、リアルタイムのWebデータアクセスでCrush CLIを強化する方法をご覧ください。

 3 分読





 [ ![Antonello Zanini](https://media.brightdata.jp/2022/12/Antonello-Zanini-2-50x50.jpg) ](https://brightdata.com/blog/authors/antonello-zanini)

 [Antonello Zanini

Technical Writer

 ](https://brightdata.com/blog/authors/antonello-zanini)





 ![Crush CLI × Bright Data MCP](https://media.brightdata.jp/2025/08/Crush-CLI%E2%80%AF%C3%97%E2%80%AFBright%E2%80%AFData-MCP.png)





このブログ記事では

- Ctushとは何か、なぜAIコーディング支援用のCLIアプリケーションとして愛されているのか。
- Ctushをウェブインタラクションとデータ抽出で拡張することで、より効果的になる方法。
- Crush CLIとBright Data MCPサーバーを接続し、AIコーディングエージェントを作成する方法。

さあ、飛び込もう！

## Crushとは？

[Crushは](https://github.com/charmbracelet/crush)オープンソースのAIコーディングエージェントです。特に、Crush CLIはGoベースのCLIアプリケーションで、ターミナル環境に直接AIアシスタンスをもたらします。コーディング、デバッグ、その他の開発作業を支援するために、いくつかのLLMと対話するためのTUI[（ターミナル・ユーザー・インターフェース](https://github.com/rothgar/awesome-tuis)）を提供します。

具体的には、これがCrushを特別なものにしている：

- **クロスプラットフォーム**：macOS、Linux、Windows（PowerShellとWSL）、FreeBSD、OpenBSD、NetBSDのすべての主要なターミナルで動作する。
- **マルチモデルのサポート**：幅広いLLMから選択、OpenAIまたはAnthropic互換のAPIを介して独自のものを統合、またはローカルモデルに接続。
- **セッションベースのエクスペリエンス**：プロジェクトごとに複数の作業セッションとコンテキストを維持します。
- **高い柔軟性**：コンテキストを保持したまま、セッションの途中でLLMを切り替えることが可能。
- **LSP対応**：Crushは、最新のIDEのように、追加のコンテキストとインテリジェンスのためのLSP[（言語サーバープロトコル](https://microsoft.github.io/language-server-protocol/)）をサポートしています。
- **拡張性**：MCP[（HTTP、stdio、SSE](/blog/ai/sse-vs-streamable-http)）によるサードパーティ機能との統合をサポート。

このプロジェクトは、すでにGitHubで10k以上のスターを獲得しており、[35人以上の貢献](https://github.com/charmbracelet/crush/graphs/contributors)者がいる活気ある開発者コミュニティによって活発にメンテナンスされている。

## Bright Data MCPでCrush CLIのLLM知識ギャップを克服する

すべてのLLMに共通する課題は、知識の切り口を持つことです。Crush CLIで設定するLLMも同様です。[これらのモデルは固定されたデータセットで学習される](/blog/ウェブデータ/train-an-ai-model)ため、その知識は過去の静的なスナップショットです。つまり、最近の出来事や動向を知らない。

これは、めまぐるしく変化するテクノロジーの世界では重要な欠点だ。最新の知識ベースがなければ、LLMは非推奨のライブラリや時代遅れのプログラミング手法を提案するかもしれないし、単に新しい機能やツールを知らないだけかもしれない。

では、もしあなたのCrush AIコーディングアシスタントが、古い情報を呼び出す以上のことができるとしたらどうだろう？最新のドキュメント、記事、ガイドをウェブで検索し、そのリアルタイムのデータを使って、より良い、より正確な支援を提供できることを想像してみてください。

LLMにウェブアクセスとデータ検索のパワーを与えるソリューションにCrushを接続することで、それを実現することができます。[ブライトデータのウェブMCPサーバーは](/ai/mcp-server)、まさにそれを実現します。このオープンソースサーバー[（現在、無料ティアがあります！](/blog/ai/web-mcp-free-tier)）は、ウェブインタラクションとデータ収集のための60以上のAI対応ツールを装備しています。

### Bright Data MCPインテグレーション

以下は、MCPサーバーにある主なツールの2つです：

- `search_engine`：[SERPAPIに](/products/serp-api)接続し、Google、Bing、またはYandexで検索を実行し、検索エンジンの結果ページデータをHTMLまたはMarkdown形式で返す。
- `scrape_as_markdown`：[Web Unlockerを](/products/web-unlocker)利用して、1つのウェブページのコンテンツをスクレイピングする。高度な抽出オプションをサポートし、ボット検知システムを回避し、[CAPTCHAを解決して](/products/web-unlocker/captcha-solver)くれる。

これら以外にも、ウェブページと対話したり（`scraping_browser_clickなど`）、Amazon、LinkedIn、TikTokなど様々なドメインから構造化データフィードを収集するための55以上の特化したツールがある。例えば、`web_data_amazon_product`ツールは、商品URLを使ってAmazonから直接、詳細で構造化された商品情報を引き出すことができる。

これらのツールを使って、Bright Data MCPをCrushで活用する方法をいくつかご紹介します：

- Yahoo Financeの株価やEコマースサイトの商品詳細など、プロジェクトに必要な最新情報を取得します。そのデータをローカルファイルに保存し、分析、テスト、モッキングなどに利用できます。
- AIに、使用しているライブラリやフレームワークの最新ドキュメントを取得させ、AIが提案するコードが最新で非推奨でないことを確認する。
- コンテキストを意識したリンクを収集し、それらのリソースをMarkdownファイル、ドキュメント、その他のアウトプットに統合します。

Bright Data MCPがあなたのCrush CLIエージェントをどのように強化できるかをご覧ください！

## CrushをBright DataのBright Data MCPに接続する方法

このチュートリアルでは、Crushをローカルにインストールして設定し、Bright DataのBright Data MCPと統合する方法を学びます。このチュートリアルでは、Crushをローカルにインストールして設定し、Bright DataのBright Data MCPと統合する方法を学びます：

1. Amazonの商品ページをオンザフライでスクレイピング。
2. データをローカルのJSONファイルに保存。
3. そのデータをロードして処理するNode.jsスクリプトの作成。

以下の手順に従ってください！

### 前提条件

始める前に、以下があることを確認してください：

- [Node.jsがローカルにインストールされている](https://nodejs.org/en/download)こと（最新のLTSバージョンを推奨）。
- [サポートされているLLMプロバイダーの](https://github.com/charmbracelet/crush?tab=readme-ov-file#getting-started)APIキー（このガイドでは、Google Geminiを使用します）。
- APIキーが準備されているBright Dataアカウント（まだお持ちでない場合は、作成方法を説明しますのでご安心ください）。

また、オプションですが、役立つ予備知識として

- [MCPの仕組みについての](https://docs.anthropic.com/en/docs/mcp)一般的な理解
- Bright Data MCP サーバーとそのツールに精通していること。
- CLIコーディングエージェントの動作と、それらがファイルシステムとどのように相互作用するかについての知識。

### ステップ#1: Crushのインストールと設定

[`charmland/crushの`](https://www.npmjs.com/package/@charmland/crush)npmパッケージを使って、Crush CLIをシステムにグローバルにインストールする：

```none
npm install -g @charmland/crush
```

npm経由でCLIをインストールしたくない場合は、[他のインストールオプションを見つける](https://github.com/charmbracelet/crush?tab=readme-ov-file#installation)。

これでCrushを起動できる：

```none
クラッシュ
```

下のようなLLMの選択画面が表示されるはずだ：

![Selecting the LLM model to configure on Crush](https://media.brightdata.com/2025/08/image-120-1024x590.png)数十のプロバイダーと数百のモデルから選ぶことができます。矢印キーを使って、APIキーを持っているプロバイダーから欲しいモデルを見つけるまでナビゲートする。この例では、”[Gemini 2.5 Flash](https://cloud.google.com/vertex-ai/generative-ai/docs/models/gemini/2-5-flash)“（API経由で基本的に無料で使用可能）を選択します。

次に、APIキーの入力を求められます。それを貼り付けて`Enter`キーを押します：

![Entering your Google Gemini API key](https://media.brightdata.com/2025/08/image-124-1024x234.png)この場合、Google[Studio AIから無料で取得](https://aistudio.google.com/app/apikey)できるGoogle Gemini APIキーを貼り付けます。

その後、CrushがAPIキーのバリデーションを行い、正常に動作することを確認します。

バリデーションが完了すると、このように表示されます：

![Crush is now ready to use](https://media.brightdata.com/2025/08/image-123-1024x590.png)Ready… “セクションで、プロンプトを入力できます。

**注意**: Crush CLIを再度起動すると、LLM接続のセットアップを再度要求されることはありません。これは、設定されたLLMキーが自動的にグローバル設定`$HOME/.config/crush/crush.jsonに`保存されるためです（Windowsの場合は、`%USERPROFILE%ApplicationData/Local/crush/crush.json`）。

Visual Studio Code（またはお好みのIDE）でグローバル`crush.json`設定ファイルを開いて検査します：

![The global crush.json config file](https://media.brightdata.com/2025/08/image-125-1024x657.png)ご覧のように、`crush.json`ファイルには、選択したモデルの設定とともにAPIキーが含まれています。これは、LLMを選択したときにCrush CLIによって入力されました。このファイルを編集して、他のAIモデル[（ローカルモデルでも）を](https://github.com/charmbracelet/crush?tab=readme-ov-file#local-models)設定することもできます。

同様に、プロジェクトディレクトリ内にローカルの`crush.json`または`.crush.json`ファイルを作成して、グローバル設定を上書きすることもできます。詳細については、[公式ドキュメントを参照してください](https://github.com/charmbracelet/crush?tab=readme-ov-file#configuration)。

驚いた！これでCrush CLIがあなたのシステムにインストールされ、動作するようになりました。

### ステップ2: Bright DataのBright Data MCPをテストする

まだアカウントをお持ちでない場合は、[Bright Dataアカウントを作成して](/?hs_signup=1)ください。そうでなければ、[既存のアカウントにログインして](/cp/start)ください。

次に、[公式の指示に従って](https://docs.brightdata.com/api-reference/authentication#generating-an-api-key%3A)Bright Data APIキーを生成してください。すぐに必要になりますので、安全な場所に保管してください。ここでは簡単のため、*Admin*権限を持つAPIキーを使用すると仮定します。

[`brightdata/mcp`](https://www.npmjs.com/package/@brightdata/mcp)パッケージを使用して、Bright Data MCP をグローバルにインストールします：

```none
npm install -g @brightdata/mcp
```

次に、以下のBashコマンドでサーバーが動作することを確認します：

```none
API_TOKEN="<YOUR_BRIGHT_DATA_API>" npx -y @brightdata/mcp
```

または、Windows PowerShellでも同様です：

```none
Env:API_TOKEN="<YOUR_BRIGHT_DATA_API>"; npx -y @brightdata/mcp
```

`<YOUR_BRIGHT_DATA_API>`プレースホルダーを、先ほど生成した実際のBright Data APIトークンに置き換えます。上記のコマンドは、必要な`API_TOKEN`環境変数を設定し、`@brightdata/mcp`npmパッケージを通してMCPサーバーを起動します。

すべてが正しく動作すれば、このようなログが表示されるはずです：

![The Bright Data MCP server startup logs](https://media.brightdata.com/2025/08/image-126-1024x157.png)最初の起動で、MCPサーバーは自動的にBright Dataアカウントに2つのゾーンを作成します：

- `mcp_unlocker`：mcp\_unlocker:[Web Unlocker](/products/web-unlocker)用のゾーン。
- `mcp_browser`：mcp\_unlocker: Web Unlocker用のゾーン。
    これらのゾーンは、MCPサーバーのすべてのツールを使用するために必要です。

これらのゾーンが作成されたことを確認するには、Bright Dataのダッシュボードにログインし、”[Proxies &amp; Scraping Infrastructure](/cp/zones)“ページに進みます。2つのゾーンが表示されているはずです：

![The mcp_unlocker and mcp_browser zones created by the Bright Data MCP at startup](https://media.brightdata.com/2025/08/image-127-1024x539.png)**注意**: APIトークンに*管理者*権限がない場合、これらのゾーンは作成されないかもしれません。その場合、[公式ドキュメントに示されているように](https://github.com/brightdata/brightdata-mcp?tab=readme-ov-file#-account-setup)、手動で設定し、環境変数を使って名前を指定することができる。

**覚えておいてください**：デフォルトでは、MCPサーバーは`search_engineと` `scrape_as_markdown`ツールだけを公開しています。

ブラウザ自動化と構造化データフィードのための高度なツールをアンロックするには、Proモードを有効にする必要があります。これを行うには、MCPサーバーを起動する前に`PRO_MODE=true`環境変数を設定します：

```none
API_TOKEN="<YOUR_BRIGHT_DATA_API>" PRO_MODE="true" npx -y @brightdata/mcp
```

または、Windowsの場合

```none
Env:API_TOKEN="<YOUR_BRIGHT_DATA_API>"; $Env:PRO_MODE="true"; npx -y @brightdata/mcp
```

**重要**: Proモードでは、60以上のすべてのツールにアクセスできます。ただし、Proモードの追加ツールは無料層には含まれず、料金が発生します。

Bright DataのBright Data MCPサーバーの詳細については[、公式ドキュメントを](https://docs.brightdata.com/mcp-server/overview)ご覧ください。

完璧です！お使いのマシンでBright Data MCPサーバーが正しく動作していることが確認できました。次のステップではCrushを起動し、起動時にサーバーに接続するように設定します。

### ステップ#3: CrushでBright Data MCPを設定する

[Crushは](https://github.com/charmbracelet/crush?tab=readme-ov-file#mcps)ローカルまたはグローバルの`crush.json`設定ファイルの[ `mcp`エントリを通してMCP統合をサポートします](https://github.com/charmbracelet/crush?tab=readme-ov-file#mcps)。

この例では、Bright DataのBright Data MCPをCrush CLI環境でグローバルに設定したいとします。そこで、グローバル設定ファイルを開きます：

- Linux/macOSの場合：`$HOME/.config/crush/crush.json`。
- Windowsの場合:`%USERPROFILE%AppDataのLocalのCrushのCrushのCrushのCrushのCrushのCrush.json`。

以下の内容が含まれていることを確認する：

```none
"mcp"：{
   "brightData"：{
     "type"："stdio"、
     "command"："npx"、
     "args": [
       "-y",
       "@brightdata/mcp"
     ],
     "env"：{
       "API_TOKEN"："<your_bright_data_api_key>"、
       "PRO_MODE"："true"
     }
   }
 }
```

この設定では

- `mcp`エントリは、外部MCPサーバーの起動方法をCrushに伝えます。
- `brightData`エントリは、Bright Data MCPを実行するために必要なコマンドと環境変数を定義します。(覚えておいてください：`PRO_MODEの`設定はオプションですが、推奨します。また、`<YOUR_BRIGHT_DATA_API_KEY>を`Bright Data APIキーに置き換えてください)。

つまり、この設定は`brightDataという`カスタムMCPサーバーを追加します。Crushは、このファイルで設定した環境変数を使用し、指定した`npx`コマンド（前のステップで示したコマンドに対応する）でサーバーを起動します。簡単に言うと、CrushはローカルのBright Data MCPプロセスを起動し、スタートアップ時に接続することができる。

素晴らしい！Crush CLIでMCPの統合をテストしてみましょう。

### ステップ#4: MCP接続の確認

実行中のCrushインスタンスをすべて終了し、再度起動します：

```none
クラッシュ
```

MCP接続が期待通りに機能していれば、”MCPs “セクションに`brightDataの`エントリーが表示されているはずです：

![Note the available Bright Data MCP server with 60 tools](https://media.brightdata.com/2025/08/image-128-1024x590.png)CLIは、60のツールが利用可能であることを示しています。これは、Proモードで実行するように設定したためです。そうでなければ、2つのツール`（scrape_as_markdownと` `search_engine`）しか利用できません。よくできました！

### ステップ #5: Crushでタスクを実行する

CrushのCLIセットアップで新しい機能を確認するために、以下のようなプロンプトを実行してみてください：

```none
https://www.amazon.com/Microfiber-Cleaning-Cloth-Performance-Washes/dp/B08BRJHJF9/"からデータをスクレイピングし、ローカルの "product.json "ファイルに保存し、Node.jsの "script.js "スクリプトを定義して、ファイルをロードし、ターミナルにその内容を表示する。
```

このテストケースは、Bright DataのBright Data MCPで公開されているツールを使用して達成されるはずの新鮮な商品データの取得を要求しているため、素晴らしいテストケースです。さらに、データ分析プロジェクトのモックやセットアップの際に使用する現実的なワークフローを示しています。

プロンプトをCrushに貼り付け、`Enterを押して`実行してください。このようなものが表示されるはずだ：

![Task execution in Crush](https://media.brightdata.com/2025/08/image-129-1024x533.png)上のGIFはスピードアップされているが、これはステップバイステップで起こることである：

1. Crushは`web_data_amazon_product`ツール（CLIでは`mcp_brightData_web_data_amazon_productとして`参照される）をタスクに適したものとして識別し、実行の許可を求める。
2. 承認されると、スクレイピング・タスクはMCP統合を介して実行されます。
3. 結果のJSON商品データがターミナルに表示されます。
4. Crushは、このデータを`product.jsonという`名前のローカルファイルに保存できるかどうかを尋ねます。
5. 承認後、ファイルが作成され、スクレイピングされたデータで満たされます。
6. その後、Crush CLIは`script.jsの`JavaScriptロジックを生成し、script.`jsは`JSONコンテンツをロードして表示します。
7. 承認すると、`script.js`ファイルが作成されます。
8. Node.jsスクリプトの実行許可を求めるプロンプトが表示されます。
9. 許可を与えると、`script.js が`実行され、製品データがターミナルに出力されます。

明示的に要求していないにもかかわらず、CLI が生成された Node.js スクリプトの実行を要求していることに注意してください。この動作は意図的なもので、テスト（およびエラー時の修正）を容易にし、ワークフローに付加価値を与えるからです。

最後に、作業ディレクトリには以下の2つのファイルがあるはずだ：

```none
├──prodcut.json
└── script.js
```

VSコードで`product.jsonを開いて`ください：

![The produced product.json file](https://media.brightdata.com/2025/08/image-130-1024x760.png)このファイルには、Bright DataのBright Data MCP経由でAmazonからスクレイピングされた実際の商品データが含まれている。

次に、`script.jsを開いて`ください：

![The produced script.js](https://media.brightdata.com/2025/08/image-131-1024x437.png)このスクリプトはNode.jsを使って`product.jsonの`内容を読み込み、表示します。次のように実行します：

```none
node script.js
```

出力はこうなるはずだ：

![The output of the generated script](https://media.brightdata.com/2025/08/image-132-1024x553.png)はい、できました！ワークフローは成功した。

詳細には、`product.jsonから`ロードされ、ターミナルに出力されたコンテンツは、[オリジナルのAmazon商品](https://www.amazon.com/Microfiber-Cleaning-Cloth-Performance-Washes/dp/B08BRJHJF9/)ページにある実際のデータと一致している。

**重要**：`product.jsonは`本物のスクレイピングされたデータを含んでいる。アマゾンのスクレイピングは、その高度なボット対策（例えば、[アマゾンCAPTCHAの](/blog/ウェブデータ/bypass-amazon-captcha)ため）により、悪名高く難しいので、これは指摘すべき基本的なことである。したがって、通常のLLMだけではこの目標を達成することはできない！

この例は、CrushとBright DataのMCPサーバーを組み合わせることの真の力を示しています。今すぐ新しいプロンプトを試して、CLIで直接[LLM駆動のより高度なデータワークフローを](/ai/web-access)探求してみてください！

## まとめ

このチュートリアルでは、CrushとBright DataのBright Data MCP[（現在は無料版も提供されています！](/blog/ai/web-mcp-free-tier)）を接続する方法をご紹介しました。その結果、ウェブにアクセスして対話できる強力なCLIコーディングエージェントができました。この統合は、Crush CLIがMCPサーバーをビルトインでサポートしているおかげで可能になりました。

このガイドのタスク例は、意図的にシンプルにした。しかし、この統合により、より複雑なユースケースに取り組むことができることを忘れないでください。結局のところ、Bright Data MCP ツールは、様々な[エージェントシナリオを](/ai/web-access)サポートしています。

より高度なエージェントを作成するには、[Bright Data AIインフラストラクチャで](/ai)利用可能なすべてのサービスをご覧ください。

無料のBright Dataアカウントにサインアップして、今すぐAI対応ウェブツールの実験を始めましょう！



お問い合わせ無料トライアル![google social icon](/wp-content/themes/brightdata/assets/images/ic_google.svg)









 目次







Data for AI

Supercharge your AI with instant and reliable access to web data. No blockers. No hassle.

Talk to an expert

Bright Data MCP

Get started with Bright Data’s Web MCP Server today with 5000 free monthly requests and unlock your AI’s full potential.

Start free now







 [ ](https://news.ycombinator.com/submitlink?t=Crush+CLI%E3%82%92Bright+Data%E3%81%AEBright+Data+MCP%E3%81%A7&u=https://brightdata.jp/blog/ai/crush-cli-with-web-mcp) [ ](https://www.linkedin.com/shareArticle?mini=true&title=Crush+CLI%E3%82%92Bright+Data%E3%81%AEBright+Data+MCP%E3%81%A7&url=https://brightdata.jp/blog/ai/crush-cli-with-web-mcp) [ ](http://www.reddit.com/submit?title=Crush+CLI%E3%82%92Bright+Data%E3%81%AEBright+Data+MCP%E3%81%A7&url=https://brightdata.jp/blog/ai/crush-cli-with-web-mcp)







##  あなたは下記にもご興味がおありかもしれません

 [ ![OpenHuman with Bright Data](https://media.brightdata.jp/2026/09/OpenHuman-with-Bright-Data.png) ](https://brightdata.jp/blog/ai/openhuman-with-bright-data "Bright Data CLIを通じたOpenHumanにおける本番対応ウェブアクセス")

 [AI



 ![Antonello Zanini](https://media.brightdata.jp/2022/12/Antonello-Zanini-2-50x50.jpg)

Antonello Zanini

Technical Writer





### Bright Data CLIを通じたOpenHumanにおける本番対応ウェブアクセス

Bright Data CLIをOpenHumanに統合して、AIエージェント向けの本番対応ウェブアクセスとデータ収集を実現します。



 09-Sep-2026

 3 分読

 ](https://brightdata.jp/blog/ai/openhuman-with-bright-data)

 [ ![Multimodal Web Scraping with MiniMax](https://media.brightdata.jp/2026/09/Multimodal-Web-Scraping-with-MiniMax.png) ](https://brightdata.jp/blog/%e3%82%a6%e3%82%a7%e3%83%96%e3%83%87%e3%83%bc%e3%82%bf/multimodal-web-scraping-with-minimax "MiniMaxによるマルチモーダルウェブスクレイピング")

 [ウェブデータ



 ![Antonello Zanini](https://media.brightdata.jp/2022/12/Antonello-Zanini-2-50x50.jpg)

Antonello Zanini

Technical Writer





### MiniMaxによるマルチモーダルウェブスクレイピング

Bright Data Web UnlockerとMiniMax M3ビジョンを組み合わせて、画像やウェブページのスクリーンショットから構造化データを抽出します。



 09-Sep-2026

 1 分読

 ](https://brightdata.jp/blog/%e3%82%a6%e3%82%a7%e3%83%96%e3%83%87%e3%83%bc%e3%82%bf/multimodal-web-scraping-with-minimax)

 [ ![The 10 Best CLI Tools for Codex in 2026](https://media.brightdata.jp/2026/08/The-10-Best-CLI-Tools-for-Codex-in-2026.png) ](https://brightdata.jp/blog/ai/best-cli-tools-for-codex "2026年版 Codex向けCLIツール10選 – テスト＆ランキング")

 [AI



 ![Daniel Shashko](https://media.brightdata.jp/2022/04/Daniel-Shashko-2-50x50.png)

Daniel Shashko

Web Data &amp; AI Expert





### 2026年版 Codex向けCLIツール10選 – テスト＆ランキング

Codexをより速く、より有能にする10のCLIツール。サンドボックス内から実際のウェブアクセスを提供するBright Data CLIから始まります。



 06-Sep-2026

 4 分読

 ](https://brightdata.jp/blog/ai/best-cli-tools-for-codex)
