※当サイトの記事には、広告・プロモーションが含まれます。

Redmineで利用されるデータベースのテーブル定義の一覧が公開されていないという衝撃...

codezine.jp

 Dockerは、7月22日、Composeファイルの作成・編集を支援する新機能を「Docker Language Server」に追加したことを発表した。

Docker、Composeファイルの編集をサポートする「Docker Language Server」の新機能を追加|CodeZine(コードジン)

 Docker Language ServerはLanguage Server Protocol(LSP)をベースに構築されているため、LSP対応のあらゆるエディタと接続して利用できる。

Docker、Composeファイルの編集をサポートする「Docker Language Server」の新機能を追加|CodeZine(コードジン)

 これらの機能を試すには、VS Code向けの拡張機能「Docker DX」をインストールするか、Docker Language Serverをダウンロードして、任意のエディターに統合する。

Docker、Composeファイルの編集をサポートする「Docker Language Server」の新機能を追加|CodeZine(コードジン)

⇧ とりあえず、「VS CodeVisual Studio Code)」を利用している環境で「Docker Compose」を利用する機会があれば、「拡張機能」を追加してみますかね...

Redmineで利用されるデータベースのテーブル定義の一覧が公開されていないという衝撃...

一応、公式のドキュメントを見た感じ、

github.com

⇧「Ruby」で「DDL」相当の処理をハードコーディングしていらっしゃる...

しかも、「テーブル定義」の一覧っぽい情報のページが見当たらないというね...

ネットの情報を漁っていたところ、

kiwamu.hatenadiary.org

⇧ 自力で「リバースエンジニアリング」しないといけないってことなんかな?

衝撃的過ぎるんだが...

とりあえず、「テーブル」一覧を把握するための「DDL」を取得するには、

www.redmine.org

⇧ 利用している「データベース」に依存するっぽいですな...

公式のドキュメントによると、

redmine.jp

⇧ 各々の「データベース」毎のコマンドを紹介してくれておりますが、いずれにしろ、一度、「Redmine」を構築する必要があるっぽい...

ちなみに、

  1. MySQL
  2. PostgreSQL
  3. SQLite

の3つしか紹介されていないのだが、他の「データベース」は利用できないってことなんですかね?

 

そして、

qiita.com

zenn.dev

⇧ 上記サイト様によりますと、「Docker Compose」による構築にも対応しているらしい。

「Docker Hub」の「Redmine」の「Official Image」のページに、

⇧「MySQL」の場合の例は紹介されていた。

リバースエンジニアリングでテーブル一覧を把握するためのDDLを出力してみる

というわけで、一旦、「Redmine」の環境を構築して、「リバースエンジニアリング」で「DDL」を出力してみる。

「WSL 2(Windows Subsystem for Linux 2)」にインストールしている「Ubuntu 24.04 LTS」で試してみる。

「Docker Compose」が利用できるように、「Docker」などインストールしている状態です。

Ubuntu 24.04 LTS」にSSHログイン後、「Compose file」を作成し、以下のように追記。

■/home/ts0818/work-soft/redmine/docker-compose.yml

services:
  redmine:
    image: redmine:5.0.4-bullseye
    ports:
      - 8080:3000
    environment:
      REDMINE_DB_POSTGRES: redmine-db
      REDMINE_DB_DATABASE: redmine
      REDMINE_DB_USERNAME: redmine_user
      REDMINE_DB_PASSWORD: redmine_password
      REDMINE_SECRET_KEY_BASE: supersecretkey
      REDMINE_DB_PORT: 5432
    volumes:
      - /home/ts0818/work-soft/redmine/files:/usr/src/redmine/files

  redmine-db:
    image: postgres:15.1-bullseye
    ports:
      - 5432:5432
    environment:
      POSTGRES_DB: redmine
      POSTGRES_USER: redmine_user
      POSTGRES_PASSWORD: redmine_password
    volumes:
      - /home/ts0818/work-soft/redmine/data:/var/lib/postgresql/data    

■Docker Compose環境を構築

cd /home/ts0818/work-soft/redmine
pwd
sudo docker compose up -d

PostgreSQLがインストールされているコンテナにログイン

sudo docker compose exec -ti redmin-db bash    

■ダンプ(バイナリファイル)

※ 別のマシンで復元したいわけではないので、バイナリファイルではなくテキストファイルでダンプすれば良かったかも...

