Previous Page | Next Page

兵どもが夢の跡

老兵は死なず、AIと踊る


私自身は2月~4月ぐらいが1年で一番忙しい中で今年は特に忙しく、いまだに確定申告を終えていないという状況なのですが、覚書ということで最近行った某AI見本市に行ってきた感想を書きます。
(何故某見本市とぼかすのかというと、これからネガティブなことを書くので・・・)。


一年半程前にCEATEC 2024にPasocomMini PC-8801mkⅡSRの実機を見てきたときについでに色々見て回りまして、それはそれで興味深いのですが、皆さん熱心にAIをやっておられるという印象でした。プラスして『それはChatGPTで出来るのでは?』という感想もありました。


そこからの進歩は激しく、さらに某見本市はAIと銘打っているだけあって、会計ソフトやら様々のものにAIが組み込まれていて何とも刺激的でした。と同時に呼び込みがうざくじっくり見て回れなかったのが残念でした。なので結局良く分からんところで帰りました。私自身登録を「クライアント関係」で行ったので「開発者関係」でやればよかったと後悔しました。


呼び込みで飲み物やらスイーツを渡しながら「よろしく!」とか言っていたのですが、硬派な私は「いらん!」と断っていました。まぁ最後に「もらってもらわないと私が怒られるんです」みたいなことを言われて「じゃがりこ」をもらったのですが、帰って嫁に顛末を話すと「相変わらず若いねいちゃんに弱いな」と言われる始末でした(もっとも、その前に10人ぐらい若いねいちゃんをかわしたんだが・・・)。


とまぁ、収穫がない時間を過ごしたのですが、ちなみに私が若い時は『そんなもん見るまでもない』と思っていたので、見本市に行ったのは5回もないかもしれません。うち2回が最近ということになります。ので、実はあまりこういう場には慣れていない面もあったりしました。


前に行った見本市がもう30年程前になりまして、データベースソフトのデモを見たり、MCの方が『プロトコル』を『プラタコル』と言い間違える度にニヤっと笑ったりしていたことを思い出しました。


30年前と言えばなんといってもインターネットバブルがありました。まだブロードバンドもなくインターネット黎明期ともいえる時代で当時勤めていた会社の上司は良く『ECサイト』とか『電子商取引がどうした』とか言っていました。私の方はその後、結局そこの会社では勉強できなかったので、数回転職をしてインターネット関連技術を習得した記憶があります。特に思い出すのが、ベンチャー企業に勤めていたときで、色々勉強はできたのですが、ビジネスとしては全く成果が上がらず、少々苦い思い出になります。


某見本市でもベンチャー企業が色々サービスを紹介しているのですが、「それは○○で出来ないか?」というAIあるあるだったり、『AIシステムを月額○○円から』と言われると30年前に流行ったHP制作会社を思い出したり、結局その後の電話攻勢を鑑みると、昔と変わらないことをしているなと思うと同時に「安易にマネタイズをする方向にもっていくと、成功するものも成功しないのでは?」と思いました(Facebookは、2004年から出ておりその後2010年代に花開いた)。


その時に幕張に行けるかどうかは分かりませんが、30年後に見本市をみたら、表面上は今とはまったく違うことをやっているが、実は昔ながらの営業をやっており、年寄よろしく過去を思い出して『兵どもが夢の跡』となるのか?という気もします。まぁ、たかがいちエンジニアの戯言ですね。


要は不完全燃焼だったのですが、私自身はビジネス関係は疎く、今でも真剣にSNSって面白いか?と疑問に思っているぐらいなのでそもそも素養がないので、どうしたものかと思ったら、以前にAIをビジネスに適用させようという強者を思い出したので連絡をしてみました。
中々精力的に活動されている方で、EUがやっているFuturiumというコミュニティサイトで投稿されたりしています。
Toward Semantic Governance: A Structural Proposal to Support the AI Act Implementation

バックグラウンドとしてAI時代の意味インフラ(フレームワーク)を構築しようというアイデアを持った方ですが、私のレベルではピンとは来ない面があるのですが、インターネット時代のSNSと同様に、AI時代のキラーコンテンツになりえるものを感じてはいます。
私自身は、あくまでも開発者としてAIと付き合いたいのですが、そうは言っても『どういった応用があるのか?』を知らないで勉強しても意味がなく情報収集も励んでいる次第です。


