フリーキーズ | 独学プログラミング

[2024年版]未経験から独学でWebエンジニアになりたい人が見るべきロードマップ

最終更新日
【画像】[2024年版]未経験から独学でWebエンジニアになりたい人が見るべきロードマップ

エンジニアになろうと志し、プログラミングやサーバーを独学で習得しようとして挫折した経験はあるでしょうか。10年以上、エンジニアとして生計を立てている自分は過去に何度もありました。
その度に自身の不甲斐なさを肌身にしみて、無力感に苛まれてきました。このコンテンツでは、そのような経験の中から抽出した「結局これをやるしかない」というロードマップを作成しました。

正しいロードマップと一貫した努力、そして継続的な学習によって、プログラミングに熟達するだけでなく、進化し続けるIT技術者として常に自分を鼓舞し続けることができます。
独学でエンジニアとして活動し続けている自分の経験が、少しでも辛くなっているエンジニアの卵に届けば幸いです。

2010年代初頭、どのようにエンジニアになったか

まず先に、このコンテンツの執筆者である編集長たなべ(@kt2763)について、簡単な「どのような経緯でエンジニアとして生計を立てられるようになったか」を紹介します。
エンジニア以外の部分の経歴は運営者紹介ページに記載があるので、ぜひそちらを参考にしてください。

