仕事のこと

当社の社員は、毎日、業務系システムのソフトウェアをJavaやrubyを使って開発しています。
そもそもソフトウェア開発とはどういうものでしょうか。
実はソフトウェア開発にもいろいろ・・・・あります。

ここでは当社の仕事について以下の順序で説明します。

IT業界について
まず、IT業界から説明します。
諸説ありますが、IT業界は大きく分けると四つあります。

ハードウェア業界
システムを構成する物理的な機械や装置を開発している業界です。
PCやゲーム機、ドローン、ICチップ、センサーなど、多くのハードウェアにはソフトウェアが組み込まれます。
ソフトウェア業界
ハードウェアを動作させるためのプログラムを開発している業界です。
現代社会ではあらゆるところでソフトウェアを使っています。
スマホはもちろんリモコンや時計、家を出れば信号機、エレベーター、自動ドア等々、ソフトウェアに触れない日はないくらいです。
インフラストラクチャ業界
ネットワークやサーバー、設備などシステムが動作するために必要な下部構造を整備している業界です。
情報処理業界
情報を加工・抽出するなどのサービスを、システムを使って提供している業界です。

このうち当社はソフトウェア業界で「ソフトウェアの開発」をしています。

ソフトウェアについて
ソフトウェア業界で「ソフトウェアの開発」をしている当社ですが、ソフトウェアもいくつかに分かれます。
これも諸説ありますが、ここでは大きく五つに分けます。

システムソフトウェア
ハードウェアを管理し、ユーザーにハードウェアを使うための基本的な機能を提供するソフトウェアです。
iOSやAndroid、Windowsなどいわゆるオペレーティングシステムのことです。
業務系ソフトウェア
企業や団体の業務を情報化し、生産性を上げるための機能を提供するソフトウェアです。
顧客管理や受発注、在庫システムなど企業活動のあらゆる業務が対象になります。
アプリ系ソフトウェア
スマホアプリやゲームなどのサービスを提供するソフトウェアです。
Web系ソフトウェア
インターネット上でサービスを提供するソフトウェアです。
組み込み系ソフトウェア
ハードウェアの特定の機能を実現するために機器や装置に組み込まれるソフトウェアです。
センサーやチップ、特殊用途のハードウェアなどに組み込みます。

業務系ソフトウェアとアプリ系ソフトウェア、Web系ソフトウェアの三つはアプリケーションソフトウェアに一括りすることもあります。
この三つの違いは曖昧です。
しかし、業界ではゲームを作っているところと会計ソフトを作っているところでは使う技術もハードウェアも違います。
また、インターネットでサービスを提供している会社は不特定多数の一般向けに提供しているサービスが多く業務系とは作り方が違ってきます。

このうち当社は「業務系ソフトウェアのソフトウェア開発」を行なっています。

ソフトウェア開発について
ここまででIT業界やソフトウェアについて少し分かっていただけたと思います。

ここではソフトウェア開発について説明します。

まず、ソフトウェア開発の目的は「ユーザーの新しい課題を解決する」ことです。
「ユーザーの新しい課題」はさまざまです。
新しいビジネス、投入資源の削減、成果の最大化、環境の変化等々あります。

当社が得意な業務系ソフトウェアの例をあげます。
いずれも過去に業務経験のあるソフトウェアです。

  • 不動産賃貸業の顧客管理、料金計算
  • 通販業向け顧客管理、販売管理
  • 製造業向け生産管理
  • 倉庫業向け倉庫管理
  • 自治体向け人事給与

さまざまな業種のさまざまな業務の課題を解決するためのソフトウェアがあります。
ユーザーの課題を解決できるソフトウェアがすでにあれば、ソフトウェアを開発する必要はありません。
しかし、すでにあるソフトウェアでも会社が違えば課題が違います。
最適なソフトウェアがなければ改善策を検討して、ソフトウェア開発が適当であればソフトウェアを開発します。

ソフトウェア開発には手順があります。
いきなりプログラミングを始めたりしません。

次に、ソフトウェア開発の手順について説明します。

開発手順について①
ここでは開発手順について説明します。

業務系ソフトウェアのソフトウェア開発では一般的にウォーターフォールモデルという手順で開発します。
ウォーターフォールモデルというのは要件定義や設計など開発作業をいくつかの工程に分割し、工程を順次進めていく開発手順です。

実際には、開発の規模や特性によってプロトタイピングやアジャイルなど複数の手順を使います。
開発手順を使う目的は「品質と納期を守る」「効率良く開発する」です。
うまくいっているプロジェクトほど開発手順を柔軟に改善しながら運用します。

それでは、それぞれの工程について説明します。

要件定義
ソフトウェアに必要な機能や性能の要件を決める作業です。
ユーザーの課題を解決でき、運用も含めて費用対効果が高いソフトウェアの在り方を検討し、実際に開発するソフトウェアを決定します。
ユーザーと一緒に行う作業です。次のような作業を行います。

  • 現在の業務や運用を調査
  • 経営や事業、現場の要求を調査
  • ソフトウェアを導入したときの業務や運用をシミュレーション
  • 開発コストだけでなく導入や教育などのコストも含めた費用対効果を試算
  • 開発するソフトウェアの機能やソフトウェアに必要な性能を決定

