Development

Vertex API経由で、Nano BananaをPHPから実行する

By Yosuke | 2025年10月6日

株式会社tolvの宍戸陽介です。

AIの話題が速すぎて、最近ついていくのが大変ですが、今回はNano BananaをVertex API経由でPHPから実行してみたいと思います。
今はSora2が話題になり、Nano Bananaの話題が少なくなって、画像や動画生成のAI事情も変わっていきそうですが、今回はNano Bananaを使っていきます。

Nano Bananaですが、Google AI StudioからAPIキーを取得して利用することも可能ですが、広告利用や商用利用を行う場合はGoogle Workspace with GeminiもしくはVertex AIを利用する必要があります。
こちらに関しては、下記noteの記事にて記載されています。

Gemini の Nano Banana で、画像生成をもっと楽しく、自由自在に!|Gemini - Google の AI

こんにちは、Google の AI「Gemini(ジェミニ)」の公式 note 編集部です。 最近、SNS などで「Nano Banana」という言葉を目にしたことはありますか? Google の AI「Gemini」で作った もふもふ(仮)をフィギュアにしてみた💫 Nano Banana 🍌で画像の編集も自由自在! 作り方はリプライに🏃⬇️ pic.twitter.com/S3ZvCMDsAG — Google Japan (@googlejapan) September 16, 2025 世界中のクリエイターや  AI ファンの間で大きな話題を呼んでいる

note.com

今回は、商用利用も想定してVertex APIを使ってNano Bananaを利用します。

前提

前提としてですが、今回はapplication_default_credentials.jsonを利用した認証を行い、簡単にPHPより実行する方法を記載します。
あくまで、開発環境としてお試しで動かす前提のためセキュリティ面等は考慮しておらず、本番環境で行う場合は認証方法や実装方法などを、別途考慮する必要があります。

準備

Google Cloud Vertex APIの準備

Vertex APIは、Google Cloudから利用することが可能なので、Google Cloudで新規プロジェクトを作成しますが、プロジェクトの作成については、ここでは割愛します。

Google Cloudの左メニューよりVertex API > ダッシュボードの順でダッシュボードを表示して、ダッシュボードにあるすべての推奨APIを有効にするをクリックします。
しばらくすると、Vertex APIを利用するために必要なAPIが有効化されます。

Vertex API ダッシュボード
Vertex API ダッシュボード

Vertex APIが有効化されたかどうかは、左メニューからAPIとサービス > 有効なAPIとサービスのページで、一覧にVertex AI APIが表示されていれば大丈夫です。

Google Cloud SDKのインストール

Googleの認証を行い、認証ファイルを取得するためにGoogle Cloud SDKをインストールします。
今回は私の環境がMacのため、Homebrewで簡単にインストールします。

brew install --cask google-cloud-sdk

下記コマンドを実行すると、ブラウザが立ち上がりGoogleの認証画面になるので、ブラウザ上で認証を行ってください。

gcloud auth login

ログインに成功すると、~/.config/gcloud/application_default_credentials.jsonのファイルが作成され、application_default_credentials.jsonのファイルをAPI呼び出し時の認証情報として利用します。

実装

フォルダ構成

今回は、PHP単一ファイルで実行します。フォルダの構成は下記になります。

