お金をかけずにサーバーの勉強をしよう

劔"Tsurugi" インストール

2025年3月22日

メニューへ戻る

国産インメモリデータベース 劔"Tsurugi" をインストールします。
(デジタル赤字解消だ!)


ちょっと前から聞こえてきていたのですが、インメモリ/メニーコア環境で世界最速を謳う国産リレーショナルデータベース(RDBMS)の「劔"Tsurugi"」てのが開発されているとのこと。
劔"Tsurugi"

どうやら剣岳から命名されたようですね。
(後で丹沢とかでてきますし間違いないでしょう)

日本のIT界隈では海外の製品やサービスばかり使うものだから「デジタル赤字」が問題になりつつありますし、それの解消や国内ITのレベルアップのためにも、国産物を優遇して育てていかなきゃなりません。

劔"Tsurugi"はできたばかりでまだまだ商用の環境で使う訳にはいかないでしょうけど、応援すべくここで取り上げることにしました。

詳細は上記のリンクに色々と書いてありますから、そちらを読んでみて下さい。


1.環境

Ubuntuで動くそうなんで Ubuntu Server 24.04を用意しました。

結構色々とパッケージをインストールしますから他との相乗りはさせないで仮想OSを一つ用意するのが良さげです。

Ubuntu Server 24.04のインストールについては「Ubuntu 24.04 Server インストール」に書いていまして、その手順で作った仮想OSで以降の作業をやっていきます。


2.ダウンロード

以下からダウンロードできます。Githubのリポジトリですね。
2025年3月22日時点での最新版は 1.3.0 です。
project-tsurugi / tsurugidb

curlコマンドを使用したダウンロード手順がかかれていましたので、その通り実行します。

本当は [tsurugi]ユーザーを作ってそれでやった方が実践的な設計なんでしょうけど、作業の本質ではないので [subro]ユーザーでやってしまいます。
(これからの作業は sudoできるユーザーでないといけません。)

[subro]ユーザーのホームディレクトリにダウンロードします。

subro@UbuntuServer2404-1:~$ curl -OL https://github.com/project-tsurugi/tsurugidb/releases/download/1.3.0/tsurugidb-1.3.0.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100 22.0M  100 22.0M    0     0  7407k      0  0:00:03  0:00:03 --:--:-- 9564k

subro@UbuntuServer2404-1:~$ ls -l tsurugidb-1.3.0.tar.gz
-rw-rw-r-- 1 subro subro 23101635  3月 22 08:16 tsurugidb-1.3.0.tar.gz

[tsurugidb-1.3.0.tar.gz] というファイルができました。


3.ビルドとインストール

次の手順はこちらにかいてあります。
国産だけに日本語マニュアルがちゃんとあります。
Tsurugi Getting Started (日本語)

手順を見ていくと、どうやらダウンロードをしたのは実行ファイルではなくソースファイルのようで、自分でビルドしないといけないようです。

でもスクリプトが用意されているのでそれを実行するだけです。

ダウンロードした圧縮ファイルを解凍・展開します。

subro@UbuntuServer2404-1:~$ tar xf tsurugidb-1.3.0.tar.gz

subro@UbuntuServer2404-1:~$ ls -l tsurugidb*
-rw-rw-r--  1 subro subro 23101635  3月 22 08:16 tsurugidb-1.3.0.tar.gz

