日本企業ってITにあまりお金を使わないので、従業員個人による小規模なシステムが乱立しているのが実態なんです。
ユーザー側から見ても、専門外のITエンジニアに要件を正確に伝えるのは結構億劫で、結局うまく伝わらず思っていたものとは違うものができて仕様変更、なんてパターンじゃないかなと。
そんな面倒なことやらずに自分で作ってしまおうと思う従業員は会社の中に一定数存在し、僕もその1人です。
学生の頃からプログラミングに興味があって趣味レベルでやってきたこともあり、Excelマクロを使って自分の業務をマクロに置き換えてきました。で、その経験から今では製造ラインのシステム構築を言い渡されているわけで。
そんな僕みたいな人、多いんじゃないかなと思います。
そんな非IT企業でのシステム構築の僕の経験(失敗)から、ユーザーレベルでシステム開発をする上で気をつけるべき点を書いておこうと思います。
非IT企業のIT環境
まず、非IT企業のIT環境について書いておきます。- 与えられるマシンはWindows10でCore-i3〜i5、メモリ8GBくらい
- MicroSoft Officeは標準装備。
- 勝手にソフトをインストールしてはいけない。
- 申請することはできるがプログラミング言語や開発環境はほぼ却下される。
- 共有ファイルサーバーはある。
- Webサーバーやデータベースサーバーはあるだろうがユーザー側で自由に触ることができない。
非IT系の業務であれば特に問題ない環境であるとは言えますが、業務システムを作ることになってもIT部門出ない限り環境はみんなといっしょです。
Visual Studioは業務に関係ないソフトということでインストール不可。Pythonなどの言語も同じ理由で却下です。
なので、基本的にWindowsに標準で入っている言語しか使えません。以下の5つくらいかなと。
- Excelマクロ(VBA)
- C#(ただしcsc.exeを使ったコマンドプロンプトでのコンパイル)
- VB(ただしvbc.exeを使ったコマンドプロンプトでのコンパイル)
- PowerShell
- VBScript
C#やVBはVisual Studioなしだとちょっと厳しく(VSCodeもインストールできない)、ただ、僕個人としてはメモ帳+csc.exeでC#を使っていました。
...が、ある日を境にアンチウイルスソフトが僕がC#でコンパイルしたexeファイルをことごとくウイルスと認識してしまうという大惨事が置きました。
どうも、Visual Studio上でコンパイルするとヘッダー情報が入るらしく、それがないと単純にウイルスと認識してしまうようです。おそらくVBも同じでしょう。個人がexeファイルを作る権利すら奪われてしまいました。
VBScriptやPowerShellも個人的には実際に使っていますが、そんなことより、事実として企業内ではExcelが多用されます。ちょっとした文書もWordを使わずExcel。(ほんとやめてほしい)
一般企業では標準プラットフォームがExcelと言って過言ではないほどExcel好きが多いです。ブラウザをプラットフォームにする環境はよく聞きますが、一般企業ではExcel。
よって、開発言語はExcelマクロ一択となります。
これだけはやめておけ! Excelマクロの失敗例
Excelでデータ保存はやめておけ
会社ってデータ類をまず最初にExcelファイルにまとめるケースが多いんですよね。これ自体は間違っていなくて、正しいExcelの使い方の1つなのですが、自分1人のためのデータではなく社内の多くの人が書き込んだり参照したりするようなものだった場合、結構悲惨な目にあいます。
Excelって数万行くらいになると動作が不安定になります。最悪ファイルが壊れてしまうんですよね。何人もの人が1つのファイルに読み書きするような場合は特に。
個人1人で使うファイルならともかく複数人が共有する且つデータ数が数万行にもなる場合はやはりデータベースを用意してもらって管理した方が良いです。
Accessは大人数での共有はやや不向き
データベースと言えばAccessがあるわけですが、これも実は共有フォルダに置いて複数人で使う場合はあまりおすすめできません。もちろんExcelファイルよりはずっとマシですが、データ数が増えるとめっちゃ重くなります。壊れやすくなるし。ちゃんとしたDBサーバーにくらべ信頼性はかなり低いです。
2〜3万行くらいなら共有フォルダに置いて複数人がアクセスしても大丈夫ですが、10万行くらいになるのならSQL Serverのようなちゃんとしたデータベースをよういしてもらいましょう。
どうしてもDBサーバーを用意してもらえない場合はAccessでも良いですがバックアップはこまめにしておいた方が良いですね。
いきなりデータベースに保存するな
値を入力してボタンをポチッと押せばデータベースに保存されるってごく当たり前の仕様なのですが、ユーザー開発ではやめた方がいいです。なぜかと言うと、会社では稀ですが(とは言え年に数回くらい)ネットワーク障害や急なメンテでネットワークが遮断されることがあり、そのたびに呼び出される事態に陥るからです。
呼び出されたって開発者とは言えイチユーザーにはインフラが障害なんてどうしようもないわけで。IT部門に任せるしかないわけです。
ただ、ひとたび開発者側の立ち位置に回ってしまえば、解決不可能な障害が起きたときでも呼び出されるんですよね。なんとかしてくれるんじゃないかと期待されてしまうわけで。
みんなが使う業務系システムだと(製造系のシステムは特に)、最悪休日や夜勤時に電話連絡が来るので洒落になりません。
なので、一般的な方法ではないですが、登録ボタン押下後にまずは一旦ローカルに保存して、どこかのタイミングで一括でデータベースに保存できるような仕組みにした方が無難です。Excelであれば一時保存用のシートを作れば良いわけで。
これだとインフラの障害があっても連絡が来たりはしません。
ユーザー開発の欠点は知識も権限も中途半端だってこと
これに尽きます。僕も中途半端な知識でここまでやってきましたが、長年いろいろ経験しながら今に落ち着いているので、そんな経験からユーザー開発の注意点を書いてみました。
知識は勉強すれば高めることができますが、権限はあくまでユーザーの権限しかなく、例えばデータベースを独自で立ち上げることはできません。インフラ障害があっても手を出せないし。
そんな微妙な立ち位置を考慮した上でシステムを設計した方が良いでしょう。