💡

【未経験エンジニア】勉強した内容とその理由

に公開

はじめに

この記事は未経験からエンジニア転職を目指している人間の記録のようなものです。
前提としては、Web系エンジニアの仕事に興味があり、そのキャリアを実現するために学んできたことをまとめてみました。

先に結論といたしまして、「保守性の高いシステムを構築することが重要である」ということを学習全体を通じて学ぶことができました。
現在ではテスト駆動を意識しながらクリーンアーキテクチャの構築を意識するようになりました。

各セクションごとに"学習内容"、"なぜ学習したのか"、"学習の成果"という3つの論点を中心にご紹介出来ればと思います。
もしよろしければ最後までご覧ください。

HTML, CSS, JavaScript 学習期間(2024年12月~)

情報収集を進める中で、まずはこの3つから学習を始めました。
Web系エンジアとして職種問わず、この3つの知識は必要だと考えたためです。
これらだけを学習したのは1週間程で、あとは実際にWebアプリを作っていく中で学習していきました。

Ruby on Rails,Ruby 学習期間(2024年12月~)


最初に学習した言語はRuby on Rails,Rubyです。

最初の言語選択にRailsを選んだ選理由としては、フレームワークを用いてバックエンドの開発だけでなく、フロントエンドも開発でき、初めてWebアプリ開発を行うのには最適だと考えたからです。
また、Railsは創始者である David Heinemeier Hansson 氏(通称 DHH)のRails Wayという設計方針に基づいて開発されています。
実際に私が行った事として、DHH氏が述べているよう[1]に、controller内で独自アクションの利用を避け、index、show、new、edit、create、update、destroyの7つのactionの利用を優先し、controllerの処理の見通しを良くしました。

これらの学習を通じてMVCの概念やRESTfulなどWeb技術の基礎的な考え方を身につけることができました。
最初の方は基本的な用語の意味や概念を理解するのに非常に苦労しましたが、その分収穫のある学習になったと感じています。
Railsを用いて1から基本的なCRUDと認証機能をつけたwebアプリケーションを作ることもできました。

React 学習期間(2025年1月~)


次に学習したのはReactです。

フロントエンド開発の学習を始めるにあたって、まず最初に参考にしたのは世界中で多くのフロントエンドエンジニアの指針となっている、roadmap.sh のFrontend Developer Roadmapです。
このロードマップではフロントエンドの視点から、何をどこまで学ぶかと言うことがわかりやすくまとめてあります。

Reactはコンポーネントベースの開発手法や仮想DOMといった革新的な仕組みによって、シンプルかつ効率的なUI構築が可能になったということを学びました。
学習を進める際はこちらの「Reactの流儀」 に沿いながらクリーンアーキテクチャ(Reactの単一責任等)の構築を意識しました。

このようなReactの特徴を踏まえ、現在のフロントエンド開発においてReactが多く利用されている[2]理由を理解し、自分もそのスキルを身につけるべきだと考えました。

Next.js 学習期間(2025年1月~)

Reactと同時にNext.jsの学習も始めました。
Reactの公式ドキュメントにも、下記のように何らかのフレームワークを用いることが推奨されていることが理由です。
また、両者ともメンテナーがそれぞれの制作会社(Next.jsはVercel、ReactはMeta)であり、
学習後にサービスがすぐに廃れるといったリスクが低く、知識が無駄になりにくいと考えました。

"React だけで新しいアプリやウェブサイトを作りたい場合は、コミュニティで人気のある React フレームワークから、ひとつを選ぶことをおすすめします。
~中略~
フレームワークを使ってスタートすることで React での開発を素早く立ち上げ、後で実質的に独自フレームワークのようなものを作ってしまわずに済むようになるでしょう。"
引用:React公式ドキュメント

中でも、Next.jsはサーバーサイドレンダリング(SSR)やファイルベースルーティングなど多くの機能を提供しており、開発会社Vercelが同名のプラットフォームVercel上でデプロイ/ビルド/配信できる点は学習コストを鑑みても最適だと考えました。

このようなNext.jsの機能を活用しながら「Next.js」+「TypeScript」+「Firebase」を使用し、Todoアプリを作成することができました。
作成したアプリはデプロイするだけでなく、テスト駆動を意識しながら開発を行い、「GitActions」によるテストの自動化を行ったことでCI/CDの基本的な流れも学びました。

TypeScript 学習期間(2025年1月~)

