tbls를 사용하여 테이블의 Plantuml을 생성 & vscode로 표시까지 해본다
소개
테이블 정의를 바탕으로 ER 그림을 만들 수 있으면 편리하네요.
이 기사에서는 tbls 을 사용하여 테이블 정의를 기반으로 uml( PlantUML )을 생성하고 해당 uml을 vscode로 확인할 때까지의 단계를 소개합니다.
개발 머신
OS: macOS Catalina
버전: 10.15.4
Plantuml 환경 구축
필요한 것은 이하 3점.
자바
Java는 다음 사이트에서 다운로드하여 설치하십시오.
htps : // 그럼 ゔ아. 코 m/그럼/
그건 그렇고, 내 자바 환경은 이미 다음과 같은 상태였기 때문에 스루.
$ java --version
java 13.0.1 2019-10-15
Java(TM) SE Runtime Environment (build 13.0.1+9)
Java HotSpot(TM) 64-Bit Server VM (build 13.0.1+9, mixed mode, sharing)
Graphviz
Graphviz는 다음과 같이 설치됩니다.
brew install install graphviz
PlantUML
PlantUML 플러그인은 다음을 설치
이것만이었을 것입니다!
tbls의 환경 구축
tbls를 다음과 같이 설치
brew install k1LoW/tap/tbls
이쪽도 이것뿐이었을 것.
tbls를 사용하여 PlantUML을 확인해보십시오!
환경 구축이 성공했다고 믿고, 실제로 tbls 명령 실행 -> PlantUML 생성 -> PlantUML 확인까지를 시도해 갑니다!
예 1. MySQL
MySQL 설정
곧 시도하고 싶었기 때문에 로컬 PC 환경 바로 아래에 DB 테이블을 설정했습니다.
$ mysql --version
mysql Ver 8.0.25 for macos10.15 on x86_64 (Homebrew)
$ mysql.server start
$ mysql -uroot
mysql> CREATE TABLE departments (
department_id int primary key,
department_name varchar(20)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
mysql> CREATE TABLE employees (
employee_id int primary key,
department_id int,
name varchar(20),
age int,
CONSTRAINT fk_department_id
FOREIGN KEY (department_id)
REFERENCES departments (department_id)
ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=INNODB DEFAULT CHARSET=utf8;
PlantUML 생성 및 확인
다음과 같이 mysql의 프로세스가 살아 있는지 확인하고,
lsof -i | grep mysql
mysqld 68269 fukazawakeisuke 31u IPv4 0x3e18e99c4a7abba3 0t0 TCP localhost:33060 (LISTEN)
mysqld 68269 fukazawakeisuke 35u IPv4 0x3e18e99c4a186ba3 0t0 TCP localhost:mysql (LISTEN)
tbls out my://root:mypass@localhost:33306/testdb -t cacoo -o schema.csv
위의 tbls 명령 예제를 참조하여 다음을 수행했습니다.
tbls out my://root:@localhost:3306/hoge -t plantuml -o hoge.plantuml
그러면 방금 만든 MySQL의 테이블 정의가 다음과 같이 PlantUML로 생성되어 있는지 확인할 수 있습니다.
$ cat hoge.plantuml
@startuml
!define table(name, desc) entity name as "desc" << (T,#5DBCD2) >>
!define view(name, desc) entity name as "desc" << (V,#C6EDDB) >>
!define column(name, type, desc) name <font color="#666666">[type]</font><font color="#333333">desc</font>
hide methods
hide stereotypes
skinparam class {
BackgroundColor White
BorderColor #6E6E6E
ArrowColor #6E6E6E
}
' tables
table("departments", "departments") {
column("+ department_id", "int", "")
column("department_name", "varchar(20)", "")
}
table("employees", "employees") {
column("+ employee_id", "int", "")
column("# department_id", "int", "")
column("name", "varchar(20)", "")
column("age", "int", "")
}
' relations
"employees" }-- "departments" : "FOREIGN KEY (department_id) REFERENCES departments (department_id)"
@enduml
생성된 PlantUML은 vscode에서 다음과 같이 확인할 수 있습니다!
예 2. BigQuery
BigQuery 설정
※테이블(VIEW)의 작성을 GCP의 콘솔상에서 실시했습니다.
※콘솔상의 조작 설명은 생략합니다.
먼저 다음 명령으로 로그인합니다.
gcloud auth application-default login
BigQuery의 스키마와 테이블이 각각 다음 상태로 설정되어 있는지 확인합니다.
$ bq ls
datasetId
--------------------
training_dataset_1
$ bq ls training-project-314502:training_dataset_1
tableId Type Labels Time Partitioning Clustered Fields
------------------------------- ------- -------- ------------------- ------------------
departments TABLE
employee_and_departments_view VIEW
employees TABLE
$ bq query --nouse_legacy_sql \
> 'SELECT * FROM `training-project-314502.training_dataset_1`.INFORMATION_SCHEMA.COLUMNS'
Waiting on bqjob_r474bd2474752300_00000179f5b4a5da_1 ... (0s) Current status: DONE
+-------------------------+--------------------+-------------------------------+-----------------+------------------+-------------+-----------+--------------+-----------------------+-----------+-----------+--------------+-------------------+------------------------+-----------------------------+
| table_catalog | table_schema | table_name | column_name | ordinal_position | is_nullable | data_type | is_generated | generation_expression | is_stored | is_hidden | is_updatable | is_system_defined | is_partitioning_column | clustering_ordinal_position |
+-------------------------+--------------------+-------------------------------+-----------------+------------------+-------------+-----------+--------------+-----------------------+-----------+-----------+--------------+-------------------+------------------------+-----------------------------+
| training-project-314502 | training_dataset_1 | employees | employee_id | 1 | YES | INT64 | NEVER | NULL | NULL | NO | NULL | NO | NO | NULL |
| training-project-314502 | training_dataset_1 | employees | department_id | 2 | YES | INT64 | NEVER | NULL | NULL | NO | NULL | NO | NO | NULL |
| training-project-314502 | training_dataset_1 | employees | name | 3 | YES | STRING | NEVER | NULL | NULL | NO | NULL | NO | NO | NULL |
| training-project-314502 | training_dataset_1 | employees | age | 4 | YES | INT64 | NEVER | NULL | NULL | NO | NULL | NO | NO | NULL |
| training-project-314502 | training_dataset_1 | employee_and_departments_view | employee_id | 1 | YES | INT64 | NEVER | NULL | NULL | NO | NULL | NO | NO | NULL |
| training-project-314502 | training_dataset_1 | employee_and_departments_view | department_id | 2 | YES | INT64 | NEVER | NULL | NULL | NO | NULL | NO | NO | NULL |
| training-project-314502 | training_dataset_1 | employee_and_departments_view | name | 3 | YES | STRING | NEVER | NULL | NULL | NO | NULL | NO | NO | NULL |
| training-project-314502 | training_dataset_1 | employee_and_departments_view | age | 4 | YES | INT64 | NEVER | NULL | NULL | NO | NULL | NO | NO | NULL |
| training-project-314502 | training_dataset_1 | employee_and_departments_view | department_id_1 | 5 | YES | INT64 | NEVER | NULL | NULL | NO | NULL | NO | NO | NULL |
| training-project-314502 | training_dataset_1 | employee_and_departments_view | department_name | 6 | YES | STRING | NEVER | NULL | NULL | NO | NULL | NO | NO | NULL |
| training-project-314502 | training_dataset_1 | departments | department_id | 1 | YES | INT64 | NEVER | NULL | NULL | NO | NULL | NO | NO | NULL |
| training-project-314502 | training_dataset_1 | departments | department_name | 2 | YES | STRING | NEVER | NULL | NULL | NO | NULL | NO | NO | NULL |
+-------------------------+--------------------+-------------------------------+-----------------+------------------+-------------+-----------+--------------+-----------------------+-----------+-----------+--------------+-------------------+------------------------+-----------------------------+
PlantUML 생성 및 확인
MySQL 때와 마찬가지로 다음 명령으로 PlantUML을 생성합니다.
$ tbls out bq://training-project-314502/training_dataset_1 -t plantuml -o training_dataset_1.plantuml
다음과 같이 생성된 PlantUML을 확인합니다.
$ cat training_dataset_1.plantuml
@startuml
!define table(name, desc) entity name as "desc" << (T,#5DBCD2) >>
!define view(name, desc) entity name as "desc" << (V,#C6EDDB) >>
!define column(name, type, desc) name <font color="#666666">[type]</font><font color="#333333">desc</font>
hide methods
hide stereotypes
skinparam class {
BackgroundColor White
BorderColor #6E6E6E
ArrowColor #6E6E6E
}
' tables
table("departments", "departments") {
column("department_id", "INTEGER", "")
column("department_name", "STRING", "")
}
view("employee_and_departments_view", "employee_and_departments_view") {
column("employee_id", "INTEGER", "")
column("department_id", "INTEGER", "")
column("name", "STRING", "")
column("age", "INTEGER", "")
column("department_id_1", "INTEGER", "")
column("department_name", "STRING", "")
}
table("employees", "employees") {
column("employee_id", "INTEGER", "")
column("department_id", "INTEGER", "")
column("name", "STRING", "")
column("age", "INTEGER", "")
}
' relations
@enduml
여기도 마찬가지로 vscode에서 PlantUML을 표시해 보았습니다.
Reference
이 문제에 관하여(tbls를 사용하여 테이블의 Plantuml을 생성 & vscode로 표시까지 해본다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/neo_fukafukafukka/items/4a1126870143452944b1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)