Google AI Pro完全解説!無料版・Ultraプランとの違いも徹底比較

Gemini

生成AIの進化は止まることを知らず、GoogleのAIサービスも新たなフェーズに突入しました。これまでの「Gemini Advanced」という名称は廃止され、現在は「Google AI Pro」および「Google AI Ultra」という新プラン体系に刷新されています。

しかし、選択肢が増えたことで「ProとUltraは何が違うの?」「無料版のGemini Flashで十分では?」と迷ってしまう方も多いはずです。

以下のような疑問をお持ちではないでしょうか?

  • 上位プラン「Google AI Ultra」との決定的な差は?
  • 「Google AI Pro」を選ぶべき明確な理由は何か?
  • 各プランごとの制限などは?

この記事では、以下の内容を詳しく解説します:

  • Google AI Proを含む3つのプラン(無料・Pro・Ultra)の完全比較
  • Google AI Proがコスパ最強の理由
  • あなたに最適なプランの選び方と判断基準

この記事を読み終わる頃には、複雑になったプランの違いがクリアになり、あなたの用途に最適なGoogleのAI環境を選択できるようになるはずです!

📖この記事のポイント

  • プランは無料プラン・Google AI Pro・Google AI Ultraの3つ
  • 無料プランはあくまでお試し用
  • Google AI Proがコスパ最強のプラン
  • コツを掴み活用すればGoogle AI Proの機能でも、十分副業として収益を得ることが可能。
  • たった2時間の無料セミナー会社に依存しない働き方&AIスキルを身につけられる!
  • 今すぐ申し込めば、すぐに月収10万円UPを目指すための超有料級の12大特典も無料でもらえる!

\ 累計受講者10万人突破 /

無料特典を今すぐ受け取る
監修者プロフィール
森下浩志
日本最大級のAI情報プラットフォーム「romptn ai」編集長。著書に「0からはじめるStable Diffusion」「0からはじめるStable Diffusion モデル・拡張機能集編」など、AmazonベストセラーのAI関連書籍を多数執筆。AIにおける情報の非対称性を解消するための社内研修や出張講義も行う。

Google AI Proとは?

まず、混乱しやすい現在のGoogle AIのプラン構成について整理しましょう。以前の「Gemini Advanced」プランは廃止され、現在は用途に合わせて以下の3つの段階に分かれています。

  1. 無料プラン(Free):手軽にAIを試せるエントリーモデル。
  2. Google AI Pro(標準有料プラン):高性能なAIを日常的に使いこなすためのスタンダードプラン。
  3. Google AI Ultra(最上位プラン):ヘビーユーザーやプロフェッショナル向けの最上位プラン。

各プランの大まかな違いは、使用できるAIの回数制限、動画生成機能などの各種機能利用可否、ストレージ容量などがあります。以下ではそれらの違いをより詳しく見ていきます!

【徹底比較】無料・Google AI Pro・Google AI Ultraの比較表

「自分はどのプランを選ぶべきか」を判断するために、3つのプランを一覧表で比較します。以下は各種プランの重要ポイントの比較表になります。

比較項目 無料プラン Google AI Pro Google AI Ultra
対象ユーザーライトユーザー、日常的な検索・要約一般的な個人ユーザー、クリエイター、プログラマー業務用、企業、チーム、高セキュリティが必要な組織
月額料金0円2,900円36,400円
搭載AIモデルGemini Flash・ProGemini Flash・
Pro
Gemini Flash・
Pro
Googleアプリ連携×利用不可利用可能利用可能
Gemini Proの回数制限1日5回まで1日100回まで1日500回まで
画像生成1日100枚まで利用可能1日1000枚まで利用可能1日1000枚まで利用可能
動画生成機能×利用不可1日3本まで利用可能1日5本まで利用可能
AIクレジット付与なし毎月1,000クレジット付与毎月25,000クレジット付与
ストレージ特典15GB2TB 30TB
エージェントモード×利用不可×利用不可利用可能(1日200回まで)
Deep think×利用不可×利用不可利用可能(1日10回まで)

Gemini Proの回数制限や画像・動画生成制限を見てみると、無料プランとProプランの差は非常に大きいのに対し、ProプランとUltraプランは使い方によっては無料プランとProプランほどの差は無いということが分かると思います。

各プランごとの機能的な違い

プランごとの機能比較と最適な選び方の解説画像

ここでは先ほどの表から具体的にはプランごとの機能や上限の違いとしてポイントになる部分を詳しく見ていきます!

①Gemini Proの回数制限

大きな違いとしてGemini Proモデルの回数制限があります。利用回数については以下の通りで、無料プランでもGemini Proを利用可能ですが、1日5回までという非常に低い回数制限が課せられています。無料プランではProモデルの利用はあくまでお試し程度と考えておきましょう。

無料プラン Google AI ProGoogle AI Ultra
Gemini Proの回数制限1日5回まで1日100回まで1日500回まで

業務などで常時質問するようなヘビーユーザーではない限りはほとんどの方Google AI Proがおすすめです。

Gemini Flashモデルは速度重視ですが、複雑な指示を出すと回答が浅くなることがあります。一方、Gemini Proは「思考力」が格段に上がったモデルとなっており、特に以下のような質問をする方にはFlashではなくProモデルの使用をおすすめします!

Gemini Proモデルの使用が推奨されるタスク

  • プログラミング: コードの生成、バグ修正、リファクタリング。
  • 論理的推論: 複雑なデータ分析、数学的な問題解決、矛盾点の指摘。
  • 長文ライティング: 構成案の作成、記事の執筆、論文の校正。
  • 多言語翻訳: ニュアンスを汲み取った高精度な翻訳。

②画像生成・動画生成機能

次に各プランごとの画像生成機能と動画生成機能について詳しく見ていきましょう。

画像生成機能

画像生成機能は無料プランを含むすべてのプランで利用可能です。以下はプランごとの具体的な回数制限になります。

無料プランGoogle AI ProGoogle AI Ultra
画像生成機能1日100枚まで利用可能1日1000枚まで利用可能1日1000枚まで利用可能

