29歳でWEBアプリケーションエンジニアに転職した話

株式会社GoQSystemでバックエンドとインフラを担当しています、@RH0909です。

https://goq.co.jp?qiita

私は実務未経験から独学でWEBアプリケーションエンジニアに転職（GoQSystemに入社）しました。
どうやって・なぜエンジニアになったのか、なってどうだったか、エンジニアである上で大切だと感じていることを話していきたいと思います。
エンジニアへのキャリアチェンジを考えている・挑戦している人の参考になれば幸いです。
GoQSystemについても興味を持ってもらえると嬉しいです。

## エンジニアになる前
20台前半はバイトとクライミングや登山などに明け暮れて、アメリカに留学したり、自由気ままに生活し、24歳手前で初めて俗に言う社会人になりました。
自動車部品製造会社で営業とプロジェクトマネジメント業務を約4年、経営を勉強したいと考えて飲食店を経営し、29歳目前にしてエンジニアを目指すことにしました。

## プログラミングとの出会い
きっかけは些細なことでした。上述している飲食店を立ち上げるにあたり店舗のホームページを作ろうと思いましたが、外注は高い、ノーコード系のサービスはイメージ通りにできない、なら自分で作ろうと勉強し始めました。これがプログラミングとの出会いでした。
プログラミングは理系出身の一部のすごい人たちがやるものと思っていた私にとって大きな成功体験となりました。

## なぜエンジニアになろうと考えたのか
私は周りのみんなが楽に働けるように業務改善したり仕組みを作るのが大好きです。
会社という組織に所属するようになってから多くの改善業務を行なってきました。しかし、例えば手書きだったものをエクセルに置き換えて計算式を足したところで限界があり、いろいろと挫折したことも多く、それならシステムを作ろうと思い立ちプログラミング（その時はC言語）を勉強したこともありましたが、なかなかうまくいかず挫折してしまいました。

なので上述したプログラミングとの出会いは実際は2度目の出会いだったわけですが、HTMLとCSSという厳密にはプログラミング言語ではないもののプログラムを書いてHPを作れた体験が、やればできるんだなという気持ちにさせてくれ、業務改善システムを作りたいという想いを再び呼び起こしました。

熱が入るとそこに向けて一直線な性格のため、すぐにエンジニアになると決意し勉強を開始しました。
（今思えば、HTMLとCSS少し書けたぐらいでよく決意したものだと思います。）

![23074647.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/765794/d25c87a5-5553-eb0b-faf6-7f8395b50bb3.jpeg)

## どうやって何を勉強したか
エンジニアになると決めてから約2週間どんな知識を学習するか、どうやって学習するかリサーチを行いました。
WEBアプリケーションエンジニアリングの知識はWEBに溢れており、YoutubeやUdemy、ドットインストールやProgateなどを利用すれば独学で十分学べるとわかったので、私は独学という選択をしました。

プログラミング言語はRuby、フレームワークはRuby on Railsを選択しました。
PHP/Laravelと最後まで迷いましたが、調べた中でRuby/RoRの方が最新バージョンの教材が豊富だったため選択しました。

約1ヶ月、ProgateとUdemyとYoutubeでWEBアプリケーション構築の基礎を学びました。
その後、ポートフォリオ作成に1ヶ月、その後1ヶ月インフラの学習と構築に充てました。
学習期間はリサーチ期間と合わせて約4ヶ月です。

自分は仕事を辞めて勉強したので約4ヶ月毎日18時間くらい勉強していました。

## どんなポートフォリオを作ったか
ポートフォリオでよく作成されているToDoアプリケーションを作成しました。
最初に前職で作りたいと考えていた図面管理システムを作成していたのですが、業界知識がないとこのサービスの有用性が選考時うまく伝わらない可能性が高く、また最終的にコア機能を実装するのがこの時点では難しく断念し、学んだことを単純にアピールしやすいアプリケーションを作成しました。
ただ今見返してもよく作ったなと思います（笑）特にインフラは泣きながら構築しました。

【使用技術】
Ruby 2.6.6/Ruby on Rails 5.2.4.3
MySQL 5.7
Nginx, Unicorn
AWS (VPC, EC2, RDS, Route53, ALB、ACM, S3)
CircleCI
Capistrano
Rspec/Rubocop
Docker/docker-compose

※ 現在お見せできるものはないですが、よほどの要望があれば公開する日が来るかもしれません。

![22787282.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/765794/d1408eda-1e3d-35a6-f00c-26041ee27d8e.png)


## 就職活動
業務改善系WEBアプリケーションを 提供していて、メジャーな言語・フレームワーク + Docker + CircleCI or Jenkins + AWS or GCP を利用している中小企業に絞って応募する企業の選定を行いました。

業務改善系WEBアプリケーションは私がエンジニアになると決意し、作りたいと考えたサービスだからです。

いわゆるモダンと言われる技術を使用しているという点については、年齢（29歳）を大きく考慮しました。
エンジニアリングの中でもアプリケーション領域の技術は移り変わりのスピードが恐ろしいほど早く、キャッチアップが大変です。
そのため業務で先端技術（先端とはいえメジャーに採用されているもの）に触れなければキャリア構築が難しくなると（悠長にしている時間がない）、逆に言えばここをつかめば後々キャリア選択の幅が広くなるのではないかと考えたからです。（この選択は間違ってはいないと今も思います。）

