0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AIには書けない「味」のあるコードを書く方法

Last updated at Posted at 2025-06-14

はじめに

人類は、ずいぶん昔から自分の足で走るより早く移動できる手段を持っています。
荷物を届けたり、伝令を伝えたりするのにもう健脚は必要ありません。

馬や自転車、自動車の登場によって飛脚や急使のような仕事は失われました。
しかし、現代でもウサイン・ボルトは100億円以上を稼ぎ、ランニング市場は順調に成長しています。
これは、「人類が100mを9.58秒で走るシーン」「これまで5kmしか走れなかった自分が今では10km走れるようになっていること」に価値を感じる人が多いからだと思います。

ランニングには興味が無い方でも、例えば「工場で大量に印刷された名作絵画よりも子供が学校で描いてきた絵を飾りたい。」「売られている綺麗な湯呑みよりも、旅先で自作した不恰好な湯呑みの方がお気に入り」などに置き換えると分かって頂けるのでは無いでしょうか。

プログラミングも同じで、今後は「人類が書いたコード」や「自分で書いたコード」に新しい価値が生まれるのではないかと思います。
人の手によるコーディングには、AIには出せない「味」があります。

「味」の出し方を学んでいきましょう。

インデントにコードを説明させない

AIが出力する綺麗なコードには特徴があります。
それは、インデントが一貫していてぱっと見ただけで変数のスコープやブロックの範囲が分かるようになっていることです。{}でブロックを表現する言語でも、やはりインデントはされていた方が格段に読みやすいです。

chatGPTにfizzBuzzを行うコードを生成してもらうと、下記のように一目でiのスコープが分かり、どこからどこまでがforループの範囲なのかが分かるように書いてくれます。

fizzbuzz.c
#include <stdio.h>

int main(void) {
    for (int i = 1; i <= 100; i++) {
        if (i % 15 == 0) {
            printf("FizzBuzz\n");
        } else if (i % 3 == 0) {
            printf("Fizz\n");
        } else if (i % 5 == 0) {
            printf("Buzz\n");
        } else {
            printf("%d\n", i);
        }
    }
    return 0;
}

ここに「味」を足していきます。
可読性は下がりましたが、人の手が加わったことで「あたたかみ」が加わりました。
インデントは、コードの可読性を上げるためではなく自己表現に使いましょう。

fizzbuzz_handmaid.c
#include <stdio.h>

int main(void) {
    for (int i = 1; i <= 100; i++) {
    if (i % 15 == 0) {
        printf("FizzBuzz\n");
        } else if (i % 3 == 0) {
            printf("Fizz\n");
        } else if (i % 5 == 0) {
            printf("Buzz\n");
    } else {
        printf("%d\n", i);
    }
        }
    return 0;
}

ファイル名、関数名、変数名に内容を説明させない

AIが書いたコードはファイル名、関数名、変数名全てに適切な命名がされていることが多く、なれない言語で書かれたコードでも英文が読める方ならある程度スムーズに読むことができます。
分かりやすいのは良いのですが、目に映る全てのものに意味があると、看板まみれの大都会のようで疲れてしまいます。

chatGPTに、

  • 陸上選手の歴代収入ランキングを表示するページのhtmlファイル
  • 選手の名前を入れる変数と選手の収入を入れる変数
  • 年収で順位づけする関数

をそれぞれ命名してもらいました。

  • track_athlete_income_ranking.html
// 選手の名前
char athlete_name;
// 選手の収入
double annual_income;
// 年収で順位づけする関数
void rankAthletesByIncome(struct Athlete athletes[], int n);

過不足なく必要な情報が入った命名で、後から改修やデバッグがスムーズに行えそうです。

しかし、「味」がありません。私なら例えば下記のように命名します。

  • asigahayai_toiudakede_ore_yori_nanbaimo_kaseideru_hitotati.html

妬む気持ちが前面に現れた良いファイル名です。後任者に当時の筆者の心情をありありと伝えることができます。

// 選手の名前
char happy_birthday;
// 選手の収入
double to_me;

選手の名前を入れる変数、収入を入れる変数を作った日が私の誕生日だとしたらこうします。
社内に誕生日の方がいたら、積極的に変数名にしてあげると良いでしょう。レビュワーや上司の誕生日をコードで祝うことができたなら、次回の査定にも良い影響があるでしょう。

// 年収で順位づけする関数
void fanc_a(struct Athlete happy_birthday[], int birthday);

気分が乗らない日に嫌いな上司に頼まれたタスクなら、関数名には無理に凝らなくても構いません。
作った順番に、fanc_a,fanc_b,...,fanc_zとすればいくらでも命名できます。fanc_zまで来たら、fanc_aaからまた始めましょう。

引数は、happy_birthdayと命名された変数を受け取ることが決まっているのでそれに合わせて当然(struct Athlete happy_birthday[], int birthday)としました。

コメントにはポエムを書く

コメントには何を書いてもかまいません。
その日の気分、筋トレの記録、好きなアニメの二次創作小説などを書くことで良い気分転換になります。

レビュワーと趣味があえば感想のコメントをもらえるかもしれません。

AIが書く、つまらなく分かりやすいコメントと差別化することができます。

おわりに

私たちの仕事は、まだ陸上選手ではなく飛脚です。
むやみな味付けは控えましょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?