インフラエンジニア1年生がプログラミングを勉強するのに使った教材

# はじめに　
私は普段インフラをメインで扱っているエンジニアです。

そんな開発がメインではない私が1年目でプログラミングを学ぶために使用した教材を紹介していきます。インフラエンジニアの方だけではなく未経験のエンジニアの方にも参考になれば良いなと思っております。

インフラの学習に使用した教材については下記記事にて紹介しておりますので、ご覧いただければ幸いです。

https://qiita.com/iStone/items/0fd385f07083a691ea05

# インフラエンジニアはプログラミングは必要？
まずはこの質問をChatGPTに聞いてみましょう。

>はい、インフラエンジニアにとってプログラミングスキルは必要です。
>
>近年、クラウドの普及やインフラ自動化の進展により、インフラエンジニアに求められるスキルも変化しています。今では、サーバの自動化やコンテナのデプロイなど、プログラミングスキルが必要な業務も多くなっています。
>
>具体的には、以下のようなことが挙げられます。
>
>- インフラ自動化の実現
インフラエンジニアが自動化ツールやスクリプトを作成するためには、プログラミングスキルが必要です。自動化により、作業の効率化や作業ミスの軽減など、様々なメリットがあります。
>
> - スクリプトの作成
定期的なバックアップやログの削除、ファイルの変換など、インフラ管理に必要なスクリプトを作成するためには、プログラミングスキルが必要です。
>
> - DevOpsの実践
DevOpsの文化が普及する中で、インフラエンジニアは開発チームとの連携が求められるようになっています。プログラミングスキルを持つことで、開発チームとのコミュニケーションや、共通言語の確立がしやすくなります。
>
>以上のように、インフラエンジニアにとって、プログラミングスキルは非常に重要です。プログラミングを学ぶことで、業務効率の向上やキャリアアップにつながるでしょう。

との事です。

私自身、プログラミングが出来るという事で、コーポレートサイトのお問い合わせフォームの作成や社内用ツールの作成を任せてもらえたりしたので、業務の幅が広がる等のメリットもありますね。

個人的な理由としてはAWSで運用を行う際にLambdaを扱えると運用の幅が広がるだろうと思い、プログラミング学習を始めました。

# 何となくプログラミングが分かるようにする
まずは何となくプログラミングが分かるところまで持っていくために主にProgateやUdemyを利用しました。

### Progate
ご存知の方も多いでしょう、オンラインでのプログラミング学習サービスです。環境構築を行わずに手軽にプログラミングに触れるので入門にはピッタリの教材でした。
始めはひたすらProgateをやってプログラミングの基礎を身に着けました。

https://prog-8.com/

Progateでは下記コースを実施しました。

・HTML&CSS
・Git
・SQL
・Ruby
・Rails

### 実際に触ってみる
Progateを完璧にしたとしても、プログラミングが出来るようになったとは言えません。教材等のアプリを真似るのではなく、自分の作りたいアプリを考えて作ってみて、何度も壁にぶつかることでプログラミングのコツを掴めたかなと思います。

始めはRuby on Railsでアプリを作りました。AWSのサービスを利用することでAWSの勉強も兼ねる事が出来ました。

※アプリの構成イメージ(VPCやサブネット等の記載は省いて簡潔にしています)
<img width="450" alt="Railsアプリ.drawio.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2336182/40946915-2afc-2415-6a78-55636b6d2445.png">

# PythonとJavaScriptを学ぶ
Lambdaで主に使用されている言語といえばPythonとNode.jsです。(Lambdaでのこの二つの言語の使用率は9割になるみたいです。)またJavaScriptが書けるとAPIでLambdaと連携したアプリの作成が行えます。
これらを理由にまずPythonとJavaScriptを学習する事にしました。

それに加えて、機械学習やAIに最適な言語であるPythonとフロントエンドに必須の言語であるJavaScriptを学ぶことで、今後の業務の幅を大きく広げられるのではと考えました。

## Python
Pythonを学ぶ際には下記教材を使用しました。

