TECH PLAY

株式会社G-gen

株式会社G-gen の技術ブログ

743

G-gen の菊池です。当記事では、Looker で BigQuery のデータを可視化するための一連のフローを、スクリーンショット付きで解説します。BigQuery との接続から、LookML の自動生成と調整、Explore での可視化などを説明します。 はじめに 当記事について Looker、ビュー、Explore、モデル 構成図 BigQuery 側の準備 デモ用データセットの作成 サンプルデータの投入 接続用サービスアカウント(SA) の作成と権限付与 Looker の接続設定 BigQuery への接続(Connection)の作成 接続テストと設定の保存 LookML プロジェクトの作成(新規モデルの作成) プロジェクトページへ移動 データベース接続を選択 テーブルを選択する 主キーの選択 作成する Explore を選択する モデル名を入力 LookML の定義と調整 自動生成されたファイルの確認 ディメンションからメジャーへの修正 日付データの修正 変更のコミットと本番反映 Explore でデータを可視化してみる Explore 画面の操作 フィルターの使い方 ディメンションからメジャーへの修正をしなかった場合 日付データの修正をしなかった場合 はじめに 当記事について 当記事では、Looker でデータを可視化する際の一連のフローである「BigQuery との接続・認証」「LookML の作成」、そしてビジュアリゼーション作成を含む「Explore での可視化」について解説します。 Looker、ビュー、Explore、モデル Looker とは、エンタープライズ向けのデータプラットフォームです。開発者向けのセマンティックレイヤーとユーザー向けの BI ツールの両方の特徴を併せ持っています。 Looker 独自のモデリング言語である LookML を使用することで、分析対象のデータの構造とビジネスルールを定義するデータモデルを作成、管理できます。 Looker は、この LookML で定義されたデータモデルから自動的に SQL を生成します。そのため、SQL を知らないユーザーでも、直感的なインターフェースからデータを探索し、分析できます。 参考 : Looker 参考 : LookMLの紹介 Looker は、データベースのテーブルと1対1で紐づく「 ビュー 」、どのビューをユーザーに見せるか定義する「 Explore 」、どのデータベースに接続するか、どの Explore をユーザーに公開するか定義する「 モデル 」の3つの構造で成り立っています。 参考 : LookMLの用語と概念 これら3つの構成要素についての詳細は、以下の記事も参照してください。 blog.g-gen.co.jp 構成図 今回構成する Looker から BigQuery のテーブルを参照する環境は以下の通りです。 構成 BigQuery 側の準備 デモ用データセットの作成 以下の名前でデモ用のデータセットを作成します。 項目 設定値 データセット名 looker_demo_source サンプルデータの投入 BigQuery では、Google Merchandise Store (Google ブランドの商品を販売するオンラインストア)の Google アナリティクス 4 のデータがサンプルデータとして使用できます。今回はそのサンプルデータから以下の SQL の結果を取得して参照用のテーブルとします。 WITH UserData AS ( SELECT event_date AS date , user_pseudo_id, ( SELECT value.int_value FROM UNNEST(event_params) WHERE key = ' ga_session_id ' ) AS session_id, geo.country AS country, event_name, ( SELECT value.string_value FROM UNNEST(event_params) WHERE key = ' session_engaged ' ) AS session_engaged_flag, ( SELECT value.int_value FROM UNNEST(event_params) WHERE key = ' engagement_time_msec ' ) AS engagement_time_msec FROM `bigquery- public -data.ga4_obfuscated_sample_ecommerce.events_*` WHERE PARSE_DATE( ' %Y%m%d ' , _TABLE_SUFFIX) BETWEEN DATE ' 2021-01-01 ' AND DATE ' 2021-01-31 ' ) SELECT date , --日付 COUNT ( DISTINCT CASE WHEN session_engaged_flag = ' 1 ' THEN user_pseudo_id WHEN event_name = ' first_visit ' THEN user_pseudo_id WHEN engagement_time_msec > 0 THEN user_pseudo_id END ) AS active_users, --アクティブユーザー数 COUNT ( DISTINCT CASE WHEN event_name = ' first_visit ' THEN user_pseudo_id END ) AS new_users, --新規ユーザー数 COUNT ( DISTINCT CONCAT (user_pseudo_id, CAST (session_id AS STRING))) AS sessions, --セッション数 country, --国 FROM UserData GROUP BY date , country ORDER BY date このテーブルには 2021 年 1 月の日付、国ごとのアクティブユーザー数、新規ユーザー数、セッション数が含まれています。 列名 説明 date 日付 active_users アクティブユーザー数 new_users 新規ユーザー数 sessions セッション数 country 国 SELECT 文のクエリ結果は、[結果の保存]をクリックし、[ローカルへのダウンロード] > [ CSV ]を選択して保存します。 クエリ結果の保存 作成していたデータセット「looker_demo_source」の右側の三点リーダーをクリックし、[テーブルを作成]を選択します。 [テーブルを作成]画面では、以下のように設定して、[テーブルを作成]をクリックします。 項目 設定値 ソース > テーブルの作成元 アップロード ソース > ファイルを選択 ダウンロードした CSV ファイル ソース > ファイル形式 CSV 送信先 > プロジェクト 自身のプロジェクト 送信先 > データセット looker_demo_source 送信先 > テーブル ga4_daily_metrics_by_country スキーマ > 自動検出 チェックを入れる 詳細オプション > ヘッダー行のスキップ 1 接続用サービスアカウント(SA) の作成と権限付与 Looker が BigQuery データベースへのアクセスに使用する認証を構成します。 サービスアカウント作成 1.Google Cloud コンソールで[ API とサービス] > [認証情報]へ移動します。 2.[認証情報を作成] を選択し、[サービス アカウント] を選択します。 3.サービス アカウントの作成画面で以下を入力して、[作成して続行] を選択します。 項目 設定値 サービスアカウント名 looker-bq-connection-sa サービスアカウントID サービスアカウント名を入力すると自動で同じ値が入力される。 サービスアカウントの説明 Looker から BigQuery へのアクセス用 サービスアカウント作成画面 4.権限の設定画面で、[ロールを選択] フィールドで以下のロールを選択します。2つ目以降も[別のロールを追加] を選択して、同じようにロールを選択します。 BigQuery > BigQuery データ編集者 BigQuery > BigQuery ジョブユーザー サービスアカウントの権限設定画面 サービスアカウントの権限設定 5.[続行] を選択して [完了] を選択します。 サービス アカウントの認証を構成 1.[認証情報] ページで、新しく作成したサービス アカウントのメールを選択します。 サービスアカウントの選択 2.サービス アカウントの詳細画面で[鍵]タブを選択し、[キーを追加] のプルダウンから [新しいキーを作成] を選択します。 サービスアカウントに新しいキーを作成 3.[キーのタイプ] で [JSON] を選択し、[作成] を選択します。 キーのタイプを選択 4.秘密鍵(JSON ファイル)がコンピュータに保存されるので、ダウンロード先をメモしてから[閉じる]をクリックします。 秘密鍵のダウンロード 鍵を再度ダウンロードすることはできないため、ここで忘れずに保存先をメモしておきます。 Looker の接続設定 BigQuery への接続(Connection)の作成 1.以下の 2 つの方法のいずれかで、[データベースを Looker に接続] ページを開きます。 [管理者] パネルの [データベース] セクションで [接続] を選択します。[接続(Connections)]ページで、[接続を追加(Add Connection)] ボタンをクリックします。 管理者パネルから接続ページへ メイン ナビゲーション パネルの [作成] ボタンをクリックし、[接続] メニュー項目を選択します。 メインパネルの作成から接続ページへ 2.全般設定の画面で以下の通りに設定し、[次へ]をクリックします。 項目 設定値 名前 conn-ga4-daily-demo SQL 言語(SQL Dialect) [Google BigQuery Standard SQL]を選択 プロジェクトの範囲 [すべてのプロジェクト]をチェック 全般設定 3.データベース設定の画面で以下の通りに設定します。 項目 設定値 課金プロジェクト ID データセットを作成したプロジェクトのID ストレージ プロジェクト ID なし プライマリ データセット looker_demo_source データベース設定 4.認証の設定で以下の通りに設定し、[次へ]をクリックします。 項目 設定値 認証方法 [サービスアカウント]を選択 サービスアカウント証明書 ダウンロードしていた秘密鍵(JSONファイル)を指定 認証の設定 5.オプションの設定で以下の通りに設定し、[次へ]をクリックします。 項目 設定値 ノードあたりの最大接続数 30 接続プールのタイムアウト 120 この接続に関する同時実行クエリの最大数 200 この接続に関するユーザーあたりの同時実行クエリの最大数 25 最大課金ギガバイト数 なし その他の JDBC パラメータ なし メンテナンス スケジュール なし コンテキストの無効化 選択 SSL 選択 テーブルと列を事前にキャッシュに保存 選択 スキーマを取得してキャッシュに保存 選択 PDT を有効にする オフ データベースのタイムゾーン Asia - Tokyo クエリのタイムゾーン Asia - Tokyo オプションの設定(1) オプションの設定(2) オプションの設定(3) 接続テストと設定の保存 6.接続の該当するフィールドをすべて入力したら、必要に応じて接続をテストを実施します。 接続テスト 7.[次へ]をクリックして、接続設定の確認をしたら、[保存]をクリックします。 接続の保存 LookML プロジェクトの作成(新規モデルの作成) プロジェクトページへ移動 1.Development Mode(開発モード)になっていることを確認し、ナビゲーション パネルの [開発] セクションから、[プロジェクト] を選択します。 開発パネルからプロジェクトページへ 2.[LookML プロジェクト] ページで、[New Model] をクリックします。 プロジェクトページ データベース接続を選択 3.[データベース接続を選択]画面で以下の通り設定して、[次へ]をクリックします。 項目 設定値 データベース接続 conn-ga4-daily-demo LookML Project Name proj_ga4_analysis データベース接続を選択 テーブルを選択する 4.[テーブルを選択する]画面で、Looker で接続するプロジェクトとデータセットを選択し、右側の[Tables]をクリックします。 項目 設定値 GCPプロジェクト データセットが存在する Google Cloud プロジェクト データセット looker_demo_source GCP プロジェクトとデータセット選択 5.選択したデータセットに存在するテーブルの一覧が表示されるので、以下のテーブルを選択します。その他のオプションはデフォルトのままで[次へ]をクリックします。 項目 設定値 テーブル ga4_daily_metrics_by_country テーブルの選択 主キーの選択 6.[主キーの選択]画面では、テーブルを適切に結合するための主キーを設定します。この手順は省略可能です。今回は主キーは不要なので何も選択せずに[次へ]をクリックします。 主キーの選択 作成する Explore を選択する 7.[作成する Explore を選択する]画面では、Explore のビューとして使用するテーブルを選択します。テーブル「ga4_daily_metrics_by_country」の横にあるチェックボックスを選択して、[次へ]をクリックします。 作成する Explore を選択 モデル名を入力 8.[モデル名を入力]画面で以下のモデル名を入力して、[完了してモデルを表示]ボタンをクリックします。 項目 設定値 モデル名 ga4_daily_demo モデル名を入力 以上の手順で、LookMLプロジェクトとモデルが作成され、Looker IDE(統合開発環境)が開かれます。 Looker IDE 参考 : モデルの生成 LookML の定義と調整 自動生成されたファイルの確認 直前の処理から遷移した Looker IDE 画面へは、メイン ナビゲーション メニューの [開発] パネルからもアクセスできます。ナビゲーション メニューで [開発] を選択して、[開発] パネルを開きます。 [開発] パネルでプロジェクトの一覧が表示されるので、アクセスするプロジェクトの名前を選択します。「プロジェクトを検索」欄にプロジェクト名の一部を入れることで、簡単に探し出すことができます。 プロジェクトへ移動 Looker IDE 画面 遷移した Looker IDE 画面の左側にある「①IDE ナビゲーション バー」から「ファイルブラウザ」を選択します。すると、②機能パネルにファイルブラウザが表示されます。 ファイルブラウザでファイルを選択すると、③IDE エディタパネルに選択したファイルの内容が表示されます。 ファイルブラウザには2種類のファイルが既に作成されています。これらは、モデルを作成する際に選択したテーブルの定義を元に作成されたファイルです。 作成されたファイル views フォルダにある「ga4_daily_metrics_by_country.view」というファイルは、Looker のビュー(View)を定義するファイルです。データベースのテーブル「ga4_daily_metrics_by_country」と1対1で対応しおり、テーブル内の各列を定義します。 ビューファイル models フォルダにある「ga4-daily-demo.model」というファイルは、Looker のモデルを定義するファイルです。 このファイルでは、 explore パラメータを使用して Explore(エクスプロア)が定義されています。ユーザーが UI 上で見る「データ探索(Explore)」画面の元となる定義です。モデルファイルは、どのデータベースに接続するか、どの Explore をユーザーに公開するかを管理します。 モデルファイル 自動で生成されたモデルファイルとビューファイルは、この状態でも BigQuery のテーブルを BI として確認できる状態です。 しかし、自動生成されたファイルをそのまま使うのではなく、いくつか修正する必要があります。なぜ修正が必要かについては、データを可視化する部分で説明します。 ディメンションからメジャーへの修正 ビューファイルはテーブル内の各列をディメンションとメジャーとして定義します。ディメンションとは、日付や顧客名、商品カテゴリといったデータの属性や切り口を表します。メジャーとは、売上合計やユーザー数、平均年齢といった集計値や計算したい値を表します。 自動生成されたビューファイルでは、数値として表示したい列がディメンションとして定義されている場合があります。そのような列はメジャーに修正する必要があります。 以下の3つの数値列をディメンションからメジャーへ修正します。 物理名 論理名 active_users アクティブユーザー数 new_users 新規ユーザー数 sessions セッション数 修正箇所 修正前 修正後 dimension measure type: number type: sum メジャー(measure)への修正 日付データの修正 以下の列は日付のデータを YYYYMMDD 形式(例:2026年1月1日の場合、20260101)の数値で格納した列です。BigQuery でテーブルを作成する際、スキーマ自動検出にしていたため、数値の列として作成されました。 物理名 論理名 date イベント日 date 列を日付型として扱うために、以下のように修正します。 修正箇所 修正前 修正後 dimension dimension_group type: number type: time なし timeframes: [date, week, month, year, raw] なし datatype: yyyymmdd 日付型の定義 変更のコミットと本番反映 ファイルに変更点がある場合、以下のようにファイル名の右側に青い丸が付き、エディタパネルの右上に「Save Changes」ボタンが表示されます。 ファイルに変更点がある場合 Save Changes ボタン 「Save Changes」ボタンをクリックすると変更が保存され、画面右上にある Git ボタンが「Validate LookML」となります。 Git ボタン(Validate LookML) 画面右上にある Git ボタンは、プロジェクトの状態に応じて、プロジェクトを環境に反映するために必要なアクションが表示されます。 アクション 表示 LookML を検証 Validate LookML commit、ブランチをリモートに push Commit Changes & Push 本番環境にデプロイ Deploy to Production ファイルに変更点がある場合、Git ボタンは「Validate LookML」となり、それをクリックすることで変更内容にエラーがないか検証されます。 エラーがない場合、Git ボタンは「Commit Changes & Push」となり、画面右側のサイドパネルには LookML の検証結果が表示されます。 LookML の検証結果 「Commit Changes & Push」となっている Git ボタンをクリックすると、Commit 画面が表示されます。変更を反映するファイルにチェックを入れ、コミットメッセージを入力して [Commit] ボタンをクリックします。 Commit 画面 Commit と Push が行われると、Git ボタンは「Deploy to Production」と表示されます。 本番環境へデプロイ 「Deploy to Production」となっている Git ボタンをクリックすることで、変更内容が本番環境にデプロイされます。本番環境にデプロイされた変更内容は、Looker インスタンスを使用するユーザー全員が確認できます。 変更内容を作業者が確認するだけならば、「Deploy to Production」をクリックする手前までで充分です。 参考 : 開発モードと本稼働モード Explore でデータを可視化してみる Explore 画面の操作 ナビゲーション メニューで [Explore] を選択して、[Explore] パネルを開きます。Explore の一覧が表示されるので、アクセスする Explore の名前を選択します。 「Explore を検索」欄に Explore 名の一部を入れると、すぐに探しだすことができます。 Explore を開く Explore 画面が表示されます。左側の[すべてのフィールド]タブに一覧で表示されているフィールドから、グラフとして表示したいフィールドを選択していきます。 Explore の初期画面 フィールドの一覧から、以下のフィールドを順に選択していきます。Date フィールドについては、[Date Date] の左側にある▼マークをクリックすることで、Date、Month、Week、Yearというフィールドが展開されます。 Date Country Sessions Active Users New Users フィールドの選択 フィールドを選択すると右側にある [データ] パネルに選択したフィールドが追加されます。右上にある [実行] ボタンをクリックします。 データパネル 選択したフィールドのデータが取得されます。「行数上限に達しました。結果の一部が表示されない可能性があります。」というメッセージが表示されることがあります。右上にある「行数上限」が 500 になっていますが、取得したデータが500行以上ある場合にこのメッセージが表示されます。 全てのデータを表示したい場合は、行数上限の値を取得データの行数より大きい値(例 : 5000)のようにして、[実行] ボタンを再度クリックします。 [ビジュアリゼーション] パネルの左側にある▼マークをクリックすると、[ビジュアリゼーション] パネルが表示されます。 ビジュアリゼーションパネルの展開 今回は、Country フィールドに国名のデータがあったため、Google マップのビジュアリゼーションが自動で選ばれました。 ここから、ビジュアリゼーションを表(テーブル)形式へ変更する場合は、ビジュアリゼーションパネルにあるテーブルのマークをクリックします。 ビジュアリゼーションの変更 テーブル形式のビジュアリゼーション テーブルの Country フィールドを見ると、数値の他にデータの値を表す水平棒グラフのビジュアリゼーションが表示されています。 セルのビジュアリゼーション このビジュアリゼーションが不要な場合は、ビジュアリゼーションタブの右側にある [編集] タブをクリックします。 表示されたパネルの [系列] タブを選択し、[カスタマイズ] で Sessions を展開し、「セルのビジュアリゼーション」をオフにします。 セルのビジュアリゼーションをオフにする セルのビジュアリゼーションなし 参考 : Explore の作成と編集 参考 : Looker での Explore の表示と操作 参考 : セルのビジュアリゼーション フィルターの使い方 フィールドの値を絞り込みたい場合は、フィルタを追加します。フィルタの追加方法は以下の2通りです。 左側のフィールド一覧で、フィールド名の右側にある [フィールドでフィルタ] を選択します。 [データ] パネルの [結果] タブで、フィールドの見出しにある歯車を選択し、[フィルタ] を選択します。 フィルタの追加方法 [フィルタ] パネルが開き、選択したフィールドのフィルタが表示されます。フィルタの値を指定するには、「任意の値」の欄をクリックします。 フィルタする値の選択箇所 値の一覧が表示されるので、フィルタに使用する値を選択します。 フィルタの値の選択 [実行] ボタンをクリックすることで、[ビジュアリゼーション] パネルの表が、フィルタで指定した値で絞り込みされます。 フィルタの結果 フィルタ方法を「次を含む」や「次で始まる」などに変更する場合は、「任意の値」欄の左側で選択します。 フィルタ方法の変更 参考 : データのフィルタリングと制限 ディメンションからメジャーへの修正をしなかった場合 LookML の定義と調整の手順で数値の列を、ディメンションからメジャーへ修正していました。 メジャーにした列は以下のような挙動になります。 Country : Albaniaでフィルタした場合の結果は、以下の通りです。 Countryでフィルタした結果 ここで、DateフィールドをMonthフィールドに変えた場合、フィルタした国の1ヶ月の数値として集計された結果になります。 月単位の集計結果 ディメンションとメジャーの挙動の違いを確認するため、active_users を dimension に変えて、反映してみます。 active_usersをディメンションにした場合 1ヶ月の集計結果は以下の図の通り、3行になってしまいます。 active_usersをディメンションにした結果 これは、active_users がディメンションであることにより、集計対象の数値ではなく、数字の1、2、3で分類する項目とみなされるようになったためです。意図した集計結果を出すためには、集計したい列をメジャーとして定義する必要があることがわかります。 日付データの修正をしなかった場合 date 列の元となった Google アナリティクス4のデータの event_date 列は日付を YYYYMMDD 形式で表示した文字列でした。 そして、その列から作成したサンプルデータの date 列は自動でスキーマを読み取った際に数字データとして取り込まれました。 そのため、生成されたままの date 列の定義では、数字のディメンションとして読み取られます。 修正する前の date 列の定義 date列の定義を修正しない場合 ここで、タイプによる挙動の違いを確認するため、date フィールドの type を string(文字列)に変えてみます。この状態では、日付データとしては認識されないことがわかります。 date 列を type:string に修正 type を string に修正した date 列 菊池 健太 (記事一覧) クラウドソリューション部データエンジニアリング課。2024年7月より、G-genに入社。群馬出身のエンジニア。前職でLookerの使用経験はあるが、GCPは未経験なので現在勉強中。
アバター
G-gen の min です。Google Apps Script(以下、GAS)で開発したアドオンをユーザーが実行した際、スクリプトプロパティの読み取り時に PERMISSION_DENIED エラーが発生しました。本記事では、この事象の原因と対処法を解説します。 事象 原因 対処法 定数としてコード内に記述する ユーザーにスクリプトファイルへの閲覧権限を付与する 事象 GAS で作成した機能を Google Workspace アドオンとして配布し、利用者がそのアドオンのメニューを実行した際、以下のようなエラーログが Google Cloud の Cloud Logging に記録され、処理が失敗しました。 { " insertId ": " -w58fk8fbk0qfb ", " jsonPayload ": { " message ": " ストレージからの読み取り中にサーバーエラーが発生しました。エラーコード: PERMISSION_DENIED。 ", " serviceContext ": { " service ": " AKfycbw...(省略)... " } } , " resource ": { " type ": " app_script_function ", " labels ": { " project_id ": " 000000000000 ", " invocation_type ": " menu ", " function_name ": " callUpdateMasterData " } } , " severity ": " ERROR ", " labels ": { " script.googleapis.com/deployment_id ": " AKfycbw...(省略)... " } } メインのエラーメッセージは、以下のとおりです。 ストレージからの読み取り中にサーバーエラーが発生しました。エラーコード: PERMISSION_DENIED。 該当のスクリプトでは、 PropertiesService.getScriptProperties().getProperty('KEY_NAME') メソッドを使用し、GAS エディタ上で手動設定した スクリプトプロパティ を読み取ろうとしていました。 該当のソースコード const TARGET_URL = PropertiesService . getScriptProperties () . getProperty ( 'TARGET_URL' ) ; function callUpdateMasterData () { // ...処理... // URLにアクセスしてデータを取得する const response = UrlFetchApp . fetch ( TARGET_URL ) ; // 結果をログに出力する Logger . log ( 'Response Code: ' + response . getResponseCode ()) ; } スクリプトプロパティ 原因 このエラーは、Google Workspace Marketplace で配布されるアドオンのセキュリティ仕様と、スクリプト実行環境の関係に起因しています。 Google Workspace アドオンでは、スクリプト実行ユーザーの環境で処理が実行されます。しかし、スクリプトプロパティは「スクリプトプロジェクト(ファイル)に紐づく共有ストレージ」であり、 そのファイルにアクセス権を持つユーザー間で共有 されるものです。 Marketplace 経由で配布されたアドオンを使用する場合、実行ユーザー(アドオン利用者)はスクリプトプロジェクト自体の所有者や編集者ではありません。 ユーザーには、開発者の Google ドライブ内にある GAS プロジェクトファイル自体へのアクセス権限がないため、結果としてそのファイルに付随するプロパティストアへのアクセスも拒否されます。 PropertiesService.getScriptProperties() を用いた読み取り処理が、実行時に PERMISSION_DENIED エラーとなります。 参考 : プロパティ サービス 対処法 定数としてコード内に記述する 外部サービスの URL や固定の ID など、公開されても問題ない設定値であれば、スクリプト プロパティではなくコード内の定数( const )として記述することでエラーを回避できます。 // 修正前:スクリプトプロパティから読み取る(アドオン配布時にエラーになる) // const TARGET_URL = PropertiesService.getScriptProperties().getProperty('TARGET_URL'); // 修正後:コード内に定数として定義する const TARGET_URL = 'https://blog.g-gen.co.jp/' ; function callUpdateMasterData () { // ...処理... // URLにアクセスしてデータを取得する const response = UrlFetchApp . fetch ( TARGET_URL ) ; // 結果をログに出力する Logger . log ( 'Response Code: ' + response . getResponseCode ()) ; } ただし、 API キーなどの機密情報 はソースコード内に直接記述してはいけないことに十分留意してください。 ユーザーにスクリプトファイルへの閲覧権限を付与する アドオンの実行ユーザーに対して、実体となる GAS プロジェクトファイルの 閲覧者権限 を付与します。 スクリプト プロパティはファイルに紐づくメタデータであるため、ユーザーがファイル自体へのアクセス権を持っていれば、プロパティの読み取りが可能になります。 ただし、この方法は ユーザーがソースコードを閲覧可能になる というセキュリティ上の懸念があります。社内用ツールなど、ソースコードの内容が利用者に公開されても問題ない場合にのみ採用してください。 佐々木 愛美 (min) (記事一覧) クラウドソリューション部 データアナリティクス課。2024年7月 G-gen にジョイン。G-gen 最南端、沖縄県在住。最近覚えた島言葉は、「マヤー(猫)」。
アバター
G-gen の三浦です。当記事では、Gemini CLI から Google SecOps MCP server を使用して、ケース確認からログ調査までを自然言語で要約した検証結果を紹介します。 前提知識 Google SecOps とは Gemini CLI とは 概要 Google SecOps MCP server とは 使用可能なツール 注意点 検証手順 事前準備 IAM 権限の付与と MCP サーバーの有効化 Customer ID の確認 Gemini CLI の設定 ケース運用 未対応のケース一覧の取得 高優先度ケースの抽出と要約 関連アラートの確認と影響範囲の確認 検索・調査 特定ユーザーの Google Workspace 操作ログ調査 AWS 特権ユーザーの操作ログ調査 前提知識 Google SecOps とは Google Security Operations (以下 Google SecOps、旧称 Chronicle)は、Google Cloud が提供する 統合セキュリティ運用プラットフォーム です。 SIEM、SOAR、脅威インテリジェンス、Gemini を利用した AI による運用支援を提供します。これらにより、脅威の検知・調査・対応を一元的に行えます。結果として、セキュリティ運用の効率化と高度化を実現できます。 参考: Google SecOps の概要 詳細は、以下の記事をご参照ください。 blog.g-gen.co.jp Gemini CLI とは Gemini CLI とは、ターミナルから直接 Gemini の機能を利用できるオープンソースのコマンドラインインターフェイスです。詳細は以下の記事をご参照ください。 blog.g-gen.co.jp 概要 Google SecOps MCP server とは Google SecOps MCP server は、Google Cloud が提供する Google Cloud MCP Servers の 1 つです。Gemini CLI などの MCP クライアントから、自然言語で Google SecOps を操作することができます。 参考 : Use the Google SecOps MCP server なお Google Cloud MCP Servers では、Google SecOps の他にも、Compute Engine や Google Kubernetes Engine(GKE)、Google Maps などのための MCP サーバーが提供されています。 参考 : Supported products Google Cloud MCP Servers の詳細は、以下の記事や公式ドキュメントを参照してください。 blog.g-gen.co.jp 使用可能なツール Google SecOps MCP server で使用可能な主なツールとユースケースは以下のとおりです。以下は一部抜粋であり、他にも多数のツールがあります。詳細は公式ドキュメントをご確認ください。 カテゴリ ツール ユースケース ケース運用 list_cases , get_case , update_case 未対応ケースの棚卸し、ケース詳細の確認、担当者の更新 検索・調査 translate_udm_query , udm_search , search_entity 検索条件(UDM クエリ)の作成・変換を行い、ログ/イベントを検索して、関連するユーザー/端末/IP などのエンティティを特定 ルール運用 create_rule , list_rules , list_rule_errors 検知ルールの作成と棚卸し、適用・運用上のエラーの把握 取り込み/整備 create_feed , create_parser , list_parsers ログ取り込み設定(フィード)の作成、ログ整形のためのパーサー作成、パーサーの一覧取得 参考 : Google SecOps MCP Reference 注意点 Google SecOps MCP server は、2026年2月現在、 Preview 版 です。当記事で解説する内容は一般提供(GA)の際に変更される可能性があることを予めご了承ください。 Preview 版のサービスや機能を使うに当たっての注意点は、以下の記事も参考にしてください。 blog.g-gen.co.jp 検証手順 検証の流れは以下のとおりです。 項番 項目 内容 1 事前準備 MCP サーバーの有効化、IAM 権限の付与、Customer ID の確認、Gemini CLI の設定 2 ケース運用 未対応ケースの一覧取得、高優先度ケースの確認、関連アラートと 関与したユーザー/IP の確認 3 検索・調査 ケース/アラートで得たユーザーや IP などの手がかりを起点に、Google SecOps に取り込まれたログ(例:Google Workspace / AWS)を検索し、重要な操作を時系列で整理 事前準備 IAM 権限の付与と MCP サーバーの有効化 Google SecOps MCP を実行するプリンシパル(Google アカウント/サービスアカウント)に、SecOps インスタンスが紐付くプロジェクトで以下の IAM ロールを付与します。 MCP ツールのユーザー(ベータ版)( roles/mcp.toolUser ) Chronicle API 管理者( roles/chronicle.admin ) Chronicle SOAR 管理者(ベータ版)( roles/chronicle.soarAdmin ) ※ roles/chronicle.admin と roles/chronicle.soarAdmin は管理者権限相当です。SecOps 運用に必要なメンバーのみに付与することを推奨します。 参考 : Google SecOps MCP Reference SecOps インスタンスが紐付くプロジェクトで、Google SecOps MCP を有効化します。 # SecOps が紐付くプロジェクト ID export PROJECT_ID = " YOUR_PROJECT_ID "   gcloud beta services mcp enable chronicle.googleapis.com --project =" $PROJECT_ID " ※ gcloud beta services mcp コマンドが「Invalid choice: 'mcp'」等のエラーで使用できない場合は、gcloud CLI が古い可能性があります。最新バージョンに更新してから再試行してください。 参考 : gcloud CLI のコンポーネントの管理 MCP サーバーを利用できるアカウントでログインし、アプリケーションのデフォルト認証情報(ADC)を設定します。 gcloud auth application-default login Customer ID の確認 本記事で利用する MCP ツールには、Google SecOps の Customer ID が必要なものがあります。Customer ID は Google SecOps コンソールの設定画面から確認できます。 確認手順の詳細は、以下の記事の 「Google SecOps 転送用のパラメータと認証情報の取得」 をご参照ください。 blog.g-gen.co.jp Gemini CLI の設定 Google(Google Cloud)のリモート MCP サーバーは、Gemini CLI では拡張機能として ~/.gemini/extensions/ 配下に設定します。本記事では拡張機能名を secops (任意)とします。 参考 : Configure MCP in an AI application 設定用のディレクトリと設定ファイル( ~/.gemini/extensions/secops/gemini-extension.json )を作成します。 mkdir -p ~/.gemini/extensions/secops   touch ~/.gemini/extensions/secops/gemini-extension.json 作成した設定ファイルに以下を記述します。 PROJECT_ID と httpUrl のリージョン(例: asia-northeast1 )は環境に合わせて置き換えてください。 { " name ": " secops ", " version ": " 1.0.0 ", " mcpServers ": { " secops ": { " httpUrl ": " https://chronicle.asia-northeast1.rep.googleapis.com/mcp ", " authProviderType ": " google_credentials ", " oauth ": { " scopes ": [ " https://www.googleapis.com/auth/chronicle " ] } , " headers ": { " x-goog-user-project ": " PROJECT_ID " } } } } Gemini CLI を起動し、 /mcp コマンドで MCP サーバーへの接続を確認します。ツール一覧が表示されれば、接続は成功です。 > /mcp Configured MCP servers:   🟢 secops ( from secops ) - Ready ( 57 tools ) Tools: - list_cases - get_case - list_case_alerts - list_case_comments - update_case ...(省略) ケース運用 未対応のケース一覧の取得 以下のようなプロンプトで未対応(OPENED)のケースを直近 10 件取得し、優先度と作成日時の傾向を確認します。 Project ID PROJECT_ID 、Customer ID CUSTOMER_ID 、Region REGION を使用して 未対応のケースを作成日時の新しい順に 10 件表示してください。 # 出力例   ✦ 最新の未対応ケース 10 件を取得しました。     ┌─────────┬──────────────────────────────────────────┬──────────┬────────┬────────┬────────────────────┐ │ Case ID │ Display Name │ Priority │ Stage │ Status │ Created Time ( UTC ) │ ├─────────┼──────────────────────────────────────────┼──────────┼────────┼────────┼────────────────────┤ │ 399 │ Replacement of Existing Compute Snapshot │ LOW │ Triage │ OPENED │ 2026-01-30 09:33 │ │ 398 │ Replacement of Existing Compute Snapshot │ LOW │ Triage │ OPENED │ 2026-01-30 01:33 │ │ 397 │ Replacement of Existing Compute Snapshot │ LOW │ Triage │ OPENED │ 2026-01-29 19:33 │ │ 396 │ Replacement of Existing Compute Snapshot │ LOW │ Triage │ OPENED │ 2026-01-29 13:33 │ │ 395 │ Replacement of Existing Compute Snapshot │ LOW │ Triage │ OPENED │ 2026-01-29 07:34 │ │ 394 │ Replacement of Existing Compute Snapshot │ LOW │ Triage │ OPENED │ 2026-01-28 23:34 │ │ 393 │ Replacement of Existing Compute Snapshot │ LOW │ Triage │ OPENED │ 2026-01-28 15:34 │ │ 392 │ Replacement of Existing Compute Snapshot │ LOW │ Triage │ OPENED │ 2026-01-28 11:33 │ │ 391 │ Replacement of Existing Compute Snapshot │ LOW │ Triage │ OPENED │ 2026-01-28 05:34 │ │ 390 │ Replacement of Existing Compute Snapshot │ LOW │ Triage │ OPENED │ 2026-01-27 23:34 │ └─────────┴──────────────────────────────────────────┴──────────┴────────┴────────┴────────────────────┘     すべてのケースが Replacement of Existing Compute Snapshot(既存のスナップショットの置換)という名称で、優先度は LOW です。 高優先度ケースの抽出と要約 以下のようなプロンプトで優先度が高いケースを抽出し、内容を要約して「先に見るべきケース」を絞り込みます。 Project ID PROJECT_ID 、Customer ID CUSTOMER_ID 、Region REGION を使用して、優先度が高いケースを検索し、最新の3件の内容を要約してください。 # 出力例   ✦ 優先度が高いケースの最新 3 件を取得し、要約しました。   高優先度ケースの要約(最新 3 件)   検出されたケースはすべて、Workspace 管理者による 2 要素認証(2FA)の強制設定解除に関するもので、内容は以下の通りです。   1 . Two Factor Authentication Enforcement Removal by a Workspace Admin User ( Case ID: 137 ) * 優先度: PRIORITY_HIGH * 作成日時: 2025 / 11 / 27 19:06:23 ( UTC ) * 概要: 管理者ユーザーによって 2 要素認証の強制設定が解除されました。セキュリティポリシー違反の可能性があるため、意図した変更か確認が必要です。   2 . Two Factor Authentication Enforcement Removal by a Workspace Admin User ( Case ID: 135 ) * 優先度: PRIORITY_HIGH * 作成日時: 2025 / 11 / 27 10:18:07 ( UTC ) * 概要: 管理者による 2FA 強制解除が検知されました。アラートが 2 件紐付いており、繰り返しのアクションや関連操作があった可能性があります。   3 . Two Factor Authentication Enforcement Removal by a Workspace Admin User ( Case ID: 131 ) * 優先度: PRIORITY_HIGH * 作成日時: 2025 / 11 / 26 13:33:44 ( UTC ) * 概要: 同様の 2FA 解除検知です。短期間に複数発生しているため、アカウント侵害や誤設定の影響範囲を確認してください。   管理者権限に関わる重要な変更であるため、早急な確認を推奨します。 関連アラートの確認と影響範囲の確認 以下のようなプロンプトで、前項で確認した Case ID 137 に紐づくアラートを取得し、 「誰が/どこから/何に対して」 の観点で影響対象を整理します。 Project ID PROJECT_ID 、Customer ID CUSTOMER_ID 、Region REGION を使用して、Case ID 137 に関連するアラートを取得し、影響対象と影響範囲を整理してください。 # 出力例   ✦ Case ID 137 に関連するアラート情報、および影響対象と影響範囲を整理しました。   1 . ケース概要 * Case ID: 137 * ケース名: Two Factor Authentication Enforcement Removal by a Workspace Admin User * 優先度: HIGH * ステータス: OPENED   2 . 関連アラート * アラート名: TWO FACTOR AUTHENTICATION ENFORCEMENT REMOVAL BY A WORKSPACE ADMIN USER * 発生日時: 2025-11-26 10:03:52 UTC ( 1764151432245 ) * 内容: Workspace管理者権限を持つユーザーによって、二要素認証(2FA)の強制設定が解除されました。   3 . 影響対象と関与エンティティ アラートに関連するエンティティ情報から、以下の事実が確認されました。   * 実行ユーザー ( Principal ) : * EXAMPLE@DEV.G-GEN.CO.JP * 接続元IPアドレス: * 0000:0000:0000:0000:0000:0000:0000:0000 ( IPv6 ) * 変更対象リソース ( Target ) : * ORGANIZATIONS/ 1234567890 /SECURITYSETTINGS * 組織レベルのセキュリティ設定オブジェクトです。   4 . 影響範囲の整理 このアラートは、特定のユーザーに対する操作ではなく、組織レベルのセキュリティ設定に対する変更を示唆しています。   * 直接的な影響: 組織ID 1234567890 (DEV.G-GEN.CO.JP 組織全体、または該当する組織部門)において、二要素認証の強制ポリシーが無効化された可能性があります。 * セキュリティリスク: 2FA強制が解除されると、組織内のユーザーアカウントがパスワード漏洩などの攻撃に対して脆弱になります。全ユーザー、または特定の組織部門(OU)配下の全ユーザーが影響を受ける可能性があります。   推奨される次のステップ: * 実行ユーザー ( EXAMPLE@DEV.G-GEN.CO.JP ) に連絡を取り、この設定変更が意図的かつ承認されたものか確認してください。 * 意図しない変更であれば、直ちに設定を元に戻し、該当ユーザーのアカウントが侵害されていないか調査する必要があります。 検索・調査 特定ユーザーの Google Workspace 操作ログ調査 以下のようなプロンプトで前項で確認した Case ID 137 に関連する特定ユーザーの Google Workspace 操作ログの抽出と整理を実施します。 Project ID PROJECT_ID 、Customer ID CUSTOMER_ID 、Region REGION を使用して、Case ID 137 で特定した関与ユーザー EXAMPLE@DEV.G-GEN.CO.JP(接続元 IP:0000:0000:0000:0000:0000:0000:0000:0000) が 2025-11-27(UTC) に行った操作をログから抽出し、重要な操作を時系列で整理してください。 ※ メールアドレスでヒットしない場合は、ケースで得たユーザーID(@ 前)や接続元 IP で再検索します。 # 出力例   ✦ 指定された条件(Case ID 137 、ユーザー EXAMPLE@DEV.G-GEN.CO.JP、日付 2025-11-27 UTC)に基づき、Chronicle SIEM のログを調査しました。   該当ユーザーによる操作ログが複数確認されました。特に「 2 段階認証プロセス導入ガイド」の作成や「パスキーの登録」など、認証セキュリティに関連する重要な操作が時系列で確認されています。   以下に、 2025 年 11 月 27 日(UTC)の重要な操作を時系列でまとめます。   ユーザー操作タイムライン ( 2025-11-27 UTC )   1 . OAuth アプリケーションの認可とスクリプト実行 ( 01:31 - 01:45 UTC ) * 01:31:08 - 01:45:34: XXXX というアプリケーションに対し、OAuth トークンを認可・取得しました。 * スコープ: Calendar, Drive, Presentations, Script Deployments 等の権限が含まれています。 * 操作: USER_RESOURCE_ACCESS ( authorize, activity ) * 詳細: Google Apps Script や Calendar API ( calendar.events.list, calendar.events.insert ) の呼び出しが記録されています。   2 . ドライブ コンテンツの作成と共有 ( 05:36 - 05:44 UTC ) * 05:36:14 - 05:38:05: Google ドライブ上で「XXXX プロジェクト」および「 2 段階認証プロセス導入ガイド」というファイルを編集・更新しました。 * 05:38:06: 新規ファイル 「 2 段階認証プロセス導入ガイド」(プレゼンテーション)を作成しました。 * 05:41:03: 上記ファイルの権限(ACL)を変更し、共有設定を行いました(USER_CHANGE_PERMISSIONS)。 * 05:41:11: Gmail にて、件名 【GAS自動送信】スライドURLのお知らせ: 2 段階認証プロセス導入ガイド」 のメールを送信しました。 * 接続元IP: 0000:0000:0000:0000:0000:0000:0000:0000 ※提示されたIPと同じサブネット   3 . セキュリティ設定の変更 ( 07:10 UTC ) * 07:10:03: ユーザー自身の認証設定として、パスキー ( Passkey ) を登録しました。 * 操作: STATUS_UPDATE ( product_event_type: passkey_enrolled ) * 接続元IP: 0000:0000:0000:0000:0000:0000:0000:0000   4 . デバイス管理 ( 07:46 UTC ) * 07:46:49: デバイスの同期/更新イベント ( DEVICE_REGISTER_UNREGISTER_EVENT ) が記録されています。   考察 Case ID 137 のアラート名は「Two Factor Authentication Enforcement Removal( 2 要素認証の強制解除)」ですが、ログからは解除操作そのものではなく、逆に「 2 段階認証プロセス導入ガイド」の作成・配布や、ユーザー自身の「パスキー登録」といった、セキュリティ強化に向けた準備やテストを行っていた動きが顕著に見られます。アラートはこれらの試行錯誤や設定変更の過程でトリガーされた可能性があります。 AWS 特権ユーザーの操作ログ調査 以下のようなプロンプトで、AWS 環境における特権ユーザーの重要な操作(権限変更やリソース削除など)を抽出します。   Project ID PROJECT_ID 、Customer ID CUSTOMER_ID 、Region REGION を使用して、 ユーザー XXX@g-gen.co.jp が 2026年1月26日から1月30日の間に AWS で行った操作の中でセキュリティに影響を与える操作を抽出して要約してください。     # 出力例   ✦ ユーザー XXX@g-gen.co.jp の 2026 年 1 月 26 日から 1 月 30 日の間の AWS 操作ログを分析しました。 主に既存の監視設定の削除と、Google SecOps と連携するための新規 IAM 設定が行われています。   以下にセキュリティに影響を与える主な操作を時系列で要約します。   1 . 監視・ログ収集リソースの削除 ( 1 月 28 日 07:52 - 07:57 ) 以前設定されていたと思われる監視用のリソースが一括して削除されました。これにより、一時的に対象環境のログ収集が停止した可能性があります。 * CloudTrail: トレイル XXXX の削除 * VPC: VPC フローログの削除 * S3: バケット XXXX の削除 * SNS/SQS: 通知用トピックおよびキューの削除 * CloudWatch Logs: ロググループの削除   2 . IAM 権限の操作 ( 1 月 28 日 04:44 - 09:56 ) 特定のユーザーやポリシーに対する権限変更が行われました。 * ポリシー更新: XXXX ポリシーのバージョン更新(S3バケットやSQSへのアクセス許可設定)。 * ユーザー権限変更: ユーザー XXXX に対して AdministratorAccess ( 管理者権限 ) の付与 ( AttachUserPolicy ) と、その直後の剥奪 ( DetachUserPolicy ) が行われました。   3 . Google SecOps 連携設定の構築 ( 1 月 29 日 01:59 - 06:01 ) Google SecOps ( Chronicle ) から AWS 環境を監視・操作するための信頼関係が構築されました。 * IAM ロール作成: XXXX の作成。 * OIDC プロバイダ作成: accounts.google.com を信頼する OpenID Connect プロバイダの作成。 * 信頼ポリシー設定: 作成したロールに対し、Google アカウントからの AssumeRole を許可する設定 ( UpdateAssumeRolePolicy ) 。   結論 このユーザーは、古いサンドボックス環境の監視設定をクリーンアップし、新たに Google SecOps を用いた監視体制を構築するためのセットアップ作業を行っていたと推測されます。 三浦 健斗 (記事一覧) クラウドソリューション部 2023年10月よりG-genにジョイン。元オンプレ中心のネットワークエンジニア。 ネットワーク・セキュリティ・唐揚げ・辛いものが好き。 Google Cloud Partner All Certification Holders 2025 / Google Cloud Partner Top Engineer 2026
アバター
G-gen の高宮です。Google 公式の技術ドキュメントを検索するための Developer Knowledge API を、Gemini CLI から MCP サーバー経由で使用した検証結果を紹介します。 はじめに Developer Knowledge API とは MCP サーバーで使用可能なツール 注意事項 事前準備 Google Cloud の設定 Gemini CLI の設定 search_documents での検索 質問の投入 検索と回答の流れ get_document での検索 質問の投入 検索と回答の流れ AI 開発におけるドキュメント参照 はじめに Developer Knowledge API とは Developer Knowledge API は、Google Cloud 製品や Google 製品(Android、Firebase など)の公式ドキュメントを検索するための API です。この API を使用すると、独自のアプリケーションやワークフローに、Google のナレッジベースを統合できます。 また当 API では、Google から リモート MCP サーバー (Developer Knowledge MCP server)も提供されており、ローカル環境の CLI ツールや IDE から、自然言語で Google の公式ドキュメントを検索して取得することができます。また、エージェンティックな開発の中で、AI が正確な API 仕様等をもとに開発を進めるためにも寄与します。 参考 : Developer Knowledge API 参考 : Connect to the Developer Knowledge MCP server Google Cloud MCP Servers では、Compute Engine や BigQuery、Google Maps などのための MCP サーバーが提供されています。詳細は以下の記事を参照してください。 blog.g-gen.co.jp blog.g-gen.co.jp MCP サーバーで使用可能なツール Developer Knowledge MCP server で使用可能なツールは以下のとおりです。 ツール名 説明 batch_get_documents search_documents で取得した結果から、複数のドキュメントの全ての内容を取得します。 get_document search_documents で取得した結果から、単一のドキュメントの全ての内容を取得します。 search_documents 入力したクエリに関連する Google の公式ドキュメントを検索します。検索結果で、 get_document または batch_get_documents を使用することで、ドキュメントの全ての内容を取得します。 参考 : MCP Reference: developerknowledge.googleapis.com 注意事項 Developer Knowledge API は、2026年2月現在、Public Preview です。当記事で解説する内容は一般提供(GA)の際に変更される可能性があることを予めご了承ください。 Preview 版のサービスや機能を使うに当たっての注意点は、以下の記事も参考にしてください。 blog.g-gen.co.jp 事前準備 Google Cloud の設定 使用する Google Cloud プロジェクトで以下の API を有効化します。 Developer Knowledge API gcloud services enable developerknowledge.googleapis.com 同じプロジェクトで、API キーを作成し、Developer Knowledge API 呼び出し時のみに使用できるように API キーを制限し保護します。 gcloud services api-keys create --display-name =" Developer Knowledge API Key " ※ Developer Knowledge API を有効化してすぐの場合は、「Select APIs」リストに表示されないことがあります。 以下のコマンドで Developer Knowledge MCP server を有効化します。 gcloud beta services mcp enable developerknowledge.googleapis.com 以下のメッセージが返却されたら、Developer Knowledge MCP server が有効化されます。 The MCP endpoint for service developerknowledge.googleapis.com has been enabled for the resource projects/プロジェクト名. ※ gcloud コマンドの実行中にエラーが発生した場合は、 gcloud components update beta コマンドでコンポーネントのアップデート後に再試行してください。 Gemini CLI の設定 作成した API キーを表示します。 Gemini CLI の構成ファイル( .gemini/settings.json )に MCP サーバーの設定を追加します。 { " mcpServers ": { " google-developer-knowledge ": { " httpUrl ": " https://developerknowledge.googleapis.com/mcp ", " headers ": { " X-Goog-Api-Key ": " 作成した API キー " } } } } MCP サーバーに接続できていれば、構成ファイルに記述した MCP サーバーと、使用できるツールの一覧が表示されます。 # Gemini CLI を起動 $ gemini # > /mcp Configured MCP servers: 🟢 google-developer-knowledge - Ready ( 3 tools ) Tools: - batch_get_documents - get_document - search_documents search_documents での検索 質問の投入 Gemini CLI に対して、以下のようなクエリを自然言語で投入します。 Google Cloud の API を有効化する Terraform のソースコードを Google の公式ドキュメントから検索してください。 入力したクエリに対して、Developer Knowledge MCP server の search_documents ツールを使用するか確認されます。 3. Allow all server tools for this session を選択すると、現在のセッション内では、Developer Knowledge MCP server の全てのツールの使用が許可されます。 検索と回答の流れ 入力した自然言語のクエリが、MCP サーバーへリクエストを送信するために JSON 形式に変換されます。 {"query":"Terraform enable Google Cloud API"} MCP サーバーから返却されたレスポンスに複数のドキュメントが格納されています。 レスポンスの JSON の構造は以下のとおりです。 { " results ": [ { " parent ":" 参照しているドキュメントのリソース名 ", " id ":" ドキュメント内のチャンク ID ", " content ":" チャンクしたドキュメントの内容 " } , ... } 取得した内容を元に、回答が生成されます。 get_document での検索 質問の投入 さらに詳細な情報が必要な場合は、以下のようなクエリを自然言語で投入します。 関連度の一番高いドキュメントを使用して、より詳細な情報を検索してください。 検索と回答の流れ 入力した自然言語のクエリに従って、 search_documents の検索結果から、関連度の高いドキュメントを判断し、MCP サーバーへリクエストを送信するために JSON 形式に変換します。 {"name":"documents/docs.cloud.google.com/docs/terraform/understanding-apis-and-terraform"} MCP サーバーから返却されたレスポンスに単一のドキュメントの詳細情報が格納されています。 レスポンスの JSON の構造は以下のとおりです。 { " name ":" 参照しているドキュメントのリソース名 ", " uri ":" 参照しているドキュメントの URI ", " content ":" Markdown 形式のドキュメントの内容 ", " description ":" ドキュメントの説明 " } 取得した内容を元に、より詳細な回答が生成されます。 AI 開発におけるドキュメント参照 例えば、以下のようなプロンプトを Gemini CLI に与えます。 組織 g-gen.co.jp の組織直下にある Google Cloud プロジェクトの一覧を取得する Python プログラムを記述して。 Google Cloud の Resource Manager API の情報を、公式ドキュメントから調べて確認してからプログラムの開発を始めて。 Gemini CLI は、必要なドキュメントを検索・取得して、コンテキストとして使いつつ、プログラムを記述します。 エージェンティックな開発の中で、適宜 Developer Knowledge MCP server を参照することで、開発の精度が向上することが期待できます。 また、必要なときには Developer Knowledge MCP server を参照するよう、 GEMINI.md などのコンテキストファイルに予めルールを記述することで、プロンプトで毎回記述する必要がなくなります。 参考 : Provide context with GEMINI.md files - Gemini CLI 参考 : Use the Gemini Code Assist agent mode - Gemini for Google Cloud 高宮 怜 (記事一覧) クラウドソリューション部クラウドエクスプローラ課 2025年6月より、G-genにジョイン。前職は四国のSIerで電力、製造業系のお客様に対して、PM/APエンジニアとして、要件定義から運用保守まで全工程を担当。現在はGoogle Cloudを学びながら、フルスタックエンジニアを目指してクラウドエンジニアとしてのスキルを習得中。 Follow @Ggen_RTakamiya
アバター
G-gen の三浦です。当記事では Google Antigravity を使用し、バイブコーディングで目標管理アプリを開発する手順と、Browser Agent によるデバッグの流れを紹介します。 概要 Google Antigravity とは リリースステージ 使用可能なモデル データの保護 検証手順 検証 インストール 初期設定 日本語化とルール設定 自然言語による開発 Browser Agent によるデバッグ 概要 Google Antigravity とは Google Antigravity は、AI を使用して開発作業ができる IDE(統合開発環境)です。Google Antigravity を使うことで、自然言語でやりたいことを伝えて AI がコードの生成や修正を進める開発スタイルである バイブコーディング (vibe coding)を実現できます。 自然言語を使ってチャットで Google Antigravity に作業を依頼すると、AI エージェントがエディタ、ターミナル、ブラウザを使って、実装や修正を段階的に実行します。 参考 : Google Antigravity 参考 : vibe コーディングとは Google Antigravity の主な特徴は以下のとおりです。 特徴 説明 AI-powered IDE エディタ内で AI と対話しながら、作成・修正・調査を一連の流れで実行 Asynchronous Agents 複数の作業を同時に依頼でき、複数タスクを並行して実行可 Agent Manager エージェントとの会話、進捗、成果物を1つの画面でまとめて管理 Multi-window 編集、管理、ブラウザ確認を分けて表示して効率的に並行作業 Browser Agent エージェントがブラウザを操作し、画面確認や情報収集を行う リリースステージ Google Antigravity は、2026年2月現在、 パブリックプレビュー です。当記事で解説する内容は一般提供(GA)の際に変更される可能性があることをあらかじめご了承ください。プレビュー版のサービスや機能を使うに当たっての注意点は、以下の記事も参考にしてください。 blog.g-gen.co.jp 使用可能なモデル Google Antigravity で使用するバックエンドの AI モデルとしては、Google が提供する Gemini シリーズに加えて、Anthropic の Claude など他社モデルも使用可能です。 2026年2月現在、Google Antigravity では以下の生成 AI モデルを選択できます。 提供元 モデル Google Gemini 3 Pro(high) Google Gemini 3 Pro(low) Google Gemini 3 Flash Anthropic Claude Sonnet 4.5 Anthropic Claude Sonnet 4.5(thinking) Anthropic Claude Opus 4.5(thinking) OpenAI GPT-OSS 参考 : Models データの保護 Google Antigravity は Google 製品であり、以下のような規約が適用されます。 Google Terms of Service Google Cloud - Service Specific Terms Google Workspace AI Ultra for Business で認証する場合に適用 Google Antigravity Additional Terms of Service Google Privacy Policy Generative AI Additional Terms of Service Google Antigravity 自体は無償で利用できますが、その場合、Google Antigravity Additional Terms of Service に記載のとおり、ユーザーデータやメタデータ、AI とのやりとりなどが記録され、保存されます。また、それらの情報はサービス改善に使用される可能性があります。ただし、Google Workspace AI Ultra for Business サブスクリプションを使用して認証する場合は、「当社はお客様のプロンプト、コンテンツ、またはモデル応答を収集しません。」とされています。 上記のような記載があるものの、Google Antigravity の企業による利用に際して、データがモデルのトレーニングに使用されないためにはどうすればよいか、という公式のガイダンスは、2026年2月現在、Google から発表されていません。 2026年2月現在、Google Antigravity のリリースステージがパブリックプレビュー段階であることからも、企業が当サービスを使うにあたりどのようにすべきかは明確になっていません。なお公式料金ページには、 Organization plan が近日中に発表されることが示唆されており、このプランは Google Cloud と連携することでデータの保護を提供するような内容となることが想定されます。 参考 : Choose the perfect plan for your journey 検証手順 検証手順は以下のとおりです。インストールとアプリ開発に加え、意図的にエラーが発生する状況を作り、Browser Agent で原因特定から修正までできるか確認します。 項番 内容 説明 1 インストールと初期設定 インストール後、初回起動〜サインインまでを実施し、エージェントの実行ポリシー(コマンド実行や変更適用のレビュー要否など)を設定します。 2 日本語化とルール設定 画面表示を日本語化し、「回答・計画は日本語で実施する」などのルールを設定します。 3 自然言語によるアプリ作成 チャットに要望を入力し、計画の提示 → レビュー → 実装 → 起動確認までを行います。 4 Browser Agent によるデバッグ検証 わざと不具合を入れ、Browser Agent(ブラウザ操作)でエラー画面を確認し、原因特定〜修正までできるかを確認します。 本検証時の端末と Antigravity のバージョンは以下のとおりです。 OS : Windows 11 Pro 実行環境 : WSL2(Ubuntu) Antigravity : 1.13.3 検証 インストール 公式サイトから、利用する OS に合わせたインストーラーをダウンロードして実行します。対応 OS と要件の詳細は公式ドキュメントをご確認ください。 対応 OS macOS Windows Linux 参考 : Download Google Antigravity 使用許諾契約書を確認して問題がない場合は「同意する」を選択し、「次へ」を選択します。 使用許諾契約書の同意 インストール先を指定し、「次へ」を選択します。 インストール先の指定 ショートカットの作成場所を指定し、「次へ」を選択します。 ショートカットの指定 その他で必要な項目があれば選択し、「次へ」を選択します。 追加タスクの選択 内容を確認し、「インストール」を選択します。 インストールの選択 インストールが完了したので、「完了」を選択します。 完了を選択 初期設定 Antigravity を起動し、「Next」を選択します。 起動と Next の選択 Visual Studio Code (以下、 VS Code )を使用している場合、設定をインポートできます。不要な場合は「Start fresh」を選択します。 VS Code 設定をインポートするかの選択 次に IDE のテーマ(配色などの見た目)を選択し、「Next」を選択します。 テーマの選択 Antigravity のエージェントをどのように動かすかを選択します。選択したモードに応じて、エージェントの動きが変わります。本検証では Review-driven development を選択します。 エージェントの設定 利用モード(左側)の違い モード 特徴 Secure Mode すべての操作を 都度確認 してから実行します。加えて、より厳格な保護設定が適用されます(詳細は公式ドキュメント参照)。 Review-driven development(推奨) 要所で 人間の確認を挟みながら 作業を実行します。 Agent-driven development エージェントが 自律的に反復 して作業を実行します(確認なしで進む場合があります)。 Custom configuration 実行ポリシー(例 : コマンド実行やレビュー要否)を 細かく設定 できます。 実行ポリシー(右側)の項目 項目 制御項目 選択肢 影響 Terminal execution policy ターミナル(コマンド)実行の扱い Always Proceed / Request Review コマンド 自動実行するか 、 都度確認するか を制御します。 Review policy 変更の適用・進行時の人間の確認の要否 Always Proceed / Agent Decides / Request Review 変更を 即適用するか 、 都度確認するか 、 状況に応じて自動判断するか を制御します。 JavaScript execution policy ブラウザ等での JS 実行 Always Proceed / Request Review / Disabled JavaScript を 自動実行するか 、 都度確認するか 、 無効化するか(Disabled) を制御します。 参考 : Secure Mode 参考 : Agent Modes / Settings エディタの初期設定を行い、「Next」を選択します。 Keybindings(キー割り当て) :通常は Normal を選択します。 Vim 操作に慣れている場合は Vim を選択します。 Extensions(拡張機能) :Python や Go などの言語拡張機能をインストールするかを選択します。 エディタの設定 「Sign in with Google」を選択し、Google アカウントで認証を実施します。 Google 認証の実施 認証が完了すると、以下画面に切り替わります。注意事項の確認と必要に応じてチェックボックスを有効化します。チェックボックスを有効化した場合、利用状況データの送信を許可することを指します。 利用規約の確認 初期設定は以上です。これらの設定は後から変更できます。 エディタの表示 日本語化とルール設定 左サイドバーの「Extensions」を選択し、 日本語 と入力して表示された Japanese Language Pack for Visual Studio Code の「Install」を選択します。 画面の日本語化 左下にポップアップが表示されるので、「Change Language and Restart」を選択します。 Antigravity の再起動 日本語表記になっていることを確認し、右上の三点リーダーから「Customizations」を選択します。 Customizations を選択 Rules タブで「Global」を選択し、以下を入力して保存します。Global ルールは全体の共通仕様です。 回答及び計画などの各種ドキュメントはすべて日本語にすること Rules の設定 参考 : Rules 自然言語による開発 右上の「Open Agent Manager」を選択します。 Open Agent Manager を選択 「Open Workspace」 > 「Open New Workspace」 を選択し、作業用フォルダ( Workspace )を開きます。 Open Workspace を選択 参考 : Workspaces 作業用のフォルダを選択します。 フォルダの選択 「Next」を選択します。 Next を選択 会話画面が表示されます。モデル( Gemini 3 など)の選択に加え、会話モードとして以下 2 つを選択できます。 モード 説明 Planning 実行前に計画(手順)を提示してから進めるモードです。調査や設計、複雑な作業を慎重に進めたいケースに適しています。 Fast 計画より実行を優先して、直接タスクを進めるモードです。軽い修正や試行をすぐに動かして確認したいケースに適しています。 モードの選択 モデルの選択 本検証時は以下の設定で、以下プロンプトを入力し、Enter キーを押下します。 モード : Planning モデル : Gemini 3 Pro(high) 社員の目標を管理するシステムを作りたい プロンプトの入力 エージェントから実装計画の確認依頼が来たので、内容を確認します。 実装計画の確認1 実装計画の確認2 実装計画の確認3 計画が問題ない場合、「Review」を選択してコメントを入力し、「Submit」を選択します。 計画の承認 エージェントから、 Next.js のプロジェクト作成コマンドの実行確認依頼が届きます。内容を確認して「Accept」を選択します。 エージェントによるコマンド実行の承認 エージェントから実装(ダッシュボードと社員一覧画面)の完了連絡が届いたら、コマンドを実行して確認します。 エージェントからの動作確認依頼 コマンドの実行 表示された URL にアクセスし、画面が表示されることを確認します。 アプリの表示確認1 アプリの表示確認2 Browser Agent によるデバッグ コードを意図的に改修し、アクセス時にエラーが出るようにします。 エラーが出るように改修 エージェントに対し、エラー内容をブラウザで確認するよう指示します。エージェントから Browser Agent を使用したデバッグの実行許可を求められるため、「Setup」を選択します。 エージェントによる Browser Agent のセットアップ確認 参考 : Browser Agent ブラウザが起動し、Antigravity 用の拡張機能のインストールが求められるため、確認してインストールを実施します。 拡張機能のインストール1 拡張機能のインストール2 拡張機能のインストール3 インストールすると、Antigravity によりエラーページへのアクセスとデバッグ情報の収集が開始されます。 エージェントによるデバッグ情報の収集 エージェントから修正完了連絡が来たので、再度アクセスしてエラーが表示されずに画面が表示されていることを確認します。 エージェントからの修正完了連絡 アクセスの確認 三浦 健斗 (記事一覧) クラウドソリューション部 2023年10月よりG-genにジョイン。元オンプレ中心のネットワークエンジニア。 ネットワーク・セキュリティ・唐揚げ・辛いものが好き。 Google Cloud Partner All Certification Holders 2025 / Google Cloud Partner Top Engineer 2026
アバター
G-gen の武井です。当記事では、Google が提供する SIEM/SOAR 製品である Google SecOps と AWS のログ連携をキーレス認証で実現する方法について解説します。 前提知識 Google SecOps データフィード キーレス認証 過去記事との相違 AWS の設定 カスタム IAM ロール カスタム IAM ロール(信頼ポリシー) ID プロバイダー データフィードの設定 動作確認 関連記事 前提知識 Google SecOps Google Security Operations (以下 Google SecOps、旧称 Chronicle)は、Google Cloud が提供する 統合セキュリティ運用プラットフォーム です。 SIEM、SOAR、脅威インテリジェンス、Gemini を利用した AI による運用支援を提供します。これらにより、脅威の検知・調査・対応を一元的に行えます。結果として、セキュリティ運用の効率化と高度化を実現できます。 参考: Google SecOps の概要 詳細は、以下の記事をご参照ください。 blog.g-gen.co.jp データフィード Google SecOps では、AWS、Azure、その他 SaaS など、Google Cloud 以外の環境のログデータを取り込む仕組みとして データフィード機能 があります。 SecOps UI もしくは Feed Management API を用いて、ログソース(Amazon S3、Cloud Storage、Pub/Sub、Webhook など)を指定し、各種ログを SecOps に取り込む設定を行います。 ソースタイプ 概要 ストレージ Google Cloud、AWS、Azure のクラウドストレージバケットに保存されたログデータを定期的に取得 Amazon SQS S3 バケットの通知をキュー経由で受信し、ログデータを取得(リアルタイムかつ安定的に取り込み) ストリーミング Amazon Data Firehose、Cloud Pub/Sub、Webhook などを経由し、SIEM の HTTPS エンドポイントにログデータをストリーミングでプッシュ サードパーティ API CrowdStrike、SentinelOne、Palo Alto など、外部 SaaS から API 経由でログデータを取得 参考: フィード管理の概要 キーレス認証 データフィードで AWS のログを取り込む際のデータソースに Amazon S3 や SQS を選択した場合、従来は アクセスキー と シークレットアクセスキー が必要でした。 しかし2025年5月26日のアップデートにより、 AWS IAM Role for Identity Federation を選択することで キーレス認証 (キーを使用しない認証)が可能となりました。 従来のキー認証方式(データフィードの設定画面より) キーレス認証方式(データフィードの設定画面より) これは、Google SecOps と AWS の間に 信頼関係 (ID フェデレーション)を結ぶことで、固定のアクセスキーを使わずに認証を行う仕組みです。 Google SecOps が発行する OIDC トークンを AWS に提示し、AWS Security Token Service(STS)の AssumeRoleWithWebIdentity という API を介して一時的なアクセス権限を取得しています。 キーの流出リスクを根本的に排除でき、管理の手間も削減できるため、一般的にはよりセキュアな認証方式といえます。 参考: Google Security Operations release notes(May 26, 2025) 参考: AssumeRoleWithWebIdentity 参考: STSの一時的な認証情報取得APIコールについてまとめてみる 過去記事との相違 当記事では以下の構成のもと、S3 バケットに格納した CloudTrail ログを、データフィード機能を使って Google SecOps に取り込みます。 以下の記事でも同様の構成でログ取り込み検証を行っていますので、当記事ではキーレス認証への変更点のみ詳しく解説します。 # 設定項目 設定箇所 過去記事との手順差異 1 S3 バケットの設定 AWS なし 2 SQS の設定 AWS なし 3 SQS アクセスポリシーの設定 AWS なし 4 S3 イベント通知の設定 AWS なし 5 CloudTrail の設定 AWS なし 6 IAM の設定 AWS あり 7 データフィードの設定 Google SecOps あり blog.g-gen.co.jp AWS の設定 カスタム IAM ロール キー認証方式ではキーを発行したマシンアカウントに紐づけていた許可ポリシーを カスタム IAM ロール に紐づけます。 そのため、今回の例では SecOpsFederationRole という名前で新規作成します。 # 設定項目 設定値 1 信頼されたエンティティタイプ ウェブアイデンティティ 2 アイデンティティプロバイダー Google 3 Audience サブジェクト ID なお サブジェクト ID はデータフィードの設定画面から取得可能で、後述する信頼ポリシーや ID プロバイダーの設定でも使用します。 データフィードの設定画面からサブジェクトIDを取得 次に、S3 と SQS に関する最小権限をもつ許可ポリシー(今回の例では secops-s3-access )をロールに紐づけます。 # secops - s3 - access { " Version ": " 2012-10-17 ", " Statement ": [ { " Sid ": " ListAllowedBuckets ", " Effect ": " Allow ", " Action ": " s3:ListBucket ", " Resource ": [ " arn:aws:s3:::yutakei-secops-cloudtrail-test " ] } , { " Sid ": " ReadObjectsFromAllowedBuckets ", " Effect ": " Allow ", " Action ": " s3:GetObject ", " Resource ": [ " arn:aws:s3:::yutakei-secops-cloudtrail-test/* " ] } , { " Sid ": " ReadFromSQSForCloudTrailFeed ", " Effect ": " Allow ", " Action ": [ " sqs:ReceiveMessage ", " sqs:DeleteMessage ", " sqs:GetQueueAttributes ", " sqs:GetQueueUrl " ] , " Resource ": [ " arn:aws:sqs:ap-northeast-1:945008193730:yutakei-secops-cloudtrail-queue " ] } ] } カスタム IAM ロール(信頼ポリシー) ロールを作成後、Google SecOps が OIDC トークンを用いてこのロールを一時的に引き受けられるようにするため(Assume Role するため)、 信頼ポリシー を以下のように定義します。 Principal には OIDC プロバイダ ( Google )を、Condition 句には サブジェクト ID ( accounts.google.com:sub )を明示することで、指定した SecOps インスタンスのアクセスのみを許可します。 { " Version ": " 2012-10-17 ", " Statement ": [ { " Effect ": " Allow ", " Principal ": { " Federated ": " arn:aws:iam::945008193730:oidc-provider/accounts.google.com " } , " Action ": " sts:AssumeRoleWithWebIdentity ", " Condition ": { " StringEquals ": { " accounts.google.com:sub ": " 1234567890987654321 " } } } ] } ID プロバイダー IAM ロールの設定に加え、AWS アカウント全体の設定として ID プロバイダー (OIDC プロバイダー)の設定が必要です。 Google の認証基盤( https://accounts.google.com )を信頼済みプロバイダーとして登録し、Google SecOps の サブジェクト ID を追加します。 これにより、Google SecOps が発行するトークンを、AWS 側が正当なリクエストとして受け入れられるようになります。 # 設定項目 設定値 1 プロバイダのタイプ OpenID Connect 2 プロバイダの URL https://accounts.google.com 3 対象者 サブジェクト ID データフィードの設定 認証方式を キーレス認証 (AWS IAM Role for Identity Federation)に変更し、先ほど作成したロール ARN を入力し変更を反映させます。(サブジェクト ID は自動入力されます) これによりキー認証によるログ取り込みからキーレス認証のログ取り込みに切り替わります。 なお、前述の ID プロバイダーの設定が未完了の場合、以下のようにエラーが発生します。 ID プロバイダー未設定による設定エラー 動作確認 キーレス認証に切り替えた後も問題なくログが取り込めていることを確認できました。 関連記事 blog.g-gen.co.jp 武井 祐介 (記事一覧) クラウドソリューション部クラウドエンジニアリング課。 Google Cloud Partner Top Engineer 2026 選出。 趣味はロードレースやサッカー観戦、ゴルフ、筋トレ。 Follow @ggenyutakei
アバター
G-gen の武井です。当記事では、Google が提供する SIEM/SOAR 製品である Google SecOps に、AWS CloudTrail ログを取り込む方法について解説します。 はじめに Google SecOps とは データフィードとは 設定の流れ AWS の設定 S3 バケット SQS(Simple Queue Service) SQS アクセスポリシー S3 イベント通知 CloudTrail IAM データフィードの設定 動作確認 関連記事 はじめに Google SecOps とは Google Security Operations (以下 Google SecOps、旧称 Chronicle)は、Google Cloud が提供する 統合セキュリティ運用プラットフォーム です。 SIEM、SOAR、脅威インテリジェンス、Gemini を利用した AI による運用支援を提供します。これらにより、脅威の検知・調査・対応を一元的に行えます。結果として、セキュリティ運用の効率化と高度化を実現できます。 参考: Google SecOps の概要 詳細は、以下の記事をご参照ください。 blog.g-gen.co.jp データフィードとは Google SecOps では、AWS、Azure、その他 SaaS など、Google Cloud 以外の環境のログデータを取り込む仕組みとして データフィード機能 があります。 SecOps UI もしくは Feed Management API を用いて、ログソース(Amazon S3、Cloud Storage、Pub/Sub、Webhook など)を指定し、各種ログを SecOps に取り込む設定を行います。 ソースタイプ 概要 ストレージ Google Cloud、AWS、Azure のクラウドストレージバケットに保存されたログデータを定期的に取得 Amazon SQS S3 バケットの通知をキュー経由で受信し、ログデータを取得(リアルタイムかつ安定的に取り込み) ストリーミング Amazon Data Firehose、Cloud Pub/Sub、Webhook などを経由し、SIEM の HTTPS エンドポイントにログデータをストリーミングでプッシュ サードパーティ API CrowdStrike、SentinelOne、Palo Alto など、外部 SaaS から API 経由でログデータを取得 参考: フィード管理の概要 設定の流れ 当記事では以下の構成のもと、S3 バケットに格納した CloudTrail ログを、データフィード機能を使って Google SecOps に取り込みます。 その際、 Amazon SQS を用いることで、S3 バケットへのログ格納通知をキュー経由で受信し、ログデータを リアルタイムかつ安定的 に取り込みます。 大まかな設定手順は、以下のとおりです。 順序 設定項目 設定箇所 1 S3 バケットの設定 AWS 2 SQS の設定 AWS 3 SQS アクセスポリシーの設定 AWS 4 S3 イベント通知の設定 AWS 5 CloudTrail の設定 AWS 6 IAM の設定 AWS 7 データフィードの設定 Google SecOps 8 動作確認 Google SecOps 参考: AWS CloudTrail ログを収集する AWS の設定 S3 バケット S3 バケットは以下の手順に従い作成します。 参考: 汎用バケットの作成 SQS(Simple Queue Service) 今回の構成では、バケット全体を定期スキャンするのではなく、 ログ生成をトリガーにリアルタイムで取り込み を行います。 そのため、以下の手順に従い 標準タイプ でキューを作成します。 参考: Amazon SQS コンソールを使用した標準キューの作成 SQS アクセスポリシー S3 バケットから SQS キューにメッセージを送信するため、キューのアクセスポリシーを編集し、 S3 サービスプリンシパル ( s3.amazonaws.com )に対して、キューへのメッセージ送信( SQS:SendMessage )を許可します。 また、意図しないバケットからの書き込みを防ぐため、ポリシー内の Condition 句で「特定の AWS アカウント」かつ「特定の S3 バケット」からのリクエストのみを許可するように制限を行います。 今回の例では、以下のアクセスポリシーを定義しました。 { " Version ": " 2012-10-17 ", " Id ": " S3ToSQS ", " Statement ": [ { " Sid ": " AllowS3ToSendMessage ", " Effect ": " Allow ", " Principal ": { " Service ": " s3.amazonaws.com " } , " Action ": " SQS:SendMessage ", " Resource ": " arn:aws:sqs:ap-northeast-1:945008193730:yutakei-secops-cloudtrail-queue ", " Condition ": { " StringEquals ": { " aws:SourceAccount ": " 945008193730 " } , " ArnLike ": { " aws:SourceArn ": " arn:aws:s3:::yutakei-secops-cloudtrail-test " } } } ] } 参考: Amazon SQS でのポリシーの使用 S3 イベント通知 続けて、S3 バケットから SQS キューにメッセージを送信するため、S3 バケットのプロパティからイベント通知を設定します。 すべてのオブジェクト作成イベントを先ほどのキューに送信 できるよう、以下の手順に従い作成します。 参考: Amazon S3 イベント通知 CloudTrail 以下の手順に従い、先ほど作成した S3 バケットを CloudTrail ログの格納先とする 証跡 を作成します。 今回の構成では AWS KMS や SNS を使用しないため、 ログファイルの SSE-KMS 暗号化 ならびに SNS 通信の配信 については有効化しません。 なお、ログとして取り込むイベントタイプや管理イベントの API アクティビティは任意です。 参考: AWS CloudTrail と S3 を構成する 参考: CloudTrail コンソールで証跡を作成する IAM Google SecOps のデータフィードで CloudTrail ログを取り込むには、 アクセスキー と シークレットアクセスキー が必要です。 そのため、以下の公式ドキュメントに従い Google SecOps 用のマシンユーザー(AWS マネジメントコンソールへのユーザーアクセス不可)を作成してキーを発行します。 公式ドキュメントには、作成したマシンユーザーに AmazonS3FullAccess を付与する旨の記述がありますが、今回の例では S3 と SQS に関する 最小権限のカスタム IAM ポリシー を以下のとおり作成して付与しました。 { " Version ": " 2012-10-17 ", " Statement ": [ { " Sid ": " ListAllowedBuckets ", " Effect ": " Allow ", " Action ": " s3:ListBucket ", " Resource ": [ " arn:aws:s3:::yutakei-secops-cloudtrail-test " ] } , { " Sid ": " ReadObjectsFromAllowedBuckets ", " Effect ": " Allow ", " Action ": " s3:GetObject ", " Resource ": [ " arn:aws:s3:::yutakei-secops-cloudtrail-test/* " ] } , { " Sid ": " ReadFromSQSForCloudTrailFeed ", " Effect ": " Allow ", " Action ": [ " sqs:ReceiveMessage ", " sqs:DeleteMessage ", " sqs:GetQueueAttributes ", " sqs:GetQueueUrl " ] , " Resource ": [ " arn:aws:sqs:ap-northeast-1:945008193730:yutakei-secops-cloudtrail-queue " ] } ] } 参考: AWS IAM ユーザーを構成する データフィードの設定 CloudTrail ログが格納された S3 バケットの URI、SQS キューの ARN、そしてキー情報を用いて Google SecOps との連携を行い、ログの取り込みを行います。 その他にも、ログの種別や取り込み先環境を識別するために Ingestion Labels と Namespace も設定します。 設定が適切に行われると STATUS 列の値が Active と表示されます。なお、ログが取り込めている場合でも、LAST SUCCEDED ON 列に ログの最終取り込み日時 (UTC)が表示されないこともあります。 参考: AWS CloudTrail フィードを設定する方法 参考: Supported log types with a default parser 参考: アセットの名前空間を使用する 動作確認 AWS はデフォルトパーサーが用意されているため、Google SecOps にログが取り込まれると自動的に UDM イベントにパースされます。 SIEM Search (UDM 検索)メニューから以下のクエリを入力して実行すると、ログが取り込まれていることを確認できました。 metadata.log_type = "AWS_CLOUDTRAIL" 選択した UDM イベントを展開すると、筆者が S3 API をコールした際の記録が残されていました。 Event Viewer を Event Fields(UDM)から Raw Log に切り替えると、パースされる前の生ログを確認することも可能です。 Data Ingestion and Health (ネイティブダッシュボードの1つ)からも、CloudTrail のログ( AWS_CLOUDTRAIL )がエラーなく取り込めていることも確認できました。 関連記事 blog.g-gen.co.jp 武井 祐介 (記事一覧) クラウドソリューション部クラウドエンジニアリング課。 Google Cloud Partner Top Engineer 2026 選出。 趣味はロードレースやサッカー観戦、ゴルフ、筋トレ。 Follow @ggenyutakei
アバター
G-gen の杉村です。2026年1月に発表された、Google Cloud や Google Workspace のイチオシアップデートをまとめてご紹介します。記載は全て、記事公開当時のものですのでご留意ください。 はじめに Google Cloud のアップデート LOAD DATA/CREATE EXTERNAL TABLE のフォーマット指定オプションが GA Cloud Run functions で Direct VPC egress が使用可能に(Preview) Gemini CLI 利用状況を Cloud Monitoring にエクスポート Gemini Enterprise の Agent Designer が一般公開(GA) Cloud Run(functions)で pyproject.toml を使ったデプロイに対応 Cloud Load Balancing に Managed Workload Identity が登場(Preview) Cloud DNS で「DNS Armor」が一般公開(GA) Looker Studio で異なるデータソースの図表に同じフィルタを適用できるように Google Cloud にバンコクリージョン(asia-southeast3)が登場 Gemini Cloud Assist を使って BigQuery のジョブ履歴を解析できるように Compute Engine で N4A インスタンスが Preview → 一般公開(GA) Spanner でカラムナエンジンが Preview 公開 AlloyDB for PostgreSQL が PostgreSQL 18 に対応(Preview) BigQuery で Conversational Analytics 機能が Preview 公開 割り当て(Quota)の自動調整機能が組織やフォルダレベルにも対応 Google Workspace のアップデート Dropbox から Google ドライブへの移行ツールが一般公開(GA) Google Meet 音声翻訳がベータ版で利用可能になる予定(2026-01-27) Google フォームで締切日や集まった回答数に応じた自動的な受付停止が可能に Microsoft Office のパスワード保護付きファイルが編集できるように Google Workspace ユーザー向けに動画生成ツール Flow が使えるように Google チャットでメッセージの転送が可能に Google Meet の Ask Gemini 機能が2月上旬から日本語に対応 Google カレンダーで予定作成時に Gemini が会議参加者の空き時間を提案 Gemini アプリで NotebookLM をデータソースとして追加可能に Google フォームで回答者を細かく制御できるようになった はじめに 当記事では、毎月の Google Cloud(旧称 GCP)や Google Workspace(旧称 GSuite)のアップデートのうち、特に重要なものをまとめます。 また当記事は、Google Cloud に関するある程度の知識を前提に記載されています。前提知識を得るには、ぜひ以下の記事もご参照ください。 blog.g-gen.co.jp リンク先の公式ガイドは、英語版で表示しないと最新情報が反映されていない場合がありますためご注意ください。 Google Cloud のアップデート LOAD DATA/CREATE EXTERNAL TABLE のフォーマット指定オプションが GA BigQuery release notes - January 06, 2026 (2026-01-06) BigQueryの「LOAD DATA」「CREATE EXTERNAL TABLE」の際の以下オプションが Preview → 一般公開(GA)。これまで必要だったデータ取り込み前のいくつかの前処理が不要になり運用が簡素化される。 time_zone date_format、datetime_format、time_format、timestamp_format null_markers source_column_match BigQuery のロード時や外部テーブル作成時のオプション Cloud Run functions で Direct VPC egress が使用可能に(Preview) Configure Direct VPC egress for 2nd gen functions (2026-01-06) Cloud Run functions(2nd gen)で Direct VPC egress が使用可能に(Preview)。 サーバーレス関数から VPC にアクセスする手段の1つ。従来手法である Serverless VPC Access connector よりも安価で低レイテンシのため、GA 後はこちらが推奨。 Cloud Run functions で Direct Vpc Egress が使用可能に Gemini CLI 利用状況を Cloud Monitoring にエクスポート Instant insights: Gemini CLI's New Pre-Configured Monitoring Dashboards (2026-01-08) Gemini CLI 利用状況を Cloud Monitoring にエクスポートできるように。 OpenTelemetry によりメトリクスとログを送信。 Gemini Enterprise の Agent Designer が一般公開(GA) Agent Designer overview (2026-01-13) Gemini Enterprise の Agent Designer が一般公開(GA)。ノーコードエージェントを開発するための Web UI。 Gemini Enterprise の Agent Designer でノーコードエージェントを開発 以下の記事も参照。 blog.g-gen.co.jp Cloud Run(functions)で pyproject.toml を使ったデプロイに対応 Deploy Python applications with a pyproject.toml file (2026-01-13) Cloud Run(ソースコードからのデプロイ)と Cloud Run functions の Python ランタイムで、pyproject.toml を使ったデプロイに対応。 これまで主流だった requirements.txt に加え、PEP 518 や PEP 621 で標準化された pyproject.toml を直接利用できる。これにより、Poetry や Hatch といったモダンなツールを用いたプロジェクト構成をそのままデプロイに活用可能。 Google Cloud の Buildpacks がこのファイルを自動検出し、必要なライブラリをインストールしてコンテナをビルドする。ビルド設定や依存関係、メタデータを一つのファイルに集約できるため、プロジェクトの管理効率が向上する。 Cloud Load Balancing に Managed Workload Identity が登場(Preview) Backend mTLS with managed workload identity overview (2026-01-16) Cloud Load Balancing に Managed Workload Identity が登場(Preview)。 LB とバックエンド間の mTLS の構築がシンプルに。証明書の自動管理で運用負荷を下げつつ通信中のデータのセキュリティを強化。 Cloud DNS で「DNS Armor」が一般公開(GA) Advanced threat detection with DNS Armor (2026-01-16) Google Cloud の Cloud DNS で「DNS Armor」が一般公開(GA)。 VM 等からの DNS クエリを検査して悪意あるアクティビティを検知してログ記録する。Infoblox 社が提供する脅威情報に基づく。 Looker Studio で異なるデータソースの図表に同じフィルタを適用できるように Use controls across data sources (2026-01-18) Looker Studio で、異なるデータソースを参照しているチャート(図表)を単一のフィルタ(コントロール)で制御できるようになった。 フィールド ID を上書きして共通にすることでフィルタリングを共通化できる。 Google Cloud にバンコクリージョン(asia-southeast3)が登場 Cloud locations (2026-01-20) Google Cloud にバンコクリージョン(asia-southeast3)が登場。 タイ国内や周辺地域からのレイテンシなどが最適。東アジアではシンガポール、ジャカルタ、香港、台湾、東京、大阪、ソウルに次いで8個目。 これにより、2026年1月現在の Google Cloud リージョンの総数は43、ゾーンは130になった。 Google Cloud のリージョン・ゾーンの総数 Gemini Cloud Assist を使って BigQuery のジョブ履歴を解析できるように Analyze jobs (2026-01-21) Gemini Cloud Assist を使って BigQuery のジョブ履歴を解析できるようになった。 長時間クエリの原因を調べたりジョブ失敗の原因などを Gemini に質問できる。Gemini Cloud Assist を使うには現在、Google Cloud コンソールの言語設定を英語に変更する必要あり。 Compute Engine で N4A インスタンスが Preview → 一般公開(GA) N4A machine series (2026-01-26) Google Cloud の Compute Engine で N4A インスタンスが Preview → 一般公開(GA)。 Google が開発した Arm ベースプロセッサである Axion を搭載。費用対効果に優れる。ただし2026年1月末現在では、東京・大阪リージョンは未対応。 Spanner でカラムナエンジンが Preview 公開 Spanner columnar engine overview (2026-01-26) Spanner でカラムナエンジンが Preview 公開。 database でポリシーを有効にするとバックグラウンドで列指向形式でもデータを保持するようになり、適切なときに自動でそちらを使うようになる。分析系クエリの性能が最大200倍向上とされている。 AlloyDB for PostgreSQL が PostgreSQL 18 に対応(Preview) Create a new cluster and primary instance (2026-01-27) AlloyDB for PostgreSQL が PostgreSQL 18 に対応(Preview)。 PostgreSQL 18 は 2025-09-25 にリリースされた最新メジャーバージョン。 BigQuery で Conversational Analytics 機能が Preview 公開 Conversational analytics overview (2026-01-29) BigQuery で Conversational Analytics 機能が Preview 公開。 生成 AI に自然言語で質問すると AI が自動でクエリを作成して質問に回答してくれる。データソースとなるテーブルを指定してエージェントを作成。 詳細は、以下の記事も参照。 blog.g-gen.co.jp 割り当て(Quota)の自動調整機能が組織やフォルダレベルにも対応 Use the quota adjuster (2026-01-30) 割り当て(Quota)の自動調整機能が、組織やフォルダレベルにも対応。 これまではプロジェクトレベルのみ。ピーク使用量が割り当てに近づいたとき、自動で引き上げリクエストが試みられる。以下の記事も参照。 blog.g-gen.co.jp Google Workspace のアップデート Dropbox から Google ドライブへの移行ツールが一般公開(GA) Now generally available: Migrate files from Dropbox to Google Drive (2026-01-05) Dropbox から Google ドライブへの移行ツールが一般公開(GA)。昨年11月にオープンベータ公開されていた。 Google 管理コンソールから利用。Google Workspace 各種エディションで利用可能。 Google Meet 音声翻訳がベータ版で利用可能になる予定(2026-01-27) Control Speech Translation in Google Meet for your users (2026-01-07) Google Meet 音声翻訳は現在、アルファ版で利用可能。同機能が、2026-01-27 にベータ版としてより多くの人が利用可能になる予定。 Business Plus、Enterprise Plus など一部の Google Workspace エディションのみのためドキュメントを要確認。 Google フォームで締切日や集まった回答数に応じた自動的な受付停止が可能に Set Google Forms to automatically stop accepting responses based on date and time or response count (2026-01-12) Google フォームで、締め切り日や集まった回答数に応じて、自動的に受付停止できるように。 イベント登録フォームなどで、手動で受付停止しなくても済むようになる。Google Workspace、個人アカウント等などで 2026-01-12 から順次ロールアウト。 Microsoft Office のパスワード保護付きファイルが編集できるように Editing password-protected Microsoft Office files directly in Google Drive (2026-01-14) Google Workspaceで、Microsoft Office のパスワード保護付きファイルが編集できるように。 Word、Excel、PowerPoint に対応。全エディションで、順次ロールアウトされて使用可能になる。 Google Workspace ユーザー向けに動画生成ツール Flow が使えるように Flow now available as an additional Google service for Workspace customers (2026-01-16) Google Workspace ユーザー向けに動画生成ツール Flow が使えるように。 「AI-powered filmmaking tool」とされており、文章から動画や画像を生成できる。プロンプトの調整機能など、動画編集に関する機能が充実。 Google Workspace においては「additional Google service(その他の Google サービス)」の扱いであり、以下のような条件が適用される。 サービスは予告なく変更される場合があります。 地域によってはご利用いただけないサービスがあります。 現在のところ、これらのサービスは、サポートおよびサービスレベル契約の対象外です。サービスに関してご不明な点がある場合は、Google ヘルプセンターとヘルプ フォーラムをご確認ください。その他のサービスに対するサポートの拡充は、今後の検討事項となっています。 Google チャットでメッセージの転送が可能に Forward messages in Google Chat (2026-01-20) Google チャットで、メッセージの転送ができるようになった。 全ユーザーに順次ロールアウト。 Google Meet の Ask Gemini 機能が2月上旬から日本語に対応 Ask Gemini in Google Meet is expanding to Workspace Business Standard customers, additional languages, and mobile usage (2026-01-21) Google Meet の Ask Gemini 機能が2月上旬から日本語に対応。 会議に遅れて参加しても会議内のチャットで Gemini に質問してキャッチアップしたり、要点やアクションアイテムをまとめたりできる。 また、対応エディションが拡充し、Business Standard エディションでも利用可能になった。 Google カレンダーで予定作成時に Gemini が会議参加者の空き時間を提案 Better time suggestions for meeting with your colleagues using Gemini in Google Calendar (2026-01-26) Google カレンダーで予定作成時に Gemini が会議参加者の空き時間を提案してくれるようになった。 全員の空きスロットを探して自動でスロットを提案する。即時リリースドメインではすでに使用可能になっている。 Gemini アプリで NotebookLM をデータソースとして追加可能に Take your notebooks further by adding NotebookLM as a source in the Gemini app (2026-01-27) Google Workspace ユーザーの Gemini アプリで、NotebookLM をデータソースとして追加可能になった。個人アカウントでは以前から使えた機能が、Google Workspace にも展開された。 2026-01-20から順次ロールアウトが始まっている。 データソースとして NotebookLM を追加 Google フォームで回答者を細かく制御できるようになった All Google Forms will now have granular controls over who can respond (2026-01-29) Google フォームで回答者を細かく制御できるようになった。 ユーザー、グループなどに限定して回答者を制限できる。以前は回答者は「組織内」「リンクを知っている全員」しか選べなかった。 杉村 勇馬 (記事一覧) 執行役員 CTO 元警察官という経歴を持つ IT エンジニア。クラウド管理・運用やネットワークに知見。AWS 認定資格および Google Cloud 認定資格はすべて取得。X(旧 Twitter)では Google Cloud や Google Workspace のアップデート情報をつぶやいています。 Follow @y_sugi_it
アバター
G-gen の杉村です。BigQuery には Conversational Analytics (対話型分析)機能が備わっており、データに関する質問を生成 AI に対してチャット形式で投げかけることができます。この機能を使うことで、SQL の知識がなくても、自然言語でデータをクエリすることができます。 概要 Conversational Analytics とは 使用イメージ 料金 他の手法との比較 自然言語による BigQuery へのクエリ Looker Studio Pro の Conversational Analytics との違い データエージェント データエージェントとは 設定項目 公開とアクセス制御 データインサイトの自動生成 BigQuery ML 対応 精度向上のために ビジネスロジックの組み込み メタデータの整備 割り当て(Quota) 概要 Conversational Analytics とは BigQuery の Conversational Analytics (対話型分析)、あるいは データエージェント (data agents)とは、日本語や英語などの 自然言語で BigQuery のデータを抽出 できる、生成 AI 機能です。 チャット形式で生成 AI に自然言語で質問をすることで、SQL が自動生成され、テキストや図表による回答が得られます。 参考 : Conversational analytics overview BigQuery の Conversational Analytics Conversational Analytics は、以下のような質問に答えることができます。 「〇年〇月の〇〇カテゴリの商品の売上金額を集計して」 「〇年〇月から〇年〇月までの間の、〇〇の在庫量の変動をチャートにして」 当機能は Google Cloud の Web コンソール画面に組み込まれており、追加ライセンス等は不要です。 当機能は、管理者側で データエージェント と呼ばれる設定を事前に作成し、利用者向けに権限を付与して公開することで使用できます。このように、エージェントの機能や特性を管理する側と、それを利用する側で役割の分担ができることも特徴です。 データエージェントの動作 なお当機能は2026年2月初旬現在、Preview 段階です。一般公開(GA)されるまでは、技術サポートの対象外であるほか、仕様変更の可能性等があります。 参考 : Preview版のサービスを使うとはどういうことなのか - G-gen Tech Blog 使用イメージ 架空の文房具販売店の「注文履歴」「商品マスタ」「顧客マスタ」テーブルを登録したデータエージェントを使って、当機能の使用例を紹介します。 データエージェントとのチャット画面で、 2026年2月の、売れ行きトップ10の商品をリストしてください。 と質問します。 質問を入力 データエージェントは、テキストや図表を交えて質問に回答します。バックエンドでは、生成 AI が日本語による質問を SQL に変換して BigQuery に実行していますが、利用者はそれを意識する必要はありません。 データエージェントによる回答 チャットでは、前の回答を踏まえて、続けて質問ができます。 追加の質問にも回答できる この例では事前にデータエージェントに複数のテーブルを登録してあるため、バックエンドではそれらのテーブルが結合(join)されています。この例では、1つのトランザクションテーブル( orders )と2つのマスタテーブル( customers 、 items )が結合されています。 エージェントに登録されているテーブル 組織における使用イメージは、例えば以下のようなものとなります。 管理者側(クラウド管理者やデータエンジニア、データスチュアードなど)がデータエージェントを作成し、ソースデータやアクセス制御を定義する 使用者はデータエージェント選択画面の URL( https://console.cloud.google.com/bigquery/agents_hub )へアクセス。エージェントを選択して対話型分析を使用開始する エージェント選択画面 なお、データエージェントとのチャット画面は Google Cloud コンソールの一部ですので、Google Cloud コンソールにログインして「BigQuery > エージェント」と遷移することでもアクセスできます。 料金 BigQuery の Conversational Analytics 機能は、2026年2月現在、無料で使用できます。ただし、ドキュメントには「プレビュー期間中は追加の料金が発生しません。」と記載されており、一般公開(GA)後は、追加料金が発生する可能性が示唆されています。 なお Conversational Analytics 機能自体の課金の有無に関わらず、 BigQuery へのクエリ料金 は通常どおり発生します。後述のとおり、意図しない大規模スキャンによる突発課金を防ぐために、事前にエージェントに最大バイト数を指定することができます。 参考 : Conversational analytics overview - Pricing 他の手法との比較 自然言語による BigQuery へのクエリ BigQuery に対して、自然言語によってクエリを行う手法は、当記事で紹介する Conversational Analytics 以外にも複数あります。以下の記事も参照してください。 blog.g-gen.co.jp Looker Studio Pro の Conversational Analytics との違い Google が無償で提供する BI ダッシュボードツール Looker Studio の有償版ライセンスである Looker Studio Pro にも、 Conversational Analytics (対話型分析)が付属しています。 参考 : Looker Studio の Conversational Analytics の概要 Looker Studio Pro の対話型分析 同機能は BigQuery の Conversational Analytics と類似の機能を提供しますが、以下のような差異があります。 項目名 BigQuery(当記事で紹介) Looker Studio Pro 主要な機能 AI に自然言語で質問 AI に自然言語で質問 データソース ・BigQuery テーブル、ビュー、UDF ・BigQuery テーブル、ビュー ・Looker の Explore ・Google スプレッドシート ・CSV ファイル 登録可能なテーブル数 複数 1つ コンテキストの カスタマイズ ・手順(instruction) ・検証済みクエリ ・Dataplex 用語集 ・カスタムメタデータ ・手順(instruction) 課金バイト数制限 可能 不可 高度な分析 なし Python コード生成による 高度な分析 追加金銭コスト なし Pro ライセンス Looker Studio Pro に付属する Conversational Analytics は、BigQuery 以外にも、スプレッドシートや CSV などのデータソースに対応しています。 一方で BigQuery の Conversational Analytics は、複数のテーブルを分析対象にできたり、コンテキストのカスタマイズが充実していたり、通常の BigQuery 利用料金の他は追加の金銭コストがかからないなどの利点があります。BigQuery に対するデータ分析に特化した場合には、BigQuery 付属の Conversational Analytics のほうが利点が多いといえます。 データエージェント データエージェントとは BigQuery の Conversational Analytics 機能を使用するには、まず管理者が データエージェント を作成します。データエージェントは AI チャットの管理単位です。 データソースとなるテーブルの登録やカスタムメタデータの定義、利用者への権限付与などを、データエージェントの単位で行います。 参考 : Create data agents 使用者が Google Cloud コンソールのデータエージェント一覧画面にアクセスし、一覧からエージェントを選択することで、チャットが開始されます。 設定項目 データエージェントには、以下のような設定項目があります。 名称 説明 ナレッジソース データソースとなるテーブル、ビュー、UDF(ユーザー定義関数)。複数選択できる 手順 (Instructions) エージェントに組み込むプロンプト(システムインストラクション)。守らせる手順やルールなどを自然言語で記述する 検証済みクエリ AI が参考にするための、ビジネスロジックを反映したゴールデンクエリ。想定質問とそれに対する SQL を記述する 用語集 ユーザープロンプト理解のため AI が参考にする Dataplex 用語集 課金される最大バイト数 BigQuery の費用スパイクを防止するため、最大バイト数を設定できる エージェント編集画面 公開とアクセス制御 エージェントを作成したり編集したあと、エージェントを 公開 することで、設定が使用者に反映されます。公開せずに 保存 のみを行い、管理者のみに反映された状態にしておくこともできます。 参考 : Create data agents - Preview and publish the agent エージェントには IAM によるアクセス制御が適用されるため、特定の従業員にだけ公開できます。エージェントに質問するユーザーは、エージェントに対する権限に加え、データソースとなるテーブルやビュー等に対する閲覧権限も必要です。 参考 : Analyze data with conversations - Required roles データインサイトの自動生成 データエージェントのナレッジソースとしてテーブルを追加すると、自動的に データインサイト (data insight)が生成されます。このメタデータは、AI によってデータの理解に利用されます。 参考 : Create data agents - Generate insights なおデータインサイトは Dataplex Universal Catalog の機能であり、Conversational Analytics 機能を使わない場合でも、単独で使用できます。 参考 : Dataplex Universal Catalog でデータ分析情報にアクセスする BigQuery ML 対応 BigQuery の Conversational Analytics 機能は、 BigQuery ML にも対応しています。データエージェントの回答に BigQuery ML 関数の結果を含ませられるほか、検証済みクエリに含ませることもできます。 以下の BigQuery ML 関数が使用可能です。 AI_FORECAST AI.DETECT_ANOMALIES AI.GENERATE_BOOL / AI.GENERATE_INT / AI.GENERATE_DOUBLE 特に、データエージェントの検証済みクエリに BigQuery ML 関数を使ったクエリを記述しておくことで、AI が関数を使った回答を生成しやすくなります。 参考 : Conversational analytics overview - BigQuery ML support 精度向上のために ビジネスロジックの組み込み データエージェントの精度を向上するには、管理者がエージェントを作成する際に、適切な 手順 (Instructions)や 検証済みクエリ 、 Dataplex 用語集 などをエージェントに登録します。 これにより、組織のビジネスロジックが AI エージェントに組み込まれ、利用者のプロンプト(質問文)が正確に SQL に反映されるようになるほか、質問があいまいでもある程度カバーすることができます。 ただし公式ドキュメントには「カスタムテーブルメタデータやフィールドのメタデータ、検証済みクエリなど、他のコンテキスト機能でサポートされていない方法でコンテキストを改善したりする必要がある場合にのみ、エージェント向けのカスタム指示を作成してください。」と記載されており、 まずはメタデータ付与や検証済みクエリの登録を試すべき である、と示唆されています。 参考 : Create data agents - Create agent instructions メタデータの整備 BigQuery の標準機能として、テーブルやそのフィールドには、テキスト形式の 説明 (description)を付与できます。テーブルや列のビジネスメタデータを自然言語で付与しておくことで、AI がテーブルやデータを理解することの助けになります。これらのメタデータが正確に付与されていれば、生成される SQL の精度が向上します。 参考 : テーブルを管理する - テーブルの説明を更新する 参考 : テーブル スキーマの変更 - 列の説明を変更する また、データエージェントの設定で、 カスタムテーブルメタデータ や カスタムフィールドメタデータ を付与できます。これらはエージェントが使うためにのみ定義されます。ここにメタデータを設定しても、元のテーブルやビュー等のメタデータ設定には影響しません。カスタムメタデータを設定する画面では、どのようなテキストを付与したらよいか、生成 AI(Gemini)による提案も表示されます。 カスタムメタデータの編集画面 割り当て(Quota) 当機能はバックエンドで生成 AI モデルの Gemini を使用しています。通常の API 経由の Gemini 呼び出しと同じく、当機能による Gemini 呼び出しも、 動的共有割り当て (Dynamic Shared Quota、 DSQ )を採用しています。 多くの Google Cloud プロダクトは、Google Cloud プロジェクトごと、あるいはリージョンごとに割り当て(クォータ)が設定されていますが、Gemini API が採用する DSQ では、他のユーザーと共有するプールからリソースが割り当てられ、需要と共有の変動に応じて割り当てが変動します。 これにより、Google 側でリソースが不足すると 429 Resource Exhausted エラーが発生し、一時的に機能が利用できなくなる可能性があります。このエラーメッセージが表示された場合は、需要と共有のバランスが変動するまで待つ必要があります。 杉村 勇馬 (記事一覧) 執行役員 CTO 元警察官という経歴を持つ IT エンジニア。クラウド管理・運用やネットワークに知見。AWS 認定資格および Google Cloud 認定資格はすべて取得。X(旧 Twitter)では Google Cloud や Google Workspace のアップデート情報をつぶやいています。 Follow @y_sugi_it
アバター
G-gen の森です。Google Cloud のオブジェクトストレージサービスである Cloud Storage において、見落とされがちなのが レプリケーション料金 です。当記事では、ロケーションタイプの選択による料金スパイクの事象と、リージョン間レプリケーション料金の仕組み、ロケーションタイプを決めるポイントについて解説します。 事象 原因 ロケーションタイプ ロケーションタイプと可用性 リージョン間レプリケーション料金とは 料金の算出方法 ターボレプリケーション ロケーションタイプ決定の判断基準 可用性と堅牢性 コストとレイテンシの最適化 事象 Cloud Storage バケットを新規に作成し、大容量(全体で約12.4TiB)のオブジェクトをアップロードしました。すると、想定よりも大きな Cloud Storage 料金が発生しました。 オブジェクト数は1,000個以内であり、オペレーション料金は大きく発生しない想定でした。 料金がスパイクした SKU を確認すると、 Network Data Transfer GCP Replication within Asia ( CA61-E18A-B2D6 )でした。 なお、当記事で扱うこの事象は、以下の SKU でも発生する可能性があります。 Network Data Transfer GCP Replication within Europe( CB83-3C2D-160D ) Network Data Transfer GCP Replication within Latin America( AFC0-C8B7-9708 ) Network Data Transfer GCP Replication within Northern America( AED0-3315-7B11 ) Network Data Transfer GCP Replication within Oceania( 1193-6316-413E ) 原因 当該のバケットを作成する際、ロケーションタイプの設定において、コンソールのバケット作成画面におけるデフォルト設定である マルチリージョン を選択していました。 マルチリージョンまたはデュアルリージョンでは、オブジェクトの作成や更新を行うと、データが地理的に離れた場所にレプリケーション(コピー)されるため、 リージョン間レプリケーション料金 が発生していました。この仕様を認識していなかったため、レプリケーション料金は想定外のものとなりました。 ロケーションタイプ ロケーションタイプと可用性 Cloud Storage では、バケット作成時に ロケーションタイプ 、すなわちデータの保存場所を、以下の3つのうちいずれかから選択します。 ロケーションタイプ 説明 リージョン(Region) 東京( asia-northeast1 )などの特定の1地点に保存 デュアルリージョン(Dual-region) 東京と大阪( asia1 )などの特定の2リージョンに保存 マルチリージョン(Multi-region) アジア( asia )などの広大な地理的エリア内の複数リージョンに保存 上記のうち、デュアルリージョンとマルチリージョンは、リージョン障害に対する耐性を持ちますが、内部的にリージョンをまたいでデータをコピーするため、リージョン間レプリケーション料金が発生します。 参考 : バケットのロケーション リージョン間レプリケーション料金とは リージョン間レプリケーション料金 とは、デュアルリージョンまたはマルチリージョンバケットにオブジェクトを作成したり、更新したりする際に発生する、データ転送費用のことです。 Cloud Storage の下り(Egress)料金は外部に読み出すときにだけ発生すると誤解しがちです。しかし実際には上記のように、デュアルリージョンまたはマルチリージョンバケットのように冗長化構成をとっているバケットで、書き込み時にもネットワーク費用が発生するという点に注意が必要です。 料金の算出方法 リージョン間レプリケーション料金は、書き込んだデータのサイズに応じて発生します。2026年1月現在の主要なロケーションでの料金例は以下の通りです。 ロケーション 料金 (1 GiB あたり) 北アメリカ(US など) $0.02 ヨーロッパ(EU など) $0.02 アジア(ASIA など) $0.08 最新の正確な料金単価は、以下の公式料金ページをご確認ください。 参考 : Cloud Storage の料金 - リージョン間レプリケーション ターボレプリケーション デュアルリージョンのバケットでは、オプション機能として ターボレプリケーション (Turbo Replication)を有効にできます。この機能が有効になっていると、通常より料金が多く発生します。 まず、ターボレプリケーションがオフの場合、リージョン間のコピーは以下の仕様で行われます。 新しく書き込まれたオブジェクトの 99.9% に対しては1時間以内を目標にリージョン間でコピーを完了させる 残りのオブジェクトに対しては12時間以内を目標にコピーを完了させる 一方でターボレプリケーションを有効にすると、オブジェクトの100% が、15分以内にコピー完了するように SLA が設定されます。 参考 : データの可用性と耐久性 - 複数のリージョンにわたる冗長性 参考 : データの可用性と耐久性 - ターボ レプリケーション 参考 : Cloud Storage Service Level Agreement (SLA) その代わり、ターボレプリケーションを有効にすると、リージョン間レプリケーション料金の単価が割増になります。高頻度で大容量の書き込みが発生するワークロードでターボレプリケーションを有効化すると、コストが大幅に上昇する可能性があるため、RPO 要件に基づいた適切な判断が必要です。 参考 : Cloud Storage の料金 - リージョン間レプリケーション ロケーションタイプ決定の判断基準 可用性と堅牢性 単一リージョンのバケットを使用することで、レプリケーション料金を排除できます。分析用の一時ファイルや頻繁に更新されるログなどは、単一リージョンのバケットを選ぶことで、コストを最適化できます。 単一リージョンのバケットであっても、データは複数のゾーンに冗長化されており、十分に高い冗長性と堅牢性(年間99.999999999%)を持っています。 一方で、リージョンレベルの障害が許容できないほどの高い可用性が必要なデータは、その性質によっては、データ転送のコストをかけてでもデュアルリージョンやマルチリージョンを検討します。 コストとレイテンシの最適化 マルチリージョンバケットに保存されるオブジェクトを読み取る際は、読み取り元のコンピューティングリソース(Compute Engine など)が存在するリージョンにかかわらず、常にネットワーク下り料金が発生します。 そのため、特定のリージョンのコンピューティングリソースから頻繁にオブジェクトを読み取る場合は、デュアルリージョンまたは単一リージョンを選択することで、コストを最適化できます。 また、デュアルリージョンまたは単一リージョンは、読み取り側のコンピューティングリソースと同一リージョンであれば、レイテンシも最適化されます。 森 寛之 (記事一覧) クラウドソリューション部 三重県出身、愛知県在住のクラウドエンジニア! 業務システムエンジニアからクラウドエンジニアへ転向。 好きな分野は 業務分析と、BigQuery でデータ分析。 Follow @mori_chan_it
アバター
G-gen の min です。BigQuery に統合された AI アシスタント機能である BigQuery データキャンバス について、より実践的な活用方法と、技術的な制約事項について解説します。 はじめに BigQuery データキャンバスとは Conversational Analytics API とは 効果的な質問のテクニック コンテキストを具体的に提示する 複雑な分析は複数のステップに分割する データ条件と集計方法を明示する フォローアップ質問で深掘りする 出力形式を指定するキーワード サンプルデータによる検証 データの準備 実行例 制限事項 概要 可視化の制限 データ処理の制限 サポートされる質問の種類 はじめに BigQuery データキャンバスとは BigQuery データキャンバス (BigQuery data canvas)は自然言語による指示と、グラフィカルなユーザーインターフェイスによってデータの検索、変換、クエリ、可視化を行う機能です。 参考 : BigQuery data canvas でデータを分析する Gemini in BigQuery の全体像や、データキャンバスの基本的な使い方については、以下の記事をご参照ください。 blog.g-gen.co.jp Conversational Analytics API とは BigQuery データキャンバスの裏側では、 Conversational Analytics API という API が動作しています。この API は、ユーザーからの自然言語による質問を受け取り、Gemini モデルを使用して SQL クエリを生成し、データを取得して可視化を行う役割を担っています。 当記事では、Conversational Analytics API の仕様に基づいて、データキャンバスを効果的に利用するための質問テクニックと、考慮すべき制限事項について解説します。 参考 : Conversational Analytics API を使ってみる 効果的な質問のテクニック コンテキストを具体的に提示する 漠然とした質問は、AI の解釈の幅を広げすぎてしまい、期待しない回答につながります。日付、カテゴリ、数値フィルタ、計算ロジックなどの詳細なコンテキストを含めることで、回答の精度が向上します。 改善前 「手動とシステムの請求書はいくつですか?」 改善後 「 毎月 手動で作成される請求書とシステムで作成される請求書の数を教えてください。手動の請求書を1通作成するのに 15分かかると仮定して 、すべての手動の請求書を処理するのにかかる合計時間を 時間単位で計算して 、概要を提示してください。」 このように、具体的な計算要件(「15分かかると仮定」)や出力形式(「概要を提示」)を含めることが重要です。 複雑な分析は複数のステップに分割する 人間と同様に、AI も一度に複数のタスクを依頼されると混乱することがあります。複雑な分析を行いたい場合は、質問を複数のステップに分割し、データキャンバス上でノードをつなげていくアプローチが有効です。 例えば、「各売掛金タイプの平均決済日数と、手動決済の割合と、それにかかった年間時間は?」と一度に聞くのではなく、以下のように分割します。 「2025年5月5日から2025年6月1日までの各売掛金タイプの平均所要日数は何日ですか?」 その結果に対して、「手動決済の割合はどれくらいですか?」 さらにその結果に対して、「手動決済に1つあたり15分かかると仮定した場合、年間でどれくらいの時間を費やしていますか?」 このように段階を追うことで、各ステップで適切なフィルタや集計が適用され、正確な結果が得やすくなります。 データ条件と集計方法を明示する SQL の WHERE 句や GROUP BY 句に相当する条件を、自然言語で明確に指示します。 フィルタ条件 「2025年5月2日から2025年6月3日までの請求書」「未払い残高で結果を最大5件に制限」など 集計条件 「顧客名ごとの未払い残高の合計」「平均経過日数」など フォローアップ質問で深掘りする 一度の質問で完結させる必要はありません。前の質問の結果(コンテキスト)を踏まえて、条件を変更したり追加したりする「フォローアップ質問」が可能です。 元の質問 「46 日を超えて経過したレコードについて、顧客名と未払い残高を教えてください」 フォローアップ 「90 日を超えたレコードに条件を変更し、上位10件に制限してください」 出力形式を指定するキーワード プロンプトに含めるキーワードによって、データキャンバスが提案する可視化形式(グラフの種類)をコントロールできます。 期待する形式 プロンプトに含めるキーワードの例 テーブル (表) 列名を具体的に列挙する(例 : 「顧客名、未払い残高、平均経過日数、売掛金タイプを教えてください」) テキスト (文章) 「概要」「要約」「簡単な回答」 折れ線グラフ 「傾向」「推移」「変化」「変化率」 棒グラフ / 比較表 「比較」「分散」「違い」「上位の業種」 参考 : Conversational Analytics API: 効果的な質問をする サンプルデータによる検証 データの準備 以下の SQL を BigQuery クエリエディタで実行すると、約 1,000 件のダミーデータ(請求書データ)を含むテーブル invoices_sample が作成されます。 このデータセットは、手動(Manual)とシステム(System)作成の偏りや、ランダムな滞留日数を含むデータセットです。 ※ project_id.dataset_id の部分は、ご自身の検証環境に合わせて変更してください。 CREATE OR REPLACE TABLE `project_id.dataset_id.invoices_sample` AS WITH generator AS ( -- 1から1000までの数字を生成(1000行のデータを作成) SELECT x FROM UNNEST(GENERATE_ARRAY( 1 , 1000 )) AS x ) SELECT -- 請求書ID: INV-00001 の形式 CONCAT ( ' INV- ' , LPAD ( CAST (x AS STRING), 5 , ' 0 ' )) AS invoice_id, -- 顧客名: Client_1 〜 Client_50 をランダムに割り当て CONCAT ( ' Client_ ' , CAST ( FLOOR ( 1 + RAND() * 50 ) AS INT64)) AS customer_name, -- 請求日: 2024年1月1日から約1年半の範囲でランダムに生成(記事内の2025年5月も含む) DATE_ADD( DATE ( ' 2024-01-01 ' ), INTERVAL CAST ( FLOOR (RAND() * 550 ) AS INT64) DAY) AS invoice_date, -- 作成タイプ: 70%を System、30%を Manual に偏らせる CASE WHEN RAND() < 0.3 THEN ' Manual ' ELSE ' System ' END AS creation_type, -- 売掛金タイプ: 3種類をランダムに分布 CASE WHEN RAND() < 0.5 THEN ' Product ' WHEN RAND() < 0.8 THEN ' Service ' ELSE ' Consulting ' END AS ar_type, -- 金額: 1,000 〜 100,000 の間でランダム CAST ( FLOOR ( 1000 + RAND() * 99000 ) AS INT64) AS amount, -- 経過日数: 0日のもの(正常)と、長期滞留(異常値)を混ぜる CAST ( FLOOR ( CASE WHEN RAND() < 0.5 THEN 0 -- 50%は未経過(0日) WHEN RAND() < 0.8 THEN RAND() * 30 -- 30%は30日以内 ELSE 30 + RAND() * 100 -- 20%は長期滞留(30〜130日) END ) AS INT64) AS days_overdue FROM generator; 実行例 作成したテーブルをデータキャンバスで開き、先ほど紹介した「コンテキストの提示」を意識したプロンプトを入力してみます。単純な集計だけでなく、 仮定に基づいた計算 を依頼します。 プロンプト creation_type が Manual の請求書と System の請求書の数を教えてください。Manual の請求書 1 通作成するのに 15 分かかると仮定して 、すべての Manual 請求書を処理するのにかかる合計時間を 時間単位で計算して 、概要を提示してください。 実行結果 「Manual の請求書は 306 件、System の請求書は 694 件です。 Manual の請求書をすべて処理するのにかかる合計時間は、306 件 * 15 分/件 = 4590 分、つまり 76.5 時間です。 以下に、作成タイプ別の請求書数を示すグラフを添付します。 ご不明な点がございましたら、お気軽にお尋ねください。」 このデータセットでは、約 30% が Manual (手動)作成として生成されます。AI は単純にレコード数を数えるだけでなく、指示通り「件数 × 15分 ÷ 60分」の計算を行い、 「手動処理に合計で約 76.5 時間かかっています」 といった洞察を返します。 制限事項 概要 Conversational Analytics API の制限事項についてのドキュメントを確認することで、BigQuery データキャンバスの制約事項を理解することができます。当記事では2026年1月現在のドキュメントの記載に基づき、重要なものをピックアップして紹介します。最新情報は、以下のドキュメントを参照してください。 参考 : Conversational Analytics API known limitations 可視化の制限 チャート(図表)の種類によってサポート状況が異なります。 サポート対象 : 折れ線グラフ、面グラフ、棒グラフ(横、縦、積み上げ)、散布図、円グラフ 部分的にサポート対象 (予期しない動作の可能性あり) : マップ、ヒートマップ、ツールチップ付きのグラフ データ処理の制限 大量データを扱う場合、以下の制限に注意が必要です。 BigQuery スキャン制限 : 処理バイト数は 500 GB まで。パーティション分割などを利用し、スキャン量を抑える工夫が必要 結果サイズ : システムが返すデータ結果( DataResult )は、最大 3,000,000バイト (約3MB)。超過分は切り捨て サポートされる質問の種類 現時点では、主にデータの「集計」「可視化」を得意としています。 サポート対象 : 指標の推移、ディメンション別の内訳・分布、ランキング、一意の値の抽出など サポート対象外 : 将来の予測、相関分析・異常検出などの高度な統計分析 佐々木 愛美 (min) (記事一覧) クラウドソリューション部 データアナリティクス課。2024年7月 G-gen にジョイン。G-gen 最南端、沖縄県在住。最近覚えた島言葉は、「マヤー(猫)」。
アバター
G-gen の川村です。この記事では、Google の画像生成 AI モデルである Gemini 3 Pro Image、通称 Nano Banana Pro について紹介します。 はじめに 当記事について Nano Banana Pro とは Nano Banana と Nano Banana Pro Nano Banana Pro の利用 概要 Google Workspace での利用 API 経由での利用 特徴 解像度と画質 日本語テキスト描写 思考モード Google 検索との連携 利用手順 Gemini アプリ NotebookLM その他 プロンプトのコツ 概要 被写体のシーン変更 対話による段階的編集 複数画像の統合 文字の挿入 高解像度出力 活用事例 広告・マーケティング分野の高速化 コンテンツ制作 留意点 法的・倫理的リスク(著作権と利用規約) 技術的制約・品質管理 はじめに 当記事について 2025年8月26日、Google は画像生成 AI モデル Gemini 2.5 Flash Image、通称 Nano Banana (ナノバナナ)を発表しました。その後、2025年11月20日に後継モデルである Gemini 3 Pro Image、通称 Nano Banana Pro (ナノバナナプロ)がリリースされました。 当記事では、Nano Banana Pro の基本機能、開始方法、プロンプトのコツ、および実務でのユースケースについて解説します。なお、モデルの正式名称は Gemini 2.5 Flash Image や Gemini 3 Pro Image ですが、当記事ではより広く知られている通称である Nano Banana や Nano Banana Pro を呼称として使用します。 参考 : Nano Banana: Image editing in Google Gemini gets a major upgrade 参考 : Nano Banana Pro: Gemini 3 Pro Image model from Google DeepMind Nano Banana Pro とは Nano Banana Pro とは、Google が提供する画像生成・編集 AI モデルです。 前身の Nano Banana は、LM Arena(AI モデルを評価する公開ウェブサイト)の提出時に仮の名前としてつけられたものが、その精度の高さから話題となり、現在では Google 公式の通称として定着しています。 参考 : Why It Accidentally Got Called Nano Banana 🍌 | Made by Google Podcast S8E8 - YouTube (12:34〜) Nano Banana Pro は以下のような特徴により、従来の画像生成 AI の弱点を克服しています。 特徴 説明 被写体の一貫性 生成した人物やオブジェクトの特徴を保持したまま、異なるシーンやポーズで展開 対話型編集 自然言語(プロンプト)での指示により、画像の特定部分を段階的に修正・変更可能 高速処理 通常の画像生成 AI が30秒〜1秒程度かかるのに対し、数秒〜30秒程で生成を完了できる高速性 Nano Banana と Nano Banana Pro Nano Banana Pro が高性能を発揮する一方で、Nano Banana は 速度と効率性 を重視して設計されており、大容量かつ低レイテンシ(低遅延)のタスクに最適化されています。また API 経由での利用時は、利用料金も Nano Banana のほうが安価に設定されています。 なお Gemini アプリ内では、Nano Banana が「高速モード」に割り当てられており、手軽に画像生成したい時や、試行錯誤を繰り返したい場合に適しています。一方で Nano Banana Pro は「思考モード」「Pro」に割り当てられています。 参考 : Gemini アプリで画像を生成、編集する - パソコン - Gemini アプリ ヘルプ Nano Banana と Nano Banana Pro のスペックの違いについては、以下の表を参照してください。 機能 Nano Banana Nano Banana Pro 解像度 最大 1024×1024px(1K) 2K/4K対応(最大4096×4096px) テキスト描写 一部歪みが発生する場合あり 高精度、多言語対応(日本語含む) 参照画像合成 最大3枚を推奨 最大14枚(人物 5 名、オブジェクト6個を含む) 推奨タスク 高速な試行錯誤、低レイテンシの環境 プロ仕様の制作、複雑な対話型編集 参考 : Nano Banana による画像生成  |  Gemini API  |  Google AI for Developers 参考 : Gemini 3 Pro Image  |  Generative AI on Vertex AI  |  Google Cloud Documentation 参考 : Gemini 2.5 Flash Image  |  Generative AI on Vertex AI  |  Google Cloud Documentation Nano Banana Pro の利用 概要 Nano Banana Pro は、Gemini アプリ、NotebookLM、Google スライド、Google Vids など、 Google Workspace に付属のアプリ で使用できます。また、個人向けの Gemini アプリでも利用可能です。 また、Google Cloud や Google AI Studio を使うことで、API 経由での呼び出しも可能なことから、 独自開発のアプリ に組み込むことも可能です。 Google Workspace での利用 Nano Banana Pro は多くの Google Workspace エディションで利用可能ですが、一部機能は Business Standard 以上のプランに限定されています。 Google Workspace エディション Gemini アプリ / NotebookLM Google スライド Google Vids 1日の画像生成上限 Business Starter / Enterprise Starter ○ ✕ △ (注1) 3枚 Business Standard / Plus ○ ○ ○ 100枚 Enterprise Standard / Plus ○ ○ ○ 100枚 Google AI Ultra for Business ○ ○ ○ 1,000枚 (注1) Google Vids では、Business Starter 等の下位プランでも 2026 年 5 月末まで期間限定で利用可能です。ただし、それ以降はAI機能の使用に制限が設けられる可能性があります。 その他のエディションや詳細については、以下公式ドキュメントを参照してください。 参考 : Use Gemini Apps with a work or school Google Account - Business / Enterprise - Gemini Apps Help 参考 : Google Vids での Gemini 機能の提供状況について - Google ドキュメント エディタ ヘルプ API 経由での利用 Google Cloud の AI プラットフォームサービス Vertex AI や、個人向けの生成 AI プラットフォームサービス Google AI Studio を使うことで、Nano Banana Pro を API 経由で呼び出すことができます。 これにより、自組織で独自開発したアプリケーションに、Nano Banana Pro による画像生成機能を組み込むことが可能です。 参考 : Vertex AI で Gemini API を使用してコンテンツを生成する Vertex AI と Google AI Studio の違いについては、以下の記事を参照してください。 blog.g-gen.co.jp 特徴 解像度と画質 従来の Nano Banana の解像度上限は 1024 × 1024 ピクセル(1K)でしたが、Nano Banana Pro は 最大 4K(4096 × 4096ピクセル)でのネイティブ生成 に対応しています。 このネイティブ生成とは、単に小さな画像を引き伸ばすではなく、最初から高解像度で画像を生成することを意味しています。高解像度のため、印刷物や大型ディスプレイでの利用時に優位性があります。ただし、現時点では 4K での生成は API 経由での呼び出し時のみとなっている点には注意が必要です。 日本語テキスト描写 AI 画像生成における「文字崩れ」や「日本語に弱い」といった課題が、Nano Banana Pro で劇的に改善されました。 ロゴや看板、ポスターなどの画像内に、ひらがな、カタカナ、漢字を正しく、かつデザインに馴染んだ形で挿入できます。 思考モード Nano Banana Pro では、画像生成する前に、「思考モード」という推論プロセスを踏みます。 この思考モードにより、ユーザーの指示の背景にある「意図」や「文脈」まで整理してから画像を生成します。よって、複雑な指示でも乖離が少ない結果が得られます。 Google 検索との連携 Nano Banana Pro は Google 検索ツールと連携し、リアルタイムの情報を画像に反映できます。 これにより、最新のニュースや天気、株価などのデータに基づいた視覚資料の作成が可能です。 利用手順 Gemini アプリ Gemini アプリ( https://gemini.google.com/app )にアクセス 「画像を作成」(画像①)を選択 モデルメニューから「思考モード」(画像②)を選択(「高速モード」は Nano Banana ( gemini-2.5-flash-image ) を使用) プロンプトを送信 NotebookLM NotebookLM( https://notebooklm.google.com )にアクセス ノートブックを開いて「ソースを追加」を選択し、ソースをアップロード 「インフォグラフィック」をクリック その他 以下のサービスからも、Nano Banana Pro を使用できます。詳細な手順は省略します。 Google スライド Google Vids Vertex AI Google AI Studio プロンプトのコツ 概要 Nano Banana Pro の性能を引き出すには、以下のような要素を組み合わせることが有効です。 要素 説明 例 被写体 誰、何が 小さな柴犬、キャップを被った男性 場所 / 背景 どんな場面、環境か 雪が舞っている森林、夕暮れのビーチ アクション 何をしているか、状態 勢いよく走っている、座っている スタイル 表現手法 アニメ風、80年代風 被写体のシーン変更 最大 5 人までの人物やキャラクターを一貫して維持しつつ、異なるポーズやシーン、表情の画像を複数生成できます。 プロンプト例 この人物が、おしゃれなカフェでノートPCを開いて作業している様子 対話による段階的編集 被写体を維持したまま自然言語で画像を編集できます。また、会話形式で段階的にリッチな画像を作り上げていくことができます。 プロンプト例(初回) 背景を夜景にして プロンプト例(2回目) 空に大きな花火を打ち上げて 複数画像の統合 最大 14 枚の異なる参照画像(人物、商品、背景など)の要素を組み合わせて、新しい画像を生成します。例えば、自社商品画像と背景画像を組み合わせて広告写真を作成できます。 プロンプト例 このスニーカーが、森の岩の上に自然に置かれている広告写真を作って 文字の挿入 ロゴやポスター、インフォグラフィックなどに、日本語(漢字・ひらがな・カタカナ)を含む正確なテキストを組み込むことができます。 プロンプト例 レトロな喫茶店の木製看板に、『純喫茶 ジージェン』と手書き風の日本語フォントで描いて 高解像度出力 Nano Banana Pro は最大 4K 解像度での画像生成をサポートし、印刷物や大型ディスプレイ向けのプロフェッショナルで高画質な画像も作成できます。 プロンプト例 (古い白黒写真)この写真を、自然な色彩でカラー化し、現代の高画質写真のように修復して 活用事例 広告・マーケティング分野の高速化 広告やマーケティン部分野では、以下のような用途が考えられます。 用途名 概要 商品広告画像の生成 自社商品とモデル画像を合成し、着用イメージを即座に作成 シミュレーション 家具レイアウトや試着イメージなど、様々なシミュレーションのイメージ作成 サムネイル量産 広告バナー、 YouTube やブログのサムネイルを短時間で生成 グローバル展開 日本語ポスターを、レイアウトを維持したまま多言語化 商品広告画像の生成の例を紹介します。 例えば、コスメなどの自社商品画像と、モデルの画像を 2 つ準備します。今回はサンプルとして、Nano Banana Pro を使って 架空の商品と人物 を作成しています。 参考画像① : 架空の化粧水 参考画像② : 架空のモデル この2つの画像をアップロードしたうえで、以下のようなプロンプトを送信します。 この女性がこの化粧水を片手に持ちながら、床に座り込んでいる。 グレー背景のクールなイメージで、ブランド「G-gen」宣伝用のポスターを作って。 このままでも広告として利用できますが、少し雰囲気を変えていきます。続けて、以下のようなプロンプトを送信して修正していきます。 この女性が立った状態で壁にもたれかかっている。 また、化粧水が魅力的に見えるポーズを取っている。 この女性が自然の中で太陽を浴びながら、化粧水を額に寄せている このように自社商品の広告を作成したり、背景や被写体のポーズ、文字の配置も修正できます。光の入り方や影、顔の表情までリアルな写真のように再現できます。 コンテンツ制作 コンテンツ制作の背景では、以下のような用途が考えられます。 用途名 概要 図解の高速化 複雑な情報を視覚的に分かりやすい図解化し、外部公開資料やプレゼン資料の作成を効率化 ストーリーボード制作 被写体の一貫性を保ちつつ、SNS 投稿用の4コマ漫画を内製 キャラクター運用 企業キャラクターを季節イベントや商品紹介などの複数シーンで利用し、企業ブランディングを強化 以下は、インフォグラフィックとしての利用例です。 政府が発表している総合経済対策の PDF 資料は、以下のように複雑な情報がテキストでまとめられており、理解するには隅々まで読む必要があります。 参考 : https://www5.cao.go.jp/keizai1/keizaitaisaku/1121_taisaku_gaiyo.pdf この公開 URL を NotebookLM のソースに追加した後、「インフォグラフィック」をクリックします。 数分後、作成された画像がこちらです。 複雑な情報を AI で要約し、わかりやすくインフォグラフィックで図解してくれます。Nano Banana Pro が使われているため、Nano Banana で発生していた文字化けも少なくなり、日本語対応が進化しています。 注意点としては、現時点(2026年1月現在)の NotebookLM では、インフォグラフィック画像の修正は実装されていません。NotebookLM で生成した画像を編集したい場合は、画像ファイルをダウンロードして Gemini アプリにアップロードしなおし、以下のようなプロンプトを送信します。 この画像を縦型 9:16 にして 続けて、以下のようなプロンプトも送信してみます。 女性がこの画像の内容を、カラーの 4 コマ漫画で説明している 上記のように、一度生成した画像は、Gemini アプリを使うことで会話形式で段階的な修正が可能です。 留意点 法的・倫理的リスク(著作権と利用規約) 著作権・肖像権の侵害 既存のアニメキャラクターや有名人、実在の人物の写真をモデルにして画像を生成・公開する行為は、 著作権や肖像権の侵害 にあたる可能性があります。 名誉毀損 実在の人物の姿を使って不適切な合成画像を公開した場合、名誉毀損にあたる可能性があり、注意が必要です。 技術的制約・品質管理 商用利用時の推奨モデル 広告利用を含む商業利用を行う場合、Google Workspace with Gemini または Vertex AI の利用が推奨されています。 利用上限 Business Standard 以上の場合、1日あたり最大100〜1,000枚の画像生成が可能です。 Business Standard 以下の場合、1日3枚の画像生成が可能です。詳細は以下のドキュメントを参照してください。 参考 : 仕事用または学校用の Google アカウントで Gemini アプリを利用する SynthID(電子透かし)の埋め込み Gemini で生成されたすべての画像には、AI による生成物であることを識別するための目に見えるロゴと、編集を行っても保持される見えない SynthID デジタル透かしが自動的に埋め込まれます。 参考 : SynthID で Google AI によって生成された画像や動画を検証する - パソコン - Gemini アプリ ヘルプ 川村真理 (記事一覧) クラウドソリューション部 クラウドサポート課 美容業界からITへ転身。Google Workspace 専任サポートから Google Cloud にも興味が湧き日々奮闘中。海外旅行が大好きで11カ国突破、これからも更新予定
アバター
G-gen の佐々木です。当記事では、Google Cloud が提供する データサイエンスエージェント (Data Science Agent)について解説します。データサイエンスエージェントは、Colab Enterprise ノートブック上で、AI エージェントがデータクレンジングや分析などのタスクを自動的に行う機能です。 概要 データサイエンスエージェントとは 注意点 Google Colab のデータサイエンスエージェント 制限事項 料金 開始方法 IAM ロールの設定 Gemini in Colab Enterprise の起動 読み取り可能なデータソース CSV ファイル BigQuery テーブル 使用例 概要 データサイエンスエージェントとは Google Cloud の データサイエンスエージェント (Data Science Agent)とは、データエンジニア、データサイエンティスト、データアナリストのタスクを支援するマネージド AI エージェントです。このエージェントにより、Colab Enterprise ノートブック上で 自然言語によるデータ分析 が実現できます。 データサイエンスエージェントは、 Colab Enterprise ノートブック (IPYNB ファイル)を使用して、ユーザーの入力したプロンプトに従って以下のようなタスクを自律的に行います。 実行計画の生成 データクレンジングの実行 探索的データ分析の実行、データ可視化 機械学習モデルのトレーニング、評価 データサイエンスエージェントは、Google Cloud コンソールの Colab Enterprise もしくは BigQuery Studio から使用することができます。 エージェントが自動的にコードを実行する場合は、コンピュートリソースとして Colab Enterprise の ランタイム が使用されます。 参考 : データ サイエンス エージェントを使用する 参考 : BigQuery で Colab Enterprise データ サイエンス エージェントを使用する 参考 : ランタイムとランタイム テンプレート 注意点 データサイエンスエージェントは、2026年1月現在、 Public Preview 版 です。当記事で解説する内容は一般提供(GA)の際に変更される可能性があることを予めご了承ください。 Preview 版のサービスや機能を使うに当たっての注意点は、以下の記事も参考にしてください。 blog.g-gen.co.jp Google Colab のデータサイエンスエージェント データサイエンスエージェントは、無料のクラウドホスト型ノートブック環境である Google Colab でも使用することができます。Google Cloud のサービスである Colab Enterprise や BigQuery と異なり、Google Cloud の契約が不要であるため、手軽にエージェントを使用することができます。 個人での使用など、Google Cloud が提供する企業・組織向けの高度なアクセス管理やサポート等が不要な場合は、まずはこちらでエージェントを試してみるのもよいでしょう。 Google Colab と Colab Enterprise の比較については、以下の記事をご一読ください。 blog.g-gen.co.jp 参考 : Colab のデータ サイエンス エージェント: Gemini によるデータ分析の未来 制限事項 データサイエンスエージェントには、データソースの制限のほか、以下のような制限事項があります。 初回実行時に5~10分程度のレイテンシーが発生することがある(プロジェクト単位)。 VPC Service Controls が有効化されているプロジェクトでは使用できない。 PySpark を使用する場合、2026年1月現在は Serverless for Apache Spark 4.0 のみ生成できる。古いバージョンの Apache Spark コードは生成できない。 制限事項に関する最新の情報については以下のドキュメントを参照してください。 参考 : データ サイエンス エージェントを使用する - 制限事項 参考 : BigQuery で Colab Enterprise データ サイエンス エージェントを使用する - 制限事項 料金 データサイエンスエージェントは無料で利用することができます。 ただし、エージェントがノートブック上でコードを実行する場合、Colab Enterprise のランタイムが使用されるため、ランタイムの構成(マシンタイプ + ディスク容量)に応じた料金が発生します。 Colab Enterprise の料金に関しては以下の記事をご一読ください。 blog.g-gen.co.jp また、データソースとなる BigQuery にクエリを実行する場合など、他の Google Cloud のサービスを操作する場合、そのサービスの料金が別途発生する可能性がある点には注意が必要です。 開始方法 IAM ロールの設定 データサイエンスエージェントを使用するには、操作するユーザーに対して、プロジェクト単位で以下のロールを付与します。 Colab Enterprise ユーザー (roles/aiplatform.colabEnterpriseUser) Gemini in Colab Enterprise の起動 Colab Enterprise もしくは BigQuery Studio で Colab Enterprise ノートブックを開きます。画面下部にある青いボタンを押下することで、Gemini(Gemini in Colab Enterprise)のプロンプト入力を行い、データサイエンスエージェントに対して指示を与えることができます。 Gemini in Colab Enterprise からプロンプトを入力する 読み取り可能なデータソース CSV ファイル CSV ファイルをデータソースとする場合、プロンプト入力ウィンドウにある + マークからファイルをアップロードし、エージェントが参照するファイルとして指定することができます。 エージェントが参照する CSV ファイルをアップロードする アップロードしたファイルのパスは /content/<ファイル名> となります。 BigQuery テーブル BigQuery テーブルをデータソースとする場合、以下の方法でエージェントからテーブル内のデータを参照できます。 テーブルセレクタを使用する。 プロンプトに <プロジェクトID>:<データセット名>.<テーブル名> の形式で記述する。 プロンプトに @ を記述して BigQuery テーブルを検索する。 テーブルセレクタは、プロンプト入力ウィンドウにある + マークから使用することができます。検索フィルタを設定することで、他のプロジェクトや一般公開データセットのテーブルも参照できます。 エージェントが参照する BigQuery テーブルを選択する 検索フィルタを設定して他のプロジェクトのテーブルを参照する プロンプト内でテーブルを指定する場合は、以下の例のように、プロンプトに <プロジェクトID>.<データセット名>.<テーブル名> の形式で記述することで、対象のテーブルのデータを参照することができます。こちらの方法でも、他のプロジェクトや一般公開データセットのテーブルが参照できます。 `bigquery-public-data.ml_datasets.iris` を使い、アヤメの種類を分類するロジスティック回帰モデルを構築してください また、プロンプトに @<プロジェクトID>.<データセット名>.<テーブル名> のように記述することで BigQuery テーブルを検索することもできます。検索結果として他のプロジェクトのテーブルも表示されますが、実際に参照できるのは同じプロジェクトに存在するテーブルのみです。なお、他のプロジェクトのテーブルを指定すると無視されます。 "@"を使用してテーブルを検索する 使用例 BigQuery Studio でデータサイエンスエージェントを使用し、機械学習モデルの構築を試してみます。 まず、BigQuery Studio で新しいノートブックを開きます。 BigQuery Studio から Colab Enterprise ノートブックを開く 以下のプロンプトを送信して、BigQuery の一般公開データセットにある iris テーブルを使用した機械学習モデルの構築を指示します。 `bigquery-public-data.ml_datasets.iris` を使い、アヤメの種類を分類するロジスティック回帰モデルを構築してください プロンプトを送信すると、タスクの実行計画が表示されます。内容を確認し、[承認して実行] を押下します。 タスクの実行計画 実行計画に従い、エージェントによる自律的なコード生成、実行が行われます。 自律的なコード生成、実行が行われる 2026年1月時点では、タスクの各段階の実行前にユーザーによる承認が必要となっています。都度、前のタスクの実行結果と生成されたコードをレビューし、[承認して実行] を押下します。 タスクの各段階でユーザーによる承認を行う すべてのタスクが完了すると、エージェントが実行したタスクのサマリーが出力されます。 実行結果のサマリーが出力される なお、今回は出力が英語になってしまったので、プロンプトで指示を与えて日本語に翻訳します。 タスクのサマリーを日本語に翻訳したもの 構築したモデルの評価のため、混同行列を用いた可視化を指示してみます。以下のプロンプトを送信します。 構築したモデルに対して、混同行列を作成して モデル評価のための可視化をプロンプトで指示する 別の分類アルゴリズムでモデルを作成し、最初のモデルと比較してみます。以下のプロンプトを送信します。 ランダムフォレストを使用したモデルを構築し、最初のモデルと性能を比較してください。 エージェントによって新たなタスクの計画、実行がされ、サマリーとして以下の出力が得られました。今回の検証では、ランダムフォレストを使用するモデルよりも、最初に構築したロジスティック回帰モデルのほうが良い成績を出しているようです。 新旧モデルの性能比較を含むサマリー出力 このように、データサイエンスエージェントを使用することで、コード生成における Vibe Coding のように、自然言語によるデータ分析を行うことができます。 佐々木 駿太 (記事一覧) G-gen 最北端、北海道在住のクラウドソリューション部エンジニア 2022年6月に G-gen にジョイン。Google Cloud Partner Top Engineer に選出(2024 / 2025 Fellow / 2026)。好きな Google Cloud プロダクトは Cloud Run。 趣味はコーヒー、小説(SF、ミステリ)、カラオケなど。 Follow @sasashun0805
アバター
G-gen の武井です。当記事では Google SecOps に AWS の VPC Flow Logs を取り込む方法について解説します。 はじめに Google SecOps とは データフィードとは 設定の流れ AWS の設定 S3 バケット VPC VPC Flow Logs EC2 インスタンス IAM データフィードの設定 動作確認 関連記事 はじめに Google SecOps とは Google Security Operations (以下 Google SecOps、旧称 Chronicle)は、Google Cloud が提供する 統合セキュリティ運用プラットフォーム です。 SIEM、SOAR、脅威インテリジェンス、Gemini を利用した AI による運用支援を提供します。これらにより、脅威の検知・調査・対応を一元的に行えます。結果として、セキュリティ運用の効率化と高度化を実現できます。 参考: Google SecOps の概要 詳細は、以下の記事をご参照ください。 blog.g-gen.co.jp データフィードとは Google SecOps では、AWS、Azure、その他 SaaS など、Google Cloud 以外の環境のログデータを取り込む仕組みとして データフィード機能 があります。 SecOps UI もしくは Feed Management API を用いて、ログソース(Amazon S3、Cloud Storage、Pub/Sub、Webhook など)を指定し、各種ログを SecOps に取り込む設定を行います。 ソースタイプ 概要 ストレージ Google Cloud、AWS、Azure のクラウドストレージバケットに保存されたログデータを定期的に取得 Amazon SQS S3 バケットの通知をキュー経由で受信し、ログデータを取得(リアルタイムかつ安定的に取り込み) ストリーミング Amazon Data Firehose、Cloud Pub/Sub、Webhook などを経由し、SIEM の HTTPS エンドポイントにログデータをストリーミングでプッシュ サードパーティ API CrowdStrike、SentinelOne、Palo Alto など、外部 SaaS から API 経由でログデータを取得 参考: フィード管理の概要 設定の流れ 当記事では以下の構成のもと、S3 バケットに格納した VPC Flow Logs を、データフィード機能を使って Google SecOps に取り込みます。 大まかな設定手順は、以下のとおりです。 順序 設定項目 設定箇所 1 S3 バケットの設定 AWS 2 VPC および VPC Flow Logs の設定 AWS 3 EC2 インスタンスの設定 AWS 4 IAM の設定 AWS 5 データフィードの設定 Google SecOps 6 動作確認 Google SecOps 参考: AWS VPC Flow Logs を収集する AWS の設定 S3 バケット S3 バケットは以下の手順に従い作成します。 参考: 汎用バケットの作成 VPC VPC ならびにサブネット等の関連リソースは以下の手順に従い作成します。 参考: VPC と他の VPC リソースを作成する VPC Flow Logs S3 バケットを介して Google SecOps に VPC Flow Logs を取り込む場合、VPC Flow Logs の構成についてはいくつか指定の値があるため、公式ドキュメントに従い設定します。 # 設定項目 設定値 1 最大集計間隔 1分 (推奨) 2 ログレコードの形式 AWS のデフォルト形式 3 ログファイル形式 テキスト 設定後しばらくすると、以下のように VPC Flow Logs が連携されます。 今回の例では、 s3://secops-sandbox-ggen-vpc-flow-logs/AWSLogs/945008193730/vpcflowlogs/ap-northeast-1/ 配下にログが格納されたことを確認しました。 後述のデータフィード設定では、上記 S3 URI を指定して VPC Flow Logs を取り込みます。 参考: VPC Flow Logs を作成する(宛先: Amazon S3、テキスト形式) EC2 インスタンス EC2 インスタンスは以下の手順に従い作成します。 なお、EC2 インスタンスへの SSH や HTTPS アクセスログを生成させるため、特定の IP からのアクセスを許可するようセキュリティグループを設定しています。 参考: Amazon EC2 の使用を開始する IAM 後述のデータフィードで VPC Flow Logs を取り込むには、 アクセスキーとシークレットアクセスキー が必要です。 そのため、以下の公式ドキュメントに従い Google SecOps 用のマシンユーザー(AWS マネジメントコンソールへのユーザーアクセス不可)を作成してキーを発行します。 公式ドキュメントには、作成したマシンユーザーに AmazonS3FullAccess を付与する旨の記述がありますが、当記事では最小権限のカスタム IAM ポリシー(今回の例では secops-s3-acccess )を付与しています。 # secops - s3 - acccess { " Version ": " 2012-10-17 ", " Statement ": [ { " Sid ": " ListAllowedBuckets ", " Effect ": " Allow ", " Action ": " s3:ListBucket ", " Resource ": [ " arn:aws:s3:::secops-sandbox-ggen-vpc-flow-logs " ] } , { " Sid ": " ReadObjectsFromAllowedBuckets ", " Effect ": " Allow ", " Action ": " s3:GetObject ", " Resource ": [ " arn:aws:s3:::secops-sandbox-ggen-vpc-flow-logs/* " ] } ] } 参考: オプション 1: AWS S3 を使用して AWS VPC Flow Logs のエクスポートを構成する(テキスト形式) データフィードの設定 VPC フローログが格納された S3 バケットの URI やキー情報を用いて Google SecOps との連携を行い、ログの取り込みを行います。 その他にも、ログの種別や取り込み先環境を識別するために Ingestion Labels と Namespace も設定します。 設定が適切に完了すると、STATUS 列の値が Completed として表示され、LAST SUCCEDED ON 列には ログの最終取り込み日時(UTC) が表示されます。 参考: AWS VPC Flow Logs(S3 テキスト)を取り込むように Google SecOps でフィードを構成する 参考: Supported log types with a default parser 参考: アセットの名前空間を使用する 動作確認 AWS はデフォルトパーサーが用意されているため、Google SecOps にログが取り込まれると自動的に UDM イベントにパースされます。 SIEM Search (UDM 検索)メニューから以下のクエリを入力して実行すると、ログが取り込まれていることを確認できました。 metadata.log_type = "AWS_VPC_FLOW" その他にも、送信元の IP や宛先のポートをクエリに追加することで、EC2 インスタンスに HTTPS でアクセスした際のログも取り込まれていることが確認できました。 metadata.log_type = "AWS_VPC_FLOW" target.ip = "126.38.167.22" principal.port = 443 また、先ほどの画面右側にある Event Viewer を Event Fields(UDM)から Raw Log に切り替えると、パースされる前の生ログを確認することも可能です。 関連記事 blog.g-gen.co.jp blog.g-gen.co.jp 武井 祐介 (記事一覧) クラウドソリューション部クラウドエンジニアリング課。 Google Cloud Partner Top Engineer 2026 選出。 趣味はロードレースやサッカー観戦、ゴルフ、筋トレ。 Follow @ggenyutakei
アバター
G-gen の武井です。当記事では Workforce Identity 連携を構成し、Google Cloud にアクセスする方法を解説します。IdP として Okta を、連携方法として SAML 2.0 を選択したケースの手順を紹介します。 はじめに Workforce Identity 連携とは 設定の流れ ユーザーとグループの設定 Workforce Identity プールの作成 Okta アプリ統合の作成 概要 認証方式 SAML 設定 全体像 シングルサインオン URL オーディエンス URI デフォルトの​ RelayState グループ属性ステートメント Workforce Identity プロバイダの作成 IAM ポリシーの設定 動作確認 はじめに Workforce Identity 連携とは Workforce Identity 連携とは、 OIDC や SAML 2.0 に対応した IdP(Microsoft Entra ID や Okta 等)を利用するユーザーに、Google Cloud コンソールや Google Cloud リソースへのアクセスを提供する機能です。 外部 IdP 経由でシングル サインオン(SSO)を行い、Google Cloud コンソールにアクセスできるため、Google アカウントの作成は不要です。 この連携方法では、 Workforce Identity プール と プロバイダ というリソースを設定し、Google Cloud と外部 IdP との間の連携を実現して、必要な権限を付与します。 詳細は以下の公式ドキュメントをご確認ください。 参考: Workforce Identity の連携 設定の流れ 当記事では外部 IdP として Okta を用います。また、連携方式として SAML 2.0 を選択します。 大まかな設定手順は、以下のとおりです。 順序 設定項目 設定箇所 1 ユーザーとグループの設定 Okta 2 Workforce Identity プールの作成 Google Cloud 3 Okta アプリ統合の作成 Okta 4 Workforce Identity プロバイダの作成 Google Cloud 5 IAM ポリシーの設定 Google Cloud 6 動作確認 Okta / Google Cloud 参考: Okta との Workforce Identity 連携を構成してユーザー ログインを行う ユーザーとグループの設定 Okta のユーザーアカウントをグループに登録します。グループ名(今回の例では okta-google-cloud )は後ほどの属性マッピングで使用します。 手順については以下の公式ドキュメントをご確認ください。 参考: ユーザーの作成 参考: グループの作成 参考: ユーザーをグループに追加する Workforce Identity プールの作成 次に、Google Cloud 側で Workforce Identity プールを作成します。 プール ID(今回の例では okta-wif-pool )は後ほどアプリ統合や Workforce Identity プロバイダで使用します。 # コマンド例 gcloud iam workforce-pools create okta-wif-pool \ --organization = 1234567890 \ --display-name =" okta-wif-pool " \ --description =" OktaをIdpとしたGoogle Cloudログイン " \ --session-duration = 900s \ --location = global 参考: Workforce Identity プールを作成する 参考: gcloud iam workforce-pools create Okta アプリ統合の作成 概要 次に、Okta のユーザーアカウントで Google Cloud にアクセスするため、Okta アプリ統合を作成します。 本手順は Google Cloud 公式ドキュメントとしても用意がありますので、そちらに従い設定を行いつつ、重要な設定項目について補足します。 参考: Okta アプリ統合を作成する 認証方式 認証方式は SAML 2.0 を選択します。 SAML 設定 全体像 最終的に以下となるよう設定します。 シングルサインオン URL Workforce Identity プロバイダの ID を必要としますが、現時点ではまだ未設定です。今回の例では、 okta-wif-provider という ID で作成する前提で設定します。 https://auth.cloud.google/signin-callback/locations/global/workforcePools/okta-wif-pool/providers/okta-wif-provider オーディエンス URI 上記同様、Workforce Identity プロバイダ ID は okta-wif-provider とします。 https://iam.googleapis.com/locations/global/workforcePools/okta-wif-pool/providers/okta-wif-provider デフォルトの​ RelayState ログイン完了後の転送先のページにあたるため、 https://console.cloud.google.com/ とします。 参考: ログイン グループ属性ステートメント 今回の例では okta-google-cloud というグループのみを対象とするため、グループ名に対するフィルターは 等しい (=) とします。 Workforce Identity プロバイダの作成 次に、Google Cloud 側で Workforce Identity プロバイダを作成します。 作成した SAML アプリからメタデータを取得し、gcloud コマンド実行環境にファイル(今回の例では idp-metadata.xml )として配置します。 ファイル配置が完了したのち、以下のコマンドで Workforce Identity プロバイダを作成します。 # コマンド例 gcloud iam workforce-pools providers create-saml okta-wif-provider \ --display-name =" okta-wif-provider " \ --description =" OktaをIdpとしたGoogle Cloudログイン " \ --workforce-pool =" okta-wif-pool " \ --attribute-mapping =" google.subject=assertion.subject,google.groups=assertion.attributes.groups " \ --attribute-condition =" 'okta-google-cloud' in assertion.attributes.groups " \ --idp-metadata-path =" ./idp-metadata.xml " \ --detailed-audit-logging \ --location =" global " 実行後、Cloud コンソールから Workforce Identity プロバイダが作成されたこと(Workforce Identity プールに紐づいたこと)を確認します。 参考: SAML Workforce Identity プール プロバイダを作成する 参考: gcloud iam workforce-pools providers create-saml IAM ポリシーの設定 Google Cloud 側で、Workforce Identity に対して Google Cloud リソースへのアクセス件を付与します。 今回の例では、Workforce Identtity プロバイダーに紐づけた okta-google-cloud という Okta グループに対し、プロジェクトレベルで閲覧者ロール( roles/viewer )を付与します。 # コマンド例 gcloud projects add-iam-policy-binding sandbox-ggen \ --role =" roles/viewer " \ --member =" principalSet://iam.googleapis.com/locations/global/workforcePools/okta-wif-pool/group/okta-google-cloud " 参考: Google Cloud リソースへのアクセスを管理する 動作確認 以下のログインページから Google Cloud にアクセスできることを確認します。 https://auth.cloud.google/signin? continueUrl =https%3A%2F%2Fconsole.cloud.google%2F& hl =ja ログイン画面に遷移したらプロバイダ名を入力して次に進みます。今回の例では locations/global/workforcePools/okta-wif-pool/providers/okta-wif-provider と入力します。 Okta のユーザー名を入力して次に進みます。 認証方法を選択し次に進みます。 認証に成功すると、Cloud コンソールに遷移します。Workforce Identity に閲覧者ロールを付与しているため、Cloud Storage バケットの作成はできませんが、閲覧はできました。 参考: ログインしてアクセスをテストする 武井 祐介 (記事一覧) クラウドソリューション部クラウドエンジニアリング課。 Google Cloud Partner Top Engineer 2026 選出。 趣味はロードレースやサッカー観戦、ゴルフ、筋トレ。 Follow @ggenyutakei
アバター
G-gen の齊間です。Looker Studio で作成したレポートにおいて、閲覧ユーザーに応じて表示するデータを制御したい(出し分けたい)場合があります。当記事では、そのための主要な3つの方法と、それぞれの設定手順や注意点を解説します。 概要 手法1. メールアドレスでフィルタ 手法2. BigQuery で行レベルのアクセスポリシーを設定 概要 手順 行レベルのアクセスポリシー設定例 手法3. カスタムクエリでパラメータを使用 概要 手順 概要 Looker Studio で閲覧ユーザーごとに表示データを制御する方法として、主に以下の3つがあります。 メールアドレスでフィルタ BigQuery で行レベルのアクセスポリシーを設定 カスタムクエリでパラメータを使用 それぞれの方法について、設定方法と特徴を解説します。 手法1. メールアドレスでフィルタ データソースの設定にある「メールアドレスでフィルタ」機能を使用する方法です。詳細な手順は、以下の記事を参照してください。 blog.g-gen.co.jp この方法は、Looker Studio の標準機能だけで完結するため、最も簡単に設定できる点がメリットです。 一方で、1レコードにつき1つのメールアドレスしか制御に使用できない点がデメリットです。 例えば、レコード A を「ユーザー X」と「ユーザー Y」の両方に表示させたい場合、データソース側でレコード A を2行作成し、メールアドレスを格納するカラムにそれぞれのアドレスを登録する必要があります。 メールアドレスを格納しているカラムに複数アドレス登録している場合、表示されない 複数アドレスに閲覧させたい場合、メールアドレスごとにレコード作成する必要がある 複数ユーザーに同一レコードを表示させたい場合や、より柔軟な権限管理を行いたい場合は、後述する手法2または手法3を検討します。 手法2. BigQuery で行レベルのアクセスポリシーを設定 概要 データソースに BigQuery を使用している場合に利用できる方法です。BigQuery 側で CREATE ROW ACCESS POLICY 文を使用し、行レベルのアクセスポリシー(Row-Level Security)を設定します。 この機能では、許可対象として個人のメールアドレスだけでなく、 Google グループ も指定できます。 行レベルのアクセスポリシーについては、以下の記事を参照してください。 blog.g-gen.co.jp 手順 この方法を用いて、Looker Studio のログインユーザーに応じたデータ制御を行う手順は以下のとおりです。 1. カラムの作成 Looker Studio で参照する BigQuery テーブルに、閲覧を許可するメールアドレス(または Google グループ)を格納するカラムを作成します。このとき、1レコードに対して複数の閲覧許可ユーザーを設定する場合は、カラムのデータ型は STRING の配列(ARRAY ) とすることで、1レコードに対して複数データを登録できます。 STRING の配列(ARRAY<STRING>)の場合、1レコードに複数データ登録可能 BigQuery の STRING の配列( ARRAY<STRING> )については、以下の記事を参照してください。 blog.g-gen.co.jp 2. 行レベルのアクセスポリシーの設定 BigQuery の対象テーブルに対し、行レベルのアクセスポリシーを設定します。 CREATE ROW ACCESS POLICY 文で設定 3. Looker Studio データソースへの認証情報設定 Looker Studio のデータソース設定において、データの認証情報を 閲覧者の認証情報 に設定します。 オーナーの認証情報 のままでは、閲覧ユーザーごとの制御が効かないため、注意してください。 データソース編集画面にて、データの認証情報を「閲覧者」に設定 BigQuery テーブルの STRING の配列( ARRAY<STRING> )をLooker Studio レポートで参照する際は、カスタムクエリで ARRAY_TO_STRING 関数を利用し、配列を文字列に変換します。 STRING の配列を参照する場合、ARRAY_TO_STRING 関数で文字列に変換する 4. 動作確認 Looker Studio レポートにアクセスすると、BigQuery 側でポリシーが評価され、ログインユーザーに応じたデータのみが表示されます。 閲覧ユーザに応じて表示データが制御される 行レベルのアクセスポリシー設定例 例えば、売上テーブル( sales_table )に対し、閲覧許可リストのカラム( allowed_viewers / ARRAY 型)に含まれるユーザーだけに表示を許可する場合のクエリは以下のとおりです。 CREATE ROW ACCESS POLICY ap_sales_filter ON `my_project.my_dataset.sales_table` GRANT TO ( ' allAuthenticatedUsers ' ) FILTER USING ( SESSION_USER() IN UNNEST(allowed_viewers) ); GRANT TO 句には、ポリシーを適用する対象(権限を制限する対象)を指定します。Looker Studio を利用するすべてのユーザーに適用するため、ここでは allAuthenticatedUsers としています(特定のグループやドメインに限定することも可能です)。 FILTER USING 句には、閲覧を許可する条件(True になる条件)を記述します。 SESSION_USER() : クエリを実行している(レポートを閲覧している)ユーザーのメールアドレスを取得します。 IN UNNEST(...) : 配列カラムを展開し、その中にユーザーのメールアドレスが含まれているかを完全一致で判定します。 LIKE 演算子などを用いた文字列の部分一致による判定は、意図しないユーザーへの権限付与につながるリスクがあるため、上記のような完全一致による判定を推奨します。 参考 : 行レベルのセキュリティの概要 手法3. カスタムクエリでパラメータを使用 概要 こちらもデータソースに BigQuery を使用している場合に可能な方法です。 データソース設定のカスタムクエリ内で、閲覧ユーザーのメールアドレスをパラメータとして動的に指定します。 参考 : カスタムクエリでパラメータを使用する 手順 手順は以下のとおりです。 1. カスタムクエリの定義 Looker Studio のデータソース設定で、カスタムクエリを定義します。 パラメータ設定で「閲覧者のメールアドレスパラメータ」を有効化 カスタムクエリの WHERE 句で、閲覧者のメールアドレスパラメータ( @DS_USER_EMAIL )を使用した条件を記述 @DS_USER_EMAIL をWHERE句で指定する 2. 動作確認 Looker Studio レポートにアクセスすると、パラメータにログインユーザーのメールアドレスが渡され、それに応じたクエリ結果が表示されます。 閲覧ユーザに応じて表示データが制御される 齊間 陽史 (記事一覧) 開発部プロジェクトマネジメント課 狩猟免許を持つ ハンター兼 IT エンジニア。2025年7月より、G-genにジョイン。前職は SIerで DX化案件を数多く担当。平日はデジタルの世界で、休日は山で奮闘中。
アバター
G-gen の杉村です。当記事では、Google の生成 AI サービスである Gemini アプリ や Gemini Enterprise 、 NotebookLM 、 Gemini for Google Workspace 、 Vertex AI などについて、それぞれの違いや使い分けなど、組織へ導入する際の検討に役立つ情報を解説します。 はじめに サービス全体像 当記事で紹介する AI サービス 概要図 比較表 AI 機能別比較表 管理機能別比較表 Gemini Enterprise Gemini Enterprise とは 関連記事 Gemini Enterprise と Gemini アプリの違い Gemini アプリ Gemini アプリとは 関連記事 個人向け・無償版 個人向け・有償版 Google Workspace 付属版 NotebookLM NotebookLM とは 関連記事 NotebookLM と Gemini アプリの違い 個人向け・無償版 個人向け・有償版 Google Workspace 付属版(Notebook LM in Pro) NotebookLM Enterprise Gemini for Google Workspace Vertex AI Vertex AI とは Google AI Studio との比較 企業従業員向けの Vertex AI はじめに Google の生成 AI サービスは、急速な進化とともに名称変更や新サービスの追加が行われており、全体像を把握するのが難しくなっています。 「 Gemini 」という言葉は、Google の 生成 AI のブランド名 です。同時に、AI モデルの名称(Gemini 3 Pro 等)としても、サービス名称(Gemini アプリ、Gemini for Google Workspace)としても使われており、混同しやすいポイントです。 当記事では、企業における導入検討の視点から、これらのサービスを整理・比較します。特に、データの保護(AI の学習に利用されるか否か)やアカウント管理(会社が管理できるか否か)の観点も含めて考察します。 Gemini はブランド名 当記事は、Google の生成 AI サービスを導入することを検討している方や、また Gemini アプリ、Gemini Enterprise、NotebookLM 等の違いを知りたい方、それらのデータの取り扱い(データがモデルの再学習に使われるか等)を知りたい方向けの情報を記載します。 サービス全体像 当記事で紹介する AI サービス 当記事では、企業向けの生成 AI サービスという観点で、以下の Google の生成 AI サービスを中心に紹介します。 Gemini Enterprise (対話型 AI エージェントプラットフォーム) Gemini アプリ (対話型 AI サービス) NotebookLM (AI ノートブック) Gemini for Google Workspace (Google Workspace の生成 AI 機能) Vertex AI (開発者向けプラットフォーム) また Gemini アプリと NotebookLM には、個人向けや Google Workspace 付属版などいくつかのバリエーションがあるため、それらの違いも紹介します。 概要図 前述のサービス一覧を、プランの違い(無償版、有償版、Google Workspace 付属版等)も考慮に入れて図で表現すると、以下のようになります。 プロダクト概要図 上図の「 データ保護あり 」とは、ここでは入出力データが Google によってモデルの再トレーニング等に使用されないことを指します。Google はこれを エンタープライズグレードのデータ保護 と呼称しています。 参考 : Google Workspace の生成 AI に関するプライバシー ハブ 参考 : Google Workspace with Gemini に関するよくある質問 - Business / Enterprise また上図の「 組織によるアカウント管理が可能 」とは、管理者によりユーザーアカウントが管理できることを指します。利用状況をある程度把握したり、アカウントが侵害されたときにはアカウントを停止したり、また組織部門ごとにサービスの使用を禁止したり、許可したりできます。 比較表 AI 機能別比較表 各プロダクトの、AI 関連機能の観点での比較表は以下のとおりです。 プロダクト名 チャット 画像・動画生成 GWS ファイル読込 ノーコードエージェント フルコードエージェント Deep Research BigQuery 問い合わせ 外部 IdP 統合 Gemini Enterprise ◯ ◯ ◯ ◯ ◯ ◯ ◯ ◯ Gemini アプリ ◯ ◯ ◯ ◯ (※1) ◯ NotebookLM ◯ ◯ (※2) ◯ (※3) NotebookLM Enterprise ◯ ◯ ◯ ◯ Gemini for Google Workspace ◯ ◯ ◯ Vertex AI 要開発 同左 同左 同左 同左 同左 同左 同左 ※1 - Gems と呼ばれる簡易的なノーコードエージェント ※2 - スライド、解説動画等 ※3 - データソースをインターネットから検索する機能名として Deep Research が存在 実際には微妙な機能の違いや、無償版と有償版での制限の違い等がありますが、上の表では簡潔に表現するために省略しています。詳細は後述します。 なお上の表の各列の機能の説明は、以下のとおりです。 機能名 概要 チャット 生成 AI とテキストベースのチャットを行う機能 画像・動画生成 画像や動画の生成機能 GWS ファイル読込 Google ドライブ、ドキュメント、スライドなどを読み込ませて背景情報として扱う機能 ノーコードエージェント コーディングなしで簡単に AI エージェントを構築する機能 フルコードエージェント 独自開発した AI エージェントを統合する機能 Deep Research 詳細な調査をもとにリッチなレポートを生成する機能 BigQuery 問い合わせ BigQuery に自然言語で問い合わせをする機能 外部 IdP 統合 Entra ID など外部の IdP の ID でログインする機能 管理機能別比較表 次に、各プロダクトを、提供形態、データ保護の有無、アカウント管理の可否の観点での比較表にまとめました。企業として生成 AI を導入する際は、リスクを排除するため、「データ保護あり」 かつ 「企業によるアカウント管理が可能」 なプロダクトを選択することが望ましいです。 なお、表内の GWS とは Google Workspace の略称です。 プロダクト名 提供形態 対象ユーザー データ保護 アカウント管理 Gemini Enterprise Google Cloud 組織 ◯ ◯ Gemini アプリ (個人向け・無償版) 個人アカウント 個人 Gemini アプリ (個人向け・有償版) 個人アカウント (月額サブスク) 個人 ◯ Gemini アプリ (GWS 付属版) GWS に付属 組織 ◯ ◯ NotebookLM (個人向け・無償版) 個人アカウント 個人 NotebookLM (個人向け・有償版) 個人アカウント (月額サブスク) 個人 ◯ NotebookLM in Pro (GWS 付属版) GWS に付属 組織 ◯ ◯ NotebookLM Enterprise Google Cloud 組織 ◯ ◯ Gemini for Google Workspace GWS に付属 組織 ◯ ◯ Vertex AI Google Cloud 組織 ◯ ◯ Gemini Enterprise Gemini Enterprise とは Gemini Enterprise とは、ブラウザ上で生成 AI とチャットができる Web サービスです。ノーコードエージェントを自然言語だけで構築したり、組織が独自に開発した AI エージェントを統合して呼び出すことで、AI エージェントのプラットフォームとして使用できます。Nano Banana や Veo と呼ばれる生成モデルを用いた動画・画像の生成や、ファイルを読み込ませてのタスク実行、BigQuery への自然言語問い合わせを実現する機能など、組織向けの豊富な機能が備わっています。 Gemini Enterprise のトップ画面 ノーコードエージェント編集画面 また、Microsoft Entra ID など外部 IdP とも統合できるため、Google Workspace を使っていなくても、組織に Gemini Enterprise を導入することができます。Gemini Enterprise は Google Cloud 上で管理されるため、Google Cloud プロジェクトが必須です。 Gemini Enterprise の最大の特徴は、Microsoft SharePoint や Slack などのサードパーティデータソースを接続できる点です。これらの外部データソースに横断検索を実行し、それを AI に読み込ませて、質問に対する回答の生成や要約、レポートの作成など、様々なタスクを実行できます。 AI 機能 チャット 画像・動画生成 GWS ファイル読込 ノーコードエージェント フルコードエージェント Deep Research BigQuery 問い合わせ 外部 IdP 統合 ◯ ◯ ◯ ◯ ◯ ◯ ◯ ◯ 管理機能 提供形態 対象ユーザー データ保護 アカウント管理 Google Cloud 組織 ◯ ◯ 関連記事 以下の記事では、機能や料金など、Gemini Enterprise を詳細に解説しています。 blog.g-gen.co.jp Gemini Enterprise と Gemini アプリの違い Gemini Enterprise は、後述する Gemini アプリとも多くの機能が共通しています。Gemini Enterprise と Gemini アプリには、以下のような違いがあります。 項目 Gemini アプリ Gemini Enterprise 認証 Google アカウント Google アカウントのほか Entra ID 等外部 IdP データソース ファイルアップロードや Google Workspace ファイル 左記に加えて Microsoft SharePoint、Jira などのサードパーティ エージェント機能 簡易的なノーコードエージェントである Gems ノーコードエージェントや組織が独自に開発したフルコードエージェントを統合可能 料金 Google Workspace 等のサブスクリプションに含まれる(追加料金なし) ユーザーごとのライセンス料金 セキュリティ Google Workspace 等と統合 VPC Service Controls、CMEK、IAM 等、Google Cloud と統合されたセキュリティ Gemini Enterprise は、セキュリティ・統制機能が強化されているほか、サードパーティのデータソースと統合できるため、より組織向けの使用が想定されているプロダクトであるといえます。 Gemini アプリ Gemini アプリとは Gemini アプリ (英名 Gemini Apps)は、ブラウザ上で生成 AI とチャットができる Web サービスです。質問への回答、文章の要約、アイデア出し、コーディング、汎用的な用途に使用できます。また、Nano Banana や Veo を用いた画像や動画の生成も行わせることができます。 Gemini アプリは、Google アカウントにログインした状態で以下の URL にアクセスするだけで使用できます。 https://gemini.google.com/ Gemini アプリでは、利用するプランによって、データ保護のレベルや管理機能が大きく異なります。また、機能の利用回数制限なども、無償版に比べて有償版や Google Workspace 付属版のほうが大きく設定されています。 AI 機能 チャット 画像・動画生成 GWS ファイル読込 ノーコードエージェント フルコードエージェント Deep Research BigQuery 問い合わせ 外部 IdP 統合 ◯ ◯ ◯ ◯ (※1) ◯ ※1 - Gems と呼ばれる簡易的なノーコードエージェント チャット画面 スライドの生成 関連記事 Gemini アプリの利用方法や関連記事については、以下のカテゴリページを参照してください。 blog.g-gen.co.jp 個人向け・無償版 個人向け・無償版の Gemini アプリ は、Google アカウント( @gmail.com 等)があれば誰でも無料で利用できます。 ただし無償版では、動画生成ができないほか、画像生成や Deep Research などの実行可能回数や、コンテキストサイズ(背景情報として AI に与えられる情報量)などに制限が加わっています。 無償版では、入力したデータや出力されたコンテンツが Google によってモデルの再トレーニングやサービス改善に使われたり、人間のレビュワーに閲覧される場合があります。 管理機能 提供形態 対象ユーザー データ保護 アカウント管理 個人アカウント 個人 個人向け・有償版 個人向け・有償版の Gemini アプリ は、Google AI Pro 等の個人向けの有償サブスクリプションに付属しています。有償版の Gemini アプリでは、データが保護されます。しかし、組織でアカウントを管理することはできません。 管理機能 提供形態 対象ユーザー データ保護 アカウント管理 個人アカウント (月額サブスク) 個人 ◯ Google Workspace 付属版 Gemini アプリは、 Google Workspace に付属 しています。 この Gemini アプリを含め、Google Workspace に付属する AI 関連機能には、データ保護( エンタープライズグレードのデータ保護 )が適用されます。入出力データがモデルのトレーニング等に使用されることはありません。また、アカウント管理機能があるため、利用実態を確認したり、アカウントの停止、個別のサービスへのアクセス許可/禁止を制御できます。 Google Workspace 付属版の Gemini アプリでは、Google ドライブや Google ドキュメント、Google スライド等のファイルを読み込んでコンテキストとして使用することができます。データ保護のもとで、業務データを Gemini に読み込ませて、様々なタスクを行わせることができます。 企業で Gemiin アプリを利用する場合は、統制や機密情報保護等の観点で、Google Workspace アカウント(組織管理下のアカウント) での利用が強く推奨されます。 管理機能 提供形態 対象ユーザー データ保護 アカウント管理 Google Workspace 付属 組織 ◯ ◯ NotebookLM NotebookLM とは NotebookLM は、ユーザーがアップロードしたドキュメント(PDF、Google ドキュメント、Google スライド、テキスト等)に基づいて、AI が回答や要約、スライド作成、解説動画の生成などを行う「AI ノートブック」サービスです。 独自のデータソースに基づいて AI がタスクを行うため、正確な回答が得られやすく、また社内規程の検索や大量の資料の分析、資料の作成などに適しています。 NotebookLM は、Google アカウントにログインした状態で以下の URL にアクセスするだけで使用できます。 https://notebooklm.google.com/ AI 機能 チャット 画像・動画生成 GWS ファイル読込 ノーコードエージェント フルコードエージェント Deep Research BigQuery 問い合わせ 外部 IdP 統合 ◯ ◯ (※2) ◯ (※3) ◯ (※4) ※2 - スライド、解説動画等 ※3 - データソースをインターネットから検索する機能名として Deep Research が存在 ※4 - NotebookLM Enterprise のみ トップ画面 関連記事 NotebookLM の利用方法や関連記事については、以下のカテゴリページも参照してください。 blog.g-gen.co.jp NotebookLM と Gemini アプリの違い NotebookLM と Gemini アプリはどちらも生成 AI モデル Gemini を使用したウェブサービスですが、データ参照範囲や用途に違いがあります。NotebookLM は、指定したデータソース(ファイルや Web サイト)をソースとして固定し、それに基づいた AI タスクを実行します。一方で Gemini アプリは、インターネット上の知識を含めたより広範で汎用的なタスクを実行します。NotebookLM は、データを固定したより狭い範囲の用途に使われる一方、Gemini アプリはアイデア創出や形式が自由な企画支援、コーディングなど、より広い範囲のタスクに対応しています。 NotebookLM と Gemini アプリの違いについては、以下の記事も参照してください。 blog.g-gen.co.jp 個人向け・無償版 個人向け・無償版の NotebookLM は、Google アカウント( @gmail.com 等)があれば誰でも無料で利用できます。 しかし、入力したデータや出力されたコンテンツは、Google によってモデルの再トレーニングやサービス改善に使われたり、人間のレビュワーに閲覧される場合があります。 管理機能 提供形態 対象ユーザー データ保護 アカウント管理 個人アカウント 個人 個人向け・有償版 Google AI Pro 等の個人向けの有償サブスクリプションに付属する 個人向け・有償版の NotebookLM では、データが保護されます。しかし、組織でアカウントを管理することはできません。 管理機能 提供形態 対象ユーザー データ保護 アカウント管理 個人アカウント (月額サブスク) 個人 ◯ Google Workspace 付属版(Notebook LM in Pro) NotebookLM は、 Google Workspace に付属 しています。この Google Workspace 付属版の NotebookLM は、 NotebookLM in Pro と呼称される場合もあります。 データ保護が提供されるため、入出力データがモデルのトレーニング等に使用されることはありません。また、アカウント管理機能も提供されます。 Gemini アプリと同じく、Google Workspace 付属版の NotebookLM では、Google ドライブや Google ドキュメント等を読み込んでコンテキストとして使用して様々なタスクを AI に行わせることができます。 企業で NotebookLM を利用する場合は、統制や機密情報保護等の観点で、この NotebookLM in Pro を使用するか、後続の NotebookLM Enterprise を使用することが推奨されます。 管理機能 提供形態 対象ユーザー データ保護 アカウント管理 Google Workspace 付属 組織 ◯ ◯ NotebookLM Enterprise NotebookLM Enterprise は、Google Cloud 環境上で管理される企業向け NotebookLM です。同じく企業向けである NotebookLM in Pro(Google Workspace 付属版)との大きな違いは、Entra ID 等の 外部 ID でログインできる 点です。そのため、NotebookLM Enterprise の利用にあたっては Google Workspace は必須ではありません。 NotebookLM Enterprise は、VPC Service Controls や CMEK など、Google Cloud の高度なセキュリティ・統制機能に対応しています。 ここまで、NotebookLM には、大きく分けて「NotebookLM(個人向け)」「NotebookLM in Pro(Google Workspace 付属版)」「Notebook Enterprise」の3種類があることを紹介しました。これらの比較については、以下の記事で詳細に解説しています。 blog.g-gen.co.jp 管理機能 提供形態 対象ユーザー データ保護 アカウント管理 Google Cloud 組織 ◯ ◯ Gemini for Google Workspace Gemini for Google Workspace は、Gmail、Google ドライブ、ドキュメント、スプレッドシート、スライドなどの Google Workspace アプリケーション内に組み込まれた生成 AI 機能の総称です。 各 Google Workspace アプリの中に様々な AI 機能が組み込まれているほか、サイドパネルと呼ばれるチャット画面から、表示中のメールやファイルの要約、返信の作成、スライドの画像生成などを指示できます。 なお公式ドキュメントの中では「Gemini in Google Workspace」という呼称が使われたり、Google Workspace が AI とネイティブに統合されていることを表して Google Workspace with Gemini という呼び名が使われることもあります。 AI 機能 チャット 画像・動画生成 GWS ファイル読込 ノーコードエージェント フルコードエージェント Deep Research BigQuery 問い合わせ 外部 IdP 統合 ◯ ◯ ◯ 管理機能 提供形態 対象ユーザー データ保護 アカウント管理 Google Workspace 付属 組織 ◯ ◯ Gemini による文章の校正 Gemini によるドキュメントの概要説明 Vertex AI Vertex AI とは Vertex AI は、Google Cloud 上で提供される開発者向けの AI プラットフォームです。 Gemini アプリや NotebookLM が「完成された SaaS(Software as a Service)」であるのに対し、Vertex AI は「自社アプリに AI を組み込むための PaaS(Platform as a Service)」や「API」です。 Vertex AI API 経由で、Gemini 3 Pro や Gemini 2.5 Flash などの生成 AI モデルを呼び出せるほか、学習データを用意することで独自モデルをトレーニングしたり、機械学習用のインフラ(GPU、TPU 等)を準備したり、機械学習パイプラインを構築することができます。 Vertex AI ブランドの中には、自社データに対するセマンティック検索や RAG を構築するためのプロダクトである Vertex AI Search など、多くの派生プロダクトも存在します。 AI 機能 チャット 画像・動画生成 GWS ファイル読込 ノーコードエージェント フルコードエージェント Deep Research BigQuery 問い合わせ 外部 IdP 統合 要開発 同左 同左 同左 同左 同左 同左 同左 管理機能 提供形態 対象ユーザー データ保護 アカウント管理 Google Cloud 組織 ◯ ◯ Vertex AI Search の実装例 Google AI Studio との比較 Gemini モデルを API 経由で呼び出すためのサービスとして、Vertex AI の他にも Google AI Studio が存在します。 Google AI Studio は Google Cloud プロダクトではなく Google サービスであり、個人開発者やプロトタイプ向けです。Google AI Studio と Vertex AI の違いについては以下も参照してください。 blog.g-gen.co.jp 企業従業員向けの Vertex AI よくある質問として、「Google Workspace のライセンスを購入せず、Vertex AI を使えば金銭コストが安価に済むのではないか?」 というものがあります。 結論から言うと、Vertex AI は一般社員向けの利用には適していません。理由は以下のとおりです。 概要 説明 UI(画面)がない Vertex AI は API やプラットフォームであり、チャット画面などのユーザーインターフェース(フロントエンド)は提供されない。利用するには、自社でチャットアプリを開発・運用する必要がある。ただし、開発者向けのプレイグラウンドとして Vertex AI Studio と呼ばれる簡易的な UI は用意されている。 開発・運用コスト アプリの開発工数やメンテナンス工数が発生する。AI モデルのアップデートに従い、古いモデルは廃止されていくため、アプリも更新する必要がある。 連携機能 Google ドキュメントや Gmail とのシームレスな連携(サイドパネル等)は、Vertex AI 単体では実現できない(独自実装が必要)。 したがって、全社員がすぐに使えるチャットツールや業務効率化ツールとしては Gemini Enterprise や Gemini for Google Workspace、Gemini アプリ(Google Workspace 付属版)、NotebookLM(in Pro / Enterprise) が適しています。一方で、自社独自の業務アプリや顧客向けサービスを開発する際に Vertex AI を選択するのが適切な使い分けです。 杉村 勇馬 (記事一覧) 執行役員 CTO 元警察官という経歴を持つ IT エンジニア。クラウド管理・運用やネットワークに知見。AWS 認定資格および Google Cloud 認定資格はすべて取得。X(旧 Twitter)では Google Cloud や Google Workspace のアップデート情報をつぶやいています。 Follow @y_sugi_it
アバター
G-gen の杉村です。Google Cloud や Google Workspace の、2025年12月に発表されたイチオシアップデートをまとめてご紹介します。記載は全て、記事公開当時のものですのでご留意ください。 はじめに Google Cloud のアップデート Cloud Run コンソールで GitHub、GitLab、Bitbucket からの継続的デプロイ BigQuery に自動エンベディング生成が登場(Preview) Looker の Explore アクションメニューに Connected Sheets オプション Looker に Self-service Explore 機能が登場(Preview) A2A エージェントが Google Cloud Marketplace で購入可能に(Preview) カスタムエージェント(ADK、A2A、Dialogflow)の権限設定が可能に Dataplex Universal Catalog で自然言語検索が一般公開(GA) Compute Engine に VM Extension Manager が登場(Preview) 動画生成モデル Veo 3.1 で動画の拡張(続きを生成する)機能が Preview 公開 BigQuery remote MCP Server が Preview 公開 Google Cloud 公式 remote MCP Server が複数公開 新サービス「Cloud API Registry」が Preview 公開 Looker Studio Pro で Slack へのスケジュール配信機能が Preview → GA Cloud SQL for SQL Server で Entra ID との統合が可能に(Preview) Security Command Center - AI Protection が Premium tier で使用可能に Vertex AI Agent Engine で Sessions と Memory Bank が一般公開(GA) Cloud SQL で Enhanced backups(拡張バックアップ)が使用可能に BigQuery Data Transfer Service で Oracle からの転送が一般公開(GA) Gemini 3 Flash が Preview 公開 複数データベースサービスで「データエージェント」が Private Preview 開始 AlloyDB for PostgreSQL で Managed connection pooling が一般公開(GA) 古い Gemini モデルの廃止予告 BigQuery DTS で BigLake Iceberg tables へデータ転送が可能に(Preview) BigQuery Data Transfer Service の転送元として SQL Server が追加 GKE の Standard クラスタで Autopilot 機能が利用可能に Gemini Enterprise でノーコードエージェントのスケジュール実行が可能に Vertex AI の Agent Designer で AI エージェントの試験的構築が可能に Google Workspace のアップデート Gmail のメールを Google Chat に共有可能に Flows が Google Workspace Studio として一般公開 Google Meet で組織外ユーザーをライブストリーミングに招待できるように NotebookLM で docx ファイルをソースとして追加可能に Google Chat の URL が変更 Google Chat でメッセージのスケジュール送信が可能に Google Chat で RSS フィードと Atom フィードを購読できるように Google Meet で全画面共有のときもデバイス音声が共有されるように Gemini アプリで Gemini 3 Flash が使用可能に はじめに 当記事では、毎月の Google Cloud(旧称 GCP)や Google Workspace(旧称 GSuite)のアップデートのうち、特に重要なものをまとめます。 また当記事は、Google Cloud に関するある程度の知識を前提に記載されています。前提知識を得るには、ぜひ以下の記事もご参照ください。 blog.g-gen.co.jp リンク先の公式ガイドは、英語版で表示しないと最新情報が反映されていない場合がありますためご注意ください。 Google Cloud のアップデート Cloud Run コンソールで GitHub、GitLab、Bitbucket からの継続的デプロイ Continuously deploy from a repository (2025-12-01) Cloud Run コンソールに GitHub、GitLab、Bitbucket からの継続的デプロイ設定機能が登場(Preview)。 特定ブランチへの Push をトリガにして Cloud Build が起動して自動的にビルドとデプロイが行われる。 BigQuery に自動エンベディング生成が登場(Preview) Autonomous embedding generation (2025-12-02) BigQuery に自動エンベディング生成が登場(Preview)。 テーブルの特定列をベクトル化した列を生成して常時最新化。セマンティック検索や RAG に利用できる。パイプライン管理の工数やリードタイムが不要になり管理が簡素化できる。 Gemini 3 Pro Image(Nano Banana Pro)による解説画像 Looker の Explore アクションメニューに Connected Sheets オプション Connected Sheets quick link (2025-12-02) Looker の Explore アクションメニューに Connected Sheets オプションが登場(Preview)。 Google スプレッドシートと Looker Explore の接続をクイックにできる。 Looker に Self-service Explore 機能が登場(Preview) Creating self-service Explores (2025-12-03) Looker に Self-service Explore 機能が登場(Preview)。 CSV、XLS、XLSX ファイルをアップロードすると LookML を記述しなくてもクエリ・可視化できる。ユーザー主体の簡易的なデータ可視化・分析がクイックにできるようになる。 A2A エージェントが Google Cloud Marketplace で購入可能に(Preview) Add and manage A2A agents from Google Cloud Marketplace (2025-12-05) Gemini Enterprise で A2A プロトコルを使うエージェントが Google Cloud Marketplace で購入可能に(Preview)。 管理者がマーケットプレイスでエージェントを購入して Gemini Enterprise アプリに追加することで、ユーザーが使用可能になる。 カスタムエージェント(ADK、A2A、Dialogflow)の権限設定が可能に Share custom agents (2025-12-08) Gemini Enterprise でカスタムエージェント(Vertex AI Agent Engine - ADK エージェント、A2A エージェント、Dialogflow エージェント、Google Cloud Marketplace で購入したエージェント)の権限設定が可能になった。 これで、エージェントを使用可能なユーザーを制限できるようになる。ユーザー、グループ、Workforce identity pool、All users に対して権限付与が可能。 Dataplex Universal Catalog で自然言語検索が一般公開(GA) Search for resources in Dataplex Universal Catalog (2025-12-08) Dataplex Universal Catalog(旧 Dataplex Catalog)で自然言語検索が Preview → 一般公開(GA)。 BigQueryやCloud Storageなどのアセットを自然言語でセマンティック検索できる。通常のキーワード検索と切り替えて使用可能。 Compute Engine に VM Extension Manager が登場(Preview) About VM Extension Manager (2025-12-08) Compute Engine に VM Extension Manager が登場(Preview)。 Ops Agent 等の VM 用エージェントをログイン不要で一括インストール。ポリシー定義により条件に一致した VM 群にのみ適用できる。 動画生成モデル Veo 3.1 で動画の拡張(続きを生成する)機能が Preview 公開 Extend Veo on Vertex AI-generated videos (2025-12-08) 動画生成モデル Veo 3.1 で動画の拡張(続きを生成する)機能が Preview 公開。 動画の最後のフレームをもとに1〜30秒の続きを生成できる。 BigQuery remote MCP Server が Preview 公開 Use the BigQuery remote MCP server (2025-12-10) BigQuery remote MCP Server が Preview 公開。 AI を介してデータの読み書きが自然言語で実行できる。Google がホストして HTTPS エンドポイントとして公開するリモート MCP server なので、ローカルへのセットアップが不要。 BigQuery remote MCP Server Google Cloud 公式 remote MCP Server が複数公開 Announcing Model Context Protocol (MCP) support for Google services (2025-12-11) BigQuery 以外にも、以下の remote MCP server が公開された。 Google Maps : Google Maps に対するグラウンディング Google Compute Engine : 運用自動化 Google Kubernetes Engine : 運用自動化 さらに関連して、Apigee が remote MCP server サポートを開始。既存 API を MCP server としてホストできる。 参考 : Announcing MCP support in Apigee: Turn existing APIs into secure and governed agentic tools 新サービス「Cloud API Registry」が Preview 公開 Cloud API Registry overview (2025-12-10) Google Cloud が新サービス「Cloud API Registry」を Preview 公開。組織内で MCP server を管理・検索しやすくするための中央レジストリ。以下の MCP server を管理、監視、検索できる。 Google Cloud 公式の Remote MCP server(BigQuery等) Apigee API hub で公開される組織の独自 MCP server Cloud API Registry Looker Studio Pro で Slack へのスケジュール配信機能が Preview → GA Share and schedule reports with Slack (2025-12-11) Looker Studio Pro で Slack へのレポート共有のスケジュール送信機能が Preview → GA。 Looker Studio Pro ではこういった生成 AI 機能のほか、様々なレポート管理機能や自然言語でのデータソースへのクエリ機能などが $9/user/月で利用可能。 blog.g-gen.co.jp Cloud SQL for SQL Server で Entra ID との統合が可能に(Preview) Integration with Microsoft Entra ID (2025-12-11) Cloud SQL for SQL Server で Microsoft Entra ID との統合が可能に(Preview)。 アプリケーションから SQL Server に Entra ID の認証情報で認証できる。ユーザー管理・ID・パスワードが不要になる。Cloud SQLからEntra IDのパブリック認証エンドポイントに通信。 Security Command Center - AI Protection が Premium tier で使用可能に AI Protection overview (2025-12-12) Security Command Center - AI Protection が Premium tier で使用可能になった(Preview)。Google Cloud 組織内の生成 AI ワークロードの可視化と脅威検知。 Enterprise(最上位)ティア : Preview → 一般公開(GA) Premium ティア : 使用不可 → Preview Vertex AI Agent Engine で Sessions と Memory Bank が一般公開(GA) Vertex AI release notes - December 16, 2025 (2025-12-16) フルマネージドなAIエージェントプラットフォーム Vertex AI Agent Engine で、Sessions 機能と Memory Bank 機能が Preview → 一般公開(GA)。ユーザーとエージェントの間の履歴を保持してパーソナライズや履歴管理。 Sessions : セッション履歴管理 Memory Bank : 長期メモリ Cloud SQL で Enhanced backups(拡張バックアップ)が使用可能に Choose your backup option - Enhanced backups (2025-12-16) Cloud SQL で Enhanced backups(拡張バックアップ)が使用可能に。 Backup and DR サービスを使って中央プロジェクトにバックアップを保持。バックアップボールトに最大10年間、保持可能。 BigQuery Data Transfer Service で Oracle からの転送が一般公開(GA) Load Oracle data into BigQuery (2025-12-16) BigQuery Data Transfer Service で Oracle からのデータ転送が Preview → 一般公開(GA)。 Oracle データベースから BigQuery へのデータ転送がフルマネージドで可能。ネットワークアタッチメント経由でプライベート接続も実現できる。 Gemini 3 Flash が Preview 公開 Gemini 3 Flash: frontier intelligence built for speed (2025-12-17) Gemini 3 Flash が登場(Preview)。Gemini 3 Pro よりも軽量、低コスト、低遅延。 以下で利用可能。 API 経由 Vertex AI Google AI Studio Gemini CLI Google Antigravity アプリ経由 Gemini アプリ Gemini Enterprise 複数データベースサービスで「データエージェント」が Private Preview 開始 Data agents overview (2025-12-17) Google Cloud の 複数データベースサービスで「データエージェント」が Private Preview 開始。使用には申請が必要。 アプリから所定の JSON 形式で自然言語による質問を投入すると、DB 側で SQL が自動生成されて結果を返答。Cloud SQL(for PostgreSQL/MySQL)、AlloyDB、Spanner で使用可能。 データエージェント AlloyDB for PostgreSQL で Managed connection pooling が一般公開(GA) AlloyDB for PostgreSQL で Managed connection pooling が Preview から一般公開(GA)に。 データベースクライアントとのコネクションがプールの中から動的に割り当てられ、リソース効率とレイテンシが最適化。 Managed connection pooling(AlloyDB for PostgreSQL) 古い Gemini モデルの廃止予告 Model versions and lifecycle (2025-12-18) 以下のモデルは、廃止期限が近づいている。 gemini-2.0-flash-001 : 2026-03-03 に廃止 gemini-2.0-flash-lite-001 : 2026-03-03 に廃止 gemini-2.5-flash-preview-09-25 : 2026-01-15 に廃止 これらのモデルは、Gemini 2.5 Flash、Gemini 2.5 Flash Lite、Gemini 3 Flash などへの移行を検討する必要がある。 BigQuery DTS で BigLake Iceberg tables へデータ転送が可能に(Preview) Transfer data into BigLake Iceberg table in BigQuery (2025-12-18) BigQuery Data Transfer Service で Amazon S3、Azure Blob Storage、Cloud Storage からBigLake Iceberg tables へデータ転送が可能に(Preview)。 BigLake Iceberg tables は、標準テーブルと同じく読み書き可能だがデータは Apache Iceberg 形式で Cloud Storage に保存される。 BigQuery Data Transfer Service の転送元として SQL Server が追加 Load Microsoft SQL Server data into BigQuery (2025-12-19) BigQuery Data Transfer Service の転送元として Microsoft SQL Server が追加(Preview)。 オンプレミスやクラウド上の SQL Server から BigQuery へ定期的なデータ転送を自動化。BigQuery Data Transfer Service はフルマネージドでサーバーレス。 GKE の Standard クラスタで Autopilot 機能が利用可能に Run workloads in Autopilot mode in Standard clusters (2025-12-18) Google Kubernetes Engine(GKE)の Standard クラスタで Autopilot 機能が利用可能に。 ComputeClass を使い1つのクラスタ内で柔軟な Standard とマネージドな Autopilot のミックス運用が可能。柔軟な構成とコスト最適化を両立できる。 GKE の Standard クラスタで Autopilot 機能が利用可能 Gemini Enterprise でノーコードエージェントのスケジュール実行が可能に Schedule agent executions (2025-12-19) Gemini Enterprise でノーコードエージェントのスケジュール実行が可能に(Preview)。 月、週、日、時間単位などでノーコードエージェントを自動実行できる。 Vertex AI の Agent Designer で AI エージェントの試験的構築が可能に Agent Designer overview (2025-12-19) Vertex AIで、Agent Designer で AI エージェントを試験的に構築できるように(Preview)。 Get Code を押下すると Python + ADK(Agent Development Kit)のソースコードを取得。AI エージェントの PoC や開発を短縮できる。 Agent Designer 画面 取得されたコード Google Workspace のアップデート Gmail のメールを Google Chat に共有可能に New to Gmail: share emails in Google Chat (2025-12-02) Gmail のメールを Google Chat に共有できるようになった。 メールとチャットを横断したコミュニケーションを円滑にできる。2025年12月2日から15日程度かけて順次リリース。 Flows が Google Workspace Studio として一般公開 Now available: Create AI agents to automate work with Google Workspace Studio (2025-12-03) アルファ版だった Google Workspace Flows が Google Workspace Studio と改名して一般公開。 AI エージェントをノーコードで構築し様々なタスクを自動化できるサービス。Gmail や Google ドライブなどの Google Workspace アプリと統合されているほか、Webhookも利用できる。 Gemini 3 Pro Image(Nano Banana Pro)による解説画像 Google Workspace Studio の機能詳細は以下の記事で解説している。 blog.g-gen.co.jp Google Meet で組織外ユーザーをライブストリーミングに招待できるように Invite external guests to Google Meet live streams or limit access for targeted internal live streaming (2025-12-08) Google Meet で、組織外部のユーザーをライブストリーミングに招待できるようになった。 大規模な一方向配信が可能になる。また組織内部向けでも、参加可能な対象者を特定のユーザーやグループのみに制限できるようになった。 NotebookLM で docx ファイルをソースとして追加可能に Add or discover new sources for your notebook (2025-12-08) NotebookLM で docx ファイル(Microsoft Word ファイル)がソースとして追加可能になった。 Google Workspace バンドル版、Google AI Pro 版で確認。 Google Chat の URL が変更 A new web address for Google Chat (2025-12-11) Google Chat の URL が変更される。 旧 : mail.google.com/chat 新 : chat.google.com これにより、起動時間の短縮が見込まれる。既存 URL も引き続き使用可能だが拡張機能はアップデートが必要な可能性がある。 2025-12-11から順次ロールアウト。 Google Chat でメッセージのスケジュール送信が可能に Schedule messages to be sent at a later time in Google Chat (2025-12-11) Google Chat でメッセージのスケジュール送信が可能に。事前に送信予約日時を指定するとその時刻にメッセージが送信される。Slack 等にもある機能。 2025-12-11から順次ロールアウト。 Google Chat で RSS フィードと Atom フィードを購読できるように Keep your team informed: Introducing the Feeds app for Google Chat (2025-12-17) Google Chat で RSS フィードと Atom フィードを購読できるようになった。 RSS/Atom フィードの更新が Chat スペースに自動投稿される。 Google Meet で全画面共有のときもデバイス音声が共有されるように Share your device’s audio when presenting in Google Meet (2025-12-17) Google Meet で全画面共有のときもデバイス音声(動画の再生時の音声等)が共有されるように。これまでタブ共有にしないと共有されなかった。 Chromeブラウザのみ対応。即時リリース/計画的リリースの設定により機能のロールアウト時期は異なる。 Gemini アプリで Gemini 3 Flash が使用可能に Introducing Gemini 3 Flash for the Gemini app (2025-12-19) Gemini アプリで Gemini 3 Flash が使用可能になった。Gemini アプリでは、モードを3種類から選択可能。 高速モード -> Gemini 3 Flash 思考モード -> Gemini 3 Flash Pro -> Gemini 3 Pro 杉村 勇馬 (記事一覧) 執行役員 CTO 元警察官という経歴を持つ IT エンジニア。クラウド管理・運用やネットワークに知見。AWS 認定資格および Google Cloud 認定資格はすべて取得。X(旧 Twitter)では Google Cloud や Google Workspace のアップデート情報をつぶやいています。 Follow @y_sugi_it
アバター
G-gen の min です。Google Cloud のデータ変換パイプラインツールである Dataform で、データ品質テストを実装するための アサーション (assertion)機能について解説します。 概要 Dataform とは アサーションとは アサーションの種類 組み込みアサーションの詳細 nonNull uniqueKey / uniqueKeys rowConditions 手動アサーションの詳細 定義方法 参照整合性のチェック例 集計値のチェック例 アサーションの依存関係の制御 すべての依存先アサーションを待機 特定の依存アクションのアサーションのみ待機 特定のアサーションのみを依存先に指定 実行結果の確認と通知 実行結果の確認 アサーション失敗時の通知 概要 Dataform とは Dataform は、BigQuery 内で SQL を用いたデータ変換パイプラインを開発、テスト、デプロイ、実行するためのフルマネージドなサービスです。 Dataform の基本的な概念や使い方については、以下の記事を参照してください。 blog.g-gen.co.jp アサーションとは Dataform の アサーション は、データ品質テストをパイプラインに組み込むための機能です。アサーションは、内部的には「指定した条件に違反する行を検出する SELECT クエリ」として実装されます。このクエリが 1 行でもデータを返した場合、つまり条件違反のデータが1件でも存在した場合、そのアサーションは 失敗 となります。 Dataform はワークフローを実行するたびにアサーションを実行します。アサーションが失敗すると、実行ログに失敗が記録され、後続の処理を停止させたり、アラートを送信したりできます。 参考 : アサーションを使用してテーブルをテストする アサーションの種類 Dataform のアサーションは、大きく 2種類 に分けられます。 種別 説明 用途 組み込みアサーション テーブル定義ファイル( .sqlx )の config ブロック内で宣言的に指定 一般的なデータ品質チェック 手動アサーション 独立した .sqlx に任意の SQL を記述 複雑なチェック、複数テーブルの整合性 前者の 組み込みアサーション は、Dataform に組み込みで用意されたアサーションです。簡単な記述で呼び出すことができます。Dataform には以下の組み込みアサーションが用意されています。 名称 説明 nonNull 指定された列に null の行がないことを確認 rowConditions すべての行が指定した条件を満たすことを確認 uniqueKey 指定した列で、すべての行の値が一意である(重複した値がない)ことを確認 uniqueKeys 指定した列の組み合わせで、すべての行の値が一意である(重複した値がない)ことを確認 後者の 手動アサーション は、ユーザーが独自の SQL クエリを記述することによって定義できるアサーションです。記述した SQL が1行でも値を返すと、アサーションは失敗します。 組み込みアサーションの詳細 nonNull 指定したカラムに NULL 値が含まれていないことを検証します。主キーや必須項目など、 NULL であってはならないカラムに対して使用します。 以下の例では、 user_id と email カラムに NULL 値が存在しないことをテストします。 config { type : " table " , assertions: { nonNull: [ " user_id " , " email " ] } } SELECT 1 AS user_id, " test@example.com " AS email なお、BigQuery テーブルには NOT NULL 制約を指定できますが、この制約と nonNull アサーションを混同しないよう注意が必要です。 nonNull アサーションは、データパイプラインの実行時に NULL 値がないかを テスト する機能です。このアサーションを定義しても、Dataform が作成する BigQuery テーブルのスキーマ自体に NOT NULL 制約が付与されるわけではありません。 Dataform で自動作成されたテーブルのカラムは、デフォルトですべて NULL を許容する( NULLABLE )モードです。スキーマレベルで NULL 値を確実に禁止したい場合は、Dataform の operations を使用して明示的に設定するなど、追加の対応が必要です。 参考 : カスタム SQL オペレーションを定義する uniqueKey / uniqueKeys uniqueKey は、指定した単一カラムの値がテーブル内で一意である(重複がない)ことを検証します。 uniqueKeys は、指定した複数カラムの組み合わせがテーブル内で一意であることを検証します。 uniqueKeys では複数のカラムセットをテストできます。以下の例では、「 user_id の一意性」と「 signup_date と customer_id の組み合わせの一意性」の2つの条件をテストします。 config { type : " table " , assertions: { uniqueKeys: [ [ " user_id " ], [ " signup_date " , " customer_id " ] ] } } SELECT ... rowConditions 独自の SQL 条件式を記述して、すべての行がその条件を満たすことを検証します。各条件式は文字列として記述し、テーブルのいずれかの行で条件式が false または NULL を返すと、アサーションは失敗します。 以下の例では、「 signup_date が NULL でない場合は 2025-10-01 より後である」かつ「 email がメールアドレス形式である」という2つの条件をテストします。 config { type : " incremental " , assertions: { rowConditions: [ ' signup_date is null or signup_date > "2025-10-01" ' , ' REGEXP_CONTAINS(email, r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$") ' ] } } SELECT ... 手動アサーションの詳細 定義方法 手動アサーションは、組み込みアサーションで表現しにくい複雑なロジックや、複数テーブルをまたぐテストに使用します。 手動アサーションを定義するには、 config ブロックの type として assertion を指定し、その下にテストしたい条件(違反する行を見つける)の SQL クエリを記述します。 参照整合性のチェック例 例えば、 users テーブルと orders テーブルで、存在しない user_id が orders テーブルに含まれていないか(参照整合性)をテストする手動アサーションは以下のようになります。このクエリは、 orders テーブルに存在する user_id が users テーブルに存在しない行を検出します。 -- definitions/assertions/check_order_user_id.sqlx config { type : " assertion " } SELECT o.order_id FROM ${ref( " orders " )} AS o LEFT JOIN ${ref( " users " )} AS u ON o.user_id = u.user_id WHERE u.user_id IS NULL 集計値のチェック例 手動アサーションは、集計値に対するテストも定義できます。例えば、日別の売上データ( daily_sales )に、マイナスの売上日が存在しないことを確認するアサーションは以下のように記述できます。 -- definitions/assertions/check_negative_revenue.sqlx config { type : " assertion " } SELECT sale_date FROM ${ref( " daily_sales " )} WHERE total_revenue < 0 アサーションの依存関係の制御 すべての依存先アサーションを待機 アサーション失敗時に後続処理を止めたい場合は、依存関係を制御します。 デフォルト設定では、アサーションが失敗しても、そのテーブルを参照する後続の処理は実行されます。 config ブロックで dependOnDependencyAssertions: true を設定すると、このアクション(テーブル作成などの処理)が依存するすべてのアクションに定義されたアサーションが成功するまで、処理の実行は開始されません。 -- table_B.sqlx config { type : " table " , dependOnDependencyAssertions: true } -- table_A のアサーションがすべて成功しないと、table_B の作成は開始されない SELECT * FROM ${ref( " table_A " )} 特定の依存アクションのアサーションのみ待機 dependencies パラメータで依存アクションを指定する際に includeDependentAssertions: true を設定することで、特定の依存アクションのアサーションのみを待機させることができます。 以下の例では、 table_C は table_A と table_B に依存していますが、 table_B のアサーションが成功した場合にのみ、処理が実行されます( table_A のアサーション成否は問いません)。 -- table_C.sqlx config { type : " table " , dependencies: [ " table_A " , {name: " table_B " , includeDependentAssertions: true } ] } SELECT * FROM ${ref( " table_A " )} LEFT JOIN ${ref( " table_B " )} ON ... 特定のアサーションのみを依存先に指定 さらに細かく、特定のアクションの特定の組み込みアサーションや手動アサーションのみを依存関係に設定することもできます。アサーション名は アクション名_assertions_アサーション種別_インデックス という命名規則で付けられています。手動アサーションの場合は、ファイル名がそのままアサーション名になります。 -- table_B.sqlx config { type : " table " , dependencies: [ " table_A_assertions_uniqueKey_0 " , -- table_A の uniqueKey アサーション " check_order_user_id " -- 手動アサーション ] } SELECT * FROM ${ref( " table_A " )} 実行結果の確認と通知 実行結果の確認 Dataform のワークフロー実行ログから、各アサーションが成功したか失敗したかを確認できます。 アサーション失敗時の通知 アサーションが失敗した場合、Dataform は Cloud Logging にログを自動的に出力します。このログをトリガーとして、Cloud Monitoring で ログベースのアラート を設定することで、アサーション失敗時に通知を送信できます。 失敗したワークフロー呼び出しに対するアラート設定の詳細は、公式ドキュメントをご参照ください。 参考 : 失敗したワークフロー呼び出しに対するアラートを構成する 佐々木 愛美 (min) (記事一覧) クラウドソリューション部 データアナリティクス課。2024年7月 G-gen にジョイン。G-gen 最南端、沖縄県在住。最近覚えた島言葉は、「マヤー(猫)」。
アバター
G-gen の高宮です。 Google Calendar API と Google Meet REST API を組み合わせた実装時に、いくつかのエラーが発生しました。その内容と原因の考察を紹介します。 はじめに 会議スペース作成時にエラー 実装 エラー 原因 回避策 Meet 会議の設定編集時にエラー 実装 エラー 原因 回避策 はじめに 以前の記事「API経由でGoogle Meetの成果物作成を有効化したカレンダー予定を作成する」では、Google Calendar API と Google Meet REST API を利用し、Google Meet の成果物作成を有効化したカレンダーの予定を作成する方法を紹介しました。 blog.g-gen.co.jp Google Meet の成果物(アーティファクト)作成を有効化したカレンダー予定を API で作成するために、以下の3つのアプローチを検証しました。 Calendar API でイベントを作成する。次に、Meet REST API( google-apps-meet ライブラリ経由)でアーティファクト生成を有効化したスペースを作成する。次に、イベントとスペースを紐づける。 Calendar API でイベントとスペースを作成する。次に、Meet REST API( google-api-python-client ライブラリ経由)でスペースのアーティファクト生成を有効化する。 Calendar API でイベントを作成する。次に、Meet REST API( google-api-python-client ライブラリ経由)でアーティファクト生成を有効化したスペースを作成する。次に、イベントとスペースを紐づける。 それぞれのアプローチの実装方法の違いと動作結果は、以下の表の通りです。 No. 使用ライブラリ(Meet) スペースの作成 アーティファクト設定 イベントとの紐づけ 動作結果 1 google-apps-meet ライブラリ Meet REST API スペース作成時に指定 Calendar API で作成したイベントを更新し、紐づけ 会議スペース作成時にエラー 2 google-api-python-client ライブラリ Calendar API Meet REST API で作成されたスペースの設定を更新 Calendar API でイベント作成時に自動で紐づけ Meet 会議の設定編集時にエラー 3 google-api-python-client ライブラリ Meet REST API スペース作成時に指定 Calendar API で作成したイベントを更新し、紐づけ 期待した動作(以前の記事) 当記事では、上記のうちエラーが発生した ケース1 と ケース2 について、エラーの詳細、原因、および回避策を解説します。 会議スペース作成時にエラー 実装 以下のコマンドを実行して、 google-apps-meet ライブラリを追加でインストールします。 uv add google-apps-meet == 0 . 2 . 0 2025年11月時点でベータ版で公開されている機能を使用して、 main.py に以下のコードを実装します。 import os import datetime from google.auth.transport import requests from google.oauth2.credentials import Credentials from google_auth_oauthlib.flow import InstalledAppFlow from google.apps.meet_v2beta import SpacesServiceClient from google.apps.meet_v2beta.types import Space, SpaceConfig, CreateSpaceRequest from googleapiclient.discovery import build def authorize () -> Credentials: """Calendar API と Meet API を呼び出すために OAuth 2.0 認証を行い、Credentials オブジェクトを返す""" CLIENT_SECRET_FILE = "./client_secret.json" credentials = None if os.path.exists( "token.json" ): credentials = Credentials.from_authorized_user_file( "token.json" ) if credentials is None : flow = InstalledAppFlow.from_client_secrets_file( CLIENT_SECRET_FILE, scopes=[ "https://www.googleapis.com/auth/calendar.events.owned" , "https://www.googleapis.com/auth/meetings.space.created" , ], ) flow.run_local_server(port= 0 ) credentials = flow.credentials if credentials and credentials.expired: credentials.refresh(requests.Request()) if credentials is not None : with open ( "token.json" , "w" ) as f: f.write(credentials.to_json()) return credentials USER_CREDENTIALS = authorize() def create_event (): """Calendar API を使用してイベントを作成する""" # サービスオブジェクトの構築 service = build( "calendar" , "v3" , credentials=USER_CREDENTIALS) # 指定した時刻から1時間の予定を作成 now = datetime.datetime.now() startTime = now.isoformat() endTime = (now + datetime.timedelta(hours= 1 )).isoformat() event = { "summary" : "Google Calendar Meet Test Event" , "start" : { "dateTime" : startTime, "timeZone" : "Asia/Tokyo" , }, "end" : { "dateTime" : endTime, "timeZone" : "Asia/Tokyo" , }, } # 自身のカレンダーに予定を追加 event = service.events().insert(calendarId= "primary" , body=event).execute() return event def create_space () -> Space: """Meet API を使用して アーティファクト生成を有効化した Space リソースを作成する""" # クライアントを作成し、 Space を作成 client = SpacesServiceClient(credentials=USER_CREDENTIALS) request = CreateSpaceRequest() space = client.create_space(request=request) # artifact の自動生成を有効化 space.config = SpaceConfig( artifactConfig=SpaceConfig.ArtifactConfig( recordingConfig=SpaceConfig.ArtifactConfig.RecordingConfig( autoRecordingGeneration=SpaceConfig.ArtifactConfig.RecordingConfig.AutoRecordingGeneration.ON ), transcriptionConfig=SpaceConfig.ArtifactConfig.TranscriptionConfig( autoTranscriptionGeneration=SpaceConfig.ArtifactConfig.TranscriptionConfig.AutoTranscriptionGeneration.ON, ), smartNotesConfig=SpaceConfig.ArtifactConfig.SmartNotesConfig( autoSmartNotesGeneration=SpaceConfig.ArtifactConfig.SmartNotesConfig.AutoSmartNotesGeneration.ON, ), ), ) return space def update_event (eventId: str = None , meetUri: str = None ): """Calendar API を使用して既存のイベントに Meet 情報を追加する""" # サービスオブジェクトの構築 service = build( "calendar" , "v3" , credentials=USER_CREDENTIALS) # 予定の更新 event = service.events().get(calendarId= "primary" , eventId=eventId).execute() event[ "conferenceData" ] = { "conferenceSolution" : { "key" : { "type" : "hangoutsMeet" }, }, "entryPoints" : [ { "entryPointType" : "video" , "uri" : meetUri, } ], } updated_event = ( service.events() .update( calendarId= "primary" , eventId=event[ "id" ], body=event, conferenceDataVersion= 1 , ) .execute() ) return updated_event def main (): """メイン処理""" # イベントと Space の作成 event = create_event() print (f "Google Calendar URL {event.get('htmlLink')}" ) space = create_space() if __name__ == "__main__" : main() 以下の関数は以前の記事と同様です。 authorize create_event update_event 以前の記事と異なるのは、 create_space 関数における以下の処理の実装です。 認証情報を使用して、 SpacesServiceClient クラスのインスタンスを作成します。 CreateSpaceRequest クラスのインスタンスを引数に設定し、 create_space メソッドを呼び出しスペースを作成するリクエストを送信します。 処理 2. で作成したスペースに対して、以下のクラスを使用して Google Meet の成果物作成を有効化します。 クラス名 説明 SpaceConfig 会議スペース全般の構成 ArtifactConfig 会議でサポートされている自動生成アーティファクトに関する構成 RecordingConfig 録画の構成 TranscriptionConfig 自動文字起こしの構成 SmartNotesConfig 自動スマートメモの構成 参考 : REST Resource: spaces エラー 処理 2. の実行時(80行目)に、以下の例外が発生します。 例外が発生しました: MethodNotImplemented 501 Method not found. grpc. channel. InactiveRpcError: <_InactiveRpcError of RPC that terminated with: status = StatusCode.UNIMPLEMENTED details = "Method not found." debug_error_string = "UNKNOWN:Error received from peer ipv4:{IPアドレス}:443 {grpc_message:"Method not found.", grpc_status:12}" 原因 エラーメッセージに、gRPC の標準的なステータスコードである StatusCode.UNIMPLEMENTED (エラーコード 12)が返却されており、「リクエストされた操作が実装されていない、または API によってサポートされていない」ことがわかります。 ベータ版の機能であるため、サーバー側で当該メソッドがまだ実装されていない、あるいは公開されていないことが原因と推測され、本番環境での使用には十分な注意が必要です。 回避策 処理 2. を google-api-python-client ライブラリ経由で Meet REST API を呼び出す実装に変更することで期待した動作になります。 Meet 会議の設定編集時にエラー 実装 main.py に以下のコードを実装します。本実装では、API の呼び出しは、 google-api-python-client ライブラリを使用して行っています。 import os import datetime import uuid from google.auth.transport import requests from google.oauth2.credentials import Credentials from google_auth_oauthlib.flow import InstalledAppFlow from googleapiclient.discovery import build def authorize () -> Credentials: """Calendar API と Meet API を呼び出すために OAuth 2.0 認証を行い、Credentials オブジェクトを返す""" CLIENT_SECRET_FILE = "./client_secret.json" credentials = None if os.path.exists( "token.json" ): credentials = Credentials.from_authorized_user_file( "token.json" ) if credentials is None : flow = InstalledAppFlow.from_client_secrets_file( CLIENT_SECRET_FILE, scopes=[ "https://www.googleapis.com/auth/calendar.events.owned" , "https://www.googleapis.com/auth/meetings.space.created" , "https://www.googleapis.com/auth/meetings.space.settings" , ], ) flow.run_local_server(port= 0 ) credentials = flow.credentials if credentials and credentials.expired: credentials.refresh(requests.Request()) if credentials is not None : with open ( "token.json" , "w" ) as f: f.write(credentials.to_json()) return credentials USER_CREDENTIALS = authorize() def create_event (): """Calendar API を使用してイベントを作成する""" # サービスオブジェクトの構築 service = build( "calendar" , "v3" , credentials=USER_CREDENTIALS) # 指定した時刻から1時間の予定を作成 now = datetime.datetime.now() startTime = now.isoformat() endTime = (now + datetime.timedelta(hours= 1 )).isoformat() event = { "summary" : "Google Calendar Meet Test Event" , "start" : { "dateTime" : startTime, "timeZone" : "Asia/Tokyo" , }, "end" : { "dateTime" : endTime, "timeZone" : "Asia/Tokyo" , }, "conferenceData" : { "createRequest" : { "requestId" : str (uuid.uuid4()), "conferenceSolutionKey" : { "type" : "hangoutsMeet" }, } }, } # 自身のカレンダーに予定を追加 event = service.events().insert(calendarId= "primary" , body=event, conferenceDataVersion= 1 ).execute() return event def update_space (meetUri: str = None ): """Meet API を使用して 既存の Meet 会議をアーティファクト生成を有効化した Space リソースに更新する""" # google-api-python-client での実装 service = build( "meet" , "v2" , credentials=USER_CREDENTIALS) # meetUri から Space 名を抽出 name = f "spaces/{meetUri.split('/')[-1]}" # 変更する Space リソースのボディ定義 space_body = { "config" : { "artifactConfig" : { "recordingConfig" : { "autoRecordingGeneration" : "ON" , }, "transcriptionConfig" : { "autoTranscriptionGeneration" : "ON" , }, "smartNotesConfig" : { "autoSmartNotesGeneration" : "ON" , }, } } } # 更新する対象の定義 update_mask = "config.artifactConfig.recordingConfig,config.artifactConfig.transcriptionConfig,config.artifactConfig.smartNotesConfig" # Space リソースの更新 return service.spaces().patch(name=name, body=space_body, updateMask=update_mask).execute() def main (): """メイン処理""" # Meet 会議 を含んだイベントの作成 event = create_event() print (f "Google Calendar URL {event.get('htmlLink')}" ) meet_uri = event[ "conferenceData" ][ "entryPoints" ][ 0 ][ "uri" ] print (f "Meet URL {meet_uri}" ) # Space の設定を更新 update_space(meetUri=meet_uri) if __name__ == "__main__" : main() 以前の記事との相違点は以下です。 authorize 関数の scopes で、 https://www.googleapis.com/auth/meetings.space.settings を指定しています。このスコープを指定することで、Google Meet 通話すべての設定の表示および編集が可能です。 create_event 関数で conferenceData フィールドを使用して、Meet 会議の設定を追加します。 insert メソッド呼び出し時の引数として、 conferenceDataVersion=1 を追加し、Meet 会議を含むイベントを作成します。 以前の記事と異なるのは、 update_space 関数における以下の実装です。 イベントに紐づく Meet 会議の URI を引数に取得し、 https://meet.google.com/{meetingCode} を spaces/{meetingCode} の形式に変換します。 Google Meet の成果物作成を有効化する設定を JSON 形式で定義します。 更新するフィールド情報を文字列で定義します。JSON のネストはドット( . )区切り、複数のフィールドを指定したい場合は、カンマ( , )区切りで表現します。 処理 1. 、 2. 、 3. で定義した変数を引数に patch メソッドを実行することで、Meet 会議の設定を更新します。 エラー 処理 3. の実行時(110行目)に、以下の例外が発生します。 例外が発生しました: HttpError <HttpError 403 when requesting https://meet.googleapis.com/v2/spaces/ {meetingCode}?updateMask=config.artifactConfig.recordingConfig%2Cconfig.artifactConfig.transcriptionConfig%2Cconfig.artifactConfig.smartNotesConfig&alt=json returned "Permission denied on resource Space (or it might not exist)". Details: "Permission denied on resource Space (or it might not exist)"> 原因 エラーメッセージに、HTTP のレスポンスステータスコードの 403 が返却されており、「リクエストした操作を行う権限がない」ことがわかります。 Meet REST API の仕様として、自身で作成したスペースに対する更新のみを許容しており、カレンダーなどの外部の操作で作成されたスペースを更新できないことが原因と推測されます。 参考 : REST API スコープについて 参考 : Google Meet API . spaces 回避策 以下の実装に変更することで、期待した動作になります。 create_event 関数 では、イベント作成時に Meet 会議が作成されないように設定します。 google-api-python-client ライブラリ経由で Meet REST API を呼び出し、アーティファクト生成が有効化されたスペースを作成します。 Calendar API を使用して、作成したイベントとスペースを紐づけします。 高宮 怜 (記事一覧) クラウドソリューション部クラウドエクスプローラ課 2025年6月より、G-genにジョイン。前職は四国のSIerで電力、製造業系のお客様に対して、PM/APエンジニアとして、要件定義から運用保守まで全工程を担当。現在はGoogle Cloudを学びながら、フルスタックエンジニアを目指してクラウドエンジニアとしてのスキルを習得中。 Follow @Ggen_RTakamiya
アバター