ちなみにマカロンは奥さんが嫌いなので徹底的に断って、妙に昔を思い出しながら、じゃがりこを奥さんと食べました。


老兵は死なず、AIと踊る


2026-03-07 | コメント:0件

llama.cppの開発&最適化、環境構築

老兵は死なず、AIと踊る


 私のAI体験、2026年2月の活動、ということで、我がAIマシン(Core i9-10980XE,メモリ256GB+GeForce GTX1080Ti、GeForce RTX3070)にllama.cppの環境構築を行ったので、そのメモになります。


(事前セットアップ)


  • OSのセットアップ、各種ドライバーをインストール
  • Cuda toolkitをインストール
    インストールされているグラフィックボードのバージョンに合ったバージョンをインストールする。
    例)GeForce GTX1080Ti用のCuda toolkitは、12.8.0になる。
  • Visual Studioをインストール
    Visual Studio 2022 community Editionをインストール
  • Gitもインストールしておく

llama.cppをダウンロード&ビルド


  • https://github.com/ggml-org/llama.cppのページにあるQuick startのBuild from source by cloning this repository - check out our build guideを参照
  • ダウンロードは
    git clone https://github.com/ggml-org/llama.cpp cd llama.cpp
    で行う。
  • ビルドのコンフィグレーションを行う
    cmake -B build -DGGML_CUDA=ON -DCMAKE_CXX_FLAGS="/utf-8 /EHsc" -DCMAKE_C_FLAGS="/utf-8" -DLLAMA_BUILD_BORINGSSL=ON -DLLAMA_BUILD_LIBRESSL=ON -DCMAKE_CUDA_ARCHITECTURES="61;86"
    最後の、DCMAKE_CUDA_ARCHITECTURESの61が1080Ti、86が3070用の設定になる。
  • ビルドを行う
    cmake --build build --config Release
  • コードページに関するワーニングがでるが無視しても動作した。一部のツールは文字化けするかもしれません。

動作確認


  • llama-serverの実行
    llama-server -hf unsloth/Qwen3-VL-235B-A22B-Thinking-GGUF:Q5_K_M -ngl 0 -b 512 --flash-attn on --host 0.0.0.0 --port 8080

    ファイアーオールが警告が出たらポートを解放する
  • クライアントからアクセス
    http://(llamaのマシンのIP):8080/でアクセス


モデルがQwen3-VL-235B-A22B-Thinking-GGUF:Q5_K_Mで、だいたい、1~2Token/sec、つまり1秒に1文字出力される。何かすると20分ぐらいかかるので、これを高速化できればうれしいという話。


Visual Studioからの起動&コンパイル


  •  llama.cppをダウンロードした場所にbuildフォルダが作成される。このフォルダをカレントディレクトリとしてVisual Studio(devenv.exe)を起動する。
    下記の要領でショートカットを作っておくと良い

    リンク先:"C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\devenv.exe" llama.cpp.sln (デフォルトインストール)
    作業フォルダ:C:\llama.cpp\build (llama.cppをc:\llama.cppにダウンロードしたと仮定)

    「詳細設定ボタン」→「管理者として実行」にチェックを入れる(プロファイル時に必要)。

  • デバックモードとリーリースモードで、リコンパイルを行ってみる。



