無駄ロボット研究所

RPAでファイル名を翻訳して心理的障壁を発現 ~混沌! ファイル名中国語化ロボ の巻

『無駄ロボット研究所』ではRPA(Robotic Process Automation)ツール「UiPath Studio」を使って役に立たない、無駄なロボットを作っていきます。業務を効率化するという本来RPAで実現すべき目的とは真逆のロボットたちをお楽しみください。

 おそらく、海外の人から見れば日本語名のファイルが、まさにそれだと思うのですが、他言語のファイル名のファイルって、なんだか開くのが不安じゃないですか? 今回、作るのは、そんな『よくわからない不安』を演出できるロボットです。指定したフォルダーのファイルを自動的に中国語化します。

指定したフォルダーのファイルを自動的に中国語化

何となく読めるから不思議

 最近では、日本語のやたらと長いファイル名が付けられたファイルを見かける機会も増えてきました。

 『ファイル名は半角英数8文字以下、絶対!』で、育った身としては、未だに違和感がありますが、どんな内容のファイルなのかがファイル名だけで判断できるので、むしろ安心して開けますね。

 ただし、これは、読んですぐに理解できる日本語だからであって、これが別の言語だと、ちょっとというか、かなり不安になります。

 そんな不安を楽しめるのが、今回のフォルダー内のファイルを自動的に中国語に変換するロボットです。

 もちろん、意味はありません。様変わりしたフォルダー内の景色を楽しみ、何となく読めるけどよくわからないファイルを開くという、不安感をぜひお楽しみください。

Microsoft Azureの“Translator Text API”を使う

 さあ、淡々とロボットを作っていきましょう。

 今回のロボットでは、ファイル名の翻訳にクラウドサービスを使います。これまでは、主にGoogleのサービスを使ってきましたが、せっかくなのでMicrosoft Azureで提供されている“Translator Text API”を使いましょう。

 というか、AI系のサービスは、ロボットと相性がいいので、Google、Amazon、Microsoft、IBM(Watson)と、一通りアカウントを作成して、使えるようにしておくことをお勧めします。

 いずれも、無料のプランが用意されているので、個人で使うレベルなら、料金がかからずに翻訳や画像認識、自然言語処理などを活用できます。むしろ、使わない方がもったいないですね。

APIの有効化

 Microsoftアカウントで、“Azure”にアクセスし、[リソースの作成]画面の[Marketplace を検索]から検索して“Translator Text”を作成します。

 初回は、30日間もしくは22,500円分まで使えるフリーアカウントを作成できます。クレジットカード情報の登録が必要ですが、そもそも“Translator Text API”は“F0”プラン(月200万文字までの翻訳)なら無料で使えるうえ、ボーナス分の22,500円もあるので、仮想マシンを立てっぱなしにするなどの、よほど無茶なことをしない限りは、課金されません。

リソースを作成。無料プランの“F0”プランを選択し、複数リソースをまとめて管理するためのグループを新規に作成、サーバーは日本が使えるので場所で“東日本”を選択しておく

アクセスキーの確認

 デプロイが完了したら、リソースの管理画面に移動し、[概要]からアクセスキーを確認します。このキーを使って、「UiPath Studio」からクラウド上の“Translator Text API”にアクセスします。

Microsoft Translatorパッケージの追加

 「UiPath Studio」には、標準ではAzureと連携するためのアクティビティは登録されてません。このため、パッケージを追加する必要があります。

 [パッケージを管理]画面で[すべてのパッケージ]を選択した状態で“Translator”で検索すると、“UiPath.MicrosoftTranslatorText.Activities”が表示されるので、これをインストールしておきます。

[代入]でフォルダーを指定

 準備が整ったら、ロボットを作っていきましょう。まずは、操作するフォルダーを指定します。

 [代入]アクティビティを配置し、左辺で[Ctrl]+[K]キーで“dName”という変数を作成し、右辺に“"c:¥temp¥test"”と、変換したいフォルダーを指定します。

[代入]でフォルダー内のファイルを取得

 続いて、フォルダーにあるファイルの一覧を取得します。同じく[代入]アクティビティを配置し、左辺で[Ctrl]+[K]キーを押して、ファイルの一覧を格納するための変数“fItems”を作成します。

 “fItems”変数は、標準では“Generic Value”という何でも入れられる型で宣言されますが、ここではフォルダー内のファイルを配列として格納したいので、変数パネルで型を変更します。一覧から“Array of [T]”を選択後、“String”を指定しておきましょう。これで、文字列を配列として格納できます。

 一方、右辺には、“Directory.GetFiles(dName)”と入力します。これは.NETのメソッドです。“()”に指定したフォルダーにあるファイルの一覧を取得できます。

繰り返し(コレクションの各要素)

 ここまでで、“c:¥temp¥test”フォルダー内のファイル名一覧が“fItems”に格納されたので、今度は配列の中のデータをひとつずつ処理していきます。

 [繰り返し(コレクションの各要素)]アクティビティを配置し、[コレクション値]に対象となる“fItems”を入力します。そして、プロパティパネルで[TypeArgument]を“String”に変更します。

“fItems”内の個々の値は“String”型のなので、繰り返し(コレクションの各要素)の[TypeArgument]も“String”にしておく

代入でファイル名を取得

 “fItems”から取り出した個々の値(Item)には、「c:¥temp¥test¥リスト.xlsx」のように、パス、ファイル名、拡張子が含まれています。このうち、翻訳したいのはファイル名だけなので、この文字列から、ファイル名だけを取り出します。

 [代入]アクティビティを配置し、左辺で[Ctrl]+[K]キーを押して“fName”変数を作成します。

 一方、右辺には、“Path.GetFileNameWithoutExtension(Item)”と入力します。これも.NETのメソッドで、パスや拡張子などが含まれたファイル名から、名前の部分だけを取り出します。

代入で拡張子を取得

 同様に、[代入]アクティビティで拡張子を取り出します。左辺で[Ctrl]+[K]キーを押して“fExtention”変数を作成し、右辺には、“Path.GetExtension(Item)”と入力します。

ファイル名を翻訳

 いよいよ、ファイル名を翻訳します。追加したパッケージの[Translate Text]アクティビティを配置し、プロパティパネルを次のように設定します。

  • SubscriptionKey:Azure Portalで確認したアクセスキー
  • From:"ja"
  • Text:fName
  • To:"zh-Hans"
  • TranslatedText:resDat([Ctrl]+[K]キーで変数として作成)
プロパティパネルで、“Translator Text API”のアクセスキーや翻訳する言語を設定する

ファイルをコピー

 最後に、翻訳されたファイル名を使って、ファイルをコピーします。本音では、置きかえてしまいたいところですが、大切なファイルだと困るので、コピーにしておきます。[ファイルをコピー]アクティビティを追加し、プロパティを次のように設定します。

  • 保存先:dName+"¥"+resDat+fExtention
  • パス:dName+"¥"+fName+fExtention

 “dName”はフォルダー名、“fExtention”は拡張子、真ん中の“fName”がコピー元となるオリジナルのファイル名で、“resDat”がコピーとなる翻訳済みのファイル名です。これらを「+」を使ってつなぎ合わせます。

プロパティでコピー元とコピー先を設定する

 これでロボットは完成です。実行すると、次の画面のように、既存のファイルが中国語のファイル名に翻訳されます。何となく読めるのですが、そこはかとない不安感が漂っていますね。