こんにちは。
AIに実装をさせてコードを見てみると、やたらと長い関数名が連打されていたりしませんか?
例えば、createReviewFieldNeutralizer とか advanceNeutralizationCacheGeneration みたいな感じです。
もちろん長くても意味が伝わりやすいならいいんですが、単語の使い方も統一されていなかったりして非常に見通しが悪い。
そんなコードを前にすると関数名だけでは挙動を全く予想できず、レビューの負荷が高いですよね。
AI生成コードが読みにくい原因は、関数名や変数名の命名規則を作っていないことです。
なんでも命名に使わせるのではなく、人間とAIで共通認識が取れた狭い語彙を規定することで見通しの良いコードを生成させることができます。
そこで、関数名によく使われる英語動詞89語をチートシートにしました。必要に応じて使ってみてください。
命名規約はAI登場以前よりある考え方
関数名から処理を予想できるようにする考え方は、AIやバイブコーディング登場以前から使われてきました。
例えば、user()だけではユーザー情報を取得するのか、変更するのか、あるいは削除するのか分かりません。getUser() updateUser() deleteUser()に分かれていれば、名前だけで処理の違いを予想できます。
他にもこんな例があります。
- .NET:変換に失敗すると例外を投げる
Parseと、成功可否を真偽値で返すTryParseを区別 - Swift:元の値を並べ替える
sortと、並べ替えた新しい値を返すsortedを区別
このように、関数名は「何をする処理か」だけでなく、失敗時の扱いや副作用の有無を伝える手がかりにもなります。
ただし、同じ動詞がすべての言語やプロジェクトで同じ意味になるわけではないので注意してください。言語ごとに微妙に違うことはよくあります。
このチートシートもあくまで目安ですので状況に合わせてお使いください。
AI生成コードのレビューで使う関数名チートシート
取得、検索、集約
| 単語 | 名前から期待できる処理 | 使用例 |
|---|---|---|
get | 識別子などを使って1件取得する。存在しない場合をエラーとして扱うことが多い。 | getUserById(userId) |
find | 条件に合うものを0件または1件探す。 0件の場合が想定されるならこちら。 | findUserByEmail(email) |
list | 対象となるものを0件以上列挙する。 | listProjectMembers(projectId) |
search | 検索語や複数条件を使い、条件に合うものを0件以上探す。 | searchArticles(query, filters) |
filter | 取得済みの集合から、条件に合うものだけを残す。 | filterActiveUsers(users) |
collect | 複数の取得元や処理結果から値を集める。 | collectValidationErrors(results) |
lookup | キーや対応表を使って値を引く。 | lookupCountryName(countryCode) |
read | 現在の状態や保存された内容を読み取る。対象の状態は変更しない。 | readFileContents(filePath) |
load | 保存先から読み込み、利用可能な状態にする。 | loadApplicationSettings() |
fetch | APIやネットワークなどの外部取得元からデータを取得する。 | fetchExchangeRates() |
resolve | 名前、ID、参照情報から、実際に使用する値や対象を特定する。 | resolveUserId(username) |
count | 条件に合うものの件数を返す。 | countUnreadMessages(userId) |
生成、追加
| 単語 | 名前から期待できる処理 | 使用例 |
|---|---|---|
build | 複数の値を組み立てて、何らかのデータを作る。 | buildHttpRequest(options) |
create | 新しい対象を生成し、必要に応じて保存する。 | createUser(input) |
generate | 規則、乱数、入力値などから新しい値を生成する。 | generatePasswordResetToken() |
add | 既存の集合や対象に、新しい要素や関連を追加する。 | addItemToCart(cart, item) |
insert | 集合やデータの特定位置に要素を挿入する。 | insertItemAt(items, index, item) |
登録、関連付け
| 単語 | 名前から期待できる処理 | 使用例 |
|---|---|---|
register | 後から参照または利用できるように登録する。 | registerPlugin(plugin) |
unregister | 登録状態を解除する。 | unregisterPlugin(pluginId) |
attach | 対象同士を関連付ける、または処理を取り付ける。 | attachFileToMessage(messageId, file) |
detach | 関連付けや取り付けを解除する。 | detachFileFromMessage(messageId, fileId) |
更新、保存、削除
| 単語 | 名前から期待できる処理 | 使用例 |
|---|---|---|
set | 特定の値を、指定された値に設定する。 | setUserStatus(userId, status) |
update | 既存の対象の一部を変更する。 | updateUserProfile(userId, changes) |
replace | 既存の値や対象全体を別のものに置き換える。 | replaceDocumentContents(documentId, contents) |
apply | 設定、ルール、変更内容などを対象に反映する。 | applyDiscount(order, coupon) |
save | 現在の状態を永続化する。 | saveDraft(article) |
sync | 複数の場所にある状態を一致させる。 | syncLocalContactsWithServer() |
remove | 集合や関連から取り除く。対象そのものは残る場合がある。 | removeMemberFromTeam(teamId, userId) |
delete | 対象そのものを削除する。 | deleteUserAccount(userId) |
clear | 保持している内容をすべて空にする。 | clearSearchHistory() |
reset | 初期状態または既定値に戻す。 | resetFormToDefaults(form) |
restore | 保存済みの以前の状態に戻す。 | restoreDocumentVersion(documentId, versionId) |
判定
| 単語 | 名前から期待できる処理 | 使用例 |
|---|---|---|
is | 対象が特定の状態か判定する。 | isUserActive(user) |
has | 対象が値、要素、権限などを持っているか判定する。 | hasPermission(user, permission) |
can | 操作を実行できる条件がそろっているか判定する。 | canEditArticle(user, article) |
should | 現在の条件や方針上、処理を行うべきか判定する。 | shouldSendReminder(invoice) |
needs | 対象に何らかの処理が必要か判定する。 | needsPasswordReset(user) |
exists | 対象が存在するか判定する。 | userExists(userId) |
contains | 集合や文字列が特定の要素を含むか判定する。 | containsForbiddenWord(text) |
matches | 対象が条件、パターン、ルールに一致するか判定する。 | matchesFileNamePattern(fileName, pattern) |
supports | 対象が特定の機能や形式に対応しているか判定する。 | supportsImageFormat(format) |
allows | 設定や権限が操作を許可しているか判定する。 | allowsFileUpload(policy, file) |
検証、保証
| 単語 | 名前から期待できる処理 | 使用例 |
|---|---|---|
validate | 入力や状態が規則を満たしているか検証し、結果やエラー内容を返す。 | validateRegistrationInput(input) |
verify | 外部情報や処理結果が正しいことを確認する。 | verifyWebhookSignature(payload, signature) |
assert | 「正しいプログラムなら必ず成立するはず」の条件を確認し、満たしていなければ即座に処理を止める | assertUserIsAuthenticated(user) |
ensure | 必要に応じて状態を変更し、指定された条件を成立させる。 | ensureDirectoryExists(directoryPath) |
実行、予約、制御
| 単語 | 名前から期待できる処理 | 使用例 |
|---|---|---|
enqueue | 後で処理するため、対象をキューに追加する。 | enqueueEmail(message) |
dequeue | キューから次に処理する対象を取り出す。 | dequeueNextJob() |
schedule | 指定された時刻または条件で処理を行うよう予約する。 | scheduleReportGeneration(runAt) |
run | 予約された処理や一連の処理全体を実行する。 | runDailyCleanup() |
execute | 特定の命令、タスク、コマンドを実行する。 | executeCommand(command) |
start | 継続的な処理を開始する。 | startFileWatcher() |
stop | 継続的な処理を停止する。 | stopFileWatcher() |
pause | 再開可能な状態で処理を一時停止する。 | pauseUpload(uploadId) |
resume | 一時停止中の処理を再開する。 | resumeUpload(uploadId) |
cancel | 予約中または実行中の処理を取り消す。 | cancelScheduledReport(reportId) |
retry | 失敗した処理を再実行する。 | retryFailedRequest(requestId) |
UI、表示状態
| 単語 | 名前から期待できる処理 | 使用例 |
|---|---|---|
hide | 対象を見えず操作できない状態にする。 | hideCookieBanner() |
show | 非表示状態を解除して対象を表示する。 | showCookieBanner() |
open | ダイアログ、メニュー、パネルなどを開く。 | openSettingsDialog() |
close | 開いているUIを閉じる。 | closeSettingsDialog() |
expand | 折りたたまれた内容を展開する。 | expandAccordionItem(itemId) |
collapse | 内容を折りたたむ。 | collapseAccordionItem(itemId) |
enable | 対象を操作可能な状態にする。 | enableSubmitButton() |
disable | 表示を維持したまま、対象を操作できない状態にする。 | disableSubmitButton() |
select | 対象を選択状態にする。 | selectTableRow(rowId) |
deselect | 対象の選択状態を解除する。 | deselectTableRow(rowId) |
focus | 対象に入力や操作のフォーカスを与える。 | focusSearchInput() |
render | 状態に基づいて表示内容を生成または更新する。 | renderUserList(users) |
mount | UI要素を画面やDOMに配置する。 | mountApplication(rootElement) |
unmount | UI要素を画面やDOMから取り除く。 | unmountApplication(rootElement) |
変換、整形
| 単語 | 名前から期待できる処理 | 使用例 |
|---|---|---|
parse | 文字列などを構造化されたデータに変換する。 | parseCsv(csvText) |
format | 値を表示用の文字列や形式に変換する。 | formatCurrency(amount, currency) |
convert | 値を別の型や表現形式に変換する。 | convertMarkdownToHtml(markdown) |
normalize | 意味を変えずに、表記や構造を統一する。 | normalizePhoneNumber(phoneNumber) |
sanitize | 危険または不正な内容を除去または無害化する。 | sanitizeHtml(html) |
serialize | オブジェクトを保存または送信用の形式に変換する。 | serializeUser(user) |
deserialize | 保存または送信用の形式からオブジェクトに戻す。 | deserializeUser(serializedUser) |
encode | 値を指定された符号化方式に変換する。 | encodeTextAsBase64(text) |
decode | 符号化された値を元の形式に戻す。 | decodeBase64Text(encodedText) |
sort | 要素を指定された順序に並べ替える。 | sortUsersByName(users) |
group | 要素を共通のキーや条件ごとにまとめる。 | groupOrdersByStatus(orders) |
merge | 複数の値や集合を一つに統合する。 | mergeSettings(defaultSettings, userSettings) |
安易に使うのは避けたい動詞
| 単語 | 名前から期待できる処理 | 使用例・置き換え例 |
|---|---|---|
handle | イベントや外部入力の受付処理に限定して使用する。ただし何をするかが不明になりやすい。 | handleFormSubmit(event) |
toggle | 実行後の状態が名前から判別しにくいため、可能なら対になる操作へ分ける。 | toggleSidebar() → openSidebar() / closeSidebar() |
process | 意味が広いため、具体的な処理内容を示す動詞へ置き換える。 | processOrder() → validateOrder() / calculateOrderTotal() / saveOrder() |
manage | 対象や処理内容が不明確になるため、原則として使用しない。 | manageUsers() → listUsers() / updateUser() / deleteUser() |
do | 処理内容が分からないため、原則として使用しない。 | doLogin() → authenticateUser() |
perform | 処理内容が分からないため、原則として使用しない。 | performCleanup() → deleteExpiredFiles() |
注意点
他のルールがあればそちらを優先
このチートシートはあくまで目安です。優先順位は次のように考えてください。
- 使用言語やフレームワークの規約
- 既存プロジェクトの規約
- 本記事のチートシート
既存コードでgetがデータ不在時にエラーではなくnullを返しているなら、その意味をAIへの指示にも書き本記事の意味へ置き換えないほうがいいでしょう。
言語やライブラリの標準APIと衝突する場合も、標準APIに合わせてください。
あくまで規約であり、実装の正しさを証明するものではない
例えばgetUserDataがあった時、規約上では「ユーザーが見つからなかった場合はエラーとする」としても実装上でAIが100%そうしてくれるとは限りません。間違えることはあります。
レビュー時にそういう前提で確認をするということです。
意味が似た動詞のおさらい
| 組み合わせ | 使い分けの目安 | レビューで確認すること |
|---|---|---|
getとfind | getは1件の取得、findは0件または1件の探索に使う。 | データ不在時に何を返すか。 |
readとloadとfetch | readは読み取り、loadは利用可能な状態への準備、fetchは外部取得に使う。 | データの取得元や、対象状態を変更するかどうかが名前と合うか。 |
buildとcreateとgenerate | buildは組み立て、createは新規対象の作成、generateは規則や入力からの生成に使う。 | 永続化や外部登録まで行うか。 |
setとupdateとreplace | setは一つの値の設定、updateは一部変更、replaceは全体の置換に使う。 | 変更範囲が名前より広くないか。 |
removeとdelete | removeは集合や関連から外し、deleteは対象自体を消す使い分けにする。 | データ本体が残るか、復元できるか。 |
validateとassertとensure | validateは検証結果を返し、assertは不成立時に停止し、ensureは必要なら状態を変える。 | 戻り値、例外、副作用が名前と合うか。 |
例えばremoveUserFromTeamという関数が、チームとの関連だけでなくユーザーのレコードまで削除していたら、名前から期待する範囲を超えています。
挙動が正しいならdeleteUserに近い名前を検討し、名前が正しいなら削除処理を関連解除だけにするよう変更しましょう。
必要な単語から始めてみましょう
89語をそのままプロンプトへ貼り付けると、使わない規則まで増えてしまいます。
まず、プロジェクトで混同が起きやすい動詞だけを選び、意味と例外を短く記録してください。
1# 関数名に使う動詞
2- `get`: IDで1件取得する。不在時はNotFoundErrorを投げる。
3- `find`: 条件に合うものを0件または1件探す。不在時はnullを返す。
4- `list`: 0件以上を配列で返す。0件は空配列にする。
5- `create`: 新しい対象を作成して永続化する。
6- `update`: 既存対象の一部だけを変更する。
7- `remove`: 集合または関連から外す。対象自体は削除しない。
8- `delete`: 対象自体を永続化先から削除する。
9
10使用言語、フレームワーク、既存コードの規約と衝突する場合は、既存の規約を優先する。この指示なら、AIはgetとfindの違いだけでなく不在時の挙動まで参照できます。
人間も同じ文章をレビュー基準として使うため、別の基準を作り直す必要がありません。
まとめ
というわけで、関数名に使える英語動詞89語をAI生成コードの指示とレビューに使える形で整理しました。
関数名はコード品質を保証はしません。
しかし、プロジェクト内で動詞の意味を決めておけば、名前から挙動が予想しやすくなります。レビューの負担が大きく下がるのでぜひ試してみてください。
