Skip to content

Commit fcb9e42

Browse files
authored
fix: 間違ったHeading構成の修正&Headingの仕組みを調整 (#199)
1 parent 37c27e6 commit fcb9e42

File tree

9 files changed

+120
-91
lines changed

9 files changed

+120
-91
lines changed

.vitepress/config.mjs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,13 @@ const links = {
6666
link: "/documents/forGitBranch/git_branch_standards.html",
6767
},
6868
],
69+
"/documents/forMarkdown/": [
70+
{ text: "Introduction", link: "/documents/forMarkdown/" },
71+
{
72+
text: "Markdown設計ドキュメント規約",
73+
link: "/documents/forMarkdown/markdown_design_document.html",
74+
},
75+
],
6976
"/documents/forSlack/": [
7077
{ text: "Introduction", link: "/documents/forSlack/" },
7178
{

.vitepress/lib/markdown-it-plugin-header-shift.mjs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,32 @@
1+
// @ts-check
2+
/**
3+
* @typedef {import('markdown-it/lib/rules_core/state_core.mjs').default} StateCore
4+
* @typedef {import('markdown-it').default} MarkdownIt
5+
*/
16
/**
27
* headerタグを1つづつずらします。
38
* Pandocでも利用できるMarkdownファイルにしたいので、`# header`を一つしかつくれないvitepress制約がうまく共存できないため、
49
* vitepressではhタグの番号をずらし、無理やり共存できるようにします。
10+
* @param {MarkdownIt} md
511
*/
612
export default function headerSections(md) {
13+
/**
14+
*
15+
* @param {InstanceType<md['core']['State']>} state
16+
* @returns
17+
*/
718
function shiftHeaders(state) {
19+
if (
20+
!state.tokens.some(
21+
(token) =>
22+
token.type === "html_inline" &&
23+
token.content.startsWith("<page-title"),
24+
)
25+
) {
26+
// <page-title>がない場合は何もしない
27+
return;
28+
}
29+
830
state.tokens.forEach((t, i) => {
931
if (t.type.includes("heading")) {
1032
t.tag = t.tag.replace(/^h(\d)$/, (_h, n) => `h${n - 0 + 1}`);

documents/forAWSResource/AWSインフラリソース命名規約.md

Lines changed: 40 additions & 40 deletions
Large diffs are not rendered by default.

documents/forGitBranch/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,6 @@ hero:
2727

2828
[pandoc]: https://pandoc.org/
2929

30-
# Articles
30+
## Articles
3131

3232
- 2024.12.14 [Gitブランチフロー規約の紹介](https://future-architect.github.io/articles/20241214a/)

documents/forJava/index.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,16 @@ hero:
1616

1717
一般的に行われているコーディング規約から、Stream API やラムダ式、最新の Java17 で追加された構文にも対応しています。
1818

19-
# For Java17
19+
# Java Coding Standards
2020

21-
Java17 向けのコーディング規約は[こちら](./Javaコーディング規約.md)です。
21+
- [Javaコーディング規約](./Javaコーディング規約.md) ... Java17+ 向けのコーディング規約
2222

23-
# For Old Versions
23+
## Old Versions
2424

25-
- Java11 向けのコーディング規約は[こちら](./Javaコーディング規約_for_11.md)です。
26-
- Java8 向けのコーディング規約は[こちら](./Javaコーディング規約_for_8.md)です。
25+
- [Javaコーディング規約 for Java11](./Javaコーディング規約_for_11.md) ... Java11 向けのコーディング規約
26+
- [Javaコーディング規約 for Java8](./Javaコーディング規約_for_8.md) ... Java8 向けのコーディング規約
2727

28-
# Resources
28+
## Resources
2929

3030
次のリンクから単一ファイルで作成されたコーディング規約を取得できます。\
3131
(これらのファイルは[Pandoc]を利用して作成しています。)
@@ -41,7 +41,7 @@ Java17 向けのコーディング規約は[こちら](./Javaコーディング
4141

4242
[pandoc]: https://pandoc.org/
4343

44-
# Articles
44+
## Articles
4545

4646
- 2021.10.07 [Java17対応版!Javaコーディング規約の紹介](https://future-architect.github.io/articles/20211007a/)
4747
- 2016.09.02 [システム屋さんがうれしいJava8対応のコーディング規約を公開します!!](https://future-architect.github.io/articles/20160902/)

documents/forOpenAPISpecification/OpenAPI_Specification_2.0.md

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@ Web API 自体の設計については範囲外としますが、[API 設計標
3030

3131
:::
3232

33-
## ファイルフォーマット
33+
# ファイルフォーマット
3434

3535
[ファイルフォーマット規約](file_standards.md)に準じる。
3636

37-
## 要素規約
37+
# 要素規約
3838

3939
Swagger の基本構造は以下の、swagger・info・host・basePath・schemes・paths・definitions から構成される。
4040

@@ -124,11 +124,11 @@ definitions:
124124
example: "2023-04-01T11:30:45.000Z"
125125
```
126126
127-
## swagger
127+
# swagger
128128
129129
- `2.0` 固定とする
130130

131-
## info
131+
# info
132132

133133
info オブジェクトには Web API に関するメタデータを記載する。
134134
`title`, `description`, `version` を必須項目とする。
@@ -142,22 +142,22 @@ info オブジェクトには Web API に関するメタデータを記載する
142142
| contact | | 連絡先情報 |
143143
| license | | ライセンス情報 |
144144

145-
### title
145+
## title
146146

147147
WebAPI の総称を記載する。システム名やサービス名 + API のような命名とすることを推奨する。
148148
例. `X System API`
149149

150-
### desctiption
150+
## desctiption
151151

152152
Web API が提供する機能の概要・想定する利用者やユースケース・制約などを記載する。
153153

154-
### version
154+
## version
155155

156156
この API 仕様のドキュメントのバージョンを記載する。アプリケーションのバージョン(git tag やリリースで管理するようなバージョン)とは別である。
157157

158158
本規約の推奨は `major.minor` 形式である。 `0.1 `固定で開発を進め、サービスのリリース時に `1.0` とし、その後の項目やオプション、パスの追加ごとに `1.1` などインクリメントしていく。もし他チームへのドキュメントの頻繁な共有が必要だれば、`1.0` のかわりに `2023.03.26` といった形式も許容する。
159159

160-
## host
160+
# host
161161

162162
OpenAPI 3 系と異なり、 **Swagger では複数のホストを指定できない**。そのため host には開発環境(local, develop, staging, production というステージ区別であれば、develop)で用いる IP、ポート番号を指定する。他チームに提供するサンドボックス環境を用意する場合は、そのエンドポイントを指定しても良い。localhost などのローカル開発への向き先変更は、ツール側で対応している事が多く上書き可能なため記載しない。API 定義書は予期せぬタイミングで他チームに展開する必要がしばしばあり、お試しで触っても良い環境があることを示すことで情報量を増やし、円滑なコミュニケーションを促進することを狙いとする。
163163

@@ -173,7 +173,7 @@ host: localhost:8001
173173
host: prod.api.example.com:80
174174
```
175175

176-
## basePath
176+
# basePath
177177

178178
作成する Swagger 定義の URL パスの全てで、共通するプレフィックスを持つ場合に指定する。Swagger の仕様上、先頭には `/` が必須であるため、以下のように定義する。
179179

@@ -186,7 +186,7 @@ basePAth: /api/v2
186186
basePath: v2
187187
```
188188

189-
## schemes
189+
# schemes
190190

191191
最終的に利用するスキーマのみを記載する。通常、HTTP 通信での Web API 提供は行わないと考えられるため、 `https` 固定で設定する。ローカル開発では `http` を指定することも多いが、ツールで生成されたコードのオプションで通常書き換えが可能なため、`http` の併記は許可しない。ただし、サーバサイドのマイクロサービス同士の通信で、VPC(プライベートセグメント)内であり、SSL 通信を本当に利用しない場合は `http` と記載する。
192192

@@ -203,7 +203,7 @@ schemes:
203203

204204
もし、WebSocket スキームを提供するサービスの定義である場合は、`wss` を(追加で)指定する。定義上は `https` 側との共存ができないため、ファイル定義を分けるようにする。
205205

206-
## security, securityDefinitions
206+
# security, securityDefinitions
207207

208208
Swagger では、次の認証タイプを記載できる([詳細](https://swagger.io/docs/specification/2-0/authentication/))。
209209

@@ -231,7 +231,7 @@ paths:
231231
- OAuth2: []
232232
```
233233

234-
## produces
234+
# produces
235235

236236
Web API が応答する際の MIME タイプを指定します。未指定の場合に、コード生成などツール側で予期しない動作をすることがあるため、固定で指定する。新規構築の Web API であれば `application/xml` は不要と通常は考えられるので、`application/json` を記載する。また、[RFC 7807 Problem Details for HTTP APIs](https://www.rfc-editor.org/rfc/rfc7807) では Content-Type に `application/problem+json` を設定するとあるが、一部のコード生成ツールにおいて、 `application/problem` と `application/problem+json` の使い分けが難しいため、併記を必須としない。OpenAPI Specification の 3 系ではステータスコードごとに Content-Type を指定できるため、3 系への移行も検討する。
237237

@@ -264,7 +264,7 @@ paths:
264264
type: file
265265
```
266266

267-
## consumes
267+
# consumes
268268

269269
Web API が要求を受け入れる際の MIME タイプを指定する。未指定の場合に、コード生成などツール側で予期しない動作をすることがあるため、固定で指定する。新規構築の Web API であれば `application/xml` は不要と通常は考えらえるので、`application/json` だけ記載する。
270270

@@ -276,7 +276,7 @@ consumes:
276276
- application/json
277277
```
278278

279-
## tags
279+
# tags
280280

281281
タグを用いて、API 操作をグループ化することができる。ドキュメントやツールにとって非常に重要であるため、 **必須** で指定する。
282282

@@ -305,7 +305,7 @@ tags:
305305
- name: UserAccount
306306
```
307307

308-
## paths
308+
# paths
309309

310310
`paths` 配下に個々の API エンドポイントを記載する。
311311

@@ -320,7 +320,7 @@ Paths # API定義全体
320320
└ Response # ステータスコードに応じたレスポンス
321321
```
322322

323-
### Paths > Path
323+
## Paths > Path
324324

325325
記載順は以下のルールである。
326326

@@ -356,7 +356,7 @@ paths:
356356
...
357357
```
358358

359-
### Paths > Path > Operation
359+
## Paths > Path > Operation
360360

361361
URL に紐づく HTTP メソッドで、1 つの操作を定義します。
362362

@@ -389,7 +389,7 @@ URL に紐づく HTTP メソッドで、1 つの操作を定義します。
389389
responses: ...
390390
```
391391

392-
### Paths > Path > Parameter
392+
## Paths > Path > Parameter
393393

394394
リクエストの定義を記載する。
395395

@@ -476,7 +476,7 @@ URL に紐づく HTTP メソッドで、1 つの操作を定義します。
476476
...
477477
```
478478

479-
### Paths > Path > Responses
479+
## Paths > Path > Responses
480480

481481
レスポンスの定義を記載する。
482482

@@ -543,7 +543,7 @@ URL に紐づく HTTP メソッドで、1 つの操作を定義します。
543543
$ref: "#/definitions/Error"
544544
```
545545

546-
## definitions
546+
# definitions
547547

548548
- モデル名は、PascalCase で記載する
549549
- 種別が配列の場合、ネストして定義するのではなく、 `$ref` を活用する
@@ -683,17 +683,17 @@ definitions:
683683
example: user name is too long
684684
```
685685

686-
## バリデーションについて
686+
# バリデーションについて
687687

688688
OpenAPI 定義を記載するにあたり、バリデーションをどこまで厳密に定義すべきかという議論はよく行いがちである。
689689

690690
リクエストパラメータの各項目に対して、必須・型・桁・区分値・日付・正規表現のチェックが行える。レスポンスで用いるモデルについても同様に設定でき、`enum`, `pattern` 以外は API の利用者(クライアント)側の DB 設計などに必要な型桁情報を渡すのに有用であるため、できる限り詳しく指定する。
691691

692-
### 必須
692+
## 必須
693693

694694
必須パラメータのみ `required: true` を定義する
695695

696-
### デフォルト値
696+
## デフォルト値
697697

698698
パラメータにデフォルト値がある場合は`default` を定義する。
699699

@@ -710,7 +710,7 @@ description: 検索結果の項目数上限(1~100が指定可能)
710710

711711
【注意】API 公開後に、default 値を変更してはならない(API の互換性が崩れるため)。もし変更する場合は、API のバージョンを上げること。
712712

713-
### 型・フォーマット
713+
## 型・フォーマット
714714

715715
型(`type`)は `string(文字列)`, `number(数値)`, `integer(整数値)`, `boolean(真偽値)` `array(配列)`, `file(ファイル)` のうちどれか指定する.
716716

@@ -732,7 +732,7 @@ description: 検索結果の項目数上限(1~100が指定可能)
732732
- `password`: Swagger UI で入力が隠される
733733
- その他、 `email`, `uuid` など Open API 仕様に存在しない任意のフォーマットを独自のドキュメント生成などのために記載しても良い
734734

735-
###
735+
## 桁
736736

737737
データ型によって、利用できる桁を指定する項目が異なる。可能な限り設定する。
738738

@@ -751,7 +751,7 @@ description: 検索結果の項目数上限(1~100が指定可能)
751751

752752
【注意】API 公開後に、レスポンスの `maxLength` を以前より大きい値に変更してはならない。レスポンスの `maxLength` など API 利用者側システムの DB の ERD 定義のインプットになる事が多いため。もし行う場合は API のバージョンを上げることや、連携先に桁数変更の旨を調整するなどの考慮を行う。
753753

754-
### 区分値
754+
## 区分値
755755

756756
区分値の場合は `enum` 属性を利用し、`description`には区分値の論理名を記載する。
757757

@@ -767,7 +767,7 @@ description: |
767767
9: 適用不能
768768
```
769769

770-
### 固定値
770+
## 固定値
771771

772772
**固定値** の場合も enum を 1 つだけ指定して表現する。この場合もレスポンスで利用する場合は指定しない
773773

@@ -778,7 +778,7 @@ enum: ["json"]
778778
description: ファイルレイアウト
779779
```
780780

781-
### その他(正規表現)
781+
## その他(正規表現)
782782

783783
正規表現で表現できる文字列は`pattern`を利用して定義する。桁や区分値で代替できる場合は、`pattern` を用いない
784784

@@ -792,7 +792,7 @@ remind_time:
792792
pattern: "^(2[0-3]|[01][0-9]):([0-5][0-9])$"
793793
```
794794

795-
## ファイルアップロード
795+
# ファイルアップロード
796796

797797
Web API におけるファイルアップロードのよく利用される実装手段は、大きく分けて以下の 3 手法に分類できます
798798

@@ -833,15 +833,15 @@ A->>B: ③ファイルアップロード完了(受付ID、キー、属性)
833833

834834
上記どちらのケースも OpenAPI 定義としてはシンプルであるため、記述例は割愛する。
835835

836-
## ファイルダウンロード
836+
# ファイルダウンロード
837837

838838
ファイルアップロードと同様、オブジェクトストレージの Signed URL 経由を経由してのダウンロードさせる手法を推奨する。Web API としてはオブジェクトストレージにダウンロード用のファイルを書き込み、クライアントが取得するための Signed URL をレスポンスの JSON 項目に渡す方式である。
839839

840840
もし、サムネイルやアイコン画像など、ファイル容量がごく小さい場合は Base64 にエンコードして JSON に埋め込んで渡しても良い。線引をどこに設置するかは本規約で定義しない。
841841

842842
どちらのケースも OpenAPI 定義としてはシンプルであるため、記述例は割愛する。
843843

844-
## CORS
844+
# CORS
845845

846846
CORS(Cross-Origin Resource Sharing)のために、options メソッドの追記は **原則不要** とする。
847847

@@ -858,7 +858,7 @@ CORS(Cross-Origin Resource Sharing)のために、options メソッドの追
858858

859859
[^1]: https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/enable-cors-for-resource-using-swagger-importer-tool.html
860860

861-
## OpenTelemetry Traceparent HTTP Header
861+
# OpenTelemetry Traceparent HTTP Header
862862

863863
OpenOpenTelemetry で用いるられる[traceparent](https://www.w3.org/TR/trace-context/) のリクエストヘッダーは OpenAPI で **原則不要** とする。
864864

@@ -867,7 +867,7 @@ OpenOpenTelemetry で用いるられる[traceparent](https://www.w3.org/TR/trace
867867
- OpenTelemetry が定めるヘッダー類は、API 横断的に設定されるべきものであり、ミドルウェアやフレームワーク側などでの一律の制御を推奨するため
868868
- 記載することにより、OpenOpenTelemetry に対応していることを明記し開発者に周知できるメリットより、各アプリ開発者が生成されたコードで悩んだり、誤解されることを回避したいため
869869

870-
## API のバージョン管理
870+
# API のバージョン管理
871871

872872
Swagger 定義で以下の変更を行う場合は、利用するコード生成の動作によってはクライアントにとって互換性を失う破壊的変更であることがあるため、変更は調整の上で行うか、バージョンを上げることを考える。
873873

@@ -883,7 +883,7 @@ Swagger 定義で以下の変更を行う場合は、利用するコード生成
883883
- 桁数を大きくする
884884
- デフォルト値を後から変更する
885885

886-
## ファイル単位
886+
# ファイル単位
887887

888888
TODO v3 の作成タイミングと合わせて追記する
889889

0 commit comments

Comments
 (0)