暇なので『RPAツール』を作る #2　開発環境編

#はじめに
皆さん、お久しぶりです。enp（えん）と申します。トマトが好きです。
この記事は『RPAツール』を作ろうとする人の進捗報告になります。
RPAやRPAツールの作り方が書いてあるものではございませんので、ご了承ください。（もしかしたら、ソースは少しだけ載せるかもしれません。気分次第です）
今回はRPAツールの『開発環境』を『なぜ投稿が一ヶ月もかかってしまったのか』というところも交えてお話しできればと思います。
長くなりそうですが、お付き合いいただければ幸いです。誰かに話したいぐらい苦労しました。

#開発環境って？
皆さん。
###開発環境って知ってますか？
はい。<font color=#ff0000>__普通そんなこと聞いたら殴られます。そのぐらい基本的な言葉です。__</font>
少なくともココはQiitaですからね。そんなこと説明しなくても分かる人が多いと思います。
ですが、今日からプログラミングへの道を進まれる方が見ているかもしれないので、少しだけお話しします。
初心者の皆さん。__多分、この記事は何かの参考にならないと思います！　私も初心者同然なので。__

さて、開発環境とは何か？
簡単に言えば、__開発を行う上で必要なヤツ全部__を指します。
ソフトウェアの開発なら、プログラミング言語やライブラリなどのことですね。テキストエディタやOS、PCのスペックなども含まれます。
では、開発環境が悪いとどうなってしまうのでしょうか？
一つの例ではありますが、開発がしにくかったり、開発したアプリが遅い原因になったりします。
ですので、開発環境はしっかりと考えましょう。

#私の開発環境
前の項目では、開発環境についてお話ししました。この項目では私が構築した開発環境をお話しします。
私が構築したと言っていますが、大層な代物ではありません。

###RPAツール開発環境
- OS
    - Windows 10
- プログラミング言語
    - Python
- 使用するライブラリ
    - openpyxl
    - selenium
    - ChromeDriver
    - kivy
- テキストエディタ
    - NeoVim

こんな感じです。CPUやメモリに関しては省かせて頂きました。
また、ライブラリの欄にライブラリでないものが載っているかもしれませんが、分類するのが面倒でした。
これからライブラリなどが増えるかもしれませんが、その時はご報告いたします。

#そもそもAutomagica使わないの？
前の項目では私の開発環境をお話しました。この項目ではちょっと脱線します。
え？　脱線早くない？　と思うかもしれませんが、ちょっと話しておきたいのでご了承ください。

RPAツールでPythonを使うと聞いて、もしかしたら『Automagica』を思い浮かべた方がいるかもしれません。
__Automagica__は__PythonでRPAが作れちゃうフリーのプラットフォーム__です。私が用いるseleniumなどもAutomagicaに入っています。
Automagicaを使えばGUIを出すことができますし、RPAを作ることができます。RPAツールを作ることだってできるかもしれません。
え？　じゃあ、使えばいいじゃん。そう思いますよね？　ですが、__私は使いませんでした。__
理由は__自身のスキルアップのため__です。
Automagicaを使うと、開発環境を整える作業が簡単に終わります。それは良いことなのですが、自分のスキルとしては身に付きません。なので、使いませんでした。
また、これからは__なるべく難しい道を選んでいこう__と考えておりますので、ご理解のほどよろしくお願いいたします。

#ようやく開発環境を細かく紹介
前の項目では、Automagicaの存在について語りました。この項目ではようやく開発環境について選んだ理由をお話していきます。

###ITEM.1 『OS：Windows 10』
理由として一番大きいのは、__持ってたから__です。また、会社にあるOSと言えばWindowsみたいな偏見から選びました。（Excelとか使う人以外はMacかもしれない）
しかし、実は__最初Ubuntuで開発しようと考えていました__。理由はWindowsでLinuxコマンドを使うには、Ubuntuを使うやり方が簡単だったからです。
では、なぜUbuntuを断念したのか？　<font color=#ff0000>__それはあとで話します。__</font>