運用も含めた業務改善策を決める作業です。

基本設計
ソフトウェアを使うユーザーや連携する他のシステムから見た、ソフトウェアの振る舞いを決める作業です。
また、ソフトウェアのアーキテクチャや移行、運用などの設計も行います。

ここからは主に技術者が作業します。
ユーザーは技術者が作成した基本設計書をレビューする役目です。

要件定義を満たしながら業務を運用できる設計をします。
そのため、技術者には業務知識が必要です。
また、ユーザーに分かりやすく説明できる設計書を書く技術も必要です。

次のような設計を作成します。

  • 画面設計
  • 帳票設計
  • インターフェース設計
  • バッチ設計
  • データベース設計
  • コード設計
  • 権限設計
  • メッセージ設計
  • 共通設計

要件定義で決めたソフトウェアの機能・性能を満たす具体的なソフトウェアを決める作業です。

開発手順について②
ソフトウェア設計
オブジェクトやコンポーネント、モジュールなどのソフトウェアを構成する部品とその振る舞いを決める作業です。
詳細設計や内部設計とも呼ばれます。
プログラミングするソフトウェア部品の構成や仕様を決めます。
アルゴリズムを検討することはあってもフローチャートを書いたりすることは稀です。

今のソフトウェア開発ではプログラミングをソフトウェアの最終設計と位置付けています。

  • ソフトウェア構成図
  • ビュー設計
  • オブジェクト設計
  • モジュール設計
  • データフロー図
  • CRUD表

業務系ソフトウェアのソフトウェア開発ではフレームワークがしっかりしているのである程度プログラミングの経験があればソフトウェア設計ができます。
ただし、プログラミングの豊富な経験はあるに越したことはありません。

プログラミング・単体テスト
ソフトウェア部品をJavaやrubyなどを使ってプログラミングします。
今のソフトウェア開発ではプログラミングをソフトウェアの最終設計と位置付けています。

ソフトウェア部品を一つひとつコーディングし、ソフトウェア部品の単体テストを行います。
正しく動作するようにアルゴリズムを考えるのはプログラミングのときです。
統合開発ツールというプログラミングための専用ツールを使います。
覚えることは多いですが、今はソフトウェアライブラリが充実してますし、インターネットにもたくさんヒントがあるので難易度はそれほど高くありません。

プログラミングは最終設計という位置付けなので、作業を進めているとソフトウェア設計を見直すほうが良い場合が出てきます。
そのときはソフトウェア設計にプログラミングで得られた知見をフィードバックします。

テスト
基本設計や要件定義で決められたとおりにソフトウェアが動作するか確認する作業です。
基本設計書や要件定義書から試験項目書を作成し、テストに必要なデータや環境を準備してテストします。

不具合が判明したら計画的に修正を行います。
また、基本設計を見直すほうが良い場合も出てきます。
そのときは変更管理の中で基本設計の部分的な見直しからやり直します。

全ての試験項目に合格するか、決められた品質目標に達したら完了します。

  • 試験項目書
  • 不具合報告書
  • 試験結果報告書
  • テストデータ
  • テスト環境
開発手順について③
導入・保守
ユーザーにソフトウェアを導入する作業と運用が滞りなく行われることをサポートする作業です。

導入ではソフトウェアを収めるだけでなく、運用マニュアルや教育マニュアルを準備して研修なども行います。
使い始めて分かることもあります。
ユーザーからフィードバックをもらい、運用ができるようになるまでサポートします。

ソフトウェアの部分的な試験導入など段階的に導入することもあります。

導入までできたらソフトウェア開発の作業としては一区切りです。

導入がうまくいったら保守計画を作って運用をサポートします。
ユーザーからフィードバックをもらって想定した効果があるか、改善点はあるかを把握します。
ユーザーと調整しながら変更計画を立てて運用を含むソフトウェアの改善を続けます。

ソフトウェアも実際に運用が始まってから正確な成果や課題、改善点が見えてきます。
保守を続けることでソフトウェアの価値を維持することができます。

とても長い文章になってしまいましたが、開発手順について説明しました。

当社はソフトウェア設計からテストまで主な事業として対応しています。
技術者の中には要件定義や基本設計、導入・保守を担当することもあります。

職種・職務について
当社には次のような職種・職務があります。
まだ人数が少ないので兼務も多いのですがそれぞれの立場で責任を持って職務にあたっています。

