アプリエンジニアしてたけど質問ある?①
今日は「アプリエンジニアしてたけど質問ある?」というテーマで、YouTube視聴者の方々からいただいた質問にお答えしようと思います。
アプリケーションエンジニアとして働いた経験を元に、これからエンジニアを目指す方や、エンジニアリングに興味がある方に少しでも役立つ情報をお届けできればと思います。
それでは、さっそく質問に答えていきます!
1. アプリケーションエンジニアってどんな仕事をしているの?
アプリケーションエンジニアの仕事は、企業や組織の業務システムの設計、開発、運用・保守を担当することです。具体的には、クライアントが抱える課題を理解し、それに基づいて業務プロセスを効率化するためのアプリケーションを設計します。
その後、プログラミングを行い、実際に動作するシステムを作り上げていきます。特に業務システムにおいては、データベースとの連携や業務フローの自動化が重要な要素です。
また、リリース後もアプリケーションが問題なく動作するように運用保守を行い、ユーザーからのフィードバックを元に必要な改善を加えていきます。システムは常に進化し続けるものなので、運用保守やバージョンアップ、機能追加といった仕事もアプリケーションエンジニアの重要な役割です。
クライアントとなる事業会社の多くは自社でシステム開発部隊を持たないことが多く、アプリエンジニアをはじめとしたエンジニア集団がその事業会社のシステムを構築(SI)することが一般的です。
基本的にクライアントワークになるので、お客様のために奔走するエンジニアも少なくありませんw

2. どんなスキルが必要?
アプリケーションエンジニアに求められるスキルはまず、プログラミングです。具体的には、JavaやC#、Python、JavaScriptなどのプログラミング言語が使われることが多いです。また、業務アプリケーション開発においては、データベースの知識も欠かせません。SQLを使ってデータベースと連携する部分では、データの取得や操作が非常に重要です。
さらに、システム設計やアーキテクチャに関する知識も求められます。複雑な業務プロセスをどのようにシステム化するかを考え、適切な設計を行う力が必要です。また、最近ではクラウドサービスやコンテナ技術(例えばAWSやDocker)も重要なスキルとされています。システム全体を効率的に設計し、運用できるスキルが求められます。
プログラミングはコアスキルですが、環境構築をするための最低限のインフラ知識は習得しておく必要がありますね!
3. 一つのアプリを完成させるのにどれくらいの時間がかかる?
アプリケーションの完成にかかる時間は、そのアプリケーションの規模や複雑さに大きく依存します。小規模な業務システムや簡単なアプリケーションであれば、数ヶ月で完成することもあります。しかし、大企業の業務システムを開発する場合、特に既存のシステムとの統合や、データの移行が必要な場合などは、1年から数年にわたる大規模なプロジェクトになることがあります。
開発は、要件定義、設計、開発、テスト、リリースといった段階を経て進行します。それぞれのフェーズで数週間から数ヶ月の期間が必要となるため、規模が大きくなるほど時間がかかります。さらに、リリース後も保守作業や機能改善が続くため、プロジェクトが完全に終わることは少なく、継続的な運用が求められることも多いです。
僕が以前いた金融系のシステム開発だとグランドデザインの名の下に10年計画でプロジェクトが組まれてましたwフェージングされていて、ひとつひとつは2年〜4年でしたが当時は「これいつ終わるんだ、、」と途方に暮れていましたw
4. エンジニアとして働く上で一番大変なことは?
エンジニアとして最も大変なことの一つは、技術の進化に常に追いつかなければならないということです。IT業界は非常に速いペースで技術が進化しており、新しいツールやフレームワーク、プログラミング言語が次々と登場します。これに追いつき、常に新しい技術を学び続けることが必要です。
また、プロジェクトの進行中には、クライアントからの要件変更がしばしば発生します。これに応じて、スケジュールを見直したり、再設計を行ったりすることが求められることもあります。システムが複雑化することで、バグの発見やデバッグ作業に多くの時間がかかることもあります。これらの対応を迅速かつ正確に行うためのスキルと忍耐力が必要です。
特にバグの原因がいつまでたっても見つからないときは精神的にも追い込まれますwその分見つけたときのアドレナリンはやばいですがw

