体育大卒&未経験の私がエンジニアに転職するまでのプログラミング学習の振り返り

## はじめに
RUNTEQにてプログラミング学習を経て、未経験からのエンジニアに転職したタナチューと申します。
この度、無事にエンジニア転職できましたので、これまでのプログラミング学習の振り返りをしたいと思います。これからエンジニア転職される方の少しでも参考になれば幸いです。

## プログラミング学習前の状態
プログラミング学習前の私の経歴は以下の通りです。
・体育大学卒(保健体育の教員免許取得)
・社会人経験4年弱(営業職)
こんな感じで、プログラミングどころか、ゴリゴリの体育会系に属していました。
そんな私がエンジニアを目指したのは「自分の"思い"が"形"となるところ」に面白さを感じたからです。後に紹介しますが、ポートフォリオの「SwimFirst」は私がまさに体育の教員を目指していたときにやりたかったことをアプリとして実現したものになります。ここは深掘りすると記事1本かけてしまうので、割愛させて頂きます。

## 1年間の学習結果とポートフォリオ
プログラミング学習の振り返りに入る前に私の1年間の学習成果をお伝えします。
#### 学習期間
2024年1月〜2025年2月

#### 学習内容
HTML、CSS、Git操作、Linux、Docker、SQL、JavaScript、Ruby、Ruby on Rails、RSpec、インフラ(Heroku, Cloudflareを使ったドメイン取得)

### ポートフォリオ([SwimFirst](https://swimfirst.net/))
##### アプリ概要
水泳選手のコンディションをコーチが容易に把握できるツール系サービスです。

