Python学院
メールマガジンバックナンバー

vol.06

Pythonでこんなもの作りました!
~弊社インソースの開発事例

今回のメルマガのテーマは
Pythonでこんなもの作りました! ~弊社インソースの開発事例」でございます。


このメルマガを書いている本日の日付は8月4日ですが、
昨日サッカー日本代表のスペイン戦をテレビで観戦しておりました。

手に汗握る攻防が続き、結果は惜しくも敗れましたが、
最後までひたむきに勝利を狙う選手たちの姿勢に感動いたしました。

ところで皆さま、「ロボット実況」はご存じでしょうか?

スポーツの実況といえば人が行うイメージですが、
スポーツイベントではたまにロボットが実況を行っています。

そのロボットの実況が可愛くて、なんだか少し面白いです。

私は普段Pythonを用いた社内の業務自動化に取り組んでおりますが、
仕事柄「このロボット実況って、どういう仕組みで実現しているのかな」と思いました。

ITスキルを身に付けることで、世の中の見え方が変わる」なんていったりしますが、
私もテクノロジーが活用されているものについて、自然に「裏側」をイメージ
できるようになりました。


当メルマガの読者の中には、既にPython学習中の方もいれば、
学習を検討中の方もいらっしゃることでしょう。

Pythonを学習中の方も学習を検討中の方も、このようなお悩みはありませんでしょうか。

Pythonを現場で活用するイメージが、どうしても湧かない

具体的な現場での活用イメージが湧かなければ、
どうしても学習のモチベーションは上がらないものです。

逆に、具体的な現場での活用イメージが湧くようになり、ビジネス現場の課題を
解決するための具体的な開発の流れが分かれば、「何を学習すれば良いか」が
明確になり、Python学習を効率的に進められるようになります。


そこで今回は、「Pythonを学ぶとできること」というような一般論ではなく、
「インソースでは最近、現場の課題解決のためにこんなものを開発しました!
こういう手順で開発を進め、こういうところが難しかった。開発に際し使用した
技術はこれです!」
というような「具体的な開発のお話」をしていきます。

弊社では定期的にPython研修を開催しており、様々な業種の方から
直接お話をお聞きする機会がございますが、多くの方が口をそろえて
「現場での活用イメージが湧かない」と言います。

このメルマガを通して、是非現場での活用イメージを獲得していただければと思います!



弊社では、今回の開発事例でも用いられている「Excel操作」と「スクレイピング」について、学習できる研修をご提供しております。
Pythonの基本文法から学習されたい方には、以下の研修をオススメしております!
・Python学院~短期集中講座(5日間) ※「Python基本文法」と「Excel操作」「スクレイピング」について学べる!

すでにPythonの基本文法は学習済みの方には、以下の応用的な研修をオススメ致します!
・Python学院~Python応用講座(2日間) ※「ダイアログ」「実行ファイル」「仮想環境」や「スクレイピング」「ブラウザ操作」「Excel操作」について学べる!


(約10分で読めます)

~~~~~~~~~目次~~~~~~~~~

1. 弊社作成物と開発のきっかけについて
2. 開発の流れ
3. 開発にあたり、こんなところが難しかった!
4. 使用した技術
5. 最後に

~~~~~~~~~~~~~~~~~~~~


1. 弊社作成物と開発のきっかけについて


弊社では、営業活動を自社の専用システムを用いて行っております。

架電や訪問、案件獲得の実績が発生するたびに、担当者が自社システムに記入し、
毎営業日の定時頃に集計担当者が「1日の行動量集計結果」を全社員宛てにメールで
お送りしております。

元々この作業は集計担当者が手作業で行っており、
集計作業に毎営業日15~30分程度の時間を要しておりました。

この手作業で行っていた集計作業を自動化し、
実際に現在全社員宛てに送られているメールが、以下です。
(名前、数値等はダミーのものを使用しています。)

1日の行動量集計結果(全社宛メール)

この集計作業の実行に必要なのは、以下「実行ファイルのダブルクリックのみ
でございます。
行動量自動集計_ver_1.exe

集計結果を作成した後、集計結果表を画像としてメールに貼り付け、自動送信します。


ビジネス課題の解決のための開発は、すべて「ニーズ」から始まります。

今回の開発においても、「毎営業日手作業で集計作業を行うのが面倒、この定型作業を
どうにかして自動化できないか」という現場担当者からの要望・ニーズがあり、
そこから開発をスタートいたしました。

当たり前ですが、何かしらのニーズがないと開発はスタートしません。

この「自動化できないか。効率化できないか」というニーズは、全ての組織に存在します。
組織のあらゆる業務の自動化・効率化を実現するにあたり、この「ニーズ」をいかにして
吸い上げるかが非常に重要となります。

