開発者は実際に何をしているのか — 開発職種の地図
「私は開発者です」という言葉は、実はあまり多くの情報を伝えてくれません。「私はスポーツ選手です」という言葉に似ています。サッカー選手なのか水泳選手なのか分からないのと同じように、開発者の中にもやっている仕事がまったく違う複数の職種があります。同じ会社で働いていても、毎日見ている画面、使っている道具、気にしている問題はそれぞれ違います。
この記事は、二種類の人のために書きました。一つは、開発者という進路に悩みながら「では自分は何をすることになるのか」が気になっている人です。もう一つは、開発者と一緒に働いていても職種が分かりにくい企画者、デザイナー、マーケターです。どちらにせよ、この記事を読み終えれば、頭の中に開発職種の地図が一枚描かれるはずです。コードは一行も出てきません。
フロントエンド開発者 — ユーザーが見る画面 #
フロントエンド開発者は、私たちが目で見て手で触れるすべてのものを作ります。ボタン、入力欄、メニュー、アニメーション、画面が切り替わる流れが、すべてこの人たちの手を通ります。
基本となる材料は三つです。画面の骨格を組むHTML、色や配置を施すCSS、そして動作を与えるJavaScriptです。最近はReact、Vue、Angularといった道具を載せて、複雑な画面をより効率的に作ります。
フロントエンドの核心となる悩みは「ユーザーがこれを簡単に速く使えるか」です。ボタンがどこにあれば自然なのか、スマートフォンとノートパソコンで画面がどう変わるべきなのか、遅いインターネットでも画面が速く表示されるのかを気にします。デザイナーや企画者と最もよく対話する職種でもあります。
バックエンド開発者 — 画面の裏で動いているもの #
バックエンド開発者は、目に見えない側を担当します。ログインができる理由、注文が処理される過程、決済が安全に行われる仕組みが、すべてバックエンドの仕事です。
この人たちは、サーバーで動くビジネスロジックを書きます。「このユーザーはこの記事を削除する権限があるか」「在庫が残っているときだけ注文を受ける」といったルールをコードにします。データを保存したり取り出したりするデータベース処理もバックエンドの担当であり、フロントエンドがデータをやり取りできるようにAPIという通り道を作ってあげる仕事もします。
バックエンドの核心となる悩みは、正確さと安定性です。ユーザーが一万人押し寄せてもサービスが耐えられるか、お金がやり取りされる計算が一度も間違わないか、データが漏れたり消えたりしないかを絶えず問い続けます。
フロントエンドとバックエンドをもっとゆっくり噛み砕いて書いた記事があります。この二つの概念がまだぼんやりしているなら、まず非開発者のためのITの常識 #1 — フロントエンド・バックエンド・データベースを読んでみることをおすすめします。
フルスタック開発者 — 両側を触る人 #
フルスタック開発者は、フロントエンドとバックエンドの両方を扱います。画面も作り、サーバーも作るという意味です。人員が潤沢でないスタートアップや小さなチームで特に好まれる職種です。
ただし「フルスタックだからすべてを同じように上手にこなす」という誤解には注意が必要です。現実のフルスタック開発者は、たいてい片側により強い軸足を置き、もう片側は必要な分だけこなす形です。両側を触れるという点が強みであって、両側ともに専門家だという意味ではありません。一人で小さなサービスを最初から最後まで作りたい人には、よく合う方向です。
モバイル開発者 — 手のひらの中のアプリ #
モバイル開発者は、スマートフォンにインストールするアプリを作ります。同じモバイル開発者でも、どのプラットフォームを扱うかによって分かれます。
iOSはiPhoneやiPad向けのアプリで、主にSwiftという言語を使います。AndroidはSamsung、Googleなどのアンドロイド端末向けのアプリで、主にKotlinを使います。二つのプラットフォームは道具やルールが違うため、伝統的には両方のアプリを別々に作らなければなりませんでした。
この手間を減らすために登場したのがクロスプラットフォーム方式です。FlutterやReact Nativeといった道具を使えば、コードを一度書いてiOSとアンドロイド両方のアプリを一緒に作れます。開発コストを節約できるため多くのチームが選びますが、各プラットフォーム固有の機能を深く使うときには限界があり、状況によって選択が分かれます。
DevOps・インフラ・SRE — サービスが止まらないように #
作られたサービスは、誰かのコンピュータ、つまりサーバーの上で動いて初めて人々が使えます。そのサーバーを準備し、コードをそこに載せ、止まらないように守る職種がDevOps、インフラ、SREです。名前は少しずつ違いますが、領域は大きく重なります。
この人たちがやっている仕事を噛み砕くと、こうなります。開発者が書いたコードを実際のサービスに自動で載せるデプロイ過程を作り、その過程を自動化するCI/CDという流れを設計します。AWSのようなクラウドの上にサーバーを立ち上げて管理し、トラフィックが押し寄せても耐えられるようにリソースを調整します。
最も緊張する瞬間は障害対応です。深夜にサービスが止まると、原因を探して復旧させるのがこの人たちです。普段は「障害がそもそも起きないように」する仕事に集中し、何かが起きたら「できるだけ速く復旧する」仕事に集中します。
データ職種 — 似て見えるが違う三つの枝 #
データを扱う職種はひと塊にまとめられやすいですが、中をのぞくと三つに分かれます。
データエンジニアは、データが流れる道を作ります。あちこちに散らばったデータを一か所に集め、分析しやすい形に整えて積み上げる仕事です。データアナリストは、そうして積み上げられたデータをのぞき込んで意味を見つけます。「どの画面でユーザーが多く離脱するのか」といった問いに数字で答え、事業判断を助けます。データサイエンティストは一歩進んで、統計やモデルを使って予測し、パターンを発見します。「来月の売上はいくらだろうか」といった問題に近いです。
簡単に言えば、エンジニアはデータが流れる道を整え、アナリストはそのデータで現在を読み、サイエンティストは未来を推し量ります。
機械学習・AIエンジニア — モデルをサービスにつなぐ仕事 #
機械学習、AIエンジニアは、学習するモデルを作り、それを実際のサービスに接続する仕事をします。おすすめ一覧、顔認識、翻訳、チャットボットといった機能がこの人たちの領域です。
データサイエンティストが「このモデルはよく当てるか」を研究するとすれば、AIエンジニアはそのモデルが実際のユーザーの前で速く安定して動くようにすることにより重きを置きます。モデルを作る仕事と、そのモデルをサービスにつないで運用する仕事は必要な技術が違い、二つが一人に集まることもあれば分かれることもあります。最近最も注目される職種の一つです。
QA・セキュリティ — よく忘れられるが必ず必要なポジション #
最後に、もう二つの職種を短く触れておきます。
QA、テストエンジニアは、サービスが世に出る前に問題を見つけ出す人です。ユーザーが遭遇する前にバグを先に発見し、同じミスが繰り返されないようにテストを自動化することもあります。「うまく作る仕事」と同じくらい「間違ったものを捕まえる仕事」が重要だからこそ存在する職種です。
セキュリティエンジニアは、サービスとデータを外部の攻撃から守ります。どこが破られうるかをあらかじめ点検し、攻撃が入ってきたときに防ぎ、個人情報が漏れないように管理します。事故が一度起きると会社全体が揺らぎかねない領域なので、責任が重いです。
開発者は一日中コードだけを書いているわけではない #
職種の地図を描いたので、よくある誤解を一つ解いておきます。開発者が一日中キーボードをたたきながらコードを吐き出している、というイメージです。実際はそうではありません。
一日をのぞき込むと、会議、ドキュメント作成、設計の議論、同僚のコードを確認するコードレビュー、そしてすでに書いたコードから問題を探すデバッグが大きな割合を占めます。コードを新しく書く時間は思ったより少ないです。良い開発は、何をどう作るかを決めるところで半分が決まるからです。
ですから、職種を選ぶときに「どの言語を学べばいいか」から尋ねるのは、順序が少し逆になっています。言語は道具にすぎず、職種が決まれば自然とついてきます。より良い出発点は「自分はどんな問題を解きたいのか」です。人が見る画面を磨く仕事が楽しいのか、見えないところで正確に動く構造を組む仕事に惹かれるのか、データから意味を掘り出す仕事に好奇心が湧くのかを、まずのぞき込んでみることをおすすめします。
まとめ #
ここまで、フロントエンド、バックエンド、フルスタック、モバイル、DevOps、データ、機械学習、QA、セキュリティまで、開発職種を一枚の地図に広げてみました。ご覧のとおり、「開発者」というひと言の中には、性格がまったく違う仕事が入っています。
ここでぜひ覚えておくとよい点は、正解の職種はないということです。よりかっこよく見える職種も、より優れた職種もありません。それぞれが解く問題が違うだけであり、その問題のうちどれが自分の好奇心を刺激するのかが選択の基準になります。
プログラミングそのものに興味が湧いたなら、なぜすべての人がプログラミングを学ぶべきかも合わせて読んでみることをおすすめします。この地図が、進路を悩んでいる方には方向を、開発者と働く方には同僚を理解する手がかりを差し上げられていれば幸いです。