無料プランでも1日100枚まで生成可能なので画像生成だけに焦点を当てるのであれば、デザイン案を大量に出したいクリエイターなどではない限りはまずは無料プランで使用するのがおすすめです。

動画生成機能

動画生成機能は無料プランでは利用できず、有料プランからとなっています。以下は動画生成機能のプランごとの制限になります。

無料プランGoogle AI ProGoogle AI Ultra
動画生成機能×利用不可1日3本まで利用可能1日5本まで利用可能

無料プランでは動画生成が一切できませんが、Google AI Proであれば1日3本まで生成可能です。「たった3本?」と思われるかもしれませんが、プレゼン資料の導入動画や、SNS向けのショート動画の素材を作成する用途であれば、十分実用的な本数です。

また、別のGoogle Flowというサービスを利用するとさらに多くの動画を生成可能です!Pro/Ultraプラン契約者は、追加料金なしで利用でき、こちらは回数制限ではなくAIクレジットを使用して動画を生成するというシステムになっています。プランごとのAIクレジット付与数に関しては以下の通りです。

無料プラン Google AI ProGoogle AI Ultra
AIクレジット付与なし毎月1,000クレジット付与毎月25,000クレジット付与

あくまで目安ですが、1つの動画を生成するのに20クレジット~となっています。Proプランの場合、Gemini上での動画生成上限はは1日3本までですが、付帯するAIクレジットを使ってGoogle Flow経由で生成すれば、さらに約50本(1000÷20)の生成が可能です!

1日に何十本も生成して試行錯誤したいというヘビーユーザーでない限り、月額36,400円のUltraプランを契約する必要性は薄いと言えます。

Google Flowについてさらに詳しく知りたい方は以下の記事を参照してください。

③Ultra限定機能

Proプランには搭載されていない機能として、自律的にタスクをこなす「Agent Mode」や、より深く思考する「Deep think」があります。

  • Agent Mode:ユーザーに代わって複雑なタスクを自律的に実行する機能です。単に質問に答えるだけでなく、目標を達成するために、複数のステップに分解した計画を立て、ブラウザ操作などを行いながら自律的にタスクを実行・修正することが可能です。
  • Deep thinkGeminiの高度な推論モードです。並列思考技術を用いて、人間の思考のように複数の仮説を同時に検討し、より複雑な問題に対する深い思考と推論を行うことが可能です。

専門的な研究やハイレベルな要求を必要とする業務などで使用する場合にはこの2つの機能の利用を推奨します。

どちらもUltra(月額36,400円)専用の機能ですが、月額36,400円と非常に高額なため一般的なデスクワークやコンテンツ制作であれば、Proプランの機能で十分完結します。

Google AI Proを導入する5つのメリット

Google AI Proを導入する5つのメリットについての要約画像

なぜ、最上位のUltraではなく、中間の「Google AI Pro」が多くの人に選ばれているのでしょうか。その理由を解説します。

①Gemini Proの圧倒的な推論能力

Gemini Proは、Flashと比較して「文脈理解」と「論理的推論」が飛躍的に向上しています。

  • 数学などの論理的思考:大学レベルの高度な数学でも抜けの無い厳密な証明を提供してくれます。
  • プログラミング:バグの特定だけでなく、「なぜそのエラーが起きたか」の解説と修正コードの提示がより的確になりました。
  • マルチモーダル処理:画像や動画を読み込ませた際の認識精度が上がり、手書きのメモから正確な表データを作成するといった作業もスムーズに行えます。

ビジネスで「ミスの許されない資料作成」や学術的な「深い分析」を行うなら、FlashではなくProモデルが必須です。また、回数制限もほとんどの学生や社会人なら1日あたり100回まで利用可能なGoogle AI Proプランで十分です。

以下は具体例になります。ここではProモデルが得意な論理的な分析をテストします。状況設定は、

  1. ロウソクの炎の形状をモデリングするための数値解析をPythonで行う
  2. 出力された左側の図がロウソクの炎の形をしていない(左側の図は炎の形状を示しています)
  3. どうしたらうまく炎の形になるのかをGeminiに聞き、生成されたプログラムコードをコピペして実行してみる

〇添付資料

# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt

# 1. パラメータ設定
Nr = 40
Nz = 80
R_max = 0.04     # 4cm
Z_max = 0.12     # 12cm

# 芯の半径 (1.5mm)
R_wick = 0.0015

# 物理定数
# 粘性と拡散をバランス良く設定し、滑らかさを出す
rho0 = 1.0
nu = 0.0001      # 動粘性係数
D_Z = 0.0001     # 拡散係数
g = 9.81
beta = 1/300.0

# 温度・燃料
T0 = 300.0
T_fuel = 600.0
T_f = 2000.0
Z_st = 0.055

# 流速を抑えて、先端が閉じるようにする
V_in_target = 0.08  # 0.2 -> 0.08 に変更

# 時間設定
dt = 0.0001
n_steps = 15000

# グリッド生成
dr = R_max / Nr
dz = Z_max / Nz
r = np.linspace(dr/2, R_max-dr/2, Nr)
z = np.linspace(dz/2, Z_max-dz/2, Nz)
R, Z_grid = np.meshgrid(r, z)


# 2. 変数初期化

u = np.zeros((Nz, Nr)) # 横方向速度
v = np.zeros((Nz, Nr)) # 縦方向速度
Z = np.zeros((Nz, Nr)) # 混合分数


# 3. 境界条件関数

def apply_boundary_conditions(u, v, Z, current_step, total_ramp_steps=1000):
    # ソフトスタート
    factor = min(1.0, current_step / total_ramp_steps)
    current_Vin = V_in_target * factor

    # --- 芯 (Inlet) ---
    wick_mask = r <= R_wick
    v[0, wick_mask] = current_Vin
    u[0, wick_mask] = 0.0
    Z[0, wick_mask] = 1.0

    # --- 壁 (Wall) ---
    wall_mask = r > R_wick
    v[0, wall_mask] = 0.0
    u[0, wall_mask] = 0.0
    Z[0, wall_mask] = 0.0

    # --- 側面 (Open) ---
    u[:, -1] = 0.0
    Z[:, -1] = 0.0
    
    # --- 中心軸 (Symmetry) ---
    u[:, 0] = 0.0
    
    # --- 天井 (Outflow) ---
    v[-1, :] = v[-2, :]
    u[-1, :] = u[-2, :]
    Z[-1, :] = Z[-2, :]

    return u, v, Z


