Webアプリケーション作成のための10ステップ　5. 開発ツールと環境

# この記事を書いたきっかけ

この記事では、Webアプリケーションエンジニアに必要なスキルを具体的に解説し、その学び方を示します。

Webアプリケーション作成に必要なスキルを10個にまとめ、一つずつ学ぶ目的と手段を整理したいと思います。今回は**開発ツールと環境**について書きます。

### この記事を書いた目的
- webアプリケーションエンジニアになりたい
- そのために、自分に足りないものは何かを知りたい
- すぐに行動に移すために、学ぶ目的と手段を具体化したい
- webアプリケーションエンジニアに必要なスキルを全て把握したい
- 今、自分はなんのために、何を学んでいるのか、見失わないようにしたい


***
こちらの記事が大変参考になります

https://qiita.com/suin/items/f570f057a0ff927b47dc



# Webアプリケーション作成のための10ステップ
1. プログラミング言語の習得
1. フロントエンド開発
1. バックエンド開発
1. バージョン管理
1. 開発ツールと環境
1. セキュリティ
1. デプロイメントとクラウド
1. テスト
1. アーキテクチャの知識
1. ソフトスキル

# 5. 開発ツールと環境
# 開発ツールとは何か（What）
開発ツールとは、ソフトウェア開発を効率化するツール・アプリケーション全般を指します。Webアプリ開発を楽にしてくれる道具ですね。例えば、統合開発環境（IDE）、コードエディタ、デバッガ、バージョン管理ツールなどが含まれます。これらのツールを活用して、効率的に開発を行います。

## 主な開発ツール
**IDE/エディタ**：VSCode、PyCharm、Sublime Textなど。
**バージョン管理ツール**：Git、GitHub、GitLabなど。
**パッケージマネージャ**：npm（Node.js）、pip（Python）など。
**デバッガ**：PDB（Python）、Chrome DevToolsなど。

下記で詳しく説明します。

# 開発環境とは何か
開発環境とは、ソフトウェア開発を行うためのハードウェアやソフトウェアの設定のことを指します。つまり、上記のような開発ツールをインストールする、設定する、必要なライブラリやフレームワークを準備することを指します。適切な開発環境を整えることで、効率的に開発を行うことができます。

## 主な開発環境
**ローカル開発環境**：開発者のPC上に構築される環境。開発者が直接操作するコンピュータで、すべての開発ツールやアプリケーションがインストールされます。

**リモート開発環境**：クラウドやリモートサーバー上に構築される環境。開発者はリモートアクセスを通じて開発作業を行います。リモート開発環境は、開発者がどこからでもアクセスでき、共有やバックアップが簡単です。

**コンテナ技術**：Dockerなどを使用した環境。コンテナ化により、開発環境の一貫性が保たれ、他の開発者と共有することが簡単になります。コンテナ内に開発ツールやライブラリをセットアップし、特定の環境依存を排除します。


# なぜ開発ツールについて学習する必要があるのか（Why）
**効率化**：開発ツールを適切に使用することで、コードを書く、デバッグする、デプロイする作業がより速く効率的に行うことができるから。時間を節約し、プロジェクトの進行をスムーズに進めるために必要です。

**品質向上**：自動化ツールやテストツールを使うことで、コードの品質を高めることができるから。これらのツールはエラーを早期に発見し、修正するのを助けるため、バグの少ない安定したソフトウェアを作成することができます。

**共同作業**：チームで開発する際、共通のツールを使用することで、メンバー間のコミュニケーションがスムーズになるから。同じツールを使うことで、情報共有が簡単になり、効率的な共同作業が可能になります。

**標準化**：業界標準のツールを使用することで、他の開発者やチームと協力する際にスムーズに連携できるから。標準化されたツールを使うことで、プロジェクトに新しいメンバーが参加しても、すぐに作業を開始できるようになります。


# 具体的にどんな開発ツールがあるのか
## IDE/エディタ
### IDE/エディタとは何なのか
統合開発環境（IDE）やコードエディタは、プログラムを書くためのツールです。
- 統合開発環境(IDE)とは、ソフトウェア開発を支援するための多機能ツールです。コードを書く、テストする、デバッグする、ビルドするなどの機能が統合された開発環境を提供してくれます。
- 一方、コードエディタはコードを編集するためのシンプルなソフトウェアです。

