「なぜこのことに早く気づかなかったんだろうか・・・」
何らかのシステムを作ることになった時、特にシステムを作る経験が少ない人は、完成したシステムの姿やあるべきシステムの姿をイメージするのは難しくはないでしょうか。
プログラミングの知識やシステムを作ってきた経験が豊富な人であれば、顧客からの要望に対して大まかにでも完成したシステムの姿をイメージするのは難しくはないと思います。
最近、とあるきっかけからこのことについて、
「つくるシステムがどうしてもイメージできない時は、プロが作ったシステムを真似すればいいのではないか」
ということを考えるようになりました。
このことについて考えたことを今回書いていってみます。
とある先輩社員のつくっているシステムを見た時
とあるきっかけから、今いる会社の先輩社員がつくっているシステムを見せてもらった時がありました。
その時驚愕しました。なぜなら非常に「本物っぽかった」からです。自分の言う「本物っぽい」というのは、例えばExcelやAccess、会計システムの勘定奉行や弥生会計といったメジャーなシステムに雰囲気が似ていたからです。
なんというか、Excelなのに自分の知っているExcelじゃないというか、ほとんどがフォームで出来ている感じでした。他にも「あぁ、こんな機能あるんだぁ」という風に、自分の今までの概念ではどうしても発想できないような機能もたくさんありました。
見せてもらったシステムは自分の努力の延長線上にはイメージできない感じで、その先輩社員は相当勉強と経験を積み重ねてきたんだろうなぁと思わされました。
一方で、この時に気づいたのは、自分は狭い世界しか知らなかった、ということです。
というのも、現在使っている環境と言語はExcelとExcelVBAなので、どうしても作るシステムにExcelのシートとかExcelの機能をイメージしてしまうというか、自分の中でいつのまにか制限を作ってしまっていた気がします。
別に「ExcelVBAでも勘定奉行みたいな会計システムが作れてしまうのであれば作ってしまってもいいんだ」という考えに至れたのは、自分の中での大きな発見でした。
この部分で重要なのは、この「本物っぽさ」です。
Excelの印刷設定画面を見た時
最近、ExcelVBAの勉強のために沢内晴彦さんの『入門レベルでは決して足りない実務に必須のスキルとは ExcelVBA 実戦のための技術』を読んでいました。
以前にも少し書いたのですが、本書はExcelVBAの初心者向けではなく、ある程度勉強して実際に業務で使ってきた人向けの本になります。
本書を読んでいたとき、P208のページの以下のようなExcelの印刷の設定画面が載せられていました。