# 4. ヘルパー関数 

def shift_up(f):
    res = np.zeros_like(f)
    res[:-1, :] = f[1:, :]
    res[-1, :] = f[-1, :]
    return res

def shift_down(f):
    res = np.zeros_like(f)
    res[1:, :] = f[:-1, :]
    res[0, :] = f[0, :]
    return res

def shift_left(f):
    res = np.zeros_like(f)
    res[:, :-1] = f[:, 1:]
    res[:, -1] = f[:, -1]
    return res

def shift_right(f):
    res = np.zeros_like(f)
    res[:, 1:] = f[:, :-1]
    res[:, 0] = f[:, 0]
    return res


# 5. メインループ

print(f"Simulation Start: {n_steps} steps (Teardrop Final Version)")
np.seterr(all='ignore')

r_safe = r + 1e-10

for n in range(n_steps):
    
    # --- State Relationship (温度計算) ---
    T = np.full_like(Z, T0)
    mask1 = Z < Z_st
    T[mask1] = T0 + (T_f - T0) * (Z[mask1] / Z_st)
    mask2 = Z >= Z_st
    T[mask2] = T_f - (T_f - T_fuel) * ((Z[mask2] - Z_st) / (1.0 - Z_st))

    # 浮力
    buoyancy = g * beta * (T - T0)

    # --- 1. v (縦方向の速度) ---
    dv_dz = (v - shift_down(v)) / dz # 後退差分
    dv_dr = (shift_left(v) - shift_right(v)) / (2*dr)
    advection_v = v * dv_dz + u * dv_dr
    
    d2v_dz2 = (shift_up(v) - 2*v + shift_down(v)) / dz**2
    d2v_dr2 = (shift_left(v) - 2*v + shift_right(v)) / dr**2
    diffusion_v = nu * (d2v_dz2 + d2v_dr2 + (1.0/r_safe)*dv_dr)
    
    v_new = v + dt * (diffusion_v - advection_v + buoyancy)

    # --- 2. u (横方向の速度) ---
    du_dz = (u - shift_down(u)) / dz
    du_dr = (shift_left(u) - shift_right(u)) / (2*dr)
    advection_u = v * du_dz + u * du_dr
    
    d2u_dz2 = (shift_up(u) - 2*u + shift_down(u)) / dz**2
    d2u_dr2 = (shift_left(u) - 2*u + shift_right(u)) / dr**2
    diffusion_u = nu * (d2u_dz2 + d2u_dr2 + (1.0/r_safe)*du_dr - u/(r_safe**2))
    
    u_new = u + dt * (diffusion_u - advection_u)

    # --- 3. Z (燃料濃度) ---
    dZ_dz = (Z - shift_down(Z)) / dz
    dZ_dr = (shift_left(Z) - shift_right(Z)) / (2*dr)
    advection_Z = v * dZ_dz + u * dZ_dr
    
    d2Z_dz2 = (shift_up(Z) - 2*Z + shift_down(Z)) / dz**2
    d2Z_dr2 = (shift_left(Z) - 2*Z + shift_right(Z)) / dr**2
    diffusion_Z = D_Z * (d2Z_dz2 + d2Z_dr2 + (1.0/r_safe)*dZ_dr)
    
    Z_new = Z + dt * (diffusion_Z - advection_Z)

    # --- 更新 ---
    u = np.clip(u_new, -1.0, 1.0)
    v = np.clip(v_new, -0.5, 4.0)
    Z = np.clip(Z_new, 0.0, 1.0)
    
    u, v, Z = apply_boundary_conditions(u, v, Z, n)

    if n % 3000 == 0:
        print(f"Step {n}/{n_steps} done. Max Temp: {np.max(T):.1f} K")


# 6. 可視化
print("Plotting results...")
plt.figure(figsize=(10, 8))

# 左図: 温度分布
plt.subplot(1, 2, 1)
# 鏡像表示
cf = plt.contourf(R*100, Z_grid*100, T, levels=100, cmap='inferno')
plt.contourf(-R*100, Z_grid*100, T, levels=100, cmap='inferno')

# 火炎面
try:
    if np.max(Z) >= Z_st:
        plt.contour(R*100, Z_grid*100, Z, levels=[Z_st], colors='cyan', linewidths=2)
        plt.contour(-R*100, Z_grid*100, Z, levels=[Z_st], colors='cyan', linewidths=2)
except: pass

plt.colorbar(cf, label='Temperature [K]', shrink=0.8)
plt.title('Teardrop Flame Shape', fontsize=14)
plt.xlabel('r [cm]')
plt.ylabel('z [cm]')
plt.xlim(-R_max*100, R_max*100)
plt.ylim(0, Z_max*100)
plt.gca().set_aspect('equal')

# 右図: 流速場
plt.subplot(1, 2, 2)
skip = 2
plt.quiver(R[::skip, ::skip]*100, Z_grid[::skip, ::skip]*100, 
           u[::skip, ::skip], v[::skip, ::skip], scale=3, color='black', alpha=0.5)

plt.title('Velocity Field', fontsize=14)
plt.xlabel('r [cm]')
plt.ylabel('z [cm]')
plt.xlim(0, R_max*100)
plt.ylim(0, Z_max*100)
plt.gca().set_aspect('equal')

plt.tight_layout()
plt.show(block=True)

〇プロンプト

添付資料はロウソクの炎の形状をモデリングするためにPythonで数値解析を行った結果の図とコードです。添付図の左がロウソクの炎の形状をしてくれません。どのような修正をすればよいですか?修正したフルコードをください。

〇Gemini Flashの生成結果

# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt

# ==========================================
# 1. パラメータ設定 (涙滴型・最終調整版)
# ==========================================
Nr = 40
Nz = 80
R_max = 0.04      # 4cm
Z_max = 0.12      # 12cm

# 芯の半径 (1.5mm)
R_wick = 0.0015

# 物理定数
rho0 = 1.0        # 基準密度 (圧力計算用)
nu = 0.0001       # 動粘性係数
D_Z = 0.0001      # 拡散係数
g = 9.81          # 重力加速度
beta = 1/300.0    # 熱膨張係数 (1/T0)

# 温度・燃料
T0 = 300.0
T_fuel = 600.0
T_f = 2000.0
Z_st = 0.055

# 流速
V_in_target = 0.08

# 時間設定
dt = 0.0001
n_steps = 15000

# ポアソンソルバー設定
POISSON_ITER = 50  # 反復回数

# グリッド生成
dr = R_max / Nr
dz = Z_max / Nz
r = np.linspace(dr/2, R_max-dr/2, Nr)
z = np.linspace(dz/2, Z_max-dz/2, Nz)
R, Z_grid = np.meshgrid(r, z)
r_safe = r + 1e-10 # rが0になることを防ぐ

# ==========================================
# 2. 変数初期化 (圧力 P を追加)
# ==========================================
u = np.zeros((Nz, Nr)) # 横方向速度
v = np.zeros((Nz, Nr)) # 縦方向速度
P = np.zeros((Nz, Nr)) # 圧力 (★追加)
Z = np.zeros((Nz, Nr)) # 混合分数

# ==========================================
# 3. 境界条件関数
# ==========================================
def apply_boundary_conditions(u, v, Z, current_step, total_ramp_steps=1000):
    # ソフトスタート
    factor = min(1.0, current_step / total_ramp_steps)
    current_Vin = V_in_target * factor

    # --- 芯 (Inlet) ---
    wick_mask = r <= R_wick
    v[0, wick_mask] = current_Vin
    u[0, wick_mask] = 0.0
    Z[0, wick_mask] = 1.0

    # --- 壁 (Wall) ---
    wall_mask = r > R_wick
    v[0, wall_mask] = 0.0
    u[0, wall_mask] = 0.0
    Z[0, wall_mask] = 0.0

    # --- 側面 (Open) ---
    u[:, -1] = 0.0
    Z[:, -1] = 0.0
    
    # --- 中心軸 (Symmetry) ---
    u[:, 0] = 0.0
    
    # --- 天井 (Outflow) ---
    v[-1, :] = v[-2, :]
    u[-1, :] = u[-2, :]
    Z[-1, :] = Z[-2, :]

    return u, v, Z

# ==========================================
# 4. ヘルパー関数 (安定した数値微分)
# ==========================================
def shift_up(f):
    res = np.zeros_like(f)
    res[:-1, :] = f[1:, :]
    res[-1, :] = f[-1, :]
    return res

def shift_down(f):
    res = np.zeros_like(f)
    res[1:, :] = f[:-1, :]
    res[0, :] = f[0, :]
    return res

def shift_left(f):
    res = np.zeros_like(f)
    res[:, :-1] = f[:, 1:]
    res[:, -1] = f[:, -1]
    return res

def shift_right(f):
    res = np.zeros_like(f)
    res[:, 1:] = f[:, :-1]
    res[:, 0] = f[:, 0]
    return res
    
# ==========================================
# 5. 圧力ソルバー (★追加)
# ==========================================
def solve_poisson(u_star, v_star, P, dt, rho0, dr, dz, r_safe, iter_max):
    P_new = np.copy(P)
    
    # 連続の式を満たさない度合いを計算 (右辺のソース項 b)
    # div_V = (1/r) * d(r*u)/dr + dv/dz の離散化
    
    # d(r*u)/dr = ( (r+dr/2)*u_i+1/2 - (r-dr/2)*u_i-1/2 ) / dr を、
    # 簡単のため (u_L - u_R) / (2*dr) + u/r で近似
    div_u = (shift_left(u_star) - shift_right(u_star)) / (2*dr)
    div_v = (shift_up(v_star) - shift_down(v_star)) / (2*dz)
    div_V_r_term = u_star / r_safe
    
    # ソース項 b = (rho0 / dt) * div_V
    b = rho0 / dt * (div_u + div_v + div_V_r_term)
    
    # Jacobi/SOR 反復法
    alpha = 1.0 / dr**2
    gamma = 1.0 / dz**2
    denominator = 2.0 * (alpha + gamma)

    for _ in range(iter_max):
        P_prev = np.copy(P_new)
        
        # dP/dr の計算
        dP_dr = (shift_left(P_prev) - shift_right(P_prev)) / (2*dr)
        r_term = (1.0/r_safe) * dP_dr
        
        # P_newの更新 (SOR法: omega=1.0でJacobi法)
        P_laplacian_part = (alpha * (shift_left(P_prev) + shift_right(P_prev)) + 
                            gamma * (shift_up(P_prev) + shift_down(P_prev)))
        
        # P_new = (P_laplacian_part - b + r_term) / denominator
        # 軸対称項は反復の右辺 (既知の項) に含める
        
        P_new = (P_laplacian_part - b - r_term) / denominator

        # 境界条件 (Neumann/Dirichlet)
        P_new[:, 0] = P_new[:, 1]    # 中心軸: dP/dr = 0
        P_new[:, -1] = 0.0           # 側面: P = 0 (開放近似)
        P_new[0, :] = P_new[1, :]    # 入口: dP/dz = 0 (簡略化)
        P_new[-1, :] = 0.0           # 出口: P = 0 (開放)
        
    return P_new

# ==========================================
# 6. メインループ
# ==========================================
print(f"Simulation Start: {n_steps} steps (Teardrop Final Version with Pressure Correction)")
np.seterr(all='ignore')