VTuneのインストール&動作確認


  • VTuneをインストール
    使っているCPUに対応したバージョンのVTuneをインストールする。
  • VTuneは、最新バージョンしかダウンロードできない。2026年2月現在の最新バージョン2025.8.1.7では、Ice Lake以降のCPUしか対応していない。Core i9-10980XEは、Cascade lake(1世代前)なので対応していない。ので、事前にダウンロードしているもの(2023)を利用する。
  • 2022では、Windows11 25H2の環境ではインストールに失敗した(厳密にいうと2024のインストール&アンインストール後に行ったのでそのせいでインストールに失敗した可能性もある)。
  • 2024では、正常にプロファイルが取れなかった。
  • インストール時のオプションで、Visual Studioのツールにチェックが入っていることを確認すること。
  • 先に2024をインストールするとアンインストールしても一部ファイルが残っており、2023をインストールしてもショートカットが2024側を指すので起動しない。
    C:\Program Files (x86)\Intel\oneAPI\vtune
    以下のフォルダをチェックすること。
  • 出来れば、古いバージョンから試して不用意にバージョンをあげない方がよい。
  • VTuneの起動
    インストールが終了すると、Visual Studioのメニューにアイコンがでるのでプロファイルを行える。
  • ソースコードを見るには、プロジェクトの設定でデバッグ情報を出力するようにすれば良いが、デバッグモードで行った方が面倒が少ない。この場合、コードが最適かされないのでパフォーマンスが下がるが、概ね、半分ぐらいの速度になる。あまり遅くなっていない。そもそも手動で最適化を行うのでコンパイラの最適化は止めても大丈夫かと思う。手動の最適化が終わった後に最終的にONにすればよい。




目的の箇所にたどり着けたのでよいが、途中、Bottom-upタブの見方が良く分からないので学習する必要がある。


最も時間がかかっている個所が判明したが、

sumi = _mm256_add_epi32(sumi, _mm256_add_epi32(p16_0, p16_1));

どうも、AVX2のコードのようである。まずは、AVX512で動かすにようにして、最適化をかけるようにする。


ボトルネックについて


 パット見た感じなので確定的ではないですが、ボトルネックになっているコードは、モデルの重みデータを戻す処理のようである。このモデルデータは、重みが5ビットのものを使っているので内部で8ビットにしているようです。
llama.cppはAVX512を使うといっているがこのデータを戻すところはAVX2のままのようです。
考えてみれば当たり前といえば当たり前なのですが、なんとなく5ビットに圧縮したら展開するのに時間がかかるのではないかと思っていたら、その通りのようでした。この部分の処理時間は全体の約70%ぐらいを占めており、この部分を最適化することは期待がもてる。
もっとも、RAMを大量に積んで利用するモデルを8ビットとかにすればこの部分の処理をカットすることが出来るのでかなり早くなるかと思うが、メモリはこれ以上は積めないので最適化を頑張ろうかと思う。


老兵は死なず、AIと踊る

2026-02-18 | コメント:0件

私のAIショック(2025)

老兵は死なず、AIと踊る


オオカミ少年だったAI


 AIという言葉が出てきて早幾年月ですが、いわゆるChatGPT等の生成AIが出てくるまでは、眉唾ものという印象がありました。大昔はパーセプトロンとかバックプロパゲーション、ニューラルネット、ディープラーニングとかありまして、これが現在のAIの流れですが、度々沸いては消えるというブームで終わっていました。今回の生成AIもバブルと呼ばれているのでそれはそれで何時かはブームが終わるかもしれません。そうなったら、今はAI需要で高騰しているメモリが暴落することになるので買いあさることになるでしょう。その他の流れとして第五世代コンピュータプロジェクトとかProlog、エキスパートシステムなんかもありました。こちらの方はほぼ完全に来ている感はありますが、私はほそぼそとPrologを引き継いだ言語を作っています。


どうやら本腰を入れる必要がある


 そんな感じで、AIブームを横目に見ながら、昨年までは、私は主にChatGPTで、英語の校正か、時には説明文(日、英)の生成などに使っていました。私はキャラクターデザインが出来なかったが、ChatGPTでもいい感じのアイコンを生成するのでそのうちゲームでも作ろうかと考えていました。
とまぁ、のんきに構えていたわけですが、昨年春に「もうすぐ消滅するという人間の翻訳について」という記事を読みました。文学系のプロの翻訳家がAI(およびその他)から仕事を奪われる危機感を書いたもので、私も危機感を共感しました。ということでAIと本腰で向き合わないとダメだということで、重い腰を上げました。


まずは、ローカルLLMということで、AI用のマシン(Core i9-10980XE,メモリ256GB,グラフィックカード Geforce RTX 3070 + GTX1080Ti)、を用意し、llama.cppをインストールして、いくつかのモデルをダウンロード実行し、WEBアプリ(ゲームを想定)を作らせたりしたが、残念ながらまったくお話にならないくらい完成しなかった。よくある「直しました」と言って直ってこないことが多々あった。
ここで、バイブコーディング用のAIを使えばよかったかもしれないが、フリーのモデルの精度が向上することに期待することにして、一旦辞めました。