###ITEM.2 『プログラミング言語：Python』
選んだ理由は__RPAツールを開発するうえで一番やりやすそうな言語だったから__です。ブラウザやxlsxファイルを操作できるライブラリなどが簡単に見つかったので使うことにしました。
また、多く使われている言語なので触っておきたいという気持ちもありました。
__家にパーフェクトPythonがあったから__という理由も微レ存。

[パーフェクトPython](https://www.amazon.co.jp/%E3%83%91%E3%83%BC%E3%83%95%E3%82%A7%E3%82%AF%E3%83%88Python-PERFECT-5-Python%E3%82%B5%E3%83%9D%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%BA/dp/477415539X)

###ITEM.3 『使用するライブラリ：openpyxl、selenium、ChromeDriver』
この三つはブラウザを操作したり、xlsxファイルを操作するためのものです。
選んだ理由は単純で、__検索結果で一番最初に出てきたヤツら詰め合わせセット__です。
とりあえず入れてみた状態なので、不都合があれば随時追加・変更予定です。
（現時点でChromeの操作が遅いような気がします。他に良いものってあるのでしょうか？）

###ITEM.4 『使用するライブラリ：Kivy』
KivyはGUIのライブラリです。選んだ理由は__ライセンス的に使いやすかったから__です。
開発が終わった後のことを考えて、ライセンス的に一番問題がなさそうなものを選びました。
しかし、コイツが記事の投稿を一ヶ月も遅らせる元凶となるとは......。<font color=#ff0000>__この話も後で！__</font>

###ITEM.5 『テキストエディタ：NeoVim』
__好きだから！__　CUIって良いですよね。
まぁ、__テキストエディタからコマンドプロンプトやPowerShellへ移動する手間を省きたかった__という理由もあります。
プログラムをコンパイル・実行するのは基本コマンドプロンプトやPowerShellで行います。
なので、なるべくコマンドプロンプトやPowerShellで動くテキストエディタが使いたかったのです。
VSCordなどは移動必要ないんですが......。こうなってくると好みの問題ですね。


以上で紹介は終わりです。激ショボですが、一応色々考えて環境を整えたつもりです。

#立ちはだかる最大の壁『Kivy』
さて、開発環境の紹介も終わりました。しかし、忘れてはいけません。
###『暇なので『RPAツール』を作る #1』は5月に投稿されております。一か月以上前です。
サボってたん？　お前、サボってたん？　そう言われても仕方がないでしょう。
ですが、私は声を高らかにして言いたい！
###サボってたら余計暇になるわ！
コロナ禍で暇に拍車がかかっているというのに、サボっていては本末転倒です。暇すぎて昇天しちゃいます。
では私は一ヶ月の間、何をしていたのでしょうか？
実は<font color=#ff0000>__UbuntuにKivyのインストールをひたすら繰り返していました__</font>。
理由は簡単。<font color=#ff0000>__Kivyに動く気配がなかったから__</font>です。
動かない理由も簡単です。実行したら以下のエラーを吐きます。

```
egl_rpi - ImportError: cannot import name bcm
```

<font color=#ff0000>__そりゃ、必要なファイル読み込めねぇなら動かんわ。__</font>
他にもエラー文はありましたが、必要なファイルをインポートできなければいつまで経っても動きません。
そこで、まずは同じような状況に陥っている人がいないか調べてみました。
すると、以下のサイトに行き当たります。

["ImportError: cannot import name bcm" error with running basic kivy app in ubuntu 15.04](https://github.com/kivy/kivy/issues/4085)

エラー内容もほぼ一緒です。なので、ここに書かれた内容を頑張って全部試しました。
SDL2関連の確認をし、cythonとkivyのバージョンも確認し、公式通りにインストールを行いました。
その他いろいろ試しましたが、<font color=#ff0000>__全滅。__</font>
改善の兆しを一ミリも感じることなく全て失敗です。
この過程で、使っていたVimがぶっ壊れてNeoVimに移行するという事件も起きました。
潔く他のGUIライブラリへ移行しようとしましたが、<font color=#ff0000>__これもまた全滅。__</font>
エラーのエレクトリカルパレードを見ている気分でした。エラーのエレクトリカルパレードなんて煽り以外のなにものでもありません。
どうやら、GUIライブラリの神様は私をお見捨てになったようです。
悲しみを背負いPCを閉じようとしたその時、ふと私は気づきました。
###KivyってGitHubにあるやん
そうです。最大の長所を完全に忘れていました。
<font color=#ff0000>__Kivyはディレクトリの構成からプログラムソースまですべて閲覧することができます。__</font>
そこで、私は__自分のPCにあるKivyとオープンソースとして公開されているKivyを見比べることにしました。__
そして、ようやく進展がありました。
__kivy/lib/vidcore_liteにbcm.pyxとegl.pyxが存在しない__ということに気づいたのです。
###<font color=#ff0000>そりゃ、参照してるヤツ無きゃエラーも出るわ</font>
というわけで、足りないソースをGitHubから持ってきてコピー。意気揚々とサンプルコードを実行。

```
egl_rpi - ImportError: cannot import name bcm
```

###嫌だぁぁぁぁぁぁぁぁっ！！！
追加したのに！　正しい所に正しいソースを追加したのに！
GUIライブラリの神様はそうそう甘くありませんでした。
どうやら、Ubuntuへ導入する際にコンパイルを同時に行っているらしく、後から追加しただけでは実行してくれない模様。
もちろん私のPCにあるkivyのwhlファイルをunzipコマンドで見ても中にbcm.pyxとegl.pyxはありません。
__なんてこったい！__
万策尽きるとはこのこと。完全に解決策を見失いました。
こうなってはもう方法は一つしかありません。
###<font color=#ff0000>__そう。他力本願です。__</font>
他人の力に頼らないとやってられません。疲れ果てミイラになります。
というわけで、友達にこれまでの経緯を話し助けを乞いました。
そして、友達が一言。
###友達「Windowsじゃダメなの？」
###私「え？　天才？」
この時の私にOSを変えるという発想は皆無でした。ですが、思うところもあります。
__OS変えただけで本当に動くの？__
少々疑いながらWindowsにKivyを導入し、サンプルコードを実行します。

![Kivy's image](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641928/3d5dd3e3-5093-2cfe-3f36-23503e99a809.png)

###動いたぁぁぁぁぁぁぁぁっ！！！
その瞬間、私は<font color=#ff0000>__流れるようにUbuntuを消しました__</font>。

以上がこの一ヶ月に起こった出来事です。いやぁ、__話せて満足__。
開発環境を整える作業でここまで躓くとは思っていませんでした。
ところで、__なぜbcm.pyxとegl.pyxは消えてしまったのでしょうか？__
想像の範疇を超えませんが、Kivyと戦っていた時に感じたのは以下の三つです。

- 私が原因
    - Kivyのインストール中に私が操作を誤ってしまい消えてしまった。
- 開発側が原因
    - LinuxのKivyだけインストールファイルの中にbcm.pyxとegl.pyxが入っていない。
- Ubuntuが原因
    - 勝手にUbuntuがはじいていた。

Windowsでは普通に動いたので、以上のようなことが原因かもしれません。最有力は『私が原因』。
ですが、これだけははっきり言えます。
__同じようなことが起きたら、諦めてOSを変えましょう。そっちの方が早い。__

#最後に
最後までお付き合い頂きありがとうございます。Kivyの話はどこまで読みましたか？
全部読んでいただけたら幸いです。本当に苦労しました。
ですが、<font color=#ff0000>__今はまだスタートラインに立っただけです。開発すらやっていません。__</font>
これからが勝負です。頑張らなくては。
次の記事は『ライブラリと仲良くなる Part.1』という感じの内容になると思いますので、よろしくお願いいたします。
以上、enpがお送りいたしました。