編集長のエンジニアロードマップ

  1. 大学在学時、趣味で自主制作映画を作っている際に、自身の映像制作団体用WebサイトをWordPressで作ってみた
  2. 大学卒業と同時に、アルバイト先だったバーで常連のお客様に入社を勧められる
  3. 自社サービスのSEOやコンテンツ周りを担当したが、プログラミングに興味を持ち勉強する(この頃はPHPを勉強)
  4. 別会社に転職を勧められ、ゲーム開発会社にてエンジニアになる(メイン言語はC#)
  5. 戦力外通告により、Web系広告制作会社へ転職し、AR広告やWebサイト制作でそこそこ実力をつける(HTML/CSS、JS、C#など)
  6. 個人でPythonを学び始め、個人開発を昼夜問わずに行う
  7. 独立し、PHPやPythonをメインに仕事をしつつ、設計・開発・運用・インフラ等なんでも学べるものは学ぶ
  8. いただいた案件はWebのみならず、ゲームやIoT、現場作業まで一定の品質を担保できるものはなんでも請けて研鑽を続ける
  9. それらをずっと繰り返し、現在に至る

なぜ独学でやり続けたか

上記の道のりはすべて独学でした。
なぜ独学だったのか、それは誰も教えてくれる人がいなかったこともありますが、目の前の仕事をこなすことに精一杯で腰を据えて学ぶ機会がなかったからです。

現在では巷に多くのプログラミングスクールや学習サービスがあります。
そういったサービスは積極的に利用するべきです。ただ、自分のように身を立てるために「必死に学ぶ」と決意した人を応援したい気持ちで、当サイトを運営しています。

Webエンジニア未経験者のためのロードマップ

2024年1月現在、ChatGPTを始めとしたAI技術の台頭で、IT業界は激変しました。フリーキーズではAI技術をどんどん取り入れていく方針です。
そういった最新技術を使いながら、未経験者がどのように学ぶのがベストかを考案しました。

Webエンジニアと一言で言えど、最初はフロントエンドとバックエンドのいずれかで道を分かれるため、ここではその両方のロードマップを紹介します。どちらも一気に学ぶと混乱するので、まずは絞りましょう。

まずは以下の初期ロードマップをたどっていくことをおすすめします。

  1. フロントエンドとバックエンド、共通の前提知識とそれぞれの前提知識を学習
  2. フロントエンドとバックエンドのどちらを優先するか決定(後でコンバートしてもOK)
  3. 「この会社のプロダクトいいよね」と感じる会社と、その会社が出すエンジニア求人を探索
  4. 上記の会社で使われているプログラミング言語の中で1つを選択

この後は、決定した分野に従って学習を進めていきますが、共通する内容が含まれるので一覧にしておきます。

  • パソコンの使い方
    フォルダやファイル、アプリケーションのインストールなど
  • Webの仕組み
    HTTP/HTTPS、ブラウザ、ネットワーク、セキュリティなど
  • サーバの仕組み
    OS、コマンド、セキュリティなど
  • プロジェクトで利用するツール
    Asana、JIRA、Backlogなど
  • Gitの知識
  • クラウドとは何かを説明できる知識
  • AIと一言で片付けず、機械学習や深層学習といった専門家としてのIT知識
  • 働く業界のドメイン知識
  • 英語への苦手意識の克服
  • 一般的な社会人としてのコミュニケーション能力や文章作成能力

なお、よく「数学が必要なのではないか」と勘違いされていますが、基本的な算数レベル以上のことはそれほど使う機会が多くありません。
そういった「必要になったら習得する」系は以下の分野です。

  • 数学(データサイエンティストを目指す場合は別)
  • 物理
  • Microsoft製品(Word, Excelなど)

フロントエンドWebエンジニア向けロードマップ

Webエンジニアの中でも、フロントエンドエンジニアは、エンドユーザー(利用者)が使う画面を構築する専門職です。デザイナーとは別職種となるため、一般的にデザインセンスは求められませんが、「どうすれば使いやすくなるか」といった審美眼は必要になります。

まず知っておくべきフロントエンドエンジニアに必要なスキルセットは以下です。

  • マークアップ言語
    HTML/CSSといったマークアップ言語への理解
  • プログラミング言語
    2024年現在、TypeScript+フレームワーク(React.jsやVue.jsなど)が主力
  • デザインツール
    Figmaが主力。デザイン共有でよく利用されるため、使い方は理解しておくほうがいい

これらを詳細に図に表すと以下のようになります。

フロントエンドエンジニアロードマップ

フロントエンドエンジニアロードマップ

バックエンドWebエンジニア向けロードマップ

Webエンジニアにおけるバックエンドエンジニアとは、エンドユーザー(利用者)の目に見えないデータベースやビジネスロジックをシステム化する専門職です。ノーコードツールの台頭によって挿げ替えられると言われていた時代もありましたが、複雑な要件において、設計・運用の技術まで含めることを考慮すると一生モノの技術と言えます。

バックエンドエンジニアに必要なスキルセットは以下です。

  • プログラミング言語
    Python、Ruby、PHP、Golang、Scala、Javaなど
  • フレームワーク
    Django、Rails、Gin、Play Frameworkなど
  • インフラの知識
    Docker、Kubernetes、Nginx、GCPなど
  • ネットワークの知識
    DNS、HTTP/HTTPS、SSLなど
  • セキュリティの知識
    耐障害性、冗長性、攻撃者の思考とその対策など

これらを詳細に図に表すと以下のようになります。

バックエンドエンジニアロードマップ

バックエンドエンジニアロードマップ

Webエンジニア以外の分野を学ぶ

ここまで、Webエンジニアとしてのロードマップを書いてきましたが、Webエンジニア以外の分野を学ぶことで、スキルや経験の相乗効果が期待できます。
それぞれ詳細な説明は別途コンテンツにしますが、ざっくり何を学ぶかを紹介していきます。

エンジニアの職種別に一覧化しています。ここで紹介する職種は、編集長たなべが実際に「担当したことがある」または「プロジェクトにおいて協業したことがある」職種のみです。

データサイエンティスト

データサイエンティストは、目的に合致したデータの収集や分析を担当する専門職で、ビジネスの意思決定プロセスを支援する役割を担っています。数学、統計学、プログラミングの知識を駆使して、さまざまなソースからデータを収集し、アルゴリズムやモデルによってビジネスやサービスの方向性を導き出します。
また、予測モデルの構築パターンの発見、そしてインサイト抽出などを実施して「レポート」「ダッシュボード」「ビジュアライゼーション」などの形で提供します。

データサイエンティストに必要なスキルセットは以下です。

  • 数学と統計学
    微積分、線形代数、確率、統計的検定など
  • プログラミング言語
    PythonやRなど
  • よく利用されるライブラリ
    NumPy、Pandas、Matplotlibなど
  • データ操作
    データの抽出、クリーニング、再形成をするためにSQLや類似のデータベースの知識
  • 機械学習
    教師あり学習と教師なし学習、さらに強化学習や、決定木、ニューラルネットワーク、回帰、クラスタリングなど
  • データ可視化
    PythonのMatplotlibやSeaborn、Rのggplot2など
  • データプラットフォーム
    Hadoop、Spark、Hiveなどのビッグデータツール

セキュリティエンジニア

セキュリティエンジニアは、企業のシステムやネットワークの安全性確保に責任を持つ専門家です。情報セキュリティや、サイバー攻撃からのシステム保護にまつわる複雑な問題に対処します。
顧客情報など、企業の機密データを不正アクセスから守り、未然にインシデント(事故や事件)を防ぎます。

セキュリティエンジニアの仕事には、マルウェアやハッキングに対する防衛システムの構築、既存システムにおける脆弱性監査、セキュリティにおける脅威への緊急対応などが含まれます。

セキュリティエンジニアに必要なスキルセットは以下です。

  • 技術的な専門知識
    システムアーキテクチャ、ネットワーキング、クラウドサービス、データベースシステムなど
  • セキュリティツール
    侵入検知システム、アンチウイルスソフト、ファイアウォール、SIEMツールなど
  • プログラミング言語
    Python、Java、Bashなど
  • サイバー脅威と防御
    データ暗号化手法、マルウェア、フィッシング、ソーシャルエンジニアリング攻撃など
  • コンプライアンスと法規制
    データ保護やサイバーセキュリティに関する関連法規
  • 倫理
    機密データを任されるため強い倫理観と誠実さが必要

インフラエンジニア

インフラエンジニアは、サーバーやストレージ、そしてネットワークやアプリケーションなど、ハードウェアとソフトウェア両方の安定性を管理する守護者です。
システム設計とサーバー構築、既存システムの保守とアップグレード、問題のトラブルシューティングなど、仕事は多岐に渡ります。

インフラエンジニアに必要なスキルセットは以下です。

  • プログラミング言語
    PythonやShellスクリプトのようなシステム管理言語
  • OSに関する知識
    LinuxやWindowsサーバー
  • ネットワーク
    ネットワークアーキテクチャ、プロトコル、セキュリティ、ファイアウォール、VPN、ルーター、ロードバランサーなど
  • クラウドサーバー
    Amazon Web Services、Google Cloud Platform、Microsoft Azureなど
  • 仮想化
    VMwareやHyper-Vなど
  • データベース
    SQLとデータベース管理の知識
  • セキュリティ
    暗号化、証明書、安全なネットワーク設計など

ゲーム開発者

ゲーム開発者は、ソフトウェアの知識を応用してゲームを制作する専門家です。コンシューマー向けゲームやスマートフォン向けゲームアプリの制作は、プログラミングや数学だけでなく、創造性(アートセンスやストーリーテリングなど)を組み合わせた複雑なプロセスが必要です。
ゲーム開発者としての仕事は、NPCを動かす人工知能の設計から、ゲーム内オブジェクトの相互作用を制御する物理システムの開発まであらゆることに携わります。プログラミングだけでなく、2D/3Dアーティストやデザイナー、サウンドエンジニアなどと密接に協力し、ゲームのコンセプトを実現します。

ゲームエンジニアに必要なスキルセットは以下です。

  • プログラミング言語
    C++、Python、JavaScript、C#など
  • ゲームエンジン
    Unity、Unreal Engine、Godotなど
  • 数学
    幾何学、三角法、代数学などの数学の基礎
  • コンピュータグラフィックス
    OpenGLやDirectXなどのレンダリング技術やAPI
  • ゲームへの情熱
    ゲームのジャンル、メカニズムに関する知識

IoTエンジニア

IoT(モノのインターネット)エンジニアは、IoT技術を駆使して接続されたデバイスからデータを収集・集約・分析するシステムを構築する専門家です。スマート家電のような家庭用品から産業機械まで、センサーによって抽出されたデータを、インターネットを介してより便利な形で提供します。
IoTエンジニアの分野は、「ヘルスケア」「農業」「輸送」などの業界にまたがる大きな可能性を秘めています。

IoTエンジニアに必要なスキルセットは以下です。

  • プログラミング言語
    Python、Java、C/C++、JavaScriptなど
  • ネットワーク
    TCP/IP、UDP、MQTTなど
  • ハードウェアインターフェース
    マイクロコントローラー、組み込みシステムの知識など
  • データ管理
    SQL/NoSQLデータベースなどのデータ管理技術、データ分析、HadoopやSparkなどのビッグデータプラットフォームの知識など
  • クラウドコンピューティング
    AWS、Google Cloud、Microsoft Azureなど
  • セキュリティ
    暗号化方式、安全なデバイス管理、データプライバシー基準に関する知識

RPAエンジニア

RPA(ロボティック・プロセス・オートメーション)エンジニアは、ツールを使ってビジネスプロセスの自動化を実現する専門家です。通常は人間が行う反復的な定型作業を自動化する役割を担っています。
RPAの目的は、業務の合理化やコスト削減、そして効率化を図ることです。そのため、RPAエンジニアの仕事は、既存のビジネスプロセスを調査し、自動化がもたらすメリットを特定した上でワークフローの設計と開発を実施します。

銀行やヘルスケア、物流などさまざまな業界で応用されており、IT業界の中でも急速に成長している分野です。特に手作業が多く、人的ミスが発生しやすい業務に有効です。

RPAエンジニアに必要なスキルセットは以下です。

  • プログラミング言語
    VBA、Python、.NETなど
  • RPAツール
    UiPath、Blue Prism、Automation Anywhereなど
  • ビジネスプロセスへの理解
  • 分析力
  • システムインテグレーション

独学を進める上での注意点

学習におけるロードマップを淡々と構築してみましたが、登場する要素がかなり多いことは書いた通りです。
「ここに書いてあることをすべてやらないといけないのか」と絶望してしまう可能性すらありますが、それは違います。

とにかく挫折せず継続することが何よりも大切です。
なので、ここでロードマップを見た上で学習し続けるための注意点を紹介します。

ゴールを小さくし、明確にする

「年収◯◯万円」や「GAFAMへ転職」はゴールにしてはいけません。
必ず、目の前の小さなゴールを設定してください。また、曖昧でもいけません。

具体的には、「IaaS上でJavaを使った自作ECサイトを作る」や「PythonでサーバーレスなChatGPT連携のチャットボットを作る」など、慣れてくれば数日で達成できる範囲のゴールにしてください。この小さなゴールの積み重ねこそが、最終的にロードマップを達成する肝になります。

技術選定・職種選定の仕方

フリーキーズでは、基本的に「流行よりも愛」を基準にした技術選定・職種選定を推奨しています。

Webサービスが持つ無限の広がりに胸がときめくのであればWebエンジニアを選ぶべきですし、ゲームが好きでたまらない人はゲーム開発者を選ぶべきです。ロボットを作りたければ電気工学を主力にしたエンジニアかコンピュータサイエンスを主軸にしたエンジニアで分岐もします。
技術にしても、より高度な論理実装を必要とするRustが合うケースもあれば、より素早くプロトタイプ実装を可能とするPythonが合うケースもあります。

とにかくまずは「何を愛していけるか」を自分の中で落とし込んでください。

高収入になれないタイプのエンジニア志望者

「作りたいものがないけど収入が高そうだから〜」という考え方の人はおそらくエンジニアとして高収入を狙うことはできません。うまくいってもそこそこの年収のエンジニアです。
最初に選んだ方向性がすべてではなく、途中で興味の対象が変わることもあります。それでも必ず最初の入口は自身が強く興味を持てる対象を選んでください。

加えて、「勉強嫌い」と「効率中毒者」もエンジニアとして上を狙えません。
ChatGPTのような生成AIやGithub Copilotのような補助AIを活用することは良いことです。しかし、だからといって「なぜそのコードを書くのか」「なぜその仕組みなのか」を理解しようとする知的好奇心のない人は単なる作業者的エンジニアに落ち着きます。

脳に汗を流し、キーボードを叩いて指を痛め、眠い目をこすって本を読み、新しい技術にワクワクしながら学び続けられる人が結果として高収入になります。

さらなる高みを目指すとき

IT業界は急速なスピードで進化しており、自分のスキルが適切なものであることを保証するためには、常に最新の情報を得ることが重要です。
QiitaやZenn、Stack OverflowやGitHubなど、プログラミング言語や技術の公式サイトなどで情報をキャッチアップする週間をつけましょう。

さらに、エンジニアという全体像の中で、自身の技術スタックがどのように位置づけられているのかを理解するようにしましょう。
たとえば、Javaは求人件数や案件数が最も多いにも関わらず、レガシーなプログラミング言語として流行は下落しています。こういった社会的現象に惑わされるより、「自分が市場価値のある技術を保有している」と正しく認識することが励みにつながります。

AI製品と上手に付き合おう

先述しましたが、フリーキーズではAIの利用について推奨派であると明言します。
理由としては以下です。

我々エンジニアは、AIを脅威としてではなくスキルを補完するために設計された強力なツールとして捉える必要があります。
AIを搭載したツールは定型作業を自動化し、生産性を向上させるサポートになります。例えば、GitHub Copilotを使えば頭を使わず書けるような定型文を書く時間を節約したり、知らなかった書き方を学ぶ機会になることもあります。

我々エンジニアとAIの関係は、AIが人間の能力を補強し、エンジニアがAIの倫理・学習度合いを改善するという相互利益の関係であるべきです。

とにかく経験を積み続ける

諺にもあるように「継続は力なり」です。
技術的な知識とプログラミングスキルを強化する最高の方法は実践的なアプリケーション開発です。実際に運用されている企業のサービスに参加したり、自身で公開やスケールを目的としたサービスを運用・改善する経験は必ず役に立ちます。
チュートリアルやデモだけでなく、一般利用者に使ってもらうサービスになると、程よい緊張感がスキルアップを加速してくれます。

また、LeetCode、AtCoderなどの競技プログラミングプラットフォームでは、プログラミングを使用して解決できる数理的問題が数多く提供されています。こういったプラットフォームに参加することで、アルゴリズム力や基礎的な考察力が向上します。

継続して、こういった新しい方法にトライし続けることこそ、確かにエンジニアの土台となりえます。

個人開発でサービスを作り公開する

上記に書いた通り、個人開発は学んだことを実践する場として最適であり、自身の学ぶ意欲を高めスキルをアピールする場となります。あったらいいなと妄想するツールや、作ってみたいゲームなど、ワクワクするようなことを考えましょう。
そのアイデアを小さなパーツに分解して、一歩ずつ作り始めてみましょう。

個人開発は複雑である必要がありません。
ToDoリストや個人ブログのようなシンプルなプロジェクトでも学習する良い機会になります。目標は、学び、成長することです。

何かを作ったらそれを共有することを忘れないでください。GitHubや個人のWebサイト、あるいはSNSで他の人からフィードバックをもらえる機会があると良い刺激になります。

オープンソースに貢献する

オープンソースプロジェクトへの貢献は、エンジニアとしての人生に大きな変化をもたらす可能性があります。
他のエンジニアとのコラボ、既存のコードの理解と改善といった、職業エンジニアに必須のスキルセットが身につくだけでなく、単純に世界が広がります。

Up For GrabsGood First IssueのようなWebサイトは、初心者に優しいオープンソースプロジェクトを見つけるのに役立ちます。
また、オープンソースへの貢献は、コーディング以外にもドキュメント整備、テスト、バグ報告などを通じても可能です。こうした活動を通して、コミュニティにおけるネットワークと評判を高められるとセルフブランディングにつながります。

フリーランスとインターンシップ

ある程度のキャリアを積んだ多くのエンジニアがフリーランスへの道を考え始めます。
実際にフリーランスエンジニアとしてキャリアを積み上げ続けることができるかはさておき、現代ではフリーランスになること自体のハードルが低くなりました。

しかし、フリーキーズでは最低でも一年以上の企業内(インハウス)エンジニアをおすすめしています。
IT業界のプロとしての立ち居振る舞いを、先輩や同僚を見ながら身につけるほうがフリーランスエンジニアとしての価値も上がるからです。

ただし、覚えておいてほしいのは、誰もがフリーランスに向いているわけではないということです。企業内エンジニアにはより大きなプロダクトに関わる機会やサービスの意思決定に関われる機会が多かったり、継続的に仲間とチームビルディングしていけるという大きな強みがあります。
これはフリーランスエンジニアを長く続けた人間にとっても大きな魅力として映ります。

また、インターンシップもプロとしての経験を積むのに最適な方法です。
数は多くありませんが、いくつかの企業は未経験者向けにインターンシップを集めており、経験豊富な現役エンジニアの指導の下、実際のプロジェクトに参加できます。インターンシップが正社員の内定につながることも少なくありません。

挫折しないために

プログラミングや周辺技術は、初心者のうちはとても難しく感じます。
エラーやバグ、何もうまくいかないような状況に遭遇することもあるでしょう。しかしそれは全く問題ありません。エラーは学習プロセスの一部です。むしろエラーは自分にとって最高の教師です。すべての間違いは新しいことを学ぶチャンスなのです。

バグに遭遇してもイライラする必要はありません。その代わりに、なぜそれが起こったのかを理解するようにしましょう。
デバッグツールを使ったり、エラーメッセージを読んだり、ネットで検索したり、インターネット上で助けを求めたりしましょう。こうした課題を1つずつ克服することで、プログラミングスキルが向上するだけでなく、優れた問題解決能力も身につけることができます。

どんなスキルも一貫性や継続性が重要ですが、プログラミングも例外ではありません。
一朝一夕で熟練したエンジニアになれるわけではありません。時間、学習、忍耐が必要です。毎日、たとえ数分でもいいからプログラミングすることを習慣にしましょう。この一歩ずつの前進が、徐々にスキルと自信を高めていきます。

関連するコンテンツ