その後、Youtubeがおっくうに(動画編集が面倒くさく)なり、6月ぐらいからブログの方にシフトしていたが、徐々にChatGPTとの共作を模索するようになりました。


最初は、過去の記事をChatGPTに読ませていたが、そのうち試しに記事を書かせてみた(原稿を私が書いて、ChatGPTに原稿を元に肉付けをした)。ただ、ChatGPTの文章がいまいち気に入らないので、ChatGPTは校正・批評をさせるようにした。今のところAIに何かを作らせるより、批評をやらした方が『AIは、何を知っていて、何が出来て、何が出来ないか』が解るようになると思ってやっている。


ちなみに、私の記事の中でのトップ2をChatGPTに評価させました。
1つ目が、社会人であり、技術者でありChatGPTの評価)で、
2つ目が、オブジェクト指向おじさんChatGPTの評価)になります。
話は少し脱線しますが、この記事はStaticおじさんのパロディーとして馬鹿にするWEB小説が出たことに対する警鐘としてこの記事を出しましたが、ChatGPTも指摘していますが、2026年現在、この記事の主張は正しいとChatGPTは言っておりますね。このあたりをまた記事にしたいですね。


昨年末あたりから、GeminiとChatGPT体制で「校正・評価」をしていたが、そのうち、Gemini,ChatGPT,Grok,Copilotを使うようになりこれらの共通するものを探るようになりました。


2026年1月の各種AIの雑感


以下、私のこの半年で真面目にAIを使った結果、各種AI(無料版)の2026年1月時点の雑感になります。


全体評価について。今AIと言われているものはLLM(大規模言語モデル)を主に使っていることになりますが、言葉(言語)の運用(日本語や英語、翻訳)についてはほぼ信頼に値するかと思います。
加えて、元がネットからの情報収集ということもあり、ネット民の気持ち(?)については良くも悪くもAIは把握している模様。AIに小説やライトノベルを書かせて、いいところまで行っているケースもニュースや記事で見るようになった。一方で、「最近のnoteはAI記事の巣窟」と言われるとおり、質の悪いAI記事に埋もれている。人間とAIが上手く連携しないといい記事にはならないということのようである。
一方で、コンピュータ(プログラミング)関連については、海外の標準的な知識があると思われる。ITのQAサイトのStack Overflowの質問件数が激減しているとのことで、つまりある程度のQAについては、既にAIによって回答が可能というところまで来ているようである。


ちなみに、AIは良く嘘をつくというが、ITに限るとStack Overflowの例もあるとおり、既に平均的な人間のエンジニアよりAIの方が良いのではないか?と思われる。
私の記事に対しても、そこらのエンジニアより的確なツッコミを見せていた。
ただし、キーワードを拾ってそれを上手くつなげている感(表層的な議論)はぬぐえない、ちょいちょい突っ込むことになる。のでやはり限界が見えてきた。


各AIの個性を見てみる


下記、2026年2月現在の各AIの雑感を表にまとめてみました。



Gemini
 一番、おべっかを使ってくる。こちらが反応してほしいワード・文章を拾い上げるのが上手い。モチベーションが上がる挨拶を入れてくる。IT系についてはきちんと学習させている面がある。
ChatGPT
 Geminiと比べておべっかが若干下手。ただしGeminiより批判と改善案をより出してくる。IT系についてはきちんと学習させている面がある。
Copilot
 基本ChatGPTと同じ、若干おべっかが過ぎるか。IT系についてはきちんと学習させている面がある。
Grok
 一番おべっかを使ってこない。批判するときは、「これは主観的」、「データがない」、「ハルシネーションについての考慮がない」等、どうも予め決められた批判をしてくるようである。Xの投稿や政府の発表を鵜呑みにする傾向がある。


 ちなみに、SNSを見ると「AIが嘘をついた」といって騒いでいる人がいるが、そもそも情報に関しては裏どりをするのが基本で、裏どりもせずに「AIが嘘をついた」というのもどうかと思う。(まぁ、そもそもSNSの情報を信じてはダメなので・・・)。私としては人間がつく嘘と同程度だと思われる。


