Webエンジニアの
仕事

Webエンジニア,システム開発,ソフトウェア開発

WEBエンジニアの仕事内容


WEBエンジニアの仕事は、まず顧客からWEBアプリケーションの構築を受注し、開発・テストを行って納品・公開するという流れになります。この過程では、SEやプログラマーだけでなく、WEBデザイナーやインフラエンジニアも参加して1つのシステムを構築します。


顧客からの受注ではなく、自社開発の場合も基本的には同じです。顧客と話をするかわりに社内のメンバーと話し合いながら、各エンジニアが関わって1つのシステムやサービスを作っていくことに変わりないです。



各エンジニアの仕事内容
各エンジニアの仕事の主な内容は以下のようになります。

SE(システムエンジニア)

仕事内容: 顧客との折衝、打ち合わせ、仕様策定、システム設計、テスト、マニュアル作成、見積書作成

必要となる知識・スキル: コミュニケーション力、提案力、プログラミング、HTML、JavaScript、サーバーの知識、データベース、セキュリティ


WEBプログラマー

仕事内容: プログラミング、テスト、マニュアル作成、打ち合わせ

必要となる知識・スキル: JavaやPHPなどのプログラミング、データベース、HTML、CSS、Javascript、セキュリティ、サーバーの知識


WEBデザイナー

仕事内容: サイトレイアウト、サイトデザイン、アイコン・ロゴ作成、画像加工・編集、イラスト作成

必要となる知識・スキル: HTML、CSS、JavaScript、Illustrator、Photoshop、デザイン


インフラエンジニア

仕事内容: サーバー構築・設定、ネットワーク構築・設定、チューニング

必要となる知識・スキル: LinuxやWindowsなどのOSの知識、セキュリティ、ネットワーク、サーバー、データベース、プログラミング



システム開発の流れ


1.顧客との折衝~受注
担当:SE

WEBシステム構築の依頼が電話やメール、または既存顧客からの紹介で会社にやってきます。この段階ではまだ正式に発注することが決まっていないことも多いですが、口コミなどで紹介されたような場合にはほぼ確定的なこともあります。


システムを開発してくれる会社に複数声をかけていて、話を聞きたいという場合もあります。


いずれにしても、どのようなシステムを構築するのかを聞くために、顧客のところにSEが出向いていって話を伺います。


2.仕様検討、策定~見積もり提示
担当:SE

顧客からお話を聞いた後は、会社に帰ってどんなシステムにするか仕様を検討します。この段階でおおまかな画面案や画面遷移図、仕様案、作業日程などを策定します。


受注がほぼ確定的な場合には、顧客と何回か打ち合わせを行って仕様や画面案に齟齬がないかを確認してすり合わせることがあります。


おおよそ仕様が固まったら、発注をいただくために最終的な金額を計算し、見積を提示します。


顧客にも予算があります。予算オーバーの場合は値下げの依頼があったりしますので、継続して発注をいただくために出精値引きをすることもあれば、いくつか機能を削って値段を下げることもあります。


先方が見積に納得してもらえたら、無事受注の運びとなります。



3.システム設計
担当:SE、プログラマー、インフラエンジニア

受注が確定したら本格的にプログラムの設計やシステムの設計を行います。


データベースにアクセスして必要なデータを取得するプログラムや画面の呼び出しを担う部分のプログラム、そしてデータを表示するための画面の設計などです。


SEが行うことが多いですが、プログラマーが行うこともあります。SEが担当する場合はプログラミングの知識や経験がないとなかなか難しいです。通常は、プログラマーとしてプログラミングの経験を何年か積んだのちにSEとなり、プログラム設計を行うことが多いです。


開発が進んでいくと当初に決めた仕様が後から変更ということもよくあります。なかなか難しいのですが、変更になるべく柔軟に対応できるような設計ができることが望まれます。プログラマーの時にオブジェクト指向的な設計などを学んでおくと、変更に強く保守性に優れた設計が考えられるようになってきます。


また、最終的に完成したアプリケーションが動作するサーバーの設計も行います。インフラエンジニアが中心となってサーバーの設計を行います。特に多くのアクセスがあって負荷がかかることが予想される場合には、複数台のサーバーを用意したりするなどします。