for n in range(n_steps):
    
    # --- State Relationship (温度計算) ---
    T = np.full_like(Z, T0)
    mask1 = Z < Z_st
    T[mask1] = T0 + (T_f - T0) * (Z[mask1] / Z_st)
    mask2 = Z >= Z_st
    T[mask2] = T_f - (T_f - T_fuel) * ((Z[mask2] - Z_st) / (1.0 - Z_st))

    # 浮力
    buoyancy = g * beta * (T - T0)

    # --- 1. v_star (縦方向の仮速度) ---
    dv_dz = (v - shift_down(v)) / dz 
    dv_dr = (shift_left(v) - shift_right(v)) / (2*dr)
    advection_v = v * dv_dz + u * dv_dr
    
    d2v_dz2 = (shift_up(v) - 2*v + shift_down(v)) / dz**2
    d2v_dr2 = (shift_left(v) - 2*v + shift_right(v)) / dr**2
    diffusion_v = nu * (d2v_dz2 + d2v_dr2 + (1.0/r_safe)*dv_dr)
    
    v_star = v + dt * (diffusion_v - advection_v + buoyancy) # 浮力はここに
    
    # --- 2. u_star (横方向の仮速度) ---
    du_dz = (u - shift_down(u)) / dz
    du_dr = (shift_left(u) - shift_right(u)) / (2*dr)
    advection_u = v * du_dz + u * du_dr
    
    d2u_dz2 = (shift_up(u) - 2*u + shift_down(u)) / dz**2
    d2u_dr2 = (shift_left(u) - 2*u + shift_right(u)) / dr**2
    diffusion_u = nu * (d2u_dz2 + d2u_dr2 + (1.0/r_safe)*du_dr - u/(r_safe**2))
    
    u_star = u + dt * (diffusion_u - advection_u)

    # --- 3. 圧力 P の計算と速度修正 (★新規ステップ) ---
    P = solve_poisson(u_star, v_star, P, dt, rho0, dr, dz, r_safe, POISSON_ITER)

    # 圧力勾配項による速度の修正 (連続の式を満たす速度場へ)
    dP_dr = (shift_left(P) - shift_right(P)) / (2*dr)
    dP_dz = (shift_up(P) - shift_down(P)) / (2*dz)
    
    u = u_star - dt / rho0 * dP_dr
    v = v_star - dt / rho0 * dP_dz
    
    # --- 4. Z (燃料濃度) ---
    dZ_dz = (Z - shift_down(Z)) / dz
    dZ_dr = (shift_left(Z) - shift_right(Z)) / (2*dr)
    advection_Z = v * dZ_dz + u * dZ_dr # 修正された u, v を使用
    
    d2Z_dz2 = (shift_up(Z) - 2*Z + shift_down(Z)) / dz**2
    d2Z_dr2 = (shift_left(Z) - 2*Z + shift_right(Z)) / dr**2
    diffusion_Z = D_Z * (d2Z_dz2 + d2Z_dr2 + (1.0/r_safe)*dZ_dr)
    
    Z_new = Z + dt * (diffusion_Z - advection_Z)

    # --- 5. 更新と境界条件適用 ---
    u = np.clip(u, -1.0, 1.0)
    v = np.clip(v, -0.5, 4.0)
    Z = np.clip(Z_new, 0.0, 1.0)
    
    u, v, Z = apply_boundary_conditions(u, v, Z, n)

    if n % 3000 == 0:
        print(f"Step {n}/{n_steps} done. Max Temp: {np.max(T):.1f} K. Max |P|: {np.max(np.abs(P)):.4f} Pa")

# ==========================================
# 7. 可視化
# ==========================================
print("Plotting results...")
plt.figure(figsize=(10, 8))

# --- 左図: 温度分布 ---
plt.subplot(1, 2, 1)
# 鏡像表示
cf = plt.contourf(R*100, Z_grid*100, T, levels=100, cmap='inferno')
plt.contourf(-R*100, Z_grid*100, T, levels=100, cmap='inferno')

# 火炎面
try:
    if np.max(Z) >= Z_st:
        plt.contour(R*100, Z_grid*100, Z, levels=[Z_st], colors='cyan', linewidths=2)
        plt.contour(-R*100, Z_grid*100, Z, levels=[Z_st], colors='cyan', linewidths=2)
except: pass

plt.colorbar(cf, label='Temperature [K]', shrink=0.8)
plt.title('Teardrop Flame Shape (with Pressure Correction)', fontsize=14)
plt.xlabel('r [cm]')
plt.ylabel('z [cm]')
plt.xlim(-R_max*100, R_max*100)
plt.ylim(0, Z_max*100)
plt.gca().set_aspect('equal')

# --- 右図: 流速場 ---
plt.subplot(1, 2, 2)
skip = 2
# 速度場の大きさを計算してクォーターの長さを決定
V_mag = np.sqrt(u**2 + v**2)
max_V = np.max(V_mag) if np.max(V_mag) > 0 else 1.0 # 0割防止

# scale を max_V に応じて調整 (例: 最大速度が 1m/s なら scale=30)
scale_factor = 3.0 / max_V if max_V > 0.05 else 30.0 

plt.quiver(R[::skip, ::skip]*100, Z_grid[::skip, ::skip]*100, 
           u[::skip, ::skip], v[::skip, ::skip], scale=scale_factor, color='black', alpha=0.5)

plt.title('Velocity Field', fontsize=14)
plt.xlabel('r [cm]')
plt.ylabel('z [cm]')
plt.xlim(0, R_max*100)
plt.ylim(0, Z_max*100)
plt.gca().set_aspect('equal')

plt.tight_layout()
plt.show(block=True)

Gemini Flashでは炎の形状が拡散してしまい、さらにおかしくなってしまっています。

〇Gemini Proの生成結果

# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt

# ==========================================
# 1. パラメータ設定 (温度・形状 最終調整版)
# ==========================================
Nr = 40
Nz = 80
R_max = 0.04     # 4cm
Z_max = 0.12     # 12cm

# 芯の半径 (1.5mm)
R_wick = 0.0015

# 物理定数
rho0 = 1.0
nu = 0.0001      # 動粘性係数
D_Z = 0.0005     # 拡散係数 (ふっくらさせる)
g = 9.81
beta = 1/300.0

