【AI駆動開発】ADD時代のリーダブルコードを考える

X(旧Twitter)では日々様々な話題が駆け抜ける。ITエンジニア界隈も例外ではなく毎日多くの話題で溢れ、頻繁に盛り上がる議論を呼ぶ。

そんな中駆け抜けていった「AIが読むんだから可読性なんてどうでもいい」という話題。
当然「AI丸投げの無責任成果物とか論外」という反論もセットなのだが…。

目次を読み込み中…

はじめに

これはいぐぞー氏 ( @igz0 )及びその引用元ポストや、当時のツイッタランド話題を発端とする、AI駆動の開発におけるコードの是非を当話題です。
いろいろな意見があるが、私なりに解をみつけたので話題の整理と合わせてここにまとめる。

AIの成果物に対する責任問題

この話題を語る上でどうしても外せないのが、責任問題である。
しばしば生成AI界隈では話題になっている物でもあるが、改めて言う。生成AI及び大規模言語モデル等の技術は技術でしかなく、悪だと否定する理由は一切ない。これはダイナマイトと同じであり、結局のところ使う人間の資質により結果の善悪が決まるからだ。
生成AIが著作権を無視したアウトプットを出すと言ってもそれが悪なのではなく、それを出力し無責任に放出する利用者が悪であると。

AIの書いたコードの責任を負うのは人間である

さて、「人間が責任を負う」のは少なくとも現代では確定している。であれば人間が読むことに特化したリーダブルなコードであるべきというのは正しい主張に見える。

ではなぜそうではない意見があるのか。

これは結構単純な話じゃないのかなと本記事を書くにあたりあらためて話題のポストを漁った際に思った事がある。
単純にClaudeCodeやCursorなどを使って開発する人の開発力がそもそも高くないからという話だ。
低レベルなエンジニアがAIバフにより実力以上の開発ができるようになった事で、自身の実力を過信する。その上でSNSでの話題に飛び込んだ結果表面上の実力と実態が乖離しているために比較的単純な議論も無駄に発散してしまっている。

そもそもAIの書くコード品質はどうなんだ

結論「高くはない」これに尽きる。

ClaudeCodeやCodeX、Cursorといろいろなツールが出てきているが、AIの品質が高いだの低いだのという話題は尽きない。
これらAIのスペックが人間のそれとは乖離しており、人間が長らく重視していたコードの見栄えやそれこそリーダブルコードと呼ばれたものに対してはかなり低いレベルと言わざるを得ない。
しかし各種ライブラリの利用や簡単な自然言語命令で一定のレベルのコードをざっと実装する速度感を主軸に評価すると人間と比べ圧倒的に優秀と言わざるを得ないだろう。
そのため、AIのどこを見るかにより評価が真逆になるのは必然であり、それを理解していない人の評価は無駄とさえ言える。

AIの成果物とどう向き合うのか

一見難しそうに思えるが、人と同じである。得意を見て苦手は手厚くフォローするべきだ。

コードリーディングはAIのが人間より圧倒的に優れている。

これはもう疑いようがない。わざとAIが誤読するように変数の名称を逆転させたりif文を不必要に否定形で定義したり…etcそういったコードを書けば当然AIの読解は間違ったものになるが、人間だって同じである。
であれば読解速度が圧倒的に早いAIのが優秀であろう。

さて、先程「そういったコードを書けば」と言い、リーダブルコードの広告を載せた。賢い諸兄らならわかるであろう。
ぶっちゃけAIが誤読するようなコード書けばAIは誤読するし、当然そんなコードは人間も誤読するのだ。そしてAIの成果物が読み取れないなどという人は単純にコードリーディングの能力が無いだけだと思う。そもそもAIの成果物は100点ではないにしろそれなりな点数がある。それこそジュニアやミドル程度のエンジニアであれば十分代替できるほどにAIの成果物は必要十分な出力がされている。

100点を求めてる人の言う「AIは無能」と30点の人がいう「(読み取れないコードだから)AIは無能」は同じ言葉でもまるで意味が違う。これを踏まえてXの話題を見ると、大半の人は似た意見に収束してると感じる。

ではなぜAI開発における人間負担の重さを感じるのか

結局のところ、不必要なルールをガチガチに固めた環境でAIを利用し、AIに無駄な人間寄せを求めているからにほかならないのだろう。
言葉選ばずに言えば、「無能のためにガチガチに固めたルールのせいでAIのパフォーマンスを落としている(低く評価している)」と言うだけの話。
「インデントは半角スペース2個」というルールにAIはTab1個を入れてきたとなった場合。本来はAIのが正しいが、未だに「インデントは半角スペース2個」などといったアホな基準で業務をしてる現場からみたらルールに則っていないAI出力が減点される。
これは単なる1例であり、実際にそういう人がいたかどうかは微妙なラインだが人間が成長するのではなく、AIを人間のレベルに合わせようとするから人間の負担が重く感じるのだ。
結局これまでとこれからで人間に求められるスキルの内容が変わるという話で、これまで重きをおいていなかった能力が最重要とされる時代になっただけ。それについていけない人がAIはだめだと言っているにすぎない。

AI時代のあるべき姿を考える

いろいろどっちつかずな事をいったが、それはこの議論自体が大した問題ではないという事でもある。
しかし、時代の変化とともにあり方が変わろうとしてる中、一定の解と言えるものとこれからのあり方という意味ではきちんと整理する意義があるのも事実。私の思うこれからのあるべき姿を考えてみた。

コーディング規約の見直し

