kintone×RPAを完全クラウドで実現する話

C-RISEの村井です。
いつも**そのうち記事を書こう**と思いながらなかなか手につかず気づけば師走。
せめてAdvent Calendarを予約すれば書かざるを得ないだろうと12月21日の枠を押さえたのですが、
結局当日に記事を書いてる有り様です。
Qiitaでの投稿は３年連続アドベントカレンダーのみと毎年の恒例行事のようになってきました。

という事で、今年は**kintoneのカレンダー**に参加してみました。
**kintone面白い**ですね。
昨年から触り初めたばかりで歴は浅いのですが、実感として業務管理アプリが手軽に作れて便利だなと感じてます。
少し手の混んだ事をしようとすると**カスタマイズ**や**プラグイン**、**外部サービス**を活用する必要があるようです。
逆に言うと、やりたい事は、だいたい誰かがプラグインやサンプルを提供してる**便利なサービス**とも言えます。
このkintone、短期間ながらもカスタマイズしたり、プラグインを導入してきたのですが、
**触れば触るほど、[クラウドBOT](https://www.c-bot.pro/)と相性が良さそうなサービス**だなと感じるようになりました。

# まずは、クラウドBOTとは
1. クラウド型のRPAサービスです。BOT(ロボット)もブラウザもクラウド上で動きます。
2. BOT作成も実行もノーコード、専用ソフトは不要です(WEBブラウザのみ利用)
3. 無料から利用可能です(今回ご紹介する内容も無料プランで対応できます)

ドキュメントサイトで[アーキテクチャ](https://docs.c-bot.pro/architecture/overview/#outline__1)等も紹介しているので興味ある方はご覧ください。
https://docs.c-bot.pro/architecture/overview/#outline__1

**kintone**は業務アプリ開発プラットフォームで**クラウドネイティブなノーコードサービス**です。
**クラウドBOT**もWeb自動化プラットフォームで**クラウドネイティブなノーコードサービス**です。
この２つを組み合わせれば、当然の事ながら**全てがクラウドで完結**しますねというお話です。

# kintoneを自動操作するBOTを作る
では早速クラウドBOTを使ってkintoneを操作するBOTを作っていきましょう。
今回は、kintoneアプリのデータを書き出し、CSVダウンロードするBOTを作成します。
アプリデータをCSVバックアップするだけのシンプルな操作のBOTです。
**BOTの実行イメージはこんな感じです**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/a993d37f-07b6-e485-f02b-e3cc13471d8e.png)


# クラウドBOTへログイン〜BOTエディタを開く
クラウドBOTのアカウント登録手順説明は割愛しますが、まだアカウントをお持ちでない方は
[こちら](https://console.c-bot.pro/register)からアカウントを登録し無料プランを選択して下さい。

**下記画面からログインします。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/1e6aa9ff-d01f-71d5-108b-cbd81455a7d3.png)

**ダッシュボードから早速「BOTを作る」**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/3f142118-5d5f-1eb7-703c-68f3919c81ee.png)

**BOTエディタが開く**
エディタ内にURL入力欄が表示されます。
ここにURLを入力する事で、クラウド上に起動した仮想ブラウザを遠隔操作する事ができます。
今回は、kintoneアプリ「顧客リスト」を**ファイルに書き出すページのURL**を直接指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/935a2ec0-417b-c0df-12b8-4ba1c96c5601.png)

**BOTエディタのサイドメニューを開いてみる**
入力したURLのページが表示されました。
クラウド上のブラウザ画面を転送しているので表示されるまで少し遅延があります。
このまま仮想ブラウザを操作しブラウジングする事もできますが、この時点では**まだ操作の記録は始まっていません**。
左上の「≡」アイコンをクリックするとサイドメニューが開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/6ff9bfd3-4a1d-7fb9-5c35-d5f6b7c6099b.png)

**ブラウザ操作の記録を開始**
サイドメニューが開いたら「**ブラウザ操作を記録**」ボタンをクリックします。
この時点で表示しているURLから操作記録が開始されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/755028fa-a318-117f-83e5-2ee27d8f63e8.png)