.
|-- composer.json
|-- composer.lock
|-- credentials
|   `-- application_default_credentials.json
|-- out
|-- sample.php
|-- .env

application_default_credentials.jsonの準備

credentialsフォルダに、~/.config/gcloud/application_default_credentials.jsonのファイルをコピーします。
このファイルには、Google Cloud SDKのログイン時に発行されるトークン情報が保存されており、Vertex API呼び出し時にユーザー認証として利用されます。

.envファイルの作成

.envファイルを作成し、下記設定を記載します。

GOOGLE_APPLICATION_CREDENTIALS=/path/to/application_default_credentials.json
GCP_PROJECT_ID={YOUR_PROJECT_ID}
GCP_LOCATION=global
GEMINI_IMAGE_MODEL=gemini-2.5-flash-image-preview
  • GOOGLE_APPLICATION_CREDENTIALSはapplication_default_credentials.jsonファイルのフルパスを指定します。
  • GCP_PROJECT_IDは準備で作成したプロジェクトのIDを指定します。
  • GCP_LOCATIONはglobalを指定。2025年10月現在ではglobalリージョンのみ対応しています。
  • GEMINI_IMAGE_MODELはLLMのModelを指定します。2025年10月現在、Nano Bananaはgemini-2.5-flash-image-previewとなります。

ライブラリのインストール

composerを使って、下記ライブラリをインストールします。

composer require guzzlehttp/guzzle google/auth vlucas/phpdotenv

実装

下記コードで実装します。
実装自体はそんなに難しくなく、Googleからアクセストークンを取得し、API実行時にアクセストークンを付与してAPIをコールしています。
Payloadは最低限ですが、roleは、ユーザーからのメッセージかモデルによって生成されたメッセージかを指定します。
プロンプトは、partsのtextに記載します。

<?php
require __DIR__ . '/vendor/autoload.php';

use Google\Auth\ApplicationDefaultCredentials;
use GuzzleHttp\Client;
use Dotenv\Dotenv;

$dotenv = Dotenv::createImmutable(__DIR__);
$dotenv->load();

$projectId = $_ENV['GCP_PROJECT_ID'];
$location = $_ENV['GCP_LOCATION'] ?? 'global';
$modelId = $_ENV['GEMINI_IMAGE_MODEL'] ?? 'gemini-2.5-flash-image-preview';

$prompt = 'a studio photo of a tiny banana-shaped robot';

// アクセストークンの取得
$scopes = ['https://www.googleapis.com/auth/cloud-platform'];
$creds = ApplicationDefaultCredentials::getCredentials($scopes);
$token = $creds->fetchAuthToken();
$accessToken = $token['access_token'];

$url = sprintf(
    'https://aiplatform.googleapis.com/v1/projects/%s/locations/%s/publishers/google/models/%s:generateContent',
    $projectId, $location, $modelId
);

$payload = [
    'contents' => [[
        'role' => 'user',
        'parts' => [['text' => $prompt]],
    ]],
];

// APIコール
$client = new Client();
$res = $client->post($url, [
    'headers' => [
        'Authorization' => "Bearer {$accessToken}",
        'Content-Type' => 'application/json',
    ],
    'json' => $payload,
    'http_errors' => false,
]);

$body = json_decode((string)$res->getBody(), true);
$imageBase64 = null;
if (!empty($body['candidates'])) {
    foreach ($body['candidates'] as $candidate) {
        $parts = $candidate['content']['parts'] ?? [];
        foreach ($parts as $part) {
            $inlineData = $part['inlineData'] ?? null;
            if (!empty($inlineData['data'])) {
                $imageBase64 = $inlineData['data'];
                break 2;
            }
        }
    }
}

if ($imageBase64 !== null && $imageBase64 !== '') {
    $timestamp = date('Ymd_His', strtotime('now'));
    $filename = sprintf('out_%s.png', $timestamp);
    file_put_contents(__DIR__ . '/out/' . $filename, base64_decode($imageBase64));
    echo "Saved: {$filename}\n";
} else {
    echo "No image found\n";
}

返却されるJSONにはcandidates > content > parts > inlineData > dataの階層構造でBase64画像が含まれます。
partsのどの要素に入るかは確定していないため、すべてのpartsを走査してinlineDataを探索しています。
ほかにメタ情報(使用トークン数やモデル名など)も同時に返却されます。

詳細なリクエスト/レスポンス構造は公式ドキュメントを参照してください。

Vertex AI で Gemini API を使用してコンテンツを生成する | Generative AI on Vertex AI | Google Cloud

Vertex AI の Model API for Gemini を使用して、カスタム アプリケーションを作成します。Gemini モデルのリクエスト本文、モデル パラメータ、レスポンス本文、リクエストとレスポンスのサンプルを確認します。

cloud.google.com

実際に利用する場合は、mimeの判定やエラー処理など全体的に調整が必要になるかと思います。

今回のソースは、Dockerfileも含めてGitHubにアップしていますので、ご興味のある方はどうぞ。

tolv-jp/vertex-ai-image-sample: Vertex AI Image Sample

Vertex AI Image Sample. Contribute to tolv-jp/vertex-ai-image-sample development by creating an account on GitHub.

github.com

生成結果の確認

実行すると、outフォルダに下記のようなロボットバナナの画像が生成されるかと思います。
あとは、プロンプトを変えながら遊んでみてください。

Nano Banana Robot
Nano Banana Robot

料金について

料金ですが、2025年10月現在の料金だと、Google公式試算では$0.039(約6円)との記載があります。
自分がサンプルで作った他のアプリケーションの利用から見ても、だいたい6円くらいで収まってる感じがします。

Gemini Developer API の料金 | Gemini API | Google AI for Developers

Gemini Developer API の料金

ai.google.dev

まとめ

今回は、Nano BananaをVertex API経由でPHPから実行する最小構成を紹介しました。
実際に触ってみると、画像生成のレスポンス速度は運用によっては遅いかもしれませんが、精度は高く業務アプリへの組み込みも十分現実的だと感じます。

AIモデルの進化は速く、明日には新しい世代が登場しているかもしれません。
だからこそ、疎結合な設計で新モデルに柔軟対応できるアーキテクチャを意識しておくのが大切だと思いました。

弊社サービス「Charis」にも生成AI機能を検討中です。
今後もAIと開発の融合を探りながら、より使いやすいサービスを目指していきます。

tolv

ものづくりを通して、いい人と出会っていく

Contact

Phone: 092-985-2930

Address: 福岡県糟屋郡粕屋町長者原東2-1-28

© 2021 - 2025 tolv. All rights reserved.