8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

新しい IBM i データベース クライアント Mapepire

Last updated at Posted at 2025-08-01

Mapepire の登場

IBM i の Db2 for i 向けに新たなデータベースクライアントが2024年8月から提供されています。
https://mapepire-ibmi.github.io/

Mapepire は、"マパピー" と発音するようです。
公式には、「mapəpɪə」または「MAH-pup-ee」と発音とのこと。

これまでは、ODBCやJDBCといったデータベースドライバーを使用していました。
Mapepireを発表したブログでは、JTOpenやODBCといった従来のクライアントについて下記のように記述しています。

  • CCSIDの処理を内部で行っており、コード量が多く複雑
  • プロトコル仕様が非公開または不十分
    • 新しい言語でクライアントを実装するにはリバースエンジニアリングが必要

Mapepireでは、ほぼ全てがオープンソースで構成されており、サーバーにエンコーディングやパスワードレベルの処理を任せることで、クライアントの軽量化を実現しているとのことです。
これにより、より多くの言語、プラットフォームで動作する新しいアプリケーションをより簡単に作成できるようになるとのこと。

それでは、実際の利用方法を見ていきましょう。

サーバー準備

Mapepireは、IBM i 上に yum を利用することでインストールできます。
Mapepireのパッケージがインストールできることが確認できます。

~ # yum search mapepire
ibmi-base                                                                    | 3.6 kB  00:00:00
ibmi-base/primary_db                                                         | 474 kB  00:00:01
ibmi-release                                                                 | 2.9 kB  00:00:00
====================================== N/S Matched: mapepire =======================================
mapepire-server.noarch : Cloud-native database access server for IBM i

インストールは、yum install mapepire-server で実行可能です。

~ # yum install mapepire-server
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package mapepire-server.noarch 0:2.3.2-1 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

====================================================================================================
 Package                      Arch                Version              Repository              Size
====================================================================================================
Installing:
 mapepire-server              noarch              2.3.2-1              ibmi-base              3.5 M

Transaction Summary
====================================================================================================
Upgrade       1 Package

Total download size: 3.5 M
Is this ok [y/N]: y
Downloading Packages:
mapepire-server-2.3.2-1.ibmi7.3.noarch.rpm                                   | 3.5 MB  00:00:02
Running Transaction Check
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : mapepire-server-2.3.2-1.noarch               1/1 

Installed:
  mapepire-server.noarch 0:2.3.2-1

Complete!

インストールが完了したら、Service Commander sc を使用してサーバーを起動します。
sc start mapepireで起動します。

~ # sc start mapepire
Performing operation 'START' on service 'mapepire'
Service 'Mapepire Server' successfully started

このscコマンドは、Mapepireだけでなく他の用途もあるのですが、今回はMapepire Serverの起動用コマンドとしておきます。
scコマンドのオプションは、以下のようになっています。

~ # sc -h
Usage: sc  [options] <operation> <service>

    Valid options include:
        -v: verbose mode
        -q: quiet mode (suppress warnings). Ignored when '-v' is specified
        --disable-colors: disable colored output
        --splf: send output to *SPLF when submitting jobs to batch (instead of log)
        --sampletime=x.x: sampling time(s) when gathering performance info (default is 1)
        --ignore-globals: ignore globally-configured services
        --ignore-groups=x,y,z: ignore services in the specified groups (default is 'system')
        --all/-a: don't ignore any services. Overrides --ignore-globals and --ignore-groups

    Valid operations include:
        start: start the service (and any dependencies)
        stop: stop the service (and dependent services)
        kill: stop the service (and dependent services) forcefully
        restart: restart the service
        check: check status of the service
        info: print configuration info about the service
        jobinfo: print basic performance info about the service
        perfinfo: print basic performance info about the service
        loginfo: get log file info for the service (if running)
        list: print service short name and friendly name
        groups: print an overview of all groups
    Valid formats of the <service(s)> specifier include:
        - the short name of a configured service
        - A special value of "all" to represent all configured services (same as "group:all")
        - A group identifier (e.g. "group:groupname")
        - the path to a YAML file with a service configuration
        - An ad hoc service specification by port (for instance, "port:8080")
        - An ad hoc service specification by job name (for instance, "job:ZOOKEEPER")
        - An ad hoc service specification by subsystem and job name (for instance, "job:QHTTPSVR/ADMIN2")

これで、サーバー側の設定は完了しました。

クライアントの実装

現在、Python、Node.js、Javaのクライアントライブラリが用意されており、それぞれサンプルアプリが用意されています。
こちらに各クライアントの利用方法が記載されています。
また、サンプルも用意されています。

今回は、Pythonでの実装方法を試してみます。

Pythonで利用する場合は、まずPython用の mapepire-python パッケージが必要になります。
pip install mapepire-python でインストールできます。

~ # pip install mapepire-python
Collecting mapepire-python
  Downloading mapepire_python-0.2.0-py3-none-any.whl.metadata (33 kB)
Collecting dataclasses-json>=0.6.4 (from mapepire-python)
  Downloading dataclasses_json-0.6.7-py3-none-any.whl.metadata (25 kB)
Requirement already satisfied: websockets>=14.0 in ./vllm-venv/lib64/python3.12/site-packages (from mapepire-python) (15.0.1)
Collecting pyee (from mapepire-python)
  Downloading pyee-13.0.0-py3-none-any.whl.metadata (2.9 kB)
