📖 読了目安 約9分
この記事の目次

コードを書く基礎

読みやすく保守しやすいコードを書くための基礎を学びます。

コーディング規約

コーディング規約とは、コードを書く際のルールやスタイルです。

なぜコーディング規約が必要か

  • チーム内でコードの書き方を統一する
  • 読みやすく保守しやすいコードにする
  • 将来の自分や他のエンジニアが理解しやすくする
  • コードレビューの手間を減らす

現場ごとに規約がある

プロジェクトや会社によって規約は異なります。

  • 新しい現場に入ったらまずコーディング規約を確認
  • 規約が文書化されていない場合は、既存コードのスタイルに合わせる
  • 迷ったら先輩に聞く

よくある規約の項目

項目
インデント スペース4つ or タブ
命名規則 camelCase or snake_case
1行の長さ 80文字 or 120文字
波括弧の位置 同じ行 or 次の行
コメントの書き方 日本語OK or 英語のみ

命名規則

意味のある名前をつけることが最も重要です。

良い名前の例

int totalAmount;           // 合計金額
String userName;           // ユーザー名
boolean isActive;          // アクティブかどうか
void calculateTax() {}     // 税金を計算する
List<User> findByAge() {}  // 年齢で検索する

悪い名前の例

int a;                     // 何の値か分からない
String str1;               // 何の文字列か分からない
boolean flag;              // 何のフラグか分からない
void func() {}             // 何をする関数か分からない
void process() {}          // 曖昧すぎる

命名のコツ

コツ
略さない cntcountbtnbutton
動詞で始める(メソッド) getUsercalculateTotalvalidateInput
名詞を使う(変数) userorderListtotalAmount
真偽値は is/has/can で始める isValidhasPermissioncanEdit
複数形で配列・リストを表す usersitemsorders

命名スタイル

言語やチームによって使うスタイルが異なります。

スタイル よく使う場面
camelCase userName 変数名、メソッド名(Java、JS)
PascalCase UserName クラス名(ほとんどの言語)
snake_case user_name 変数名(Python、Ruby)
UPPER_SNAKE_CASE MAX_VALUE 定数
kebab-case user-name ファイル名、URL

コードのフォーマット

見た目を整えることで読みやすくなります。

インデント

インデントを揃えることでコードの構造が見やすくなります。

// 良い例:インデントが揃っている
if (user != null) {
    if (user.isActive()) {
        sendEmail(user);
    }
}

// 悪い例:インデントがバラバラ
if (user != null) {
if (user.isActive()) {
sendEmail(user);
}
}

チームのルールに従う:スペース4つ or スペース2つ or タブ

空白と改行

適切な空白で読みやすくなります。

// 読みやすい
int total = price * quantity + tax;

if (user != null && user.isActive()) {
    process(user);
}

// 読みにくい
int total=price*quantity+tax;

if(user!=null&&user.isActive()){process(user);}

1行の長さ

長すぎる行は適切に改行します。

// 読みにくい(1行が長すぎる)
String message = "ユーザー " + user.getName() + " の注文 " + order.getId() + " の処理が完了しました。合計金額は " + order.getTotalAmount() + " 円です。";

// 読みやすい(適切に改行)
String message = "ユーザー " + user.getName() +
                 " の注文 " + order.getId() +
                 " の処理が完了しました。" +
                 "合計金額は " + order.getTotalAmount() + " 円です。";

目安:80〜120文字程度(チームの規約に従う)

フォーマッタを使う

多くのIDEには自動フォーマット機能があります。

IDE ショートカット
Visual Studio Code Shift + Alt + F
IntelliJ IDEA Ctrl + Alt + L
Eclipse Ctrl + Shift + F

手動で整えるより、フォーマッタに任せる方が効率的で統一されます。


コメントの書き方

良いコメント

「なぜ」を書く

コードを見れば「何をしているか」は分かります。「なぜそうしているか」を書きましょう。