それほど複雑なものではなく、アクセスも多くないような場合にはSEが単独でサーバーの設計をすることもあります。ここまでを見ていただいてわかるように、SEはシステム設計という開発工程の上流を担うことが多く、システム全体を見渡せるような幅広い知識が必要となります。



4.プログラミング、デザイン
担当:プログラマー、デザイナー

システムやプログラムの設計ができあがると、実際に開発のフェーズに入ります。プログラマーはJavaやPHPなどのプログラミング言語を使って、プログラムを書いていきます。


データベースからデータをとってくるプログラムや、それを加工して画面に表示するプログラムを書きます。最近はWEBアプリケーションの脆弱性をついた攻撃なども多くあるため、プログラマーはセキュリティを意識したプログラムを書く必要があります。


別のページでも紹介しますが、データベースの内容を書き換えたり抜き出してしまうような攻撃(SQLインジェクション)やサイトを横断して悪意のあるプログラムを実行させるような攻撃(クロスサイトスクリプティング)などに対応できるようにします。


プログラマーは画面表示の部分も対応します。レイアウトやデザインといった部分はWEBデザイナーが担当することが多いですが、それ以外のコンテンツ表示部分はプログラムを組み込んで構築していきます。


画面部分はHTMLやCSS、JavaScriptを使うため、これらの知識も精通している必要があります。


また、WEBデザイナーは画面仕様に従ってHTMLとCSSを使ってレイアウトを組み、サイトの全体的な色遣いやデザインを決めます。このときにIllustratorやPhotoshopなどの画像編集ソフトなどを使って、サイトイメージに合うようなロゴを作成したり、写真編集を行うなどします。



5.環境構築
担当:SE、インフラエンジニア

WEBアプリケーションの開発に取り掛かると、実際にそのアプリを動作させるサーバー環境(コンピューターやネットワーク)の構築も行います。


最終的な完成品を動かすための本番サーバーと、進捗状況などを先方に確認してもらったり、社内のメンバーで開発したプログラムを更新するための開発用サーバーの2つを構築することが多いです。


開発用サーバーはアクセス制限をかけて社内と顧客先からしかアクセスすることができないような設定にします。動作確認や進捗確認の意味で使われることが多いため、まずまず快適に動作すれば良いように構築することが多いです。


一方で本番環境の方は多くのアクセスが来たり、高速な処理が求められたりします。ハッキングされることのないようにセキュリティも厳重に施す必要があります。アクセスログの管理やファイアウォールの設定、ログインできるユーザーの設定、改ざん検知の設定などを行ったうえで、顧客の要望を確実に満たし、さらにサーバーダウンせず高速に動作するように構築を行っていきます。



6.進捗確認、打ち合わせ
担当:SE、プログラマー、インフラエンジニア

顧客との進捗確認や打ち合わせは、5の開発段階で定期的に行われます。毎週1回進捗報告を行って、1か月に1回もしくは2週間に1回打ち合わせを行うなど、顧客との連絡・確認はとても重要です。


進捗確認を行うとどうしてもお互いの理解が違っているのがわかったり、これまで思いつかなかった機能が出てきて、仕様変更や追加が起こります。これによって工数が増えてしまったり、納期に遅れが出そうになることもしばしばあります。


当初の契約を守れないととても大変なことになります。納品が遅れるような場合は、仕様変更に伴う作業遅延を理解してもらうなど、顧客とよく話し合う必要があります。仮納品で対応し、正式な納品は後日に行うなどという対応を行うこともありま


このようなことにならないためにも、あらかじめ必要な工数を多めに見積もって、最初から作業期間を長くとることもあります。このようにすれば、多少の遅延が発生してもトラブルなく契約を守ることができます。


いずれにしても、顧客との進捗確認や連絡はこまめにとることがとても大事です。作業が順調に進んでいると顧客も安心しますし、いったん契約が終わっても別案件で発注をいただけたりして信頼してもらうことができます。


実際、私の会社で多くの案件を受注できているエンジニアは、1つの案件でしっかりとしたシステムを開発するのはもちろんですが、それにプラスして顧客に対して丁寧な連絡をとり、メールに対する返信も素早く、顧客の信頼を得ています。このようにして、1つのプロジェクトが終わっても、別の案件で相談をいただいたり、違うお客さんを紹介してもらったりというプラスの連鎖が起きています。


