Chatworkという会社でバックエンド(PHP/Scala/AWS)のエンジニアとして働いています。ウェブサービスの開発やキャリアに関する疑問や相談のことならお気軽にご相談ください。学校の課題から初心者の方、これからプログラミングを勉強してみようと思っている方の相談まで幅広く対応しています。
バックエンドエンジニアとは
——Webアプリ開発でのバックエンドエンジニアの役割はどういったものでしょうか。 Webアプリ開発はフロントエンドとバックエンド、インフラの3つに大きくわけることができます。 その中で、バックエンドエンジニアはサーバー側で動くアプリケーションを開発します。
■フロントエンドエンジニアやインフラエンジニアとの違い
——フロントエンドエンジニアとバックエンジニアとの違いはどんなところにありますか? 大きく違うのは、どこで動くアプリケーションを実装するかという点です。 フロントエンドエンジニアはブラウザ上やスマホアプリなど、ユーザーの手元側で動作するアプリを担当しますが、バックエンドエンジニアはフロントエンドからの要求に応じてサーバー側で動作するアプリケーションを担当します。 たとえば、ECサイトで説明してみましょう。 ブラウザやアプリ上で商品を表示したり、ショッピングカードに商品を追加するといった動作はフロントエンドエンジニアが担います。ユーザーが商品をカートに追加する動作をしたら、フロントエンドからサーバーに「商品をカートに追加してください」という指示が送られます。 フロントサイドからの指示に基づいて、サーバー側では在庫の確認をして「カートに追加」を確定させます。それをフロントエンドに返すところまでがバックエンドエンジニアが担う部分です。 フロントエンドでは、バックエンドから返された情報をブラウザまたはアプリ画面に表示します。商品の在庫があればカートに「1」と表示、在庫がなければ「この商品は売り切れました」と表示します。 ——バックエンドエンジニアとインフラエンジニアの違いについてはいかがでしょうか。 会社によっては、バックエンドエンジニアの業務内容にインフラ業務が含まれていることもありますが、多くはバックエンドエンジニアとインフラエンジニアの業務は異なるものです。 先ほどのECサイトの例を再び見てみましょう。 ECサイトでは在庫情報や商品画像といったデータを管理しておくデータベースが必要です。そういったデータをためておくデータストレージを構築したり、運用していくのがインフラエンジニアの仕事です。また、アプリケーションを動かすための実行基盤を作るのもインフラエンジニアの役割です。
バックエンドエンジニアの仕事内容
——バックエンドエンジニアの主な仕事と、その内容を教えてください。 バックエンドエンジニアの仕事の内容は会社によって異なりますが、共通していえるのは次の4つです。 1.要件定義
要件定義は、「なぜ作るか(Why)」「どういうものを作るか(What)」「どれくらいの性能が必要か」といった視点から、アプリに実装すべき機能や性能などを明確にしていく作業をいいます。パフォーマンスやセキュリティといった非機能要件も定義します。 2.システム設計 要件定義にしたがって、アプリをどうやって作るか(How)を決めるフェーズをシステム設計といいます。プログラミング言語やフレームワーク、ライブラリの選定などをしていきます。 3.開発 開発のフェーズでは実際に手を動かして、実装とテストを行っていきます。採用されたプログラミング言語やそのほかの技術を使って、コードを書いたりテストをしたりします。
4. 運用
開発したアプリケーションを実行環境に配置して、サービスを落とさないように運用していくのもバックエンドエンジニアの仕事の1つです。
会社によっては運用は別のチームが担当することもありますが、障害が起きたり不具合が見つかればバックエンドエンジニアの協力は不可欠です。開発時から運用を意識したアプリケーションを設計したり実装することが求められます。
これら4つがバックエンドエンジニアに求められる仕事の内容です。
バックエンドエンジニアになるために必要なスキルは?
——バックエンドエンジニアになるためには、どんなスキルを身につけておけばよいのでしょう。 バックエンドエンジニアになるために身につけておくべきスキルをフェーズ別に挙げてみましょう。 ・Webの仕組み
まず、次の3つのWebの仕組みは理解しておいたほうがよいと思います。
・HTTP/DNSといった基本的なプロトコルに関する知識
・Web上の認証・認可に関する仕組みの理解
・セキュリティについての理解 ・要件定義
また、これは会社によりけりですが、USDMやRDRAといった要件定義の手法やテクニックについては勉強しておいたほうがいいでしょう。
・開発プロセス
開発プロセスでは、アジャイルやウォーターフォールといった開発手法について理解しておきたいのが1つ。 もう1つ、ソースコードのバージョン管理についても抑えておきましょう。具体的には、GitやGitHubの操作を覚えることです。最近ではGitHub上でソースコードを管理することが当たり前になってきているので、GitHubの使い方に慣れておく必要があります。 ・開発
開発の実装周りの知識も必要です。 特に、ソフトウェアの設計については、オブジェクト指向、ドメイン駆動設計、データベース設計といった設計手法、プログラミング言語はもちろん、データベースを操作するSQLといった言語は必須です。 最近ではプログラムのコードは書けてもデータベースの扱いには不慣れという人が多いので、データベースに関する基本的な知識はきちんと身につけておきましょう。
バックエンドエンジニアになるには
——バックエンドエンジニアにはどんな人が向いていると思いますか? 面倒くさがりな人は作業を自動化しようとするし、短気な人はトラブルが二度と起こらないように自動化する。こうした傾向から、エンジニアの三大美徳は「怠惰」「傲慢」「面倒くさがり」と言われています(笑)。 それはさておき、私がバックエンドエンジニアに向いていると思うのは、思い込みが激しくない人、なんとなくわかったで済ませない人です。開発にはスピード感や頭の回転の速さがあるにこしたことはありません。しかし、わからないことをじっくり考え抜く力がとても大切だと思っています。 サーバーサイドは目で見えない分、トラブルの原因がわかりづらく、数値でしか測れないところがあります。思い込みだけで仕事をすると見当違いなことをしかねません。そういった意味で、じっくり考えることができる人が向いているのではないかと思います。
■王道は学校で情報系を専攻してバックエンドエンジニアを目指すパターン
——バックエンドエンジニアになるためにはどんな方法がありますか? 多くのパターンが、高専や専門学校、大学で情報系のコースを専攻して、そこで習った知識やスキルをベースに企業に就職するという方法です。 プログラミングスクールを卒業してすぐバックエンドエンジニアになれる人は少数ですが、ある程度体力がある会社であれば、ジュニアクラスエンジニアとして雇用し、成長させてくれる場合もあります。 最近増えてきているのが、プログラミングスクールに通いながら現役のエンジニアにメンターになってもらい、開発の現場の話を聞いたり、スキルアップのための課題を出してもらったりしてから企業にジョインするというパターンですね。
■勉強には鮮度が高い動画コンテンツがおすすめ
——これから勉強してバックエンドエンジニアになりたいという人におすすめの勉強法はありますか? Webの仕組みを勉強するためには、書籍を読み込むのが一番ではないかと思います。 また、プログラミング言語やコーディングについて勉強するならプログラミングスクールもよいですが、動画コンテンツもおすすめです。書籍だと改訂版が出版されるまでに1、2年かかってしまいますが、技術が進歩するスピードはあっという間です。その点、動画コンテンツは情報の更新が早く、教材としての鮮度が高いといえます。 これからバックエンドエンジニアを目指そうという人の中には、Webや書籍でさまざまな情報に触れ、何を勉強したらよいのか迷っている人もいるでしょう。 そんな人は、自分の就職したい企業の採用サイトや技術ブログ、カンファレンスに参加するなどして、どんな技術が採用されているかを把握するとよいと思います。
■バックエンドの仕事はチャレンジングでおもしろい
——安達さんはバックエンドエンジニアの仕事のどんなところに魅力を感じていますか? バックエンドエンジニアの仕事はとてもチャレンジングで楽しいと思います。 バックエンドエンジニアは1秒に何万件も送られてくる大量のリクエストを、サーバーを落とさないように裁く必要があります。 また、データの整合性を気にしながらコードを書いたり、データベースの設計をしたりするのは、バックエンドエンジニアならではのおもしろさですね。
関連記事を見る
安達勇太さんのプロフィールを見る
安達勇太さんにプログラミングやWebサービス開発について相談する