# 温度・燃料パラメータ
T0 = 300.0       # 室温 (約27℃)
T_fuel = 600.0   # 芯の温度

T_f = 1500.0     

Z_st = 0.055

# 流速設定 (弱火キープ)
V_in_target = 0.03

# 時間設定
dt = 0.0001
n_steps = 15000

# グリッド生成
dr = R_max / Nr
dz = Z_max / Nz
r = np.linspace(dr/2, R_max-dr/2, Nr)
z = np.linspace(dz/2, Z_max-dz/2, Nz)
R, Z_grid = np.meshgrid(r, z)

# ==========================================
# 2. 変数初期化
# ==========================================
u = np.zeros((Nz, Nr))
v = np.zeros((Nz, Nr))
Z = np.zeros((Nz, Nr))

# ==========================================
# 3. 境界条件関数
# ==========================================
def apply_boundary_conditions(u, v, Z, current_step, total_ramp_steps=1000):
    factor = min(1.0, current_step / total_ramp_steps)
    current_Vin = V_in_target * factor

    # 芯
    wick_mask = r <= R_wick
    v[0, wick_mask] = current_Vin
    u[0, wick_mask] = 0.0
    Z[0, wick_mask] = 1.0

    # 壁
    wall_mask = r > R_wick
    v[0, wall_mask] = 0.0
    u[0, wall_mask] = 0.0
    Z[0, wall_mask] = 0.0

    # 側面
    u[:, -1] = 0.0
    Z[:, -1] = 0.0
    
    # 中心軸
    u[:, 0] = 0.0
    
    # 天井
    v[-1, :] = v[-2, :]
    u[-1, :] = u[-2, :]
    Z[-1, :] = Z[-2, :]

    return u, v, Z

# ==========================================
# 4. ヘルパー関数
# ==========================================
def shift_up(f):
    res = np.zeros_like(f)
    res[:-1, :] = f[1:, :]
    res[-1, :] = f[-1, :]
    return res

def shift_down(f):
    res = np.zeros_like(f)
    res[1:, :] = f[:-1, :]
    res[0, :] = f[0, :]
    return res

def shift_left(f):
    res = np.zeros_like(f)
    res[:, :-1] = f[:, 1:]
    res[:, -1] = f[:, -1]
    return res

def shift_right(f):
    res = np.zeros_like(f)
    res[:, 1:] = f[:, :-1]
    res[:, 0] = f[:, 0]
    return res

# ==========================================
# 5. メインループ
# ==========================================
print(f"Simulation Start: {n_steps} steps (Temp 1500K)")
np.seterr(all='ignore')

r_safe = r + 1e-10

for n in range(n_steps):
    
    # 温度計算
    T = np.full_like(Z, T0)
    mask1 = Z < Z_st
    T[mask1] = T0 + (T_f - T0) * (Z[mask1] / Z_st)
    mask2 = Z >= Z_st
    T[mask2] = T_f - (T_f - T_fuel) * ((Z[mask2] - Z_st) / (1.0 - Z_st))

    buoyancy = g * beta * (T - T0)

    # --- v ---
    dv_dz = (v - shift_down(v)) / dz
    dv_dr = (shift_left(v) - shift_right(v)) / (2*dr)
    advection_v = v * dv_dz + u * dv_dr
    
    d2v_dz2 = (shift_up(v) - 2*v + shift_down(v)) / dz**2
    d2v_dr2 = (shift_left(v) - 2*v + shift_right(v)) / dr**2
    diffusion_v = nu * (d2v_dz2 + d2v_dr2 + (1.0/r_safe)*dv_dr)
    
    v_new = v + dt * (diffusion_v - advection_v + buoyancy)

    # --- u ---
    du_dz = (u - shift_down(u)) / dz
    du_dr = (shift_left(u) - shift_right(u)) / (2*dr)
    advection_u = v * du_dz + u * du_dr
    
    d2u_dz2 = (shift_up(u) - 2*u + shift_down(u)) / dz**2
    d2u_dr2 = (shift_left(u) - 2*u + shift_right(u)) / dr**2
    diffusion_u = nu * (d2u_dz2 + d2u_dr2 + (1.0/r_safe)*du_dr - u/(r_safe**2))
    
    u_new = u + dt * (diffusion_u - advection_u)

    # --- Z ---
    dZ_dz = (Z - shift_down(Z)) / dz
    dZ_dr = (shift_left(Z) - shift_right(Z)) / (2*dr)
    advection_Z = v * dZ_dz + u * dZ_dr
    
    d2Z_dz2 = (shift_up(Z) - 2*Z + shift_down(Z)) / dz**2
    d2Z_dr2 = (shift_left(Z) - 2*Z + shift_right(Z)) / dr**2
    diffusion_Z = D_Z * (d2Z_dz2 + d2Z_dr2 + (1.0/r_safe)*dZ_dr)
    
    Z_new = Z + dt * (diffusion_Z - advection_Z)

    # --- 更新 ---
    u = np.clip(u_new, -1.0, 1.0)
    v = np.clip(v_new, -0.5, 4.0)
    Z = np.clip(Z_new, 0.0, 1.0)
    
    u, v, Z = apply_boundary_conditions(u, v, Z, n)

    if n % 3000 == 0:
        print(f"Step {n}/{n_steps} done. Max Temp: {np.max(T):.1f} K")

# ==========================================
# 6. 可視化
# ==========================================
print("Plotting results...")
plt.figure(figsize=(10, 8))

# 左図
plt.subplot(1, 2, 1)
cf = plt.contourf(R*100, Z_grid*100, T, levels=100, cmap='inferno')
plt.contourf(-R*100, Z_grid*100, T, levels=100, cmap='inferno')

try:
    if np.max(Z) >= Z_st:
        plt.contour(R*100, Z_grid*100, Z, levels=[Z_st], colors='cyan', linewidths=2)
        plt.contour(-R*100, Z_grid*100, Z, levels=[Z_st], colors='cyan', linewidths=2)
