変数名・関数名の長さの目安|プログラミングの命名規則

約 8 分で読めます

プログラミングにおいて、変数名や関数名の命名はコードの可読性を左右する最も重要な要素の一つです。短すぎる名前は意味が伝わらず、長すぎる名前はコードを冗長にします。適切な長さの名前を付けるには、スコープの広さや役割の複雑さに応じた判断基準が必要です。この記事では、命名の長さの目安と各言語の慣例を解説します。リーダブルコードの関連書籍も命名の参考になります。名前の文字数確認には 文字数カウントス をご活用ください。

スコープに応じた変数名の長さの目安

変数名の適切な長さは、その変数が使われるスコープの広さに比例します。Robert C. Martin の「Clean Code」や Google のスタイルガイドでも、この原則は広く支持されています。この背景には認知心理学の知見があります。人間の短期記憶 (ワーキングメモリ) は同時に 4〜7 個の情報チャンクしか保持できないため、スコープが広い変数ほど「名前だけで意味を復元できる」説明的な命名が必要になります。逆にスコープが 2〜3 行のループ内であれば、文脈そのものがチャンクとして機能するため、i のような短い名前でも認知負荷は低く抑えられます。

スコープ 推奨文字数 理由
ループカウンタ (1〜3 行) 1〜2 文字 i, j, k 慣例として広く認知されており、短いスコープでは十分に意味が伝わる
ラムダ・短いブロック (5 行以内) 3〜8 文字 item, user, val 文脈から型や役割が推測できる範囲
関数内ローカル変数 8〜15 文字 userName, totalPrice 関数の処理を読み解く際に、変数の役割が明確に伝わる長さ
クラスのフィールド・プロパティ 10〜20 文字 maxRetryCount, isAuthenticated クラス全体で参照されるため、より具体的な名前が必要
グローバル変数・定数 15〜25 文字 MAX_CONNECTION_TIMEOUT, DEFAULT_PAGE_SIZE コードベース全体で参照される可能性があり、曖昧さを排除する必要がある

この目安はあくまで指針であり、重要なのは「名前を見ただけで役割が理解できるか」という基準です。スコープが狭ければ短い名前でも文脈から意味が伝わり、スコープが広ければ具体的な名前が求められます。

主要 OSS プロジェクトの命名長分析

実際のオープンソースプロジェクトでは、識別子の長さにどのような傾向があるのでしょうか。主要プロジェクトのソースコードを分析すると、言語やプロジェクトの性質によって命名の長さに明確な差が見られます。

プロジェクト 言語 変数名の平均文字数 関数名の平均文字数 特徴
Linux Kernel C 約 6 文字 約 12 文字 変数は短く、関数名はモジュール接頭辞付きで長め
Spring Framework Java 約 12 文字 約 18 文字 説明的な命名が徹底され、全体的に長い
CPython Python 約 8 文字 約 14 文字 snake_case のアンダースコア分を含む
React JavaScript 約 9 文字 約 15 文字 コンポーネント名は長め、内部変数は短め
Kubernetes Go 約 7 文字 約 13 文字 Go の簡潔さの文化を反映し、変数名は短い
Ruby on Rails Ruby 約 9 文字 約 15 文字 DSL 的なメソッド名が多く、自然言語に近い

注目すべきは、C 言語のプロジェクトでは変数名が短い一方、関数名にはモジュール接頭辞 (tcp_v4_connectext4_read_inode など) が付くため相対的に長くなる点です。名前空間の仕組みを持たない C 言語では、接頭辞が名前空間の代替として機能しています。一方、Java の Spring Framework では IDE の自動補完を前提とした長い命名が標準であり、AbstractTransactionalDataSourceSpringContextTests のような 50 文字超のクラス名も珍しくありません。

関数名・クラス名の命名規則と長さ

関数名とクラス名は変数名よりも広いスコープで使われるため、より説明的な名前が求められます。ただし、冗長になりすぎると呼び出し側のコードが読みにくくなるため、バランスが重要です。

