はじめに
2024年は私にとって、楽しくやりがいがあり、そしてとても大変な1年でした。この年の4月から株式会社シンシアでWEBエンジニアとしてのキャリアをスタートし、それから12月までの約9か月間、とても多くのことを学ばせていただきました。
このブログを書く目的は、これまでの経験や身につけたスキルを可視化し、自分がどのように成長してきたのかを振り返ることです。そして、それを踏まえて、これから学ぶべき分野や取り組むべきことを整理し、次のステップに繋げることを目指しています。
さらに、本記事では未経験からエンジニアとしてのキャリアをスタートさせた私の1年目の経験を可視化することで、これからエンジニアを目指す方々にとって実務経験1年目を具体的にイメージしやすくするとともに、日々の学習のモチベーションになればという思いも込めています。
2024年に学んだことを振り返りながら、自分にとって必要なスキルや技術、そしてその学び方を見つめ直していきたいと思います。このブログが、同じように未経験からエンジニアを目指す方々や、成長を目指している方々にとって少しでも参考にれば幸いです。
実務で経験したことの振り返り
(4月) 自社開発のプロジェクト - Rails
4月は自社開発のプロジェクトに参加し、初めて実務のコードに触れる経験をしました。それまでの学習では、自分が書いたコードを自分で修正したり、追加したりすることしかしておらず、実務で他人が書いたコードを扱う難しさに直面しました。どこをどう修正すればよいのか分からず、頭が真っ白になったことを今でも鮮明に覚えています。
振り返れば、当時取り組んでいた機能の修正や追加は、それほど難しいものではありませんでした。しかし、そのときはとても複雑に感じ、デバッグの方法や調べる力、原因を考える力が全く足りていなかったことを痛感しました。先輩に頼らなければ解決できないことが毎日のようにあり、未経験からの転職の1社目がフルリモートでなくて本当に良かったと思います。直接相談できる環境が、成長の大きな助けになりました。
また、チーム開発におけるGitの使い方にも苦戦しました。特に、ブランチを切るタイミングやその使い方のイメージが全く湧かず、勉強が足りなかったことを痛感しました。しかし、職場の方々が丁寧に教えてくださり、一つひとつ理解を深めることができました。優しい方々に恵まれた環境で、初心者の私を温かくサポートしていただけたことに、今でも感謝しています。
この月は毎日ダメダメだなと思いながらフラフラで仕事をしていましたね。
(5、6月) 業務系アプリその1の受託開発のプロジェクト - React + Nestjs
5、6月は業務系アプリその1の受託開発プロジェクトに参加しました。このプロジェクトでは、主にフロントエンドを担当し、React(TypeScript)を使って機能を実装しました。しかし、フロントエンドの開発は想像以上に大変で、特にドラッグ&ドロップ機能の実装に苦労しました。どのように手を付ければ良いのか分からず、途方に暮れたのを今でも覚えています。
そんな中、先輩エンジニアが簡単なプロトタイプを用意してくれたおかげで、一歩ずつ作業を進めることができました。また、AIのClaudeを活用することで、効率的に問題を解決しながら開発を進めました。例えば、わからないことがあるたびにClaudeに質問を投げかけ、その回答をもとにコードを調整するというサイクルを繰り返しました。このとき、AIにすべてを丸投げするのではなく、自分で方向性を示した上で適切な指示を出すと、より正確な回答が得られることを学びました。
特にドラッグ&ドロップ機能の実装では、JavaScriptのイベント処理やDOMの操作に苦労しながらも、多くの学びを得ることができました。フロントエンド特有の課題に直面することで、問題解決力や実装スキルが磨かれた1ヶ月だったと思います。このプロジェクトを通じて、フロントエンド開発の難しさと楽しさを深く実感しました。
(7月から10月) 業務系アプリその2のプロジェクト - React + Nestjs
7月から10月にかけて、業務系アプリその2の受託開発プロジェクトに参加しました。このプロジェクトでは、初めに要件が固まっていない機能についてのヒアリングや提案から関わらせていただきました。「ざっくりとこういう機能を作りたい」という要望をもとに、提案資料を作成し、その後のDB設計や実装を進めるなど、幅広い業務を経験することができました。
このプロジェクトでは主にバックエンドの開発を担当しました。当初はバックエンド開発に苦手意識がありましたが、4か月間の取り組みを通じて、だんだんと慣れることができました。特にSQLを多く書く機会に恵まれ、複数のテーブルから必要なデータを引き出して実装するスキルを磨くことができました。複雑な処理についても、まず日本語で処理を整理して考えることで、徐々に対応できるようになったと感じています。
また、タスク管理や資料整理にも力を入れ、次にプロジェクトに参加する人がスムーズに作業を進められるよう情報をまとめるなど、主体的に行動することの重要性を学びました。
この期間を通じて、提案から設計、実装、タスク管理まで幅広い業務を経験し、大きな成長を実感できたプロジェクトでした。特にバックエンド開発における自信を少しずつ積み上げることができた貴重な時間だったと思います。
(11月、12月) モバイルアプリ 0 → 1開発 - Expo(react native) + Nestjs(GraphQL) + AWS + Terraform
11月と12月は、モバイルアプリ開発の受託プロジェクトに参加しました。このプロジェクトは現在進行中で、認証周りやバックエンドのセットアップ、インフラのデプロイなど、幅広い業務を一通り経験する機会をいただきました。
特にFirebaseを使った認証機能の実装では、LINE認証などのカスタム認証をExpoでセットアップする際に苦労しました。iOSとAndroidそれぞれで設定が異なり、数多くのハマりポイントに直面しましたが、一つひとつ原因を調べ、「コードの問題か」「Android StudioやXcode側の設定なのか」を見極めながら進めることで、徐々に課題を解決する力を身につけることができました。また、Expoで実機確認用のプレビューをビルドし、iOSではテスト配布、AndroidではDeployGateを活用して配布を行い、実機での動作確認も行いました。
バックエンドでは、GraphQLを採用し、初めて触れる技術に戸惑いながらも学びを重ねました。特にPush通知の実装では、バッチ処理をCronにセットして実行する仕組みを構築するなど、新しい技術へのチャレンジが多い業務でした。また、バックエンドのDB設計も担当し、複雑なデータ構造に対応する設計の考え方を学ぶ良い経験になりました。
インフラ面では、AWSのLightsailを利用して仮想サーバーを構築し、バックエンドやアプリをデプロイしました。Ubuntu上でコマンドを打ちながらデプロイの流れを掴み、データ通信の仕組みや基礎的なインフラ知識を学ぶことができました。複雑なECS構成ではなく、シンプルな方法でデプロイを進める中で、後々ECSなどへの応用も可能になると感じています。
今回のプロジェクトでは、一人で担当する範囲が広かった分、試行錯誤の連続でしたが、その分多くの学びを得ることができました。まだまだ経験不足を痛感する場面も多いですが、この0→1の開発プロジェクトに携わることで、フロントエンド、バックエンド、インフラまで一通り経験できたことは、自分にとって非常に大きな成長の機会となりました。謙虚な姿勢を忘れず、引き続き新しいことに挑戦していきたいと思います。
今後の課題と目標
2024年を通じて、多くの技術や経験を積むことができましたが、まだまだ学ぶべきこと、成長すべき領域が多くあると感じています。特に以下の分野に注力していきたいと考えています。
DB設計と複雑なSQLとパフォーマンスを意識したコードの学習
データベースの設計やSQLは、これまでのプロジェクトで多く経験しましたが、複雑なクエリの最適化や、パフォーマンスを意識した効率的な設計にはまだ課題が残っています。特に、大量のデータを扱う場面や、複数のテーブルを結合して情報を取得するような処理では、クエリの構造がアプリケーション全体のパフォーマンスに大きな影響を与えることを実感しました。
これからは、データベース設計のベストプラクティスやインデックスの活用、パフォーマンス向上を意識したSQLの書き方を学んでいきたいと考えています。具体的には、DBへの問い合わせを効率化するために、バルクインサート(大量データの一括挿入)を活用する手法や、今回使用したPrismaなどのORMツールを最大限に活用する方法を深く学びたいと考えています。
これらの技術を習得することで、リソース効率の良いデータ処理を実現し、システム全体のパフォーマンスを向上させるエンジニアを目指します。
AWSやインフラ構築の知識強化
Lightsailを使ったデプロイの経験を基に、次のステップとしてAWSのECSをTerraformで構築し、GitHub Actionsを活用したCI/CDパイプラインを構築することで、デプロイ作業の自動化を進めたいと考えています。この取り組みを通じて、本格的なインフラ運用の知識を身につけ、運用面でもチームに貢献できるエンジニアを目指します。
関数やクラスの責務を明確にしたコード設計の学習
これまでの開発では、動作するコードを書くことを最優先にしてきましたが、次のステップとして関数やクラスごとの責務を明確にすることを意識したコード設計を学びたいと考えています。特に、単一責任原則を念頭に置き、それぞれの関数やクラスが特定の役割に集中するよう設計することが重要だと感じています。
責務が明確なコードを書くことで、以下のようなメリットが得られると考えています:
- メンテナンス性の向上:変更や修正の影響範囲が限定されるため、保守がしやすくなる
- 再利用性の向上:汎用的な部品として他の箇所で利用しやすくなる
- 読みやすさの向上:チームの他のメンバーが意図を理解しやすくなる
具体的には、1つの関数が1つの目的にのみ集中するようにし、クラスも1つの責務を持つように設計することを目指します。また、関数やクラスのテスト容易性を考慮し、疎結合な設計を心がけることで、テストの品質も向上させたいと思います。
モバイルアプリのストアデプロイ経験
これまでモバイルアプリの実機確認用デプロイは経験しましたが、次の課題はiOSとAndroidそれぞれのストアでアプリをリリースすることです。ストアでのデプロイに必要なフローや設定を学び、実務での運用に対応できるスキルを習得したいと考えています。
マネジメントスキルの向上
これまでの開発経験を通じて、技術的なスキルだけでなく、プロジェクト全体を俯瞰して進行を管理する力の重要性を強く感じました。タスクの優先順位を整理し、チームメンバーと円滑にコミュニケーションを取ることで、スムーズな開発進行を支えるスキルを身につけたいと考えています
終わりに
来年は、さらに幅広い技術に挑戦しつつ、自分のスキルを深め、優秀なエンジニアを目指して努力を続けていきます。このブログが、これからエンジニアを目指す方や駆け出しエンジニアの方々にとって少しでも参考になれば嬉しいです。
また、今後も実務で学んだ技術や経験を定期的に記事にしていく予定です。自分の成長を記録するとともに、同じような課題に取り組む方々へ向けた役立つ情報を発信していければと考えています。
最後まで読んでいただき、ありがとうございました。2025年もさらなる成長を目指して、学習と仕事を通じて前進していきたいと思います。