[![Image from Gyazo](https://i.gyazo.com/a5dca603ea41b5cf2e214ac3d4a7de98.jpg)](https://gyazo.com/a5dca603ea41b5cf2e214ac3d4a7de98)
##### 使用した技術スタック
| カテゴリ     | 技術スタック |
|----------|------|
| フロントエンド | Rails 7.2.2 (Hotwire/Turbo/Stimulus), JavaScript, Tailwind CSS, daisyUI |
| バックエンド | Rails 7.2.2 (Ruby 3.2.3) |
| データベース | MySQL |
| インフラ | Heroku |
| 開発環境 | Devise, Googleログイン |
| 認証 | MySQL |
| API | OpenAI API |

#### 機能一覧
##### 【主要機能】
> (1) コンディション機能: 疲労度、睡眠時間、体温データを管理
> (2) フィジカル機能: 身長、体重、体脂肪率データを管理
> (3) トレーニング機能: 指導者はメニュー作成時に運動強度を設定、選手は設定された運動強度に対して、フィードバックとして心拍数を入力
> (4) AI日誌機能: 日々のトレーニング日誌を記録し、AIがフィードバックを提供
> (5) レコード機能: 自己記録を投稿
##### 【その他】
> - Google認証によるユーザー登録・ログイン機能
> - Deviseを用いたユーザー登録・ログイン機能
> - パスワードリセット機能
> - メール認証機能
> - 検索機能(選手名、コンディションデータ、フィジカルデータなどの検索)
> - グラフ機能(コンディションデータ、フィジカルデータのグラフ表示)
> - CSV出力機能(コンディションデータ、フィジカルデータのデータ出力)
> - メンバー招待機能(指導者はチーム独自の招待URLを発行し、選手はURLから選手登録を行う)
> - 各機能の操作ガイドをモーダルで表示(メンバー招待機能に関しては、新規登録後に1回のみ表示させる)

## プログラミング学習の振り返り
#### 独学時代(2024年1月〜2024年3月中旬)
これまでThe体育会系で人生を歩んできた私は最初からプログラミングスクールで学習するのはハードルが高いと考え、まずは独学でプログラミングを学習をすることにしました。
独学内容は以下の通りです。
> **Udemy**
Udemyの講座を一通り受講し、JavaScriptを使って簡単なWebアプリケーションを作成しました。膨大な量でしたが、一つ一つの授業が丁寧に作られており、JavaScriptの概要をある程度は理解できたと思います。
[【世界で90万人が受講】Web Developer Bootcamp](https://www.udemy.com/share/105qh83@DKt3CWgsAXwWIIl5uQFo3bYxChGPJwlWD3OCoYm6SYW7dFDOcFh664XrZkk7m3S5Yg==/)
> **JavaScript入門書**
Udemyの講座と同時並行で入門書のサンプルコードをひたすら写経しました。
[JavaScript[完全]入門](https://www.amazon.co.jp/JavaScript-%E5%AE%8C%E5%85%A8-%E5%85%A5%E9%96%80-%E6%9F%B3%E4%BA%95%E6%94%BF%E5%92%8C/dp/481560763X)

独学にかけた期間は約３ヶ月間です。プログラミングスクールに入る前にプログラミングがどんなものなのか知ることができ、「これならやっていけそうだ!」と感じたので、RUNTEQを受講することにしました。

#### RUNTEQ時代(2024年3月中旬〜2025年2月)
RUNTEQでは基本的に与えられたカリキュラムをひたすらこなしていき、アプリケーションに必要なスキルを習得していきます。
カリキュラム詳細は割愛させて頂きますが、これまでのプログラミング学習内容を独自の基準で自己評価してみました。

| 項目     | 指標内容 |
|----------|------|
| **全体像の把握** | バックエンド・フロントエンド・インフラの役割をざっくり理解し、どの技術が何を担当しているか理解できているか |
| **Railsの深掘り** | ActiveRecord、非同期処理（Job）、認可・認証、セキュリティ、テスト（RSpec）をしっかり習得できたか |
| **フロントエンド理解** | HTML/CSS/JavaScriptの基礎を固め、次にReactやVueなどのモダンFWを触れたか |
| **API設計** | RailsでのAPIモードや、REST・JSON・クライアントとのやり取りの考え方を理解できたか |
| **Git運用** | 実務レベルのGit（ブランチ戦略、PRレビュー、rebase、stashなど）を理解して活用できたか |
| **チーム開発スキル** | コードの読みやすさ、命名、コメント、レビュー対応など、チームでの「伝わるコード」を意識できたか |
| **環境構築力** | DockerやVSCode、各種CLIツールなど、開発環境を自分で整える力を身につけられたか |
| **SQLやDB設計** | N+1の回避、インデックス、正規化・非正規化、ER図作成など、DB周りの設計力を身につけられたか |
| **顧客視点を持つ** | 「誰のための機能か？」「納期・コスト感」などビジネス視点を持てたか |
| **学び続ける姿勢** | 技術は変わり続けるので、RSS、Qiita、Zenn、Techブログなどで習慣的にキャッチアップできたか |

#### 自己評価(10点満点中)
[![Image from Gyazo](https://i.gyazo.com/a74c64ef877959d0af7fb78a7eab8727.png)](https://gyazo.com/a74c64ef877959d0af7fb78a7eab8727)

<details><summary>全体像の把握(8点)</summary>
アプリケーション開発において、どのような技術が必要なのか全体像を理解することができました。
</details>
<details><summary>Railsの深掘り(8点)</summary>
ポートフォリオではフロントエンドもRuby on Railsでコードを書いたので、Railsの深掘りもしっかりとできたと思います。ただ、非同期処理(Job)やエラーハンドリング、テストに関してはもう少し意識すればよかったです。
</details>
<details><summary>フロントエンド理解(4点)</summary>
JavaScriptは活用できましたが、React・Next.jsのキャッチアップができなかったので、評価は低めです。もう少し、早めにカリキュラムを終わらせフロントエンドの学習に時間を費やしていればよかったなと思います。
</details>
<details><summary>API設計(3点)</summary>
上述した通り、フロントエンドもRailsを使用したので、Rails APIを使用していません。JSONやクライアントサーバーとのやり取りの理解が不足していると感じています。
</details>
<details><summary>Git運用(7点)</summary>
通常のGit操作はできるようになりました。しかし、rebaseやstashはあまり使用しておらず、コミット粒度もバラバラなので、今後、意識してコミットしていきたいと思います。
</details>
<details><summary>チーム開発スキル(2点)</summary>
チーム開発経験はできなかったので評価は低めです。プルリクエストのメッセージも自分にしか理解できないようなメッセージのため、今後はチーム開発を意識したコメントを書くようにしたいです。
</details>
<details><summary>環境構築力(3点)</summary>
Dockerに関してはテンプレートを使用してしまったので評価は低めです。Dockerfileやcompose.ymlの記載方法についてはざっくりしか理解できていないので、今後は自分で整えられるようにしていきたいです。
</details>
<details><summary>SQLやDB設計(5点)</summary>
中間テーブルはうまくアプリケーションで取り入れることができました。SQLなどは操作はデータ出力はできますが、頻繁には活用できていなかったため、評価は低めです。
</details>
<details><summary>顧客視点を持つ(9点)</summary>
ユーザーのことをしっかりと考えながらアプリケーションを開発することができました。自己満足のアプリではなく、「本当に必要な機能は何か？」を考えながら実装できたので評価は高めです。
</details>
<details><summary>学び続ける姿勢(9点)</summary>
記事は書かなかったですが、継続して学習できたため、評価は高めです。今後は学習時にもっと集中できるように色々と工夫していきたいです。
</details>

:::note info
#### プログラミング学習中にやってよかったこと
##### 学習の仲間を作る!
私にとって学習仲間を作ることはとても重要でした。これはメンタル面で大いに助けられました。プログラミング学習はエラーとの戦いなので、頻繁に挫折します(笑) 当初立てた目標設定に届かないこともよくありました。その中でも一緒にプログラミング学習を頑張っている仲間をRUNTEQ受講中に作れたのはとてもよかったと思います。プログラミングスクールはちょっと...という方でもXとかでも勉強内容を発信している人はいるので、一緒に励ましあえると良い刺激になるかと思います。
##### 自己分析を徹底的に行う!
未経験からエンジニアを目指す方には、私のように完全な異業種から挑戦される方も多いのではないかと思います。その中で徹底的な自己分析ができたおかげで「なぜエンジニアになろうと思ったのか？」「エンジニアになって最終的に何がやりたいのか？」の解像度を上げることができました。これまでの経歴からエンジニアになるまでのストーリーを作り上げて、第３者にも納得してもらえるくらいに壁打ちできると良いかと思います。
:::

:::note warn
#### プログラミング学習の反省点
##### エラー解決に時間をかけてしまった
恥ずかしながら、当初はエラーが出ると解決できずに4日も放置してしまうこともありました。いつまでもエラーが解決できずにずっと停滞状態が続いて、モチベーションが下がってしまうこともありました。現場ではスピード感が求めらると思いますが、エラー解決に4日もかかっていては、正直戦力としてはマイナスだと思います。わからないことは自分なりに調べた上で、すぐに聞くことが大切だと学びました。
##### カリキュラムに時間をかけすぎてしまった
カリキュラムに時間をかけすぎて、新しい言語(ReactやNext.jsなど)のキャッチアップができなかったことに後悔しています。先ほどと同じことが言えますが、とにかくプログラミングの世界では時間をかけていては一瞬で置いてかれてしまうことを実感しました。私と同じタイミングで入った同期はプログラミング学習初心者であるのにも関わらず、最終的にReact / Next.jsもしっかりとキャッチアップしており、自分自身の学習計画が甘かったなと痛感しています。
##### ネットワーク、インフラ、Web技術周辺の理解が浅い
とりあえず、アプリケーション一つを完成させることに意識が向きすぎて、細かな仕組みの理解が浅かったなと感じています。今ではChatGPTなどを活用して用語理解をしていますが、よくわかっていないまま実装を進めてしまったので、同じような実装をするときにも時間がかかってしまってしまったことが悔やまれます。
:::

## 最後に
未経験からのプログラミング学習は決して甘いものではなく、最初のうちは困難の連続でした。ただ、今なら1年前の自分に何か言うとすれば「プログラミングスキルを身につけて良かったよ」と言ってやりたいです。プログラミングスキルを身につけたことで、これまでThe 体育会系で進んできた私にも違うキャリアの方向性が見えてきました。おそらく、これからも困難なことがたくさんあると思いますが、「自分の進んだ道は正しかったんだ」と思えるように精進していきたいと思います。異業種からエンジニアを目指す方、ファイトです！