# プロジェクトの概要
## 目的、背景
* 回路上の部品のプロパティの一時的変更の承認を得るため、複数部署の担当者に確認、作業依頼を行う必要があるが、全て人力で行っているので非効率的であった。
## 規模感、チーム構成、担当した役割
* 3名のチームで問題点抽出、要求定義と要件定義、企画立案、システム開発、リリースと保守を行い、リーダーとして全てを主導して行った。
## 課題
* 関係部署間で要求が異なっており、現状の仕事構成では実現不可能なことも多い。要件定義の前に要求定義を行う必要がある
* 承認要求、承認/否認をメールで行うので手間がかかる。できるだけ自動化したい
* 承認完了後、プロパティ操作担当者にその旨を伝えて操作を依頼しなければならない。手間がかかり、深夜や休日等で担当者が不在の場合は業務がそこで止まってしまう。プロパティ操作を全自動化したい
* 作業完了後、一時操作したプロパティを元に戻すことを忘れることがある。元に戻す操作も全自動化したい
## 取り組み
* 要求定義ミーティングを繰り返し行って各部署が「本当に求めているもの」を洗い出し、要件定義への落とし込みを行った。
* 承認依頼、承認/否認をワークフロー化することにより手順を標準化した。pythonで作成したシーケンサにhtml,perl,javascriptで構成した画面から起案依頼を取り込み、承認依頼メールを自動発信するようにした。メール内には承認エビデンスへのリンク、承認画面へのリンクを設け、承認メールも自動発信にした
* 承認完了情報はワークフローによりプロパティ操作用WEBシステムを自動操作するpythonプログラムに送られ、変更担当者不在でも自動実行できるようにした。
* 一定時間が経過すると、自動操作pythonが時限発動して一時変更プロパティの自動復元を行うようにし、戻し忘れを防止した。
* この取り組みの結果、多くの人による調整が必要だった作業が時間指定で自動化できるようになり、待ち時間の解消による効率化、ヒューマンエラーの撲滅を達成した。
## 工夫した点
* 市販のワークフローシステムには時間管理や外部プログラムをドライブできるものがなかったので、ワークフローシステム自体をpythonで開発することにより時間管理、WEB自動操作プログラムを円滑にコールできるようになった。
* 保守性を考え、ワークフローの進行はイベントドリブンではなく、タイムスライスで行った。
* 画面入力により画面構成を変化させる必要があったため、javascriptで動的な画面作成を行った
* 開発経費を抑えるため、保守性を確保するためにWEB自動操作は市販アプリではなく、pyhtonのseleniumライブラリを用いて自社開発した。操作手順の系統図を作成し、seleniumによりURL起動、画面情報キャプチャ、ボタンIDを取得してクリックなどの操作を自動化し、安定して無人動作できるようにした。