おじさんのITテクニック

プログラム挫折常連者がプログラムを完成させるまで

自動化の実装

実装はコピペだけでいけることもある

Outlookから社内スケジュールに予定を転記する工程を細分化し、工程をキーワードにWEB検索すると以下のことがわかりました。

  • VBAOutlookからスケジュールを一括抽出し、エクセル一覧にすることができる
  • Selenium BasicというVBAのライブラリを使用すればエクセルとWEB連携ができる

一括抽出した情報は玉石混淆ですので、一度人間の目で精査する工程を追加することにしました。
従って、開発工程は下記のような流れとなります。

  1. VBAOutlookからスケジュールを一括抽出し、エクセル一覧にする
  2. エクセル一覧を精査する
  3. VBAでエクセル一覧の内容を社内スケジュールに反映する

工程1はOutlookというパブリックなツールから、取得した情報をこれもパブリックなツールであるエクセルに貼り付けるプログラムですから、何も考慮しなくてもそのまま動くはずなので、理屈を理解する必要もありません。コピペでOKでした。

工程2はユーザにお任せします。

工程3は社内スケジュールはWebの入力フォームなので、エクセルのこのセルはこのフォームに入れるみたいなやり方で実現できました。

下記のサイトを参照し、少し変更しました。

excel-ubara.com

Sub Hatena()
  Dim Driver As New Selenium.WebDriver
  Dim sKey As New Selenium.Keys
  Dim elm As Selenium.WebElement
  Dim word As String
  Driver.Start "Edge", "https://it.ojisan999.com/"
  Driver.Get "/"
  word = Range("A2").Value
  Set elm = Driver.FindElementByXPath("/html/body/div[2]/div/div/div/aside/div/div[2]/div[2]/form/input[1]")
  elm.Clear
  elm.SendKeys word
  elm.SendKeys sKey.Enter
  Driver.Close
  Set Driver = Nothing
End Sub

実際にはフォームのXPath[]内の数字とセルのアドレス番号が順次数字が増えていく形式でしたので、forを使用しました。

XPathというのは初めて知ったのですが、Goolge Chromeを使えば簡単に取得できます。

  1. 調べたいフォームにカーソルを置いて、右クリックすると「検証」が表示される
  2. 表示をクリック

  3. 検証ツール(ディベロッパーモード)が開かれる
  4. フォームにカーソルを置いた状態で、ソース部分を右クリック
  5. 「コピー」>「完全なXPathをコピー」をクリック

  6. クリップボードに完全なXPathが保存される
  7. プログラムに貼り付ける

うまくページが落ち着くまで待ち時間が必要とか、一度クリックが必要など、サイトによってクセがあったりするので何度も実行しながら調整します。
一箇所状況によって、Web上のタブのURLが変化する部分がありました。ここは「必殺、メッセージボックス」による半自動化で対応しました。

このような内容でも1日作業ですが、初めてそれっぽいプログラムが動作して、嫌いな作業が楽になりました。このときはしっかり習得してない自分が、こんなコピペのプログラムを作っていいのかなと思ってました。

何個か作って分かりました。職業プログラマーじゃありませんから、業務改善レベルなら良いんです。挫折しないプログラミングというのが自分の中で定義されました。

 

考え方を少し変えると、プログラムに挫折というものはなくなります。

プログラム言語の選択

プログラム言語は何が良いか迷ってませんか?

プログラム言語はたくさんあります。

C、JavaVBAPython。他にもPowerShell、バッチ、Power Automait Desktop(PAD)なんてものもあります。

 

種類は大きく2つに分けられます。

  • インタープリタ方式:
    プログラムを1行ずつ解釈していく。作成したプログラムを実行するには実行環境が必要。つまり、実行する人も少しそのプログラムを実行するための知識が必要。VBAPython
  • コンパイル方式:
    プログラムをexeなどの実行形式に変換する必要がある。実行するときにプログラムを作った人が想定しているOS(WindowsMac)であれば良い。C、Java

どちらのタイプを選ぶべきか。プログラマーを目指さない私達は、インタープリタ方式一択です。挫折しないプログラミングには、ちょこっと書いて、動かして試す(いわゆるトライ&エラー)のがどれだけ容易かがとても大事です。

 

では、インタープリタ方式の内で何を選べばいいか。

おじさんは初めはExcelVBAをお勧めします。
業務PCには大概Officeが入ってますし、会社でVBA組まれてるエクセルを引き継がれるなんてシーンも多いのではないでしょうか。追加アプリのインストールが不要なので、業務ならVBAがお勧めです。ネットにも情報がたくさんありますし、やって損はないです。