### なぜIDEやエディタが必要なのか
開発作業をスムーズに進めるのに役立つ機能が備わっているからです。使い方を学習すれば、効率的に開発できるので、開発ツールの操作を学習する必要があります。

#### IDEやコードエディタに備わっている便利な機能
- **コード補完**：プログラミング中にコードの入力を支援するための機能。プログラミング言語の構文や既存のコードを分析して、次に入力される可能性が高いコードの候補を提示してくれます。
- **シンタックスハイライト**：プログラムのコードを色分けする機能。コードの構造やロジックが一目でわかりやすくなります。
- **デバッグ機能**：プログラムの実行中に発生するエラーやバグを見つけて修正するためのツールや機能。プログラムの正確な動作を確認し、予期しない動作やエラーの原因を特定するために必要です。
- **コードフォーマット**：コードの整形を自動的に行い、一貫したスタイルを保つ機能。
- **プラグイン/拡張機能**：エディタの機能を拡張するための追加モジュール。

### 具体的なIDE/エディタツール
- **VSCode**：Microsoftが提供する無料のコードエディタです。豊富な拡張機能を持ち、幅広い言語に対応しています。総合力が高いと思います。
- **PyCharm**：Python専用のIDE。高度なコード補完やデバッグ機能を持ちます。
- **Sublime Text**：高速で軽量なコードエディタです。シンプルなインターフェースと豊富なプラグインが特徴です。

## バージョン管理ツール
### バージョン管理ツール何なのか
バージョン管理ツールは、ソースコードの変更履歴を管理するツールです。これにより、コードのバージョンを追跡し、以前の状態に戻すことができます。また、複数の開発者が同時に作業する場合でも、コードの衝突を避けることができます。

### なぜバージョン管理ツールが必要なのか
バージョン管理ツールは、コードの変更履歴を記録し、以前のバージョンに戻すことができるため、開発の効率と信頼性を向上させます。また、チームでの共同作業をスムーズに行うために不可欠です。

### 具体的なバージョン管理ツール
**Git**：最も広く使用されている分散バージョン管理システム。
**GitHub**：Gitリポジトリのホスティングサービス。リモートでのバージョン管理や共同作業を支援するサービス。
**GitLab**：GitHubに似た機能を持つリポジトリホスティングサービス。CI/CDの機能も統合されている。