/usr/bin/pg_dump -U redmine_user -h localhost -Fc --file=redmine.sqlc redmine   

■バイナリファイルからテキストファイルに変換

pg_restore -f redmine.sql redmine.sqlc  

PostgreSQLがインストールされているコンテナからログアウト

exit

Windows側にコピー

sudo cp data/redmine.sql /mnt/c/Users/toshinobu/redmine.sql

redmine.sqlの中身を確認

ファイルの行数が、「はてなブログ」の許容する行数をオーバーするので、「GitHub」にアップしました。

github.com

⇧ と言った感じで、「DDL」が出力できたっぽい。

「CREATE TABLE」でフィルタリングすれば、「Redmine」で利用している「データベース」の「テーブル」の一覧は把握できそうではある...

とりあえず、「サクラエディタ」の「grep」を利用して「CREATE TABLE」を含む行を抽出してみたところ、

□検索条件  "CREATE TABLE"
検索対象       *.*
フォルダー       D:\work-soft\redmine
除外ファイル   *.msi;*.exe;*.obj;*.pdb;*.ilk;*.res;*.pch;*.iobj;*.ipdb
除外フォルダー   .git;.svn;.vs
    (サブフォルダーも検索)
    (英大文字小文字を区別する)
    (正規表現:bregonig.dll Ver.4.20 with Onigmo 6.2.0)
    (文字コードセットの自動判別)
    (一致した行を出力)


