Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
{
"eslint.validate": ["javascript", "javascriptreact", "vue", "markdown"],
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
"source.fixAll.eslint": "explicit",
"source.fixAll.markdownlint": "never"
},
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
Expand Down
421 changes: 211 additions & 210 deletions documents/forJava/Javaコーディング規約.md

Large diffs are not rendered by default.

365 changes: 183 additions & 182 deletions documents/forJava/Javaコーディング規約_for_11.md

Large diffs are not rendered by default.

407 changes: 204 additions & 203 deletions documents/forJava/Javaコーディング規約_for_17.md

Large diffs are not rendered by default.

346 changes: 174 additions & 172 deletions documents/forJava/Javaコーディング規約_for_8.md

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ description: "何かしらの説明"
- account_type
- register_at
```

- YAML は項目定義がネストすることで縦長な定義になりやすい。情報密度を上げるために配列リテラルを推奨する

## 改行の表現
Expand Down Expand Up @@ -297,8 +298,8 @@ schemes:
Swagger では、次の認証タイプを記載できる([詳細](https://swagger.io/docs/specification/2-0/authentication/))。

1. ベーシック認証
1. API キー(リクエストヘッダ, クエリパラメータ)
1. OAuth2
2. API キー(リクエストヘッダ, クエリパラメータ)
3. OAuth2

もし、認証が必須であれば記載する。全ての Web API で未認証を受け入れる場合は記載しない。認証の要否が API ごとに異なる場合は、各 API 側で `security: []` と記載しして上書き定義する必要がある。

Expand Down Expand Up @@ -522,6 +523,7 @@ URL に紐づく HTTP メソッドで、1 つの操作を定義します。
type: string
...
```

- モデル名は、 `{HTTPメソッド名}{物理名}` の PascalCase で記載する
- 例: PutUserAccount、PostUserAccount, PatchUserAccount

Expand Down Expand Up @@ -957,7 +959,7 @@ Swagger 定義で以下の変更を行う場合は、利用するコード生成

# 推奨ツール

