Perlからでもtursoを使いたい!

いつもお世話になっております。わいとん(@ytnobody)です。

さて、ただいま羽田空港の待合所でこのエントリを書いています。Perl Advent Calendar 2025のday 4となります。

内容については、タイトルの通りです。で、それを実現するモジュールを作りました。作ってしまえば、できるのです。

tursoってなんだ?

tursoというのはDB as a Service(DBaaS)の一種です。個人開発勢・小規模開発に特におすすめです。

詳しい特徴等については以下のエントリがよくまとまっていると思います。

ざっくりいうと、めちゃくちゃ安い、SQLiteっぽい、エッジネイティブDBサービスってところでしょうか。なお、正しくはSQLiteではなくlibsqlというもののDBaaSということになるようです。

あと便利機能として、DBスキーマのブランチとマージ機能があるので、Planetscaleっぽくgithubフローに乗ったスキーマ運用が可能だったりします。

今回つくったものたち

で、このtursoですが、公式にはPerlからの接続は基本的にできません。ライブラリの提供もありませんし、ドライバもです。

Perlを老後も趣味で触りたいものとしては、この仕打ちには我慢なりませんでした。このままではただでさえ高い血圧が余計に上がってしまう…

従いまして、これ以上血圧を上げないようにするために以下のモジュールを作りました。

Alien::Turso::CLI

これは要するにtursoコマンドを使えるようにするためのモジュールです。それだけなら、特段このモジュールの必要性はないと思いますが、DBD::libsqlを作るにあたり、ローカルで簡単にturso devを実行できる必要がありました。

このturso devはtursoにアカウントがなくても、とりあえずローカルでtursoサーバーを起動するコマンドです。よって、これを使えばテスト時にモックを作る必要がないのです。

DBD::libsql

さて、これが今回の主役です。

使い方はmetacpanのsynopsisに書いてあるのですが、まあ同じものをコピペしておきます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
use DBI;
# Connect to a local libsql server
my $dbh = DBI->connect('dbi:libsql:localhost', '', '', {
RaiseError => 1,
AutoCommit => 1,
});
# Connect to Turso with authentication token (recommended approach)
my $dbh = DBI->connect(
'dbi:libsql:my-db.aws-us-east-1.turso.io',
'', # username (unused)
'your_turso_token', # password field used for auth token
{
RaiseError => 1,
AutoCommit => 1,
}
);
# Alternative: Turso connection with connection attribute
my $dbh = DBI->connect('dbi:libsql:my-db.aws-us-east-1.turso.io', '', '', {
RaiseError => 1,
AutoCommit => 1,
libsql_auth_token => 'your_turso_token',
});
# Create a table
$dbh->do("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)");
# Insert data
$dbh->do("INSERT INTO users (name) VALUES (?)", undef, 'Alice');
# Query data
my $sth = $dbh->prepare("SELECT * FROM users WHERE name = ?");
$sth->execute('Alice');
while (my $row = $sth->fetchrow_hashref) {
print "ID: $row->{id}, Name: $row->{name}\n";
}
$dbh->disconnect;

mysqlやpostgresqlなんかとあまり変わらないと思いますが、接続時にusername相当が空文字だったり、パスワードにtursoトークンをつかうなど、ちょいちょい違う点があります。

でも、それ以外は他と一緒です。拙作のORMもどきであるOtogiriとも組み合わせられますし、他のORMでも使えると思います。

さいごに

最近かいたモジュールはほとんどClaude Sonnet 3.5かClaude Haiku 4.5に書かせておりまして、私自身は設計こそしていますが、細かいコード実装を書いていません。それでもこれだけのモジュールを作ることができますし、AIを使うことを躊躇してる場合じゃない、と思う次第です。

ちなみに、このモジュールはYAPC::Fukuoka 2025でkobaken(@kfly8)さんによって作られ提供されていた「令和最新版Perl掲示板」にて使用されていました。