UiPath：はなっち！のカスタムアクティビティってなんだ？

## 皆もすなるQiitaといふものを、儂もしてみむとてするなり。

と言う訳で、こん＊＊は！はなっち！です。

早いもので、定年してからもう4ヶ月も経つんですね。今のお客様先にもなれ、契約社員として貸与されたパソコンのキーボートにも慣れ、そろそろ記事を！と思いまして。。。

さて、何にしようか？
* * *
###と言っても、やはり自分にはカスタムアクティビティしかなく。。。

と言う訳で、カスタムアクティビティのお話。

###カスタムアクティビティって？
今更「カスタムアクティビティ」って説いても、もうご存じでしょう。ですので、説明は省きます。
とりあえず、はなっち！が作成したカスタムアクティビティを紹介しつつ、どうしてこれを作ったか。。。というお話をしつつ、今後、使用方法、中身なども解説できればなと思っています。

* * *
###はなっち！作のカスタムアクティビティの紹介（全部で5本あります。以降CAと省略）

+ [かんたん 図形 アクティビティパック](https://marketplace.uipath.com/ja/listings/668 "Jumt To UiPath MarketPlace")
+ [かんたんDataTableアクティビティ](https://marketplace.uipath.com/ja/listings/1408 "Jumt To UiPath MarketPlace")
+ [かんたんファイル選択アクティビティ](https://marketplace.uipath.com/ja/listings/1879 "Jumt To UiPath MarketPlace")
+ [かんたん固定フォーマットアクティビティ](https://marketplace.uipath.com/ja/listings/2032 "Jumt To UiPath MarketPlace")
+ [かんたん雑多なファイル関連アクティビティ](https://marketplace.uipath.com/ja/listings/2664 "Jumt To UiPath MarketPlace")

* * *

###はなっち！作のカスタムアクティビティの概説

+ [かんたん 図形 アクティビティパック](https://marketplace.uipath.com/ja/listings/668 "Jumt To UiPath MarketPlace")

このCAが一番最初に作成、登録いただいたものです。

発端は、お客様から「スクショ撮った画像の一部分だけを切り出せないか？」と問合せがあった事でした。無論、正規アクティビティには「スクリーンショットを作成」というものがあり、そこでクリッピング領域を「固定的に」指定することができますよと教えてあげたのですが、それではちょっと物足りないようでした。
一念発起して、画像系のアクティビティを作ってみよう！と思い立ったのですが、C#での開発環境は保有しておらず。。。というのは言い訳で、COBOL、VBA、JAVAの開発経験しかなく、ロジックは組めても、言語は組めなさそうで、だったら、「メソッドを呼び出し」で作ってみよう！と思ったのでしたよ。若き日のはなっち！が！

Google検索から参照サイトを見つけ、その言語をベースに「メソッドを呼び出し」で実装して試験してみる、エラーとなる、思うようにならないって経験を繰り返して、ようやく完成したものでした。その画像系の処理の実装を進めていくなかで、「メソッドを呼び出し」を使えば、あんな事やこんな事も出来るんだ！と知見を深め、一部分を切り出すだけでなく、回転、形式変換、拡大縮小にとどまらず、部分色塗り替え、部分モザイクも作ってしまえ！と、苦心惨憺の末に完成にこぎつけたのでした。

+ [かんたんDataTableアクティビティ](https://marketplace.uipath.com/ja/listings/1408 "Jumt To UiPath MarketPlace")

開発していくと、DataTable型の操作がうまくできない場合があって、どう言ったわけだ？と頭をひねってしまう訳です。

そこで、DataTable変数に「データ列の追加」があるのだから、その情報もとれるだろうと思いつき、DataTable型の列の関するメソッドを実装してみたりしたのでした。

他にも、一つのキーしか指定できない「データ テーブルを並べ替え」アクティビティの機能アップとして、「並び替え_複数キー」アクティビティ、キーをもとにして列の値を集計する「集計_複数キー」アクティビティを作成したのでした。

+ [かんたんファイル選択アクティビティ](https://marketplace.uipath.com/ja/listings/1879 "Jumt To UiPath MarketPlace")

ファイルを選択させるには、ちゃんと「ファイルを選択」アクティビティが用意されているのですが、１）ファイル選択ダイアログのラベルが「Select File」であり、何のファイルを選択しているのかが分かりにくい、２）複数ファイルの選択ができない　と言う難点を持っていると考えていました。

無論、「ファイルを選択」アクティビティを使って、キャンセルボタンをクリックするまでLOOPさせるとか、ファイル選択フィルダに必要とするファイル名の一部を使ったりと工夫は出来るのですが、あのEXCEL-VBAでも簡単に複数ファイルを選択できたりしてしまうので、これはCAを作るしかない！と思ったのです。

ファイル複数選択を使っても、１フォルダ中のファイルしか選択できないので、もうちょっと発展させて、キャンセルボタンをクリックするまでファイル複数選択させる機能も実装しています。ただし、これを使うシーンがあるかどうかは不明ですけどね(^^♪

+ [かんたん固定フォーマットアクティビティ](https://marketplace.uipath.com/ja/listings/2032 "Jumt To UiPath MarketPlace")

これは、本当に限定的な利用者に向けて.xamlとして作ったものでしたが、意外と「汎用機からのIMPORTしたフラットファイルを使いたい」ニーズはあるのではないか？と思い、汎用化したのでした。

文字列を扱うのではなく、文字列をバイトとして（全角、半角を判断し）認識させて処理するという点が頭を悩ませるものでした。

+ [かんたん雑多なファイル関連アクティビティ](https://marketplace.uipath.com/ja/listings/2664 "Jumt To UiPath MarketPlace")

これが最新CAです。

事の発端として、拙作ロボをお客様に納品して使っていただくときに異常終了した事でした。

異常終了の原因は、改行コードがCrLfを期待していたファイルが、Lfで送られてきた事でした。そのファイルを選択、使用した際に、データテーブルに展開できずにメモリーオーバフローしたのでした。お客様がファイルを作成するのではなく、外部の会社から送られてくるファイルを使うというので、お客様と外部の会社間の問題ではあるけど、ロボが異常終了して、こっちにお鉢が回ってくるのはたまらない！だったら、事前に改行コードは何なのかを調べるアクティビティを作成してしまおう！と思ったのでした。

結局、改行コードチェックアクティビティにとどまらず、UTF-8独特のBOMコードの有無チェックアクティビティを作りこみ、16進ダンプも作りこんだのでした。

* * *

###はなっち！作のカスタムアクティビティ｡｡｡
うれしい事に、ダウンロード数も５CA合わせて1,000を超えています。限定的な利用者に向けて作った[かんたん固定フォーマットアクティビティ](https://marketplace.uipath.com/ja/listings/2032 "Jumt To UiPath MarketPlace")も151ダウンロードとなり、いやいや、これは昨年末のMarketPlace内部構成の移行のバグではないか？と思ったりするのです(^^♪

QIITAでは、個々のCAの使用手引きの解説、開発秘話もお届けできたらなと思うのです。

##おわりに
いかがでした？

▼カスタムアクティビティは、ロジック丸見えのxamlでの機能提供ではなく、.Nupkg形式で提供できるので、はなっち！のぐちゃぐちゃロジックがバレずに済みますし、MarketPlaceを通じてダウンロードできるので版数管理もしっかりできるので、いい事ずくめですね。
▼とはいえ、アクティビティ命名のセンス、十分な試験、想定していない引数を設定された場合のロジック実装、異常時の対応（Throwさせるのか？それとも普通に異常終了させるのか？）、取扱説明書などを用意しなければならないなど、ハードルは低くはないです。一つずつ超えていくしかないのですが。

はなっち！作カスタムアクティビティに限らず、[UiPath MarketPlace](https://marketplace.uipath.com/ja "Jumt To UiPath MarketPlace") からのカスタムアクティビティを利用して、
是非UiPathでのロボ開発の一助になればと思っています。

ありがとうございました！