tsurugidb-1.3.0:
合計 108
-rw-r--r--  1 subro subro  2460  3月 17 10:59 BUILDINFO.md
-rwxr-xr-x  1 subro subro 11357  3月 17 10:57 LICENSE
-rw-r--r--  1 subro subro  3905  3月 17 10:57 README.md
-rw-r--r--  1 subro subro  8712  3月 17 10:57 about.md
-rwxr-xr-x  1 subro subro   107  3月 17 10:57 apt-install.sh
drwxr-xr-x  4 subro subro  4096  3月 17 10:57 dist
drwxr-xr-x  2 subro subro  4096  3月 17 10:57 docs
drwxr-xr-x  6 subro subro  4096  3月 17 10:57 harinoki
-rwxr-xr-x  1 subro subro   103  3月 17 10:57 install.sh
drwxr-xr-x 14 subro subro  4096  3月 17 10:57 jogasaki
drwxr-xr-x 11 subro subro  4096  3月 17 10:57 limestone
drwxr-xr-x 10 subro subro  4096  3月 17 10:58 mizugaki
drwxr-xr-x 13 subro subro  4096  3月 17 10:58 ogawayama
drwxr-xr-x 14 subro subro  4096  3月 17 10:58 sharksfin
drwxr-xr-x 13 subro subro  4096  3月 17 10:58 shirakami
drwxr-xr-x 10 subro subro  4096  3月 17 10:58 takatori
drwxr-xr-x  6 subro subro  4096  3月 17 10:58 tanzawa
drwxr-xr-x 14 subro subro  4096  3月 17 10:58 tateyama
drwxr-xr-x  8 subro subro  4096  3月 17 10:58 tateyama-bootstrap
drwxr-xr-x  4 subro subro  4096  3月 17 10:57 third_party
drwxr-xr-x  6 subro subro  4096  3月 17 10:58 tsubakuro
drwxr-xr-x 11 subro subro  4096  3月 17 10:58 yakushima
drwxr-xr-x  9 subro subro  4096  3月 17 10:59 yugawara

[tsurugidb-1.3.0]ディレクトリ以下にこんな風に展開されています。
やっぱり山関係なのかな。

必要な外部ライブラリ等のパッケージをインストールします。
[tsurugidb-1.3.0]ディレクトリに移動し、展開したファイル群から [apt-install.sh]を実行しています。

subro@UbuntuServer2404-1:~$ cd tsurugidb-1.3.0

subro@UbuntuServer2404-1:~/tsurugidb-1.3.0$ sudo ./apt-install.sh
〜〜〜 長いので省略 〜〜〜

apt-install.sh successful.

問題なく完了しました。

ビルド(コンパイルして実行ファイルを作る)をします。
結構時間がかかります。

subro@UbuntuServer2404-1:~/tsurugidb-1.3.0$ mkdir $HOME/opt

subro@UbuntuServer2404-1:~/tsurugidb-1.3.0$ ./install.sh --prefix=$HOME/opt --symbolic
〜〜〜 長いので省略 〜〜〜

------------------------------------
[Install Tsurugi successful]
Install Directory: /home/subro/opt/tsurugi-1.3.0
------------------------------------

上手くいったようです。


4.コマンドラインからのアクセス

ここからの手順はコマンドラインから SQLを実行するツールの tgctlコマンドの使用に移っていきます。

ここではローカル接続で、ネットワーク越しの方法は後述しています。

[TSURUGI_HOME]環境変数があることが前提になっていますので、まずこれを設定しておきましょう。
この方法だと設定が永続しないので、[~/.bashrc]ファイルなんかに書いておくのが本当は良いですね。

subro@UbuntuServer2404-1:~/tsurugidb-1.3.0$ export TSURUGI_HOME="$HOME/opt/tsurugi"

劔を起動します。

subro@UbuntuServer2404-1:~/tsurugidb-1.3.0$ $TSURUGI_HOME/bin/tgctl start
successfully launched tsurugidb.

立ち上がりました。

劔の状態確認。

subro@UbuntuServer2404-1:~/tsurugidb-1.3.0$ $TSURUGI_HOME/bin/tgctl status
Tsurugi OLTP database is RUNNING

手順と同じメッセージを得られているので、これで良いのでしょう。

手順に従って停止もやってみます。

subro@UbuntuServer2404-1:~/tsurugidb-1.3.0$ $TSURUGI_HOME/bin/tgctl shutdown
.
successfully shutdown tsurugidb.

こちらも手順通り。

このあと再び立ち上げました。

次はいよいよ SQLの実行です。

手順にあるローカル環境でしか使えないけど高速な IPC接続でアクセスします。