VBAのもったり感に我慢できなくなったら、Pythonに手を出すのもいいと思います。おじさん的にはVBAPythonはプログラムの書き方が似てるイメージを持ってます。だからVBAからの乗り換えはほとんど苦を感じないはずです。それでいてスピードが全然違うイメージです。VBAと同じ処理をさせると分かります、Pythonめちゃくちゃ早いです。

なお、インタープリタ方式のデメリットである実行するためにアプリのインストールが必要な点ですが、VBAは業務PCにはほとんどOfficeはインストールされていると思いますので、マクロを記載したファイルに実行ボタンをつけて、実行ボタンにマクロを紐づければ、誰でも実行できるようになります。Pythonコンパイルもできますので、Pythonをインストールしないユーザにも提供することができます。

PADはグラフィカルな分、とっつきやすいイメージがありますが、機能がメニューとして見えてしまい、逆にどれを使って良いか迷ってしまい、わかりにくいと感じています。

C、Javaコンパイルが必要でさっと確認取れないイメージです。プログラムの書き方も難しい印象です。難しいことは職業プログラマーに任せましょう。

プログラム言語とまで言えませんが、Widowsでちょっとした、ファイルの操作などコマンドプロンプトでできるような内容を自動化したいときはPowerShell、バッチで十分です。これらはスクリプトといって、コマンドをテキストファイルに1行ごとに記載して、上から順番に実行するというものです。
おじさんはリストからフォルダを作成してその中に同じファイルをコピーするなんてものはPowerShellでやっちゃいます。

どの言語を選ぶにせよ業務改善では習得する必要は一切ありません。高いお金を払って、セミナーを受講するのはプログラマーになりたい訳でなければ、不要です。プログラムがきれいでも汚くても目的通り動けばいいんです。

下記の記事の考え方通り、無料で嫌にならないところまで勉強して、あとはコピペしながら理解していけばいいんです。

it.ojisan999.com

考え方を少し変えると、プログラムに挫折というものはなくなります。

実現方法の検討

実現方法の検討は少し頭を使います

Outlookから社内スケジュールに予定を転記の細分化:

  1. Outlookに予定を入力
  2. Outlookを開く
  3. 社内スケジュールを開く
  4. 転記する予定を選別
  5. 転記する予定の開始日時を覚える
  6. 社内スケジュールに開始日時を入力する
  7. 転記する予定の終了時間を覚える
  8. 社内スケジュールに終了時間を入力する
  9. 転記する予定の件名を覚える
  10. 社内スケジュールに件名を入力する
    : 略

業務を細分化した際に検討した理想を実現するためにどうすればできるのか、ネット検索しながら、検討します。ここはセンスが問われる部分です。
上記の例で言えば、1つ1つ項目を取得して、実現するのか、Outlookから一括でデータを抽出して実現するのか、うまく情報を見つけられるかの運にもよりますが、頭を使う必要があります。

でも、我々は職業プログラマーを目指している訳ではないので、どっちでも良いんです。どのような仕組みであっても、自分の面倒に感じる部分をPCがやってくれればいいんです。

どうしても適切な実現方法が見つけられなかったら、

「必殺、メッセージボックス」を使います。

メッセージボックスが表示されて、OKを押すまでの間は、ユーザがPCを操作できて、プログラムが一時停止となります。うまく実現できない動作は諦めて手動でやっちゃいましょう。OKを押した後はまたプログラムが走り、自動作業が継続されます。おじさんはこれを半自動化と呼んでます。

 

細分化した業務内容をキーワードにWEB検索すると以下のことがわかりました。

  • Outlookからスケジュールを一括抽出し、エクセル一覧にすることができる
  • Selenium BasicというVBAのライブラリを使用すればエクセルとWEB連携ができる

 

考え方を少し変えると、プログラムに挫折というものはなくなります。

業務の細分化

細分化というと格好いいですが、要は手順の洗い出しです

プログラムというのはPCに命令を出す訳で、自分がどんな手順でその業務を行っているかをPCに伝えなくてはいけません。テキストベースで良いので箇条書きで手順を洗い出します。
おじさんはVBAでプログラミングしてしまうこともあるので、エクセルで作ることが多いです。順番も入れ替えやすいのでお勧めです。

Outlookから社内スケジュールに予定を転記

  1. Outlookに予定を入力
  2. Outlookを開く
  3. 社内スケジュールを開く
  4. 転記する予定を選別
  5. 転記する予定の開始日時を覚える
  6. 社内スケジュールに開始日時を入力する
  7. 転記する予定の終了時間を覚える
  8. 社内スケジュールに終了時間を入力する
  9. 転記する予定の件名を覚える
  10. 社内スケジュールに件名を入力する
    : 略

