PowerShellはWindowsユーザーにとって非常に強力なスクリプト環境ですが、SQLiteのような軽量データベースと連携させることで、さらに多様な用途に活用することができます。
特にログデータの保存や簡易データ管理など、日々の業務で活躍する場面も多いでしょう。
本記事では、PowerShellからSQLiteに接続し、SQL文を実行する基本的な方法について詳しく解説します。
外部モジュールの導入方法から、実際のSQL文の発行、結果の取得と表示までを段階的に紹介していきますので、PowerShellとSQLiteの連携に興味のある方はぜひ参考にしてください。
SQLiteは、サーバー不要でファイル単位で完結する軽量なデータベースです。インストールが不要で、アプリケーションに組み込みやすいため、スクリプト処理や一時的なデータ保存に非常に適しています。
一方のPowerShellは、Windows環境での自動化に特化したスクリプト言語であり、ファイル操作やネットワーク、レジストリ、プロセスなど多くのタスクを効率化できます。
この2つを組み合わせることで、以下のようなメリットが生まれます:
PowerShellは標準ではSQLiteに直接アクセスする機能を持っていません。
そのため、SQLite用の.NETライブラリを使用して接続を実現します。代表的な方法として以下の2つがあります。
System.Data.SQLiteは、公式が提供している.NET向けのSQLiteプロバイダです。NuGetから取得し、PowerShellから利用可能です。
以下の手順でセットアップします:
System.Data.SQLite.dll
をダウンロードします。Add-Type -Path "C:\path\to\System.Data.SQLite.dll"
$connectionString = "Data Source=C:\sqlite\db\test.db;Version=3;"
$connection = New-Object System.Data.SQLite.SQLiteConnection($connectionString)
$connection.Open()
SQLiteに接続できたら、次はSQL文を使って操作をしていきましょう。基本的なSQL操作をPowerShellでどう書くかを例とともに紹介します。
$createTableCmd = $connection.CreateCommand()
$createTableCmd.CommandText = @"
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT NOT NULL
);
"@
$createTableCmd.ExecuteNonQuery()
$insertCmd = $connection.CreateCommand()
$insertCmd.CommandText = "INSERT INTO users (name, email) VALUES ('田中太郎', 'taro@example.com')"
$insertCmd.ExecuteNonQuery()
$selectCmd = $connection.CreateCommand()
$selectCmd.CommandText = "SELECT * FROM users"
$reader = $selectCmd.ExecuteReader()
while ($reader.Read()) {
Write-Host "ID: $($reader['id']) Name: $($reader['name']) Email: $($reader['email'])"
}
SQLインジェクションなどを避けるためにも、値の埋め込みにはパラメータを使うのが安全です。
以下のように実装できます。
$insertCmd = $connection.CreateCommand()
$insertCmd.CommandText = "INSERT INTO users (name, email) VALUES (@name, @email)"
$insertCmd.Parameters.AddWithValue("@name", "佐藤花子")
$insertCmd.Parameters.AddWithValue("@email", "hanako@example.com")
$insertCmd.ExecuteNonQuery()
このように、値を直接SQLに埋め込まずに、パラメータで渡すことで安全性と保守性が高まります。
データベースへの接続を開いたままにしておくのはよくありません。
スクリプトの最後で必ず接続を閉じましょう。
$connection.Close()
また、可能であれば try/finally
で閉じる処理を確実に実行することをおすすめします。
try {
$connection.Open()
# SQL処理をここで実行
}
finally {
$connection.Close()
}
PowerShellには sqlite
をより簡単に扱うためのコミュニティモジュールも存在します。
たとえば PowerShell.SQLite
モジュールをインストールすれば、より直感的に操作が可能です。
Install-Module -Name PowerShell.SQLite -Scope CurrentUser
Import-Module PowerShell.SQLite
Invoke-SqliteQuery -DataSource "C:\sqlite\db\test.db" -Query "SELECT * FROM users"
この方法は、簡単にSQL実行結果を得たいときに非常に便利です。
ただし、モジュールの仕様によって制限や注意点もあるため、公式ドキュメントの確認をおすすめします。
本記事では、PowerShellからSQLiteに接続し、SQL文を実行する方法を紹介しました。
CreateCommand()
を活用PowerShellスクリプトにデータベース機能を取り入れることで、日常業務の自動化やデータ管理がぐっと便利になります。
一度環境を整えてしまえば、あとは繰り返し再利用できるため、ぜひこの機会に試してみてください。