subro@UbuntuServer2404-1:~/tsurugidb-1.3.0$ $TSURUGI_HOME/bin/tgsql -c ipc:tsurugi
[main] INFO com.tsurugidb.tgsql.core.TgsqlRunner - establishing connection: ipc:tsurugi
[main] INFO com.tsurugidb.tgsql.core.TgsqlRunner - start repl
tgsql>

行頭の「tgsql>」が tgctlコマンドの SQL実行プロンプトです。

手順にある SQLを実行していきます。

トランザクションの開始。

tgsql> BEGIN;
transaction started. option=[
  type: OCC
]
Time: 21.885 ms

テーブル作成

tgsql> CREATE TABLE tb1(pk INT PRIMARY KEY, c1 INT);
execute succeeded
Time: 18.07 ms

データ挿入。

tgsql> INSERT INTO tb1(pk, c1) VALUES(1,100);
(1 row inserted)
Time: 3.071 ms

データ検索。

tgsql> SELECT * FROM tb1;
[pk: INT4, c1: INT4]
[1, 100]
(1 row)
Time: 16.002 ms

コミット(データの変更を反映してトランザクションの終了)。

tgsql> COMMIT;
transaction commit(DEFAULT) finished.
Time: 5.723 ms

プロンプトから抜ける。

tgsql> \quit
[main] INFO com.tsurugidb.tgsql.core.TgsqlRunner - repl execution was successfully completed

subro@UbuntuServer2404-1:~/tsurugidb-1.3.0$

これで手順は終了しています。

他の RDBMSを使ったことのある人なら、これまでの知識の応用で十分使えるなって思ったんじゃないでしょうか。


5.他ノードでのコマンドラインでのアクセス(TANZAWA)

多分ね〜神奈川県の丹沢のことだと思います。
Javaで作られているようで、こちらもビルドからやらないといけないらしく、JDK11以上が必要となっています。
project-tsurugi /tanzawa

この中からSQLを実行できるツールの tgsqlコマンドを作ろうと思います。

なお劔のデフォルト設定では外部ノードからのネットワーク接続機能が無効にされていますので、先にこれを有効にしておきます。

劔を停止します。

subro@UbuntuServer2404-1:~/tsurugidb-1.3.0$ $TSURUGI_HOME/bin/tgctl shutdown
.
successfully shutdown tsurugidb.

具体的には設定ファイル($TSURUGI_HOME/var/etc/tsurugi.ini)を更新するんですが、このファイルに記載するパラメータの一覧はこちらです。
Configuration file parameters (のstream_endpoint sectionの段落)

以下のように変えます。

[stream_endpoint]
    #allow_blob_privileged=false
    #enabled=false
    #port=12345
    #threads=104

  ↓

[stream_endpoint]
    #allow_blob_privileged=false
    enabled=true ← 行頭の # を消しています。
    #port=12345
    #threads=104

劔を立ち上げます。

subro@UbuntuServer2404-1:~/tsurugidb-1.3.0$ $TSURUGI_HOME/bin/tgctl start
successfully launched tsurugidb.

立ち上がりました。
デフォルトでは [12345/tcp] で待ち受けているはずです。

subro@UbuntuServer2404-1:~$ sudo ss -atp
State    Recv-Q   Send-Q              Local Address:Port                 Peer Address:Port   Process
LISTEN   0        4096                   127.0.0.54:domain                    0.0.0.0:*       users:(("systemd-resolve",pid=700,fd=17))
LISTEN   0        4096                      0.0.0.0:12345                     0.0.0.0:*       users:(("tsurugidb",pid=1915,fd=8))
LISTEN   0        4096                127.0.0.53%lo:domain                    0.0.0.0:*       users:(("systemd-resolve",pid=700,fd=15))
LISTEN   0        4096                            *:ssh                             *:*       users:(("sshd",pid=1339,fd=3),("systemd",pid=1,fd=98))
ESTAB    0        52         [::ffff:192.168.1.103]:ssh        [::ffff:192.168.1.102]:41482   users:(("sshd",pid=1455,fd=4),("sshd",pid=1341,fd=4))

どうやらサーバー側はこれで良いようです。

次はクライアント側です。
私が普段遣いしている Lubuntu 24.04でやってみます。

