エンジニアになるためには、幅広い知識とスキルが必要です。ある特定の技術を習得するだけでも多くの時間がかかります。
しかし、学習できる時間は限られています。そのため、必要なスキルを選別して学習していくことが重要です。また、いきなり難しい技術に挑戦すると挫折してしまうので学習する順番も大切です。
この記事では、「エンジニアになりたい」「プログラミングを習得したい」と思っている方を対象に必要なスキルを紹介していきます。
プログラミング言語
フロントエンド
フロントエンドは、書いたコードをブラウザで確認できるので、はじめに学習するのに適しています。
- HTML/CSS
まず、HTML/CSSから学習することをおすすめします。HTMLはWebページの構造を決める言語で、CSSは文字の大きさや色など装飾を行う言語です。プログラミング的な要素が少なく、初心者でも簡単に始めることができます。以下の書籍と動画で学習することで基礎的な力が身に付きます。
「参考書」
いちばんよくわかるHTML5&CSS3デザインきちんと入門
「参考動画」
はじめてのWeb制作
- JavaScript
HTML/CSSの次は、JavaScriptを学習しましょう。JavaScriptは利用者が最も多いプログラミング言語で、Webアプリケーションを開発するのに欠かせない言語となっています。本格的に学習すると奥が深いので、まずは基礎力を身に付けて徐々に応用的な技術にチャレンジしましょう。
「参考書」
確かな力が身につくJavaScript「超」入門
開眼! JavaScript
- TypeScript
TypeScriptはJavaScriptを拡張した言語で、静的な型付けのできる言語です。Web系の言語は実行時に型を検証する動的型付け言語が多いのですが、システムの保守性や堅牢性が高まることから静的型付けの需要が増加しています。型は最初理解しにくいため、プログラミングに慣れてきた頃に学習すると良いでしょう。
「参考書」
実践TypeScript
フロントエンドフレームワーク
フレームワークとは、ある機能を実現するコードを部品として用意しているプログラムの総称です。利用者は部品を利用することで簡単に機能を実装することができます。
JavaScriptフレームワーク
JavaScriptのフレームワークの代表的なものは以下の2つがあります。
-
React
-
Vue
主にSPA(シングルページアプリケーション)を開発する際に使用されます。SPAとはGmailやFacebookのようにページをリロードすることなく、様々な機能を利用できるアプリケーションのことを指します。
ReactとVueは多くのプロジェクトで使用されているため、どちらか一つは習得しておきましょう。Vueは小規模のアプリケーションでも使うことができ、Reactより学習コストが低いため、初めての方はVueをおすすめします。また、LaravelのフロントエンドにはVueが使われることが多いため、Laravelを使いたい人に適しています。
「参考書」
基礎から学ぶ Vue.js
Vue.js入門
React実践の教科書
UIフレームワーク
UIフレームワークはUI(画面)を開発する際に必要な部品を提供してくれるものです。大きく分けてCSSフレームワークとJavaScriptフレームワーク専用のものがあります。
CSSのフレームワークの代表的なものには以下があります。
-
BootStrap
-
Bulma
-
Tailwind
BootstrapとBulmaはボタンやフォームなどが部品として用意されており、初心者でも簡単にデザインを作成することができます。Tailwindは色やサイズといったユーティリティが用意されており、それらを組み合わせてデザインを構成していくフレームワークです。
CSSのフレームワークはそれほど難しいものではないため、公式のマニュアルを参考にすれば習得が可能です。
JavaScriptフレームワークであるVueとReactには、それぞれ専用のUIフレームワークがあります。
-
Vuetify(Vue)
-
MATERIAL-UI(React)
これらを使用せずともUIを作成することは可能ですが、SPAを開発する場合はいずれかのUIフレームワークを使用する可能性が高いです。
サーバーサイド
フロントエンドの言語の学習がある程度進んだら、サーバーサイドの言語を学習しましょう。サーバーサイドではフロントエンドからのリクエストに対してAPIでレスポンスしたり、データベースの操作をしたりといった処理を記述します。
サーバーサイドで使用される主な言語には以下のものがあります。
-
PHP 案件数の多い言語です。
-
Ruby Web系企業で採用されることの多い言語です。
-
Java 企業向けのシステムで採用されることの多い言語です。
-
Python AI開発などに使用される言語です。
2020年時点で求人件数が最も多いのはJavaですが、初学者にはやや難易度が高めです。まずは、PHPまたはRubyから学習することをおすすめします。
一つのプログラミング言語を専門にすることも可能ですが、複数の言語を扱えると案件に携われる可能性が高まりますし、プログラミングの理解を深めることもできます。
「参考書」
・PHP パーフェクトPHP
・Ruby プロを目指す人のためのRuby入門
・Java Java本格入門
・Python 入門 Python 3
*ここに挙げた書籍だけでマスターすることは難しいので、他にも数冊利用して学習する必要があるでしょう。構文を学んだ後、アプリケーションの実例を示した書籍で学習することがおすすめです。ただ、そうした書籍は少ないため筆者はUdemyなども利用しています。
サーバーサイドフレームワーク
各サーバーサイドの言語には、それぞれ以下の代表的なフレームワークがあります。いずれかのフレーワークでアプリケーションを作成できるレベルまで学習しましょう。
-
PHP:Laravel
-
Ruby:Ruby on Rails
-
Jave:Spring
-
Python:Django
「参考書」
・Laravel Laravel Webアプリケーション開発
・Ruby on Rails パーフェクト Ruby on Rails
・Spring Spring徹底入門
・Django Python Django3超入門
テスト
テストは書いたコードの品質を保つために必要です。各言語にはテストツールが用意されているため、言語を勉強する時に合わせて学習しましょう。テストツールを専門に解説した書籍は少ないため、公式のマニュアルやネットの記事を参考にして学習すると良いでしょう。
-
Jest JavaScript用のテスト(単体テスト)
-
Cypress E2Eテスト(UIテスト)
また、プログラムより先にテストコードを書き、そのテストに通るようにコードを作成していくテスト駆動開発についても学習しておきましょう。
データベース
データベースはアプリケーションのデータを保存するソフトウェアです。アプリケーションを開発するにはデータベースの利用が必須であるため、言語と一緒に学習することになります。
リレーショナル・データベース
リレーショナル・データベース(RDB)は、行と列によって構成されたテーブルと呼ばれるデータの集合を関連付けてデータを管理するデータベースです。主流のデータベースであるため、まずはRDBを学びましょう。代表的なものに以下のものがあります。
-
MySQL オープンソースで一番人気のデータベースです。
-
PostgreSQL こちらもオープンソースのデータベースです。
-
Oracle 商用データベースで企業向けシステムに採用されることが多いです。
MySQLはネットの情報や参考書も揃っており、学習しやすいデータベースであるためおすすめです。
「参考書」
MySQL徹底入門
達人に学ぶDB設計 徹底指南書
達人に学ぶSQL徹底指南書
NoSQL
リレーショナル・データベース以外のデータベースとして、NoSQLというものがあります。NoSQLにはキーバリュー型のDBやドキュメント型のDBなどが含まれます。これらのデータベースは様々なデータ形式に対応するために生まれてきたもので、利用されるケースも増えてきています。
代表的なプロダクトには以下のものがあります。
-
Redis キーバリュー型のNoSQL
-
MongoDB ドキュメント型のNoSQL
-
DynamoDB AWSのNoSQLデータベース
「参考書」
RDB技術者のためのNoSQLガイド
サーバーソフトウェア
サーバーソフトウェアは、コンピューターをサーバーとして機能させるためのソフトです。Webアプリケーションを開発するには、サーバーソフトも使用するのでこちらも並行して学習する必要があります。代表的なものに以下があります。
-
Nginx
-
Apache
これまでApacheが多く使用されてきましたが、近年、Nginxのシェアが伸びているため、今から始めるのであればNginxをおすすめします。
「参考書」
nginx実践ガイド
できるPRO Apache Webサーバー
OS
どのようなアプリケーションもOSの上で動作しています。そのため、OSについて知っておくことは重要です。特に、サーバー用途で使用されることの多いLinuxに関するスキルが必要になります。Linuxにはパッケージをまとめたディストリビューションというものがあり、Ubuntuが使用されることが多いです。
「参考書」
ゼロからはじめるLinuxサーバー構築・運用ガイド
本気で学ぶ Linux実践入門
Ubuntuスタートアップバイブル
Linuxには「LPIC」と「Linuc」という試験があります。Linuxの勉強になりますし、取得することで自身のスキルの証明にもなるのでチャレンジしてみると良いでしょう。言語や他のソフトを学習していく過程で徐々に学んでいきましょう。
仮想化ソフトウェア
開発用途でサーバーを構築するには、通常仮想化ソフトウェアを使います。WindowsやMacの上に仮想化ソフトウェアをインストールして、仮想マシンとしてLinuxを動かします。そのため、仮想化ソフトについても知っておく必要があります。仮想化ソフトには以下のようなものがあります。
-
VirtualBox
-
Vagrant
-
Docker
-
Kubernetes
VirtualBoxをPCにインストールすることで、Linuxを使えるようになります。VagrantはVirtualBoxをコマンドでコントロールでき、OSのプロビジョニングができるツールです。これらは扱うだけならそれほど難しくないため、ネット上の情報で学習すると良いでしょう。
Dockerは、コンテナ型仮想化という種類のソフトウェアで、軽量で扱いやすいという特徴があります。Dockerは開発現場のみならず本番でも広く使用されています。また、コンテナ化したアプリケーションのデプロイ、スケーリング、管理を行うためのKubernetesについても身に付けておきたいところです。
「参考書」
プログラマのためのDocker教科書
Docker実践ガイド
Kubernetes完全ガイド
バージョン管理
バージョン管理とは、ソースコードの履歴を管理することです。コードの変更内容の記録を残すことで、エラーが発生した際に原因を突き止めることが容易になったり、任意の時点まで巻き戻したりすることができます。チーム開発では必須のスキルになります。主に以下のツールが利用されます。
-
Git バージョン管理ツールです。
-
GitHub ソースコードをホスティングするサイトです。
「参考書」
独習Git
GitHub実践入門
*言語の学習がある程度進んだ後、使いながら学習する方法がおすすめです。
セキュリティ
プログラミングの書籍には、セキュリティについて解説しているものもありますが、別途以下の書籍を参考にしてセキュリティに関する理解を深めることをおすすめします。
「参考書」
安全なWebアプリケーションの作り方
クラウド
クラウドはアプリケーションのインフラ基盤を提供します。従来はオンプレミスでの運用が主流でしたが、現在はクラウドでアプリケーションを運用するケースが増えており、今後も増加すると予想されています。代表的なクラウドには以下があります。
-
AWS(Amazon Web Servicves)
-
GCP(Google Cloud Platform)
-
Azure(Microsoft)
現在、市場シェアが最も高いのはAWSなので、まずはAWSについて学習しましょう。クラウドについて学習することで、アプリケーションだけでなく、サーバー、ネットワークなどのインフラについて理解を深めることができます。
「参考書」
Amazon Web Services 基礎からのネットワーク&サーバー構築
AWSではじめるインフラ構築入門
AWSには「クラウドプラクティショナー」という試験がありますが、試験の学習をすることでAWSについての理解を深めることができるのでおすすめです。
「参考書」
AWS認定資格試験テキスト
AWS認定クラウドプラクティショナー 模擬問題集
CI/CDツール
継続的インテグレーション(CI)とは、ソースコードの変更を行った後、ビルドとテストを実施して、アプリケーションの品質を向上させる手法のことです。継続的デリバリー(CD)は、コードの変更後にビルドとテストを自動で実施し、運用環境へデプロイする手法のことを指します。
CI/CDは多くの開発現場で採用されている手法なので、言語やOS、バージョン管理などを学習してアプリケーション開発の全体像を掴んだ後に学習すると良いでしょう。
代表的なツールには以下のものがあります。
-
CircleCI Dockerを使用する現場で適したツールです。
-
Jenkins オンプレミスでの開発に適したツールです。
-
GitHub Actions GitHubが開発している新しいツールで、今後主流になっていくと思われます。
「参考書」
CircleCI実践入門
Jenkins実践入門
GitHub Actions 実践入門
構成管理ツール
上記の技術について学習した後、可能であれば構成管理ツールについても学習することをおすすめします。構成管理ツールとは、インフラやOSを運用できる状態にプロビジョニングするツールのことです。代表的なものに以下があります。
-
Ansible
-
Chef
-
Terraform
AnsibleとChefは、コードでOSの設定を行ったり必要なツールをインストールしたりすることのできるツールです。Terraformは、クラウドのインフラをコードで管理することのできるツールです。OSやインフラをコードで管理できるため、開発や運用の工数を削減することができます。
「参考書」
Ansible実践ガイド
実践Terraform AWSにおけるシステム設計とベストプラクティス
コードに関する書籍
以下は良いコードを書く際に参考になる書籍です。「リーダブルコード」は読みやすく簡潔なため最初の書籍としておすすめです。「CODE COMPLETE」は本格的な書籍でページ数も多いですが、より深く学びたい時に最適です。
リファクタリングとは、ソフトウェアの振る舞いを保ったまま、内部のソースコードを改善していく作業のことです。プログラミングにおいて欠かせないスキルのため、マーティン・ファウラーの名著である「リファクタリング」は読んでおきましょう。
「参考書」
リーダブルコード
CODE COMPLETE(上)
CODE COMPLETE(下)
リファクタリング
Webの技術に関する書籍
Webアプリケーションを開発するには、Webに関する技術についての知識が必要です。HTTP、URI、REST等の基本的な仕組みについて理解を深めておきましょう。モダンなWebシステムにはAPIも欠かせないため、APIについても学習する必要があります。また、検索結果を重視するサービスでは、SEOについての知識も必要となります。
「参考書」
プロになるためのWeb技術入門
Webを支える技術
Web API
現場のプロから学ぶ SEO技術バイブル
設計に関する書籍
優れたシステムには優れた設計が必要です。設計はシステム開発の上流工程に当たりますが、プログラマーであっても種々の設計手法について知っていることは重要です。
デザインパターンは、様々なプログラムで再利用できる汎用的な設計パターンのことです。通称GoF本と呼ばれる原著には、オブジェクト指向プログラミングにおいて広く使用されているパターンが網羅されています。原著は難しいため、わかりやすく書かれた「デザインパターン入門」がおすすめです。
ユースケース駆動設計は、ユースケースからオブジェクト指向ソフトウェアを開発するための設計手法です。下記の「ユースケース駆動開発実践ガイド」では、ユースケースの定義から始まり、シーケンス図やクラス図といったUMLに落とし込んでいく手順が詳細に解説されている良書です。
クリーンアーキテクチャは、フレームワークやデータベース等からビジネスルールを分離するという「関心事の分離」に主眼が置かれた設計手法です。下記の書籍では、SOLIDと呼ばれる設計に関する原則についても学ぶことができます。
ドメイン駆動設計は、システムの利用者であるユーザの活動領域をドメインとして定義し、ドメインを元にシステムを設計する手法です。エリック・エヴァンズによる原著は難しいため、はじめは下記の「ドメイン駆動設計入門」がおすすめです。
マイクロサービスは、アプリケーションを複数の小さいサービスに分割してそれらを組み合わせて構築するアーキテクチャです。システムに対する柔軟で継続的な変更を可能にします。
これらのすべてに熟知する必要はありませんが、知っておくと必ず役に立つでしょう。
「参考書」
デザインパターン入門
ユースケース駆動開発実践ガイド
Clean Architecture
ドメイン駆動設計入門
マイクロサービスアーキテクチャ
運用、保守に関する書籍
システムは開発したら終わりではなく、継続的に保守しながら運用していく必要があります。運用に欠かせないスキルとして監視があります。システムが正常に稼働しているか定期的に確認することで障害を検知して通知を行うことを監視と言います。下記の書籍は入門としておすすめです。
「参考書」
入門 監視
システムの運用にソフトウェアエンジニアリングを適用し、信頼性の高いシステムを構築するプラクティスのことをサイトリライアビリティ・エンジニアリング(SRE)と呼びます。Googleが大規模システムを運用する際に実践しているプラクティスであり、通常のアプリケーションに適用することは難しいかもしれませんが、考え方は参考になるため読んでみることをおすすめします。
「参考書」
SRE サイトリライアビリティエンジニアリング
その他の書籍
その他の書籍としてはデザインに関するものがあります。「ノンデザイナーズ・デザインブック」はデザイナー以外の方を対象とした書籍で、近接、整列、反復、コントラストという4つの基本原則を学ぶことができます。
「参考書」
ノンデザイナーズ・デザインブック
どのようなサービスにも規約は必要です。以下の書籍は「利用規約」「プライバシーポリシー」「特定商取引法に基づく表示」について丁寧に解説しています。
「参考書」
良いウェブサービスを支える 「利用規約」の作り方
アプリケーションの開発
最後に、これまでに学習した技術を総動員して自身でアプリケーションを開発しましょう。技術を習得するのに一番効果的なのは、実際に開発することだからです。AWSで運用しても良いでしょうし、GitHub上に公開してポートフォリオとして利用することもできます。
以下に、これまで紹介した技術を利用したアプリケーションの構成を示します。
- フロントエンド言語 HTML/CSS JavaScript
- CSSフレームワーク Tailwind
- JavaScriptフレームワーク React または Vue
- サーバーサイド言語 PHP, Ruby, Java, Python *いずれか一つ
- サーバーサイドフレームワーク Laravel, Ruby on Rails, Spring, Django *いずれか一つ
- データベース MySQL
- サーバーソフト Nginx
- OS Ubuntu
- 仮想化 Docker
- バージョン管理 Git GitHub
- クラウド AWS
- CI/CD CircleCI
- 構成管理 Ansible Terraform
英語について
多くのソフトウェアは欧米で開発されています。ドキュメントは英語で書かれ、主要なソフトウェアのみ日本語に翻訳されています。Google翻訳を使えば意味をくみ取ることはできますが、ある程度の英語力は身に付けておいた方が良いでしょう。必要なスキルはリーディングが主で、通常ライティング、リスニング、スピーキングは要求されませんが、その他のスキルを磨くと相乗効果が働きます。
単語の記憶にはAnkiというオープンソースのアプリがおすすめです。リーディングの訓練には、レベル別に単語数が限定されているラダーシリーズから始めるのがおすすめです。英語を本格的に学習したい場合は「英語上達完全マップ」が参考になるでしょう。
Anki
ラダーシリーズ
英語上達完全マップを10ヶ月やってみた
まとめ
以上、エンジニアになるために必要なスキルについて解説してきました。エンジニアには多くのスキルが必要ですが、学習する時間は限られているため、どのスキルを学ぶべきか選別することが重要です。
市場シェアの高い技術は利用する企業が多いということであり、それだけ需要も高いので、市場シェアの高い技術を選別して学習するのが賢明です。
そのためには、書籍、サイト、YouTube、ポッドキャストなどを駆使して、テクノロジーに関する情報を常に収集して業界や市場に関する洞察を育むことが大切です。