また、顧客との打ち合わせだけでなく、担当するエンジニア同士の打ち合わせもあります。進捗や仕様の確認、実装方法の確認などを行います。開発が遅れているようであれば新たに手伝ってもらう人を増やしたりすることもあります。



7.テスト
担当:SE、プログラマー、インフラエンジニア

テストは作成したプログラムが当初の仕様通り動作するかを確認するものです。


プログラムを作成しながら細かくテストを実行していくこともありますし、最後にまとめて実行することもあります。


テストで不具合が見つかった場合はすぐに修正し、エラーが出なくなるまで修正を繰り返します。



8.マニュアル作成
担当:SE、プログラマー、インフラエンジニア

納品に向けての最終段階はマニュアル作成です。アプリケーションの操作マニュアルや、保守・運用マニュアル、インストールマニュアルなどを作成します。


システムによっては、マニュアルだけで100ページ以上になるものもあります。複雑で大きなシステムだと、マニュアルに書く内容は増えます。


通常、日常生活で何か製品を買ったとしてもあまりマニュアルを読むことはないという人もいるかもしれません。また、システム開発に比べて、マニュアルは重要でないようにも思えるかもしれませんね。私も、入社して何年かはマニュアルはあまり大事ではないと思っていました。


しかし、実際、マニュアルは高い確率で読まれます。システムを使ったり、運用を行っていくと、実際に顧客自身の手で操作をすることになるので、インストールマニュアルや操作マニュアル、運用マニュアルなどは確実に読まれると思っておいた方が良いです。


また、システム開発ではプログラムだけでなくマニュアルも手を抜かないのところでも書いていますが、マニュアルから読み始めるようなお客さんもいたりします。


マニュアルはシステム開発の最後に作成することも多いのですが、最後まで気を抜くことなくしっかりと作成する必要があります。



9.納品・公開
担当:SE、インフラエンジニア

すべて完成したら、できあがったプログラムやデータをCDやDVDなどのメディアに焼き、マニュアルを添えて納品します。インターネット上に公開する場合は、本番サーバーにすべてのプログラムとデータを移し、アクセス可能な状態にします。

これでウェブアプリケーションの開発は終了になります。


よく使うプログラミング言語


Java ~ 将来性抜群でWEBアプリからスマホアプリまで幅広い
Javaは小規模から大規模のプロジェクトまで幅広く使われます。1990年代まではJavaはあまり陽の目を見ることはなかったのですが、2000年代に入ると、JavaはWEB上で使える技術として爆発的に普及しました。


WindowsでもMacでもLinuxでも動作します。OSが変わってもプログラムを編集しなおす必要がなく、とても便利です。Javaはオブジェクト指向言語といわれていて、正しく設計するとプログラムの再利用や保守がしやすいのが特徴です。


オブジェクト指向の習得は難しいとよくいわれますが、Javaはとても良く使われる言語なので、未経験者が入社して最初に学ぶ言語がJavaということもよくあります。むしろ、他の言語を学んだことがない人のほうがJavaをマスターしやすいかもしれません。


実は私も未経験で入社して最初に勉強したのがJavaでした。最初の3か月ほどはJavaの勉強をしていて、3か月たったらすでに社内で構築されていたJavaの業務アプリケーションをブラウザから実行できるように直していくという仕事をやりました。


JavaはWEBアプリケーションを作るための言語としてだけではなく、Android携帯のスマホアプリや組み込み系技術にも使われているなど、非常に適用範囲が広いのが特徴です。


Javaはうまく設計すると本当に美しいプログラムを書くことができます。オブジェクト指向言語と聞くと、どこか壮大で難しい言語のように感じてしまうかもしれませんが、いろんなところで使われていて、とても役に立つ言語です。


Javaの求人案件は非常に多く、この言語を覚えておけば転職先も見つけやすく、つぶしがきくと思います。





PHP ~ 需要が多く、初心者でも学習しやすい
PHPはウェブアプリケーションの構築に非常に良く使われています。


とてもわかりやすくて覚えやすい言語です。初心者がプログラミングを始めるのに最適の言語で、初心者向けのプログラミング本に多く採用されています。簡単にウェブアプリケーションを作るような場合に、PHPは本当に手軽に書くことができます。


プログラミングを学んでみたいという初心者の方はPHPを学んでみるのがおすすめです。


PHPもオブジェクト指向言語としても書くことができます。オブジェクト指向的な設計をすることによって、保守性や再利用性が高まります。ある程度慣れてきたら、PHPでオブジェクト指向的な書き方を習得することをお勧めします。


