世の中にはいろんな仕事があります。
今の生活に必需品として溶け込んだスマートフォンのアプリや、最近よく聞く人工知能(AI )などは、ソフトウェアが大きく貢献しています。
そんなソフトウェア開発を行う職業にソフトウェアエンジニアがあります。
就職活動の時期になると学生のみなさんは企業や職業のことを調べることが多くなるのではないでしょうか。また、今ある仕事から転職を考えていて他の職業や会社の働き方について興味を持っている社会人の方も多いと思います。
- IT業界やソフトウェアエンジニアの実際の業務内容を知りたい
- 自分の勤めている業界や会社以外の仕事の実情を知りたい
エンジニアの仕事内容について、7年目の現役エンジニアが紹介します。
エンジニア(SE)の普段の仕事内容
エンジニアが普段どんな仕事をしているのか紹介します。
言葉だけだとイメージが湧かないと思うので、具体例を挙げつつ説明していきます。
要件定義(仕様策定)
まずはどういったものを作るかを決める作業、要件定義(仕様策定)と呼ばれる作業です。
お客さんの求めるニーズを分析して製品としてどういったものを作るかを決めます。
更に、これらをソフトウェアとしての動作仕様に落とし込みます。
具体的なイメージを膨らませるために、例えば某有名なパズル&何とかのようなスマートフォンのゲーム開発を行うことを想定してみましょう。
その場合、以下のような動作仕様を定義していきます。
- モンスター5対を1チームとして戦うRPGのスマートフォンアプリ
- 指の操作でパズルアクションを行うことで戦闘をする
- 戦闘で得たお金やモンスターを使ってモンスターを合成し強化できる
会社の外へ足を運ぶことが多くなる
仕様を決めるためにはお客さんの目線に立って物事を考えることが大切です。
実際に使うのは開発者ではなくユーザです。ユーザのニーズに合ったものでなければ売れません。販売する方々からしても、売れないものを作られてもセールストークに困ってしまいます。
そのため、ユーザのニーズを把握するために会社の外へと足を運ぶことが多くなります。
お客さんに近いところで仕事をしている営業やサービス担当の方々に、お客さんがどのようなニーズを持っているかをヒアリングしに行きます。
また、直接お客さんのところに持っていき、考えている仕様が本当にニーズに合っているかを実際に使ってもらって評価してもらうこともあります。
さらには、他社のアプリや今世の中で受け入れられているアプリはどういう特徴があるか、などを調査した上で、自社独自の特徴を仕様に盛り込む必要があります。他社の真似だけでは売れません。
構造設計(全体設計)・詳細設計
家を建てるのと同じで、大きなソフトウェアシステムを作り上げるためには設計がかかせません。
要件定義で決めた仕様を満たして動作するソフトウェアの構造を設計する作業を行います。
要件定義で決めた仕様を機能レベルで分割しつつ機能をつないでいくことで、一連のソフトウェアアプリケーションを実現するように全体設計を行います。
また、分割した機能レベルに対して実装ができるように詳細を詰めて設計していきます。
先程と同様にゲームを想定した場合、次ののように構造を設計していく作業になります。
- 持っているモンスターやお金といったユーザ毎に異なるデータを管理する
- ユーザ毎のデータをインターネットを介して取得や反映を行う
- ダンジョンや育成といったゲームの画面フローを制御する
技術調査と仮説検証を繰り返す
大きなシステムになってくると複数のシステムと連携して機能を実現することが多くなります。
そのため、ソフトウェア設計にはソフトウェアに関する幅広い知識が必要になります。
ですが、私みたいな凡人は知らないことにたくさんぶつかります。そういったときは、インターネットを使って調べたり、それぞれの分野のスペシャリストに話を聞いて解決することが多いです。
さらに、自分でプロトタイプを作成して仮説検証を行うことで、検討した方法で本当に機能が実現できるかを調査します。
個人的には、技術を調べただけでは不十分で、プロトタイプを作成して動作確認を行い確証を持つことは結構大切だと思っています。試してみると、バージョンの違いで上手く動かなかった、ということがよくあるので。
特に、構造設計で技術の選定を間違えると大きな手戻りになってしまいます。(いつもはテキトーに生きていますが)全体の構造設計は慎重に行うようにしています。
コーティング

ソフトウェアをあまり詳しく知らない人がイメージするソフトウェアエンジニアの仕事はおそらくここの部分ではないでしょうか。
画面に何やら英語を打ち込んでいるアレです。あの気持ち悪いやつです。
だか、それがいい。
ソースコードと呼ばれるソフトウェアを動かすプログラムを書く作業です。ひたすら手を動かしてキーボードをカタカタします。
開発する対象によって使用するプログラミング言語が異なります。言語毎の書き方や特徴を知っている必要があるので、開発者の実力によって開発スピードが大きく差が出る部分です。
また、チームで開発を行うときは、自分がソースコードを書くだけではなく、他人が書いたコードをレビューします。複数人でソースコードを書き上げることで品質向上を行なっています。
地味な作業ですが、実際に動くものはコーディングを行うことで完成します。物作りをしている感が一番あるので私は好きです。
というより、好きじゃないとやってられないかも…
テスト

要求定義通りにソフトウェアが作成できているかを確認する作業です。
テストをする際はただ闇雲にテストをするのではなく、どういったテストをするかを事前に決めて行います。
品質を確保するためにテストを設計するのもソフトウェアエンジニアのひとつのスキルです。
私が開発をしている製品が医療機器なのもあり、一般的なソフトウェアと比べて品質面に関しては非常に厳しいです。テスト嫌いな私にとっては結構嫌なフェーズだったりします。。。
その他:医療系ならではの仕事
ソフトウェアは様々な分野で使われています。その中で私は医療系のソフトウェア開発を行っています。医療系ソフトウェアはならではの他の分野にはない特殊な部分がいくつかあります。
例えば医療系ソフトウェアを作るためには国の法律で定められた規格に準拠する必要があります。
何を隠そうこの作業がめちゃくちゃ大変です。趣味でアプリを作るのに比べて5倍ぐらい大変です。
具体的には、医療機器なので人の命に関わるリスクがあるので、どんなリスクが潜んでいるか洗い出します。電源が落ちたらとか、操作を間違えたら、といった具合です。
次は洗い出したリスク全てに対して対策を講じます。「そんなことになるケースはレアケースだし、慎重に考えすぎじゃない・・・?」って突っ込みたい気持ちをグッと堪えて向き合います。
まとめ
エンジニアの仕事内容について本記事で紹介したことをまとめます。
- エンジニア主な仕事内容
- 要件定義・仕様策定
- 構造設計・詳細設計
- コーディング
- テスト
- 医療など分野特有の作業
同じエンジニアでも務める企業の規模や開発する製品によって取り組む内容は大きく異なっています。
その違いは、実際に勤めている人でないとなかなか分からないと思いますので、興味のある人はぜひいろんな情報を調べてみると良いと思います。