Microsoft To Doをpopclipに対応してみた。

### Popclipについて

Popclipというアプリは実に素晴らしいアプリだ。
気になるキーワード、保存したいURL、文章などを選択して処理したり、入れたい所に保存することができる。

私は仕事でよく使う。現在、なくてならない存在までなってしまった。
もっと素晴らしいことは自作でプラグインを作ることができるのだ。ということは、自分のアイディア次第で何でもできそうだ。

以前、私よく使うパターンとしては、後でみたい記事URL、またはキーワードをWunderlistというTodoアプリに、Popclipアプリ経由でよく保存しておいた。土日など時間を取って、忘れることなく記事をみることができた。Popclipアプリではなく他の方法でもいくらある。しかし、popclipはたったアイコンをクリックするだけなので、非常にシンプルで便利だった。

関連リンク：
https://apps.apple.com/jp/app/popclip/id445189367?mt=12
https://github.com/pilotmoon/PopClip-Extensions

### Wunderlistについて
このTODOツールもすごく愛用していた。ちょうど私のニーズにあったアプリであった。しかし、またMicrosoftによって消えてしまった。残念、心が痛いほどだった。

その代用ツールとして、使用し始めていたのはMicrosoft ToDoアプリだった。が、Popclipに対応していなかった。でも自作で作れば、なんとかなると思ったけど、Microsoft ToDoのAPIは使えるものではなかった。いろいろ試して挫折してしまって諦めた。どうやら、Microsoftのアカウントは個人アカウントと組織アカウント(有料)があるが、私は個人アカウントなので、できない制限がことが多いらしくて、無理にして作ったとしても、いい結果がないだろうと思って自作を放棄した。それで考えた末で、思いついたのは、API経由で登録をやめて、Microsoft TODOアプリのUIを操作(マウス的操作)だった。AppleScriptはそれができるらしい。

Mac用のMicrosoft TODO アプリ
https://apps.apple.com/app/apple-store/id1274495053?mt=8

### 作り方はこうだ。
#### まずは、フォルダを作成する。
名前は「microsoft-todo.popclipext」にした。名前はどうでもよい。大事なのは、フォルダの拡張子だ。フォルダなのに、なんで拡張子がついているの？と思うかも知らないが、そうすることで、フォルダのアイコンは、以下のようにpopclipのアイコンに変わっていた。
![スクリーンショット 2020-07-19 11.01.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326788/e7486523-7786-0159-8a85-d5b15bf4306d.png)

#### フォルダの中に、以下のファイルらを作成しておく。
- Config.plist
- todo.applescript

これだけのファイルで十分だ。
注意: 
applescriptの拡張はscptもあるのだが、ここではNGらしい。applescriptにしてほしいということだった。(ちょっとハマってしまったけど。)

#### Config.plistの中身はこうだ。
```plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Extension Description</key>
    <string>Microsoft To Do Extension By 自分の名前(ここを置き換えてね)</string>
    <key>Extension Identifier</key>
    <string>Microsoft.To.Do.Extension.By.自分の名前(ここを置き換えてね)</string>
    <key>Extension Name</key>
    <string>Microsoft ToDo</string>
    <key>Version</key>
    <integer>1</integer>
    <key>Actions</key>
    <array>
      <dict>
        <key>After</key>
        <string>show-status</string>
        <key>Title</key>
        <string>MToDo</string>
        <key>AppleScript File</key>
        <string>todo.applescript</string>
      </dict>
    </array>
  </dict>
</plist>

```

このファイルで一番重要なのはここだ。

```plist
<key>After</key>
<string>show-status</string>   説明: popclipの処理結果表示: 成功 OR 失敗の結果を教えてくれる。
<key>Title</key>
<string>MToDo</string>         説明: popclipに表示したい名前。できるだけ短いほうがいいので。
<key>AppleScript File</key>    説明: スクリプトの種別: applescriptを使うんだよ、ということを指定。(他にもいろいろある)
<string>todo.applescript</string>  説明: ここは一番メインのところ。
```

#### todo.applescriptの中身を書く。

```applescript
#!/usr/bin/evn osascript

tell application "Microsoft To Do"

  activate

end tell

tell application "System Events"

  tell process "Microsoft To Do"
    tell menu bar 1
      tell menu bar item "ファイル"
        tell menu "ファイル"

          -- 操作1: 「タスク」グループを選択する
          pick menu item "リストを開く"
          tell menu item "リストを開く"
            tell menu "リストを開く"
              pick menu item "タスク"
            end tell
          end tell

        end tell
      end tell
    end tell

    -- 操作2: 選択した内容を「タスク」というリストにいれる。
    delay 1 
    tell window 1
      tell splitter group 1
        tell text field 1
          -- 環境変数から取る
          -- https://github.com/pilotmoon/PopClip-Extensions#example-applescript-file
          set value to "{popclip text}"
        end
        click button 2
      end tell
    end tell
  end tell
end tell

-- 実行コマンド: osascript  todo.applescript

```
説明:
ここでやっている内容としては
1. TODOアプリを開く
2. メニューのファイルをクリック
3. リストを開く
4. タスクを選択する。
5. popclip側で選択した文字列を環境変数から引っ張ってきて、「タスク」の入力用のテキストボックスに貼り付ける。
6. そのテキストボックスの左側の丸いボタンをクリック。(本当はエンターキーを使いたかったけど、うまく行かず)

つまり、popclipでTODOアプリの「タスク」フォルダにどんどん、入れておく感じ。

####  最後にpopclipに登録
先ほど、作成したフォルダ(microsoft-todo.popclipext)をクリックすると、popclipに「ピピッ」と音を立てながら追加される。
これで、使えるようになれる。

出来上がりこんな感じ
------------------------------------------------------------------------
![スクリーンショット 2020-07-19 11.47.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326788/ea63698d-1e5c-56dc-8539-142f7731860d.png)

![スクリーンショット 2020-07-19 11.53.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326788/ba4a60a7-fb68-dfd5-09ed-0682d3a0d1ff.png)
------------------------------------------------------------------------

参考した資料:
- https://gist.github.com/kuronekomichael/7096699
- https://maku77.github.io/mac/applescript/run.html
- https://allabout.co.jp/gm/gc/80938/3/
- http://tonbi.jp/AppleScript/Tips/Scripting/Debug.html

## 最後

動作の正確さからみると、できるだけ対応しようとするアプリのAPIを使ったほうがいいと思いますが、それでもどうしても、対応してみたいという気持ちがあれば、このような方法でも対応できるんだ。ということでした。

それとApplescriptは、仕事にはあまり使っていないので、自分とは遠いイメージがありましたが、思ったより、簡単でしたし、いろんなところで使えそうな気がしました。(Macユーザーに対して)