大規模・高トラフィック案件の特徴
大規模・高トラフィックの案件は、ソーシャルゲーム、広告関係・知名度の高いWebサービスなどBtoCの案件がメインです。最近では技術の発展とともに大型のWebサイトや、動画などの大容量データを扱うサイト、ネイティブアプリなどが増え、従来よりもトラフィックが多くなり通信に大きな負荷がかかるようになりました。そのためトラフィック量を意識したコーディングやデータベースの連携、インフラの構築が必要不可欠です。
プロジェクトに参画する際は、高トラフィックを想定した設計・開発や高負荷の状況下における運用のどれかに携わった経験があれば役立ちます。
大規模・高トラフィック案件の業界動向
大規模・高トラフィック案件は、前述したようにソーシャルゲームやWebサービスが中心です。Webサービスは競争が激しい業界ですが、今後もまだまだ需要が伸びるでしょう。
求められるエンジニアは、フロントエンドからサーバーサイド、インフラまでさまざまです。中でもサーバーサイド、インフラエンジニアは、高いレベルが要求されます。上流工程に携わる場合は、高トラフィックを想定した要件定義、サーバーの設計・構築といった経験や知識が求められます。
また、最近はサーバーにAWSやGCPなどのクラウドサービスを採用する企業が多くなっていますが、大規模案件ではオンプレミス環境を運用し続けていることもあります。そのためサーバー構築を担当するエンジニアは、クラウドサービスとオンプレミス環境両方の構築経験を持っておくと有利です。
大規模なWebサービスなどを扱う案件に必要なスキルと知識
サーバーへのトラフィック量が多い大規模なWebサービスやネイティブアプリでは、高負荷を想定した設計・開発が求められます。高トラフィックを捌くために必要なスキルをいくつかご紹介します。
処理速度や負荷分散を考えたコーディングスキル
ソーシャルゲームや大規模な通信サービスは一度に多くのユーザーがリクエストを行うので、キャッシュなどを使っていかに効率よく処理させるかや、サーバーやデータベースへの負荷を分散させることを考えた設計が重要となります。特に負荷分散を考える上では、並列処理の知識が合った方が良いでしょう。
特に大規模なシステムでは、Googleの開発したMapReduceという仕組みをもつHadoopというデータベースを利用したり、Thread処理が使用されたりします。JavaScriptではHTML5のAPIであるWeb Workersなども使われます。言語によってモジュールが用意されていますので、役割や用途を理解しておく必要があるでしょう。
NoSQL
NoSQLとは、SQLを使わないデータベースのことで、多くが一意となるキーを指定してデータを取り出すKVS(Key-Value Store)という形式をとっています。
通常のWebサービスにはRDBがよく使用されますが、大規模Webサービスの構築ではトラフィック量が多くなっても停止しないことや、遅延が少ないこと、データの整合性が担保されることなどを考慮する必要があります。特に認知度の高いサービスではデータベースへの書き込み・読み出しが飽和状態になる事態も想定されます。そのため、サーバーサイドエンジニアは、RDB以外のデータベースも使用して負荷分散を考える必要があります。NoSQLであれば目的のデータに直接アクセスできるためデータベースを走査する必要がなく、その分速い処理スピードが期待できます。
有効なNoSQLデータベースとしてはRedis、MongoDB、DynamoDBなどがあげられます。機能の違いによってさまざまな種類がありますが、単独で使用するよりもRDBと併用されることが多く、要件に合わせて適切なツールを選択できると重宝されます。
インフラのコード化
AWSやGCPの興隆によってインフラのクラウド化が進んでおり、それに伴ってインフラの構成をコード化する手法であるInfrastructure as Codeが普及しています。これまで手作業で行ってきたインフラ構築を、プログラムを組んで行います。
Infrastructure as Codeのメリットは、インフラの構築を自動化して動的な設計書として保持できるという点です。複数のサーバーを手動で構築するには時間がかかり、人為的ミスが起こる可能性もあります。しかしコード化を行えば、設定した通りの構築を自動で行ってくれます。また、設計書変更の際にオペレーションミスが発生したり後任者が実態を把握できなくなるという問題も起こりません。
このような利点から、コード化はインフラエンジニアの基礎的な技術になりつつあります。Chef、Ansible、Puppet、Terraformなどの構成管理ツールがありますが、RubyやYAML、JSONで設定を記録します。
フルスタックエンジニアとしてのスキル
通常大規模案件の場合は、複数のエンジニアがそれぞれの持ち場を担当する形でプロジェクトを動かしていきますが、フルスタックエンジニアはすべての技術に精通し、どの担当でも柔軟に対応できる優秀なエンジニアです。
開発や運用、トラブル発生時は各部署や他領域にまたがることが多い現場でフルスタックエンジニアとして活躍するには、深い知識や経験値が助けになります。自身の担当領域の知識や経験を深めることはもちろんのこと、他の領域の知識を学んだり、経験を共有することを忘れてはいけません。
たとえば、サーバーサイドエンジニアやインフラエンジニアはそれぞれが協力してトラフィックを捌きます。特に何らかのトラブルが発生した際には、ボトルネックの発見から対処まで、協力して対応しなければいけないため、それぞれのエンジニアがお互いの領域の知識を持っていると大変役立ちます。
また、インフラエンジニアが、サーバーサイドの言語を理解しておくとプログラマーとの意思疎通に役立ちます。一方、サーバーサイドエンジニアもLinuxやWindows Server、AWSなどの知識を有していると、トラブル時に対応がしやすいでしょう。
フリーランス向け大規模・高トラフィック案件の特徴
大規模・高トラフィック案件は、通常の案件とは少し違いがあります。ここではフリーランス向け案件の特徴について解説していきます。
業務内容
大規模・高トラフィック案件の業務内容は、通常と同じように、要件定義、開発、テスト、保守・運用まで幅広くあります。しかし、トラフィック量が増加した時の対策を考えて設計する必要があるため、あらかじめトランザクションの機能や大きさを制限してデータベース負荷軽減を行うなど、高負荷時を想定したスケーラビリティや可用性のあるシステム構築が前提になります。
またトラブルが発生した時に迅速に対処できるシステムの監視設計や、ボトルネックを見極めてすぐに対応する必要もあります。
単価や年収の相場
フリーランス案件の平均年収は、約800万円です。統計によると、一般的なシステムエンジニアの平均収入は約456万円で、800万円~899万円の収入を得ているエンジニアは全体の2%しかいません。フリーランスはこれらと比べても高い年収であることがわかります。
案件単価は70~130万円の提示企業もあり、年収1,000万円を超えることも可能です。(参考:https://www.find-job.net/income/shokushu-203-1/ )
勤務体系
基本的には週5日勤務です。案件のほとんどが月間20日から22日勤務で140時間~180時間の稼働です。しかし、もっとも業務が忙しくなるリリース前には残業が発生することもあります。特にサーバーサイド・インフラエンジニアは、運用時には24時間365日体制でシフトを組むこともあるため、柔軟な勤務時間への対応が必要になります。またトラブル発生時にも同じように急な対応への準備が必要です。
またリモートワークの案件は少なく、常駐がほとんどです。
初心者向け案件の特徴
高トラフィックの案件は基本的に上級者が求められており、初心者案件は母数自体が少ないと言えます。しかし、優秀な人材がすでに確保できている場合や多くの人材が欲しい場合は、初心者向けの募集を出すことがあります。
たとえば、新規開発案件ではベテランのエンジニアだけでなく、プログラマーなども合わせて募集することがあります。そのため、フロントエンド・サーバーサイドエンジニアはプログラマーPGとして参画できることもあります。一方、インフラ・ネットワークエンジニアの場合は初心者の上流工程参画は難しいため、運用案件がメインとなります。
また、新規よりも保守案件の方が比較的取得しやすくなっています。そのため、初心者は保守案件から経験を積むのも一つの手です。面談の際には、経験年数よりも案件に関わる知識がどれほどあるか、意欲的な姿勢のあるエンジニアかどうかを判断します。経験のない分野でも、興味があるという姿勢をクライアントに見せることはとても重要です。
高額案件の特徴
高額案件は、要件定義やアーキテクチャ設計から求められるため、設計、検証、運用の知識や経験が問われます。たとえば、フロントエンド・サーバーサイドエンジニアでは、HTML5、JavaScript、Ruby、Pythonといった言語に加えて上流工程の経験、プロダクト開発経験が求められることがあります。特にサーバーサイドエンジニアは、データベースとの連携がとても重要になりますので、高トラフィックを想定した大規模データベース設計の知識、経験があると重宝されます。
また、インフラ・ネットワークエンジニアは、クラウドサービスとオンプレミス環境下の両方での作業経験が重要です。AWSなどでサーバーを構築することが多い小規模サービスに比べ、大規模なサービスはオンプレミスで運用していることも多々あります。そのため、AWSの構築に加えてWindows Server、Linuxなどの構築や運用経験も必要です。また、Infrastructure as Code(インフラのコード化)が主流となっているため、Chef、Puppet、Ansible、TerraFormといったツールの経験もあると強みになります。
大規模・高トラフィック案件を受注するためのコツ
大規模・高トラフィックの案件は、さまざまな知識や経験が必要です。Web系開発経験3年以上と現場での経験年数を具体的に表示している案件もあれば、AWS、PHPフレームワークを利用した開発経験、並列処理のプログラミング経験が求められる案件や、NoSQLの知識があると有利になる案件もあります。
かなりイレギュラーではありますが、アルバイトで入社した人材が中心となってインフラ構築を行ったという事例もあります。その事例では大学生時代に並列計算の研究をしており、知識も元々豊富にあったと想定されます。しかし、現場に入らずとも大学で大規模な研究をしているなど、実践的な知識があれば採用される可能性もあります。(参考:https://type.jp/et/feature/150)
その場合は、自分の知識や経験をクライアントに上手に伝えなくてはいけません。一番有効な手段としては、ポートフォリオを作成するのが一般的です。ポートフォリオといえばフロントエンドのイメージが強い方もいるかと思いますが、サーバーサイドやインフラエンジニアも自分をアピールする有効な手段となります。フロントエンドの場合はデザインやUIを意識したポートフォリオ、サーバーサイドやインフラエンジニアは自己紹介や作成物の機能紹介をメインとしたポートフォリオを作ると良いでしょう。
また、IT業界にはさまざまな資格があり、取得しておくと面談の際にアピールできます。フロントエンドであればHTML5やRubyなどの言語に関連した資格がおすすめです。サーバーサイドやインフラエンジニアの場合は、情報処理技術業界への就職や転職者を対象とした情報処理技術者試験、Cisco製品に関する知識や技能を認定するCisco Systems関連資格、Oracle製品を扱う技術を認定するOracle関連資格、Linux認定技術者試験などがおすすめです。PMPのようなプロジェクトマネジメントに関連した資格は、業種問わず役に立つでしょう。資格は必ずしも必要ではありませんが、取得しておけば知識の証明となりますし、決して無駄にはなりません。
また、語学力は必須ではありませんが、英語で書かれた最新技術や知識が書かれた文献を読める英語力を有していれば、新しい情報をいち早く入手でき、スキルをさらに高めたり知識量を増やすのに役立つでしょう。
その他、最新の技術や新しい知識が常に求められるIT業界において、情報を素早くキャッチし、新しい環境に対応できる柔軟性や探求意欲のある人は、活躍しやすい業界です。
大規模・高トラフィック案件はさまざまな知識や技術が求められますが、その分知識や経験が増え、技術者としての幅も広がります。将来さらに大きなプロジェクトに取り組んだり、リーダーとしてさらに責任ある仕事に挑戦するのにも役立つでしょう。
まとめ
大規模・高トラフィック案件の需要は高まっており、知識や経験豊富なエンジニアが求められます。しかしそれだけでなく、技術革新や変化の激しいIT業界では、最新の知識習得や他部署とのコミュニケーション能力も求められます。現場での経験を積みながらも、日々のスキルアップやトレンドのキャッチアップは必須と言えます。