この他にも、弊社では集計関連のあらゆる業務が自動化されており、毎日自動的に
送られてくるデータを見て、今後の戦略策定に活かしています。

弊社でなぜあらゆる業務の自動化が実現されているかというと、
それは「ニーズを吸い上げるための仕組み」ができており、
また「ニーズを伝えやすい組織風土」があるからです。

「現場の人間が、ニーズを伝えやすい組織風土かどうか」は、
組織のDXを推し進めるにあたり非常に重要な要素となります。



2. 開発の流れ


先程お見せした「行動量を自動集計してメール送信する」システムを作成するにあたり、
私は以下の流れで開発を進めました。

(1)要求・要件定義
(2)設計
(3)開発環境の準備
(4)開発
(5)テスト
(6)ユーザーテスト・納品


少し専門用語が出てきて「難しそう」と感じたかもしれませんが、ITについて
自信がない方、プログラミング未経験の方でも分かるようにご説明をいたします。

読者の皆さまが現場でPythonを用いた開発を行う場合も、上記と同じような流れで開発を
進めることになるかと思いますので、是非ここで理解をしていただければと思います!


(1)要求・要件定義


先程、「開発はニーズから始まる」ということをお伝えいたしました。

何かしらの理由で困っている人がいて、その困りごとを解決するために、
開発を行います。

困りごとを解決するためには、そもそも「どんなことで困っているのか」を
理解する必要があります。

また、「どんな状態になったら理想か」をヒアリングする必要があります。

この「何に困っていて、どんなことを実現したいのか」を理解することが、
開発のスタートです。

またこのフェーズでは必要に応じて、現在の業務フロー図と
理想の業務フロー図を作成することがあります。

この要求・要件定義は、開発プロジェクトを成功させるために
「最重要」と言える工程です。

「どんな悩みを持った人が、どんなことを実現したいのか。実現のために、どのように
プロジェクトを進めていくか」が明文化されていれば、それが開発プロジェクトチームの
共通認識となり、「この機能は必要か」などといったことを判断する重要な指針となります。

先程ご紹介した弊社開発物についても、まず初めに要求・要件定義を行いました。

開発依頼者と開発プロジェクトチームで打ち合わせを実施し、
「何に困っていて、何を実現したいのか。実現するために、
どのようにプロジェクトを進めるか。」
を決めました。


(2)設計


どのようなことを実現するための開発プロジェクトなのかが決まれば、
次に実現のための具体的な方法を考えます。

これを「設計フェーズ」と呼びます。

ここでは、実現のための「アルゴリズム」を考える必要があります。

「アルゴリズム」という言葉は見聞きしたことがあっても、
その意味はよく知らないという方もいらっしゃるのではないでしょうか。

アルゴリズムとは、
問題や課題を解決するための手順を、漏れなく表現したアイデアや考え方のこと」です。

少し難しく聞こえるかもしれませんが、要は「手順」のことです。

例えば自動販売機で120円の飲み物を買うときに、手順としては

------------------------------------
100円玉を投入する
⇒10円玉を1枚投入する
⇒10円玉を1枚投入する
⇒120円の飲み物の下のボタンが点灯する
⇒点灯しているボタンを押す

------------------------------------

といった感じでしょうか。

アルゴリズムについては、まずはこれぐらいの認識で問題ありません。

先程ご紹介いたしました「行動量の自動集計とメール配信」のシステムの開発手順は、

------------------------------------
自社システムから各営業の1日の行動量のデータ(訪問数・架電数等)を取得する
⇒訪問数のランキング表を作成し、画像出力する
⇒架電数のランキング表を作成し、画像出力する
⇒月のサマリ表を作成し、画像出力する
⇒画像を載せたメール文を用意し、メール送信する

------------------------------------

といった感じです。

このアルゴリズム(手順)の作成を設計フェーズでいかに質高くできるかが、
この後の開発フェーズに大きく影響します。


(3)開発環境の準備


次に、開発環境の準備を行っていきます。

コンピューター上で何かを動作させるためには、「プログラム」を
作成する必要があります。
「プログラム」とは、つまり「コンピューターへの命令書」です。

このプログラムを作成するときに使うのが「プログラミング言語」です。

普段仕事で何か依頼書を作成するときは、基本的に「日本語」を使いますよね。

同じようにコンピューターへの依頼書(命令書)を作成するときは
「プログラミング言語」を使います。

Pythonは、この「プログラミング言語」の種類の一つです。

そしてこのPythonを使ってプログラムを作成するためには、
プログラムを動かすための「環境の準備」が必要となります。