5. 1日にどれくらいコードを書くの?
エンジニアは一日中コードを書いているわけではなく、設計や打ち合わせ、コードレビューなどにも時間を費やしますが、平均して1日に5〜6時間程度はコードを書いていることが多いです。特に実装フェーズでは、コーディングに多くの時間を使いますが、プロジェクトの初期段階やテストフェーズでは、設計やデバッグの作業が増えるため、コードを書く時間は相対的に減ります。
また、コードを書く以外にも、他のメンバーが書いたコードをレビューしたり、仕様を確認するためにドキュメントを作成することも大切な業務です。コードレビューは、チーム内でコードの品質を保ち、バグを早期に発見するために重要な作業です。
6. エンジニアは独学でなれる?
独学でエンジニアになることは十分可能です。実際に、独学でプログラミングを学んでエンジニアとして活躍している人はたくさんいます。オンライン学習プラットフォームや書籍を活用し、自己学習を進めることができます。しかし、重要なのは実践経験です。単に知識を学ぶだけではなく、実際に手を動かして小さなプロジェクトを作り、そのスキルを磨いていくことが大切です。
ここ数年はプログラミングスクールも流行ってますので、未経験であればまずはスクールに通うのもひとつの選択肢でしょう。とはいえ、実業務の経験がないと職歴としては当然評価されませんので、まずは何か現場にはいることをオススメします。
あとはGitHubなどのプラットフォームを利用して、自分のコードを公開したり、他のエンジニアからフィードバックをもらうことも学びを深めるための良い方法です。やはりエンジニアとしての成長は、学んだ知識を実際のプロジェクトで活用し、フィードバックを得ることから始まります。
7. チームで働くことが多い?
エンジニアはほとんどの場合、チームで働くことが多いです。特に大規模なシステム開発やアプリケーション開発においては、複数のエンジニアがフロントエンド、バックエンド、データベースなどそれぞれの専門分野で担当し、協力して開発を進める必要があります。チームメンバーとのコミュニケーションがスムーズでないと、進捗が遅れたり、誤った実装がされることもあるため、良いチームワークが不可欠です。
また、プロジェクトマネージャーやデザイナーとも連携しながら仕事を進めるため、異なる職種との協力も重要です。エンジニアリングの仕事は個人作業だけでなく、チームでの共同作業が非常に多いため、コミュニケーションスキルやチームワークの重要性も増します。
良くも悪くもチームプレーでシステムを作り上げるので、真の社会不適合者はエンジニアに向いてない説がありますw

8. エンジニアのキャリアパスは?
エンジニアとしてのキャリアパスにはいくつかの道があります。まず、シニアエンジニアやテックリードとして、技術面でリーダーシップを発揮するキャリアパスがあります。シニアエンジニアは、より複雑な技術的課題に取り組み、プロジェクトの技術的な方向性を決定する役割を担います。また、テックリードは、チーム内で技術的な指導を行い、他のエンジニアの成長をサポートします。
さらに、エンジニアからプロダクトマネージャーやプロジェクトマネージャーにキャリアチェンジすることもできます。これにより、技術的な視点だけでなく、ビジネスの側面からプロジェクトをリードすることが求められます。さらに、エンジニアリングを極めた後に、フリーランスとして独立する道を選ぶことも可能です。フリーランスエンジニアとして、より自由な働き方ができる一方で、自己管理が求められるという特徴もあります。
体感ですが、フリーランスになる方はクセがある人が多いので、取り扱い注意ですw
9. どの言語を学べばいいの?
アプリケーションエンジニアとしてよく使われるプログラミング言語には、Java、C#、Pythonなどがあります。これらは業務システムやウェブアプリケーション開発で非常に汎用性が高いため、学ぶ価値があります。特にJavaは、企業システムや大規模なアプリケーション開発でよく使用されており、PythonはAIやデータ分析に強い言語です。C#は、マイクロソフトの技術スタックに関連した開発に適しています。
Web系であればPHPやRubyもよく使われるので習得しておいて損はないでしょう。教材もネットで多く調達できます。
また、SQLの知識も不可欠です。多くのアプリケーションはデータベースと連携して動作しているため、SQLを使ってデータの操作ができることは必須のスキルです。プロジェクトの種類によっては、フロントエンド開発に使われるJavaScriptやTypeScriptも役立つことがあります。
10. プロジェクト管理ツールは何を使うの?
プロジェクト管理ツールとしては、JiraやTrello、Redmineなどがよく使われます。これらのツールは、チームメンバー間でタスクの進捗状況を視覚的に管理したり、期日や責任者を明確にするのに非常に便利です。また、GitHubやGitLabを使用してコードのバージョン管理を行い、複数の開発者が同時に作業してもコードが衝突しないように管理します。
ちなみに僕はいろいろ管理ツールを試行錯誤した結果、Excelに戻りましたwやはり起源にして頂点ですね。
さらに、SlackやMicrosoft Teamsなどのコミュニケーションツールもプロジェクト管理に欠かせません。これらを使って、チームのメンバーがリアルタイムで情報を共有したり、問題解決を迅速に行うことができます。物理的に離れた場所でも、スムーズに協力しながらプロジェクトを進めることができるため、これらのツールは非常に重要です。