### [現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル](https://www.udemy.com/course/python-beginner/)
[Udemy](https://www.udemy.com/)のコースです。
基礎の説明だけでなく応用の内容が豊富なので、Pythonの取っ掛かりとしては最高のコースでした。

https://www.udemy.com/course/python-beginner/

### [AWS Lambda実践ガイド 第2版](https://www.amazon.co.jp/AWS-Lambda%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E7%AC%AC2%E7%89%88-impress-gear/dp/4295013307)
Pythonは主にLambdaで動かす予定でしたので、こちらの本でLambdaの学習を行いました。実例もPythonを使って書かれているので最適の書籍でした。
[<img width="200" alt="51vlB3JskRL.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2336182/8d202ba5-6ba0-2f07-a3b1-1597c3c7007f.jpeg">](https://www.amazon.co.jp/AWS-Lambda%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E7%AC%AC2%E7%89%88-impress-gear/dp/4295013307)

### 実際に触ってみる
Pythonに関しては、まず、AWSのLambdaを使って様々な処理を行ってみました。（EC2の自動停止、AWSの使用料金を毎日通知 etc）
JavaScriptを学習後にAPI Gatewayでフロントと連携させてのアプリ作成も行いました。

※アプリの構成イメージ
<img width="600" alt="Lambdaアプリ.drawio.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2336182/e32d2b86-5535-5f04-6b4b-a6a4bc03551b.png">

## JavaScript
JavaScriptを学ぶ際には下記教材を使用しました。

### [【JavaScript＆CSS】ガチで学びたい人のためのWEB開発実践入門（フロントエンド編）](https://www.udemy.com/course/front-dev-tutorial/)
[Udemy](https://www.udemy.com/)のコースです。
まずはこちらのコースでJavaScriptの基礎を学びました。JavaScriptだけでなくCSSの知識も学べるのでフロントエンドの学習の取っ掛かりに最適ですね。

https://www.udemy.com/course/front-dev-tutorial/


### [【JS】ガチで学びたい人のためのJavaScriptメカニズム](https://www.udemy.com/course/javascript-essence/)
先ほどのコースの同じ講師によるコースです。
JavaScriptのメカニズムについて学ぶことで、JavaScriptの理解度がさらに深まりました。

https://www.udemy.com/course/javascript-essence/


### [モダンJavaScriptの基礎から始める挫折しないためのReact入門](https://www.udemy.com/course/modern_javascipt_react_beginner/)
[Udemy](https://www.udemy.com/)のコースです。
AWSのAmplifyというサービスでアプリを作成するためにReactも学びました。素のJavaScriptとReactで同じアプリを作成するので、JavaScriptとReactとの違いを掴みやすかったです。

https://www.udemy.com/course/modern_javascipt_react_beginner/

### [Reactに入門した人のためのもっとReactが楽しくなるステップアップコース完全版](https://www.udemy.com/course/react_stepup/)
先ほどのコースの同じ講師によるコースです。より実践向けなReactの知識が学べました。

https://www.udemy.com/course/react_stepup/

### [AWS Amplify Studioではじめるフロントエンド+バックエンド統合開発](https://www.amazon.co.jp/AWS-Amplify-Studio%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89-%E3%83%90%E3%83%83%E3%82%AF%E3%82%A8%E3%83%B3%E3%83%89%E7%B5%B1%E5%90%88%E9%96%8B%E7%99%BA-%E6%8E%8C%E7%94%B0%E6%B4%A5%E8%80%B6%E4%B9%83/dp/489977530X)
Reactは主にAmplifyで使用する予定でしたので、こちらの本でAmplifyの使い方を一通り学びました。実例もReactが使用されており、Amplifyを利用するのには欠かせないGraphQLやFigma等の知識も学べるので大変素晴らしい本でした。(Reactの基礎知識もこちらの本で学べます。)
[<img width="200" alt="516-b4QCRxL.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2336182/3521ab5e-2d6e-49e3-b5fe-3293fad084cd.jpeg">](https://www.amazon.co.jp/AWS-Amplify-Studio%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89-%E3%83%90%E3%83%83%E3%82%AF%E3%82%A8%E3%83%B3%E3%83%89%E7%B5%B1%E5%90%88%E9%96%8B%E7%99%BA-%E6%8E%8C%E7%94%B0%E6%B4%A5%E8%80%B6%E4%B9%83/dp/489977530X)

### 実際に触ってみる
実際にAmplifyとReactを使ってオリジナルアプリを作成しました。

※アプリの構成イメージ
<img width="400" alt="Amplifyアプリ.drawio.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2336182/b03a17bd-d0d3-6680-8aad-4fc83f30bc13.png">

## PythonとJavaScriptを一緒に学ぶ
PythonとJavaScriptをまとめて学べる本もあります。
### [まとめて学ぶ Python＆JavaScript](https://www.amazon.co.jp/%E3%81%BE%E3%81%A8%E3%82%81%E3%81%A6%E5%AD%A6%E3%81%B6-Python%EF%BC%86JavaScript-%E4%BC%8A%E5%B0%BE%E6%9C%A8-%E5%B0%86%E4%B9%8B/dp/4296200259)
PythonとJavaScriptはほぼ同時期に学んだので、ややこしくなる部分が多々ありましたが、こちらの本は知識整理に大変役立ちました。

[<img width="200" alt="B0BMF1JFYQ.01._SCLZZZZZZZ_SX500_.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2336182/7154cff1-e117-cbbb-3e34-964613d34890.jpeg">](https://www.amazon.co.jp/%E3%81%BE%E3%81%A8%E3%82%81%E3%81%A6%E5%AD%A6%E3%81%B6-Python%EF%BC%86JavaScript-%E4%BC%8A%E5%B0%BE%E6%9C%A8-%E5%B0%86%E4%B9%8B/dp/4296200259)

# さらに深掘り

### [Kindle Unlimited](https://www.amazon.co.jp/kindle-dbs/hz/bookshelf)
kindle Unlimitedは月額980円で対象の本が読み放題のサービスです。
プログラミング学習に役立つような本もたくさんあります。最初から最後まで読破するというより、必要な内容だけチョイスして読むような使い方をしてます。また、ハンズオンの本も多いのでそういった本も活用しています。

### [良いコード/悪いコードで学ぶ設計入門](https://www.amazon.co.jp/%E8%89%AF%E3%81%84%E3%82%B3%E3%83%BC%E3%83%89-%E6%82%AA%E3%81%84%E3%82%B3%E3%83%BC%E3%83%89%E3%81%A7%E5%AD%A6%E3%81%B6%E8%A8%AD%E8%A8%88%E5%85%A5%E9%96%80-%E2%80%95%E4%BF%9D%E5%AE%88%E3%81%97%E3%82%84%E3%81%99%E3%81%84-%E6%88%90%E9%95%B7%E3%81%97%E7%B6%9A%E3%81%91%E3%82%8B%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9-%E4%BB%99%E5%A1%B2/dp/4297127830)
すべて独学なので、自分のコードが良いか悪いかの判断は難しいです。そのためこちらの本で学習しました。サンプルコードはJavaですが大変勉強になりました。

”さらにステップアップするための設計技術書”として『[リーダブルコード](https://www.oreilly.co.jp/books/9784873115658/)』や『[現場で役立つシステム設計の原則](https://www.amazon.co.jp/%E7%8F%BE%E5%A0%B4%E3%81%A7%E5%BD%B9%E7%AB%8B%E3%81%A4%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E8%A8%AD%E8%A8%88%E3%81%AE%E5%8E%9F%E5%89%87-%E5%A4%89%E6%9B%B4%E3%82%92%E6%A5%BD%E3%81%A7%E5%AE%89%E5%85%A8%E3%81%AB%E3%81%99%E3%82%8B%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%81%AE%E5%AE%9F%E8%B7%B5%E6%8A%80%E6%B3%95-%E5%A2%97%E7%94%B0-%E4%BA%A8/dp/477419087X)』など何冊か紹介されているのでこの辺りも読んでいきたいと思います。

[<img width="200" alt="41O4DhnAkIL._SY346_.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2336182/af705b54-b4f4-8801-89bc-d211673b0ce9.jpeg">](https://www.amazon.co.jp/%E8%89%AF%E3%81%84%E3%82%B3%E3%83%BC%E3%83%89-%E6%82%AA%E3%81%84%E3%82%B3%E3%83%BC%E3%83%89%E3%81%A7%E5%AD%A6%E3%81%B6%E8%A8%AD%E8%A8%88%E5%85%A5%E9%96%80-%E2%80%95%E4%BF%9D%E5%AE%88%E3%81%97%E3%82%84%E3%81%99%E3%81%84-%E6%88%90%E9%95%B7%E3%81%97%E7%B6%9A%E3%81%91%E3%82%8B%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9-%E4%BB%99%E5%A1%B2/dp/4297127830
)

# 最後に
プログラミングを学んだことでインフラエンジニアとしての業務の幅を広げるだけでなく、エンジニアとしての業務の幅を広げる事も出来たのではないかと思います。


まだまだ分からないことだらけなので、今後もインフラの勉強だけでなく、プログラミングの学習も続けていきたいです。