AIを使っての野心


 チャットベースのAIですが、今後の進化として、ある製品を作ったときにセットでAIチャットを用意するということが考えられます。具体的には、私はプログラミング言語(ADP)を作成しているが、ADPを学習したAIに、コードを生成させたり質問に答えさせたりすれば独自言語の学習のコストを下げられるようになるかと思う。実は、AI時代には独自言語の開発は難しくなったかと思っていた。つまり今のAIは現在ある多くのプログラミング言語について既に学習しているが、対して私が開発した言語についての知識はない。これは言語の普及を考えたらマイナスかと思ったが、いわゆるファインチューニングでADPを学習させれば良いと思いなおした。ちなみにChatGPTに「独自言語を普及させるには?」と質問したら、「ドキュメント」やら「サンプルプログラム」やらを進めてくるが「AIに言語仕様を学習させるのはやめた方がよい」と返された。ChatGPT自体は、AIがプログラミング言語を学習するのは難しいと結論づけているのが興味深い。


今後のネットの情報について


 Stack Overflowの質問件数が激減とかnoteはAI記事が氾濫しているということを鑑みると、人間の良質な記事やアイデア、プログラムのソースコード等、いわゆる知的財産というものについてはネットに出てこなくなるかと思います。私も、何気なく公開したプログラムを「人が見るよりも早く」AIのクローラーに収集されて「もう不用意にコードを公開するのはやめよう」と思いました。もちろん公開しても良いコードは公開しますし、記事は書いていきますが、やはり今年はローカルLLMを鍛え、知的財産の保護をしつつメジャーなAIに比肩できるAIの運用にも力を入れたいと思います。


AIは人間を超えるか?について


 触ってみた感触ですが、現在のAIは人間を超えるのは難しそうです。もちろんですが、各分野について素人を超えたパフォーマンスを見せるので思わず「おっ」となりますが、人間の真の創造性(要するに0から作るところ)の模倣については難しいのではないかと思う。もちろん今後の発展次第ということも言えますが。
 生成AIとやり取りをしていると、「知能とはなにか?」とか「真理とはなにか?」ということを思い知らされます。Grokは、Xや公的機関の発言を鵜呑みにしているところがあり、他のAIについては各社が独自にファインチューニングをしているようである。つまり、AI自体が「これは正しいか?」という判断は出来ないようで予め「これは正しい」と学習させている。この場合、いわゆる哲学や社会科学系のように客観的に真理が解らないもの(と私が思っているのですが)についてはAIは正しいやり取りは出来ないのではないか? 例えば2026年1月現在でいうと今の自民党政権で景気は浮上させることができるか?とかに答えるのは難しいかと思われる。
その他の点であるが、ある種の閃きというのがAIからは感じられない。現在のAIは、いわゆるニューラルネットということで人間の神経細胞を模倣しているが、どうも私自身の思考のメカニズムを振り返るとニューラルネットとは別の仕組みがあるように思える。具体的に言うと量子コンピュータのようなものになる。例えば、プログラムのアイデアだったり、わけのわからないバグの原因が突然、閃いたりするがそういうものはどうもニューラルネットではなく、より高次元の演算が脳内に起こっているような気がしている。


この仮説が正しければ人間はしばらくは大丈夫だと思う。


老兵は死なず、AIと踊る

2026-01-20 | コメント:0件

なぜ日本のITが弱いのか?(もう一つの理由 Part1)

- ITに関わる日本人は英語が残念なことが多い -


老兵は死なず、AIと踊る


ITの権威も英語は弱いか?


 変数名は「AIにレビューさせろ」Part1で、「日本人の英語力は、ばらつきがあり変数名の命名に英語を使うときは危険度が増します。」と婉曲的に書きましたが、残念ながら少なくともITに関わる日本人の英語力はやはり残念なことが多いです。
