毎日のタスク管理の記入がめんどくさいあなたへ!jsでMacのリマインダーに投稿してみた。

皆さん 初めまして

SKIYAKIでクリエイターをしています。 ダーヤマと申します。

皆さんはゴールデンウィークはどうお過ごしになられたでしょうか? 旅行に行った人いるかもしれません。 もしかしたら家でのんびり過ごした人もいると思います。

かくいう僕はシンガポールに行っていっていました。

そう常夏のアジア、シンガポールに!私は!行ってきましたよ!フィリピン経由でね!

f:id:system-skiyaki:20160508191214j:plain

きらめくアジアンガール、口からとめどなく水を出すマーライオン、異国のスパイスに酔いしれる。 そんなリア充めいた想像をしたと思います。

ただ私のどや顔を浮かべたあなたに、一つお知らせしたい。

シンガポールマーライオンのところで財布を海に流され、 携帯に至ってはもずくとなって消えました。。。! これが調子に乗りすぎる男の天罰か!

ということで、今日はMACjavascriptを操作して、 リマインダーに定期的な予定を登録してみたいと思います。

実はjavascriptMacがいじれるということは今まで知りませんでした。

そしてApple Scriptの存在もね!

YOSEMITEからの機能で、JXAと呼ばれています。

ググったら所以が出てきます。詳しくは参考をみてください。割愛します。

実行方法

実は色々な呼び出し方があります。

  • Script Editor f:id:system-skiyaki:20160508191407p:plain このアプリですね。 環境設定からApple Scriptか選べます。
  • Automator f:id:system-skiyaki:20160508191440p:plain ロケットランチャーを持ったロボットのこいつです。 登録しておけばアクションとして右クリック呼び出しできます。
  • コマンド
    みんな大好き黒い画面です。
    osascriptコマンドで実行できます。
     osascript -e console.log('hello') 
  • コマンド パート2
    パイプ*1から使用する。 あえてhelloを呼び出すと以下になります。

    echo "console.log('hello');" | osascript -l JavaScript
    *1パイプとは・・・・コマンドの標準出力を次のコマンドに渡す処理
  • コマンド パート3
    jsファイルから直接実行します。 デスクトップとかbash_profileとかなんかしとけば管理しやすそうですね。

以上の中から今回は、Script Editorを利用していきたいと思います。 では実際にリマインダーに追加していきたいと思います。

準備

まず変数やイベントについてですが、、、

なんだよ、マジわからないよというあなた、

安心してください。ちゃんとデフォでありますよ。 Script Editorから調べられます。

command + shift + o

です。今回だとリマインダーのアプリを選択します。

[f:id:system-skiyaki:20160508195016p:plain][f:id:system-skiyaki:20160508195016p:plain][f:id:system-skiyaki:20160508195016p:plain]

それらを参考に作成していきます。

最初にApplicationを使いアプリを呼び出します。

var app = Application(“Reminders”)

webでいうとIDを指定したところです。 次にリストに何があるのかを確認します。

var app = Application(“Reminders”)
app.lists.name()

リストの名前をこれで取得できます。

f:id:system-skiyaki:20160508193723p:plain

この時点で配列になってるので 例えば

var app = Application(“Reminders”)
var lists = app.lists.name()
lists[0]

このように変数にすれば中に格納されている配列を指定できます。

f:id:system-skiyaki:20160508193623p:plain

なっていないよ!っていう方は、以下を参考に配列にしてもらい使用してみてください。

f:id:system-skiyaki:20160508193651p:plain

var app = Application("Reminders")
lists = app.lists
list_arr = Array.apply(null,lists)
list_arr = list_arr.map(function(e){
    return e.name()
})
list_arr //=>[“〇〇”,“〇〇”,“〇〇”]

上記の解説をざっくりすると、

Array.applyはlistsの中身を分解して、配列を生成します。

mapは配列の中身に対して、コールバックして、name()を呼び出しています。

※ちなみにTODO本体を取得する際は、list[“〇〇”].remindersから同様の手順です。

リマインダに登録

ではリマインダーに登録してみましょう。

登録する際にはpush( entry )イベントを利用します。

var app = Application("Reminders")
entry = app.Reminder(  { name : "お腹が弛んだあなたに贈る腹筋リマインダー", body: "腹筋を300回する" } )
app.lists["毎日のタスク"].reminders.push( entry )

nameがタイトル、bodyが内容ですね。

for文などを使えば連続で数字を変えたりしながら登録ができます。 登録が完了するとScript Editorでは1が返ってきます。

f:id:system-skiyaki:20160508193413p:plain

そう、つまりこのリマインダーの流れは腹筋スレ。。。というわけです。嘘です。

以上になります。

自動化のハードルが下がりつつありますね本当に。 素敵。。。!

それでは私はお腹が弛んでるので腹筋したいと思います。 ではまたどこかで!

参考)

MAC Developer Library https://developer.apple.com/library/mac/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/Articles/Introduction.html#//apple_ref/doc/uid/TP40014508-CH111-SW1

・知らないうちにMacがシステム標準でJavaScriptで操作できるようになってた (JXA) http://qiita.com/zakuroishikuro/items/1b02378bf9e940602d87

・Javascrript for OSX Automation アドベントカレンダー http://takuya-1st.hatenablog.jp/entry/2014/12/01/000000