中小企業という点は、これも年齢が大きく関連しており、キャリアを考えるとなるべく早く大きく多様な経験を積む必要があると考えていました。中小企業は慢性的に人手不足なので最適と考えました。
なぜスタートアップ（若いベンチャー含む）ではないかというと、当然ですがビジネスとして成り立っていないですし、そこにいる人も未成熟である可能性が高い。さらにCEOや役員、同僚が全員年下の可能性もあり、精神的な負担が大きそうだったので現時点で選択するにはリスクがあると判断しました。

問題は当時私は広島に住んでおり（現在は千葉在住）、中国地方で就職したいと考えていましたがWEBアプリケーションを自社で提供し、モダンな開発環境を持った会社など皆無でした。
東京に行くことも考えていたのですが、そんな時に出会ったのが山口・広島で自社WEBアプリケーションを開発・運用しているGoQSystemでした。

面談でGoQSystemが提供しているサービスと使用している技術スタックと自分がしたいことが見事にマッチしていたので、入社を決めました。

## エンジニアになってどうだったか
やはり技術のキャッチアップが大変でした。GoQsystemはPHP/Laravelを採用していることもあり、まずはPHPの学習から始まりました。
またコード量が個人開発とは桁違いなので、コードを読むのも一苦労でした。
入社して数ヶ月は朝5時に起きて出社前に勉強し、退社後も家で数時間勉強していました。（今はそこまでではないですが1日数時間は勉強しています。）

ただ新しいことにチャレンジできることが楽しく、辛いなどの気持ちは一度も思ったことはありません。
私は勉強すれば勉強するだけスキルが上がる（給与も？）この世界がとても性に合っており、エンジニアになって本当によかったと思っています。

![23142912.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/765794/280b18e5-1451-8e09-7b49-a1accff89347.png)

## エンジニアとして必要だと思うこと
最後に実際にエンジニアになってみて感じた、エンジニアとして大切だと思うことを紹介します。
技術力と経験は言わずもがななので割愛します。
#### **プログラミングは手段であることを理解すること**
プログラミングやWEBアプリケーションは現実に存在する問題を解決する手段でしかありません。（もしくは何かを進化させたり、単なる代替手段）
他により良い手段が出現すれば必要とされなくなるでしょう。
エンジニアは提供するサービス（= アプリケーション）が何を解決するのかを常に考え、設計を行う必要があります。
そのためにはエンジニアリング以上に解決しようとしている問題（= ビジネス）についても知る必要があります。

#### **エラーと向き合う力**
まだ短いエンジニア人生ですが、エラー文をしっかりと読まないエンジニアをよく見かけます。稀に発生しているエラーとはかけ離れたエラー文に出会うこともありますが、まだ経験が浅いうちに出会うエラーは世界中の多くのエンジニアが遭遇しており、Googleで調べれば解決します。
読むだけでも理解できることが多いです。エラーを恐れず、エラー文はよく読みましょう。エラー文から学ぶことはたくさんあります。
今でも（特に新しいことにチャレンジするとき）エラーを出しながら、エラーに修正点を教えてもらいながらコードを書くことがよくあります。
駆け出しの段階でエラーから逃げていると難しいエラー（= 不具合や新しいこと）に遭遇した時に対応できません。

#### **常に学ぶ意欲**
Googleで調べればいいのではないかということも言われますが、知らないとそもそも調べれません。（検索結果が正しいとも限らない）
またプログラミング言語やフレームワークだけがアプリケーションを構成しているのではありません、セキュリティのこと、ネットワークのこと、ミドルウェアのこと、データベースのこと、テストのこと、ロギングのこと、エンジニアは多くのことを知っている必要があります。
都度必要に応じてこれらの知識を得るには無理があります。（浅く知っておいて、深掘りはその時にすればいい）
OSSや先輩エンジニアが書いたコードを読むこともとても大切です。
エンジニアは自分で常にモチベーションを保ち知識を増やす、スキルアップを行う努力をする必要があります。

#### **キャリアプランを持つ**
上述した「常に学ぶ意欲」を保つためには、自分が目指す姿を描けているかが重要です。
エンジニアは本当に多くのことを学ぶ必要がありますが、膨大すぎて何を勉強すべきか迷うことも多々あります。
自分がなりたいエンジニア像や、進みたいキャリアが明確になっているほど、学習すべきことが明確になりモチベーションも保ちやすいです。
ノートなどに書き出すなどして定期的にキャリアプランをブラッシュアップすることをオススメします。（マインドマップサービス使うのもオススメ）
ただ人の心は変わりやすい（年齢やライフステージも変化する）ので最初に決めたプランに無理に固執せず、柔軟に変更すればいいと思います。

#### **コミュニケーションスキルを磨く**
エンジニアはヘッドフォンをつけて音楽聴きながら誰にも邪魔をされない環境で仕事をしているイメージかもしれませんし、それを望んでいるかもしれませんが、多くの場合そうではありません。
ヒーロー級エンジニアでない限り、日常的なコミュニケーションが必要ないことはないと考えておくべきです。
同僚との何気ない会話も大切ですし、大きな規模の会社でなければ誰もがビジネス側の同僚や経営層とサービスについて会話する可能性が高いです。
コミュニケーションスキルも多岐に渡りますが、ビジネスパーソンとしてのキャリアを大きく広げるスキルであることに間違いないのでエンジニアリングスキルと共に「聞く・話す・書く」のスキルアップを行うことをオススメします。

## 最後に
#### **GoQSystemでは一緒に働いてくれる仲間を募集中です！**
ご興味がある方は以下リンクよりご確認ください。

https://goqsystem.recruit.site?qiita=