これは、私自身の英語力も以前は残念だったといえますし、今は「残念でない」だけで、上手いか?と言われたら「人よりは」と謙遜してしまいます(一応プロなので)。
実は、プログラマになりたい人向けに、「基本情報技術者試験の科目B」をお勧めしたのですが、その問題文に「残念な英語」が混ざっており発見してしまいました。
令和5年度、基本情報技術者試験 科目Bの問1


論理型: divideFlag


になります。この変数は回答に関わっており、あまりいい加減にしてほしくないのですが、何が問題かというと命名はこの際置いておいて、値(true/false)の持たせ方にあります。


if (divideFlag が true と等しい)
  pnListの末尾 に iの値 を追加する
endif

とありますが、divideFlagを素直に読むと「割算フラグ」ということで、値がtrueの時はどういう意味かが曖昧になります。
コード上では「true = 割り切れていない」という意味ですが、多くの人は「true = 割り切れた」と受け取ってしまうでしょう。つまり誤解を与える使い方になっています。
 ということでAIに掛けてみました。各AIの実行結果は以下のとおりですが、全AIが『意味があいまいになる。「割り切れた=trueと解釈しがち」』としています。


ChatGPTの結果
Geminiの結果
Copilotの結果
Grokの結果
ちなみに、ChatGPT,Gemini,Copilotは、「命名が良くない」とも指摘しています。
ChatGPTは下記のとおり1回鍛えたのでより突っ込んだ内容となっていますが、いずれにしても、divideFlagはダメということになります。


 私自身は、『i ÷ j の余り が 0 と等しい』の条件の部分を無意識に『i ÷ j の余り が 0 と等しくない』が正解と考えてしまい、「答えが無いやん!」と一瞬混乱しました。
もっとも、恐らくほとんどの方が、「私がおかしい」と指摘するでしょう。この部分ですが、「割り切れたら後の追加は不要(false)」という意味(candidateFlagやisPrimeなど)であればまったく問題なく、アルゴリズムを適切に判断すると、 『i ÷ j の余り が 0 と等しくない』という認識がおかしいということになります。ということで『私がいちゃもんをつけている』と感じる人もいるでしょう。要は各人が持っている英語力ということになるのですが、今は、AIで試すことにより、一部のエンジニアのいちゃもんなのか、正しい指摘なのかを確認できる時代になりました。


日本のITエンジニアの英語力


 普通のブログ記事なら「IPAさんやってしまいましたね!」と言って終わりでしょうが、いくら何でも「試験問題」ということでそれなりに注意して作成はしているでしょう。実際に多くのITエンジニアは私のような混乱は起こさないかと思います。つまりこのあたりが我々ITエンジニアの英語力の限界と考えた方がよいです。つまり、「AIにレビューさせろ」Part1の正しさをIPAさんが身をもって証明していたとも言えます。
 ということで私は、日本語でプログラムを組めるようにしたいと改めて思いましたので、ADPは日本語で名称を記述できるようにしたいです。
 「変数名を日本語で・・・」を読んだ硬派なITエンジニアは「変数名は英語だ!」と主張するかもしれません。そんなあなたにはTOEICや英検の受験をお勧めします。おそらく適切な英語名の命名に必要な英語力は、TOEICで730点、英検準1級以上かと思います。100歩譲って、TOEICの平均点560(英検2級程度)であれば、なんとか命名が出来るかもしれません(私の主観では足りないかと思いますが)。もし受験していない人は受験することをお勧めします。おそらくショックな点数(例えば300点)とかになるかもしれませんが、普通のITエンジニアの英語力はそんなものです。


やはりAIレビューが必要


 この問題は令和5年(3年前)になりますが、今ならコード全体をChatGPTに掛けられます。下記のとおり、divideFlagについてダメ出ししてもらえるので、今後は試験問題をAIに掛けたいです。ただしローカルAIでレビューしないと思わぬところで問題が漏洩する可能性があります。
ちなみに、コードにある i,jのような1文字変数は『ダメ』という記事も見かけますが、「AIにレビューさせろ」Part0(初心者の方へ)で指摘しているとおり現実としてよく使います。また、ChatGPTはダメ出ししていません。つまり、1文字変数は普通に使うと考えた方がよいでしょう。
さらに、divideFlagのように混乱を助長するような命名を行うのであれば、むしろ f のような1文字の名称の方がましだと思いますが、それはまた別の話ということで