[本当に使ってよかった OpenAPI (Swagger) ツール ](https://future-architect.github.io/articles/20191008/) にあるように、様々なツールで開発ができる。VS Code を用いる場合は以下のプラグインを推奨する。
[本当に使ってよかった OpenAPI (Swagger) ツール](https://future-architect.github.io/articles/20191008/) にあるように、様々なツールで開発ができる。VS Code を用いる場合は以下のプラグインを推奨する。

- [YAML](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml)
- [Swagger Viewer](https://marketplace.visualstudio.com/items?itemName=Arjun.swagger-viewer)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ head:

<page-title/>

本コーディング規約は、世の中のシステム開発プロジェクトのために無償で提供致します。
ただし、掲載内容および利用に際して発生した問題、それに伴う損害については、フューチャー株式会社は一切の責務を負わないものとします。
本コーディング規約は、世の中のシステム開発プロジェクトのために無償で提供致します。\
ただし、掲載内容および利用に際して発生した問題、それに伴う損害については、フューチャー株式会社は一切の責務を負わないものとします。\
また、掲載している情報は予告なく変更することがございますので、あらかじめご了承下さい。

# はじめに
Expand Down Expand Up @@ -109,6 +109,7 @@ description: "何かしらの説明"
- account_type
- register_at
```

- YAML は項目定義がネストすることで縦長な定義になりやすい。情報密度を上げるために配列リテラルを推奨する

## 改行の表現
Expand Down Expand Up @@ -779,7 +780,7 @@ components:
...
```

正常系のレスポンスの例としてはファイルアップロード・ダウンロードのレスポンスなどが該当する。
正常系のレスポンスの例としてはファイルアップロード・ダウンロードのレスポンスなどが該当する。\
個別のアプリケーション要件でブレが少なく、複数のエンドポイントで用いられる場合に定義する。オブジェクトのスキーマは、`schemas` に切り出して定義し、コード生成ツールのために型情報を付与させる。

良い例:
Expand Down
108 changes: 54 additions & 54 deletions documents/forSQL/SQLコーディング規約(Oracle).md
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,15 @@ head:

<page-title/>

本コーディング規約は、世の中のシステム開発プロジェクトのために無償で提供致します。
ただし、掲載内容および利用に際して発生した問題、それに伴う損害については、フューチャー株式会社は一切の責務を負わないものとします。
本コーディング規約は、世の中のシステム開発プロジェクトのために無償で提供致します。\
ただし、掲載内容および利用に際して発生した問題、それに伴う損害については、フューチャー株式会社は一切の責務を負わないものとします。\
また、掲載している情報は予告なく変更することがございますので、あらかじめご了承下さい。

# はじめに

## 前提条件

本書は、SQL コーディング規約についてまとめたものである。
本書は、SQL コーディング規約についてまとめたものである。\
今回 RDBMS として採用する Oracle での SQL の使用を前提に記述している。

# SQL コーティング規約(可読性・管理性)
Expand Down Expand Up @@ -48,17 +48,17 @@ head:

SQL 中に記述するエイリアス名など単語の短縮について示す。

1. 外来語に関しては、原語の短縮形を使用する。短縮形が存在しない場合には、母音を抜かして表記する。
1. 外来語に関しては、原語の短縮形を使用する。短縮形が存在しない場合には、母音を抜かして表記する。\
例) corporation → corp / computer → cmptr

2. ローマ字の短縮は、単語の区切れの頭文字、または母音を抜かした子音字等を利用する。
2. ローマ字の短縮は、単語の区切れの頭文字、または母音を抜かした子音字等を利用する。\
例) nichijo → nchj

- カラムには必ずテーブルエイリアスを付与する
- テーブルのエイリアスは必ず付与すること。
必要ない場合(単一テーブルへの SELECT 等)も必ず付与すること
また、テーブルのエイリアス名は同 SQL 文の中で重複しないように命名すること。
(副問い合わせで利用したエイリアス名をメインの SQL 中のエイリアス名に利用しない。など)
- テーブルのエイリアスは必ず付与すること。\
必要ない場合(単一テーブルへの SELECT 等)も必ず付与すること\
また、テーブルのエイリアス名は同 SQL 文の中で重複しないように命名すること。\
(副問い合わせで利用したエイリアス名をメインの SQL 中のエイリアス名に利用しない。など)

## 文字コード

Expand All @@ -70,14 +70,14 @@ SQL ファイルの文字コード(エンコーディング)は Java ソー

## SQL 文の整形

DML 文の節に対する予約語は左揃えにする。
項目ごとに改行を入れ、項目の前にはインデントを挿入する。カンマは項目の前へ記入する。
Java ソースファイルのようにファイルの先頭にコメント行を入れると DB 分析作業に支障があるため禁止とする。
DML 文の節に対する予約語は左揃えにする。\
項目ごとに改行を入れ、項目の前にはインデントを挿入する。カンマは項目の前へ記入する。\
Java ソースファイルのようにファイルの先頭にコメント行を入れると DB 分析作業に支障があるため禁止とする。\
よって SQL ファイルの先頭は必ず`SELECT`、`UPDATE`、`INSERT`、`DELETE`、`MERGE`の何れかになる。

物理カラム名、テーブル名に対応する論理名を入れる場合、その後ろに単数行コメント(`-- `)にて記述する。
SQL 内に挿入する単数行コメントは、`/*(半角スペース)コメント本文(半角スペース)*/` で行う。
`,`(カンマ)と`AND`については各行の先頭に記述する。(以下の例を参照のこと)
物理カラム名、テーブル名に対応する論理名を入れる場合、その後ろに単数行コメント(`-- `)にて記述する。\
SQL 内に挿入する単数行コメントは、`/*(半角スペース)コメント本文(半角スペース)*/` で行う。\
`,`(カンマ)と`AND`については各行の先頭に記述する。(以下の例を参照のこと)\
SQL フレームワークで実行する SQL の場合、SQL ステートメントの終わりを示す`;`(セミコロン)は記述しない。

良い例:
Expand Down Expand Up @@ -220,7 +220,7 @@ CASE
END
```

`CASE`、`WHEN`、`THEN`、`ELSE`の後に改行を挿入すること。
`CASE`、`WHEN`、`THEN`、`ELSE`の後に改行を挿入すること。\
`CASE`の後、`END`の前までは 1 インデント挿入すること。

### IN 句
Expand All @@ -233,9 +233,9 @@ END

### 改行位置

SELECT 句、ORDER BY 句、GROUP BY 句等は最初に出現するカラムとカラムの区切りのカンマ前に改行を入れること。
SELECT の FROM 句の最初に出現するテーブルと結合テーブルの区切りのカンマ前に改行を入れること。
WHERE 句、MERGE の ON 句の各条件文の(AND や OR の)前に改行を入れること。
SELECT 句、ORDER BY 句、GROUP BY 句等は最初に出現するカラムとカラムの区切りのカンマ前に改行を入れること。\
SELECT の FROM 句の最初に出現するテーブルと結合テーブルの区切りのカンマ前に改行を入れること。\
WHERE 句、MERGE の ON 句の各条件文の(AND や OR の)前に改行を入れること。\
命令句の後は、ヒント句が挿入できるように改行すること。

良い例:
Expand All @@ -257,7 +257,7 @@ ORDER BY

### WITH 句

WITH の前後に改行を挿入すること
WITH の前後に改行を挿入すること\
また、インデントは下記のように記述すること

良い例:
Expand Down Expand Up @@ -311,7 +311,7 @@ FETCH NEXT 5 ROWS ONLY

### HINT 句

HINT 句は独立した行で記載すること
HINT 句は独立した行で記載すること\
HINT 内容にはインデントを付けること

良い例:
Expand All @@ -332,8 +332,8 @@ WHERE

- 修正コメント

(修正コメントが必要な場合、)
処理追加の際、追加行の 1 行目の前と最終行の次の行にコメントを入れる。単一行の場合は、同一行の最後にコメントをつける。
(修正コメントが必要な場合、)\
処理追加の際、追加行の 1 行目の前と最終行の次の行にコメントを入れる。単一行の場合は、同一行の最後にコメントをつける。

良い例:

Expand All @@ -349,8 +349,8 @@ WHERE

- 複数行コメント

「 `/*` `*/` 」を使用する。下記に例を示す。
なお、前述で触れたとおり、SQL ファイルの先頭にコメントを記述することは禁止とする。
「 `/*` `*/` 」を使用する。下記に例を示す。\
なお、前述で触れたとおり、SQL ファイルの先頭にコメントを記述することは禁止とする。

良い例:

Expand All @@ -367,19 +367,19 @@ WHERE

- 複数行コメントアウト

複数行をコメントアウトする場合は、各行を「`--`」でコメントアウトする。
「 `/*` `*/` 」を使用すると、その中に「 `/*` `*/` 」が存在した場合、コメントアウトが途中で切れてしまう恐れがあるため、
使用しない。
複数行をコメントアウトする場合は、各行を「`--`」でコメントアウトする。\
「 `/*` `*/` 」を使用すると、その中に「 `/*` `*/` 」が存在した場合、コメントアウトが途中で切れてしまう恐れがあるため、\
使用しない。

- 論理名の記載

`SELECT`・`INSERT`・`UPDATE`・`MERGE`のカラム名記述箇所には単数行コメントでカラムの論理名を記載する。
`SELECT`・`INSERT`・`UPDATE`・`DELETE`・`MERGE`のテーブル名記述箇所には単数行コメントでテーブルの論理名を記載する。
論理名は ERD 等で定義された論理名と必ず一致させること。
`SELECT`・`INSERT`・`UPDATE`・`MERGE`のカラム名記述箇所には単数行コメントでカラムの論理名を記載する。\
`SELECT`・`INSERT`・`UPDATE`・`DELETE`・`MERGE`のテーブル名記述箇所には単数行コメントでテーブルの論理名を記載する。\
論理名は ERD 等で定義された論理名と必ず一致させること。

## 外部結合

結合方法は ANSI 形式(~`outer join` ~)ではなく Oracle 形式`(+)`を使用する。
結合方法は ANSI 形式(~`outer join` ~)ではなく Oracle 形式`(+)`を使用する。\
原則として`(+)`は条件文の右にくるカラムに付与する。

良い例:
Expand Down Expand Up @@ -408,8 +408,8 @@ T1.COL1 = T2.COL2(+)

## EXISTS 句

EXISTS 句を記載する際、サブクエリになる SELECT 句の指定は定数「`1`」とする。
「`*`」(ワイルドカード)や「`'X'`」は統一の観点から利用しない。
EXISTS 句を記載する際、サブクエリになる SELECT 句の指定は定数「`1`」とする。\
「`*`」(ワイルドカード)や「`'X'`」は統一の観点から利用しない。\
また「`*`」(ワイルドカード)についてはパフォーマンスの観点からも禁止とする。

良い例:
Expand All @@ -428,14 +428,14 @@ WHERE

## AS 句

トップレベルの SELECT 句には必ず`AS`句を記載し別名を付ける。
同一の名前であっても AS 句を付与する。
トップレベルの SELECT 句には必ず`AS`句を記載し別名を付ける。\
同一の名前であっても AS 句を付与する。\
また、「`AS`」は省略可能であるが、省略はしないこと。

## WHERE 句

- 論理名の記載
WHERE 句でカラムと式を比較する際は左辺がカラムになるように記載すること。
- 論理名の記載\
WHERE 句でカラムと式を比較する際は左辺がカラムになるように記載すること。

良い例:

Expand All @@ -445,9 +445,9 @@ WHERE
AND TBL.AMOUNT2 > TBL.AMOUNT3 + TBL.AMOUNT4
```

- 条件式の順序
原則として、WHERE 句で条件式を列挙する際、下記の順序を守ること。
1. テーブル単位にまとめて順番に記述する
- 条件式の順序\
原則として、WHERE 句で条件式を列挙する際、下記の順序を守ること。
1. テーブル単位にまとめて順番に記述する\
この際、テーブルの順序は FROM 句に記述した順序に準ずること。
2. 1.のテーブル単位の中で絞り込み条件をまず記述し、その後結合条件を記述する。

Expand Down Expand Up @@ -478,7 +478,7 @@ WHERE

## COUNT 文

レコード数を数える COUNT 文の記述は`COUNT(*)`と記述する。
レコード数を数える COUNT 文の記述は`COUNT(*)`と記述する。\
`COUNT(1)`・`COUNT('X')` ・`COUNT(KEY1)`という記載は NG。

# SQL コーディング規約(パフォーマンス性)
Expand All @@ -492,8 +492,8 @@ WHERE
- 中間一致、後方一致検索はインデックスを利用できないため避ける
- 検索条件で`=`(等号)を使用できる場合は必ず使用する

`A=1 or A=2`とする方が`A>0 and A<3`などと記述するのよりパフォーマンス上優位な場合が多い。
これは A にインデックスがある場合、`=`であれば、インデックスが有効に使われるためである。
`A=1 or A=2`とする方が`A>0 and A<3`などと記述するのよりパフォーマンス上優位な場合が多い。\
これは A にインデックスがある場合、`=`であれば、インデックスが有効に使われるためである。

- 可能な限り検索条件にパーティションキーの値を指定する
- 全列ワイルドカード「`*`」の使用はせず、カラム名を明記する
Expand Down Expand Up @@ -549,8 +549,8 @@ WHERE

更新処理におけるコーディング規約を下記に示す。

- 主キーの値の UPDATE は原則行わない。外部キーがあればエラーになる。
外部キーが無い場合でも、事実上、主キーの値を利用して、検索、更新する場合は、リンクが切れてしまう。
- 主キーの値の UPDATE は原則行わない。外部キーがあればエラーになる。\
外部キーが無い場合でも、事実上、主キーの値を利用して、検索、更新する場合は、リンクが切れてしまう。
- パーティションキーの UPDATE は原則行わない。
- VIEW を使用するデータ更新は禁止。更新は実表に対して行う。

Expand All @@ -566,7 +566,7 @@ WITH 句の誤った使い方はパフォーマンスの劣化を招くため、

## DISTINCT 句

DISTINCT は、暗黙のソート処理が行われる可能性があるため性能劣化につながる。
DISTINCT は、暗黙のソート処理が行われる可能性があるため性能劣化につながる。\
EXISTS 句の使用・代替を検討すること。

悪い例:
Expand Down Expand Up @@ -604,13 +604,13 @@ WHERE

## IN 句

IN 句は最大 1000 個まで指定できるが、200 個程度でも ORA エラーが発生するケースがある。
また IN 句の少しだけ異なる SQL が大量に発行されると CPU 高騰やメモリ枯渇を招く。
IN 句は最大 1000 個まで指定できるが、200 個程度でも ORA エラーが発生するケースがある。\
また IN 句の少しだけ異なる SQL が大量に発行されると CPU 高騰やメモリ枯渇を招く。\
従って 100 を超えるような長い IN 句は使用せず、一時表を利用して `IN (SELECT ・・・ FROM 一時表)`のように書き換える。

## NOT IN 句

原則`NOT IN(SELECT~)`は使用せずに、`NOT EXISTS (SELECT~)`を使用する。
原則`NOT IN(SELECT~)`は使用せずに、`NOT EXISTS (SELECT~)`を使用する。\
`NOT IN`句は、内部的にソートマージの結合をすることでテーブルをフルスキャンする場合があるため、性能が悪化する可能性がある。

## UNION 句
Expand All @@ -623,10 +623,10 @@ IN 句は最大 1000 個まで指定できるが、200 個程度でも ORA エ

## SELECT FOR UPDATE

- `SELECT FOR UPDATE`は`NO WAIT`または「`WAIT`秒数指定」を必ず付ける。
`WAIT`指定なしの場合はロックが解除されてもプログラムに制御が返らないことがある。
※WAIT 秒数指定を行う際の秒数は各開発者で決めるのではなくプロジェクトで決定した方針に従うこと。
また、SQL ライブラリを利用していて定数が記述できる場合は定数で記述すること。
- `SELECT FOR UPDATE`は`NO WAIT`または「`WAIT`秒数指定」を必ず付ける。\
`WAIT`指定なしの場合はロックが解除されてもプログラムに制御が返らないことがある。\
※WAIT 秒数指定を行う際の秒数は各開発者で決めるのではなくプロジェクトで決定した方針に従うこと。\
また、SQL ライブラリを利用していて定数が記述できる場合は定数で記述すること。
- `SELECT FOR UPDATE`で複数行にロックをかける場合、同時実行されるとデットロックを起こす可能性があるため、1件のロックでない場合は`ORDER BY`を指定する。

## 分析関数
Expand Down
Loading