簡単にWEBサイトが構築できるという、今流行のWordPressもPHPでできています。WordPressのカスタマイズを行いたい人はPHPの習得が必須です。


WEBデザイナーの方でも最近はWordPressをカスタマイズすることも増えてきていますので、PHPを覚えておくと仕事の幅が出てくると思います。実際、うちの会社のデザイナーはWordPressのカスタマイズもやっています。


求人数はとても多いです。PHPができると転職活動に困らないでしょう。




Perl ~ 豊富なライブラリが利用でき、Linuxには標準で搭載
最近はPerlでウェブアプリケーションを構築するという機会は減ってきているように思いますが、以前はウェブ上でのプログラムといえばPerl(CGI)という時代がありました。それぐらいPerlがよく使われていました。


随分長い年月にわたって使われているので、ライブラリー(プログラムを使いやすくまとめたもの)が非常に充実しています。こんなことが実現したいなと思ったときに、使えるライブラリーが豊富にそろっていて、ゼロからプログラムを書かなくて済むということもよくあります。これがPerlのうれしいところです。


Perlの使われる機会が減っているように思うかもしれませんが、以前構築されたPerlのプログラムをメンテナンスしないといけない場面も多くあります。


また、サーバー側でプログラムを組む場合、LinuxにはデフォルトでPerlが入っているため、サーバーで使用するプログラムにPerlを採用するということもとても多くあります。


Perlの求人案件は少ないです。メモ帳で気軽にプログラムを書いて実行することができますが、転職という視点で見るとあまり将来性がないかもしれません。




Ruby ~ 日本発の人気言語で需要が増えてきている
2000年代中盤以降、とても人気があるプログラミング言語です。日本人が開発した言語で、日本語のマニュアルも充実しています。Rubyはウェブアプリケーションでよく使われています。


コマンド一発でウェブアプリを構築するような機能が搭載されていて、ウェブサイトの構築が非常に手軽で高速に行えるのが便利なところです。


ただ、まだレンタルサーバーなどではRubyを使えるところは少なく、個人がRubyで何かウェブアプリを公開しようとすると選択肢が少ない状況です。ちなみに、安い料金でRubyが使える有名なレンタルサーバーとしてはロリポップがあります。


求人数はJavaなどに比べると少ないですが、だんだん増えてきています。今後もRubyを用いた開発案件が増えていくことが考えられますので、興味のある人は学習してみると良いと思います。




Python ~ AIや機械学習分野などこれから急成長が見込まれる言語
Pythonは近年急速に普及してきているプログラミング言語です。


Pythonでは数値計算や機械学習などの分野で、非常に高性能で使い勝手の良いライブラリが充実していて、最近ニュースでもよく聞かれるAI(人工知能)の分野で、非常によく使われるようになっています。


たとえば、大量のテキスト情報の中から有意義なデータを見つけ出すテキストマイニングや、統計処理などの科学的な計算の実行、大量のデータを処理してモデルを構築し人間が自然に行っている学習機能をコンピューター上で実行する機械学習など、時代の最先端を行く分野で使われています。


これらは一見WEBプログラミングとは関係ないように思われるかもしれませんが、サーバー側でデータを処理するプログラムとしてよく利用されます。


また、WEBプログラミングに直接かかわる部分でもよく使われています。たとえば、FacebookやYouTube、Instagram、Dropboxなど、超有名なサイトがPythonを使って作られています。


このようにPythonは現在非常にホットな言語だといっても過言ではありません。日本でも人工知能の分野を強化していくことが「人工知能技術戦略」で決定されていて、今後ますますPythonの需要が増えていくことが予想されます。




C/C++ ~ 速度面で圧倒的に高速
C/C++は随分前からある古い言語ですが、今でもよく使われています。ウェブアプリケーションというよりは、サーバー側の処理で使われることが多いです。


WEBエンジニアの中でも特にインフラエンジニアがよく使う言語になります。WEBプログラマーやSEは、あまり使う機会はないかもしれません。


C/C++は非常に高速に動作する言語ですので、速度が求められる場面でよく使われます。LinuxなどのOS上で動作させることが多いでしょう。


C/C++は電子機器や組み込み系などでもよく使われています。C/C++の求人案件は全体で見ると多いのですが、WEBエンジニアとしては少ないのが現状です。