手順を眺めて、どこを自動化するか検討します。どこが面倒臭いでしょうか。
例えばOutlookへの入力が面倒ならば、どういう形なら自分は楽なのか、許容範囲なのかというように一つずつ検討していきます。

特に苦ではないところは自動化の必要はありません。

 

考え方を少し変えると、プログラムに挫折というものはなくなります。

改善業務の見つけ方

誰でも面倒なことは嫌いなのではないでしょうか

面倒にも色々あると思います

  • 定型業務
  • 無意味に感じる業務
  • 複雑な業務

面倒な業務の効率化をプログラムで行うというのはモチベーションの話ですから、上記のいずれの業務もプログラムでの効率化は可能です。

定型業務は書籍やプログラムの入門サイトにも書いてありそうな、プログラムにしやすい業務です。もし定型業務をお持ちでしたら、プログラムをやらなきゃ損です。

無意味に感じる業務や複雑な業務はプログラムにできないと感じると思います。そういう時は業務を細分化してみて下さい。どっちみちプログラミングする際は業務の手順を書き出す必要があるので、業務の手順を書き出してみます。

書き出した手順の作業工程で単純な定型操作はありませんか?

この単純な定型操作の部分をプログラムで実行することから始めましょう。
「これをやったら少しは楽になる」この気持ちがおじさんにとっては、とても大事でした。

どうしても自動化できない場合の最終手段は書き出した手順を後輩に渡して、引き継いでしまえば良いんです。

 

おじさんの会社はスケジュール管理は全社的にOutlookを使用してます。でも、おじさんの事業部はOutlookが導入される前から社内のスケジューリングシステムでスケジュール管理しており、そちらの方が馴染みがあります。おじさんはOutlookに完全移行したんですが、上司から、みんなが馴染みがないから社内システムにも入力するよう指示を受けました。移行も上司の指示です。おじさんは無駄が嫌いなので、スケジュールの二重管理なんて鳥肌が立ちます。

Outlookからスケジュールを取得して社内システムに入力できないかと考えるようになりました。これがおじさんのプログラミング第一歩でした。

 

考え方を少し変えると、プログラムに挫折というものはなくなります。

Pythonの勉強方法

業務改善レベルであれば、無料で学べる?

先日Pythonの環境準備について記事を書きました。

it.ojisan999.com

 

これは実際に業務を改善する段になって、プログラムを書く時に必要になる環境です。まず、Pythonに触れてみて、好きになれそうか、続けていけそうかを確認するために、おじさんはGoogle Colaboratoryをお勧めします。

colab.research.google.com

Google Colaboratoryは無料で使用できるPythonの開発環境です。GoogleDriveにおいてあるファイルは操作することができるので、深いところまで学習することも可能です。

環境準備の記事でも紹介したサイトですが、勉強するのにすごくいいものがあったので紹介します。

www.python.jp

ここを嫌になるところまでやってみるといいと思います。嫌になってしまったら、実際の業務改善を始めましょう。

なお、おじさんの知識レベルとしては、この中では関数の定義は初めて知りました。業務改善レベルであればPythonで準備されている関数内で十分です。入門編を制覇したら知識は十分です。これ以上深入りすると挫折に向かう方も出るかもしれません。面倒な業務の改善を始めましょう。

 

考え方を少し変えると、プログラムに挫折というものはなくなります。

Pythonの環境準備

Pythonでのプログラミングに必要なもの

  • Pythonの開発環境のインストール
  • エディタ

Pythonの開発環境はPythonの記述ルールに従ったプログラムを実行するために必要です。プログラムを記述しただけではPCはPythonのプログラムを実行することができません。

ご自身のPCにPythonがインストールされているか否かを確認するには、コマンドプロンプトやターミナルで下記のコマンドを実行します。

python --version

インストールされていない場合、下記のようなエラーが表示されますので、インストールしてください。

user@xxx ~ % python --version
zsh: command not found: python

エディタは保存する時にPythonの拡張子をつければ良いだけなので、コードの記述はメモ帳でも可能です。でも、おじさんはプログラムが得意ではありませんので、色々補助機能の付いたVisualStadioCodeを使ってます。

おじさんは開発元のサイトを紹介しようとしましたが、英語でした。開発元サイトからリンクが貼ってあった日本語サイトですごくいいものがあったので紹介します。

www.python.jp

おじさんは本当はインストール手順も記載しようとしたんですが、このサイトの以下のページがとても丁寧に記載されているので、こちらの記事を参照された方がいいと思いました。

www.python.jp

 

考え方を少し変えると、プログラムに挫折というものはなくなります。