Pythonの環境構築の方法には様々なものがありますが、インターネット上に大量に方法が
出回っておりますので、ここで詳しくはご説明いたしません。
もしご興味があれば、是非検索エンジンで「Python 環境構築 方法」などと
検索して調べてみてください。
下記ではPythonのインストール方法をご紹介しております。

「プログラミング言語「Python」ダウンロードとインストール方法」
https://note.com/insource_media/n/nfad7d7f495ba

(4)開発


さて、Pythonをコンピューター上で動作させるための環境の準備ができました。

「(1)要求・要件定義」と「(2)設計」のフェーズで、
「どんな目的で、何を作るのか。また、具体的にどのようにして作るのか」も
決まっています。

ここまでくれば、次は「開発」のフェーズとなります。

「要求・要件定義」と「設計」がしっかりできていれば、
開発をスムーズに進めることができます。

この開発のフェーズでプログラムの作成のために使うのが、
プログラミング言語「Python」です。

ちなみに、Pythonで記述した行動量自動集計のプログラムは、以下のような感じです。
行動量自動集計のプログラムのソースコード

大人の都合でぼかしを入れておりますが、何だかカラフルですね。

分かる方向けの話になりますが、ちなみに私はテキストエディタに
「Visual Studio Code」を使っています。


(5)テスト


「開発ができたから、依頼者に作成物を納品しよう!」といきたいところですが、
実はそうはいきません。

普通、開発プロジェクトには「テスト」という工程が存在します。

これも、あまり難しく考えなくて大丈夫です。

作成したものが、正常に動作するかをテストする
ただこれだけです。

プログラム内に潜むバグ(エラー)を探し出し解消することを、
IT用語で「デバッグ」と呼びます。

開発者が自分の作成物について完璧と思っても、しっかりテストをすると
ほとんどの確率でバグが見つかります。

このバグを取り除き正常に動作させるテストの工程ですが、案外時間を要します。

納品後に不具合が見つかり、その不具合の修正を行うとなると、
対応に結構な時間がかかることが多いです。

このテストの工程で、いかに様々な観点からプログラムにバグが潜んでいないかを
探し出せるかが、納品後の運用コストを抑えるうえで非常に重要となります。


(6)ユーザーテスト・納品


テストが完了したら、作成物を実際にユーザーに使っていただきます。

開発者のPC上でうまく動作したのに、依頼者のPC上ではうまく動作しないということは
往々にしてあります。

ユーザーにとって使いやすいか、改善すべき点はないか、不具合が発生しないかを
確認していただき、問題なければ開発案件が完了となります。


以上、開発の各工程について概要をお伝えいたしました。

ほとんどの開発案件で、ご紹介した各工程を踏みながら進めていきます。

まだ少し難しく感じている方もいらっしゃるかもしれませんが、改めて整理すると、
(1)要求・要件定義
⇒具体的に何を作るかを決める
(2)設計
⇒どうやって作るかを具体的に決める
(3)環境の準備
⇒プログラムが動く環境を用意する
(4)開発
⇒プログラムを書く
(5)テスト
⇒作ったものが正常に動作するかを確認する
(6)ユーザーテスト・納品
⇒ユーザーに使っていただき、問題がないかを確認していただく

このように言い換えると、開発の流れの具体的なイメージが湧くのではないでしょうか。



3. 開発にあたり、こんなところが難しかった!


では、私が作成した「行動量の自動集計とメール配信」のシステムについて、
開発にあたり苦労した点を2つご紹介いたします。

「開発を進める中で、こういうところで苦労するのか!」と、
なんとなくイメージを持っていただければと思います。


(1)プログラムを実行ファイルにして集計を行った時、「文字化け」が発生した



「実行ファイル」と聞いてもよく分からないかもしれませんが、
イメージが付きやすいのはWindowsのexe形式のファイルです。
よく見るファイルの拡張子ですね。
行動量自動集計_ver_1.exe

この実行ファイルをダブルクリックすると、行動量自動集計のプログラムが動作します。

ただ、作成された画像を見ると以下のようになっていました。
行動量自動集計の動作結果(文字化け発生)

文字が正しく表示されていません。
これはいわゆる「文字化け」という現象です。
「豆腐文字」とも言います。

これ、けっこう苦労しました。
普通にファイルに書いたプログラムを実行してもこうはならないのに、
実行ファイルにするとなぜかこうなりました。

結論、以下の一文をファイルの冒頭に書き足すことで直りました。

追記したソースコード

この文字化け、今回のケース以外でもたまに発生することがあり、地味に苦労します。


