テキストをsnake_case(スネークケース)に変換する

Python、Ruby、データベースのカラム名付けのためにテキストをsnake_caseに変換する方法を学びます。アンダースコアによる単語分離の慣例と、他のケースとの使い分けを解説します。

Programming Cases

詳細な説明

テキストをsnake_caseに変換する

snake_caseはすべてのスペースと区切り文字をアンダースコア(_)に置き換え、すべての文字を小文字にします。単語間のアンダースコアが地面に横たわる蛇のように見えることから「スネークケース」と呼ばれます。

基本的な変換

入力:  User First Name
出力:  user_first_name

入力:  backgroundColor
出力:  background_color

入力:  GET-API-RESPONSE
出力:  get_api_response

snake_caseが使用される場所

# Python — 変数、関数、メソッド、モジュール(PEP 8)
user_name = "Alice"
def get_user_profile(user_id):
    pass
import json_parser

# Ruby — 変数、メソッド、ファイル名
first_name = "Alice"
def calculate_total_price(items)
end

データベースのカラム名

snake_caseはデータベーススキーマのデファクトスタンダードです:

CREATE TABLE user_profiles (
    user_id       SERIAL PRIMARY KEY,
    first_name    VARCHAR(100),
    last_name     VARCHAR(100),
    email_address VARCHAR(255),
    created_at    TIMESTAMP DEFAULT NOW(),
    updated_at    TIMESTAMP
);

変換アルゴリズム

  1. 小文字の後の大文字の前にアンダースコアを挿入(camelCase入力用)。
  2. すべてのハイフン、ドット、スペースをアンダースコアに置換。
  3. 連続するアンダースコアを1つにまとめる。
  4. 文字列全体を小文字にする。
  5. 先頭と末尾のアンダースコアをトリム。

頭字語の処理

"XMLParser"     → "xml_parser"
"getHTTPSUrl"   → "get_https_url"
"userID"        → "user_id"

エッジケース

  • 単一単語: "hello""hello"
  • 既にsnake_case: そのまま通過します。
  • 連続する大文字: "HTMLParser""html_parser"
  • 数字: "item2Count""item_2_count" または "item2_count"(アルゴリズムによる)。

ユースケース

snake_caseはPython(PEP 8)とRubyのスタイルガイドで変数名と関数名に必須です。すべての主要RDBMSのデータベースカラム名、Rustの変数名の標準であり、PythonとRubyのバックエンドでREST API JSONキーに一般的に使用されます。JavaScriptフロントエンドとPython/Rubyバックエンド間のマッピング時にcamelCaseやPascalCaseからsnake_caseへの変換は頻繁な作業です。

試してみる — Text Case Converter

フルツールを開く