コーディング規約は、チームでコードの書き方をそろえるための決まりです。 作るときのコツは、「ツールで自動で守らせる部分」と「人がレビューで見る部分」を分けることです。書式や命名のように機械で判定できるものを文章で長く書くと、読まれず、守られません。

区分 例 守らせ方
書式(インデント・改行・空白・括弧の位置) if( → if ( フォーマッタが自動で直す(Prettier・google-java-format など)
機械で判定できる決まり(命名・import・例外の握りつぶし) FindNames → findNames リンターが指摘(Checkstyle・ESLint・Ruff など)
人が判断する決まり(設計・名前の意味・ログに出す内容) 「この名前で何をするか分かるか」 規約の文書+レビュー

この記事では、書式の崩れたコードをフォーマッタにかけ、直ったもの・直らなかったものを確かめました。

確認環境:Prettier 3.9.10+prettier-plugin-java 2.11.0、Ruff 0.17.0(Linux)で確かめました(確認日 2026年10月12日)。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「コーディング規約の作り方|テンプレートと自動チェックの設定」

1. まず「土台にする規約」を決める

一から書くより、公開されている規約を土台にして、チームで変えたいところだけを書き足すほうが早く、抜けも少なくなります。

言語 土台にしやすい規約 主な決まり(例)
Java Google Java Style Guide 1行100文字、インデント2スペース、ワイルドカード import を使わない
Python PEP 8 関数名は小文字とアンダースコア、インデント4スペース
JavaScript・TypeScript 各リンターの推奨設定(ESLint の recommended など) 未使用の変数を残さない など

Google Java Style Guide には、たとえば次のように書かれています。

項目 原文
1行の長さ Java code has a column limit of 100 characters.
インデント the indent increases by two spaces.
ワイルドカード import Wildcard ("on-demand") imports, static or otherwise, are not used.
定数名 Constant names use UPPER_SNAKE_CASE
メソッド名 Method names are written in lowerCamelCase.
例外 It is very rarely correct to do nothing in response to a caught exception.

インデントを4スペースにしたいなど、土台と違う決まりは「変更点」として一覧にしておくと、新しく入った人が迷いません。

2. 規約に書く項目(テンプレート)

ツールで守らせる項目は「ツールと設定ファイルの場所」だけを書き、文章は人が判断する項目に使います。

章 書くこと 守らせ方
0. 土台と変更点 土台にした規約、変えた点 文書
1. 書式 フォーマッタの名前と設定ファイル(例:.prettierrc) 自動
2. 命名 クラス・メソッド・変数・定数・テーブル・API の形 リンター+意味はレビュー
3. 例外 握りつぶさない、何を catch するか、業務エラーとシステムエラーの分け方 リンター+レビュー
4. ログ レベルの使い分け、個人情報を出さない、出す項目 レビュー
5. null・Optional 戻り値に null を返さない、Optional の使いどころ レビュー(一部リンター)
6. コメント 「なぜ」を書く、公開メソッドの Javadoc レビュー
7. テスト テストの置き場所、名前の付け方、何を必ず書くか レビュー+CI
8. 禁止事項 文字列の == 比較、System.out.println の残し忘れ など リンター
9. 例外の扱い 規約から外れてよい場合と、その書き方(抑止のコメント) 文書

「なぜその決まりなのか」を1行添えると、守られやすくなり、例外の判断もしやすくなります。

【例外】Exception をまとめて catch して何もしないことは禁止。
  理由:障害の原因がログに残らず、調査できなくなるため。
  例外:外部ライブラリが Exception しか投げない場合は、ログを出したうえで catch してよい。

ログと例外の決め方は、関連記事「ログレベルの使い分け|ERROR・WARN・INFO・DEBUGの判断基準とログ設計」「エラー処理設計の方針|業務エラーとシステムエラーの分類表とテンプレート」で、名前の付け方は「変数名・関数名の付け方|命名規則と言語別のルール」で扱っています。

3. 書式はフォーマッタに任せる(再現)

次の Java のコードを、Prettier(prettier-plugin-java)にかけました。

package com.example;
import java.util.*;
public class OrderService{
  private static final int max_items=100;
  public List<String> FindNames(List<Order> orders){
    List<String> result=new ArrayList<>();
    for(Order o:orders){ if(o.getStatus()=="PAID"&&o.getTotal()>0){result.add(o.getCustomerName());} }
    return result;
  }
  public int calc(int a,int b){try{return a/b;}catch(Exception e){return 0;}}
}

設定ファイル(.prettierrc)です。

{
  "plugins": ["prettier-plugin-java"],
  "printWidth": 100,
  "tabWidth": 4
}
npx prettier --check src/      # 崩れていれば終了コード1(CI で使う)
npx prettier --write src/      # 直す

--check は Code style issues found と表示して終了コード1になり、--write のあとは次のようになりました。

package com.example;

import java.util.*;

public class OrderService {

    private static final int max_items = 100;

    public List<String> FindNames(List<Order> orders) {
        List<String> result = new ArrayList<>();
        for (Order o : orders) {
            if (o.getStatus() == "PAID" && o.getTotal() > 0) {
                result.add(o.getCustomerName());
            }
        }
        return result;
    }

    public int calc(int a, int b) {
        try {
            return a / b;
        } catch (Exception e) {
            return 0;
        }
    }
}

見た目は整いましたが、中身の問題は1つも直っていません。

残った問題 規約での決まり(例) 見つける方法
import java.util.*; ワイルドカード import を使わない リンター
max_items(定数) 定数は MAX_ITEMS リンター
FindNames(メソッド) メソッドは findNames リンター
o.getStatus() == "PAID" 文字列は equals で比べる リンター
catch (Exception e) { return 0; } 例外を握りつぶさない リンター+レビュー

フォーマッタは「書式」、リンターは「決まり」、レビューは「意味」を受け持つ、と分けて考えます。

4. 決まりはリンターで指摘させる

Java:Checkstyle のチェック名

Java では Checkstyle がよく使われます。上の表の問題に対応するチェックは次のとおりです(説明は Checkstyle のドキュメントの原文)。

問題 チェック名 説明(原文)
ワイルドカード import AvoidStarImport Checks that there are no import statements that use the * notation.
定数名 ConstantName Checks that constant names conform to a specified pattern.
メソッド名 MethodName Checks that method names conform to a specified pattern.
文字列の == StringLiteralEquality Checks that string literals are not used with == or !=.
Exception の catch IllegalCatch Checks that certain exception types do not appear in a catch statement.
空の catch EmptyCatchBlock Checks for empty catch blocks.

設定ファイル(checkstyle.xml)に、チームで使うチェックを並べます。

<module name="Checker">
  <module name="TreeWalker">
    <module name="AvoidStarImport"/>
    <module name="ConstantName"/>
    <module name="MethodName"/>
    <module name="StringLiteralEquality"/>
    <module name="IllegalCatch"/>
    <module name="EmptyCatchBlock"/>
  </module>
</module>

同じ問題を Ruff(Python)で確かめた

リンターが実際にどう指摘するかを、同じ種類の問題を含む Python のコードで確かめました。

from os.path import *

MaxItems = 100

def FindNames(orders):
    result = []
    for o in orders:
        if type(o) == dict and o["status"] == "PAID":
            result.append(o["name"])
    return result

def calc(a, b):
    try:
        return a / b
    except Exception:
        return 0
# ruff.toml
line-length = 100

[lint]
select = ["E", "F", "N", "BLE", "B"]
$ ruff check order_service.py --output-format concise
order_service.py:1:1: F403 `from os.path import *` used; unable to detect undefined names
order_service.py:5:5: N802 Function name `FindNames` should be lowercase
order_service.py:8:12: E721 Use `is` and `is not` for type comparisons, or `isinstance()` for isinstance checks
order_service.py:15:12: BLE001 Do not catch blind exception: `Exception`
Found 4 errors.

import・命名・型の比べ方・例外の握りつぶしの4つが、行番号つきで指摘されました。 終了コードは1なので、CI でそのまま止められます。

5. CIとエディタで「守るのが当たり前」にする

場所 すること 効果
エディタ 保存時にフォーマッタを実行 書式の差分がレビューに出なくなる
.editorconfig 文字コード・改行・インデントをそろえる エディタが違ってもそろう
コミット前(pre-commit など) フォーマッタとリンターを実行 崩れたコードがリポジトリに入らない
CI(プルリクエストごと) prettier --check・リンターを実行し、失敗ならマージしない 規約を守ったかを人が見なくてよくなる
# .editorconfig
root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true

[*.java]
indent_style = space
indent_size = 4

既存のコードに後から入れるときは、一度に全部を直すと差分が大きくなりすぎます。 書式だけを直すコミットを1回に分ける、リンターは新しく変えたファイルから対象にする、など段階を決めて入れます。

6. レビューで見ること(ツールでは見られないこと)

観点 例
名前が中身と合っているか calc では何を計算するか分からない → divideOrZero など
例外の扱いが正しいか 0 で割ったときに 0 を返してよいのか、仕様に照らす
ログに出してよい内容か 氏名・メールアドレス・パスワードを出していないか
規約の例外を使った理由が書かれているか 抑止コメントに理由があるか

レビューの観点は、関連記事「コードレビューの観点チェックリスト|優先順位と伝え方」で扱っています。

よくある質問

Q. 規約は何ページくらいがいいですか。 A. 書式と命名の形をツールに任せると、文書に残るのは「人が判断する決まり」だけになり、数ページに収まることが多くなります。長い規約ほど読まれにくいので、ツールで守れるものは文章から外します。

Q. タブかスペースか、インデントは何文字かで揉めます。 A. 土台にした規約に合わせるか、フォーマッタの既定値に合わせると、議論が短くなります。大事なのは、決めたあとはフォーマッタが自動で守ることです。

Q. 生成AIが書いたコードにも規約を守らせたい。 A. AIが書いたコードも、同じフォーマッタ・リンター・CI を通せば守らせられます。プロジェクトの説明ファイル(CLAUDE.md など)に「フォーマッタとリンターを実行してから終える」と書いておく方法もあります。AIのコードの確かめ方は、関連記事「AI生成コードの確認チェックリスト|品質とセキュリティ」で扱っています。

Q. 規約を守らない人がいます。 A. 人に注意するより、CI で止める仕組みにするほうが、関係もこじれません。ツールで止められない決まりは、レビューの観点表に入れて、誰が見ても同じ指摘になるようにします。

まとめ

  • 規約は フォーマッタ(書式)・リンター(決まり)・レビュー(意味) に分けて作る
  • 公開されている規約を土台にし、変えるところだけを書き足す
  • Prettier で整えても、命名・ワイルドカード import・文字列の ==・例外の握りつぶしは残った
  • リンター(Checkstyle・Ruff など)は 行番号つきで指摘し、終了コード1で CI を止められる
  • 文書には 「なぜその決まりか」 を1行添え、CI で守るのを当たり前にする

参考・出典

確認日はいずれも 2026年10月12日です。

  • Google Java Style Guide:https://google.github.io/styleguide/javaguide.html
  • PEP 8(Style Guide for Python Code):https://peps.python.org/pep-0008/
  • Checkstyle「Checks」:https://checkstyle.org/checks.html
  • Prettier ドキュメント「CLI」(--check・--write):https://prettier.io/docs/cli
  • prettier-plugin-java 2.11.0(npm):https://www.npmjs.com/package/prettier-plugin-java
  • Ruff ドキュメント「Rules」:https://docs.astral.sh/ruff/rules/
  • EditorConfig:https://editorconfig.org/

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「コーディング規約の作り方|テンプレートと自動チェックの設定」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?