プログラマー
主にプログラミングからテストまでを担当します。
入社したらまずはプログラマーとして自律して仕事ができるようになることを目指します。
社内の研修やOJTで教育をします。
システムエンジニア
主にソフトウェア設計からテストを担当します。
経験を積むと徐々に基本設計や要件定義を任せます。
デザイナー
当社においては当社の広報を担当しています。
サイト制作・運営、チラシや名刺づくりをします。
委員
当社には労働環境の改善、技術力の向上、人間的魅力の向上を目的とした委員会があります。
社員はどこかの委員会に所属して当社の改善活動をしています。
総務
上記の仕事と経営に関わる仕事以外の仕事を担当しています。
委員長
委員会の委員長です。
月に一度、委員を集めて会議を行い当社の改善活動を推進します。
リーダー
プロジェクトチームでリーダーとしてまとめ役をします。
研修やOJTで社員教育をする役割もあります。
部長
当社にはSES部、広報部、総務部の三つの部があります。
それぞれに部のまとめ役です。
社長
経営に関わる仕事をしています。
将来、当社の社長は社員の誰かに任せていきます。


具体的な仕事の内容
ここでは主にプログラマーやシステムエンジニアの一日の具体的な仕事の内容を説明します。

作業場所
まず、作業場所は当社の開発室かお客様の開発室か、どちらかになります。
場所は博多区か二日市、希望があれば関東圏です。
どのプロジェクトも規模や特性が違います。
配属は教育が終わるころに話し合って決めます。
作業
プロジェクトでは技術者一人ひとりに作業が割り当てられます。
割り当てはプロジェクトマネージャーが技術者の能力に合わせて割り当てます。
主にソフトウェア設計、プログラミング、テストの作業です。
作業には期限があります。
各技術者が責任を持って期限までに割り当てられた作業を終わらせます。

ソフトウェア設計とプログラミングはソフトウェア部品ごとに作業します。
細かく分割してあるのでだいたい2、3日の作業です。
テストは小さな作業をたくさん行うので一日に何件も作業します。

設計とテストではEXCELやWORDを使います。
プログラミングでは統合開発ツールや専用ツールを使います。

完了報告は簡単な作業であれば口頭の報告で済ませます。
設計など難しいものは責任者にレビューを依頼します。
レビューは対面、非対面両方あります。

相談
作業の不明点はリーダーや仕様責任者に確認します。

コミュニケーションはチャットやメール、プロジェクト管理ツールを使います。
込み入った話は口頭での確認も必要です。
ただし、確認したことは情報共有します。
口頭で確認した内容を忘れないようにするためです。

相談は都度行いますが対面で行うと相手の時間も使ってしまいます。
相談したいことを正確に文章にして伝えることも重要です。

情報共有
作業をしていて自分で気づいたことや確認したことは都度情報共有します。
プロジェクトによってはwikiや共有ドライブを使って積極的に情報共有しているところもあります。

気になったことの状況報告をすることも情報共有です。
プロジェクトが滞りなく進むには情報共有は欠かせません。
プロジェクトマネージャーの風通しのいい雰囲気づくりも大事ですが、技術者一人ひとりが意図的に情報共有する意識を持つことも大事です。

報告
毎日、進捗や状況の報告を行います。
週に一度、進捗会議が行われて状況を共有する会議があるところもあります。

遅れている、問題があることを報告することがもっとも重要です。
報告せずに作業が遅れてしまうと責任問題になります。

プロジェクトでは仕組みとして報告を行うようになっていますが、これも意図的に報告する意識が大事です。

技術者は毎日パソコンに向かって黙々と作業しているように見えます。
しかし、日々の作業はただプログラミングしているだけではないことが分かると思います。

当社のサービス
現在、三つのプロジェクトでソフトウェア開発を行なっています。

一つは、通販業向け顧客管理システムの開発プロジェクトの支援です。
当社の技術者が常駐して基本設計からテストまでの作業を担当しています。
将来は、保守も担当する予定です。

二つ目は、自治体向け人事給与パッケージの開発プロジェクトの支援です。
当社の技術者が常駐してソフトウェア設計から導入までを担当しています。
パッケージですのでカスタマイズが中心の作業です。

今年は、パッケージの移植プロジェクトでソフトウェア開発を担当する予定です。
将来は、九州展開でのソフトウェア開発を担当したいと考えています。

最後に、セキュリティパッケージの開発プロジェクトの受託開発をしています。
パッケージの根幹となるオープンソースソフトウェアのプログラミング、テスト、保守をしています。
将来は、セキュリティパッケージを保守しつつ、当社が独自に九州展開する計画を立てています。

当社の仕事のことを少し理解できたでしょうか。

これからもソフトウェア開発を通じて社会に貢献していきます。

最後に繰り返しになりますが、当社のサービスを要約すると「貢献と成長、必要とされる会社」という企業理念のもと、「日本一のソフトウェア開発技術で地域社会を支える企業」を目指して、「社会を支える情報システムの開発プロジェクトを、最先端のソフトウェア開発技術で創造的に支援し、成功させる」ことを通じて社会に貢献することです。

日本一のサービスのする努力をしています。

当社の仕事に興味を持たれた方は会社見学を申し込んで下さい。
「開発現場の雰囲気」や「人間菅家」などを知ることができます。