PowerShellはWindowsユーザーにとって非常に強力なスクリプト環境ですが、SQLiteのような軽量データベースと連携させることで、さらに多様な用途に活用することができます。
特にログデータの保存や簡易データ管理など、日々の業務で活躍する場面も多いでしょう。
本記事では、PowerShellからSQLiteに接続し、SQL文を実行する基本的な方法について詳しく解説します。
外部モジュールの導入方法から、実際のSQL文の発行、結果の取得と表示までを段階的に紹介していきますので、PowerShellとSQLiteの連携に興味のある方はぜひ参考にしてください。
SQLiteとは?PowerShellと組み合わせるメリット
SQLiteは、サーバー不要でファイル単位で完結する軽量なデータベースです。インストールが不要で、アプリケーションに組み込みやすいため、スクリプト処理や一時的なデータ保存に非常に適しています。
一方のPowerShellは、Windows環境での自動化に特化したスクリプト言語であり、ファイル操作やネットワーク、レジストリ、プロセスなど多くのタスクを効率化できます。
この2つを組み合わせることで、以下のようなメリットが生まれます:
- データベースを使ったログの蓄積・抽出が容易になる
- サーバーレスで動作するため手軽に導入可能
- スクリプトの中で完結するので、タスクスケジューラとの連携もしやすい
PowerShellからSQLiteに接続するための準備
PowerShellは標準ではSQLiteに直接アクセスする機能を持っていません。
そのため、SQLite用の.NETライブラリを使用して接続を実現します。代表的な方法として以下の2つがあります。
方法1:System.Data.SQLite を使用する
System.Data.SQLiteは、公式が提供している.NET向けのSQLiteプロバイダです。NuGetから取得し、PowerShellから利用可能です。
以下の手順でセットアップします:
- SQLite DLL を取得する
NuGet または公式サイトからSystem.Data.SQLite.dll
をダウンロードします。 - PowerShellでDLLを読み込む
Add-Type -Path "C:\path\to\System.Data.SQLite.dll"
- SQLiteに接続する
$connectionString = "Data Source=C:\sqlite\db\test.db;Version=3;"
$connection = New-Object System.Data.SQLite.SQLiteConnection($connectionString)
$connection.Open()
SQL文を発行してみる(CREATE・INSERT・SELECT)
SQLiteに接続できたら、次はSQL文を使って操作をしていきましょう。基本的なSQL操作をPowerShellでどう書くかを例とともに紹介します。
テーブルの作成(CREATE TABLE)
$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()
データの挿入(INSERT)
$insertCmd = $connection.CreateCommand()
$insertCmd.CommandText = "INSERT INTO users (name, email) VALUES ('田中太郎', 'taro@example.com')"
$insertCmd.ExecuteNonQuery()
データの取得(SELECT)
$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で自動化の幅が広がる
本記事では、PowerShellからSQLiteに接続し、SQL文を実行する方法を紹介しました。
ポイントのまとめ:
- SQLiteは軽量かつ扱いやすいファイルベースのデータベース
- PowerShellでは.NETライブラリを使ってSQLiteに接続可能
- SQL文の実行には
CreateCommand()
を活用 - パラメータを使って安全なデータ操作を行う
- モジュールを導入すればより簡単な記述も可能
PowerShellスクリプトにデータベース機能を取り入れることで、日常業務の自動化やデータ管理がぐっと便利になります。
一度環境を整えてしまえば、あとは繰り返し再利用できるため、ぜひこの機会に試してみてください。