エンジニアになるために必要なスキル　おすすめの書籍も紹介

エンジニアになるためには、幅広い知識とスキルが必要です。ある特定の技術を習得するだけでも多くの時間がかかります。

しかし、学習できる時間は限られています。そのため、<font color="Red">**必要なスキルを選別して学習していくことが重要**</font>です。また、いきなり難しい技術に挑戦すると挫折してしまうので<font color="Red">**学習する順番も大切**</font>です。

この記事では、「**エンジニアになりたい**」「**プログラミングを習得したい**」と思っている方を対象に必要なスキルを紹介していきます。

# プログラミング言語
## フロントエンド
フロントエンドは、書いたコードをブラウザで確認できるので、はじめに学習するのに適しています。

- **HTML/CSS**

まず、HTML/CSSから学習することをおすすめします。HTMLはWebページの構造を決める言語で、CSSは文字の大きさや色など装飾を行う言語です。プログラミング的な要素が少なく、初心者でも簡単に始めることができます。以下の書籍と動画で学習することで基礎的な力が身に付きます。

「参考書」
[いちばんよくわかるHTML5&CSS3デザインきちんと入門](https://www.amazon.co.jp/%E3%81%84%E3%81%A1%E3%81%B0%E3%82%93%E3%82%88%E3%81%8F%E3%82%8F%E3%81%8B%E3%82%8BHTML5-CSS3%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%81%8D%E3%81%A1%E3%82%93%E3%81%A8%E5%85%A5%E9%96%80-Design-IDEA-%E7%8B%A9%E9%87%8E/dp/4797388544/ref=sr_1_24?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=HTMLCSS&qid=1580648435&sr=8-24)

「参考動画」　
[はじめてのWeb制作](https://dotinstall.com/lessons/basic_website)　

- **JavaScript**

HTML/CSSの次は、JavaScriptを学習しましょう。JavaScriptは利用者が最も多いプログラミング言語で、Webアプリケーションを開発するのに欠かせない言語となっています。本格的に学習すると奥が深いので、まずは基礎力を身に付けて徐々に応用的な技術にチャレンジしましょう。

「参考書」
[確かな力が身につくJavaScript「超」入門](https://www.amazon.co.jp/%E7%A2%BA%E3%81%8B%E3%81%AA%E5%8A%9B%E3%81%8C%E8%BA%AB%E3%81%AB%E3%81%A4%E3%81%8FJavaScript%E3%80%8C%E8%B6%85%E3%80%8D%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E7%8B%A9%E9%87%8E-%E7%A5%90%E6%9D%B1/dp/4815601577/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=javascript&qid=1580650163&sr=8-1)
[開眼! JavaScript](https://www.amazon.co.jp/%E9%96%8B%E7%9C%BC-JavaScript-%E2%80%95%E8%A8%80%E8%AA%9E%E4%BB%95%E6%A7%98%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6JavaScript%E3%81%AE%E6%9C%AC%E8%B3%AA-Cody-Lindley/dp/487311621X/ref=sr_1_5?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=javascript&qid=1580868880&sr=8-5)　

- **TypeScript**

TypeScriptはJavaScriptを拡張した言語で、静的な型付けのできる言語です。Web系の言語は実行時に型を検証する動的型付け言語が多いのですが、システムの保守性や堅牢性が高まることから静的型付けの需要が増加しています。型は最初理解しにくいため、プログラミングに慣れてきた頃に学習すると良いでしょう。

「参考書」
[実践TypeScript](https://www.amazon.co.jp/%E5%AE%9F%E8%B7%B5TypeScript-BFF%E3%81%A8Next-js-Nuxt-js%E3%81%AE%E5%9E%8B%E5%AE%9A%E7%BE%A9-%E5%90%89%E4%BA%95-%E5%81%A5%E6%96%87/dp/483996937X/ref=sr_1_8?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=TypeScript&qid=1644632408&sr=8-8)

## フロントエンドフレームワーク

フレームワークとは、ある機能を実現するコードを部品として用意しているプログラムの総称です。利用者は部品を利用することで簡単に機能を実装することができます。

### JavaScriptフレームワーク

JavaScriptのフレームワークの代表的なものは以下の2つがあります。

- **React**

- **Vue**

主にSPA（シングルページアプリケーション）を開発する際に使用されます。SPAとはGmailやFacebookのようにページをリロードすることなく、様々な機能を利用できるアプリケーションのことを指します。

ReactとVueは多くのプロジェクトで使用されているため、どちらか一つは習得しておきましょう。Vueは小規模のアプリケーションでも使うことができ、Reactより学習コストが低いため、初めての方はVueをおすすめします。また、LaravelのフロントエンドにはVueが使われることが多いため、Laravelを使いたい人に適しています。

「参考書」
[基礎から学ぶ Vue.js](https://www.amazon.co.jp/%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6-Vue-js-mio/dp/4863542453/ref=sr_1_3?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=vue&qid=1580650647&sr=8-3)
[Vue.js入門](https://www.amazon.co.jp/Vue-js%E5%85%A5%E9%96%80-%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E5%AE%9F%E8%B7%B5%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%8B%E7%99%BA%E3%81%BE%E3%81%A7-%E5%B7%9D%E5%8F%A3-%E5%92%8C%E4%B9%9F/dp/4297100916/ref=sr_1_4?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=vue&qid=1580650647&sr=8-4)　
[React実践の教科書](https://www.amazon.co.jp/%E3%83%A2%E3%83%80%E3%83%B3JavaScript%E3%81%AE%E5%9F%BA%E6%9C%AC%E3%81%8B%E3%82%89%E5%A7%8B%E3%82%81%E3%82%8B-React%E5%AE%9F%E8%B7%B5%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8-%E6%9C%80%E6%96%B0ReactHooks%E5%AF%BE%E5%BF%9C-Informatics-IDEA/dp/481561072X/ref=sr_1_6?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=2LJSJ3SLI02XF&keywords=react&qid=1644632739&sprefix=react%2Caps%2C222&sr=8-6)

### 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](https://www.amazon.co.jp/%E3%83%91%E3%83%BC%E3%83%95%E3%82%A7%E3%82%AF%E3%83%88PHP-PERFECT-3-%E5%B0%8F%E5%B7%9D-%E9%9B%84%E5%A4%A7/dp/4774144371/ref=tmm_other_meta_binding_swatch_0?_encoding=UTF8&qid=1580653144&sr=8-8)
・Ruby　[プロを目指す人のためのRuby入門](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%99%E4%BA%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AERuby%E5%85%A5%E9%96%80-%E8%A8%80%E8%AA%9E%E4%BB%95%E6%A7%98%E3%81%8B%E3%82%89%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA%E3%83%BB%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E6%8A%80%E6%B3%95%E3%81%BE%E3%81%A7-Software-Design-plus%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA/dp/4774193976/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=ruby&qid=1580819500&sr=8-1)
・Java　[Java本格入門](https://www.amazon.co.jp/Java本格入門-モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで-谷本-心/dp/477418909X/ref=mp_s_a_1_1?dchild=1&keywords=java本格入門&qid=1604130253&sprefix=java本格&sr=8-1)
・Python　[入門 Python 3](https://www.amazon.co.jp/%E5%85%A5%E9%96%80-Python-3-Bill-Lubanovic/dp/4873117380/ref=sr_1_4?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=python&qid=1580819616&sr=8-4)

＊ここに挙げた書籍だけでマスターすることは難しいので、他にも数冊利用して学習する必要があるでしょう。構文を学んだ後、アプリケーションの実例を示した書籍で学習することがおすすめです。ただ、そうした書籍は少ないため筆者はUdemyなども利用しています。

## サーバーサイドフレームワーク
各サーバーサイドの言語には、それぞれ以下の代表的なフレームワークがあります。いずれかのフレーワークでアプリケーションを作成できるレベルまで学習しましょう。

- **PHP：Laravel**

- **Ruby：Ruby on Rails**

- **Jave：Spring**

- **Python：Django**

「参考書」
・Laravel　[Laravel Webアプリケーション開発](https://www.amazon.co.jp/PHP%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF-Laravel-Web%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%8B%E7%99%BA-%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B38-x%E5%AF%BE%E5%BF%9C-%E7%AB%B9%E6%BE%A4/dp/4802613008/ref=sr_1_3?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=laravel&qid=1644635191&sr=8-3)
・Ruby on Rails　[パーフェクト Ruby on Rails](https://www.amazon.co.jp/%E3%83%91%E3%83%BC%E3%83%95%E3%82%A7%E3%82%AF%E3%83%88-Ruby-Rails-%E3%80%90%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82%E7%89%88%E3%80%91-Perfect/dp/4297114623/ref=sr_1_1_sspa?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=ruby+on+rails&qid=1644635276&sr=8-1-spons&psc=1&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUEzUFpNV1hOTkk1TVVCJmVuY3J5cHRlZElkPUEwOTA4MjcyNU1UU1JKRE9QSTBGJmVuY3J5cHRlZEFkSWQ9QTNJMENHOEwyWFVJUjcmd2lkZ2V0TmFtZT1zcF9hdGYmYWN0aW9uPWNsaWNrUmVkaXJlY3QmZG9Ob3RMb2dDbGljaz10cnVl)
・Spring　[Spring徹底入門](https://www.amazon.co.jp/Spring%E5%BE%B9%E5%BA%95%E5%85%A5%E9%96%80-Spring-Framework%E3%81%AB%E3%82%88%E3%82%8BJava%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%8B%E7%99%BA-%E6%A0%AA%E5%BC%8F%E4%BC%9A%E7%A4%BENTT%E3%83%87%E3%83%BC%E3%82%BF/dp/4798142476/ref=sr_1_2?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=spring&qid=1580820200&sr=8-2)
・Django　[Python Django3超入門](https://www.amazon.co.jp/Python-Django3%E8%B6%85%E5%85%A5%E9%96%80-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798061921/ref=sr_1_2_sspa?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=django&qid=1644635407&sr=8-2-spons&psc=1&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUFVM0lHWFZRWDEzREYmZW5jcnlwdGVkSWQ9QTA4ODA4NzVLVlZSUlFYMkhRNVImZW5jcnlwdGVkQWRJZD1BWFU0QlhDUU00T0hNJndpZGdldE5hbWU9c3BfYXRmJmFjdGlvbj1jbGlja1JlZGlyZWN0JmRvTm90TG9nQ2xpY2s9dHJ1ZQ==)

# テスト
テストは書いたコードの品質を保つために必要です。各言語にはテストツールが用意されているため、言語を勉強する時に合わせて学習しましょう。テストツールを専門に解説した書籍は少ないため、公式のマニュアルやネットの記事を参考にして学習すると良いでしょう。

- **Jest**　JavaScript用のテスト（単体テスト）

- **Cypress**　E2Eテスト（UIテスト）

また、プログラムより先にテストコードを書き、そのテストに通るようにコードを作成していく**テスト駆動開発**についても学習しておきましょう。

「参考書」
[初めての自動テスト](https://www.amazon.co.jp/%E5%88%9D%E3%82%81%E3%81%A6%E3%81%AE%E8%87%AA%E5%8B%95%E3%83%86%E3%82%B9%E3%83%88-%E2%80%95Web%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E8%87%AA%E5%8B%95%E3%83%86%E3%82%B9%E3%83%88%E5%9F%BA%E7%A4%8E-Jonathan-Rasmusson/dp/4873118166/ref=sr_1_6?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3BOOOA5F0N5W6&keywords=%E8%87%AA%E5%8B%95%E3%83%86%E3%82%B9%E3%83%88&qid=1644635923&sprefix=%E8%87%AA%E5%8B%95%E3%83%86%E3%82%B9%E3%83%88%2Caps%2C189&sr=8-6)
[テスト駆動開発](https://www.amazon.co.jp/%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA-Kent-Beck/dp/4274217884/ref=tmm_pap_swatch_0?_encoding=UTF8&qid=1644668689&sr=8-1)

# データベース
データベースはアプリケーションのデータを保存するソフトウェアです。アプリケーションを開発するにはデータベースの利用が必須であるため、言語と一緒に学習することになります。

## リレーショナル・データベース
リレーショナル・データベース（RDB）は、行と列によって構成されたテーブルと呼ばれるデータの集合を関連付けてデータを管理するデータベースです。主流のデータベースであるため、まずはRDBを学びましょう。代表的なものに以下のものがあります。

- **MySQL**　オープンソースで一番人気のデータベースです。

- **PostgreSQL**　こちらもオープンソースのデータベースです。

- **Oracle**　商用データベースで企業向けシステムに採用されることが多いです。

MySQLはネットの情報や参考書も揃っており、学習しやすいデータベースであるためおすすめです。

「参考書」
[MySQL徹底入門](https://www.amazon.co.jp/MySQL%E5%BE%B9%E5%BA%95%E5%85%A5%E9%96%80-%E7%AC%AC4%E7%89%88-MySQL-8-0%E5%AF%BE%E5%BF%9C-yoku0825/dp/4798161489/ref=sr_1_5?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=mysql&qid=1644636058&sr=8-5)
[達人に学ぶDB設計 徹底指南書](https://www.amazon.co.jp/%E9%81%94%E4%BA%BA%E3%81%AB%E5%AD%A6%E3%81%B6DB%E8%A8%AD%E8%A8%88-%E5%BE%B9%E5%BA%95%E6%8C%87%E5%8D%97%E6%9B%B8-%E5%88%9D%E7%B4%9A%E8%80%85%E3%81%A7%E7%B5%82%E3%82%8F%E3%82%8A%E3%81%9F%E3%81%8F%E3%81%AA%E3%81%84%E3%81%82%E3%81%AA%E3%81%9F%E3%81%B8-%E3%83%9F%E3%83%83%E3%82%AF/dp/4798124702/ref=tmm_pap_swatch_0?_encoding=UTF8&qid=1580821061&sr=8-2)
[達人に学ぶSQL徹底指南書](https://www.amazon.co.jp/%E9%81%94%E4%BA%BA%E3%81%AB%E5%AD%A6%E3%81%B6SQL%E5%BE%B9%E5%BA%95%E6%8C%87%E5%8D%97%E6%9B%B8-%E7%AC%AC2%E7%89%88-%E5%88%9D%E7%B4%9A%E8%80%85%E3%81%A7%E7%B5%82%E3%82%8F%E3%82%8A%E3%81%9F%E3%81%8F%E3%81%AA%E3%81%84%E3%81%82%E3%81%AA%E3%81%9F%E3%81%B8-CodeZine-BOOKS/dp/4798157821/ref=sr_1_2?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=SQL&qid=1580821069&sr=8-2)

## NoSQL
リレーショナル・データベース以外のデータベースとして、NoSQLというものがあります。NoSQLにはキーバリュー型のDBやドキュメント型のDBなどが含まれます。これらのデータベースは様々なデータ形式に対応するために生まれてきたもので、利用されるケースも増えてきています。

代表的なプロダクトには以下のものがあります。

- **Redis**　キーバリュー型のNoSQL

- **MongoDB**　ドキュメント型のNoSQL

- **DynamoDB**　AWSのNoSQLデータベース

「参考書」
[RDB技術者のためのNoSQLガイド](https://www.amazon.co.jp/RDB%E6%8A%80%E8%A1%93%E8%80%85%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AENoSQL%E3%82%AC%E3%82%A4%E3%83%89-%E6%B2%B3%E6%9D%91%E5%BA%B7%E7%88%BE-ebook/dp/B07143JTD9/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=R5ELWA2HQ71R&keywords=nosql&qid=1644636769&sprefix=nosql%2Caps%2C249&sr=8-1)

# サーバーソフトウェア
サーバーソフトウェアは、コンピューターをサーバーとして機能させるためのソフトです。Webアプリケーションを開発するには、サーバーソフトも使用するのでこちらも並行して学習する必要があります。代表的なものに以下があります。

- **Nginx**

- **Apache**

これまでApacheが多く使用されてきましたが、近年、Nginxのシェアが伸びているため、今から始めるのであればNginxをおすすめします。

「参考書」
[nginx実践ガイド](https://www.amazon.co.jp/nginx%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-impress-top-gear%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E6%B8%A1%E8%BE%BA%E9%AB%98%E5%BF%97-ebook/dp/B01N183E3H/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=nginx&qid=1580821579&sr=8-1)
[できるPRO Apache Webサーバー](https://www.amazon.co.jp/%E3%81%A7%E3%81%8D%E3%82%8BPRO-Apache-Web%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC-Version-%E3%81%A7%E3%81%8D%E3%82%8BPRO%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA/dp/4844333399/ref=sr_1_3?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=apache&qid=1580821571&sr=8-3)

# OS
どのようなアプリケーションもOSの上で動作しています。そのため、OSについて知っておくことは重要です。特に、サーバー用途で使用されることの多い**Linux**に関するスキルが必要になります。Linuxにはパッケージをまとめたディストリビューションというものがあり、**Ubuntu**が使用されることが多いです。

「参考書」
[ゼロからはじめるLinuxサーバー構築・運用ガイド](https://www.amazon.co.jp/%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E3%81%AF%E3%81%98%E3%82%81%E3%82%8BLinux%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E6%A7%8B%E7%AF%89%E3%83%BB%E9%81%8B%E7%94%A8%E3%82%AC%E3%82%A4%E3%83%89-%E5%8B%95%E3%81%8B%E3%81%97%E3%81%AA%E3%81%8C%E3%82%89%E5%AD%A6%E3%81%B6Web%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E4%B8%AD%E5%B3%B6-%E8%83%BD%E5%92%8C/dp/4798146374/ref=sr_1_25?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=linux&qid=1580821754&sr=8-25)
[本気で学ぶ Linux実践入門](https://www.amazon.co.jp/%E6%9C%AC%E6%B0%97%E3%81%A7%E5%AD%A6%E3%81%B6-Linux%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80-%E3%82%B5%E3%83%BC%E3%83%90%E9%81%8B%E7%94%A8%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E6%A5%AD%E5%8B%99%E3%83%AC%E3%83%99%E3%83%AB%E7%AE%A1%E7%90%86%E8%A1%93-%E5%A4%A7%E7%AB%B9-%E9%BE%8D%E5%8F%B2/dp/4797397640/ref=sr_1_6?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=linux&qid=1580821754&sr=8-6)
[Ubuntuスタートアップバイブル](https://www.amazon.co.jp/Ubuntu%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E3%83%90%E3%82%A4%E3%83%96%E3%83%AB-%E5%B0%8F%E6%9E%97-%E6%BA%96-ebook/dp/B07FS2NRKK/ref=sr_1_3?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=2SB1FC60U8XN2&keywords=ubuntu&qid=1644638659&sprefix=ubuntu%2Caps%2C203&sr=8-3)

Linuxには「**LPIC**」と「**Linuc**」という試験があります。Linuxの勉強になりますし、取得することで自身のスキルの証明にもなるのでチャレンジしてみると良いでしょう。言語や他のソフトを学習していく過程で徐々に学んでいきましょう。

# 仮想化ソフトウェア
開発用途でサーバーを構築するには、通常仮想化ソフトウェアを使います。WindowsやMacの上に仮想化ソフトウェアをインストールして、仮想マシンとしてLinuxを動かします。そのため、仮想化ソフトについても知っておく必要があります。仮想化ソフトには以下のようなものがあります。

- **VirtualBox**

- **Vagrant**

- **Docker**

- **Kubernetes**

VirtualBoxをPCにインストールすることで、Linuxを使えるようになります。VagrantはVirtualBoxをコマンドでコントロールでき、OSのプロビジョニングができるツールです。これらは扱うだけならそれほど難しくないため、ネット上の情報で学習すると良いでしょう。

Dockerは、コンテナ型仮想化という種類のソフトウェアで、軽量で扱いやすいという特徴があります。Dockerは開発現場のみならず本番でも広く使用されています。また、コンテナ化したアプリケーションのデプロイ、スケーリング、管理を行うためのKubernetesについても身に付けておきたいところです。

「参考書」
[プログラマのためのDocker教科書](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AEDocker%E6%95%99%E7%A7%91%E6%9B%B8-%E7%AC%AC2%E7%89%88-%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E3%81%AE%E5%9F%BA%E7%A4%8E%E7%9F%A5%E8%AD%98-%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AB%E3%82%88%E3%82%8B%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E3%81%AE%E8%87%AA%E5%8B%95%E5%8C%96-WINGS%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88/dp/4798153222/ref=tmm_pap_swatch_0?_encoding=UTF8&qid=1580822936&sr=8-5)
[Docker実践ガイド](https://www.amazon.co.jp/Docker%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E7%AC%AC2%E7%89%88-impress-top-gear/dp/4295005525/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=docker&qid=1580822936&sr=8-1)
[Kubernetes完全ガイド](https://www.amazon.co.jp/Kubernetes%E5%AE%8C%E5%85%A8%E3%82%AC%E3%82%A4%E3%83%89-%E7%AC%AC2%E7%89%88-Top-Gear-%E9%9D%92%E5%B1%B1/dp/4295009792/ref=sr_1_6?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=273W3F2FG87VO&keywords=kubernetes&qid=1644637867&sprefix=kubernete%2Caps%2C197&sr=8-6)

# バージョン管理
バージョン管理とは、ソースコードの履歴を管理することです。コードの変更内容の記録を残すことで、エラーが発生した際に原因を突き止めることが容易になったり、任意の時点まで巻き戻したりすることができます。チーム開発では必須のスキルになります。主に以下のツールが利用されます。

- **Git**　バージョン管理ツールです。

- **GitHub**　ソースコードをホスティングするサイトです。

「参考書」
[独習Git](https://www.amazon.co.jp/%E7%8B%AC%E7%BF%92Git-%E3%83%AA%E3%83%83%E3%82%AF%E3%83%BB%E3%82%A6%E3%83%9E%E3%83%AA/dp/4798144614/ref=sr_1_3?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=git&qid=1580823334&sr=8-3)
[GitHub実践入門](https://www.amazon.co.jp/GitHub%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80-Pull-Request%E3%81%AB%E3%82%88%E3%82%8B%E9%96%8B%E7%99%BA%E3%81%AE%E5%A4%89%E9%9D%A9-PRESS-plus/dp/477416366X/ref=sr_1_4?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=git&qid=1580823334&sr=8-4)

＊言語の学習がある程度進んだ後、使いながら学習する方法がおすすめです。

# セキュリティ
プログラミングの書籍には、セキュリティについて解説しているものもありますが、別途以下の書籍を参考にしてセキュリティに関する理解を深めることをおすすめします。

「参考書」
[安全なWebアプリケーションの作り方](https://www.amazon.co.jp/%E4%BD%93%E7%B3%BB%E7%9A%84%E3%81%AB%E5%AD%A6%E3%81%B6-%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E7%AC%AC2%E7%89%88-%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%82%8B%E5%8E%9F%E7%90%86%E3%81%A8%E5%AF%BE%E7%AD%96%E3%81%AE%E5%AE%9F%E8%B7%B5-%E5%BE%B3%E4%B8%B8/dp/4797393165/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&qid=1580826636&sr=8-1)

# クラウド
クラウドはアプリケーションのインフラ基盤を提供します。従来はオンプレミスでの運用が主流でしたが、現在はクラウドでアプリケーションを運用するケースが増えており、今後も増加すると予想されています。代表的なクラウドには以下があります。

- **AWS（Amazon Web Servicves）**

- **GCP（Google Cloud Platform）**

- **Azure（Microsoft）**

現在、市場シェアが最も高いのはAWSなので、まずはAWSについて学習しましょう。クラウドについて学習することで、アプリケーションだけでなく、サーバー、ネットワークなどのインフラについて理解を深めることができます。

「参考書」
[Amazon Web Services 基礎からのネットワーク&サーバー構築](https://www.amazon.co.jp/Amazon-Services-E5-9F-BA-E7-A4-8E-E3-81-8B-E3-82-89-E3-81-AE-E3-83-8D-E3-83-83-E3-83-88-E3-83-AF-E/dp/4296105442/ref=dp_ob_title_bk)
[AWSではじめるインフラ構築入門](https://www.amazon.co.jp/AWS%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E6%A7%8B%E7%AF%89%E5%85%A5%E9%96%80-%E5%AE%89%E5%85%A8%E3%81%A7%E5%A0%85%E7%89%A2%E3%81%AA%E6%9C%AC%E7%95%AA%E7%92%B0%E5%A2%83%E3%81%AE%E3%81%A4%E3%81%8F%E3%82%8A%E6%96%B9-%E4%B8%AD%E5%9E%A3-%E5%81%A5%E5%BF%97/dp/4798163430/ref=sr_1_8?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=aws&qid=1644638192&sr=8-8)

AWSには「**クラウドプラクティショナー**」という試験がありますが、試験の学習をすることでAWSについての理解を深めることができるのでおすすめです。

「参考書」
[AWS認定資格試験テキスト](https://www.amazon.co.jp/AWS%E8%AA%8D%E5%AE%9A%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88-AWS%E8%AA%8D%E5%AE%9A-%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E3%83%97%E3%83%A9%E3%82%AF%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%BC-%E5%B1%B1%E4%B8%8B-%E5%85%89%E6%B4%8B/dp/4797397403/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=AWS&qid=1580823915&sr=8-1)
[AWS認定クラウドプラクティショナー　模擬問題集](https://www.amazon.co.jp/AWS%E8%AA%8D%E5%AE%9A-%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E3%83%97%E3%83%A9%E3%82%AF%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%BC-%E6%A8%A1%E6%93%AC%E5%95%8F%E9%A1%8C%E9%9B%86-Yoshi-Otobe-ebook/dp/B081D4ZJ5G/ref=sr_1_22?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=AWS&qid=1580823915&sr=8-22)

# CI/CDツール
**継続的インテグレーション**（CI）とは、ソースコードの変更を行った後、ビルドとテストを実施して、アプリケーションの品質を向上させる手法のことです。**継続的デリバリー**（CD）は、コードの変更後にビルドとテストを自動で実施し、運用環境へデプロイする手法のことを指します。

CI/CDは多くの開発現場で採用されている手法なので、言語やOS、バージョン管理などを学習してアプリケーション開発の全体像を掴んだ後に学習すると良いでしょう。

代表的なツールには以下のものがあります。

- **CircleCI**　Dockerを使用する現場で適したツールです。

- **Jenkins**　オンプレミスでの開発に適したツールです。

- **GitHub Actions**　GitHubが開発している新しいツールで、今後主流になっていくと思われます。

「参考書」
[CircleCI実践入門](https://www.amazon.co.jp/CircleCI%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80%E2%94%80%E2%94%80CI-CD%E3%81%8C%E3%82%82%E3%81%9F%E3%82%89%E3%81%99%E9%96%8B%E7%99%BA%E9%80%9F%E5%BA%A6%E3%81%A8%E5%93%81%E8%B3%AA%E3%81%AE%E4%B8%A1%E7%AB%8B-WEB-PRESS-plus/dp/4297114119/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=circleci&qid=1614849177&sr=8-1)
[Jenkins実践入門](https://www.amazon.co.jp/%E6%94%B9%E8%A8%82%E7%AC%AC3%E7%89%88-Jenkins%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80-%E2%80%95%E2%80%95%E3%83%93%E3%83%AB%E3%83%89%E3%83%BB%E3%83%86%E3%82%B9%E3%83%88%E3%83%BB%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4%E3%82%92%E8%87%AA%E5%8B%95%E5%8C%96%E3%81%99%E3%82%8B%E6%8A%80%E8%A1%93-PRESS-plus/dp/4774189286/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=jenkins&qid=1580830024&sr=8-1)
[GitHub Actions 実践入門](https://www.amazon.co.jp/GitHub-Actions-%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80-%E6%8A%80%E8%A1%93%E3%81%AE%E6%B3%89%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA%EF%BC%88NextPublishing%EF%BC%89-%E5%AE%AE%E7%94%B0/dp/4844378716/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=2SB03BKSA6FGB&keywords=github+action&qid=1644638363&sprefix=githb+action%2Caps%2C198&sr=8-1)

# 構成管理ツール
上記の技術について学習した後、可能であれば構成管理ツールについても学習することをおすすめします。構成管理ツールとは、インフラやOSを運用できる状態にプロビジョニングするツールのことです。代表的なものに以下があります。

- **Ansible**　

- **Chef**　

- **Terraform**　

AnsibleとChefは、コードでOSの設定を行ったり必要なツールをインストールしたりすることのできるツールです。Terraformは、クラウドのインフラをコードで管理することのできるツールです。OSやインフラをコードで管理できるため、開発や運用の工数を削減することができます。

「参考書」
[Ansible実践ガイド](https://www.amazon.co.jp/Ansible%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E7%AC%AC3%E7%89%88-impress-top-gear/dp/4295007641/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=ansible&qid=1580829847&sr=8-1)
[実践Terraform　AWSにおけるシステム設計とベストプラクティス](https://www.amazon.co.jp/%E5%AE%9F%E8%B7%B5Terraform-AWS%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E8%A8%AD%E8%A8%88%E3%81%A8%E3%83%99%E3%82%B9%E3%83%88%E3%83%97%E3%83%A9%E3%82%AF%E3%83%86%E3%82%A3%E3%82%B9-%E6%8A%80%E8%A1%93%E3%81%AE%E6%B3%89%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA%EF%BC%88NextPublishing%EF%BC%89-%E9%87%8E%E6%9D%91-%E5%8F%8B%E8%A6%8F/dp/4844378139/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=terraform&qid=1580829805&sr=8-1)

# コードに関する書籍
以下は良いコードを書く際に参考になる書籍です。「リーダブルコード」は読みやすく簡潔なため最初の書籍としておすすめです。「CODE COMPLETE」は本格的な書籍でページ数も多いですが、より深く学びたい時に最適です。

**リファクタリング**とは、ソフトウェアの振る舞いを保ったまま、内部のソースコードを改善していく作業のことです。プログラミングにおいて欠かせないスキルのため、マーティン・ファウラーの名著である「リファクタリング」は読んでおきましょう。

「参考書」
[リーダブルコード](https://www.amazon.co.jp/%E3%83%AA%E3%83%BC%E3%83%80%E3%83%96%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89-%E2%80%95%E3%82%88%E3%82%8A%E8%89%AF%E3%81%84%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E6%9B%B8%E3%81%8F%E3%81%9F%E3%82%81%E3%81%AE%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%A7%E5%AE%9F%E8%B7%B5%E7%9A%84%E3%81%AA%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-Theory-practice-Boswell/dp/4873115655/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3A8CSLSZPOHYG&keywords=%E3%83%AA%E3%83%BC%E3%83%80%E3%83%96%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89&qid=1644639199&sprefix=%E3%83%AA%E3%83%BC%E3%83%80%E3%83%96%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89%2Caps%2C257&sr=8-1)
[CODE COMPLETE（上）](https://www.amazon.co.jp/CODE-COMPLETE-%E7%AC%AC2%E7%89%88-%E4%B8%8A-%E5%AE%8C%E5%85%A8%E3%81%AA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%97%E3%81%A6/dp/489100455X/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3T6XJRLQ4SYYO&keywords=code+complete&qid=1644639223&sprefix=codecomplet%2Caps%2C187&sr=8-1)
[CODE COMPLETE（下）](https://www.amazon.co.jp/CODE-COMPLETE-%E7%AC%AC2%E7%89%88-%E4%B8%8B-%E5%AE%8C%E5%85%A8%E3%81%AA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%97%E3%81%A6/dp/4891004568/ref=sr_1_3?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3T6XJRLQ4SYYO&keywords=code+complete&qid=1644639223&sprefix=codecomplet%2Caps%2C187&sr=8-3)
[リファクタリング](https://www.amazon.co.jp/%E3%83%AA%E3%83%95%E3%82%A1%E3%82%AF%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0-%E7%AC%AC2%E7%89%88-%E6%97%A2%E5%AD%98%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E5%AE%89%E5%85%A8%E3%81%AB%E6%94%B9%E5%96%84%E3%81%99%E3%82%8B-OBJECT-TECHNOLOGY/dp/4274224546/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=1WZ24DSTS2W4M&keywords=%E3%83%AA%E3%83%95%E3%82%A1%E3%82%AF%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0&qid=1644639827&sprefix=%E3%83%AA%E3%83%95%E3%82%A1%E3%82%AF%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0%2Caps%2C189&sr=8-1)

# Webの技術に関する書籍
Webアプリケーションを開発するには、Webに関する技術についての知識が必要です。HTTP、URI、REST等の基本的な仕組みについて理解を深めておきましょう。モダンなWebシステムには**API**も欠かせないため、APIについても学習する必要があります。また、検索結果を重視するサービスでは、**SEO**についての知識も必要となります。

「参考書」
[プロになるためのWeb技術入門](https://www.amazon.co.jp/%E3%80%8E%E3%83%97%E3%83%AD%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AEWeb%E6%8A%80%E8%A1%93%E5%85%A5%E9%96%80%E3%80%8F%E2%80%95%E2%80%95%E3%81%AA%E3%81%9C%EF%BC%8C%E3%81%82%E3%81%AA%E3%81%9F%E3%81%AFWeb%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%92%E9%96%8B%E7%99%BA%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%81%AE%E3%81%8B-%E5%B0%8F%E6%A3%AE-%E8%A3%95%E4%BB%8B-ebook/dp/B09MVGM99L/ref=sr_1_7?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3R4NW755PV17F&keywords=web%E6%8A%80%E8%A1%93&qid=1644639474&sprefix=web%E6%8A%80%E8%A1%93%2Caps%2C185&sr=8-7)
[Webを支える技術](https://www.amazon.co.jp/Web%E3%82%92%E6%94%AF%E3%81%88%E3%82%8B%E6%8A%80%E8%A1%93-HTTP%E3%80%81URI%E3%80%81HTML%E3%80%81%E3%81%9D%E3%81%97%E3%81%A6REST-WEB-PRESS-plus/dp/4774142042/ref=sr_1_6?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3R4NW755PV17F&keywords=web%E6%8A%80%E8%A1%93&qid=1644639474&sprefix=web%E6%8A%80%E8%A1%93%2Caps%2C185&sr=8-6)
[Web API](https://www.amazon.co.jp/Web-API-Parts-%E6%B0%B4%E9%87%8E-%E8%B2%B4%E6%98%8E/dp/4873116864/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3UZ2U6YEPG32H&keywords=webapi&qid=1644639523&sprefix=webapi%2Caps%2C188&sr=8-1)
[現場のプロから学ぶ SEO技術バイブル](https://www.amazon.co.jp/%E7%8F%BE%E5%A0%B4%E3%81%AE%E3%83%97%E3%83%AD%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6-SEO%E6%8A%80%E8%A1%93%E3%83%90%E3%82%A4%E3%83%96%E3%83%AB-%E7%89%B9%E5%85%B8PDF%E4%BB%98%E3%81%8D-%E8%A5%BF%E5%B1%B1-%E6%82%A0%E5%A4%AA%E6%9C%97/dp/4839966001/ref=sr_1_5?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=O9FP4QM3AVQS&keywords=SEO&qid=1644668980&sprefix=seo%2Caps%2C195&sr=8-5)

# 設計に関する書籍
優れたシステムには優れた設計が必要です。設計はシステム開発の上流工程に当たりますが、プログラマーであっても種々の設計手法について知っていることは重要です。

**デザインパターン**は、様々なプログラムで再利用できる汎用的な設計パターンのことです。通称GoF本と呼ばれる原著には、オブジェクト指向プログラミングにおいて広く使用されているパターンが網羅されています。原著は難しいため、わかりやすく書かれた「デザインパターン入門」がおすすめです。

**ユースケース駆動設計**は、ユースケースからオブジェクト指向ソフトウェアを開発するための設計手法です。下記の「ユースケース駆動開発実践ガイド」では、ユースケースの定義から始まり、シーケンス図やクラス図といったUMLに落とし込んでいく手順が詳細に解説されている良書です。

**クリーンアーキテクチャ**は、フレームワークやデータベース等からビジネスルールを分離するという「関心事の分離」に主眼が置かれた設計手法です。下記の書籍では、SOLIDと呼ばれる設計に関する原則についても学ぶことができます。

**ドメイン駆動設計**は、システムの利用者であるユーザの活動領域をドメインとして定義し、ドメインを元にシステムを設計する手法です。エリック・エヴァンズによる原著は難しいため、はじめは下記の「ドメイン駆動設計入門」がおすすめです。

**マイクロサービス**は、アプリケーションを複数の小さいサービスに分割してそれらを組み合わせて構築するアーキテクチャです。システムに対する柔軟で継続的な変更を可能にします。

これらのすべてに熟知する必要はありませんが、知っておくと必ず役に立つでしょう。

「参考書」
[デザインパターン入門](https://www.amazon.co.jp/Java%E8%A8%80%E8%AA%9E%E3%81%A7%E5%AD%A6%E3%81%B6%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E5%85%A5%E9%96%80%E7%AC%AC3%E7%89%88-%E7%B5%90%E5%9F%8E-%E6%B5%A9/dp/4815609802/ref=sr_1_2?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=QEAXJDKNWT8W&keywords=%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E5%85%A5%E9%96%80&qid=1644640137&sprefix=%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E5%85%A5%E9%96%80%2Caps%2C185&sr=8-2)
[ユースケース駆動開発実践ガイド](https://www.amazon.co.jp/%E3%83%A6%E3%83%BC%E3%82%B9%E3%82%B1%E3%83%BC%E3%82%B9%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E3%83%80%E3%82%B0%E3%83%BB%E3%83%AD%E3%83%BC%E3%82%BC%E3%83%B3%E3%83%90%E3%83%BC%E3%82%B0-ebook/dp/B01B5MX2TC/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=ENS8HFUNR53H&keywords=%E3%83%A6%E3%83%BC%E3%82%B9%E3%82%B1%E3%83%BC%E3%82%B9%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89&qid=1644640168&sprefix=%E3%83%A6%E3%83%BC%E3%82%B9%E3%82%B1%E3%83%BC%E3%82%B9%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89%2Caps%2C174&sr=8-1)
[Clean Architecture](https://www.amazon.co.jp/Clean-Architecture-%E9%81%94%E4%BA%BA%E3%81%AB%E5%AD%A6%E3%81%B6%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%81%AE%E6%A7%8B%E9%80%A0%E3%81%A8%E8%A8%AD%E8%A8%88-Robert-C-Martin/dp/4048930656/ref=sr_1_1?keywords=clean+architecture&qid=1644640232&sprefix=clean+arch%2Caps%2C199&sr=8-1)
[ドメイン駆動設計入門](https://www.amazon.co.jp/%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E9%A7%86%E5%8B%95%E8%A8%AD%E8%A8%88%E5%85%A5%E9%96%80-%E3%83%9C%E3%83%88%E3%83%A0%E3%82%A2%E3%83%83%E3%83%97%E3%81%A7%E3%82%8F%E3%81%8B%E3%82%8B-%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E9%A7%86%E5%8B%95%E8%A8%AD%E8%A8%88%E3%81%AE%E5%9F%BA%E6%9C%AC-%E6%88%90%E7%80%AC-%E5%85%81%E5%AE%A3/dp/479815072X/ref=sr_1_4?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=ENS8HFUNR53H&keywords=%E3%83%A6%E3%83%BC%E3%82%B9%E3%82%B1%E3%83%BC%E3%82%B9%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89&qid=1644640168&sprefix=%E3%83%A6%E3%83%BC%E3%82%B9%E3%82%B1%E3%83%BC%E3%82%B9%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89%2Caps%2C174&sr=8-4)
[マイクロサービスアーキテクチャ](https://www.amazon.co.jp/%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3-Sam-Newman/dp/4873117607/ref=sr_1_7?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=FDD7YYP8ZAY2&keywords=%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9&qid=1644640265&sprefix=%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%2Caps%2C197&sr=8-7)

# 運用、保守に関する書籍
システムは開発したら終わりではなく、継続的に保守しながら運用していく必要があります。運用に欠かせないスキルとして**監視**があります。システムが正常に稼働しているか定期的に確認することで障害を検知して通知を行うことを監視と言います。下記の書籍は入門としておすすめです。

「参考書」
[入門 監視](https://www.amazon.co.jp/%E5%85%A5%E9%96%80-%E7%9B%A3%E8%A6%96-%E2%80%95%E3%83%A2%E3%83%80%E3%83%B3%E3%81%AA%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3-Mike-Julian/dp/4873118646/ref=sr_1_5?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=32MM2HM9UQS3F&keywords=%E7%9B%A3%E8%A6%96&qid=1644667747&sprefix=%E7%9B%A3%E8%A6%96%2Caps%2C235&sr=8-5)

システムの運用にソフトウェアエンジニアリングを適用し、信頼性の高いシステムを構築するプラクティスのことを**サイトリライアビリティ・エンジニアリング**（SRE）と呼びます。Googleが大規模システムを運用する際に実践しているプラクティスであり、通常のアプリケーションに適用することは難しいかもしれませんが、考え方は参考になるため読んでみることをおすすめします。

「参考書」
[SRE サイトリライアビリティエンジニアリング](https://www.amazon.co.jp/SRE-%E3%82%B5%E3%82%A4%E3%83%88%E3%83%AA%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%93%E3%83%AA%E3%83%86%E3%82%A3%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0-%E2%80%95Google%E3%81%AE%E4%BF%A1%E9%A0%BC%E6%80%A7%E3%82%92%E6%94%AF%E3%81%88%E3%82%8B%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%E3%83%81%E3%83%BC%E3%83%A0-%E6%BE%A4%E7%94%B0-%E6%AD%A6%E7%94%B7/dp/4873117917/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=1A7QTEIOKCTEK&keywords=SRE&qid=1644668052&sprefix=sre%2Caps%2C201&sr=8-1)

# その他の書籍
その他の書籍としてはデザインに関するものがあります。「ノンデザイナーズ・デザインブック」はデザイナー以外の方を対象とした書籍で、近接、整列、反復、コントラストという4つの基本原則を学ぶことができます。

「参考書」
[ノンデザイナーズ・デザインブック](https://www.amazon.co.jp/%E3%83%8E%E3%83%B3%E3%83%87%E3%82%B6%E3%82%A4%E3%83%8A%E3%83%BC%E3%82%BA%E3%83%BB%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%96%E3%83%83%E3%82%AF-%E7%AC%AC4%E7%89%88-Robin-Williams/dp/4839955557/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3OKFV8O2QTATL&keywords=%E3%83%8E%E3%83%B3%E3%83%87%E3%82%B6%E3%82%A4%E3%83%8A%E3%83%BC&qid=1644669062&sprefix=%E3%83%8E%E3%83%B3%E3%83%87%E3%82%B6%E3%82%A4%E3%83%8A%E3%83%BC%2Caps%2C183&sr=8-1)

どのようなサービスにも規約は必要です。以下の書籍は「利用規約」「プライバシーポリシー」「特定商取引法に基づく表示」について丁寧に解説しています。

「参考書」
[良いウェブサービスを支える 「利用規約」の作り方](https://www.amazon.co.jp/%E3%80%90%E6%94%B9%E8%A8%82%E6%96%B0%E7%89%88%E3%80%91%E8%89%AF%E3%81%84%E3%82%A6%E3%82%A7%E3%83%96%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%92%E6%94%AF%E3%81%88%E3%82%8B-%E3%80%8C%E5%88%A9%E7%94%A8%E8%A6%8F%E7%B4%84%E3%80%8D%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E9%9B%A8%E5%AE%AE-%E7%BE%8E%E5%AD%A3/dp/4297103265/ref=sr_1_2?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=28W4RJYF0UMRL&keywords=%E3%82%A6%E3%82%A7%E3%83%96%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9+%E8%A6%8F%E7%B4%84&qid=1644669193&sprefix=%E3%82%A6%E3%82%A7%E3%83%96%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9+%E8%A6%8F%E7%B4%84%2Caps%2C199&sr=8-2)

# アプリケーションの開発
最後に、これまでに学習した技術を総動員して自身でアプリケーションを開発しましょう。技術を習得するのに一番効果的なのは、実際に開発することだからです。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](https://apps.ankiweb.net/)
[ラダーシリーズ](https://ibcpub.co.jp/ladder/ladder_about)
[英語上達完全マップを10ヶ月やってみた](http://kanzenmap.nomaki.jp/index.html)

# まとめ
以上、エンジニアになるために必要なスキルについて解説してきました。エンジニアには多くのスキルが必要ですが、学習する時間は限られているため、**どのスキルを学ぶべきか選別することが重要です**。

市場シェアの高い技術は利用する企業が多いということであり、それだけ需要も高いので、**市場シェアの高い技術を選別して学習するのが賢明です**。

そのためには、書籍、サイト、YouTube、ポッドキャストなどを駆使して、テクノロジーに関する情報を常に収集して業界や市場に関する洞察を育むことが大切です。