**URLを開くタスクが記録された**
最初のタスクとして「URLに値1を入力」というタスクが追加されました。
値1とは、現在URL入力欄に表示されているURL(kintoneログイン画面のURL)を指しています。
クラウドBOTは、事前の変数定義等は不要で、ブラウザ画面内で入力した値が自動的に値1、値2〜と記録されていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/3415c4ae-124e-1f77-deb6-577cba06627f.png)

**kintoneのログイン名、パスワードを入力**
kintoneログイン画面内のログイン名入力欄をクリックすると操作メニューが表示されます。
メニュー内から「入力する」を選択するとテキスト入力操作を記録できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/ce3ed142-3c59-bf4b-7fbc-f770fc348870.png)

**kintoneへログイン**
ログイン名とパスワードを入力したら「ログイン」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/cb1cb6ba-f1af-fb53-a3c7-9390cbd8431c.png)

**ログイン後、ファイルへの書き出し画面へ**
ログインに成功すると「ファイルへの書き出し画面」が表示されました。
ここまでの手順はサイドメニューの**タスク①〜⑤**として追加されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/a8d883b3-337d-be34-a391-fb811f9e5648.png)
サイドメニューを開くとサイド上段に**操作内容を表すタスク一覧**、下段に**BOTが扱うデータ一覧**が表示されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/96246e04-28e9-f510-f297-ca7828815853.png)

**ファイルを書き出す**
ようやく本題のアプリデータの書き出しをしてみましょう。
「書き出す」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/3a21abd6-dadf-23cc-52ec-453fab5914ed.png)

書き出し結果としてCSVのリンクが表示されました。
**ファイルリンクをクリック**してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/c7240716-3bab-80ee-de2c-fe73fff80320.png)

仮想ブラウザがCSVファイルのダウンロードを検知しました。
この時点では手元のパソコンにファイルはダウンロードされていません。
あくまで、クラウド上に在る仮想ブラウザでファイルがダウンロードされたのでダウンロードファイルもクラウド上にあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/eb58d494-ae0c-ee0a-5030-48df4ddac7ed.png)

お知らせが消えると、赤く光るボタン「**ダウンロード(1)**」が表示されています。
ボタンをクリックしてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/b6779488-76ab-08a6-da01-ff3c5206c799.png)

**仮想ブラウザがダウンロードしたファイルの一覧**がモーダル表示されます。
このファイルをBOTのデータとしてコピーしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/3d068856-c3d5-1100-8962-04ff1e8a2202.png)

「ファイルをコピー」ボタンをクリックすると、コピーする条件を指定する画面が表示されます。
何度ダウンロードしても毎回同じファイル名であればそのままでも良いのですが、今回は「顧客リスト_(タイムスタンプ).csv」と
ダウンロードする毎にファイル名が変化するようです。
この場合、ダウンロードファイルの名前が変化してもつかめるように「顧客リスト_*.csv」のようにワイルドカード形式で指定します。
そして、このコピーするファイルにデータ名をつけます。
今回は「顧客リストファイル」と入力して「コピーする」ボタンをクリックしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/2f322d46-b7f7-37c2-0934-5c1e46a3c2c6.png)

ファイルをコピーしたので、ビューアで確認してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/81516c02-44d6-1659-b088-502236b7d36a.png)

今コピーしたCSVファイルが「顧客リストファイル」のデータ名で記録されているのが確認できますね。
さらにログイン時に入力したデータも値1〜値3だと分かりにくいので名前を編集しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/f737b881-c344-be12-46a2-d68e9f1fed9c.png)

名前を編集すると分かりやすくなりました。
クラウドBOTは変数という仕組みはありませんが、代わりにBOTが扱う名前付きのデータがあります。
一般的な変数との大きな違いは、BOT実行中にデータの再代入ができないという事です。
一度入力したり画面からコピーしたら名前付きのデータとしてBOTが終了するまで固定化されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/55f6f3f0-0747-9b5d-a68e-e39862edf5c4.png)

