流れるような一日をタスク管理、ライフハック、司法書士(試験)、Evernote等がメインの個人総合ブログです。全体の流れ(1)ENScript.exeを使って、ノートタイトルを指定して新規ノートを作成(2)ENScript.exeを使って同期(この際、同期ログをテキストファイルに出力させる)(3)同期ログから、秀丸を用いてノートタイトルでgrep検索(4)ノート情報部分を切り貼りしてノートリンクに仕上げる既知の制限事項bluewind上で作業を繋げるbluewindとはどんなソフトか?bluewindにて各処理を実行するコマンドを作る(0)getText(1)createSingleNote(2)syncEvernoteLogOutput(3)getNoteTitleToClipboard(4)getSingleNoteLinkHidemaruMacroグループにまとめるこのスクリプトで何ができるのか?コマンドの引数にノートタイトルを指定してEvernoteに新規ノートを追加し、そのまま自動処理でノートリンクを取得する、というスクリプトみたいなものを作り上げてみました。インプットとアウトプットがこういう感じになります。インプットアウトプット「bluewind」(フリー)というコマンドラインランチャーソフト、その関連ソフトとして「getText」(フリー)、文字列の置換にテキストエディタ「秀丸」(シェアウェア)のマクロ機能を使っています。下記のはまラボへの寄稿記事にあるように、タスク管理ツールのタスクとEvernoteを紐付けて使っています。使用例こういうことをやっていると、タスクに関連する内容を入れていくための空のノートを作成し、すぐにノートリンクを取得してタスクにリンクさせておきたい、という要望が生まれます。直感的に手作業でこれを行うと、Windowsクライアント等で新規ノート追加、同期、(同期完了を待って)ノートリンク取得、という手順となるでしょう。非力なマシンだと、同期に時間もかかるし、いつ終わるかもわからず、ストレスの元になります。これをどうにかしてもっとスムーズな作業にしたかった。スクリプト自作のきっかけ数ヶ月前のことになりますが、とゆさん(@toyu3)と一緒にtwitter上でマロ。さん(@maro_draft)主催のワークをさせてもらった際、EvernoteのENScript.exeの使い方周りでたくさんのヒントをもらい、「一丁自前で作ってみるか」と思って挑戦を始め、この度ようやく出来上がったものです。さんのワークが無ければ、私単独ではまず実現できなかったことだと思います。toggl_to_TaskChuteにも毎日お世話になっていますし、マロ。さんには足を向けて寝られません。ありがとうございます。ノートリンクの構造ノートリンクの構造については、こちらの記事が大変分かり易いと思います。Tumblr.comこの記事からわかるように、ノートリンクは「アカウント情報+ノート情報」という構成になっています。アカウント情報は自分一人が使う場合には固定値ですので、個別のノートのノートリンクを取得するにはノート情報の部分だけ判れば良いということになります。個別のノートのリンクは、新規ノート作成直後にEvernoteの同期をすると、その同期のログの中に出てきます。それを秀丸のgrep検索を使って拾ってきて、アカウント情報と繋げてノートリンクを取得することができます。全体の流れやっていることはコマンドプロンプトからでも実行できる内容だと思いますが、実行時に便利なのでbluewindというコマンドラインランチャーソフトを使っています。(ノートタイトル)というコマンドで、ノートタイトルとノートの内容となるファイルを指定してノートを作ることができます。好みの分かれるところかもしれませんが、私はノートの1行目とノートタイトルを合わせた方がすっきりするので、下記のようなbatファイルを作りました。%1exitこのbatファイル実行時に、ノートタイトルを引数として渡すと、Evernoteに指定したノートタイトルのノートが出来上がります。(2)ENScript.exeを使って同期(この際、同期ログをテキストファイルに出力させる)ここでもENscript.exeを使います。C:\tmp\syncDatabase.logこれを実行すると、同期が行われて、そのlogがsyncDatabase.logに残ります。ここからノート情報を切り出します。(3)同期ログから、秀丸を用いてノートタイトルでgrep検索その同期ログの中に、下記のようにノートタイトルとノート情報が続いて出現する部分があります。ノートタイトルが出てくる行を探し、末尾の改行を削除、その後にノートタイトルを含む行だけをgrep検索で拾ってくる、ということをしています。(4)ノート情報部分を切り貼りしてノートリンクに仕上げるノート情報が得られたら、あとは前後の要らない部分を削り、アカウント情報をくっつけたり、ノート情報を繰り返したりすればノートリンクの完成です。実際には3.と4.は秀丸マクロにやらせています。現状は、秀丸マクロに外部から文字列をスマートに渡す方法がわからず、クリップボードを介して処理しています。ファイルから持ってくる、または引数として渡す、ということができればクリップボードの上書きが避けられると思うのですが、秀丸マクロのヘルプを見てもすぐにはわかりませんでした。クリップボードに読み込む方法としては、bluewindのgetTextという単機能を使っています(次回の記事でbluewind周りを説明するので、そこで具体的な内容を書きます。)同じ事をbatファイルを利用して実現することも可能だと思います。そんな感じですので、このマクロはとりあえず動くのですが自分でもよくわかっていない処理もあったりします。切り貼りと試行錯誤だらけで、きれいなものではありませんが載せてしまいます。「ノートリンク化」の最後の方に出てくる「(アカウント情報)」については、自分のノートリンクを確認して、自分のアカウント情報に置き換えて下さい。秀丸マクロにキーワードを取り込む際に、クリップボードを経由しているため、クリップボードが上書きされる。ノートタイトルに記号が入ると、途中で文字列が切れたり、最後まで動かなかったりすることがある。bluewind上で作業を繋げるbluewindとはどんなソフトか?一言で表現すると「コマンドライン型ランチャーソフト」ご存じない方には、とゆさんの記事がわかりやすいと思います。]例えば、「Evernote」というキーワードでEvernoteアプリを登録しておけば、ショートカットキーでbluewindを呼び出してbluewindの窓に「ev」と打ち込みEnterという少ない手間でEvernoteアプリが起動する、という痒いところに手の届くランチャーです。自分がよく使うアプリや、アプリ以外にもEvernoteのノート等をいくらでも自分の好きなキーワードで登録できます。使わない時には邪魔にならない。手放せないツールの一つです。bluewindにて各処理を実行するコマンドを作るまず、bluewindで新規コマンド登録をする際の、私のデフォルト設定を示しておきます。いじってなかったと思うので、新規インストールされたままなら同じ設定がデフォルトになっていると思いますが、念のため。以降、この設定から変更が必要な部分についてのみ記載します。見出し部分の(数字)より後の部分がbluewindの「キーワード」になっています。下記の「(0)getText」で言うところの「getText」部分。(0)getTextまず、ファイルからクリップボードへ文字列を取り込むためのツールを用意します。上記リンクの下の方に「クリップボード関連」「テキスト取得」の「gettext.zip(220KB)」をダウンロードして、適切な場所に展開します(私の場合はbluewindを置いているフォルダの近くに置いています)。いうキーワードで登録します。これをやっておくと、bluewind内においては「getText.exe」を呼び出すのに「getText」というキーワードを指定すれば済むようになります。いうキーワードで登録する手順は不要です。(1)createSingleNoteリンク先:C:\Shared\Dropbox\Apps\bluewind_共通\bat\createSingleNote.batパラメータ:(無し)起動したプログラムが終了するまで待つ:オンこれは、「(1)ENScript.exeを使って、ノートタイトルを指定して新規ノートを作成」で作ったbatファイルです。C:\tmp\syncDatabase.log起動したプログラムが終了するまで待つ:オン「getSingleNoteLink.MAC」が、「(4)ノート情報部分を切り貼りしてノートリンクに仕上げる」の秀丸マクロです。秀丸の「マクロファイル用のフォルダ」に置きます。グループにまとめるbluewindには「グループ機能」があり、複数のコマンドを順に実行させることが簡単にできます。]上記のコマンド達を順に実行させるため、createNoteGetLinkというグループを作り、上記2.のコマンド達を(1)~(4)の順に並べ、グループの設定を下記のようにします。(0)はグループに入れる必要はありません。「入力時のパラメータにキーワードを使う」はオフ「ワイルドカードを展開して渡す」はオフこうしておいた方が、ノートタイトルに予期せずキーワードやワイルドカードを使ってしまった際にも正常動作を期待しやすくなるのではないかと思っています。ちなみに、元々オフになっている「全てのコマンドに同じパラメータを渡す」をオンにしてしまうと、syncEvernoteLogOutputが動かなくなったりします。