丹沢のGitリポジトリをクローンします。

subro@Lubuntu2404:~/work/tsurugi$  git clone https://github.com/project-tsurugi/tanzawa.git
Cloning into 'tanzawa'...
remote: Enumerating objects: 6116, done.
remote: Counting objects: 100% (743/743), done.
remote: Compressing objects: 100% (424/424), done.
remote: Total 6116 (delta 290), reused 473 (delta 179), pack-reused 5373 (from 1)
Receiving objects: 100% (6116/6116), 1.21 MiB | 9.96 MiB/s, done.
Resolving deltas: 100% (2489/2489), done.
subro@Lubuntu2404:~/work/tsurugi$

subro@Lubuntu2404:~/work/tsurugi$ ls -l
合計 4
drwxrwxr-x 8 subro subro 4096  3月 22 09:28 tanzawa

[tanzawa]ディレクトリができましたので、そこに移動して内容を見てみます。

subro@Lubuntu2404:~/work/tsurugi$  cd tanzawa

subro@Lubuntu2404:~/work/tsurugi/tanzawa$ ls -l
合計 80
drwxrwxr-x 8 subro subro  4096  3月 22 17:29 ./
drwxrwxr-x 3 subro subro  4096  3月 22 17:29 ../
drwxrwxr-x 8 subro subro  4096  3月 22 17:29 .git/
-rw-rw-r-- 1 subro subro    44  3月 22 17:29 .gitattributes
drwxrwxr-x 3 subro subro  4096  3月 22 17:29 .github/
-rw-rw-r-- 1 subro subro   241  3月 22 17:29 .gitignore
-rw-rw-r-- 1 subro subro 11357  3月 22 17:29 LICENSE
-rw-rw-r-- 1 subro subro  1031  3月 22 17:29 README.md
-rw-rw-r-- 1 subro subro    38  3月 22 17:29 build.gradle
drwxrwxr-x 3 subro subro  4096  3月 22 17:29 buildSrc/
drwxrwxr-x 2 subro subro  4096  3月 22 17:29 docs/
drwxrwxr-x 3 subro subro  4096  3月 22 17:29 gradle/
-rwxrwxr-x 1 subro subro  8639  3月 22 17:29 gradlew*
-rw-rw-r-- 1 subro subro  2868  3月 22 17:29 gradlew.bat
drwxrwxr-x 5 subro subro  4096  3月 22 17:29 modules/
-rw-rw-r-- 1 subro subro   853  3月 22 17:29 settings.gradle

gradleってビルドツールを使ってんですね。

以下の手順に従って tgsqlコマンドをビルドします。
Tsurugi SQL console

[./modules/tgsql]ディレクトリに移ってから、ビルドコマンドを実行します。

subro@Lubuntu2404:~/work/tsurugi/tanzawa$ cd modules/tgsql

subro@Lubuntu2404:~/work/tsurugi/tanzawa/modules/tgsql$ ls -l
合計 20
-rw-rw-r-- 1 subro subro 5341  3月 22 17:29 README.md
drwxrwxr-x 4 subro subro 4096  3月 22 17:37 cli
drwxrwxr-x 4 subro subro 4096  3月 22 17:37 core
drwxrwxr-x 2 subro subro 4096  3月 22 17:29 docs

subro@Lubuntu2404:~/work/tsurugi/tanzawa/modules/tgsql$ ../../gradlew assemble
〜〜〜 省略 〜〜〜

BUILD SUCCESSFUL in 13s
31 actionable tasks: 31 executed

やや警告は出ましたが動作には問題ないようです。

[./cli/build/distributions]ディレクトリに移ります。

subro@Lubuntu2404:~/work/tsurugi/tanzawa/modules/tgsql$ cd cli/build/distributions