一通り操作手順の記録が完了したのでBOTを保存しましょう。
サイドメニューの「保存」アイコンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/043b1e7b-b8c6-2904-53e0-555809d45821.png)

保存ダイアログが表示されました。
BOT名を入力します。
このまま保存をすると、記録された各BOTデータもBOT実行時の初期値として保存されます。
しかし、kintoneログイン時にパスワード欄に入力したデータは標準設定ではBOTに保存されません。
これは、パスワードはBOTに埋め込まず、実行毎に都度入力してもらう事を推奨している為です。
ただ、今回はデモという事で初期値のチェックを入れて改めてパスワードの初期値を記録してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/b14dd580-bac1-823e-1fc8-75d24f1932e7.png)

# BOTの実行テスト
エディタ上で試しに記録した一連のタスクを実行してみましょう。
タスク位置を「最初へ」戻します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/4505f15d-7023-8960-f902-386e8008aa43.png)

そして、タスクを一気に「最後へ」進めます。
これにより、記録したタスクが順次実行されます。
実行してみた所、⑤番目のタスクでエラーが出て止まりました。
⑤ボタンをクリックは操作記録時には正常に進めたはずです。
どうも、⑤で「書き出す」ボタンをクリックしようとしましたが、処理が早すぎてボタンが表示される前にクリックしようとしてしまったようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/492b0010-c209-8423-1a18-ee0d48d3faaf.png)

という事で⑤を実行する前に待機するタスクを追加してみます。
既に実行してしまったタスクは編集できないので、一旦④のタスクの直後まで再実行します。
そして、④まで実行して停止したら、「待機を追加」ボタンをクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/30c97380-ed48-b31d-2926-ee6d0f0a10fc.png)

１秒待機のタスクが挿入されて、先程⑤だったタスクが⑥へと繰り下がりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/d9fd978a-e1e7-5651-0925-b41c36901be2.png)

再度最初のタスクから実行しなおしてみると、今度は⑥のタスクまで正常に実行できましたが⑦で失敗しました。
出力ファイルのリンクの表示が間に合っていない為、リンクのクリックに失敗したようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/ae1353d4-6681-518e-18b6-e015f1dbfa8a.png)

今度は長めに3秒の待機タスクを追加してみました。
<img width="250" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/95bd37db-b5c8-3ce6-ef63-a392a97480c8.png">

そして、改めて最初から実行すると、今度は最後まで成功しました。
顧客リストファイルも取得できています。
完成したBOTを再度保存してBOTエディタを終了します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/fc8b2d66-876b-a2cf-0883-a92f44368094.png)

# BOTを実行してみる
今度はエディタ上ではなく、ダッシュボードからBOTを実行してみます。
BOTを選択して「実行するボタン」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/b4f9cfd5-9ae3-bcaf-f5b1-c9b3e309614b.png)

実行画面にログイン名とパスワードが表示されました。
BOTに記録されたデータが初期として表示されていますが、書き換えて実行する事もできます。
今回はそのまま「実行」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/4667f191-bb5b-347c-3861-c5a8f2243d1a.png)

実行すると操作画面がパラパラ切り替わりながら表示され、実行が完了すると下記の結果が表示されました。
無事、ファイルの書き出しと書き出したファイルの取得が成功しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/38c32269-e5ed-82d0-08ee-1c21ae62a5cd.png)

この実行結果は実行ログから一覧で確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/701e78f8-931b-44a6-2de4-e704e32d5cd9.png)

実行ログ画面では、実行時のスクリーンショットや、実行結果データ(取得したファイル)を閲覧できます。
実行毎のファイルがクラウドBOTのログとして保存されているので、いつでもバックアップデータとして参照する事が可能になりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/1a47429e-5a79-abb2-5f34-d4cb9f3d9d0a.png)