老兵は死なず、AIと踊る

2026-01-13 | コメント:0件

変数名は「AIにレビューさせろ」Part2(税込価格の回答例)

老兵は死なず、AIと踊る


前回前々回で、概ね言いたいことは言ったので与太話的にはOKなのですが、多くの日本人プログラマが経験するであろう業務アプリの開発を想定した変数の命名について、「アーキテクト」的な補足を行います。
前回前々回の記事の要点をいうと「命名は主観的になりがちなので、ルールを決めない状況でのレビューは危険」、「初心者は先ずはプログラムを書くことを学習する」ということを言ったのですが、今回の要点は、広域だったり業務用語に対応する変数の命名というのは、「個人の主観ではなくチームとしてきちんと定義しましょう」という話になります。


コーディング規約とともにある「プロジェクト用語集」


コーディング規約については既に説明しましたが、一言でいうと「命名についての一般ルール」で主にスタイル(単語の書き方や熟語の書き方が主軸)のルールになるかと思います。
一方で、「プロジェクト用語集」なるものも存在します。これは、プログラマが予め知っておいた方がよい、専門用語や業務用語についての項目と説明があります。


プロジェクト用語の代わりとしてのDB定義書とその項目名のAIレビュー


もっとも、実態としては「カバーしている用語の数が少なかったり」「ピント外れ」だったりもありますし、多くのプロジェクトでは「そんなものは存在しない」です。実は「プロジェクト用語集」に準じるものとして、「データベースの定義書(スキーマ)」が挙げられます。例えばECサイトなら、商品テーブル、注文テーブルなどがあり、以下のようになるでしょう。


商品テーブル:Goods
 商品ID(id)
 商品名(name)
 単価(price)


注文テーブル(Orders)
 注文ID(id)
 注文主氏名(orderer_name)
 送付先氏名(shipping_name)
 送付先住所(shipping_address)
 送付先電話番号(shipping_tel)
 税抜価格(sub_price)
 税込価格(tax_price)
 送料(sipping_fee)
 合計価格(total_price)


注文明細テーブル(Order_items)
 注文明細ID(id)
 注文ID(oid)
 商品ID(sid)
 個数(number)
 税抜価格(price)


(当たり前ですが、細かいところは端折っていますが)、最低限、このような項目があるかと思います。
まったくの初心者の方はついてこれないかと思いますが、送付先とか送料、合計価格などの名称は馴染みがあるでしょう。各々の項目に英語名がカッコ内にあります。大体、この英語名がDBのカラム名(テーブル名とあわせて、グローバル変数名のようなモノ)になります。今回はこの英語名をAIでレビューさせます。
さて、これをChatGPTにかけた結果がこちらになります。


https://chatgpt.com/share/695f48aa-9450-8006-ae08-f7941ab5e69c


上記はChatGPTとのやり取りですが、ChatGPT,Gemini,Copilotでレビューした結果(それぞれの推奨の名前)を表にまとめます(やり取りの詳細は省略します)。


ChatGPT要修正ChatGPT推奨GeminiCopilot
Goodsproductsproductsproductsproducts
name----
price-unit_priceunit_price-
Orders-ordersorders-
orderer_name-customer_namecustomer_namecustomer_name
shipping_name----
shipping_address----
shipping_tel----
sub_price---net_price
tax_price---gross_price
sipping_feeshipping_feeshipping_feeshipping_feeshipping_fee
total_price-total_amounttotal_amount-
Order_items-order_itemsorder_itemsOrderItems
oid-order_idorder_idorder_id
sid-product_idproduct_idproduct_id
number-quantityquantityquantity
price-unit_priceprice_at_sale-
--subtotal_amount--

さて、このようにデータベースの定義ができますとおのずと、「これらを扱うプログラム」で上記のカラム名に対応する変数名は、当然カラムの英語名を使うことになります。ORMを使えば自然にそうなりますし、手でSQLを書くことになっても敢えて違う名称にする意味はないだけでなくバグにつながるでしょう。
もちろんですが、これは「ある種の理想論」になります。現実的には「カラムの追加削除や変更」があり、それに伴い、プログラム上の変数名とDBのカラム名が時間と共に徐々に異なっていくこともあるかと思います。それを直すかどうかはまた別問題になります。


