見出し画像

アプリエンジニアしてたけど質問ある?③

前回記事に続き、「アプリエンジニアしてたけど質問ある?」というテーマで、YouTube視聴者の方々からいただいた質問にお答えしようと思います。

それでは、さっそく質問に答えていきます!

21. アプリケーションの設計で一番大切なことは?

スケーラビリティ/拡張性を考慮することだと思います。将来的にユーザー数が増加したり、新しい機能を追加したりする可能性を考え、柔軟で拡張可能な設計を行うことが求められます。

逆に設計が適当だと追加開発や保守のときに困ります、「設計と実装が全然あってねぇじゃねぇか!!」とかZARAにありますw

コードの可読性も重要な要素です。シンプルで理解しやすいコードを書くことは、将来他のエンジニアがそのコードを保守したり、修正したりする際に非常に役立ちます。複雑な処理には必ずコメントをいれる習慣をつけましょう。

あとはセキュリティ面にも配慮し、脆弱性が発生しないように設計段階からセキュリティを意識することが、アプリケーションの安定性を保つために不可欠です。セキュリティインシデントは発生したら致命傷ともなりうるので、ともすれば忘れがちですがしっかりと構築に組み込むことがマストです。

22. 開発中に最も多く直面する問題は何?

色々ありますが、仕様変更や要件の変更はよくある問題ですw

クライアントやビジネスのニーズが途中で変わることはよくあります。なんなら、決まりきってなかった要件が設計や開発中に発覚することもよくあります。

設計や開発が進んでいる段階で新たな要求が加わると、開発の進捗が遅れるだけでなく、リソースや時間の調整が必要になります。クライアント要求によるものであれば追加予算が出る場合もあります。

いくら追加予算が出るとは言っても、その分の見積もりは実質タダでやらざるを得なかったりもするので、エンジニアにとっては避けたい事態であることには変わりありません。

クライアントの要求に途方に暮れるエンジニアたち

23. プロジェクトがスムーズに進むためのコツは?

コミュニケーションと計画性が不可欠だと思います。チーム全体で定期的にミーティングを行い、常に進捗状況や課題を共有することが重要です。問題が発生した場合は、早期にその問題を共有し、解決策を話し合うことで、遅延やミス防止に努めましょう。

さらに、タスクの優先順位を明確にし、誰がどのタスクを担当するかを決めておくことが必要です。これにより、メンバー間で役割分担が明確になり、作業効率が向上します。現場ではWBSとしてPMとエンジニアの間で明示的に取り交わされます。ちなみにWBSがないプロジェクトは赤信号なので、遭遇したら注意が必要ですw

24. どんなツールを使って仕事を進めるの?

エンジニアは、日々の作業で多くのツールを使用します。コードのバージョン管理には、GitHubGitLabがよく使われます。これらのツールを使うことで、複数のエンジニアが同時にコードを書いても変更履歴を管理でき、コードの衝突を防ぐことができます。

プロジェクト管理には、JiraTrelloRedmineといったツールを使います。これらのツールを活用して、タスクの進捗や期限を管理し、チーム内で情報を共有することができます。先述のWBSと組み合わせて使うこともありますね。

さらに、コードを書くためのテキストエディタや統合開発環境(IDE)として、Visual Studio CodeIntelliJ IDEAが使われることが多いです。これにより、効率的にコーディングやデバッグが行えます。

25. エンジニアの一日ってどんな感じ?

プロジェクトの進行状況やタスクの内容によって異なりますが、一般的には朝にデイリースタンドアップ(ようは朝会w)という短いミーティングを行い、その日のタスクや問題点を共有します。その後、担当機能のコードを書いたり、デバッグを行ったりします。特に実装フェーズでは、集中してコードを書く時間が長くなります。逆に設計フェーズだとひたすらExcelやWordで文書作りをしていることもあります。

最後に、その日の進捗をまとめ報告、翌日のタスクを計画して仕事を終えることが多いです。エンジニアは作業が細分化されており、タスクを効率的にこなしていくことが求められます。

26. テストって何種類あるの?

テストにはいくつかの種類がありますが、最もよく行われるテストは、単体テスト、結合テスト、システムテストの3つです。

単体テストでは、個々の機能やモジュールが正しく動作しているかを確認します。結合テストでは、複数のモジュールが正しく連携しているかを確認し、システム全体の挙動をチェックします。このとき、連携システムがある場合は外部結合テストを行う場合もあります。

システムテストでは、アプリケーション全体が正常に動作しているか、全モジュールを横断的にテストします。

また、ユーザーテストやシナリオテストといった、実際の使用状況や業務に近い観点で行うテストもあります。最近では、自動化テストを導入する企業も増えており、テストスクリプトを使って繰り返し行うことが効率化されています。

27. プロジェクトの進行が遅れることはある?

プロジェクトの進行が遅れることはよくありますw

遅延を防ぐためには、早期に問題を特定し、チーム全体で解決策を共有することが重要です。進捗状況を確認し、優先順位を再設定することで、問題を最小限に抑えられることがあります。また、柔軟に対応できる体制を整えておくことで、予期せぬ遅延にも素早く対応できます。

とはいえ、実態としては再計画する予算もリソースもないので、稼働を上げて対応みたいな暫定対応が恒常的にとられるようになります。これがデスマーチのはじまりです。

デスマーチの終盤、疲弊したふいんきが漂う

28. 自動化ツールはどんなものがあるの?

自動化ツールには、CI/CD(継続的インテグレーション/継続的デリバリー)ツールがあります。これらのツールを使用することで、コードが変更されるたびに自動でビルドやテストを行い、問題があれば即座にフィードバックが返されます。例えば、JenkinsCircleCIが代表的なCIツールです。

また、インフラ管理の自動化には、TerraformAnsibleなどが使われます。これらのツールを使うことで、インフラの構築や設定をコードで管理し、自動化することができます。これにより、作業の効率化が進み、エラーの発生も減少します。

29. エンジニアとしてのやりがいは?

エンジニアとしてのやりがいは、自分が作ったアプリケーションが実際に使われている瞬間を見ることですね。特に、クライアントから「業務が効率化された」「使いやすくなった」といったフィードバックをもらうと、開発に費やした時間が報われたように感じます。

また、リリースのときなど、苦楽をともにしたメンバーと互いの苦労をねぎりあい、成果を一緒に噛み締める瞬間も達成感がハンパないですw

30. エンジニアを目指す人にアドバイスは?

エンジニアを目指す人に一番のアドバイスは、挑戦を恐れずに学び続けることです。エンジニアリングは常に進化しており、最初は難しく感じることも多いですが、少しずつ実践を積み重ねることで確実にスキルが身についていきます。最初は簡単なプロジェクトから始め、徐々に難易度の高い課題に挑戦していくことが大切です。

また、エンジニアはチームで働くことが多いため、コミュニケーションスキルも大切です。周囲との協力を大切にし、問題解決能力を高めることが重要です。成功の秘訣は、粘り強さと好奇心を持って、技術に取り組む姿勢です。

決してプログラミングやものづくりだけではない、チームでの協力による達成感ややりがいがとても魅力的な仕事だと思います!