except: pass

plt.colorbar(cf, label='Temperature [K]', shrink=0.8)
plt.title('Teardrop Flame Shape', fontsize=14)
plt.xlabel('r [cm]')
plt.ylabel('z [cm]')
plt.xlim(-R_max*100, R_max*100)
plt.ylim(0, Z_max*100)
plt.gca().set_aspect('equal')

# 右図
plt.subplot(1, 2, 2)
plt.quiver(R[::2, ::2]*100, Z_grid[::2, ::2]*100, 
           u[::2, ::2], v[::2, ::2], scale=3, color='black', alpha=0.5)

plt.title('Velocity Field', fontsize=14)
plt.xlabel('r [cm]')
plt.ylabel('z [cm]')
plt.xlim(0, R_max*100)
plt.ylim(0, Z_max*100)
plt.gca().set_aspect('equal')

plt.tight_layout()
plt.show(block=True)

Gemini Proでは左側の図を見てわかる通り、炎の形状を正しく修正することができました。

実際、Gemini Flashはいじる必要のない箇所を修正してしまい、さらに結果が悪くなっていました。Gemini Proでは添付画像の図の形状を理解し、「なぜこの形状なのか?」を考えて、最終的にパラメータ調整を行うことにより正しい修正ができていました。

②2TBのクラウドストレージが付属

Google AI Proは、2TBのクラウドストレージもセットになっているため、別途Google Oneでストレージを契約しているユーザーにとっては、実質的な追加コストを抑えてAIを導入できます。

2TBのGoogle Oneクラウドストレージプランの料金が月額1,300円なので実質1,600円でGoogleのAIを導入できる計算になります!「性能」と「価格」のバランスが最も優れているのがこのプランです。

③Google Workspaceとのシームレスな連携

ビジネス利用において最も恩恵を感じやすいのが、Google Workspaceアプリ(Docs, Gmail, Drive, Slides, Sheets)内でのAI連携です。

無料版では「Geminiのチャット画面で文章を作り、それをコピーしてドキュメントに貼り付ける」という作業が必要でしたが、Google AI Proプランの方なら、アプリ内で直接AIを呼び出せます。具体的には以下のような使い方ができます!

  • Gmail: 受信メールを開いたまま「このメールへの返信案を丁寧に作成して」と指示出しが可能。
  • Googleドキュメント: 執筆中に「この段落をもっとフォーマルに書き直して」「続きの構成案を出して」とシームレスに編集。
  • Googleスライド: テキストのプロンプトから、プレゼン資料のデザインと構成を一発で生成。

アプリを行き来する「スイッチングコスト」をゼロにし、業務スピードを物理的に加速させることができるのが、Google AI Proを選ぶ非常に大きなメリットです。

具体的には以下のようなことが可能です。今回はGoogleドキュメントの「改良」機能を使ってみます。今回はあえて、学生が書いたような校正が必要そうな文章をつかい、よりフォーマルな文章にしてみます。

〇元の文章

円安っていうのは、円の価値が他の国の通貨、例えばアメリカのドルとかと比べて安くなるってことです。これはすごく大事な経済の話です。

円安になると、1ドルを交換するときに前よりも多くの日本円が必要になるってことになります。例えば、前は1ドルが100円だったのに、円安になると1ドルが150円になる、みたいな感じです。100円で買えてたものが150円出さないと買えなくなるから、円の力が弱くなっているっていう意味です。

〇Geminiの改良後(よりフォーマルに)

円安とは、日本円の価値が、外国の通貨、例えばアメリカドルなどと比較して相対的に下落する経済現象を指します。これは、経済において非常に重要な意味を持ちます。

円安が進行すると、1米ドルを交換するために必要となる日本円の金額が増加します。具体的には、以前は1ドルが100円であったものが、円安により1ドルが150円になる、といった状況です。これは、従来100円で購入できたものが150円を支払わなければ購入できなくなることを意味し、日本円の購買力が低下していることを示します。

このように「改良」機能を使うと元の文章の内容はそのままに、しっかりとした言葉遣いや文章校正で書き換えてくれます!

④Google Flowが追加コストなしで利用可能

Google AI Proユーザーの大きな特権として、最新のAI動画生成ツール「Google Flow」を利用できる点が挙げられます。

先ほども動画生成の箇所で説明した通り、Google AI Proならプラン内に毎月付与されるAIクレジットを使用することで、追加コストなしでAI動画生成、編集を始められます。

動画制作を外注したり、高額な専用ツールを契約したりするコストを考えれば、この機能だけで月額料金の元が取れると言っても過言ではありません。

具体的な活用法としては、商品紹介のイメージ動画を生成するなどがあります。

〇プロンプト

商品紹介用の動画素材を作りたいです。添付画像の60系プリウスの360°回転動画を生成してください。

〇生成結果

このように、動画生成時の画像添付機能を使いイメージ通りの紹介動画を生成することが可能です!

⑤NotebookLMの機能が拡張

Googleが提供する大注目のリサーチ・学習ツール「NotebookLM」においても、Google AI Proユーザーは拡張された機能を利用できます。

NotebookLMは、手持ちのPDF資料やWebサイトのURLを読み込ませることで、その資料に基づいた回答をしてくれる「RAG(検索拡張生成)」ツールですが、Proプランでは「NotebookLM Plus」という上位版を利用できます!

具体的には以下のように回数制限が緩和されます。

NotebookLM(通常版)NotebookLM Plus
1日あたりの質問回数50回まで500回まで
1日あたりの音声要約生成数3回まで20回まで
ノートブック数100件まで500件まで
ソース数50件まで300件まで

大量の資料を読み込む必要がある研究者や、社内マニュアルを学習させたいビジネスパーソンにとって、この拡張機能は強力な武器となります。

具体的には以下のような使い方ができます。今回は架空の社内オリエンテーションマニュアルを作り、アップロードしました。

〇プロンプト

新入社員をサポートする主要部署と、社内交流を促進する具体的な仕組みは何ですか?

〇生成結果