subro@Lubuntu2404:~/work/tsurugi/tanzawa/modules/tgsql/cli/build/distributions$  ls -l
合計 39376
-rw-rw-r-- 1 subro subro 10054351  3月 22 17:37 tgsql-1.9.0-SNAPSHOT-shadow.tar.gz
-rw-rw-r-- 1 subro subro 10055025  3月 22 17:37 tgsql-1.9.0-SNAPSHOT-shadow.zip
-rw-rw-r-- 1 subro subro 10101142  3月 22 17:37 tgsql-1.9.0-SNAPSHOT.tar.gz
-rw-rw-r-- 1 subro subro 10103773  3月 22 17:37 tgsql-1.9.0-SNAPSHOT.zip

圧縮形態が違うだけで無印とshadowという2種のセットができていました。

shadowの方は関連の jarファイル群を 1つの jarファイルに纏めたもののようです。
ここは shadowの方を使ってみます。

[tgsql-1.9.0-SNAPSHOT-shadow.zip]ファイルを解凍・展開します。

ubro@Lubuntu2404:~/work/tsurugi/tanzawa/modules/tgsql/cli/build/distributions$  unzip tgsql-1.9.0-SNAPSHOT-shadow.zip
Archive:  tgsql-1.9.0-SNAPSHOT-shadow.zip
   creating: tgsql-1.9.0-SNAPSHOT-shadow/
   creating: tgsql-1.9.0-SNAPSHOT-shadow/lib/
  inflating: tgsql-1.9.0-SNAPSHOT-shadow/lib/tgsql-1.9.0-SNAPSHOT-all.jar
   creating: tgsql-1.9.0-SNAPSHOT-shadow/bin/
  inflating: tgsql-1.9.0-SNAPSHOT-shadow/bin/tgsql.bat
  inflating: tgsql-1.9.0-SNAPSHOT-shadow/bin/tgsql

展開後の [bin]ディレクトリに移ります。

ubro@Lubuntu2404:~/work/tsurugi/tanzawa/modules/tgsql/cli/build/distributions$  cd tgsql-1.9.0-SNAPSHOT-shadow/bin

subro@Lubuntu2404:~/work/tsurugi/tanzawa/modules/tgsql/cli/build/distributions/tgsql-1.9.0-SNAPSHOT-shadow/bin$ ls -l
合計 12
-rwxr-xr-x 1 subro subro 5656  3月 22 17:37 tgsql
-rwxr-xr-x 1 subro subro 2172  3月 22 17:37 tgsql.bat

やっと tgsqlコマンドにたどり着きました。
実態はシェルスクリプトで、中で javaを実行していますね。
[tgsql.bat]は Windows用のバッチスクリプトです。

いよいよネットワーク越しに劔に接続してみます。

subro@Lubuntu2404:~/work/tsurugi/tanzawa/modules/tgsql/cli/build/distributions/tgsql-1.9.0-SNAPSHOT-shadow/bin$ ./tgsql -c tcp://UbuntuServer2404-1:12345
[main] INFO com.tsurugidb.tgsql.core.TgsqlRunner - establishing connection: tcp://UbuntuServer2404-1:12345
[main] INFO com.tsurugidb.tgsql.core.TgsqlRunner - start repl
tgsql> select * from tb1;
start transaction implicitly. option=[
  type: OCC
  label: "tgsql-implicit-transaction2025-03-22 17:59:55.209+09:00"
]
Time: 1.079 ms
[pk: INT4, c1: INT4]
[1, 100]
(1 row)
Time: 32.639 ms
transaction commit(DEFAULT) finished implicitly.
Time: 6.027 ms

先にサーバー側で作っていた [tb1]テーブルの検索ができました。\(^o^)/


==========
とりあえずこれで劔"Tsurugi"の触りは OKかと思います。

現在は JavaAPI(但しJDBCではない)や WebAPIがあり、またGUIベースの管理ツールもあるようです。

まだ各種開発言語用のドライバが全然無いのですが、これから開発されていくものと思われます。

私も触れたばかりなので、DBサーバーとしての運用管理に伴う技術については全く知らんのですが、Production環境での利用を想定しているのですから、当然そこも開発されているのだと思います。

まだまだ生まれたばかりで仕事でこれを使う機会に出会うか不明ながら、久々の国産物なので頑張って欲しいですね。


2023年10月5日刊で既に書籍が出ています。