みなさんこんにちは。楽して働いてますか!?
わたしは余りに楽して働き過ぎて、一杯仕事が回ってきてしまい、久しぶりの更新となってしまいました。
という言い訳はさておいて。
今回は我々ICTワーカーの多数が関わっているだろうECサイトでのお仕事を効率化してみたいと思います。
今回、わたしに課せられた使命は、ショッピングサイト上のカテゴリーの「名前」と「URL」を収集して大量のリンクを作成する準備をすることです。
ECでもシステムによってはこの手の情報をCSVファイルやExcelファイルでダウンロード出来たり、自社ECなどでは、最悪直接、SQLファイルをダウンロードする……と言った手段が考えられますが、今回はそのいずれも使えない……でも手作業は面倒だ! ということで、「Pulover’s Macro Creator」と「Auto Hot Key」の出番です(まだ導入してない方は過去記事を見て下さいね)。
まずは与えられた情報を確認
モザイクが多くて大変見づらいですが、これは「架空のECサイト」の画面です。何かに似ていても気にしてはいけません。
さて、UIですが、まず左側パネルの「a」の部分で情報を得たいカテゴリーを選択します。この部分でも「カテゴリーの名称」(今回必要な情報その1)は得ることができます。
続いて、「a’」の部分ですが、
[編集]:「ここにカテゴリの名前が入る」ページの編集ができます
このように、a’の中にも「カテゴリーの名称」(今回必要な情報その1)があります。
最後に、bの部分にリンクつきで「カテゴリーのURL」(今回必要な情報その2)があるのが分かります。
どこから情報を取ろうか?
結論から述べますと、「a’」と「b」からそれぞれ「カテゴリーの名称」と「カテゴリーのURL」を取得したいと思います。
何故かというと、まず「a」の部分。ここを使わないのは
スクロール状態によって、どこに目的の文字があるか分からない
というのが理由です。
同じ理由で、情報を取るカテゴリーの選択(左パネルのクリック)は「手動で行います」。ブラウザ操作をマクロ化することも出来ますが、ショッピングモール型のサイトでは規約で禁止されていたりするので(サーバーへの負荷の関係上)、ページの読み込みが発生しないところだけマクロ化してしまいます。
「b」から取得するのは、それ以外方法がないから仕方がないですね。
こういった、操作の一部分だけを自動化するのにPulover’s Macro Creator(とAuto Hot Key)は特に向いています。他のマクロツールは同じ操作の繰り返しを想定していますが、Auto Hot Keyはその名前が示すとおり、人間が操作しつつホットキー(ショートカットキー)のように操作を拡張する目的で作られているので、他のマクロツールよりもより、ホットキーを設定しやすくなっているからです。
どこに情報を保存しよう?
これはもう、お使いの表計算ソフトがベストでしょう。
筆者は個人的な趣味でLibreOfficeを使います。テキストエディタでもいいですが、表計算ソフトにいれておくと、後からHTMLにしたり、他のソフトにインポートしたり、SQLに書き出したり……と色々便利なので、とりあえず表計算ソフトに保存することにします。
全体の流れ
ここで全体の流れを考えてみます。
マクロソフトの基本は、「自分が操作を行う部分を自動化」するわけですから、普通にやったらどうなるか……ということを考えます。
- 左パネルから目的のカテゴリーを選択(今回もここは手動)
- a’の部分から、カテゴリーの名前をコピー
- コピーした名前を表計算ソフトにペースト
- bの部分からURLをコピー
- コピーしたURLを表計算ソフトにペースト
という作業になります。さらに細かく分けると、「ブラウザ、表計算ソフトのウィンドウをアクティブにする」、「編集するセルを移動する」という作業が必要になります。
今回、表計算ソフトのセル移動は「Tabで列を移動してからEnterで行を変えると、Tabで移動を開始した次の行の列が選択される」という機能を利用したいと思います。
なんのことはなく、「名前をペーストしたらTab」、「URLをペーストしたらEnter」という操作を組めばいいということになります。
PMCで楽にマクロの編集をする!
まず、Pulover’s Macro Creatorで、
- a’の行全体を選択してコピー
- 表計算ソフトにペースト
- Tabキーを送信
- bの行全体を選択してコピー
- 表計算ソフトにペースト
- Enterキーを送信
というマクロを「記録」してひな形としてしまいましょう。マクロを記録するやり方と、それを編集してひな形にするやり方は前回の記事を参考にして見てください。
選択の仕方ですが、今回は「ドラッグ」でテキストを選択するやり方を採用したいと思います。
いくつか試行錯誤して、これが一番失敗が少なそうなのでこれを採用しました。
アドレスの方は右クリックして「リンク先を保存」でもいいかもしれません(アドレスの長さがまちまちな場合などはドラッグよりそちらがいいでしょう)。
一方で、カテゴリの名前の方はざっくり一行とっています。カテゴリ名以外は定型文なので、表計算ソフトの検索と置き換えで削除……もいいのですが、今回はそこもマクロで対処します。
ドラッグの座標を編集
通常の記録だと、ブレがあったりするのでドラッグ操作に関しては後から編集した方がいいでしょう。
記録されたマクロをみても分かると思いますが、ドラッグに関しては、マウスのアクション
「移動し、クリックしてく(ださい?)」で、放し/ホールドにチェックを入れることで実行できます。座標をいじりたいときは、右上の座標の内容を変更します。
この「放し/ホールド」が「レ」の形でチェックをしているコマンドだと、プレス(ボタンを押し下げたまま)となり、
「■」の形のチェックになるとリリース(ボタンを離す)ということになります。
また、マクロを速く動作させるためにPauseの待ち時間を調整することもあると思いますが、ドラッグの場合、余りに短いとしょっちゅう失敗してしまうので気持ち大きめに数字を設定するといいでしょう。
変数と関数でクリップボードの内容を編集する
ここまでで、実は後から「検索と置き換え」を行えば充分に要件は満たせるのですが、せっかくなのでマクロの機能をフルで使いたいと思います。
ここではまず、PMCでの変数と関数の入力について説明します。
※変数と関数って?
ざっくりとした説明なので、より詳しくは専門的な書籍などで調べてください。最初は厳密に分からなくても、使っていくうちになんとなく分かってきます。
変数
プログラムにおいては、値を「一時的に保存しておく場所」のこと。コピー&ペーストで使う「クリップボード」に名前をつけて複数用意して置けるものだと思ってください。
関数
色々な機能を簡単に呼び出せるように詰め込んだ「箱」。Pulover’s Macro CreatorやAuto Hot Keyでは、色々な値(文字列や数字)を放り込むと、何かしらの「結果」が得られるもののこと。
なので、基本的に実行したら実行しっぱなしの「クリック」などのコマンドは関数とは区別されています。
クリップボードの内容を変数にコピーする
Webページからコピーしてきた文章を、編集しやすいように一回変数にコピーします。
変数を操作するには、コマンドメニュー内の「変数(Shift+F10)」を選択します。
表示されたダイアログで、値を設定したい変数名を「出力変数」に入力します。
同じスクリプトの中で、同じ名前の変数には同じ値が入りますので、名前が変に重複したりしないように気をつけてください。また、綴りが間違ったりすると、「値が入っているはずなのに入っていないー!」なんてことも起きますので気をつけてください。
オペレータとは、操作のことで、ここでは値をコピーしたいので「:=(割り当てる)」を選択します。
更に下の部分には「%Clipboard%」と入力します(大文字小文字は区別されないようです)。
この%での区切りが、ただの「文字」なのか、「変数」なのかを区別する区切りなのですが……、
実はこの%で区切るルールがAuto Hot KeyとPulover’s Macro Creatorで微妙に違います。
思わず赤字まで使っちゃうくらい困るのですが……。例えば、これをAuto Hot Keyで書くと、
src := Clipboard
となって、%で区切らなくてもいいのです。ただAuto Hot Keyでも%で区切らないと行けない場面もあるので、どちらかというとAuto Hot Keyの方のルールがわかりにくいのですが……。
ともかく、これでクリップボードのテキストが変数「src」(またはあなたが名付けた名前!)にコピーされました。
変数の中から文字を抜き出す「正規表現」!
さて、改めてコピーしてきた文章を見ると
[編集]:「ICTワーカー」ページの編集ができます
となっています。この例なら、ICTワーカーの前後を表計算ソフトの置き換えで削除してしまえば、内容のICTワーカーだけが残ります。
が、それはちょっとスマートではないので、逆の発想で「」に囲まれた文字を抜き出したいと思います。
そういうときに便利なのが正規表現です。
正規表現が何かというと、ちょっと説明が難しいのですが
「検索機能をより高機能に、柔軟に活用するための書き方のルール」のようなものです。
最近だと、高機能なエディタや表計算ソフトなんかにも搭載されていますね。
この書き方のルールを使って、「どんな文字かは分からないけど、とりあえず括弧に囲まれた文字を抜き出そう!」という普通の検索とはある意味真逆のアプローチを行います。
さて、この正規表現を使うために、コマンドメニューの中の「関数(Ctrl+F10)」を呼び出します。
表示されたダイアログの「機能名」のところに「regex」と入力して、右側の「▼」をクリックします。
するとこの様に、該当する関数名(機能名)が選択されますので、今回は一番に選択されていた「RegExMatch」(Regular Expression Matchの略)を選択します。
選択したら、出力変数に「chk」(今回はエラーチェックにしか使いません)、コンマ(括弧なし)パラメータを分離した:という分かったような分からないような項目に、
%src%,「(.+)」,%dest%
と入力します。%で囲まれた文字列は「変数名」なので、先ほど別の名前を付けた人はご自分のものに置き換えてください。
半角のカンマの後の「」の中の(.+)は必ず半角で入力します。そして、このよく分からない文字列こそが正規表現なのです。
最後の%で囲まれたdestも変数です。このdest(とその配下たち)にRegExMatchで「抜き出した文字」が保存されるという寸法です。
そして、これをAuto Hot Keyで書くと
chk := RegExMatch(src, "「(.+)」", dest)
となります。chk := までは先ほどと一緒ですね。RegExMatchを実行した結果がchk変数に代入されます。この場合は、「何文字目が一致したか」という情報がはいります。
「なんで一致した文字がそのまま入らないの?」と最初は思うのですが、検索された結果が「一つだけとは限らない」、あるいは「0のこともあるけど、絶対に1だけということはない」というのが正規表現での検索の特徴です。
今回は後者の、「検索に引っかからない可能性はあるけれど、検索結果が1になることは絶対にない」パターンです。
正規表現の基本を分解してみよう。
なんのこっちゃ、なので細かくみてみましょう。
まず最初と最後の「と」はいいですね。これはそのまま【「ICTワーカー」】こいつを囲っている括弧を意味しています。
そして半角の()は一旦飛ばして、.(ドット、ピリオド)ですが、これは「なんでもいいから1文字」を表現しています。ポイントは1文字というところです。
続いて+(プラス)、これは直前の文字の「1回以上の繰り返し」となります。一個前の.はなんでもいい1文字だったので、「なんでもいいから1文字以上の文字全部が検索に引っかかる」ということになります。
ここまでの説明でWindowsの*(ワイルドカード)を思い出した方もいらっしゃるかと思います。実際、この.+の組み合わせは同じように使えます(分解できるのでより色々表現できる)。
さて、()はまだまだ忘れていただいて、「.+」としたらどうでしょう?
そう、「」括弧で囲われた1文字以上の文字列が検索結果として引っかかります。わかりにくいので、以降検索結果はイタリック体で表記しますね。
「ICTワーカー」でも「遊びに行きたい」でも「コーヒー美味しい」でもなんでも引っかかります。
ただし、どれも「」が込みで引っかかります。
そうなんです、「」で囲われた文字を探すために、「」を入れると、それまで検索結果となってしまうのです。
本当に欲しいところだけを取り出すグループ化
ここで生きてくるのが()半角の丸括弧です。
これは、囲われたものをグループ化して別に取り出すことが出来る、という凄い機能なのです。
どういうことかと言うと、「(.+)」と書いても、
「ICTワーカー」でも「遊びに行きたい」でも「コーヒー美味しい」でもなんでも引っかかります。ただ、更にそこから、()で囲われた部分(.+が引っかかった場所)だけを後で呼び出すことができるのです。
これで、カテゴリーの中身だけを取り出すことが出来ますね!
で、それはどこにあるの?
検索した結果はdestに入る……と言いましたが、検索結果が一つではないとも言いました。今回の場合だと「ICTワーカー」とICTワーカー(こっちが欲しい)ですね。
実はdestの中には「ICTワーカー」が入っています。
そして、dest1という変数の中にICTワーカーが入っているんです。これが、一つの正規表現の中にもう一つ()で囲まれたグループがあればdest2の中に……と数字が増えてどんどん検索結果に応じて数字が増えて行きます。
これをクリップボードに書き込んで上げれば、ペーストで表計算ソフトに名前だけ移すことが出来ます。
これは変数(Shit+F10)画面で、
このように指定してやれば動きます。
(なんだか、検索と置き換え機能を使った方が遙かに楽だった気がしますね。でもこういう積み重ねでより面倒なことを楽にできるようになるんです)
PMCで作ったマクロをAuto Hot Keyへ
が、残念ながら動きません。何故か……どうも、記法をAuto Hot Keyと変えた影響か、RegExMatchがちゃんと変数に値を入れてくれないようです(もしかしたら最新版では直ってるかもしれません)。
とはいえ、ここまで作って動かないなんてやってられるか!
ということで、本家Auto Hot Keyで実際に動作させてみようと思います。
本家Auto Hot Keyのインストールに関しては別に解説ページを用意したので、そちらをご覧下さい。
さて、Auto Hot Keyがインストール出来たら、実際にマクロを書き出してみます。
PMCのファイルメニューの中に「AHKにエクスポート」というのがありますので、それを選択します。
このように、作成したマクロが一覧で表示されます。
そのままエクスポートでもいいのですが、今回は一覧でひょうじされているマクロをダブルクリックして編集画面を表示します。
編集ダイアログが表示されます。
今回は「ブロックマウス」にチェックをいれます。これにチェックを入れると、マクロの動作中にユーザーからのマウス入力を文字通りブロックするので誤動作が減ります。
今回はドラッグするので必須といってもいいでしょう。
そして、その左隣はマクロを動かすためのホットキーを変更できます。PMC側の設定が標準で設定されていますが、変更したい場合はドロップダウンリストから選択してください。
さて、編集ウィンドウを「[OK]を」ボタンで閉じたら、もとのエクスポートダイアログで「エクスポート」ボタンをクリックして出力するだけです。
出力された.ahkファイルをダブルクリックすると、
こんなアイコンがタスクトレイに表示されますので、設定したホットキーを押してみましょう。
無事動作すれば成功です(もちろん、ブラウザや表計算ソフトは起動しておいてください)。
悲しいことに、ちゃんと入力していればPMCでは動かないのに、AHK側ではエクスポートされたマクロに手を加えなくても動作してしまうんですよね……。
もしちゃんと動かない! と言う方がいらっしゃったら今回わたしが作成したマクロを掲載しておきますのでお手持ちのエディタ(簡単なものならメモ帳など)で直接編集して試してみて下さいね。
ただ、ブラウザはChrome, 表計算ソフトはLibreOfficeを想定しています。また、マウスのドラッグ位置に関してはそれぞれのウィンドウサイズなどによって変わりますので、その辺りはPMCを駆使して座標をいじったり、ウィンドウの指定をしたりしてみてください。
; This script was created using Pulover's Macro Creator #NoEnv SetWorkingDir %A_ScriptDir% CoordMode, Mouse, Window SendMode Input #SingleInstance Force SetTitleMatchMode 2 DetectHiddenWindows On #WinActivateForce SetControlDelay 1 SetWinDelay 0 SetKeyDelay -1 SetMouseDelay -1 SetBatchLines -1 F4:: Macro1: BlockInput, MouseMove WinActivate, ahk_exe chrome.exe Sleep, 333 Click, 755, 338 Left, Down Sleep, 150 Click, 755, 358 Left, Up Sleep, 100 Send, {Control Down} Sleep, 50 Send, {c} Sleep, 50 Send, {Control Up} Sleep, 100 src := Clipboard chk := RegExMatch(src, "「(.+)」", dest) Clipboard := dest1 WinActivate, ahk_class SALFRAME Sleep, 333 Send, {Control Down} Sleep, 50 Send, {v} Sleep, 50 Send, {Control Up} Sleep, 100 Send, {Tab} Sleep, 100 WinActivate, ahk_exe chrome.exe Sleep, 333 Click, 1102, 413 Left, Down Sleep, 150 Click, 751, 418 Left, Up Send, {Control Down} Sleep, 100 Send, {c} Sleep, 100 Send, {Control Up} Sleep, 100 WinActivate, ahk_class SALFRAME Sleep, 333 Send, {Control Down} Sleep, 50 Send, {v} Sleep, 50 Send, {Control Up} Sleep, 100 Send, {Enter} Sleep, 100 WinActivate, ahk_exe chrome.exe BlockInput, MouseMoveOff Return
最後に
いかがだったでしょうか? 単純に「操作自動化」というだけではなく、データを加工したりできるのがAuto Hot Keyの魅力ですね。
今回は筆者の実例が本当にそのまんま掲載されています。が、いかんせんちょっと長すぎますね。
PMCで正規表現の関数がきちんと動かないのは想定外でしたが、それでもマクロのひな形の作成としては優秀です。
そのため、操作シミュレートのコマンド(マウスの座標やウィンドウのアクティブ化など)はPMCでひな形を作成し、変数や関数を使ったやや込み入った部分はエディタを使って直接スクリプトを編集する、などして使い分けていくと、マクロの作成もより効率的になるのではないでしょうか?
それではまた次回。
3件のフィードバック