Skip to main content

Electron 문서 작성 가이드라인

이 문서는 Electron 문서를 작성할 때 따라야 할 지침을 설명한다.

헤딩 규칙

  • 각 페이지는 맨 위에 단일 # 레벨 제목을 가져야 한다.
  • 같은 페이지 내의 챕터는 ## 레벨 헤딩을 사용한다.
  • 하위 챕터는 중첩 깊이에 따라 헤딩의 # 수를 증가시켜야 한다.
  • 페이지 제목은 APA 제목 대문자 규칙을 따라야 한다.
  • 모든 챕터는 APA 문장 대문자 규칙을 따라야 한다.

Quick Start를 예시로 들면:

# Quick Start

...

## Main process

...

## Renderer process

...

## Run your app

...

### Run as a distribution

...

### Manually downloaded Electron binary

...

API 참조 문서의 경우 이 규칙에 예외가 적용될 수 있다.

마크다운 작성 규칙

이 저장소는 markdownlint 패키지를 사용해 일관된 마크다운 스타일을 유지한다. 정확한 규칙은 루트 폴더의 .markdownlint.json 파일에서 확인할 수 있다.

린터 규칙으로 커버되지 않는 몇 가지 스타일 가이드라인은 다음과 같다:

  • 코드 블록에서는 cmd 대신 sh를 사용한다(구문 강조를 위해).
  • 가독성을 위해 가능하면 한 줄을 80~100자 이내로 유지한다.
  • 마크다운 렌더러의 특성상 리스트를 2단계 이상 중첩하지 않는다.
  • 모든 jsjavascript 코드 블록은 standard-markdown으로 린트한다.
  • 순서 없는 리스트에서는 대시(-) 대신 별표(*)를 사용한다.

단어 선택하기

  • 결과를 설명할 때 "would"보다 "will"을 사용한다.
  • "on" 대신 "in the ___ process"를 선호한다.

API 참조

다음 규칙은 API 문서화에만 적용된다.

제목과 설명

각 모듈의 API 문서는 require('electron')이 반환하는 실제 객체 이름을 제목으로 사용한다(예: BrowserWindow, autoUpdater, session).

페이지 제목 바로 아래에 모듈에 대한 한 줄 설명을 마크다운 인용문(>로 시작)으로 추가한다.

session 모듈을 예로 들면:

# session

> 브라우저 세션, 쿠키, 캐시, 프록시 설정 등을 관리한다.

모듈 메서드와 이벤트

클래스가 아닌 모듈의 경우, 해당 모듈의 메서드와 이벤트는 반드시 ## Methods## Events 섹션 아래에 나열해야 한다.

autoUpdater를 예로 들면:

# autoUpdater

## Events

### Event: 'error'

## Methods

### `autoUpdater.setFeedURL(url[, requestHeaders])`

클래스

  • 모듈의 일부이거나 API 클래스는 ## Class: 클래스명 챕터 아래에 나열한다.
  • 한 페이지에 여러 클래스를 포함할 수 있다.
  • 생성자는 ### 수준의 제목으로 나열한다.
  • 정적 메서드### Static Methods 챕터 아래에 나열한다.
  • 인스턴스 메서드### Instance Methods 챕터 아래에 나열한다.
  • 반환 값이 있는 모든 메서드는 설명을 "[타입]을 반환 - [반환 설명]"으로 시작한다.
    • 메서드가 객체를 반환하는 경우, 콜론 뒤에 줄바꿈을 하고 함수 매개변수와 같은 스타일로 속성을 나열해 구조를 지정할 수 있다.
  • 인스턴스 이벤트는 ### Instance Events 챕터 아래에 나열한다.
  • 인스턴스 속성은 ### Instance Properties 챕터 아래에 나열한다.
    • 인스턴스 속성은 "[속성 타입] ..."으로 시작한다.

SessionCookies 클래스를 예로 들면:

# session

## Methods

### session.fromPartition(partition)

## Static Properties

### session.defaultSession

## Class: Session

### Instance Events

#### Event: 'will-download'

### Instance Methods

#### `ses.getCacheSize()`

### Instance Properties