未経験から学習を進める際に、上記Javascriptの関連ライブラリに追加でTypeScriptの学習を行いました。
学習を進めていく中で、TypeScriptの最大の特徴である「静的型付け」によるメリットを学ぶことができました。
具体的には、開発中に型による静的なチェックが働くことで、実行前に多くのエラーを発見できるようになりました。これにより、「実行してみたらエラーが出た」という状況が減り、開発効率が向上したと感じています。
例えば、関数の引数に意図しない型の値を渡してしまったり、オブジェクトに存在しないプロパティにアクセスしてしまったりといったミスを、コンパイル時にTypeScriptが教えてくれるため、安心してコードを書けるようになりました。
自身でTodoアプリを開発する際にも、これらのTypeScriptの恩恵を深く感じることができました。型定義のおかげで、より安全で信頼性の高いコードを書くことができ、開発を通してTypeScriptの強力さを実感しました。特に、ReactやNext.jsといったライブラリとの相性も良く、型情報を活用したよりスムーズな開発体験を得ることができました。

Git、GitHub 学習期間(2024年12月~)

エンジニアとしてキャリア形成を行う上で必須になると考え学習を行いました。
リポジトリの作成、クローン、コミット、ブランチの作成・切り替え、マージ、リベースなどの基本的な操作を学習するだけでなく、チーム開発を想定し、プルリクエストを活用したコードレビューの流れも学習しました。

SQLite,MySQL 学習期間(2024年12月~)

2つともRailsにて使用したDBになります。
SQLiteはRailsの初期設定で使用し、基本的なCRUD操作(データの追加・取得・更新・削除)やマイグレーションの仕組みを学びました。
Docker学習後は開発環境としてMySQL,PostgreSQLを採用し、Dockerを利用してコンテナ上でデータベースを構築し、SQLクエリの発行やテーブル設計の実践を経験しました。

Firebase 学習期間(2025年1月~)

Next.jsを用いたWebアプリケーション開発において、バックエンドの構築を簡略化する目的でFirebaseを学習いたしました。上記の組み合わせで開発したアプリをVercel上にデプロイし、実際の動作を確認しました。

CI/CD 学習期間(2025年2月~)

2月時点で自身でアプリを作成し、デプロイするという流れは把握しておりましたので、より品質の高いアプリにするためにテスト駆動を意識しながら開発を行いました。
「GitHub Actions」を用いて、開発用ブランチへのプルリクエスト作成・プッシュ時に自動でテストコマンドが実行されるCIフローを構築しました。テストがすべて成功した場合のみ、メイン(master)ブランチへのマージが可能となるよう設定し、品質の担保と開発効率の向上を図りました。

ReactTestingLibrary(RTL),Jest 学習期間(2025年2月~)

Next.jsで開発したアプリケーションのテストを実施するため、React Testing Library (RTL) および Jest を学習いたしました。

コンポーネント単位でのテストを行い、ユーザーインタラクションに対する適切な挙動を検証するユニットテストの実装に加え、主要なコンポーネントが正しく連携することを確認するため、フォームの入力やボタンのクリック処理などのシナリオテストを実装いたしました。
また、外部APIやFirebase Firestoreとの通信を模擬するモック関数を活用し、依存関係を切り離したテストの実装を経験いたしました。
最終的にそれらをCI/CDの一環として、上記の自動テストの設定を行い、コード変更時にテストが自動実行される環境を構築いたしました。
これらの学習を通じて、Reactコンポーネントの品質向上を目的としたテストの重要性を理解し、開発において適切なテストを導入できるようになりました。

Docker 学習期間(2025年2月~)

チーム開発や環境構築の効率化を目的として、Dockerを学習いたしました。
Dockerの基本操作であるコンテナの作成・起動・停止・削除、イメージの管理、Dockerfileを用いた環境構築の自動化を学習しました。

Aamazon Web Service CLF(資格) 学習期間(2025年2月~)

インフラにAWSを利用している企業は多く存在し、その概念を知ることは必須と考え、
AWS Certified Cloud Practitioner(CLF)資格の取得を目指し、AWSの主要サービスや概念を学習しました。
単に資格取得のための知識を学ぶだけではなく、インターネットの仕組みやクラウド技術の基礎的な部分から深堀りをしながら学習を進めました。

おわりに

学習を通じて、単に機能するコードを書くだけでなく、保守性の高い、より洗練されたコードを書くことの重要性を強く認識しました。

初期の頃は新しい技術を学ぶことに必死でしたが、学習が進むにつれて、コードの可読性、拡張性、そしてテストの重要性を痛感するようになりました。その結果、現在ではテスト駆動開発を意識し、クリーンアーキテクチャに基づいたシステム設計を目指すようになりました。

未経験からの挑戦ではありますが、この学びを通して得た「保守性の高いシステムを構築する」という意識を常に持ち続け、今後のエンジニアとしてのキャリアを築いていきたいと考えています。

脚注
  1. https://postd.cc/how-dhh-organizes-his-rails-controllers/
    これはRailsの設計原則の設定より規約 (Convention over Configuration) という思想に基づいています。 ↩︎

  2. https://npmtrends.com/react-vs-vue ↩︎

Discussion