今回の趣旨
AI時代にはAiと人間が同時に読める可読性をもつと、AIの力を活かせるとともに、人間も可読性が高くなる。
すでにコメント欄にAI向けのコメントを入れる技術は以前述べたとおりであるが、今回なんとなくやってきたテクニックがAIにも有用であるとわかったため、今回VBAのノウハウとしてまとめておこうと思う。
✅ VBAの関数にfn の接頭辞を導入する利点
観点 | 効果 |
---|---|
視認性 | fn を見ただけで「Function」であると即断可能 |
IDE補完 | fn 系でソート・フィルタがしやすい(特に関数のみ使いたい時) |
保守性 | sub と fn の命名が分かれることで、呼び出し側の誤解を防ぐ |
移植性 | 他の環境(VBA→VB.NET など)でも命名規則が活きる |
✅ AIとの相性の良さ(技術的観点)
効果 | 説明 |
---|---|
構文分類が容易になる | Sub と Function を明示的に分離できるため、出力側も誤解しにくくなる(例:戻り値のない関数を書き出すバグを防げる) |
補完時に関数が並ぶ構文になる | fn で始まるものを 関数として並列出力 すれば、補完UIで自動的に「関数群」がまとまる。 |
プロンプト駆動の構造化が容易 | 「fnで始まる命名を使って」「SubとFunctionを明確に分けて出力して」などの指定が非常に通りやすくなる。 |
テンプレート再利用が効く | fnSanitizeFileName() や fnFormatDate8() のような処理を再利用する際、見つけやすく・コピペもしやすい |
自動変換や整形がやりやすい | AST(構文木)を使った自動整形でも、接頭辞があれば関数群を自動抽出できる(スクリプト生成や検証時に便利) |
# 🤖 AI向けのプロンプト例(VBAコード出力)
以下のルールに従ってVBAコードを出力してください:
- 関数名には `fn` を先頭に付けてください(例:fnSanitizeFileName)
- 複数の関数が1つのメイン処理に従属する場合は、fnMainExport_FormatTitle のように命名してください
- Sub は処理単位で命名し、関数との接頭辞差で役割を明確化してください
🧠 命名による擬似スコープ・擬似モジュール化
-
VBAはモジュールや名前空間が弱い
-
しかし
fnMainProcess_Step2Clean
のように書けば、
「この関数はどの処理の中核に属するか」が即わかる -
これは Python や C++ における
MainProcess::Step2Clean()
に近い思想
' ✅ 関数(戻り値あり)にはすべて `fn` を接頭辞として付ける
Function fnGetTitle(...) As String
' ✅ 機能単位の親子関係は `fnMainFunc_~` のように擬似名前空間で表現
Function fnMainExport_CleanupTitle(...) As String
Accessマクロ用中継Function規約
この命名規則はAccessでも有用である。
- Accessボタン・フォームイベントには
Function
しか関連付けられない。 - したがって、イベントトリガーとしての関数はすべて
fn_Macro_~
で命名する。 - 実際の処理は
Sub
またはFunction
として分離して定義し、ロジックとUIを構造分離する。
例:
' Macro Button用
Function fn_Macro_ExportCustomerList()
Call ExportCustomerList
End Function
Sub ExportCustomerList()
' ... CSV出力処理 ...
End Sub
「fn規約」をさらに活かすガイド
応用として、以下のものが考えられる。
🔹 1. プロジェクト分類テンプレートの導入例
用途 | 推奨命名 |
---|---|
Access マクロ起点 | fn_Macro_◯◯ |
Excel メイン処理 | fnMain_Excel_Export |
外部ファイル処理 | fnFile_ImportCSV |
API連携処理 | fnAPI_FetchData |
🔹 2. モジュール設計テンプレートの雛形
' モジュール: ExportModule.bas
Function fn_Macro_ExportCustomerList()
Call fnExport_CustomerList
End Function
Function fnExport_CustomerList() As Boolean
' 実処理:テーブル→CSV
On Error GoTo ErrHandler
...
fnExport_CustomerList = True
Exit Function
ErrHandler:
fnExport_CustomerList = False
End Function
✅ VBA構造化設計テンプレート(fn命名規約 × AI出力制御)
このテンプレートは、fn
接頭辞に基づいたVBA関数命名規約と、ChatGPTなどのAIからの構造化出力を制御するためのプロンプト設計を目的とする。特にAccess VBAやExcel VBAにおいて、命名で意味・構文・所属を明示するために有効。
🔹 命名規約テンプレート
✅ 基本ルール
' 関数(戻り値あり)は必ず fn を接頭辞として付ける
Function fnGetTitle(...) As String
' Sub との構文的区別を明示する
Sub ExportTitle()
' メイン処理に従属する関数は fnMain_ でスコープ関係を明示する
Function fnMain_ExportData()
Function fnMain_FormatTitle()
' 中間ステップを接続して階層的に分ける
Function fnMain_Cleanup_RemoveSymbols()
✅ Access マクロ向け命名(イベント用中継)
' マクロボタンから実行する中継Functionは fn_Macro_ を接頭にする
Function fn_Macro_ExportCustomerList()
Call ExportCustomerList
End Function
Sub ExportCustomerList()
' ... 実処理 ...
End Sub
🔹 AI 出力制御プロンプトテンプレート
以下の指示を ChatGPT に与えることで、fn命名規約に基づいた構造的出力が得られる。
以下のルールに従ってVBAコードを出力してください:
- 関数名には `fn` を先頭に付けてください(例:fnSanitizeFileName)
- 複数の関数が1つのメイン処理に従属する場合は、fnMainExport_FormatTitle のように命名してください
- Sub は処理単位で命名し、関数との接頭辞差で役割を明確化してください
- Access のマクロ用にイベントと結びつける場合は、fn_Macro_ExportX のように書き、中で Sub を呼び出す構造にしてください
🔹 関数群の意味階層例(擬似名前空間)
関数名 | 意図・階層 |
---|---|
fnSanitizeFileName | 一般的な文字列整形関数 |
fnMain_CleanupTitle | メイン処理内の1ステップ |
fnMain_Cleanup_RemoveSymbols | 上記の下位階層(サブステップ) |
fn_Macro_ExportToCSV | Accessマクロイベント用中継関数 |
ExportToCSV | 実際の業務ロジック本体(Subで定義) |
✅ 利用上のポイント
- VBAは名前空間やクラス構造が弱いため、命名だけで構文構造を擬似的に表現する必要がある
-
fn
接頭辞は人間とAIの両方に可読性と意味構造を伝えるための記号である - 本テンプレートは、AI生成コード・自動整形・ドキュメント化すべてに有効な命名構造である。加えて、他言語に移植する際のコード解読の手がかりにもなる。関数名に構造的意味が込められていれば、移植先でも機能の関連性や役割を即座に把握できる
✅ 推奨出力形式
- Markdown(Notion展開向け)
- YAML形式のプロンプトテンプレート
- VBAコード断片(
vbnet
シンタックス)
✅ AI時代のさらなる視点の展開
この命名規約は単にVBAに有効なだけでなく、他の言語においても有効性を持っており、特に、AIがコードを生成する時代において構造認識を助ける命名インターフェースとして機能する。
📐 複数関数・複数ファイル時代の命名構造の意義
- AIが複数の関数・処理ブロックを一度に出力できるようになったとき、関数間の関連性を命名で伝えることが重要になる
-
fnMain_Export
,fnMain_Export_FormatDate
などの命名は、構造と従属関係を即座に理解可能にする
🤖 AIにとっての利点
構文的課題 | fn命名の利点 |
---|---|
関数の関連性が不明 | fnMain_X_Y により構文的階層が明示される |
モデル間の処理連携が困難 | 命名で意味が伝わりやすくなり、再利用が促進される |
コードの入口が不明 | fnMain_ や fn_Macro_ によりUI起点やロジック起点が明確 |
🌐 他言語・他分野への応用例
言語/分野 | 命名例 | 効果 |
---|---|---|
Python | fnPipeline_CleanData() | 関数パイプライン構造の可視化 |
JavaScript | fnUI_HandleSubmit() | DOM操作・UI関数の構造化 |
PowerShell | fnDeploy_ValidateEnvironment() | 部署系スクリプトの意味区分 |
Shell Script | fnBackup_ExportSQL() | 関連スクリプトの構造理解に有効 |
このように fn
を「構文型 × 意味階層」のトークンとして活用することで、AI時代の構造的コード生成を支える“読解言語”としての命名構造が成立する。
以上が、fn命名規約
を核とした構造化命名テンプレートと、AI出力との連携について視点を展開した。なにかのヒントになれば幸いである。