未経験者がAIでアプリを作ったのを見て、仕事レベルはまだ遠いと感じた話
今回の要約
未経験の方がAIでアプリを作れるようになって、開発の入口としてかなり良い変化が起きたと思っている。ただ「動いた」と「人に出していい」の間にはめちゃくちゃバカでかい距離があるのをみんな知らなすぎる。そしてそこは実装力(AIパワー)じゃなくて判断力や「気付けるか」といった経験値量が必須。趣味で終わる分なら"作れた"で十分だけど、公開する・誰かに使ってもらう・将来それを仕事にするなら、情報の管理や壊れたときに責任を持てるかどうかをちゃんと見据えて作る・運営していく必要がある。
自己紹介
こんにちは。現役8年目のエンジニア兼PMをやってる、やむぅ。です。普段はフリーランスエンジニアとして8人の開発チームのPMをやりつつ、個人開発したサービスをいくつか運営してます。個人的にプログラミングを教えたりもしてます。
AIでアプリを作れた、は本当に「できてる」のか
「未経験だけど、AIでアプリ作れました!」
こういった報告やツイートがここ1年でめちゃ増えた印象あります。しかもちゃんとアプリとして動いてて画面いい感じ、データが保存されてデプロイまでできてる。僕が独学してた大学2年の頃は、自分のPC上でHTMLを表示させるだけで半日溶かしたりしてたので正直うらやましいです。笑
ただ、そういう作品を見せてもらって「ここ、なんでこの作りにしたんだろ?」と思ったことがあってそれ聞いてみると、けっこうな確率で「AIでいい感じにしました」とか「AIが言ってたのでそうしました」でした。
これ別に責めてる話とかじゃないです。むしろ未経験者から見れば設計とかデータベースとは?とかAI賢いから自分の知識必要なくてもいいだろ、だと思います。ただ、この観点にてやばいなって思うのがその実装は本人の判断になってない。ここが、僕が見ていて「リリースするのは無責任すぎる」「仕事レベルの運用は無理あるな」と感じたポイントです。
実際の開発現場の感覚だと、「動いた」は完成じゃないんです。動いたあとに「これで出してもいいのか」や「これだと別のリスクある」とか確かめる工程がないしそもそも未経験の方はそんなん知らん、その結果ここがすっぽり抜けやすい。
もっといえば「AIに聞けばわかる」というがそもそも「何聞くの?」もあるし「その回答が十分なの?」か判断できない→他のAIにそれレビューさせる→そのレビューが十分か判断できない…のループでしかないです。
「作れる」と「出していい」についての個人的見解
趣味ならいいけど、仕事なら責任が要るのを忘れないで
作ったものは、使う人の範囲で最低限必要な品質が変わります。品質というと堅苦しいですが「守らなきゃいけないこと」と言い換えてもいいです。
ざっくり4段階くらい。
自分だけが使う:動けばOK。壊れても困るのは自分だけ
友達や身内に見せる:バグってもちょっと恥かくぐらい。
世に公開する:他人のデータを預かる。落ちたら迷惑がかかる
お金をもらって作る:壊れたら賠償や信用の話になる
下に行くほど、責任問題や損失に関する話になってくる。
で、AIで作ったものを見ていて実際に多いのが次の3つ。
動くけど壊れやすい:とりあえず動く。空入力・通信失敗でなんか不具合出る。二重送信とか決済処理でうまく反映されない
説明できない:なぜこのライブラリ使ったのか、なぜそのサービス繋いだのか、なぜこの機能こんななのかが答えられない。あと直せない(AIガン任せするしかない)
再現性がない:自分のPCでしか動かない。全部AIに設定や構築してもらったからわからない。
僕がずっと言ってるのが、仕事・一般ユーザーが使う以上「AIが作ったから俺悪くない」は通用しないということ。納品物に対して責任を持つのは書いた人(提出した人)なので、生成元がAIだろうが人間だろうが関係ないです。
例として、AIアバターと話せるサービスを作ったとします。最初は月3万人が利用して初手から使用者爆発して有料会員や商品購入で$3857/monthの売り上げを出し好調な滑り出しをしました。だけど3ヶ月目にて、
会話速度が落ちた
サブスクリプションが反映されない(払ったのに有料会員なってない)
違う人の会話履歴出てきた
ログインしていない人でもユーザーのデータを見れる状態だった
が発覚してきました(もうちょっとあったかも)。さらにこれへの対応がうまくいかず(思ったほど改善されず)、さらには追加機能も微妙、最後は「このアプリ情報漏洩する」が払拭できず改善も納得できる対応できなかった結果、一定者への返金をもってサービス終了になりました。
これは実際のアメリカでの事例です。
まだ「カード情報が漏洩した」とか「実害出たから損害賠償請求する」レベルのインシデント(事故)が起こっていないケースなので良かったですが、それでも「未経験者だから」⇒「AIに沿っとけばうまくいく」はリスキーすぎることをわかっていただきたいです。
判断できないと、提案の正しさも見えない
未経験者のもう一つの壁がこれ。AIは間違ってるときも自信満々に出してきます。文章はきれいだし引用もあって正しそうに一見正しそうに見えます。
例として、ズレさせてみたのを3パターン紹介します。
①:「ログインつけて」とお願いすると、既存のサービスを使えば10分で終わる場面で自前実装のコードが出てきたりします。動くけど、パスワードの扱いを自作するのは普通に怖い。
ハッシュ化や暗号化を知らないので「0からログインフォーム作ってログインできた!」で終わります。データベースにはそのままパスワードが入ってるのでみられた瞬間終わりですがそれも気付くことない。
②:エラーメッセージを貼って「直して」と言うと、たいていは直ります。ただ、原因を消したんじゃなくてエラーを握りつぶしただけのその場しのぎが残ってく。例外を全部拾って何もしない実装とかですね。画面上はエラーが消えるので、直った気になるけど本質の原因は残ったままというやつです。
あとは特殊なエラーや外部サービスを使った時のエラーへの対応で完結しなくなっちゃうとか。一箇所直すと他でエラーになって、そこ直すと他がまたエラーに…と言うように永遠に続く。
AIの提案が妥当かを見るには、結局その領域をある程度知ってる必要がある。ここが「AIがあるから勉強しなくていい」にならない理由だと思ってます。
未経験の人がAIを使うこと自体は、むしろ良い
ここまで書くと否定に見えるかもしれないので、僕の意見を書いておくと、AIで作り始めるのは学習の入口として良きです。
入口としては良き
昔の挫折ポイントは作るもそうですけど開発の準備段階でもありました。環境構築で3日詰まる、最初の「hello world」画面が出せない、参考書のコードを写経しても動かない。ここら辺で「向いてないかも」と離れていく人が多い印象でした。
AIはこの部分の壁をかなり削ってくれる。しかも「まず動くものができる」という順番になるので、モチベーションが持ちやすい。全体像を先に見てから細部に降りるのは、学習の順序としても筋が良いと思ってます。
なのでプログラミングを教えてる僕が言うのも変な話ですが、いきなりスクールに入る前に、まずAIを使った独学で始めてみてほしいです。1ヶ月やってみて、続くのか・面白いと思えるのかを確かめる方が先かと。
詰まるのは「実装」ではなく「判断」
で、その先で詰まるポイントが実装じゃないんですよね。知識としてはできそう。止まっちゃうのは判断のほうです。ケースとしてはこの3つかなと。
どこを見ればいいか分からない:エラーが出たとき、ログを見るのかコードを見るのか設定を見るのかの検討がつかない。そもそもどうしたらいのかも、何をすればいいかもイメージ掴めてない。AIに貼る文字列も選べない
仕様が曖昧なまま進む:「何のために使うのか」が決まってないので、機能をどう組み立てるかの判断ができない。これも「うまくいく実例」とか「組み立てる」イメージが掴めてなかったりで無限に実装→書き直し続けることになる
直すと別が壊れる:一箇所直したら別の画面が動かなくなる。影響範囲が読めないので、修正が博打になる
このどれも、コードを書く力とは別の能力です。プログラミング学習が「文法を覚える」だけになってると、ここが育たないまま「作れる」だけに到達してしまう。AIが速くなったことで、この差がむしろ見えやすくなったなと感じてます。
これから必要なのは「開発できる人」
コードを書く人と、開発できる人
現場の仕事を分解すると、だいたいこの順番で流れます。
作るやつを理解する → 何を作るかを決める → どう作るかを判断する → 実装する → 検証する→出す。
AIがめちゃ速くなったのは、この中では「実装する」と「検証する」です。残りのフェースはAIを使うにしても人の比重が大きいです(うちのチームでもそうです)。
僕はPM兼エンジニアなので、レビューする側にもいます。そこで見てるのは、コードがきれいかより「これ大丈夫なん?」を本人が確証できてるかどうか。あとはどうしてこのような組み立て・フローにしたのか。ここに答えられる人は、経験が浅くても安心して任せられる印象です。というより信頼できます。逆に、コードが完璧でも「なんで」が答えられないと、バグの可能性あるものを採用するわけにもいかずチームの責任問題にも繋がるので、そこを確かめ直すことになる→結果二度手間になる→その人いなくてもAIだけあればいい→人材として不要となるわけです。
実際こんな冷酷に考えてはいないが、仕事としてはこんな評価をせざるを得ない可能性がある、綺麗事とかじゃなくてPMとしての実感です。これから価値が上がるのはまさに「コードを書ける人」より、開発を前に進められる人のほうだと実感しています。AIの実装力が上がっていくほど、その傾向は強くなるはずです。
皆さんに伝えたいこと
とはいえ「判断力をつけよう」だけだと難しいので、何かサイトとかアプリとか作ってみたものが手元にある人向けに具体的な4ステップを置いときます。1時間かかんないと思います。
目的を1文で書く:「何のために使うものか・何したいものか」を1行ざっくりだしてみる。
壊れたら困る箇所を3つ書き出す:データが消える、他人の情報が見える、二重に登録される、など。
その3つを実際に壊しにいく:空で送る、変な値を入れる、通信を切る。何が起きるか自分の目で見る。
それをどう対応すればいいか考える:対処療法ではなくて原因療法を目指す。AI使ったりググったりして調査してみて。
これをやると、たぶん直したい箇所が5個くらい出てきます。どうしてそうなっちゃったんだろうとか、なんでこんなふうにちちゃったんだろうとまず考えてみてから、そもそもどうしてれば良かったんだろう、を考えたり調査してみてください。この工程を1回経験してみるだけで見え方が変わってくるはずです。
まとめ
AIで作れる人が増えたのは、素直に良い変化だと思ってます。ものづくりの入口が広がった分、学習を続けられる人も増えるはず。
ただ、'作れた'と'責任を持って出せる'は別物です。仕事で使うなら尚更です。趣味のままでいいなら作れた時点でゴールでいい。でも誰かに使ってもらう・仕事にするつもりなら、その先に判断や検証の工程が残ってる。
そのために、自分の作ったものを見て一回考えてみてほしいです。それ、本当に「できた」と言える状態なのか。
もし判断が合ってるか不安な人がいたら…
「作ったけど、これで公開していいのか分からない」。ここは一人だと判断がつかないところだと思う。
もしそんな感じで不安だなとか、具体的にどうすればいいん?な人向けに、エンジニアやってる僕が相談受け付けるよってのをやるので、気になったら覗いてみてください。
あわせて読みたい記事:
いいなと思ったら応援しよう!
よろしければ応援お願いします! いただいたチップはサービス開発と運営費に使わせていただきます!