【本編】生成AI時代にコードを書く人が勉強しておくべき最低限の知識(私見)
Twitter(X)をながめていたところ、メルカリで生成AI推進担当を務めているハヤカワ五味さんが上記のツイート(投稿)をされていたので、その答えめいたものを私なりにまとめておきます。「これだけ勉強しておけ」という分野とその理由、および学習のための教材を列挙したのが本記事です。
なお、本記事の内容は完全に私見ですので、勢いよくマサカリを投げるのはご勘弁ください。私に投げる代わりに「これ要らん/コレが要るぞ」みたいな話を、各々のnoteやQiitaでまとめてくださると、インターネットに知が放流されてみんなハッピーになります。
※この記事を書き上げたあとに、以下のツイートを見て「それはそう」となりました。
(以下は目次ですが、前提もそこそこ分量があるので、気になるトピックに飛んで拾い読みしたほうがよいかもしれません。なお、Amazonへのリンクはいずれもアフィリエイトで、クリックすると筆者に収益が発生する場合があります。)
前提
技術変化に関する前提
この先どんなイノベーションが起きて世界がどう変わるか全く予測がつきませんが、ひとまず向こう2〜3年は変わらないと個人的に信じている内容を前提に置いた上で、本記事を書いています。
コンピュータの主要なアーキテクチャは、現行と大きく変わらない(五大装置で表現できる)
ネットワーク上のプロトコルは劇的に変化することはない(新しい規格ができたとしても、現在主流になっているものが置き換わることはない)
コマンドを叩けるほうが、コンピュータとより深く会話できる世界は維持される(自然言語で指示するだけで完璧なアプリが出来上がる世界はまだ先である)
ほかにも筆者が気づかない、暗黙の前提がいくつかあるかもしれません。適宜脳内で補完いただくか、ご指摘いただけると幸いです。
「コードを書く」の定義
この記事において「コードを書く」ことは「Webアプリケーションをつくる」ことを指すものとしています。筆者が考える本来の定義ではもっと多くの内容を含みますが、冒頭のツイートの文脈──ハヤカワ五味さんが生成AIを利用して何かを開発している──を踏まえると、Webアプリケーションというごく狭い範囲に絞るのが妥当であろう、との判断です。
学び方と教材の偏り
筆者が学習する際にはあまり動画を用いないことから、本記事で紹介している教材は、書籍やWeb記事に偏っています。動画で学ぶほうが肌に合う方は、本記事の内容を参考に、適宜YouTubeを検索してください。
筆者の背景
データアナリスト/データサイエンティストの実務経験が数年
ハードウェアのエンジニア経験が数年(半導体メモリの実機評価・試験設計)
インターネット老人 (FFFTPでPerlのCGIスクリプトを転送していた世代)
上記のような背景により、本記事については、一部の技術分野について解像度が低い場合や情報量が極端に少ない場合があります。あらかじめご承知おきください。
コードを書く上で最低限勉強しておくべきこと
冒頭で紹介したツイートに対して、私は以下のようなリプライをしています。
別の表現をすると「『かけだしエンジニアが学ぶべきこと』とほぼ同じ内容でよかろう」です。(どの分野のエンジニア?という話は前提に書いた通りです)
なので、最低限勉強しておくべき内容とその理由、参考になる教材などは「かけだしエンジニア」で適宜ググられたし──という答えになるのですが、それもそこそこ手間がかかるので、筆者なりの見解と参考資料を挙げておきます。
※以降に掲載するもののうち、リンク先がAmazon.co.jpである場合はアフィリエイトリンクです。クリックすると(雀の涙ほどの)収益が筆者に発生する場合があります。
プログラミング言語なにか(とりあえずPython)
「コードを書く」ためには、言うまでもなくプログラミング言語の文法を覚える必要があります。ただし、生成AIを使う前提であれば、個別の文法よりも以下に挙げる概念を理解するほうが重要になるかもしれません。
コンパイラとインタープリタ
変数とデータ型
制御構造(条件分岐、繰り返し処理)
配列(リスト)
連想配列(ハッシュ、辞書)
「値」の代入と「参照」の代入の違い
関数
クラスとオブジェクト
ファイルの入出力
例外処理
上記が学べれば言語は何でもよいと思っていますが、生成AIを触るならPythonが第一候補に上がるでしょう。Webアプリケーションをつくるなら、JavaScriptも必修科目に近いです。そのほかの選択肢としては、RubyやPHPなども候補に上がりますが、選ぶのが面倒なら「とりあえずPython」で良いと思います。”初学者”かつ”ソフトウェアエンジニアとしてバリバリ稼ぎたい”とかでなければ。
教材としては、以下があります。
書籍『やさしいPython』
筆者が初心者・初学者向けに教材としてよく勧めているものです。基本的な内容が一通り網羅されている点はもちろん、図解が多いため、馴染みの薄い概念も理解しやすくなります。
ほかに図解を多く含むものとして『Pythonの絵本』もあります。書店で立ち読みして好みのほうを買う・が無難とは思います。
公式ドキュメント『Pythonチュートリアル』
python.org の公式ドキュメントです。日本語でも提供されていますが、一部英文のままの箇所もあるようです。無料でアクセスできるのは嬉しいですが、図解がほとんどないため人を選ぶ教材かと思います。
Webサービス『paizaラーニング』
Python講座は有料会員登録が必要です。レッスン動画の説明はかなりカジュアルなスタイルで、レッスン内容も初学者に合わせた平易なものになっています。また、環境構築不要な実行環境が提供されており、各レッスンに対応して練習問題が用意されています。
プログラミング未履修者向けには良い教材と思います。(筆者はRubyの学習で利用しました)
HTMLとCSS
(多くの場合)我々は、WebサイトにGoogle ChromeやMicrosoft Edgeなどの「Webブラウザ」を使ってアクセスします。このとき、Webサイト側からWebブラウザ側へ渡されるのが「HTML」と「CSS」で書かれたWebページです。Webブラウザは、受け取ったWebページを「HTML」の文法(ルール)に従ってウィンドウ内に要素を配置し、「CSS」に従ったスタイルで表示します。
──今はまだ何を言ってるかわからなくてもいいです。とにかく、Webページは「HTML」と「CSS」で書かれていること、「HTML」と「CSS」を理解すれば画面のデザインを自在に操作できること、の二点だけをまずは覚えてください。
MDN Web Docs HTML/CSSチュートリアル
筆者自身はHTMLやCSSを学ぶのに本や教材を使った記憶がないのですが、
でこのサイトのHTMLチュートリアルは、筆者が学んだやり方に近しいです。「メモ帳でかんたんなHTMLを書いてブラウザで開く」から始めて、徐々に新しい概念を学んでできることを増やしていく……という流れになっています。もっとも安上がりで王道の学び方です。
なお、CSSのチュートリアルは上記ページの中ほどにあります。
とほほのHTML入門(HTMLリファレンス)
インターネット黎明期から存在する、由緒正しき老舗サイト『とほほのwww入門』です。MDNチュートリアルでなんとなく理解した後、上記のHTML逆引きに一通り目を通すと「オッケー完璧に理解した」状態になれます。
Chrome 検証ツール(デベロッパーモード)
Webページを右クリックし、メニューの「検証」を選ぶと出てくるものがChromeの検証ツールです。ツールです。厳密には”教材”ではないのですが、学習に有用なので挙げておきます。
HTMLとCSSは基本さえ覚えれば、あとは「習うより慣れろ」の世界に入ります。現在ひらいているページのHTMLを確認したり、修正して見た目をいじったりするのを繰り返し、練度を上げていくことになりますが、そのときに役立つのがこれです。詳しくは上記リンク先を参照ください。
Unix/Linuxとシェルコマンド
プログラミングの開発環境を立ち上げるときに立ち向かわなければならないのが、CLI; コマンドラインインターフェースです。普段つかっているWindowsやmacOSとは違う世界に足を踏み入れることになり、ここも初学者が心を折られがちなポイントではないかと思います。
なお、過去に後輩に教えた経験からすると、本を読むとかWeb記事とにらめっこするよりは、動画で学ぶほうが効率的だと思います。CLIを文章で学ぶと「マジでなんもわからん」になりがちなのですが、動画であれば「今この瞬間に何が起こったか」をタイムリーに解説してくれます。
Microsoft提供の『Bash for Beginner』
標準的なシェルである『Bash』のレクチャーです。プレイリストは動画20本で構成されています。解説の音声は英語ですが、キャプションを自動翻訳 > 日本語 に設定することで、日本語字幕が表示されます。
このレクチャーでは、Bashの実行に『GitHub Codespace』という環境を利用しており、GitHubのアカウントがあれば、環境構築が2〜3クリックで終わります。(手元のmacOSやLinuxでも実行可能ですが、表示結果が動画と異なる場合があるため、初学者は動画と同じ環境で実行するのがお勧めです。)
とほほのUnix/Linux入門
実際のWebアプリケーション開発では、Bashのコマンドを覚えるだけでは不十分で、そのBashが動いているOS=Unix/Linuxについての知識も必要です。
ただ、これも筆者は独学で学んでしまったのでよい教材が思い当たらず……。
ひとまず、入口の範囲をざっとさらえる上記の記事を紹介しておきます。(インターネット老人御用達、安心と信頼の『とほほのwww入門』です。)
そのほか
すみません、良さげな教材を見つけ次第、追記します。もしくは自分で”最低限”にあたる部分の解説記事を書きます。
Webアプリケーションのつくりかた
前述の3項目に関する知識を下敷きにして、ようやくWebアプリケーションを構築するためのフレームワークを触れるようになります。いや、触るだけなら簡単なんですが、前提知識がないと「何やっているか全然わからん」となる可能性が高いです。
シェルを触り環境構築を行い、任意の言語について基本文法を覚えたら、以下のフレームワークのチュートリアルを触ってみましょう。Pythonであれば公式が日本語ドキュメントを提供しているDjangoがとっつきやすいと思いますが、それ以外の有名どころや関連書籍も並べておきます。
Python: Django 公式チュートリアル(日本語)
Python: Flask 公式ドキュメント(英語)
PHP: Laravel 公式ドキュメント(英語)
Ruby: Ruby on Rails 公式スタートガイド(英語)
書籍『実装で学ぶフルスタックWeb開発』
筆者の積ん読です。前記4つのフレームワークは、フロントエンド(画面)もバックエンド(アルゴリズムとDB )も1つのフレームワークで取り扱いますが、昨今のアプリケーションではフロントエンドとバックエンドを分離して別々に実装することが少なくありません。そういった全体像をさらうのに適した本かと思います。(ただし一定の予備知識も必要なため、初手でこの本を選ぶのは難あり・とも思います。この記事にある分野を1周した後に、2周目の最初に手に取る本、とするとちょうど良さそう。)
ソフトウェア・テスト
初学者は無意識のうちに「とりあえず動けばいい」でコードを書きがちですが、さにあらず。テスト不十分なシステムを本番リリースすると、メールの誤送信が起きる、Webページが真っ白になる、そのほか様々なトラブルが起きます。(うっ、思い出し頭痛と思い出し涙が……)
テスト大事。リリース前にバグを見つけて潰すのは大事。初学者も非エンジニアも、全人類システムテストの大事さを知ってほしい。(信念を超えて信仰の領域)
閑話休題。教材を挙げておきます。
書籍『この1冊でよくわかる ソフトウェアテストの教科書』
筆者が読んだのはけっこう前なのですが、基本的な内容を平易な言葉で解説している、良い書籍だと記憶しています。(増補改定2版が出ているということからも、良著だと判断してよいはず)
ゴリゴリ個人開発をやるなら必読と思います。
書籍『徹底攻略 JSTQB Foundation教科書&問題集 シラバス2023対応』
テストガチ勢向け&資格試験向けの書籍で、非エンジニアにはtoo muchかもしれませんが、参考までに挙げておきます。テストに関する知識が広く網羅的に解説されおり、純粋な学習目的でも使えると思います。前掲の本で「テストだいじ」のマインドセットが作れたら、必ずしも読まなくてよいかと思います。買う前に立ち読みを推奨。
ネットワーク関連
PCやスマートフォンはもちろんのこと、テレビやゲーム機までかんたんにWi-Fiにつながる時代に、(非エンジニアが)ネットワークの仕組みを意識することはさほどないでしょう。しかし、コードを書くときには、ネットワークの仕組みを何も知らない・では早晩詰むと思います。
筆者はWeb記事を見ながら実機を触り、ほぼ独学で最低限の知識を身につけたため、これという教材を紹介しにくいのですが……一応いくつか挙げておきます。
キタミ式イラストIT塾 基本情報技術者
前述のように、筆者はほとんど独学でネットワーク関連の知識を習得したのですが、強いてあげれば「基本情報技術者試験」の際に学び直したといえるかもしれません。その経緯から、参考書として同試験関連で図解の多いものを挙げておきます。
ネットワーク以外の内容も多く含みますが、非エンジニアの自宅に置いておくものとして悪くないと思います。なお、上記リンク先は令和07年度版となっていますが、同試験を受けないなら過去年度のものを中古で買うほうが安いです。
TCP/IPの絵本 第2版
Amazonでサンプルを見ただけですが、図解が多くとっつきやすい、基礎的な内容は一通り網羅されていそう、2018年に第2版となったこと、の三点を踏まえると「初学者であれば、買っても損にはならないかな」という印象です。
ガチ勢を目指すなら多分コッチがお勧めなのだろうと思いますが、筆者はこれも未読です。ぼちぼち買うかな……。
データベース
Webアプリケーションの裏側では、だいたいデータベースが動いています。なので、Webアプリケーションをつくりたいなら、その仕組みについて知っておく必要があります。また、ほかに比べて「知らないと後々取り返しがつかないこと」をやらかしがちなのが、データベースではないかと個人的に考えています。(いや、セキュリティもそうですが……)
多くのデータベースでは、データの読み書きやその他の操作に「SQL」という言語が使われています。そのため、SQLの仕様(コマンド)を理解しながら、データベースの仕組みを理解する……というのが王道になります。
スッキリわかるSQL入門 第4版
筆者は、SQLとデータベースを主に同書の2版で学習しました。説明が平易でわかりやすいこと、書籍の付録としてSQLの実行環境が用意されており演習を進めやすいことがお勧めポイントです。(某社の新入社員研修で使われているらしい、と聞いたことがあります)
ほかには
「本番環境でのやらかし」や「ユーザー数が増えたらアプリが激重になった」などのトラブルを想定すると、学ぶべきことは多々あると思うのですが……どこまでを「最低限」とすべきか悩ましいので、データベースはひとまず上記の本のみとしました。そのあとに学んだ方がよいことについて、キーワードだけ挙げておきます。
データベースのロック
インデックス
ユーザー・ロール
セキュリティ
これも超大事なんですが……この分野において、筆者は「実務をしながら見聞きした内容をなんとなく覚えていく」という学習をしているため、学び方に関する知見がありません。すみません。
ひとまず、この分野で有名な書籍や無料でアクセスできて信頼できる情報源を挙げておきます。
IPA提供『安全なウェブサイトの作り方』
独立行政法人IPAが無償で提供しているコンテンツです。SQLインジェクションやクロスサイト・スクリプティングなどの悪意ある攻撃方法とその対策がまとめられています。「脆弱性って何?おいしいの?」レベルの人は必ず読むべきです。そうじゃなくても初学者なら読んでおいたほうがよいです。(私もあとで読みます)
書籍『体系的に学ぶ 安全なWebアプリケーションの作り方 』
著者の名前から、俗に『徳丸本』と呼ばれるものです。IT企業で自社サービスを提供しているなら、高確率で会社の本棚にあるはずです。
筆者は未読(積ん読)ですが、事実上この分野の教科書にあたるものだ、と言っても差し支えないと思っています。(周りのエンジニアの雰囲気はそんな感じ)
最後に
Webアプリケーションの開発に「最低限」の知識を列挙したら、かなり広い範囲になってしまいました。ただ、本当にこのくらいは必要なんですよね……。人によっては、この記事を読んで「全然足りない」「浅すぎる」とおっしゃると思います。正直、そう思っている私もいます。(GitもDockerもないのはどうなんだ……と思うものの、初学者の心を折りそうなので外しています。)
ただ、生成AIの登場でコードを書くハードルが下がり、プログラミングに取り組み始めた「非エンジニア」にどこまでの知識を求めるのか……は、当人の目的次第でも大きく変わるため、線引きが難しいところだと考えています。
どこかで機会があれば、割愛した内容も含めて、この続きになるような「2周目に学ぶべきこと」をまとめたいなぁ……と思っていますが、果たして需要はあるのでしょうか。リクエストがあれば考えます。