# さらにBOTを改良する
一通りBOTを作成し実行も成功しましたが、さらにもうひと手間加えてBOTを改良してみます。
アプリデータをCSVファイルに書き出して、そのファイルを取得する事はできましたが、そのCSVファイル自体を
バックアップデータとしてkintoneで管理してみましょう。
**BOTの実行イメージはこんな感じです**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/bf2d6954-da2f-6584-b2b8-9f44dddd5331.png)

先程のBOTを編集する為、エディタで開いてみます。
そして、先程記録したタスクの続きを記録する為、一旦タスク位置を「最後へ」移動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/8dd49052-5130-216a-def7-1d59072f9d19.png)

タスクの最後まで実行されました。
そして、「ブラウザ操作を記録する」ボタンを押すことで以降記録モードに切り替わります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/69e9b524-27be-83fb-c487-ea02f1350a96.png)

取得したファイルを管理する為のファイル管理アプリのデータ追加画面のURLを入力します。
kintoneのTOPからログインして対象ページまで遷移しても良いのですが、無駄なタスクが増えてしまうので
目的ページにダイレクトログイン可能な場合は、直接対象URLにアクセスするのがお勧めです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/5375c574-3960-62b4-6a5d-b9854be77e51.png)

ファイル管理アプリのデータ追加画面が表示されました。
ファイルのタイトルを入力する必要がありますが、毎回固定のタイトルを入れるのも芸が無いので値を作ってみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/ac85befd-126a-189d-0518-048ced5dc897.png)

値は任意文字「customer_」と年月日時分秒を固定桁数で結合し、データ名を「ファイルタイトル」としました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/b7f4641c-5ff9-8d28-5402-b41402cd1a1a.png)

早速、今作成した値をタイトル欄に貼り付けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/70a9d49f-102a-0b72-ff04-cca01fe64184.png)

さらにファイルをアップロードする為、「参照」リンクをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/96777e41-29ae-409c-eacf-0139fc6efa18.png)

アップロードするファイルの選択を求められたので前のタスクで取得した「顧客リストファイル」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/606c73c2-def6-4b4a-3a08-0cc4379caaaa.png)

ファイル管理アプリに顧客リストファイルがアップロードされました。
必要情報の入力ができたので「保存」ボタンをクリックします。
これで取得したファイルをkintoneのファイル管理アプリに登録する所までBOT化できました。
一連のタスクが正常に実行できる事を確認したらBOTを保存しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/e0710830-2d89-6d86-017d-a666704b388f.png)

# 改良したBOTを実行してみる。
改良したBOTを実行する毎に、ファイル管理アプリに顧客リストから書き出されたCSVファイルが１件登録されていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63595/1970c61c-8ac6-dae0-38da-d07f2139792a.png)

# まとめ
今回は、作成したBOTを手動で実行しました。
クラウドBOTは、全てのBOTをAPIとして外部から呼び出す事ができます。
kintoneのAPI呼び出し機能でBOTを呼び出す事もできるでしょう。
また、クラウドBOTの有料プランではスケジュール機能も利用できるので定期的なバックアップに利用する事もできます。
BOTをどのような目的でいつ実行するかも運用設計次第です。

さらに、今回ご紹介したのは、kintoneに対する自動操作のみです。
クラウドBOTはWebブラウザの操作を自動化する仕組みなので、外部サイトや社内のWebシステムからデータを抽出してきて
kintoneアプリに転記する事もできますし、その逆も可能です。
まさにRPAとしての機能をクラウド上で実現しているので、RPA実行中もパソコンが専有される事はありません。
せっかくここまで長々と読んで頂いた皆様、ぜひクラウドBOTを触ってkintoneとの組み合わせを模索してみませんか。

尚、クラウドBOTのサイト上では[kintone特集](https://www.c-bot.pro/ja/kintone)として
活用事例の紹介等も公開しています。
こちらも合わせてご覧下さい。

時間がなくなってきたので、文章の校正もなくざっくりと書きなぐってしまいました。
乱文誤字脱字ご容赦下さい。
また、後で見直して修正しようと思います。
なんとかカレンダー予約日中に投稿できて良かったです。
本記事内容についてご意見やご質問等ございましたらお気軽にご連絡下さい。