【UiPath】数字をn乗してくれるカスタムアクティビティを作成したのでコードを解説する（初心者向け）


新卒でRPA課に配属されて、5月からせっせとRPAについてお勉強しています。

そして本日ついに上司から、「カスタムアクティビティの作成」に挑戦してみよ！という指令が来ました。

練習がてら**数字をn乗してくれるカスタムアクティビティの作成**をやってみました。

カスタムアクティビティに関するドキュメントがあまり日本語ドキュメントがなかったので記事にしてみました！

（Visual StudioとNuGet Package Explorer）のインストールは済んでいるという前提でいきます！


## 0. 全体のコードを公開！

```js

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Activities;
using System.ComponentModel;

namespace 計算
{
    public class Factorial : CodeActivity
	{
		[Category("Input")]
		[RequiredArgument]
		public InArgument<int> Number { get; set; }

		[Category("Input")]
		[RequiredArgument]
		public InArgument<int> N { get; set; }


		[Category("Output")]
		public OutArgument<string> Result { get; set; }

		protected override void Execute(CodeActivityContext context)
		{
			var number = Number.Get(context);
			var n = N.Get(context);


			var result = System.Math.Pow(number, n);
			Result.Set(context, result.ToString());
		}
	}
}

```

# 1. ネームスペースとクラス名

コードでは、ネームスペースを「計算」、クラス名を「Factorial」にしています。

```js

namespace 計算
{
    public class Factorial : CodeActivity
	{
```

この「計算」と「Factorial」はUiPathのこの部分に当たります

![コメント 2019-05-20 173437.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238739/af0e6bbc-442d-0570-2a53-288b84375e06.png)

UiPathは最近日本語対応にしたので、日本語が良いんじゃないかと思います！
（コードの中に日本語が入っているの変な感じだなあ）

日本語も英語も使えるということで、あえてどちらも使ってみました！

# 2. inputとoutputを定義する

コードで言うとこの辺りですね！！

```js

    public class Factorial : CodeActivity
	{
                
		[Category("Input")]  // 「Input」カテゴリーに以下の要素をいれます
		[RequiredArgument]  // 入力必須要素です
		public InArgument<int> Number { get; set; } // Int型で「Number」を入力するようにします

		[Category("Input")]　// 「Input」カテゴリーに以下の要素をいれます
		[RequiredArgument]　// 入力必須要素です
		public InArgument<int> N { get; set; }　// Int型で「N」を入力するようにします


		[Category("Output")] // 「Output」カテゴリーに以下の要素をいれます
		public OutArgument<string> Result { get; set; } // String型で「Result」を入力するようにします
```

これはUiPathではこの部分にあたります。

<img width="960" alt="キャプチャ.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238739/274d2674-a003-41d6-4cb1-5351757f9fda.png">


NumberとNを入力したら、NumberのN乗を計算して、文字列として返すという処理をするので、このようなコードになっています。

# 3. 処理をする

関数の中で処理を作成していきます。
CodeActivityContextのexecuteメソッドをオーバーライドすることで、処理ができるようになるそうです（この辺あやふや）

```js

 protected override void Execute(CodeActivityContext context)
{
    var number = Number.Get(context);  // 「Number」の入力値を受け取る
    var n = N.Get(context);  // 「N」の入力値を受け取る 

    var result = System.Math.Pow(number, n);  // NumberのN乗を計算し、変数resultにいれる
    Result.Set(context, result.ToString());  // resultを文字列にして、上で定義した「Result」にセットする
}
```

VB.Netを知らなかった僕にはどうやってN乗するんだろうと疑問でしたが、調べてみると、N乗をするための関数がありました。
これを利用して、NumberのN乗を実現しました。

```
System.Math.Pow(数字, 何乗するか)
```

そして、さらに

```
Result.Set(context, result.ToString()); 
```

この部分ですが、この大文字の「Result」の方は、上で定義した`public OutArgument<string> Result { get; set; }`この「Result」を指しています。

# おわりに

初めてVB.Netに触れて、初めてUiPathに触れて、初めてカスタムアクティビティを作成してみました。

簡単なアクティビティだったのであまり難しくありませんでしたが、もっと複雑なアクティビティを作るのにも挑戦してみたいです。

初めてカスタムアクティビティを作る！という方、日本語ドキュメントが超絶少ないです。
このサイト↓はとても分かりやすかったので、（英語ですが）（Youtubeですが）超おすすめします！！！！！

【参考サイト】
[UIPath - Creating a Custom Activity](https://www.youtube.com/watch?v=LkuSKKn4w1s)