redash의 구성을 하루에 파악하고 Pull requests를 보냈다.

최근 redash의 쿼리가 너무 많아서 Data Source별로 찾고 싶다는 요구가 강해져 왔기 때문에
redash 소스 코드를 리노베이션하여 데이터 소스를 검색 할 때 표시하는 기능을 추가하여 redash에 풀 요청을 보냈습니다. (채용되는지는 미정, 진척이 있으면 보고합니다.)
→ Search 탭 자체가 없어지는 것 같기 때문에, 닫았습니다・・・orz



데이터 소스 이름을 표시하고 정렬할 수 있을 뿐이라고 하는 미수정입니다만, 메이저인 OSS에 풀릭을 던지는 것은 실은 처음입니다.
모처럼이므로 redash를 소스 코드로부터 움직이는 방법과 메이저인 OSS에의 풀릭의 던지는 방법의 순서를 정리해 보겠습니다.

redash를 소스 코드에서 이동



redash는 다음과 같은 구성으로 되어 있습니다.

프런트 엔드
· d3js
· AngularJS v1
· webpack

백엔드
· 도커
· 파이썬
· flask
· SQLAlchemy
· redis
· Postgre SQL



Docker Based Developer Installation Guide 을 참고로 로컬 환경에서 소스 코드로부터 움직일 수 있도록(듯이) 합니다.

본가 redash의 저장소에서 포크.

  • Docker 및 Docker Compose 설치
  • Node.js 설치

  • 다음 명령으로 시작합니다.
    # npmパッケージをインストール
    $ npm install
    # テスト用データベース作成
    $ docker-compose run --rm server create_db
    $ docker-compose run --rm postgres psql -h postgres -U postgres -c "create database tests"
    # docker-composeでバックエンドのコンテナ群立ち上げ
    $ docker-compose up
    # フロントエンドビルド(初回のみ必要)
    $ npm run build
    # フロントエンド起動(webpack-dev-server)
    $ npm run start
    

    백엔드는 http://localhost:5000로 시작,
    프런트 엔드(webpack-dev-server)는 http://localhost:8080로 시작됩니다.

    Postgre SQL 내부 보기



    백엔드는 다음과 같은 컨테이너가 시작됩니다.
    $ docker ps
    CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                    NAMES
    53ea8093c321        redash_worker           "/app/bin/docker-ent…"   3 days ago          Up 20 hours         5000/tcp                 redash_worker_1
    c5a218e0c0c3        redash_server           "/app/bin/docker-ent…"   3 days ago          Up 20 hours         0.0.0.0:5000->5000/tcp   redash_server_1
    95f3fcd66974        postgres:9.5.6-alpine   "docker-entrypoint.s…"   3 days ago          Up 20 hours         5432/tcp                 redash_postgres_1
    0d7739b265e3        redis:3.0-alpine        "docker-entrypoint.s…"   3 days ago          Up 20 hours         6379/tcp                 redash_redis_1
    

    redash의 데이터는 postgre SQL에 있으므로 데이터를 보려면 redash_postgres_1 컨테이너에 액세스합니다.
    $ docker exec -it redash_postgres_1 bash
    

    postgre sql의 명령은이 측면을 참조합니다.
    참고: PostgreSQL과 MySQL에서 내가 자주 사용하는 시스템 명령 메모

    docker-compose.yml을 보면 postgresql://postgres@postgres/postgres로 연결되어 있기 때문에
    다음 명령을 사용하여 psql로 DB에 액세스할 수 있습니다.
    # psql -U postgres postgres
    

    코딩



    백엔드 쪽은 아래의 기사가 참고가 됩니다.
    【Python】Flask로 API를 사쿠토 만들기
    SQLAlchemy에서 SQL의 기본 쿼리 요약 (Python ORM)

    코드 수정 → 보존시는 프런트 엔드 측, 백 엔드 측 모두 공동 오토 리로드 해주는 설정이되어 있기 때문에,
    서버를 다시 시작하거나 브라우저를 다시로드 할 필요가 없습니다.

    프런트 엔드는 ESLint 설정(.eslintrc 파일)을 따라야 합니다.
    제 경우에는 편집기가 vscode를 사용하기 때문에,
    아래 기사의 ESLint 설정을하고 있습니다.

    참고: 2018년 자바스크립트 코드 포맷터 사정

    코딩 스타일은 eslint 규칙을 따르지 않으면 풀릭시 lint 오류가 발생하므로 잘 설정하고 코딩 스타일을 따릅니다.

    Pull requests 보내기



    redash의 New pull request에서 Pull requests를 보냅니다.



    compare across forks에서 fork한 리포지토리의 branch를 지정합니다.
    나머지는 보통 풀릭과 같습니다.



    Pull requests를 보낼 때의 주의점



    비교적 큰 OSS의 경우는 Pull requests를 던질 때의 규칙이 readme에 쓰여지기도 합니다.
    OSS별로 개발 이정표가 있으므로 각 리포지토리마다 규칙이 다릅니다.
    다음은 redash의 Pull requests를 던질 때의 주의점입니다.

    신규 기능 추가 시의 주의점에 쓰여진 것은
    · 로드맵에 기여하지 않았는지 확인(Trello),
    새로운 경우 포럼에 대화를 세우고 토론합니다.
    규칙이 된 것 같습니다.

    이번은 상기 로드맵에 포함되지 않고, 미정정의 기능 때문에, 그대로 던져 버렸습니다.

    끝에



    주요 라이브러리와 도구이기 때문에 개선 할 수 있다면 모두 행복 할 수 있습니다.
    팔에 자신이 있어 미수정 레벨이라면 겁먹지 않고 풀릭 던져 보는 것도 좋은 것이 아닐까 생각했습니다.
    이 근처가 OSS의 좋은 곳이고, 이 기사가 내디디지 않고 있는 사람의 도움이 되면 좋다고 생각합니다.

    좋은 웹페이지 즐겨찾기