◼️概要
ー 紙で管理していた部品棚卸業務をシステム化し、PC上で部品ごとの在庫数や棚卸状況を確認・修正できるシステムを開発。
ー ハンディターミナルで読み取ったQRコードと入力数量をサーバーへ送信し、Windowsサービスで受信・DB登録後、WPF画面に在庫情報を表示する仕組みを構築。
◼️担当
ー 2名体制で開発。ハンディターミナル側とWindowsサービス・WPF側に分かれており、WindowsサービスおよびWPF側を担当。
ー 既存の基本設計書・詳細設計書をベースに、仕様変更や実装内容に応じた修正・追記を実施。実装、単体テスト、結合テストまで一貫して担当。
ー 主な担当業務
・基本設計書・詳細設計書の修正、追記
・ハンディターミナルからの棚卸データ受信、電文解析
・条件分岐、エラー処理、ログ出力
・PostgreSQLへのデータ登録・取得処理
・WPF画面へのデータ連携、在庫一覧画面の実装
・在庫数の手動修正機能の実装
・単体テスト、結合テスト、仕様変更に伴う影響確認
◼️使用技術・開発環境
ー 言語:C#
ー UI:WPF
ー DB:PostgreSQL
ー ミドルウェア:IIS
ー その他:Windowsサービス、ClickOnce、Visual Studio
ー 開発手法:アジャイル開発
ー チーム規模:2名
ー C#:WPFやWindowsサービスを同一の.NET基盤で開発でき、Visual Studioとの連携や豊富なライブラリを活用した実装・デバッグが可能。
ー WPF:XAMLによる柔軟な画面レイアウトやデータバインディングに対応しており、Windows向けデスクトップアプリケーションの開発に適している。
ー PostgreSQL:トランザクションによるデータ整合性の確保が可能なRDBMS。C#から.NET用のデータプロバイダーを利用して接続。
ー IIS・ClickOnce:IISにアプリケーションの起動URLを配置し、クライアントPCからURLへアクセスすることで、ClickOnceによるアプリケーションの配布・起動を実現。
◼️課題・取り組み
ー 紙による棚卸管理では、手書き文字の読みづらさや、紙が手元にないと在庫数を確認できない課題があったため、ハンディターミナルからのデータ登録とWPF画面での在庫確認を可能にする仕組みを構築。
ー Windowsサービスでは、ハンディターミナルから受信する複数種類の電文を正確に判別する必要があったため、先頭15文字を抽出して電文形式ごとに処理を分岐。文字列チェック処理を共通関数化し、可読性と保守性を向上。
ー 不正な電文や想定外のデータを受信した場合はエラー処理を行い、現在の処理を中断して受信待機状態へ復帰する仕組みを実装。異常発生時にもWindowsサービスが停止せず、受信処理を継続できるようにした。
ー PostgreSQLへの登録時には、文字列の桁数や数値型カラムへの入力値、プライマリーキーの重複などをチェック。トランザクションによるデータ整合性の確保や、SQLのパラメータ化によるSQLインジェクション対策も実施。
ー WPFでは、利用者が部品名・品番・在庫数を確認しやすいように表示順や行間を調整し、一覧性を重視した画面を実装。さらに、誤入力に対応できるよう、個別の部品在庫数を手動修正する機能を追加。
◼️工夫した点
ー Windowsサービスの電文受信ログを記録し、処理状況やエラー発生時の原因を追跡できるようにすることで、障害調査や保守性の向上を図った。
ー テスト時にDBから取得した値が想定と異なる事象が発生した際、SQLのWHERE句の絞り込み条件が不十分であることを特定。抽出条件を修正して解決した。
ー WPFの在庫修正機能において、特定の部品の在庫数を変更すると他の部品にも変更が反映される不具合を確認。デバッグによって原因を調査し、修正対象の部品のみ更新されるように改善した。
ー 仕様変更時には既存機能への影響範囲を確認し、変更箇所だけでなく関連機能についてもテストを実施することで、デグレードの防止に努めた。
◼️成果
ー ハンディターミナルからの棚卸データ受信、PostgreSQLへの登録、WPF画面への反映まで、一連のデータ連携を実現。
ー 電文処理の共通化やログ機能の実装により、コードの可読性・保守性を向上させ、障害発生時の原因調査を容易にする仕組みを構築。
ー 在庫一覧の視認性や手動修正機能について利用者から評価を受け、部品ごとの在庫状況の確認・修正が容易になり、以前より約半分以下の時間で棚卸しが可能になった。