tbls를 사용하여 테이블의 Plantuml을 생성 & vscode로 표시까지 해본다

12093 단어 tblsplantuml

소개



테이블 정의를 바탕으로 ER 그림을 만들 수 있으면 편리하네요.

이 기사에서는 tbls 을 사용하여 테이블 정의를 기반으로 uml( PlantUML )을 생성하고 해당 uml을 vscode로 확인할 때까지의 단계를 소개합니다.

개발 머신



OS: macOS Catalina
버전: 10.15.4

Plantuml 환경 구축



필요한 것은 이하 3점.
  • Java 실행 환경
  • Graphviz라는 소프트웨어
  • PlantUML이라는 vscode 플러그인

  • 자바



    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을 표시해 보았습니다.

    좋은 웹페이지 즐겨찾기