こちらの記事も参考にしてみてください。
記事: [Webアプリケーション作成のための10ステップ　4. バージョン管理](https://qiita.com/eric50905/items/b03c28130b0083965047)

## パッケージマネージャ
### パッケージマネージャとは何なのか
パッケージマネージャは、ソフトウェアパッケージ（ライブラリやモジュール）の管理を行うツールです。パッケージのインストール、アップデート、削除を簡単に行うことができます。

### なぜパッケージマネージャが必要なのか
パッケージマネージャは、ソフトウェアパッケージ（ライブラリやモジュール）依存関係の管理を自動化し、開発環境を一貫性を持たせて維持してくれます。開発者はコードを書くことに集中できて、手動でのパッケージ管理をしなくて済みます。

### パッケージマネージャがない場合の困難
- 開発者は必要なライブラリを一つ一つ手動でダウンロードし、プロジェクトに追加しなければならなくなります。**手動でのライブラリ管理には多くの時間と労力**がかかります。
- 多くのライブラリは、他のライブラリに依存しています。パッケージマネージャがない場合、これらの依存関係を手動で追跡し、すべてを正しいバージョンでインストールする必要があります。**多数のライブラリの依存関係を手動で管理するのは困難を極めます**。
- ライブラリの新しいバージョンがリリースされた場合、それを手動でダウンロードし、プロジェクトに適用する必要があります。プロジェクトに多数のライブラリが含まれている場合、**更新作業を手動で行うのは非常に大変です**。
- 他の開発者がプロジェクトを再現しようとしたときに、必要なライブラリを手動でインストールしなければならなくなります。**環境の再現性が低くなり、チームでの共同作業やプロジェクトの共有が困難になります**。
- 手動でライブラリを管理する際には、セキュリティパッチの適用や脆弱性の管理が難しくなります。パッケージマネージャがあれば、自動で最新の安全なバージョンをインストールできますが、手動ではそれが難しく、**セキュリティリスクが増加します**。

### 具体的なツール
**npm**：Node.jsのパッケージマネージャ。JavaScriptのライブラリやツールを簡単に管理できます。
**pip**：Pythonのパッケージマネージャ。Pythonのライブラリやモジュールをインストール・管理するために使用します。

## デバッガ
### デバッガとは何なのか
デバッガは、プログラムの実行中に問題を見つけて修正するためのツールです。コードの実行をステップごとに追跡し、変数の値を確認したり、プログラムの流れを制御することができます。

### なぜデバッガが必要なのか
デバッガは、プログラムのバグを効率的に見つけて修正するために必要です。コードの品質を上げることができますし、結果的に開発者の時間を節約することになります。

### デバッガがない場合の困難
- デバッガがないと、**プログラムがどこでエラーを発生させているのかを特定するのが難しくなります**。プログラムが予期しない動作をしたり、クラッシュしたりした場合、その原因を突き止めるために膨大な量のコードを手動で確認する必要があります。

- デバッガがないと、プログラマーはプログラムの内部状態を確認するために、**コードに多くのプリントステートメント（print文）を挿入することになります**。非常に面倒です。デバッガがあれば、実行中に変数の値をリアルタイムで監視できます。

- デバッガがないと、プログラムを一行ずつ実行して問題を詳細に追跡することができません（**ステップ実行ができない**）。そのせいで、問題が発生している箇所を正確に特定するのが難しくなってしまいます。

### 具体的なツール
**PDB**：Pythonの標準デバッガ。コマンドラインで動作し、簡単なデバッグ作業を行うのに便利です。
**Chrome DevTools**：Google Chromeに組み込まれたデベロッパーツール。JavaScriptのデバッグやパフォーマンス分析に使用します。

# 開発ツールの勉強方法（How）
### 公式ドキュメントの活用
**IDE/エディタ**
- VSCode：[VSCode公式](https://code.visualstudio.com/)
- PyCharm：[PyCharm公式](https://www.jetbrains.com/ja-jp/pycharm/)
- Sublime Text：[SublimeText公式](https://www.sublimetext.com/)

**Git**
- Git/GitHub：[Git と GitHub の学習リソース](https://docs.github.com/ja/get-started/start-your-journey/git-and-github-learning-resources)


**パッケージマネージャ**
- npm：[npm公式](https://www.npmjs.com/)
- pip：[pip公式](https://pip.pypa.io/en/stable/)



### 書籍の活用
自分と相性のいい技術書を一冊買うのもおすすめです。それぞれの開発ツールについて、体系的に理解できると実践に活かしやすいです。

### 動画の活用
YouTubeやUdemyなどの動画で学習するのもおすすめです。

### 実際にWebアプリを作って体験してみる
これがいちばん早いです。開発する以上、必然的に開発ツール触れることになるので嫌でも覚えてきます。
# 実際に開発ツールについて学習したこと（Try）
私が実際に行った開発ツールの学習方法を紹介します。
### VSCodeの学習
- Webアプリを作成したときに、VSCodeを使用しました。参考にした書籍に書いてある通りに開発を進め、プラスアルファで必要になった操作に関しては逐一調べながらVSCodeの操作を学習しました。
- 書籍：『 [Visual Studio Code完全入門 ](https://www.amazon.co.jp/Visual-Studio-Code%E5%AE%8C%E5%85%A8%E5%85%A5%E9%96%80-Web%E3%82%AF%E3%83%AA%E3%82%A8%E3%82%A4%E3%82%BF%E3%83%BC-%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%AE%E4%BD%9C%E6%A5%AD%E3%81%8C%E3%81%AF%E3%81%8B%E3%81%A9%E3%82%8B%E6%96%B0%E4%B8%96%E4%BB%A3%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF%E3%83%BC%E3%81%AE%E6%93%8D%E3%82%8A%E6%96%B9/dp/4295013455) 』を一通り読みました。この本では、基本的なVSCodeの操作やデバッガーの使い方、便利な拡張機能を紹介しています。

### Dockerの学習
- 自分のプロジェクトでDockerコンテナを使用し、開発環境を再現する練習を行いました。書籍：『 [実装で学ぶフルスタックWeb開発 エンジニアの視野と知識を広げる「一気通貫」型ハンズオン](https://www.amazon.co.jp/%E5%AE%9F%E8%A3%85%E3%81%A7%E5%AD%A6%E3%81%B6%E3%83%95%E3%83%AB%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AFWeb%E9%96%8B%E7%99%BA-%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%AE%E8%A6%96%E9%87%8E%E3%81%A8%E7%9F%A5%E8%AD%98%E3%82%92%E5%BA%83%E3%81%92%E3%82%8B%E3%80%8C%E4%B8%80%E6%B0%97%E9%80%9A%E8%B2%AB%E3%80%8D%E5%9E%8B%E3%83%8F%E3%83%B3%E3%82%BA%E3%82%AA%E3%83%B3-%E6%A0%AA%E5%BC%8F%E4%BC%9A%E7%A4%BE%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%83%88%E3%83%BC%E3%83%B3-ebook/dp/B0CLMWZFHP/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=P0PYRKZ7KJ03&dib=eyJ2IjoiMSJ9.gETB76PU4uM6UWLyX-GIW5CWP2EHT5gOg9XjAv5f-B9ibLvP62ZxYzloT7sgajBy52wU9sdQFpof-E5ysNf-HvLlcRGRcDveYSUh8k97C_f2gqjjDJ6dNgjRQgTyJKOpoDc-I3T4z_ezu8BRxgW1Gj33uU-H4UPDwIOhn89HYj-xUzHzJ9KY3ucmP9e7hHSmXrmyjfWtRfKv-Qog4olIEK0tEui5igGZ7ykPqvWUyDM.rbL9nRif2HJIPb2yHHTcB5JuGMwMdW6UJG_MHzMzjiQ&dib_tag=se&keywords=%E3%83%95%E3%83%AB%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF&s=books&sprefix=%E3%83%95%E3%83%AB%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF%2Cstripbooks%2C152&sr=1-1) 』でローカルPCにDockerを立ち上げてみました。
- 書籍：『 [Docker&仮想サーバー完全入門](https://www.amazon.co.jp/Docker-%E4%BB%AE%E6%83%B3%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E5%AE%8C%E5%85%A8%E5%85%A5%E9%96%80-Web%E3%82%AF%E3%83%AA%E3%82%A8%E3%82%A4%E3%82%BF%E3%83%BC%EF%BC%86%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%AE%E4%BD%9C%E6%A5%AD%E3%81%8C%E3%81%AF%E3%81%8B%E3%81%A9%E3%82%8B%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E3%82%AC%E3%82%A4%E3%83%89-%E3%83%AA%E3%83%96%E3%83%AD%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%B9/dp/4295015318) 』を読んでいるところです。

### Gitの学習
- **書籍を読む**：書籍：『[いちばんやさしいGit&GitHubの教本](https://www.amazon.co.jp/%E3%81%84%E3%81%A1%E3%81%B0%E3%82%93%E3%82%84%E3%81%95%E3%81%97%E3%81%84Git-GitHub%E3%81%AE%E6%95%99%E6%9C%AC-%E4%BA%BA%E6%B0%97%E8%AC%9B%E5%B8%AB%E3%81%8C%E6%95%99%E3%81%88%E3%82%8B%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E7%AE%A1%E7%90%86-%E5%85%B1%E6%9C%89%E5%85%A5%E9%96%80-%E3%80%8C%E3%81%84%E3%81%A1%E3%81%B0%E3%82%93%E3%82%84%E3%81%95%E3%81%97%E3%81%84%E6%95%99%E6%9C%AC%E3%80%8D%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA/dp/4295013617)』が参考になります。
- **paizaの講義**：講義を受けながら、実際にコマンドを入力する練習もできます（[「Git」入門講座一覧](https://paiza.jp/works/search_courses/2112)）。
- **Udemyの動画視聴**：「[ちゃんと学ぶ、Git/GitHub・SourceTree講座（Win/Mac対応・コマンド対応）](https://www.udemy.com/course/git-beginning/?couponCode=JUST4U02223)」を視聴しました。
- **Qiitaに記事を書く**：アウトプットすることで理解が深まります。
- **実践練習**：自分でWebアプリを作成してデプロイするときに、GitHubでリポジトリを作成し、実際にコミットやプッシュを行いました。複数人で管理する練習はできていませんが、自分のだけのプロジェクトだからこそgitコマンドをばんばん練習できます。

### パッケージマネージャ（pip）の学習
Webアプリを作成したときに、requirements.txtを作成しました。それ以外はあまり学習していません。

# まとめ
開発ツールと環境の学習は、Webアプリケーションエンジニアとしてのスキルを強化するために欠かせないものです。これらのツールを使いこなすことで、日々の開発効率も上がりますし、コードの品質を保つことができます。コーディングに限らず、開発作業を少しでもストレスなく行うために、これからも開発ツールの種類や使い方を学んでいきたいです。