新入社員をサポートする主要部署と、社内交流を促進する具体的な仕組みについて、提供された資料に基づいてご説明します。

### I. 新入社員をサポートする主要部署

新入社員のサポート、手続き、オリエンテーションなどを主に担当するのは、**人事部**と**総務部**です。

1.  **人事部**
    人事部は、新入社員が円滑に勤務をスタートするための基本的な情報提供や手続きを主に担当します。
    *   **オリエンテーションでの担当内容**: 開会の挨拶、会社概要の説明、就業規則・服務規程の説明、各種申請手続き、福利厚生に関する説明を行います。
    *   **困りごとの連絡先**: 業務や社内のことで不明点や困りごとがある場合の連絡先として、**採用、給与、休暇**に関する窓口となります。
    *   **所在地**: 人事部はオフィスビルの3階に位置し、各種手続きの窓口となっています。

2.  **総務部**
    総務部は、主に会社の環境やインフラに関するサポートを担当します。
    *   **オリエンテーションでの担当内容**: IT環境、情報セキュリティに関する説明を担当します。また、**職場案内**や**部署紹介**も総務部が担当します。
    *   **困りごとの連絡先**: 以下の項目について連絡窓口となります。
        *   **PC・システム関連**(総務部 IT担当)
        *   **備品・施設関連**(総務部)

### II. 社内交流を促進する具体的な仕組み

資料に記載されている、社内交流を促進するための具体的な仕組みは、主に以下の二つです。

1.  **ランチ交流会**
    *   **目的**: 新入社員を歓迎するため。
    *   **内容**: **配属部署のメンバー**とのランチ交流会が開催されます。
    *   **時期**: **配属後1週間以内**に開催され、詳細は部署責任者より案内があります。

2.  **全社キックオフミーティング**
    *   **目的**: 全社員が集まり、**業績報告と次期の目標を共有**するため。
    *   **頻度**: **半期に一度**実施されます。

これらの仕組みは、新入社員が当社の文化や働き方を理解し、一日でも早く会社に慣れることの一助となることが期待されています。

このように知りたい箇所のみを分かりやすくまとめ直してくれます!

最適なプランの選び方まとめ

最適なプランの選び方の要約画像

最後に、あなたの状況に合わせた最適なプランの選び方をまとめます。

無料プランがおすすめな人

  • AIをまずは無料で試してみたい人
  • 簡単なメールの返信作成や、日常の調べ物に使いたい人
  • 回答の「精度」よりも「速度」を重視する人

無料プランはGeminiの最低限の機能を利用することができます。日常のちょっとした調べ物などに使いたい方や、Google AI Proプランを契約するか迷っている方はまずはこの無料プランから試してみてください!

Google AI Proがおすすめな人

  • 仕事で本格的にAIを活用して効率化したい人
  • 長文の要約、記事作成、複雑なデータ分析を行いたい人
  • GoogleドキュメントやGmailでのAI連携機能を使いたい人
  • 最もコストパフォーマンス良く高性能AIを使いたい人
  • 2TBのストレージも合わせて確保したい人

Google AI Proは一番スタンダードなプランとなっています。また、GoogleのAI関係のほとんどの機能を利用可能で、各種回数制限も十分実用的な範囲で設定されています。2TBのクラウドストレージがついてくるという点も非常に大きなポイントになっています。

Google AI Ultraがおすすめな人

  • 1日に数百回以上AIと対話するヘビーユーザー
  • 研究や業務で高度な作業に使用する場合
  • 開発業務などでAPI制限や回数制限を気にしたくない人
  • 動画編集などを行い、5TB以上の大容量ストレージが必要なクリエイター
  • 常に最高速の環境でストレスなく作業したい人

Google AI Ultraは主に研究や業務で高度な作業に使用する場合に適したプランです。Ultraプラン限定機能の「Agent Mode」や「Deep think」機能があったり、非常に高く設定された回数制限などがありますが、一般的なユーザーではそのほとんどを持て余してしまいます。

Ultraプランは本来は企業や開発チームが導入するレベルのスペックを個人開放しているため他のプランに比べて月額36,400円と非常に高額になっています。

個人ユーザーはいきなりGoogle AI Ultraにする前に、Google AI Proプランを契約してみてどうしても不満があればGoogle AI Ultraプランを契約する流れがおすすめです。

まとめ:Google AI Proはコスパ最強

この記事では、新しくなったGoogleのAIプラン体系について、無料プラン・Google AI Pro・Google AI Ultraの違いを徹底解説しました。

プラン選びで迷った際に最も重要なのは、「コストに対してどれだけのパフォーマンス(時短・効率化)が得られるか」です。その観点で言えば、Google AI Proは間違いなく最もコストパフォーマンスに優れた選択肢と言えます。

この記事のポイントをまとめると以下の通りです。

  • Google AI Proがほとんどのユーザーの最適解:Gemini Proを1日100回使えて、動画生成やWorkspace連携も付帯する「コスパ最強」のプラン。
  • 無料版はあくまで「お試し」:Gemini Proの利用が1日5回に限られるため、本格的な業務利用には不向き。
  • Ultraはプロフェッショナル専用:月額36,400円と高額。「Agent Mode」などが必要な特殊な業務・研究用途以外ではオーバースペックになる可能性が高い。
  • 2TBストレージの恩恵:Google AI Proにはストレージ特典が含まれるため、実質的なAIコストはさらに安く感じられる。

もし現在、無料プランを使用していて「もう少し賢い回答が欲しい」「制限を気にせず使い倒したい」と感じているなら、まずはGoogle AI Proを試してみてください

romptn ai厳選のおすすめ無料AIセミナーでは、AIの勉強法に不安を感じている方に向けた内容でオンラインセミナーを開催しています。

AIを使った副業の始め方や、収入を得るまでのロードマップについて解説しているほか、受講者の方には、ここでしか手に入らないおすすめのプロンプト集などの特典もプレゼント中です。

AIについて効率的に学ぶ方法や、業務での活用に関心がある方は、ぜひご参加ください。

\累計受講者10万人突破/