> [English](https://github.com/bakhirev/assayo) | [Español](https://github.com/bakhirev/assayo/blob/main/documents/ES.md) | [Français](https://github.com/bakhirev/assayo/blob/main/documents/FR.md) | [Português](https://github.com/bakhirev/assayo/blob/main/documents/PT.md) | [Deutsch](https://github.com/bakhirev/assayo/blob/main/documents/DE.md) | [中文](https://github.com/bakhirev/assayo/blob/main/documents/ZH.md) | [日本語](https://github.com/bakhirev/assayo/blob/main/documents/JA.md) | __[한국어](https://github.com/bakhirev/assayo/blob/main/documents/KO.md)__ | [العربية](https://github.com/bakhirev/assayo/blob/main/documents/AR.md) | [हिन्दी](https://github.com/bakhirev/assayo/blob/main/documents/HI.md) | [Русский](https://github.com/bakhirev/assayo/blob/main/documents/RU.md)
# [Assayo](https://bakhirev.github.io/?ref=github&lang=ko)
커밋 통계 보고서. 이 보고서는 다음에 대한 분석을 포함합니다:
- 작업 속도와 초과 근무 시간 수;
- 책임 영역, 기능 및 버그 수;
- 동료들의 업무 스타일;
- 직원 이직률과 팀 구성;
- 개발자 위치;
- 릴리스 일정 및 휴가 캘린더;
- 기능 및 프로젝트 전체 비용;
- 리팩터링이 필요한 위치, 삭제된 파일 등.
**링크:** [demo](https://bakhirev.github.io/demo/?ref=github&dump=./test.txt), [online version](https://bakhirev.github.io/demo/?ref=github), [docker](https://hub.docker.com/r/bakhirev/assayo), [reddit](https://www.reddit.com/r/ITManagers/comments/1e5k291/the_visualization_and_analysis_of_git_commit/), [habr](https://habr.com/ru/articles/852782/)
**비디오:** [english](https://www.youtube.com/watch?v=uMbhrrd25t4), [español](https://www.youtube.com/watch?v=skmctb_2rZ0), [русский](https://www.youtube.com/watch?v=jwCp_-bhrCQ)
### 목차
- [커밋 통계 보고서](#link-1)
- [보고서를 생성하고 보는 방법은?](#link-2)
- [공용 서버 사용](#link-3)
- [NodeJS 라이브러리 사용](#link-4)
- [PHP 라이브러리 사용](#link-5)
- [Python 라이브러리 사용](#link-6)
- [Ruby 라이브러리 사용](#link-7)
- [Go 라이브러리 사용](#link-8)
- [소스 코드 사용](#link-9)
- [GitHub Actions 사용](#link-10)
- [개인 서버 사용](#link-11)
- [작성자를 병합하는 방법은?](#link-12)
- [git에서 txt 파일로 데이터를 내보내는 방법은?](#link-13)
- [온라인 보기용](#link-14)
- [오프라인 보기용](#link-15)
- [Windows에서 PowerShell을 사용하는 경우](#link-16)
- [마이크로서비스 그룹에 대한 보고서를 보는 방법은?](#link-17)
- [프로젝트의 모범 사례](#link-18)
- [커밋에 서명하는 방법은?](#link-19)
- [커밋 메시지 검사 추가 방법은?](#link-20)
- [파일 commit-msg 사용](#link-21)
- [패키지 pre-commit 사용](#link-22)
- [이 앱에 대하여](#link-23)
- [인터페이스 브랜딩 방법은?](#link-24)
- [소스 코드에서 HTML 보고서를 다시 빌드하는 방법은?](#link-25)
- [번역을 추가하거나 편집하는 방법은?](#link-26)
- [아키텍처](#link-27)
- [마이크로서비스의 일반 아키텍처](#link-29)
- [피드백, 의견](#link-30)
## 커밋 통계 보고서
### 📈 보고서를 생성하고 보는 방법은?
#### 공용 서버 사용
- [웹사이트](https://bakhirev.github.io/)로 이동
- 안내를 따르세요
#### NodeJS 라이브러리 사용
- `npx assayo` 실행
- `./assayo/index.html` 열기
#### PHP 라이브러리 사용
- `composer require bakhirev/assayo` 실행
- `vendor/bin/assayo` 실행
- `./assayo/index.html` 열기
#### Python 라이브러리 사용
- `pipx install assayo` 실행
- `assayo` 실행
- `./assayo/index.html` 열기
#### Ruby 라이브러리 사용
- `gem install assayo` 실행
- `assayo` 실행
- `./assayo/index.html` 열기
#### Go 라이브러리 사용
- `go get github.com/bakhirev/assayo` 실행
- `go install github.com/bakhirev/assayo` 실행
- `assayo` 실행
- `./assayo/index.html` 열기
#### 소스 코드 사용
- 이 저장소 다운로드
- `log.txt` 파일을 `/build` 폴더에 넣기
- `/build/index.html` 열기
- 또는 `/build` 폴더를 `log.txt`이 있는 저장소에 넣기. 이름을 변경할 수 있습니다. 예: `/build` → `/report`.
이 경우 오프라인 보기를 위한 명령으로 `log.txt` 파일이 생성되는 것이 중요합니다.
#### GitHub Actions 사용
`.github/workflows/` 폴더에 [script](https://github.com/bakhirev/assayo/blob/main/documents/ActionExample.yml) 추가 또는 마켓플레이스의 이 [action](https://github.com/marketplace/actions/assayo) 사용. 최신 보고서는 아티팩트에 저장됩니다.
#### 개인 서버 사용
- [docker 이미지](https://hub.docker.com/r/bakhirev/assayo) 다운로드;
- 로컬 네트워크에서 실행;
- 웹 인터페이스를 사용해 보고서를 보고 URL 매개변수 `dump`에 데이터 URL 설정:
```
http://assayo_url/?dump=//you_url/some/log.txt
assayo_url - assayo 컨테이너의 URL, 포트 80에서 수신;
you_url - git 로그가 있는 컨테이너의 URL;
```
기본적으로 이미지는 `http://127.0.0.1:80/`에서 실행됩니다. 작동하지 않으면 포트 `80`가 사용 중인지 확인하세요.
### 🎭 작성자를 병합하는 방법은?
프로젝트 루트 디렉터리에 `.mailmap` 파일을 생성해야 합니다.
파일 내용 예:
```
Alex B
Alex B
Alex B
Alex B
```
이 파일 형식에 대한 자세한 내용은 [여기](https://git-scm.com/docs/gitmailmap)에서 확인할 수 있습니다.
### 📤 git에서 txt 파일로 데이터를 내보내는 방법은?
#### 온라인 보기용
프로젝트 루트 디렉터리에서 실행:
#### 오프라인 보기용
Git은 `log.txt` 파일을 생성합니다. 이 파일에는 보고서를 표시하기 위한 데이터가 포함됩니다. 온라인 형식과 오프라인 형식의 차이점은 문자열 래퍼의 존재 여부입니다. 오프라인 형식은 `/build/index.html`를 열면 `js` 파일처럼 로드됩니다.
#### Windows에서 PowerShell을 사용하는 경우
기본 출력 인코딩이 UTF-8과 일치하지 않아 로그 파일을 읽을 수 없을 수 있습니다. 로그를 저장하기 전에 명령으로 인코딩을 변경할 수 있습니다.
```
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
```
또는 저장된 파일을 열어 수동으로 UTF-8로 인코딩을 변경하세요.
### 🗃️ 마이크로서비스 그룹에 대한 보고서를 보는 방법은?
- 각 마이크로서비스에 대해 `log.txt` 파일 (`log-1.txt`, `log-2.txt`, `log-3.txt` 등)을 생성하세요. 수동으로 할 수도 있고, 자동 로그 수집을 위한 [Assayo Crawler](https://github.com/bakhirev/assayo-crawler) 모듈을 사용할 수도 있습니다;
- “온라인 보고서 보기”를 참조하세요. 마지막 단계에서 모든 파일을 한 번에 브라우저 창으로 드래그하세요.
- “오프라인 보고서 보기”를 참조하세요. 두 번째 단계에서 모든 마이크로서비스 파일 (`log-1.txt`, `log-2.txt`, `log-3.txt` 등)을 보고서 폴더 (`/build`)로 드래그하세요.
## 프로젝트의 모범 사례
### 📝 커밋에 서명하는 방법은?
[Conventional Commits 1.0.0](https://www.conventionalcommits.org/en/v1.0.0/)을 따르세요. 예:
```
JIRA-1234 feat(profile): Added avatar for user
```
- 작업 추적기의 작업 번호 `(JIRA-1234)`
- 작업 유형 `(feat, fix, style, refactor, test, doc 등)`
- 기능 `(profile - 사이트의 새 페이지 또는 새 기능, 한두 단어 또는 약어 사용)`
- 해결된 문제 `(Added avatar for user)`
### 👮 커밋 메시지 검사 추가 방법은?
#### 파일 commit-msg 사용
1. `.git/hooks/` 폴더에 `commit-msg` 파일 생성
2. 파일에 다음 텍스트 추가:
```
#!/usr/bin/env bash
if ! grep -iqE "(JIRA-[0-9]{1,5})(s)(feat|fix|docs|style|refactor|test|chore)((([a-z0-9_-]{1,})){0,})(:s)([a-z]{1,})" "$1"; then
echo "Need commit message like: JIRA-12 fix(profile): some text. Read Semantic Commit Messages" >&2
exit 1
fi
```
#### 패키지 [pre-commit](https://www.npmjs.com/package/pre-commit) 사용
1. `package.json` 파일에 `commit-msg` 속성 추가:
```
...
"commit-msg": {
"regex": "(JIRA-[0-9]{1,5})(\s)(feat|fix|docs|style|refactor|test|chore)((\([a-z0-9_-]{1,}\)){0,})(:\s)([a-z]{1,})",
"error-message": "Need commit message like: JIRA-12 fix(profile): some text Read Semantic Commit Messages"
},
...
```
2. `npm install pre-commit` 명령 실행
## 이 앱에 대하여
### 🎨 인터페이스 브랜딩 방법은?
자신만의 인터페이스 테마를 만들 수 있습니다. 옵션:
- **제목**. URL 매개변수 `title`에서 기본 문서 제목을 설정할 수 있습니다. 예: `?title=You Company`
- **시각적 테마**. 새 스타일이 있는 CSS 파일을 준비하고 `theme` 매개변수에 URL을 지정해야 합니다. 예: `?theme=//company.com/some.css`. 대부분의 클래스 이름은 새 버전에서도 변경되지 않습니다.
- **언어**. URL 매개변수 `lang`에서 언어를 설정할 수 있습니다. 예: `?lang=es`
**예:** [데모](https://bakhirev.github.io/demo/themes/)
### 🛠️ 소스 코드에서 HTML 보고서를 다시 빌드하는 방법은?
- 이 저장소 `git clone https://github.com/bakhirev/assayo.git` 다운로드
- `npm install` 실행
- `npm run build:local` 실행
- 새 HTML 빌드는 `/build` 폴더에 생성됩니다.
### 🈯 번역을 추가하거나 편집하는 방법은?
`ts/translations/` 폴더에서 새 번역을 추가하거나 기존 번역을 수정할 수 있습니다.
[안내](https://github.com/firstcontributions/first-contributions)
### 📐 아키텍처
#### 마이크로서비스의 일반 아키텍처
1. [Reports showcase UI](https://github.com/bakhirev/assayo-showcase)는 사용 가능한 보고서 목록을 표시합니다. 각 보고서는 제목, 설명 및 저장소 목록으로 구성됩니다.
2. [Crawler service](https://github.com/bakhirev/assayo-crawler)는 보고서를 위한 저장소 로그를 수집합니다.
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(현재 위치)** 는 보고서를 표시합니다. 작동하려면 로그 파일이 필요합니다.
### 📧 피드백, 의견
- 📱 [https://t.me/bakhirev](https://t.me/bakhirev) (우선적인 커뮤니케이션 방법)
- 📧 [alexey-bakhirev@yandex.ru](mailto:alexey-bakhirev@yandex.ru)
- 🌐 [https://bakhirev.github.io/](https://bakhirev.github.io/?ref=github&lang=ko)