D:\work-soft\redmine\redmine.sql(27,1)  [UTF-8]: CREATE TABLE public.ar_internal_metadata (
D:\work-soft\redmine\redmine.sql(41,1)  [UTF-8]: CREATE TABLE public.attachments (
D:\work-soft\redmine\redmine.sql(86,1)  [UTF-8]: CREATE TABLE public.auth_sources (
D:\work-soft\redmine\redmine.sql(135,1)  [UTF-8]: CREATE TABLE public.boards (
D:\work-soft\redmine\redmine.sql(176,1)  [UTF-8]: CREATE TABLE public.changes (
D:\work-soft\redmine\redmine.sql(216,1)  [UTF-8]: CREATE TABLE public.changeset_parents (
D:\work-soft\redmine\redmine.sql(228,1)  [UTF-8]: CREATE TABLE public.changesets (
D:\work-soft\redmine\redmine.sql(269,1)  [UTF-8]: CREATE TABLE public.changesets_issues (
D:\work-soft\redmine\redmine.sql(281,1)  [UTF-8]: CREATE TABLE public.comments (
D:\work-soft\redmine\redmine.sql(320,1)  [UTF-8]: CREATE TABLE public.custom_field_enumerations (
D:\work-soft\redmine\redmine.sql(357,1)  [UTF-8]: CREATE TABLE public.custom_fields (
D:\work-soft\redmine\redmine.sql(408,1)  [UTF-8]: CREATE TABLE public.custom_fields_projects (
D:\work-soft\redmine\redmine.sql(420,1)  [UTF-8]: CREATE TABLE public.custom_fields_roles (
D:\work-soft\redmine\redmine.sql(432,1)  [UTF-8]: CREATE TABLE public.custom_fields_trackers (
D:\work-soft\redmine\redmine.sql(444,1)  [UTF-8]: CREATE TABLE public.custom_values (
D:\work-soft\redmine\redmine.sql(481,1)  [UTF-8]: CREATE TABLE public.documents (
D:\work-soft\redmine\redmine.sql(519,1)  [UTF-8]: CREATE TABLE public.email_addresses (
D:\work-soft\redmine\redmine.sql(558,1)  [UTF-8]: CREATE TABLE public.enabled_modules (
D:\work-soft\redmine\redmine.sql(593,1)  [UTF-8]: CREATE TABLE public.enumerations (
D:\work-soft\redmine\redmine.sql(634,1)  [UTF-8]: CREATE TABLE public.groups_users (
D:\work-soft\redmine\redmine.sql(646,1)  [UTF-8]: CREATE TABLE public.import_items (
D:\work-soft\redmine\redmine.sql(684,1)  [UTF-8]: CREATE TABLE public.imports (
D:\work-soft\redmine\redmine.sql(725,1)  [UTF-8]: CREATE TABLE public.issue_categories (
D:\work-soft\redmine\redmine.sql(761,1)  [UTF-8]: CREATE TABLE public.issue_relations (
D:\work-soft\redmine\redmine.sql(798,1)  [UTF-8]: CREATE TABLE public.issue_statuses (
D:\work-soft\redmine\redmine.sql(835,1)  [UTF-8]: CREATE TABLE public.issues (
D:\work-soft\redmine\redmine.sql(891,1)  [UTF-8]: CREATE TABLE public.journal_details (
D:\work-soft\redmine\redmine.sql(929,1)  [UTF-8]: CREATE TABLE public.journals (
D:\work-soft\redmine\redmine.sql(968,1)  [UTF-8]: CREATE TABLE public.member_roles (
D:\work-soft\redmine\redmine.sql(1004,1)  [UTF-8]: CREATE TABLE public.members (
D:\work-soft\redmine\redmine.sql(1041,1)  [UTF-8]: CREATE TABLE public.messages (
D:\work-soft\redmine\redmine.sql(1085,1)  [UTF-8]: CREATE TABLE public.news (
D:\work-soft\redmine\redmine.sql(1125,1)  [UTF-8]: CREATE TABLE public.projects (
D:\work-soft\redmine\redmine.sql(1173,1)  [UTF-8]: CREATE TABLE public.projects_trackers (
D:\work-soft\redmine\redmine.sql(1185,1)  [UTF-8]: CREATE TABLE public.queries (
D:\work-soft\redmine\redmine.sql(1228,1)  [UTF-8]: CREATE TABLE public.queries_roles (
D:\work-soft\redmine\redmine.sql(1240,1)  [UTF-8]: CREATE TABLE public.repositories (
D:\work-soft\redmine\redmine.sql(1285,1)  [UTF-8]: CREATE TABLE public.roles (
D:\work-soft\redmine\redmine.sql(1328,1)  [UTF-8]: CREATE TABLE public.roles_managed_roles (
D:\work-soft\redmine\redmine.sql(1340,1)  [UTF-8]: CREATE TABLE public.schema_migrations (
D:\work-soft\redmine\redmine.sql(1351,1)  [UTF-8]: CREATE TABLE public.settings (
D:\work-soft\redmine\redmine.sql(1387,1)  [UTF-8]: CREATE TABLE public.time_entries (
D:\work-soft\redmine\redmine.sql(1433,1)  [UTF-8]: CREATE TABLE public.tokens (
D:\work-soft\redmine\redmine.sql(1471,1)  [UTF-8]: CREATE TABLE public.trackers (
D:\work-soft\redmine\redmine.sql(1510,1)  [UTF-8]: CREATE TABLE public.user_preferences (
D:\work-soft\redmine\redmine.sql(1547,1)  [UTF-8]: CREATE TABLE public.users (
D:\work-soft\redmine\redmine.sql(1600,1)  [UTF-8]: CREATE TABLE public.versions (
D:\work-soft\redmine\redmine.sql(1642,1)  [UTF-8]: CREATE TABLE public.watchers (
D:\work-soft\redmine\redmine.sql(1678,1)  [UTF-8]: CREATE TABLE public.wiki_content_versions (
D:\work-soft\redmine\redmine.sql(1719,1)  [UTF-8]: CREATE TABLE public.wiki_contents (
D:\work-soft\redmine\redmine.sql(1758,1)  [UTF-8]: CREATE TABLE public.wiki_pages (
D:\work-soft\redmine\redmine.sql(1796,1)  [UTF-8]: CREATE TABLE public.wiki_redirects (
D:\work-soft\redmine\redmine.sql(1834,1)  [UTF-8]: CREATE TABLE public.wikis (
D:\work-soft\redmine\redmine.sql(1870,1)  [UTF-8]: CREATE TABLE public.workflows (
54 個が検索されました。

⇧ 54行がヒットしたので、「テーブル」の数としては54個ということになるんかね?

 

ただ、無茶苦茶、面倒くさいんだが...

おまけに、「テーブル」一覧が把握できたところで、「Redmine」の開発者でもない限り「データモデリング」の意図とかは分からないからなぁ...

そして、「MySQL」の場合は「MySQL Workbench」で「DDL」から「ER図」の作成できるのだけど、「PostgreSQL」の場合は対応しているツールが無さそうなので、結局のところ、「データベース」が構築された状態からでないと「ER図」の作成ができ無さそうなのよね...

毎度モヤモヤ感が半端ない…

今回はこのへんで。