バックエンドエンジニアの将来性
バックエンドエンジニアとは何か、chatgptに質問した結果は以下です。
超長文が返ってきました。
バックエンドエンジニアとは、ウェブアプリケーションやソフトウェアシステムの「バックエンド」部分を設計、構築、維持するエンジニアのことを指します。バックエンドは、ユーザーが直接操作する「フロントエンド」部分(ユーザーインターフェースやブラウザ上で動作する要素)の裏側で動作し、データ処理やビジネスロジック、データベース管理、サーバーの運用などを担っています。
### バックエンドエンジニアの主な役割と業務内容
1. サーバーサイドロジックの開発:
- アプリケーションのビジネスロジックを実装し、ユーザーからのリクエストを処理する。
- たとえば、ユーザーがログインする際に、入力された資格情報を認証する機能を実装する。
2. データベース設計と管理:
- データベースの設計、作成、最適化を行う。データの保存、読み込み、更新、削除を効率的に処理する。
- データベースのセキュリティやパフォーマンスを向上させるための管理も含まれる。
3. API開発と統合:
- フロントエンドや他のサービスと通信するためのAPI(Application Programming Interface)を設計・実装する。
- RESTful APIやGraphQL、gRPCなどの技術を使用することが多い。
4. サーバーとインフラの管理:
- サーバーの設定や運用管理を行い、アプリケーションが安定して動作するようにする。
- クラウドプラットフォーム(AWS、Azure、Google Cloudなど)やコンテナ技術(Docker、Kubernetes)を使用して、インフラの管理やスケーリングを行うことも多い。
5. セキュリティ対策:
- アプリケーションやデータベースのセキュリティを確保し、SQLインジェクションやクロスサイトスクリプティング(XSS)などの一般的な攻撃からシステムを守る。
- 認証、認可、データ暗号化などのセキュリティ機能を実装する。
6. パフォーマンス最適化:
- アプリケーションのパフォーマンスを監視し、ボトルネックを解消するための最適化を行う。
- クエリの最適化、キャッシュの導入、ロードバランシングなどが含まれる。
7. 開発環境とCI/CDの設定:
- 開発者が効率的に作業できるよう、開発環境やCI/CD(継続的インテグレーション/継続的デリバリー)パイプラインの設定・管理を行う。
- テストの自動化やデプロイメントプロセスの自動化も担当する。
### バックエンドエンジニアに求められるスキル
- プログラミング言語: Python、Java、Ruby、Node.js、PHP、Goなど、サーバーサイドで使用される言語の知識と実装能力。
- データベース: MySQL、PostgreSQL、MongoDB、RedisなどのリレーショナルおよびNoSQLデータベースの知識。
- API開発: RESTful APIやGraphQLの設計・実装スキル。
- セキュリティ知識: Webアプリケーションのセキュリティに関する知識(OWASP Top 10など)。
- クラウドとインフラ: AWS、Azure、GCPなどのクラウドプラットフォームの知識、DevOpsツールやCI/CDの知識。
- バージョン管理: Gitなどのバージョン管理システムの使用経験。
### バックエンドエンジニアの重要性
バックエンドエンジニアは、アプリケーションの根幹部分を支える役割を担っており、アプリケーションのパフォーマンス、スケーラビリティ、セキュリティに直接影響を与えます。そのため、堅牢で効率的なバックエンドシステムを構築することが、ユーザーに高品質なサービスを提供する上で不可欠です
スキルについては一旦ここでは取り上げません。
上記の中で、僕が日頃から実務で実装している内容は1. サーバーサイドロジックの開発, 2. データベース設計と管理, 3. API開発と統合にあたります。
他のバックエンドエンジニアを経験された方も同じようなものではないでしょうか?
例えば、「ユーザが商品画面で購入をクリックした時の操作」でみてみます。
「1. サーバーサイドロジックの開発」→「ユーザが購入ボタンをクリックしたらカートに商品が追加される」
「2. データベース設計と管理」→「カートにレコードを追加」
「3. API開発と統合」→「カートに商品追加のAPIが来たらDBのinsert操作実行」
上記の操作は一般的なCRUDの操作の一部ですが、私的な意見ですが、この操作はありきたりな処理であり、この操作を実装できただけでは希少性のあるエンジニアにはなれないと考えています。
もし「決済処理の実装」などが含まれた場合はありきたりではないかもしれませんが、ライブラリなどの実装でほとんどがありきたりになりつつあります。
僕の実務をベースで言うと、1,2,3の実装だけやって、テストして出来てたらOK!達成感あるね!をチームでこなしている状態です。
こういったありきたり処理は、将来的に自動化される可能性が高いです。
自動化で完全になくなることはなくても、copilotなどで数分で完成する可能性があります。(というか多分もう数分でできる)
つまり、希少性・将来性を考えるなら、ありきたりからもう一歩進んだ専門性を持つことが重要です。
専門性を上げるなら何がいいか
chatgptの4~7がいい例だと思います。
4. サーバーとインフラの管理→インフラの専門性(AWSなどのクラウド、Terraformなど)
5. セキュリティ対策→セキュリティに関する知識と実践できる能力
6. パフォーマンス最適化→負荷分散・パフォーマンスチューニング・最適なアルゴリズムの実装
7. 開発環境とCI/CDの設定→DevOps(Docker、GitHub Actions、Codepipelineなど)
上記以外にも、将来性のあるスキル(ジャンル)としてAI・機械学習・ブロックチェーン・VR/ARなどが挙げられると思います。
しかし、挙げたジャンルは基本的に「情報学の大学を卒業して大学院でAIを学習していた人」が大勢いるような、突出して狭き門になります。
逆に7. 開発環境とCI/CDの設定については、追求すればチームに貢献できる上に高く評価されやすい専門性ですが、需要と供給のバランスから見ると、だんだんと供給はそれなりに多くなっており、将来的には溢れかえっている可能性があります。
その点で、今回の本題である「セキュリティ」に関して言えば、「需要もあって供給が少ない、ありきたりなバックエンドエンジニアならなれる」ギリギリのラインだと思います。
今後もし同じようなことを考えている方がいれば、この記事で【バックエンド×セキュリティ】のエンジニアの道も一つ案として考えていただければと思います。。