ただ、C/C++が使えるようになるとコンピューターが動作する仕組みや制御などに強くなります。


転職市場ではC言語が使えるとウェブエンジニア以外にも活躍の道はありますので、この言語が使えると将来にわたって安心できるのではないかと思います。


C/C++を学習するのはいいことだと思いますが、初心者が学習として始めるのはやや難しいかもしれません。





Swift ~ iOSのアプリはこれで開発
SwiftはスマホなどiOS上で動くアプリを作成するために必要な言語です。スマホアプリを作りたい人はSwiftかJavaを学習すると良いと思います。


SwiftはiOS上で動くアプリを開発するため、Macが必須です。Windows上では動きません。Macを持っていない人は別途購入する必要があるため、初期投資がややかかります。


Swiftは最近登場した言語なのでまだ求人数はそれほど多くはないです。ただ、現在iOSアプリで多く使われているObjective-Cという言語をSwiftで置き換える動きが活発です。新規に作るスマホアプリはSwiftが採用されることが増えていくでしょう。これからSwiftの需要がかなり伸びてくると考えられています。


日本人の多くが持っているiPhoneやiPadで動作するアプリを作成することができると、転職でもとても有利になることが期待できます。


30代前半のWEBエンジニアの年収


システム開発(WEB・オープン系)の平均年収が532万円で最高年収が1000万円、最低年収が200万円、月平均残業代が47,790円ということです。


30代前半の平均年収が532万円ということで、なかなか良い給料ですね。


私の30代前半のころの年収を紹介したいと思いますが、私がこの業界に入ったのは28歳で、プログラミングはできなかったですし、業界未経験でした。ゼロからのスタートで社員数が30人くらいの小さな会社だったということもあり、私が30代前半のころの年収はだいたい470万程度でした。


Tech総研に書いてある平均年収よりはちょっと少なかったですね。今思うと、もう少し大きな会社に入っていたら、もうちょっと多くもらえていたかなと思います。それでも今の会社ではやりがいを感じていますので、これくらいの差は問題ないかな・・・、と思いたいです。


月平均残業代が47,790円ということは、47,790円×12か月 = 573,480円が年収における残業代ということになりますね。


一方で、ネットワーク設計・構築(LAN・Web系)の方は平均年収が647万円です。年収が600万を越えています。随分高いですね。


この業界にいるとよく分かるのですが、ネットワークの設計や構築を専門にしているエンジニアというのは貴重です。数としてはそれほど多くありません。希少性が高いと、その分給料というのは高くなる傾向がありますね。


残業代を見ると、平均で72,857円/月です。一般的なWEBエンジニアと比べるとやや多くなる傾向があります。


ウェブエンジニアとして高い給料を目指すというのであれば、ネットワークなどインフラ系を狙うというのもありですが、次で見るように30代後半の給料と比較すると面白い結果が見えてきます。


30代後半のWEBエンジニアの年収


30代前半のシステム開発(Web・オープン系)職では532万円台だった平均年収が620万円にまで増えています。約90万円の昇給です。昇給率が高いですね。


WEBプログラマーやSEを目指す方はうれしいですね。年齢とともに昇給していくのはとてもやる気がアップしますし、うれしいことです。


一方でネットワーク設計・構築(LAN・Web系) の方は656万円で、30代前半の647万円と比べてみるとあまり変わっていません。なぜなのかはよくわかりませんが、昇給率という点で見ると、ちょっと心配だなという気はします。


WEBエンジニアの年収は以上のようになります。実際私もこの業界で働いていますが、実感として、平均年収はそんな感じだろうなと違和感なく受け入れられます。ただ、30代前半でWEB開発をお仕事としていて最高年収1000万という人もいるようで、これはすごいなと思ってしまいます。すごくできる方なのか、それとも残業をいっぱいしているのか、それとも大企業で大きなプロジェクトで働いているのかなどなど、どんなお仕事なのだろうか知りたいですね。


WEBエンジニアは将来性があると思う理由でも書いていますが、WEBエンジニアは将来にわたって活躍できる職種だと思うので、なかなか良い仕事なのではないかと思います。


もちろん、企業によって給料というのは変わりますので、転職を考えている場合には転職企業のエージェントや企業の面接担当者に事前によく確認しておくのが確実です。