MySQLデータベースのテーブルをGoogleスプレッドシートに直接取り込めると、データ分析や共有が格段に楽になります。しかし、標準機能ではMySQLに直接接続する方法が用意されていません。そこで役立つのが、Apps ScriptとJDBCサービスです。この記事では、Apps ScriptのスクリプトからJDBCドライバを使ってMySQLテーブルをインポートする手順を詳しく解説します。スクリプトの書き方から注意点までを押さえて、スムーズなデータ連携を実現しましょう。
【要点】MySQLテーブルをスプレッドシートに取り込むための鍵は、Apps ScriptのJDBCサービスです。
- Jdbc.getConnectionメソッド: MySQLに接続するためのメソッドで、ホスト名、ポート、データベース名、ユーザー名、パスワードを指定します。
- Jdbc.Statement.executeQuery: 取得した接続オブジェクトからステートメントを作成し、SELECT文でデータを取得します。
- Sheet.getRange().setValues: 取得した結果セットを二次元配列に変換し、スプレッドシートの範囲に一括で書き込みます。
ADVERTISEMENT
目次
Apps ScriptとJDBCサービスでMySQLに接続する仕組み
Apps Scriptには、外部データベースに接続するためのJDBCサービスが用意されています。このサービスを使うと、GoogleのサーバーからMySQLやPostgreSQLなどのデータベースに直接アクセスできます。接続にはJDBC URL、ユーザー名、パスワードが必要です。MySQL用のJDBCドライバはGoogle側で既に組み込まれているため、特別なライブラリの追加は不要です。
ただし、MySQLサーバーが外部からの接続を許可している必要があります。Googleのサーバーから接続するため、ファイアウォールでGoogleのIPアドレス範囲を許可するか、Cloud SQLなどのマネージドサービスを使うと簡単です。また、Apps Scriptの実行時間は1回あたり最大6分、トリガーを使った場合も同様の制限があるため、大量データのインポートは分割処理を検討しましょう。
MySQLテーブルをインポートする具体的な手順
1. Apps Scriptエディタを開く
- スプレッドシートを開く
インポート先のGoogleスプレッドシートを開きます。アクティブなシートにデータが書き込まれます。 - 拡張機能メニューからApps Scriptを開く
メニューバーから「拡張機能」をクリックし、「Apps Script」を選択します。新しいタブでスクリプトエディタが開きます。
2. スクリプトコードを記述する
- コード.gsに関数を追加する
デフォルトのコード.gsファイルに、以下のような関数を記述します。
function importMySQLData() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var url = "jdbc:mysql://ホスト名:3306/データベース名";
var user = "ユーザー名";
var password = "パスワード";
var conn = Jdbc.getConnection(url, user, password);
var stmt = conn.createStatement();
var results = stmt.executeQuery("SELECT * FROM テーブル名");
var metaData = results.getMetaData();
var numCols = metaData.getColumnCount();
var data = [];
// ヘッダー行を追加
var headers = [];
for (var i = 1; i <= numCols; i++) {
headers.push(metaData.getColumnLabel(i));
}
data.push(headers);
// データ行を追加
while (results.next()) {
var row = [];
for (var j = 1; j <= numCols; j++) {
row.push(results.getString(j));
}
data.push(row);
}
results.close();
stmt.close();
conn.close();
// シートに書き込み
sheet.getRange(1, 1, data.length, numCols).setValues(data);
}
上記のコードでは、まずJdbc.getConnectionでMySQLに接続し、createStatementでステートメントを作成します。executeQueryでSELECT文を実行し、結果セットからメタデータを取得してヘッダー行を作成します。その後、ループで各行のデータを二次元配列に格納し、最後にsetValuesでシートに書き込みます。接続やステートメントは必ずcloseで解放してください。
3. スクリプトを実行する
- 関数を選択して実行
スクリプトエディタのツールバーで関数「importMySQLData」を選択し、実行ボタンをクリックします。 - 権限を承認する
初回実行時には、外部サービスへのアクセス許可を求められます。内容を確認して許可してください。
4. 結果を確認する
- スプレッドシートに戻る
スクリプトが正常に完了すると、アクティブなシートにMySQLのデータがインポートされています。 - データを確認する
1行目にカラム名、2行目以降にデータが表示されていることを確認します。文字化けや欠損がないかチェックしてください。
インポート時の注意点とよくあるトラブル
MySQLサーバーにアクセスできない場合
Googleのサーバーから接続するためには、MySQLサーバーのファイアウォールでGoogleのIPアドレス範囲を許可する必要があります。許可するIP範囲は、Googleの公開情報(SPFレコードなど)を参照してください。また、MySQLのユーザーがリモート接続を許可しているか確認しましょう。より簡単な方法として、Google Cloud SQLを使えば、同じGoogle Cloud環境内で安全に接続できます。
文字化けが発生する場合
日本語などのマルチバイト文字が文字化けする場合は、JDBC URLにエンコーディングパラメータを追加します。例えば、jdbc:mysql://ホスト名:3306/データベース名?useUnicode=true&characterEncoding=UTF-8と指定してください。これで文字コードがUTF-8で扱われ、文字化けを防止できます。
大量データでタイムアウトする場合
Apps Scriptの実行時間制限(6分)を超えるとエラーになります。数十万行以上のデータを扱う場合は、LIMITとOFFSETを使って分割して取得するか、スプレッドシートのインポート機能(CSVなど)を検討しましょう。また、スクリプトの処理を最適化して、ループ内での不要な操作を減らすことも有効です。
データ型の変換に関する注意
上記のサンプルコードでは、すべてのデータをgetString()で文字列として取得しています。数値や日付を元の型で保持したい場合は、getObject()を使用してから適切に変換してください。例えば、日付はJavaScriptのDateオブジェクトに変換し、数値はNumber()でキャストします。ただし、スプレッドシートに書き込む際にはsetValuesが二次元配列の値を受け付けるため、型を意識する必要があります。
ADVERTISEMENT
JDBCインポートとCSVインポートの比較
| 項目 | JDBCインポート | CSVインポート |
|---|---|---|
| 接続の容易さ | ネットワーク設定が必要だが、一度スクリプトを書けば再利用可能 | 手動でCSVをエクスポートし、スプレッドシートにインポートするだけ |
| 自動化 | Apps Scriptのトリガーで定期実行が可能 | 手動作業が基本。自動化には別途ツールが必要 |
| リアルタイム性 | トリガーによる定期的な更新が可能 | 手動で都度インポートするため、リアルタイム性は低い |
| データ型の保持 | 文字列として扱うため、型情報は失われるが変換可能 | CSVはテキスト形式のため、型情報は失われる |
| ネットワーク要件 | MySQLサーバーが外部公開またはGoogle Cloud SQLである必要 | ファイル転送のみでネットワーク設定は不要 |
まとめ
この記事では、Apps ScriptのJDBCサービスを使ってMySQLテーブルをGoogleスプレッドシートにインポートする方法を解説しました。スクリプトを一度作成すれば、スプレッドシート上でボタンやトリガーから定期的にデータを更新できます。さらに、インポート後にQUERY関数でデータを絞り込んだり、IMPORTRANGEで他のシートと連携したりするのも便利です。まずは小さなテーブルでテストし、徐々に実運用に適用してみてください。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】印刷範囲を指定して印刷!特定範囲だけPDFや紙に出す手順
- 【Googleスプレッドシート】新しいスプレッドシートを作成する3つの方法!ドライブ・URL・テンプレート
- 【Googleスプレッドシート】数値の連続データを自動入力!オートフィルの活用
- 【Googleスプレッドシート】ダークモードを有効にする!目に優しい配色への切替
- 【Googleスプレッドシート】株価APIで株式データを自動取得!GOOGLEFINANCE超え活用
- 【Googleスプレッドシート】共有相手が編集できない時のチェック!権限と許可状態の確認
- 【Googleスプレッドシート】ページ設定で用紙サイズと向きを調整!印刷レイアウトの基本
- 【Googleスプレッドシート】Excelファイルxlsxをインポートする手順!ドラッグ&ドロップで取り込み
- 【Googleスプレッドシート】条件付き書式をコピーする!書式のみペーストの活用
