4月になれば新たな社会人がたくさん誕生します。そのなかには多くのITエンジニアの卵もいます。わたしは仕事柄、ITエンジニアを目指す学生さんと話す機会がそれなりにあるのですが、希望を抱いてIT業界に入った新卒者の成功を心から願っています。
学生がITに関わる仕事の工程でイメージするのは、プログラミングです。
確かにプログラミングは重要なITの仕事ですが、全体の一部にすぎません。
ここでは、ITに関わる工程で発生する仕事について、わたしの経験を踏まえた簡単な説明をします。
調査
IT化を進めるにあたって、調査ははじめに実施するべき重要な工程です。たとえば、ソフトウエアのライセンスを購入する場合、現状、そのソフトウエアが何台の機器で使われ、さらに何人の方がそのライセンスを必要としているかを調査する必要があります。また、ソフトウェアライセンス管理のもう一つの側面として、保有するライセンス数と実際に使用しているライセンスの数を突き合わせて、余剰ライセンスがないかを管理し、適正なライセンス数を保つという役割があります。
JPCERT コーディネーションセンター(JPCERT/CC)は、2021年12月11日にApache Log4jに深刻な脆弱性が見つかったことを発表しました。このような脆弱性が発見された際、一刻も早く、自社で稼働しているシステムへの影響を調査する必要があります。
企画・提案
現在のIT化を踏まえたうえで、新たなITを企画し、予算を持っている経営層にアピールするクリエイティブな仕事が企画・提案です。わたしが行った企画・提案の実例としては、ERPシステムを導入するプロジェクトにおいて、最適な購買量を算出するための安全在庫を自動算出し、アイテム毎の調達リードタイムによって購買量の自動提案をする仕組みを経営層に提案したことがあります。この提案は非常に好評で、即採用されました。その会社ではそれまでは平均して3か月分の在庫を保有していたのですが、購買量の自動提案の仕組みを導入することで1か月分の在庫期間の短縮に成功しました。
企画・提案の仕事の醍醐味は、ITの専門家ではない、経営層に対して効果的なITの導入提案をうまく説得できたときです。
要件定義
要件定義はシステムの利用者から新たなシステムに対する要求事項を聞き出す仕事です。実際に要件定義をしたことがない方は、この仕事を利用者の要求を開発する人に伝える仕事という、まるで伝書鳩のような仕事と誤解しているのですが、とんでもないことです。システムの要件定義で重要なの能力は、システム化にあたって必要な要件をロジカルに聞き出すテクニックです。そもそも利用者はシステムのことを知らないので、すべての要件をエンジニア話すことはありません。要件の聞き漏れがあると、後から問題が生じ、工程の手戻りが発生します。
また、利用者から引き出した要件に対して優先度を利用者と調整するのも要件定義の重要な仕事です。IT化の予算は限られています。すべての要求を丸ごと実装するのは、非現実的です。限られた予算のなかで優先度の高いもの順に要求を仕様化していきます。
設計
システムの仕様を策定しプログラマに指示する仕事です。大きくは要件定義で取り決めたデータを正規化(データをルールに基づいて変形し利用しやすくすること)して、データベース設計をする仕事と、アプリケーションの開発を行うためのプログラミング仕様書に分かれます。新卒のエンジニアが到達すべき第一目標は、設計ができるようになることだと思います。後述するプログラミングは言語の移り変わりも激しいのですが、設計はプログラミングに比べると、体系的な知見を長きにわたって有効活用できます。
設計はドキュメントが成果物となります。開発手法は従来からある「ウォーターフォール型開発」に加え「アジャイル型開発」もあります。また、業務のプロセスを中心とした設計、データの持ち方を中心とした設計、オブジェクト設計など、多種多様です。開発方法論をしっかりと身に着けておくことが成功するITエンジニアの必須条件だと思います。
プログラミング
前にも述べましたが、多くの新卒エンジニアがイメージするITの仕事がプログラミングです。そしていまの学生さんの多くの方がPythonに関心をもっています。確かにPythonは独学もしやすく、案件数も多いので知っておいて損はありません。パソコンに開発環境を設定するのが面倒なのですが、コーディングの練習という意味では、下記のようなブラウザベースで動きを確認するサービスもあるので、使ってみるのもいいかもしれません。
https://ideone.com/
なお、実際に現場で必要となる言語はPythonに限りません。Pythonを含む多くの第四世代言語に加え、手続型と評される第三世代言語(CobolやCなど)も多くの現場で現役バリバリに使われています。特にCはハードウエアに近いところで動作する言語なので、近年注目されているIot(Internet of Things)案件でも必要とされます。
また、商用で使うプログラムはただ動けばOKという訳ではありません。SQLインジェクションやバッファーオーバーフローなどのセキュリティの欠陥を起こさせないよう、セキュアなプログラミングをコーディングすることも必要です。
デザイン
前述したプログラムの仕事は入力されたデータをサーバーサイドで処理を行い、結果を出力する役目です。デザインはシステムの利用者が目に見える画面の操作性そのものを指します。特にWeb系のアプリケーションは「見た目8割」と呼ばれるほど、見た目と操作性はシステムの品質をはかる重要な要素です。デザインの仕事は利用者の視点にたった機能の実装が求められます。一般的に開発の仕事はコンピュータとの対話が主ですので、その対話をエンジニアリング志向と呼ぶのですが、デザインの仕事はお客様との対話が主体となることからサービス志向と呼びます。
テスト
過小評価されている仕事の代表がテストです。やっかいなのは、ITの仕事を知らない新卒ならともかく、ITのセールスを行うような間接的にITに関わるビジネスマンもテスト工程を単純作業とみなす傾向があることです。テストはそれまでの工程で発生した仕事の不具合を第三者の立場で見つけ出し差戻し行う仕事です。テスト工程がおろそかにして、システムを稼働させると障害やセキュリティインシデントを発生させます。テストはプログラム単体の動作を確認する単体テスト、複数のアプリケーションを結合して仕様通りの動きをするかを検証する結合テスト、システム稼働後の運用を想定した運用テストに大別されます。また、データが正常に処理される正常系のテストと同じく、問題あるデータ投入やオペレーションを行うことで、システムが正しくエラーを返すかを調べる異常系のテストも実施する必要があります。
なお、構築したアプリケーションに脆弱性があるかを調べる脆弱性診断もテスト工程のひとつです。一度、稼働したアプリケーションも新たな脆弱性が見つかることがあるので、脆弱性診断は定期的に行う必要があります。
移行
古いシステムから新しいシステムへの切り替えをする際に必要な仕事が移行です。移行は古いシステムに保管されているデータを新しいシステムに取り込めるようクレンジングするデータ移行と、古いシステムの利用者が新しいシステムにスムーズにオペレーションが移行ができるよう、新旧のオペレーションの違いを利用者に伝える業務移行があります。移行はシステムの利用者と開発者、さらにアウトソーシングしているシステムの委託会社との間での責任分担があいまいになりやすい領域ですので、調整力が求められる仕事です。
移行に失敗すると稼働後にシステムの大障害を引き起こす可能性が高くなります。障害の度合いによっては企業の存続に関わる事態も想定されます。そのため、移行は事前のリハーサルをプロジェクト計画に組み込んでおく必要があります。
教育
教育はシステムの利用者に向けた操作教育、システムの管理者に向けた管理者教育に大別されます。新しいシステムの稼働にあたっては業務移行の一環として含めることもあります。教育はマニュアルの策定と一体化していて、利用者にとってわかりやすい文章、ポイントを押さえた表記が必要です。また、システム稼働直後は利用者が新たなシステムオペレーションの習熟に時間を要するので、業務定着化への取り組みとして教育は重視されます。
なお、情報セキュリティに於いては定期的な教育が必要であることがISO27001の定めに盛り込まれています。セキュリティ教育には標的型攻撃メールの訓練なども含みます。
デリバリー
オンプレミス案件では構築したシステム(ハード・ソフト一式、ドキュメント類)の成果物をお客様に納めることで納品が完了し売上になります。デリバリーは納品するシステムがお客様との契約に基づいて不足なく整備されているか、成果物がテストなどの工程を正しく経由し、出荷承認がされているかをチェックする仕事です。ともすれば、デリバリーにかかる工数は、プロジェクト計画から見過ごされがちなのですが、計画に作業が盛り込まれないと、最後にてんやわんやになるので、後述するPMOと連携をとってしっかりと工数を確保しておく必要があります。また、お客様との契約によっては、お客様の指定する場所へのシステムの設置をもって売上が成立する(設置基準)パターンと、お客様が受入検収を行ってOKが出たら売上が成立する(研修基準)パターンもあります。売上計上のタイミングはプロジェクトの開始前に営業としっかりと確認をとるべき仕事となります。
キッティング
キッティングはネットワーク機器、パソコンやタブレット、スマートフォンの組み立て、各種設定、ソフトウェアのインストールなどを行う仕事です。もし、自社に新たな社員が入ったら、その社員が使用するパソコンの整備が必要です。通常、キッティングは導入手順書があり、手順書通りに作業をするので、初級のITエンジニアが行う仕事としては最適です。
サポート
サポートはシステムの利用者からの操作方法に関する問い合わせへの回答や、システムが正しく稼働していないと思われる事態に対して適切なエスカレーションをする仕事です。サポートの仕事でいちばん大切なのは、利用者からの問い合わせに対して早くリアクションすることです。実はこれができていないケースが多いのです。これはサポートを受けた人が原因調査に気を取られ、とりあえず利用者への一次回答を失念してしまうからです。障害に対する利用者からの問い合わせは、利用者自身の操作の問題であることが多々あります。この場合、利用者に問題があることを丁寧に伝える必要があります。また、システムの不具合に起因する障害であれば、その発生原因がアプリケーションの不具合なのか、サーバーのリソースの問題ないのかを切り分けすることも重要な仕事です。
サポートは経験とテクニックを要する仕事だと思います。また、クレームの窓口でもあるので、ストレスがたまりやすく、うまく消化するべく自己管理が求められる仕事でもあります。
運用・保守
ITの仕事=プログラミングと認識している人の多くが運用をなぜか嫌います。本来、システムは作ること自体に価値があるわけではなく、使っていくことに価値があるので、運用の仕事はその価値を維持する意味で、非常に重要な仕事なのですが、やりたがらない人が多いのです。この理由として、通常のシステム運用は、うまくできて当たり前という前提があるので、周りから評価されにくい仕事(縁の下の力持ち)ということが考えられます。運用の仕事としては、システムが正しく稼働していることを監視する仕事、障害を起こしたシステムを復旧させる仕事、システムの改善を計画的に実施していく仕事に分かれます。また、障害対応にはとりあえず、復旧させる暫定対処と、障害を発生させた根本原因を調査し、再発防止策を施す恒久対策に分かれます。また、障害のなかでも情報漏洩が発生した場合は、重大でセキュリティインシデントの扱いとなります。この場合は、経営層を含めた対応策が求められ、CSIRTが稼働します。
個人的には運用の仕事は大変なのですが、とても楽しいだと感じます。稼働当初は不安定だったシステムが運用により徐々に改善が施され、利用者の使い勝手がよくなっていく様子を間近に感じることができます。そうなると、無機質なシステムも我が子を育てるような愛おしさがこみあげてくるのです。
プロジェクトマネジメント
IT化にあたってはプロジェクトの推進を担うリーダーのほかマネジャーが必要です。プロジェクトマネジメントはプロジェクトの予算と実績を管理することで、予算内でプロジェクトを遂行させるために必要となる施策をうつ仕事です。ITの仕事でもっともお金の使い方にシビアな仕事といえるかもしれません。たとえば、システム利用者の要望をひたすら聞き続けると、開発工数が膨れるので、想定している予算を大きく上回る結果を招きます。ならば、要望に対する優先度を取り決め、重要性の高い要望に絞ってシステム化を行い、優先度に低い要望に対しては、業務運用でカバーしていくといったコントロールが求められます。
IT化の現場ににらみを利かしつつ、経営層への予算の獲得にも動く、人間力の試される仕事がプロジェクトマネジメントです。
PMO
プロジェクトマネジメントに組み込まれる仕事ですが、PMOはプロジェクトマネジャーを補佐する仕事と位置づけられます。PMOの仕事で重要なのはプロジェクトの計画を策定することで、WBS(Work Breakdown Structure)を策定し、システム化に必要な作業と成果物を規定することです。プロジェクト運営に於いてはWBSに沿って、進捗を管理します。進捗に遅延が生じたら、早い段階でプロジェクトマネジャーにエスカレーションを行い、必要な指示を仰ぎます。
PDCAサイクルを回し計画通りにプロジェクトを成功に導くのがPMOの役割です。
調達
システムやITエンジニアを外部から採用するのが調達の仕事です。システムはハードウエアの調達とソフトウエアの調達に分かれます。ソフトウエアの調達においては、ベンダーに対してRFP(Request For Proposal)を提示します。RFPはいつまでに、いくらで、どんなシステムが欲しいかを記載した依頼書で、ベンダーがシステムの見積もりを行う上で、非常に重要な資料です。RFPはシステムを利用する会社が策定する役目ですが、ITの知見が低い会社ですと、自社でRFPを策定することが困難な場合があります。そのような場合は、システムコンサルタントの支援をいただくことが一般的です。
調達は複数社に対して依頼をして、もっともリーズナブルで効果の高いベンダーやITエンジニアを選定することが要です。
営業
営業と聞くと、ITエンジニアと異なる仕事と思われがちですが、これは誤った認識です。優秀な営業は優秀なITエンジニアと言っても過言ではありません。営業は受託営業と派遣営業(SES)に大別されます。受託営業の主要な仕事は、お客様企業から頂いたRFPに対して、適切な提案を行い成約に導くことです。それは営業マンひとりでできることではなく、開発や運用に関わっているエンジニアやPMOなどの力を借りて提案書を策定します。また、提案に説得力を加味するため、システムコンサルタントの助言を仰ぐこともあります。
コンサルティング
前述した調達や営業の仕事は、優秀なコンサルタントの支援によって成功が左右されます。コンサルティングに於いて重要なのは、利用者の要求しているシステムが、あるべき姿とマッチしているか、現状より改善的な提案ができるかということです。そのためには、最新の技術動向を把握しておくことと、同業他社の事例を知っておくことが必要です。たとえば、お客様からERPの提案を依頼された場合、予算に見合った適当なERPパッケージを探すだけであれば、コンサルタントは不要です。コンサルタントの力は、そこに付加価値、たとえばOCRとRPAを組み合わせて、紙の申込書から注文登録を自動で行うような仕組みをERPとセットで提案するなどです。このようなシステムの利用者が想定していなかった提案をいただくと少なからず、お客様の脳裏に焼き付きます。そのことが結果的にシステムの受注確度をあげるとともに、お客様との長期的な関係の構築に寄与することも期待できます。
コンサルタントはお客様の潜在的なシステムの要求を引き出すことで、最適なソリューションを提案する能力が求められます。