全く同じ画像ではなく、自分のパソコンにあるExcelからPrintScreen(プリントスクリーン)を使って便宜的に使わせていただきました。
本書にも上記の画像のような印刷の設定画面が載っていて、真ん中から左側の「部数」の所に「印刷部数を指定。引数Copiesで指定」、その下のプリンターの部分が「使用するプリンタを指定。引数ActivePrinterで指定」という風に書かれています。
その部分を見たときは、「なるほど、印刷の設定画面の各項目にはこういったコードが対応しているんだ」ということを感心しながら読んでいたのですが、その時ふと思いました。
「あれ?システムってこういう風に作ればいいんじゃないか?」と。
先ほどの先輩社員の「本物っぽいシステム」とも繋がってくるのですが、「目の前にこんなに良い最強の見本があるのに何で真似しなかったんだろう」とその時自分は思いました。
冒頭部分で、システムを作ってきた経験が少ない人は完成した姿をイメージするのは難しいのではないか、といったことを書きました。
というのも、かくいう自分がまさにそうだったからです。今だからこそわかりますが、以前作ったシステムは機能が不完全で、エクセルのようなメジャーなシステムをお手本にすればもっと良いものを作れたのではないかと今更ながらに思います。
例えば、今回載せたExcelの印刷の設定画面には、印刷部数の他、
- プリンタの選択
- 対象のシートの選択
- ページ指定
- 部単位での指定
- 印刷する紙の向きの指定(縦か横か)
- 印刷する紙のサイズの指定(A4かA3かなど)
- 余白の指定
- 印刷範囲の拡大縮小の指定
などの機能があります。他にも気づいた点としては、
- テキストボックス
- スピンボタン
- 押すとドロップダウンリストが表示されるボタン
- リンク
などが使われていますし、印刷する紙の向きを縦方向から横方向にセットすると、それに連動してボタンに表示されている紙のアイコンも縦方向から横方向に変更されます。
開発者の視点になったからこそ気づけたと思うのですが、とにかく様々な工夫がされていますし、ユーザーにとって非常に使いやすい設計になっているのではないでしょうか。
自分が以前つくったシステムも見本となる物やUIをちゃんと見ていれば、もっと本格的な本物っぽいシステムが作れたかもしれません。
「まずは真似してみる」という考え方
見本になるシステムは別にExcelに限らず、WordやAccess、PowerPoint、Outlookなどのマイクロソフトが開発したものはもちろん、
普段多くの人が使っているGoogleの検索画面からネットサーフィンしたりする時の画面、銀行のATMからお金をおろす時の画面、電車の定期を購入する時の画面等々、見本になるシステム、UIは私たちの生活の中にたくさんあります。
こんなに良い見本があるのに、なぜ今までこの考えに至らなかったのか不思議なくらいです。やはり、知識、経験が少ない人が0から何かを作り上げるのは限界がある気がします。
もちろんシステムを作るときに「なぜ」を考えることも必要なのでしょうが、自分のようにシステム開発経験が少ない人は見本となるシステムを真似する所から入るのもありなんじゃないか、と今回思いました。
Excelとか勘定奉行などの入力画面とか設定画面に配置されているボタンとか入力箇所、機能はただなんとなくそこに配置されているわけではなく、プロ中のプロが作ったわけですから、なんらかの「合理的な理由」があるはずです。
だから真似していく内に、作っていく内に、前後のコードの文脈やできあがったシステム全体から「なぜそれがそこにあるのか」も、たぶん気づけていけるのではないでしょうか。
業務の種類と種類ごとに対応するシステムについて
会社にはいろんな部署があります。例えば経理部や総務部、人事部、販売部、マーケティング部、生産管理部、情報システム部など一般的に考えられているものだけでこれだけあります。
一方で先に挙げた様に会社ごとに共通している部署もあります。会社ごとに業務が違うといっても根本的な部分では共通しています。
別の視点で考えると、部署ごとに必要とされるシステムもある程度は共通して決まってくるわけです。例えば会社の規模でも変わってくるのですが、経理部でよく使われる会計システムには、
- 弥生会計
- 勘定奉行
- ミロク会計
- Lotus Notes
などがあります。
また、他の部署で使われるシステムの例として『ITエンジニアのための【業務知識】がわかる本』には、部署と部署ごとに使われるシステムとして次のように書かれています。
- 人事管理に関する部署ではオービックビジネスコンサルタントの「人事給与i」(P.122参照)
- 販売管理に関する部署ではオービックビジネスコンサルタントの「商奉行i」(P.164参照)
- 生産管理に関する部署ではエクスの「電脳工場」(P.232参照)
- 物流・在庫管理に関する部署ではパスコの「LogiSTAR」(P.292参照)
などのシステムが使われているようです。
自分の知識だけでシステムをつくる、ということも勉強のひとつではあると思いますが、「プロがつくったシステムを参考にする」というのも勉強になります。
全く何の参考情報がない状態からシステムを作るよりも、例えば販売管理の「商奉行i」のUIを見る(インターネットで調べたり、関連書籍を購入してみる等)、働いている会社にあって可能であれば使ってみることによって、販売管理という業務からシステムを作るうえで、
- どんな項目が必要なのか
- どんなデータを扱っているのか
- どのようなシステム構造になっているのか
といったことなどがわかります。
上記に挙げたことを知るのは、自分だけの知識・経験からシステムを作るという状況ではなかなか難しいと思います。
SEには「様々な業務知識」が必要とされると言われますが、「この種類の業務ではどんなシステムを参考にすればよいか」という知識も必要なのではないかと今回思いました。
もう一歩進んだ考え方
もちろん真似することは重要ですが、完全に同じものを作るのは権利的、法律的に問題なので、その人自身のオリジナリティやアイデアを入れていく必要はあると思います。
ExcelやWord、勘定奉行などの会計システムを真似したシステムからもう一歩進んで、そういった多くの人に使われているメジャーなシステムから「もっとこういうことができるようにしたい」という点を盛り込んだシステムを作れれば、理想的ではないでしょうか。
もう少し言い方を変えると、既存のシステム(Excelや勘定奉行などのメジャーなシステム)を元に同じようなシステムを作りつつ、依頼主の要望に合わせてカスタマイズできればいいんじゃないかと思いました。
今の時代に存在するシステムは先人達のノウハウや合理性が蓄積されて今の姿になっているはずです。一から作るよりかは、既存のものを流用する形の方が、全然楽にシステムを作ることができるでしょう。
既存のシステムをベースにシステムを作るうえで考えられるメリットのひとつは、一から考えたり一から作ったりする必要がなく、開発側からすると非常に楽になる、というのはあると思います。
もうひとつのメリットは、ユーザーの側にとって、それ程抵抗感なく受け入れられて使いやすいのではないかということです。
今まで使っていたシステムと同じようなUIであれば「既視感」があるので「どこに何があるのか」というが早く理解できます。
一方、それまでとは全く違ったUIや機能であれば、ユーザーはシステムを使いこなすことができず、困ってしまうでしょう。
以上のことが、システム開発経験が少ない人が、システムを作る方法のひとつとして使ってみるのもありなんじゃないかなぁと今回考えたことです。





















コメント