レビュー時のプロンプトについて


プロンプトの与え方ですが、私の意見になりますが、このように「関連するものはまとめて問い合わせる」方がよいかと思います。サンプルはDBのテーブル定義になりますができれば全部を与えます。プログラミングの場合(作成したプログラム全体)を渡した方がよいでしょう。
これによりAIが、意図を理解して用語間(変数間)の調整も考えてくれます。
感触になりますが、バイブコーディングが実用化されようとしている現在、このような割と突っ込んだ問い合わせにもAIはちゃんと対応できます。


ちなみに、私の場合のように「ある程度名前が用意できる」人はプロンプトとして、
「致命的な間違いを指摘してください」、「海外でも通用する名前を提案してください」
とかにすれば良いかと思いますし、まったく名前が思いつかない人は
「英語名を提案してください」
とすればよいでしょう。


AIの評価について


表を見ますと
・致命的なもの、誤字(sipping_fee)
・不適切なもの(Goods, orderer_name, sub_price, tax_price, number)
・推奨されるもの(price → unit_price)
があります。命名は主観と書きましたが、AIも同様に個性があるようで微妙に違うのもがあります。これらをどう処理するかは、話し合って決めることになりますが、基本的には、誤字や誤訳のように致命的なものを直せばよいかと思います。


英語にない日本語名の訳について


ちなみに、tax_priceですが、表には出ていませんが、price_with_taxやgross_priceがあるのですが、そもそも「税込価格」という直接の対訳が無いようです。この対訳が無いという判断はAIではちょっと厳しいかもしれません。このあたりは命名を行う人の英語力ということになります。要はprice_with_taxのようにいかにも説明的な訳だったり、gross_price(合計金額)のように漠然とした訳を見たときに、『「税込価格」というのを海外ではあまり使わないな』と判断するのですが、これはこれで業務知識と英語力が問われるところです。
日本の場合、
・税率の違い(8%、10%)
・外税表示、内税表示がある
などがあります。海外でのこのようにしている国もあるのかもしれませんが、英語の名称(いかにも説明的な訳)を鑑みるとどうも税込価格と税抜価格をいちいち用語として区別することがないように感じられます。これらを踏まえて、ChatGPTと対話してみました。


https://chatgpt.com/share/695f63c1-7ef8-8006-a943-9e946dfce54c


完璧ではないですが、税込価格、税抜価格の候補として、


price_including_tax / price_excluding_tax
tax_included_price / tax_excluded_price
price_with_tax / price_without_tax
gross_price / net_price
base_price / total_price


があるようです。「これ!」という一組でなく、いくつもの組み合わせがあるということで、どれにするのかを決めるとともに、「このように変数名に対して複数の候補が考えられるときは、メンバー各位に命名を任せたらばらつく可能性がある」ということもプロジェクトリーダー・マネージャは頭に入れる必要があるかと思います。


Part2のまとめ


まとめますと
・データベースと関連付けられた名称や、グローバル変数等、複数の人間が関与する変数名は予め決めておいた方がよい。
・税込価格など「専門用語」の場合、対訳も専門用語の対訳にした方がよい(ただし常に対訳があるとは限らないので臨機応変にする必要がある)。
・複数の対訳が考えられるときは「どれを使うのかを」決めておく。できれば使わない候補を(使わない変数名)とすると無用な混乱を事前に防ぐことができる。
・人が作るアプリケーションは大体決まっていることがあるので、慣用表現(GoodsではなくProducts)があればそちらを使う
ということが言えるかと思います。


アーキテクトの仕事


あまり明確に言われていないかもしれませんが、以上のように考えながらスキーマ設計を行ったり、用語集の必要性を考えるのがシステムアーキテクトの仕事の1つになります。


変数名は「AIにレビューさせろ」Part0(初心者の方へ)


変数名は「AIにレビューさせろ」Part1


老兵は死なず、AIと踊る


2026-01-10 | コメント:0件
Previous Page | Next Page