識別子の種類 推奨文字数 命名のポイント
関数名 10〜25 文字 動詞 + 目的語の形式で、何をする関数かを明示する calculateTotalPrice, sendEmailNotification
クラス名 10〜25 文字 名詞または名詞句で、クラスが表す概念を示す UserRepository, PaymentProcessor
インターフェース名 10〜25 文字 振る舞いを表す形容詞、または名詞を使用する Serializable, EventListener
定数名 10〜30 文字 UPPER_SNAKE_CASE で、値の意味を具体的に示す MAX_RETRY_COUNT, DEFAULT_TIMEOUT_MS
Boolean 変数・関数 10〜20 文字 is / has / can / should などのプレフィックスを付ける isValid, hasPermission, canExecute

関数名は「動詞で始める」が鉄則です。data() より fetchData()validation() より validateInput() のほうが、関数の振る舞いが明確に伝わります。

各言語の命名慣例の比較

プログラミング言語ごとに命名のスタイルや慣例は異なります。チーム開発では、使用言語の公式スタイルガイドに従うことが基本です。

言語 変数・関数 クラス 定数 公式ガイド
Java camelCase PascalCase UPPER_SNAKE_CASE Google Java Style Guide
Python snake_case PascalCase UPPER_SNAKE_CASE PEP 8
JavaScript camelCase PascalCase UPPER_SNAKE_CASE Airbnb Style Guide 等
Go camelCase (非公開) / PascalCase (公開) PascalCase PascalCase または camelCase Effective Go
Ruby snake_case PascalCase UPPER_SNAKE_CASE Ruby Style Guide
C# camelCase (ローカル) / PascalCase (公開) PascalCase PascalCase Microsoft C# Coding Conventions

長すぎる名前と短すぎる名前の問題点

命名の長さには「短すぎて意味不明」と「長すぎて冗長」の両極端な失敗があります。短すぎる名前の典型例は dtmpval のような変数名です。ループカウンタ以外の文脈でこれらを使うと、数日後の自分ですら意味を思い出せなくなります。

一方、長すぎる名前も問題です。numberOfItemsInTheShoppingCartBeforeDiscount のような変数名は、1 行に収まらず、コードの可読性をかえって損ないます。適切な長さとは「名前を見ただけで役割が理解でき、かつコードの流れを妨げない」バランスです。

認知科学の観点では、識別子の長さと読解速度の関係は U 字型のカーブを描きます。短すぎる名前は「意味の復元」に認知コストがかかり、長すぎる名前は「視覚的な走査」に認知コストがかかります。研究によると、英語の識別子では 8〜20 文字の範囲が最も読解効率が高いとされています。これは、人間の視覚が一度に認識できる文字列の長さ (約 7〜10 文字) と、意味を伝えるために必要な最小限の単語数 (2〜3 語) のバランスに起因します。

IDE の自動補完と名前の長さの関係

「名前が長いと入力が面倒」という懸念は、現代の IDE ではほぼ解消されています。主要 IDE の自動補完機能を比較すると、名前の長さが開発速度に与える影響は極めて小さいことがわかります。

IDE / エディタ 補完の起動 補完精度の特徴 長い名前への対応
IntelliJ IDEA 入力と同時に自動起動 CamelCase の頭文字マッチ (gUNgetUserName) 頭文字 2〜3 文字で候補が絞り込まれるため、長い名前でも入力コストは低い
VS Code 入力と同時に自動起動 ファジーマッチ (usrnmuserName) 部分一致で候補が表示されるため、正確な綴りを覚える必要がない
Vim / Neovim (LSP) Ctrl+N または LSP 連携 LSP ベースの型情報を活用した補完 coc.nvim や nvim-cmp で IDE 同等の補完が可能

IntelliJ IDEA の CamelCase マッチは特に強力で、ACTDSCT と入力するだけで AbstractConcurrentTransactionalDataSourceSpringContextTests が補完されます。つまり、名前の長さを「入力の手間」で制限する必要はなく、純粋に「読みやすさ」の観点で最適な長さを選べます。

意外と知らない命名のトリビア

Linux カーネルのコーディングスタイルガイドでは、変数名は短いほうが良いとされています。Linus Torvalds 自身が「ループ変数に loop_counter ではなく i を使え」と明言しており、カーネル開発では簡潔さが美徳とされています。