// 税率は法改正で変更される可能性があるため、定数として定義
final double TAX_RATE = 0.10;

// 外部APIの制限により、1回のリクエストは100件まで
int batchSize = 100;

// 古いブラウザとの互換性のため、新しい構文は使わない
var element = document.getElementById('myId');

複雑な処理の意図を説明する

// 配列を逆順にソートすることで、最新のデータが先頭に来るようにする
Arrays.sort(data, Collections.reverseOrder());

// 重複を除去しつつ元の順序を保持するため、LinkedHashSetを使用
Set<String> uniqueItems = new LinkedHashSet<>(items);

TODO/FIXMEコメント

// TODO: パフォーマンス改善が必要。N+1問題あり
// FIXME: nullの場合の処理が未実装
// HACK: 一時的な回避策。本来はリファクタリングが必要

悪いコメント

コードを日本語に訳しただけ

// iに1を加える
i = i + 1;

// ユーザーを取得する
User user = getUser();

コードを見れば分かることは書く必要がありません。

古くなって嘘になっている

// 税率8%で計算
double tax = amount * 0.10;  // 実際は10%

コードを修正したらコメントも更新しましょう。嘘のコメントは害です。

コメントアウトしたコード

// String oldMethod() {
//     return "ancient code";
// }

不要なコードはバージョン管理で履歴が残るので削除しましょう。


関数・メソッドの書き方

1つのことだけをする

1つのメソッドで複数のことをしない。

// 悪い例:複数のことをしている
void processOrder(Order order) {
    // バリデーション
    if (order.getItems().isEmpty()) {
        throw new ValidationException();
    }
    // 在庫チェック
    for (Item item : order.getItems()) {
        if (!inventory.hasStock(item)) {
            throw new OutOfStockException();
        }
    }
    // 保存
    orderRepository.save(order);
    // メール送信
    emailService.sendConfirmation(order);
}

// 良い例:それぞれのメソッドに分ける
void processOrder(Order order) {
    validateOrder(order);
    checkStock(order);
    saveOrder(order);
    sendConfirmationEmail(order);
}

適切な長さに保つ

  • 1メソッドは20〜30行程度が目安
  • 画面に収まる程度がベスト
  • 長くなったら分割を検討

引数は少なく

引数が多すぎると理解しづらくなります。

// 悪い例:引数が多い
void createUser(String name, String email, String phone,
                String address, int age, boolean isAdmin) { ... }

// 良い例:オブジェクトにまとめる
void createUser(UserCreateRequest request) { ... }

コードレビューを受ける心構え

指摘は「コード」に対するもの

  • 人格への攻撃ではない
  • 「コードをより良くする」ためのフィードバック
  • 感情的にならない

分からない指摘は質問する

レビューコメント:「ここはnullチェックが必要です」

× 「なぜか分からないけど直す」
○ 「どのような場合にnullになりますか?」と質問する

学びの機会として捉える

  • 同じ指摘を繰り返し受けないようにメモ
  • 「自分では気づかなかった視点」を学ぶ
  • 先輩のコードの書き方を参考にする

よくある指摘と対策

よくある指摘 対策
「命名が分かりにくい」 何を表すか具体的に書く
「マジックナンバーを定数に」 意味のある名前の定数にする
「nullチェックがない」 入力値は信用しない
「コメントがない」 「なぜ」を説明するコメントを追加
「メソッドが長い」 処理を分割する

まとめ

項目 ポイント
コーディング規約 現場のルールに従う、まず確認する
命名 意味のある名前、略さない、動詞/名詞を使い分け
フォーマット インデントを揃える、フォーマッタを使う
コメント 「なぜ」を書く、コードの説明は不要
関数・メソッド 1つのことだけ、短く、引数は少なく
コードレビュー 学びの機会、指摘はコードへのフィードバック

心がけ

  • 「未来の自分や他のエンジニアが読む」ことを意識する
  • 迷ったら既存コードのスタイルに合わせる
  • レビューで学んだことをメモして次に活かす