#### `ses.cookies`

## Class: Cookies

### Instance Methods

#### `cookies.get(filter, callback)`

메서드와 인자

메서드 장은 다음과 같은 형식으로 작성한다:

### `objectName.methodName(필수[, 선택]))`

* `필수` string - 매개변수 설명.
* `선택` Integer (선택) - 다른 매개변수 설명.

...

헤딩 레벨

헤딩은 ### 또는 #### 레벨로 작성할 수 있다. 이는 해당 메서드가 모듈에 속하는지 클래스에 속하는지에 따라 달라진다.

함수 시그니처

모듈의 경우 objectName은 모듈 이름을 사용한다. 클래스의 경우에는 반드시 클래스 인스턴스의 이름을 사용해야 하며, 모듈 이름과 동일하면 안 된다.

예를 들어, session 모듈 아래의 Session 클래스 메서드는 sesobjectName으로 사용해야 한다.

옵션 인자는 대괄호 []로 표시하며, 옵션 인자 뒤에 쉼표가 필요한 경우 함께 표기한다:

필수인자[, 옵션인자]

인자 설명

각 인자에 대한 자세한 정보는 메서드 아래에 순서 없는 목록으로 정리한다. 인자의 타입은 자바스크립트 기본 타입(예: string, Promise, Object), Electron의 Cookie와 같은 커스텀 API 구조, 또는 와일드카드 any로 표기한다.

인자가 Array 타입인 경우, 배열 내부 값의 타입을 [] 약어로 표기한다(예: any[] 또는 string[]).

인자가 Promise 타입인 경우, Promise가 resolve하는 타입을 매개변수화하여 표기한다(예: Promise<void> 또는 Promise<string>).

인자가 여러 타입을 가질 수 있는 경우, 각 타입을 |로 구분한다.

Function 타입 인자의 설명에서는 함수가 어떻게 호출되는지 명확히 하고, 전달될 매개변수의 타입을 나열한다.

플랫폼별 기능

특정 플랫폼에만 해당하는 인자나 메서드는 데이터 타입 뒤에 공백으로 구분된 기울임꼴 목록으로 표시한다. 가능한 값은 macOS, Windows, Linux이다.

* `animate` boolean (optional) _macOS_ _Windows_ - 해당 기능을 애니메이션으로 표시한다.

이벤트

이벤트 장은 다음과 같은 형식을 따라야 한다:

### 이벤트: 'wake-up'

반환값:

* `time` string

...

이벤트가 모듈에 속하는지 클래스에 속하는지에 따라 제목은 ### 또는 #### 레벨로 작성한다.

이벤트의 인자는 메서드와 동일한 규칙을 따른다.

session.defaultSession

이 섹션은 다음과 같은 형식으로 작성한다:

### session.defaultSession

...

프로퍼티가 모듈에 속하는지 클래스에 속하는지에 따라 헤딩 레벨을 ### 또는 ####로 지정한다.

API 히스토리

"API 히스토리" 블록은 HTML 주석으로 감싸진 YAML 코드 블록이다. 이 블록은 클래스나 메서드의 마크다운 헤더 바로 뒤에 위치해야 한다. 예를 들면 다음과 같다:

#### `win.setTrafficLightPosition(position)` _macOS_

<!--
```YAML history
added:
- pr-url: https://github.com/electron/electron/pull/22533
changes:
- pr-url: https://github.com/electron/electron/pull/26789
description: "Made `trafficLightPosition` option work for `customButtonOnHover` window."
deprecated:
- pr-url: https://github.com/electron/electron/pull/37094
breaking-changes-header: deprecated-browserwindowsettrafficlightpositionposition
```
-->

* `position` [Point](structures/point.md)

트래픽 라이트 버튼의 커스텀 위치를 설정한다. `titleBarStyle``hidden`으로 설정된 경우에만 사용할 수 있다.

이 블록은 API 히스토리 JSON 스키마(api-history.schema.json)를 따라야 한다. 이 스키마는 docs 폴더에서 찾을 수 있다. API 히스토리 스키마 RFC에는 스키마의 각 부분에 대한 예제와 상세 설명이 포함되어 있다.