Collecting pep249abc (from mapepire-python)
  Downloading pep249abc-0.0.1b3-py3-none-any.whl.metadata (5.5 kB)
Collecting marshmallow<4.0.0,>=3.18.0 (from dataclasses-json>=0.6.4->mapepire-python)
  Downloading marshmallow-3.26.1-py3-none-any.whl.metadata (7.3 kB)
Collecting typing-inspect<1,>=0.4.0 (from dataclasses-json>=0.6.4->mapepire-python)
  Downloading typing_inspect-0.9.0-py3-none-any.whl.metadata (1.5 kB)
Requirement already satisfied: packaging>=17.0 in ./vllm-venv/lib64/python3.12/site-packages (from marshmallow<4.0.0,>=3.18.0->dataclasses-json>=0.6.4->mapepire-python) (25.0)
Collecting mypy-extensions>=0.3.0 (from typing-inspect<1,>=0.4.0->dataclasses-json>=0.6.4->mapepire-python)
  Downloading mypy_extensions-1.1.0-py3-none-any.whl.metadata (1.1 kB)
Requirement already satisfied: typing-extensions>=3.7.4 in ./vllm-venv/lib64/python3.12/site-packages (from typing-inspect<1,>=0.4.0->dataclasses-json>=0.6.4->mapepire-python) (4.12.2)
Downloading mapepire_python-0.2.0-py3-none-any.whl (40 kB)
Downloading dataclasses_json-0.6.7-py3-none-any.whl (28 kB)
Downloading marshmallow-3.26.1-py3-none-any.whl (50 kB)
Downloading typing_inspect-0.9.0-py3-none-any.whl (8.8 kB)
Downloading mypy_extensions-1.1.0-py3-none-any.whl (5.0 kB)
Downloading pep249abc-0.0.1b3-py3-none-any.whl (18 kB)
Downloading pyee-13.0.0-py3-none-any.whl (15 kB)
Installing collected packages: pyee, pep249abc, mypy-extensions, marshmallow, typing-inspect, dataclasses-json, mapepire-python
Successfully installed dataclasses-json-0.6.7 mapepire-python-0.2.0 marshmallow-3.26.1 mypy-extensions-1.1.0 pep249abc-0.0.1b3 pyee-13.0.0 typing-inspect-0.9.0

設定ファイルを用意します。
このファイルには、Db2 for i への接続情報を記述します。
SERVER, PORT, USER, PASSWORDのところはお使いの環境に合わせて変更してください。
mapepire-server のデフォルトポートが 8076 になっているので、何も変更をしていない場合 8076 を記入してください。

mapepire.ini
[mapepire]
SERVER="SERVER"
PORT="PORT"
USER="USER"
PASSWORD="PASSWORD"

それでは、スキーマ DEMOLIB にある テーブル TOKMSP を2レコード表示する Python のコードを作ります。

TOKMSP は、下記画像のようなレコードが登録されています。
image.png

下記のサンプルを参考にして作成しています。
https://github.com/Mapepire-IBMi/samples/tree/main/python

出力結果が少し見やすいように、JSON形式で出力されるようにしています。

get_tokmsp.py
import configparser
from mapepire_python.client.sql_job import SQLJob
from mapepire_python.data_types import DaemonServer
import json

config = configparser.ConfigParser()
config.read('mapepire.ini')

creds = DaemonServer(
    host=config['mapepire']['SERVER'],
    port=config['mapepire']['PORT'],
    user=config['mapepire']['USER'],
    password=config['mapepire']['PASSWORD'],
    ignoreUnauthorized=True
)

with SQLJob(creds) as sql_job:
    with sql_job.query("select * from DEMOLIB.TOKMSP") as query:
        result = query.run(rows_to_fetch=2)

        [print(json.dumps(s, ensure_ascii=False)) for s in result['data']]

出力結果は、以下のようになります。
日本語も正しく表示されています。
全角スペースなどの処理が必要な場合もありますが、文字列の操作で対応できるはずです。

~ # python get_tokmsp.py | jq .
{
  "TKBANG": "01010",
  "TKNAKN": "アイ リヨカン",
  "TKNAKJ": "阿井旅館     ",
  "TKADR1": "東京都渋谷区   ",
  "TKADR2": "桜ヶ丘30",
  "TKTIKU": "02",
  "TKPOST": "151",
  "TKTELE": "03-504-9293",
  "TKGURI": 698500,
  "TKNURI": 4086300,
  "TKZURI": 6615600,
  "TKUZAN": 1000000,
  "TKGEND": 1100000,
  "TKNYUK": 880427,
  "TKSIME": "2"
}
{
  "TKBANG": "01020",
  "TKNAKN": "アイ コウギヨウ",
  "TKNAKJ": "阿井工業     ",
  "TKADR1": "東京都渋谷区   ",
  "TKADR2": "渋谷1-3    ",
  "TKTIKU": "02",
  "TKPOST": "150",
  "TKTELE": "03-535-5951",
  "TKGURI": 452800,
  "TKNURI": 2713600,
  "TKZURI": 4483700,
  "TKUZAN": 670000,
  "TKGEND": 1150000,
  "TKNYUK": 880607,
  "TKSIME": "2"
}
8
2
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?