先達はあらまほしきことなり

デジタルテクノロジーの活用と展望

Excelで開発できるツールをWEBアプリケーションで開発するとコストが数十倍かかる

思考実験

ExcelVBAで開発されたツールがあるとする。Excelのシートにお客様情報と売上情報入力し、請求書をエクセルファイルとしてい出力することができる。
WEBアプリケーションで同じことをやろうとするとどうか。工程を大きく2つに分けると次のようになる。

  • 入力画面をHTMLとCSSPHPを使って作る
  • ブラウザ画面で受け取ったデータをエクセルファイル形式にして出力する

HTML、CSSPHPのスキルが必要になる。それ以外にもWEBアプリケーションを動かすにはサーバーが必要になる。WEBアプリケーションは人気が高いが、万能ではない。小回りが必要な業務アプリケーションには向かない。

VBAの存在意義

Excelで行っている業務を自動する場合、VBAExcelツールを開発する方が自然だ。他のプログラミング言語Excelを操作するのはできなくはないが、開発工数がかかる上、エクセルのすべての機能は使えない。

普段の手作業を自動化する

手作業で何をしているか

自動化するにあたって、手作業を改めて手順書にしてみると、単純なことの繰り返しであることに気づくことが多い。コピペ、フォントの変更、罫線で体裁調整、など。エクセルで関数を設定する場合も、1番目のセルに関数式を設定してあとはコピペしているに過ぎない。データ量に応じて、行数が変動しても、列の項目数は同じなど、動的な部分と静的な部分があるはず。集計するその時々でデータ量が変わる。しかし、最終的なフォーマットはいつもと同じにしたいので、最後に罫線を引き直していつもと同じ見た目に仕上げる。このような仕事は典型的な定型業務だ。そのような業務で残業していては、生産性が極めて低い。

100回も1000回も同じ

定型業務を自動化するメリットは、手作業で数時間かけていた業務が、数秒~数分になることだ。データ量が増えても問題ない。人間だと100回の繰り返し作業と1000回の繰り返し作業は10倍の時間差が発生するが、コンピューターにとって100回も1000も同じだ。処理にかかる時間が10倍になることはない。そういう意味では、今後データ量が増えるような業務は早く自動化しておいた方がよい。

手作業には戻れない

早く自動化していればよかった。長年手作業で苦労していた人がよく口にする言葉だ。経理担当者の定型業務の手作業は本当に大変だ。月末月初に裁かないといけない仕事量が多く、転記ミスや計算ミスは許されない。このような業務はいち早く自動化されてほしい。月末月初は残業が当たり前の状態を脱するために。

VBAはホワイトカラーの定型業務を自動化するプログラミング言語

オフィスワーク向けのアプリケーション

アプリケーションには、

  • 娯楽向けのゲームアプリケーション
  • ロボットや家電に内蔵されている組込み系のアプリケーション
  • ホワイトカラーの定型業務を自動化する業務アプリケーション

などがある。
ホワイトカラーの仕事の中には、必ず定型業務がある。定期的に同じ作業を行うルーチンワークだ。ホワイトカラーの定型業務を自動化する業務アプリケーションを使えば、定型業務はすべて自動化できる。

Office中心の仕事環境ならVBA一択

このような自動化テクノロジーを実現するのに一番適したプログラミング言語VBAだ。VBAはOffice製品を自動制御するプログラミング言語なので、ワード、エクセル、パワーポイント、アクセスをカスタマイズできる。WindowsPCを使っていれば、特に難しい設定をしなくても、すぐにカスタマイズしたアプリケーションを利用できる。ドキュメントワークに使っているのがMicrosoftのOffice製品であれば、VBAでアプリケーションをカスタマイズして便利なツールにするが一般的だ。

さまざまな定型業務がVBAで自動化されている

定型業務が多い職場では、たくさんの便利なツールを利用している。

  • 請求書発行ツール
  • 在庫管理システム

など。
ツールやシステムを使わない業務の方が少ないケースもある。

自分のビジネス(業務)を持っている人が習得が早い

学んでも使えない英語の二の舞にならないように

プログラミングスキルは使うことで初めて身につく。技術書は構文を勉強するには、体系的にまとめられているので有効だが、実用的に使う技術はほとんど身につかない。英語の構文を勉強しても、英語を話せないまたは英語で文章を記述できないのと同じ。しゃべりたいことや言いたいことがなければ、わざわざ言葉を発することや書くことはない。プログラミングも同様に、自分が自動化したいと望んでいるビジネス(業務)がないと、構文を読んで理解できるレベル、問題集の問題が解けるレベルのままだ。自由自在に使えるレベルに成長しない。

スキルを磨き上げるか忘却か

逆に、自分が自動化したいと望んでいるビジネス(業務)があれば、基礎スキルを使って、社会実装する場数を踏むので応用スキルが身につく。応用スキルは社会実装しないと身につかない。すでに作りたいアプリケーションが明確にある人は、どんどん習得していく。作りたいものが明確にない場合は、スキルを発揮する場を積極的に作る・得るという行動が欠かせない。それをしないと、せっかく習得した基礎スキルが忘却されていく。