従来、ジュニアクラスのエンジニアもマンパワーとして参画させることが必須であったためにコードの可読性の重要度は極めて高かった。それ故にガチガチに固められた規約のもと開発が行われてきた歴史的背景がある。

それがAIの登場によるジュニアレベルの見直しが進み、一定レベル以下の人材としての価値が著しく低下した。
これは業界の未来を考えるとそれはそれで問題が…という話もあるのだが、それはだいぶ論点がズレてしまうので一旦割愛し、この場では「市場で求められるエンジニアのレベルが大幅に上がった」という事実だけに留めて話をすすめる。

これからの時代、マンパワーはAIで一定解消できることが業界に知れ渡り、SES界隈を中心にジュニアの案件引当が相当難化している現状がある。
そんな状況があるのに従来のコーディング規約のまま運用するのは果たして意味があるのか。

改めて見直し、そのルール必要?と考えることが重要です。
規約として縛るのではなく、「あるべき姿として教育する」事の重要性を看破しましょう。

「変数名は意味をわかりやすくする」「コードは短くする」「ロジックの単純化」どれも昔から言われているものです。たったこれだけの事なのに、無意味に複雑なルールにしていませんか?

暴論を言ってしまえば、コーディング規約は「各種名称ははキャメルケースで定義する」だけで十分です。それ以外はIDEの設定や、個人の裁量とする。それでリーダブルコードで紹介されているようなNGパターンを量産するようなエンジニアは能力が低いとされるべきです。
また別途ジュニア向けに「相談する基準を明確にする」といった評価指標を策定する事は有用だと思います。
『if/forのネストがn回になったら相談する』などは明確でかつルールとしても有用でしょう。

人の役割から求められるスキルを考える

これまで業界に入り込めていた末端は必要とされなくなります。会社を組織を動かすのに必要なプログラマ・ITエンジニアの絶対数が減るので求人は減ります。これはもう確定した未来です。
その上で優秀な人材が必要なので求人自体はなくなりません。しかしこの「優秀」という定義は現代の評価基準であり、実態は「コードレビューができる」といったシニアに求められている一部の能力の事を簡略化した表現にすぎません。
「プログラムがちょっと書ける」が入口だったプログラマのスタートが変わったのです。
当たり前ですが、市場が求める人物像から乖離したら就職/転職の難易度は上がります。当然です。

ではこれからの時代に求められる人の役割とはなんでしょうか。それは出力されたAIのコードを読み取り動作を確認し問題を発見する能力と、問題を指摘し適切に修正させる能力。(軽微なら自分で治す事ができる能力)です。
ようするに全員が現代の課長級。部下(AI)を使う人材になることが求められています。人は5-7人程度の部下を持ち管理するのが合理的と言われています。
AIエージェントを3-5人持つ人材が当たり前になる時代。それを見据えてエンジニアとしてのスキルを獲得しましょう。

電卓が発明され、そろばんスキルが求められなくなったように、AIによる開発が本格化したらただ書けるだけという能力は必要ではなくなります。それだけのことです。難しく考えず時世にあわせたスキルセットの構築を行いましょう。

AI時代のリーダブルコード

正直AIの性能がどんどん上がる今、何を言ってもすぐに過去のこととなってしまうでしょう。
しかし、この記事のもととなった議論「AIが書いたコードは汚くても動けばいい。どうせメンテもAIにやらせるし」vs「成果物としてコミットするならメンテも考えて人間が読めるよう綺麗に整理されているべき」という論争自体が無駄であるというのが私の結論である。
そもそもAIの出力したコードが「成果物としてコミットするならメンテも考えて人間が読めるよう綺麗に整理されているべき」を満たしていない事はまずないだろうと思うからだ。
そしてこれは当然だが、赤子に文庫本を読んで理解しろと言っても何言ってるんだ?となるのと一緒でプログラムを読むのというのは一つのスキルである。だからその能力を有さない人に対してそんな指示はしないように、AIの成果物程度のコードも読解できないのであれば純粋にエンジニアとしての能力不足を先に疑うべきであるという話だ。
いわゆる難読化としてのミニファイや、最初から機械語として01だけで出力するのか?否である。AIは指定した言語でちゃんとコードを出力している。
それが読解できないのであれば単純にその言語の習熟度が低いだけであり、本人の能力問題である。
2回目となるが、AIの成果物は100点のコードではない。しかし、40点のコードというわけでもない。おおかた60-80点ぐらいのコードだろう。完成度としてもね。

それを合格点レベルに引き上げるのが人間の仕事であるというのが現代のプログラマの役割なのだと思う。数年したらまた大きく変わるだろうけど、少なくとも今は数百行かかなきゃいけない仕事がコーヒー入れている間にたたき台が作られ100行程度の修正で完了する。そういった時代になったのだ。

AIの成果物が100点の成果ですごい!なんて1度も思ったことがないが、0点でダメダメとも思ったことがない。これはジュニアエンジニアと一緒である。何が得意で何が苦手か。何なら50点取れて何が10点となるのか。ジュニアエンジニアのマネジメントとAIのマネジメントは対して変わらない。だから適切に成果物を読み取り正確な指示で作業させなければならない。

AI時代のリーダブルコードは「人が読み解きやすいコード」ではなく「人が読むためのコード」となるんじゃないだろうか。
コードは書く時代から書かせ読む時代へ。リーダブルコードも人の手による人のための物から、自分のためにリーダブルなコードを書かせるスキルへと変わったのだと思う。概念としては何も変わってないのだろうけども。

この記事は役に立ちましたか?

もし参考になりましたら、下記のボタンで教えてください。

関連記事

コメント

この記事へのコメントはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)