(2)正常に情報が取得できる時とできない時がある



まずは、以下の集計結果の画像をご覧ください。
集計結果(累計と目標達成率の値が0になっている)

「累計」と「目標達成率」の値が「0」になっています。

累計の数値が「0」だったら目標達成率も「0.0%」になるわけなので、
どうやら累計の数値が正常に取得できていないことが原因のようです。

行動量の数値は、自社システムから取得してきています。

月の累計の行動量を集計するためには、以下画像のように入力フォームに値をセットし、
「集計」のボタンを押す必要があります。
行動量集計フォーム(Plants)

「集計」ボタンを押すことで行動量の集計結果が表示されますが、
表示には少し時間がかかります。

PythonでWebブラウザを自動操作することでこの処理を実現していますが、
表示までに時間を要する場合に、次から次へと表示結果を取得しにいこうとすると、
たまにデータが正常に取得できないことがあります。

今回、この問題は「プログラムとプログラムの処理の間で、少し時間を空ける」ことで
解決しました。

以下のコードを書きます。
処理の間で少し時間を空けるコード

これで「2秒間スリープしてください!」という命令になります。

直感的に分かりやすくないですか?

このように、Pythonにはプログラムが直感的で非常に
分かりやすいという特徴があります。




4.使用した技術


それでは、ここまでに紹介した「行動量の自動集計とメール配信」のシステムを
開発するにあたり、どのような技術を使用したかを以下ご紹介いたします。


(1)Web上からの情報収集自動化(スクレイピング)


⇒自社システムからデータを取得するにあたり、「スクレイピング」という技術を
使いました。
この技術、非常によく使います。


(2)Webブラウザの自動操作


⇒Webページから様々なデータを取得するにあたり、ページを移動して
データを取得する、またボタンをクリックした結果表示されるデータを取得するなど、
Webブラウザの自動操作は「スクレイピング」を行うにあたり非常によく使われます。


(3)Excel自動操作


⇒あらかじめ用意しておいたExcelファイルからデータを取得し、
取得したデータをプログラム内で扱うといったことを行いました。
PythonではExcelのデータ読み書きを非常に手軽に行うことができます。
あらゆる組織でExcelは当たり前に使われていることもあり、
このExcel自動操作の技術も非常によく使います。


(4)その他


上記3つ以外にも、以下のような技術を使いました。
・メール自動送信
・ダイアログからのデータ入力
・プログラムを実行ファイル(exe形式)に変換
・HTML・CSSでのメール装飾



特に重要なのは、「Web上からの情報収集自動化(スクレイピング)」と
Excel自動操作」です。

これらは習得が容易であり、すぐにビジネスの現場で活用することが可能です。

私が社内で何かPythonを用いて業務自動化を行うにあたり、
この「スクレイピング」か「Excel自動操作」のどちらかは、ほぼ確実に使います。

「手っ取り早くビジネス現場でPythonを活用して業務自動化を行いたい!」と
お考えでしたら、是非この「スクレイピング」と「Excel自動操作」の2つのスキル習得に
取り組んでみてください!




5.最後に


以上、少し長くなりましたが、Pythonを用いて弊社が作成したものを題材に、
開発プロジェクトの一連の流れについてご説明をさせていただきました。

少し難しく感じた方もいらっしゃるかもしれませんが、難しくて複雑に感じる
あらゆるものは、基本的なスキルの組み合わせでできているものが多いです。

複雑なものは、シンプルなものに分解できます。

一見開発が難しそうに感じる開発案件でも、工程を細分化すればシンプルなものを
順番に作成し、それらを組み合わせることで複雑なシステムが完成するということが
分かります。

「自分もビジネス現場の課題を解決するシステムを、何か作ってみたい!」と
お考えの方は、是非「複雑なものを分解して、シンプルにする」ということを
意識してみてください。

まあ、口で言うのは簡単ですが、実際開発案件に取り掛かると
難しいことは多々あります。

ただ、何事もトライ&エラーです。
まずは何かを作ってみることが大切です。取り掛かることが大切です。
数が成長・成功を生み出します。

今後ご自身でPythonによるビジネス現場の課題解決に取り組むことがあった際に、
このメルマガの内容がお役立ちできておりましたら大変嬉しく思います。


最後までお読みいただき、ありがとうございました!
「インソースのPythonマガジン Vol.6」は、これで以上となります。

このメルマガでは今後も、Python学習に関するお役立ち情報、また社内のDX化を
主導するための具体的な方法や、弊社や他社様のPython活用の事例など、
ビジネスの現場で真に活かせる有益な情報の提供を行ってまいります。

それでは、次回もお楽しみに!

関連研修