一方、Google の Java スタイルガイドでは 1 文字の変数名はループカウンタとラムダのパラメータ以外では非推奨です。この対照的な方針は、カーネル開発 (少人数の熟練者が読むコード) と大規模 Web サービス (多人数が読むコード) という文脈の違いを反映しています。GitHub 上のオープンソースプロジェクトを対象とした調査では、平均的な変数名の長さは約 8.5 文字とされています。

Unicode とマルチバイト文字の変数名

多くのプログラミング言語は Unicode 識別子をサポートしていますが、実務で非 ASCII 文字を変数名に使う際にはいくつかの落とし穴があります。

言語 Unicode 変数名 具体例 注意点
Python 3 完全サポート 名前 = "太郎" PEP 8 は ASCII のみを推奨。国際チームでは避けるべき
Ruby 完全サポート 数値 = 42 マジックコメント # encoding: utf-8 が必要 (Ruby 2.0 未満)
JavaScript Unicode エスケープ可 let café = true アクセント付き文字の正規化 (NFC/NFD) で同一名が別識別子になる場合がある
Java 完全サポート int 金額 = 1000; コンパイルは通るが、ほぼ全てのスタイルガイドで非推奨
Go Unicode 文字カテゴリに依存 名前 := "太郎" Unicode の Letter カテゴリに属する文字のみ使用可能
C / C++ C11/C++11 以降で限定サポート int données = 0; コンパイラによって対応状況が異なる

特に注意が必要なのは JavaScript の Unicode 正規化の問題です。café という変数名は、é を 1 文字 (U+00E9) で表す NFC 形式と、e + 結合アクセント (U+0065 U+0301) で表す NFD 形式の 2 通りの表現があり、見た目は同じでも別の識別子として扱われます。macOS のファイルシステム (APFS) は NFD を使用するため、ファイル名から変数名を生成するようなケースで予期しないバグが発生することがあります。

また、予約語との衝突も見落としがちなエッジケースです。Python では classimportreturn などが予約語ですが、cls (class の略) や klass のような回避策が慣例として定着しています。JavaScript では class が ES6 で予約語になったため、それ以前のコードで変数名として使われていた class が構文エラーになるという移行問題も発生しました。

よくある失敗パターン

プロが実践する命名テクニック

リンターによる命名規則の自動チェック

命名規則をチーム内で統一するには、リンターによる自動チェックが不可欠です。主要な言語ごとに、命名規則を強制できるリンターとその設定例を紹介します。

言語 リンター 命名関連ルール 設定例
JavaScript / TypeScript ESLint @typescript-eslint/naming-convention 変数は camelCase、定数は UPPER_CASE、型は PascalCase を強制
Python pylint / Ruff C0103 (invalid-name) snake_case の強制、最小文字数 (デフォルト 2 文字) の設定
Java Checkstyle MemberName, MethodName 正規表現パターンで命名規則を定義
Go golangci-lint revivevar-naming MixedCaps の強制、頭字語 (ID, URL) の大文字統一
Ruby RuboCop Naming/VariableName snake_case の強制、最大文字数の制限

ESLint の @typescript-eslint/naming-convention ルールは特に柔軟で、識別子の種類 (変数、関数、クラス、インターフェースなど) ごとに異なる命名規則を定義できます。たとえば「Boolean 型の変数は ishasshould で始まること」といった意味的な制約も設定可能です。CI/CD パイプラインにリンターを組み込むことで、命名規則の違反をマージ前に自動検出できます。

まとめ

変数名・関数名の適切な長さは、スコープの広さに比例します。ループカウンタは 1〜2 文字、ローカル変数は 8〜15 文字、グローバル定数は 15〜25 文字が目安です。この原則の背景には、人間のワーキングメモリの容量制限という認知科学的な根拠があります。主要 OSS プロジェクトの分析でも、Linux Kernel の変数名平均 6 文字から Spring Framework の 12 文字まで、プロジェクトの性質に応じた命名長の違いが確認できます。Unicode 変数名のサポートは広がっていますが、正規化の問題や国際チームでの可読性を考慮すると、ASCII 文字に限定するのが現実的です。略語の乱用やハンガリアン記法の誤用を避け、リンターによる自動チェックと CI/CD への組み込みで命名規則を統一することが、可読性の高いコードへの近道です。命名の文字数を確認する際は、文字数カウントス をご活用ください。