初心で抱いた報酬

プログラミングスキルを習得しようとした初心は、それでお金や自尊心などの報酬を得るということだったはずだ。スキルにより報酬を得るということは市場価値を生み出してこそなのだ。技術書だけで身につけたスキルは、市場価値を生み出す一歩手前の状態だ。市場価値は実社会でしか生み出せない。自己学習に閉じていては、誰の役にも立てないスキルのままで風化していくだけだ。

開発スコープを決める

どこまで自動化するか

業務を効率化するために、アプリケーションで自動化するのだが、その際に大事なのは自動化する部分と手動のままの部分をはじめに切り分けておくことだ。すべて自動化できればよいが、どうしても手作業の部分は残るものだ。自動化の対象業務が広く、時間的な都合や技術的な都合で、一気に自動化することが難しい場合、今回自動化する範囲、次回自動化する範囲というふうに、開発する範囲を区切ることがある。この開発範囲のことを開発スコープという。

開発スコープの認識合わせ

ユーザー側と開発側で開発スコープの認識が合っていないと、「ここまで自動化される想定だった」などと納品後にトラブルになりかねない。複数人でアプリケーションを分業体制で開発する場合、全員が開発スコープを共有していないと、設計モレ、実装モレ、テストモレなどが発生しスムーズに開発が進まない。

EUCプログラマーの場合

VBAで自分でアプリケーションを開発する場合にも、最初に開発スコープを決めることが大事だ。一気に開発するのが大変な場合は、小さな開発スコープの開発を続けて、次第に自動化できる業務範囲を広げていくという方法も有効だ。私もユーザー兼開発者でAccessを開発していた頃があり、実際の業務の方が忙しいため、少しずつ自動化の機能を付け足していったという経験がある。

プログラミングは限界費用を下げるストックビジネスのキング

限界費用とは、「単位生産量当たりのコスト増加量」だ。
解説しているサイトはたくさんあるので、詳しくはそちらで。

フロービジネスとストックビジネスの違いはこの限界費用で区分けできる。

y:コスト量
x:生産量
a:係数

フロービジネスのコスト計算式
y=ax

ストックビジネスのコスト計算式
y=\log{a}(x)

フロービジネスでは生産量に比例してコストがかかる。一方、ストックビジネスでは生産量を増やすほど、コストがかからなくなる。現場感覚的にいえば、同じサービスを提供する場合、過去に同じサービスを提供していればしているほど、収益率が良くなる。プログラミングの仕事でいえば、同じビジネスロジックを処理するプログラミングコードを開発すれば、複数のアプリケーションに転用できる。それに対して、接客業などのフロービジネスは、毎回同じ接客サービスを提供するのに同じコスト(時間・体力)をかける必要がある。

限界費用=グラフの傾き

比例関数の傾きはいつまでも同じなので、フロービジネスの限界費用は一定だ。対数関数の傾きは先に行けば行くほど緩やかになる。つまり、フロービジネスは限界費用を下げるのが難しいが、ストックビジネスでは限界費用は生産量を伸ばすほど逓減するのだ。

(参考)
sawaqen.hatenablog.com

プログラマーが関わる事業

プログラマーが関わる事業は3つに分けられる

  • SES
  • 受託開発
  • 自社製品開発

会社に所属しているプログラマーフリーランスプログラマーに関わらず、職業としてのプログラマーは3つの内のどれかのビジネスに従事している。

SES

システムエンジニアリングサービスの略語。SESの内容は、客先企業に常駐してアプリケーションを開発することだ。SESを展開している企業は数人のプログラマーをチームとして元請け会社に送り込んでいる。発注する側としていは、社外秘データを扱うアプリケーション開発はその会社の外でデータを扱うことはリスクになるのでSESを利用する。エンドユーザー用のアプリケーションを開発する場合、ユーザーとプログラマーが顔を合わせられる距離にいることが必要だ。このような事情からSESが存在する。業務アプリケーションの開発はSESが多い。

受託開発

社外の企業からの注文を受け自社内で開発を行い、納品するサービス。受託開発は業務アプリケーション開発の他に、IoT関連のハードウェア連携のアプリケーションを開発するケースで見られる。ハードウェアと連携する開発は、執務室ではなく、安全性が求められる作業場が必要で、客先企業にそのようなスペースはない。その他の点においても客先企業に常駐する必要がない。受託開発は営業部が仕事をもらってくる場合やクラウドソーシングなどのマッチングサービスを介して仕事を取得する場合などがある。

自社製品開発

自社で製品を企画し、開発する事業。開発したアプリケーションを販売するケースと、開発したアプリケーションをもとにサービスを提供するするケースがある。ゲームアプリケーションを売るケースが前者、SNSアプリケーション(Facebook,Twitterなど)でSNSサービスを提供するケースが後者の例。他に、ハードウェアというかたちで販売するケースや、ハードウェアを貸与してサービスを提供するケースもある。