Case Study: 02

在庫管理システム (C# Desktop App)

.NETフレームワークを用いた専用設計。SSHトンネルによるリモートDB連携を実装。

Language

C# (.NET)

Database

MySQL (VPS)

Library

SSH.NET

Status

Full Implementation

01 開発の背景

同様の機能をExcelマクロ(VBA)を用いて開発・運用していましたが、データ量の増加に伴うExcelの動作遅延と マクロがユーザーによって誤って書き換えられてしまうリスクといった課題がありました。 そこで、それらの解決を目指し、Excelマクロから脱却した本格的な「Windowsデスクトップアプリ」として刷新することにしました。

02 採用技術・選定理由

本プロジェクトでは、フロントエンドにC#(.NET)、バックエンドにMySQL、通信経路の保護にSSHトンネリングを採用しました。それぞれの選定理由は以下の通りです。

フロントエンド:C#(Windowsデスクトップアプリ)

Excelマクロ(VBA)で課題となっていた処理速度と保守性を根本から解決するため選定しました。 C#はプログラムの構造(オブジェクト指向)を強固に保てるため複数人での開発や、 今後の機能追加(リファクタリング)が容易である点、 また、重い処理を裏側で実行しながら画面をフリーズさせない「非同期処理」が 標準で実装できる点から、実務に耐えうるデスクトップアプリとして最適だと判断しました。

データベース:MySQL(VPS運用)

データの信頼性と一元管理、および将来的なデータ量増加への対応を見据え、 リレーショナルデータベース(RDB)を採用しました。 VPS(仮想専用サーバー)上に構築することで複数拠点からの同時アクセスを可能にし、 Excel単体でのデータ管理でのファイルの破損リスク同時編集による競合 という課題をクリアにしています。

SSHトンネリングによるセキュリティ強化

VBAからリモートのデータベースへ安全に接続するためSSHトンネリングを採用しました。 VPS側のデータベースポート(3306)を外部に直接公開する運用はセキュリティ上大きなリスクとなります。 そのため、通信をすべて暗号化されたSSHプロトコル経由に制限し生ポートを完全に閉鎖した状態で セキュアにデータを送受信する構成としました。

03 工夫したポイント

暗号化通信の実装

外部のサーバーとデータをやり取りする際にハッカーによるデータの盗み見を防ぐための 「暗号化(SSHトンネル)」を行っています。 本来であれば、利用者が事前に面倒な接続設定や専用ソフトの起動を行う必要がありますが、 これをマクロ(VBA)の内部で完全に自動化しました。 ユーザーはいつも通りExcelを開いて操作するだけで裏側で安全な通信経路が自動的に作られ、 処理が終わると自動で閉じられます。 また、プログラム内にパスワード等の重要情報を直接書き込まない設計を徹底し、 万が一Excelファイルが流出した場合のセキュリティリスクも排除しています。

VPS(クラウド)運用

社内の限られたパソコンの中だけでデータを管理するのではなく、インターネット上の仮想専用サーバー(VPS)にデータベースを構築しました。 これにより、場所を問わずに全員が同じ最新データにアクセスし、同時に保存・更新ができる環境を実現しています。 VPSの選定にあたっては、自社内に物理サーバーを置くオンプレミス環境や、 大規模向けのAWS等のクラウドサービス(従量課金によるコスト高のリスク)は避け、 月額固定で安価に利用できるVPSを採用しました。 個人開発や中小規模の社内システムにおいて費用対効果に配慮しています。