API 히스토리 블록의 목적은 API가 언제/어디서/어떻게/왜 추가되었는지, 변경되었는지(주로 호환성이 깨지는 변경), 그리고 더 이상 사용되지 않게 되었는지를 설명하는 것이다.

블록에 나열된 각 API 변경 사항은 해당 변경이 이루어진 PR 링크와 함께 짧은 설명을 포함해야 한다. 해당 변경 사항이 호환성이 깨지는 변경 문서에 있다면, 헤딩 ID도 함께 포함해야 한다.

API 히스토리 린팅 스크립트(lint:api-history)는 Electron 문서의 API 히스토리 블록을 스키마에 맞게 검증하고 추가적인 검사를 수행한다. 더 자세한 내용은 테스트를 참고하면 된다.

린팅 스크립트에서 다루지 않는 몇 가지 스타일 가이드라인이 있다:

API HEADER                  |  #### `win.flashFrame(flag)`
BLANK LINE |
HTML COMMENT OPENING TAG | <!--
API HISTORY OPENING TAG | ```YAML history
API HISTORY | added:
| - pr-url: https://github.com/electron/electron/pull/22533
API HISTORY CLOSING TAG | ```
HTML COMMENT CLOSING TAG | -->
BLANK LINE |

YAML

  • 들여쓰기 시 두 칸의 공백을 사용한다.
  • 주석을 사용하지 않는다.

설명

  • 항상 설명을 큰따옴표로 감싸세요 (예: "예시").
  • 앱 개발자에게 관련 있는 방식으로 변경 사항을 설명하고, 대문자로 시작하고, 구두점을 붙이며, 과거 시제를 사용하세요.
    • 예시는 Clerk를 참고하세요.
  • 설명을 간결하게 유지하세요.
    • 이상적으로는 설명이 해당 헤더와 일치하도록 하세요.
    • 가능한 경우 관련 PR의 릴리스 노트를 참고하세요.
    • 개발자는 항상 주요 변경 사항 문서나 연결된 풀 리퀘스트를 참고해 더 자세한 내용을 확인할 수 있습니다.

위치 설정

일반적으로 API 변경 내역 블록은 클래스나 메서드가 변경된 부분 바로 뒤에 배치한다. 하지만 몇 가지 애매한 상황이 있다:

Chromium 버전 업데이트

때로는 주요 변경 사항이 기존 API와 관련이 없을 수 있다. 이런 경우 API History에 추가하지 않아도 괜찮다.

여러 API에 영향을 미치는 변경 사항

때로는 주요 변경 사항이 여러 API에 걸쳐 영향을 미치기도 한다. 이 경우, 관련된 각 API의 최상위 마크다운 헤더 아래에 API History 블록을 추가한다.

# contextBridge

<!--
```YAML history
changes:
- pr-url: https://github.com/electron/electron/pull/40330
description: "`ipcRenderer`는 더 이상 `contextBridge`를 통해 전송할 수 없음"
breaking-changes-header: behavior-changed-ipcrenderer-can-no-longer-be-sent-over-the-contextbridge
```
-->

> 격리된 컨텍스트 간에 안전한 양방향 동기식 브리지를 생성
# ipcRenderer

<!--
```YAML history
changes:
- pr-url: https://github.com/electron/electron/pull/40330
description: "`ipcRenderer`는 더 이상 `contextBridge`를 통해 전송할 수 없음"
breaking-changes-header: behavior-changed-ipcrenderer-can-no-longer-be-sent-over-the-contextbridge
```
-->

프로세스: [렌더러](../glossary.md#renderer-process)

다음과 같은 경우에는 API History 블록을 추가하지 않았다:

  • contextBridge.exposeInMainWorld(apiKey, api)

해당 함수 자체는 변경되지 않았고, 단지 사용 방법에만 변화가 있었기 때문이다:

  contextBridge.exposeInMainWorld('app', {
- ipcRenderer,
+ onEvent: (cb) => ipcRenderer.on('foo', (e, ...args) => cb(args))
})

문서 번역

electron/i18n을 참고하세요.