Bryan

Bryan

twitter
medium

OmniFocus スクリプトを TypeScript で書く

OmniFocus 4 は間もなくリリースされます!私は長年にわたり、Todoist、TickTick、Things、Sorted など、市場に存在するほぼすべての TODO ソフトウェアを試しましたが、最終的には OmniFocus が私の最終的な選択肢となりました。そして、OmniFocus の強力さについて話すとき、彼の強力な自動化能力であるOmni Automationを挙げることができません。

Omni Automation は実際には JS スクリプトに基づいており、純粋な JS スクリプトの作成プロセスは... 言葉に尽くせません。Omni Automation 公式は TypeScript の定義ファイルを提供していますが、一方で型チェックをうまく行うことが難しく、また、その詳細度も改善の余地があります(長期間更新されず、any などが大量に使用されています)。さらに、パッケージングツールが不足しているため、コードロジックの再利用も非常に困難です(私は実際には Mac 版 OmniFocus のバグを利用して長い間ロジックの再利用を行っていました)。

OmniFocus 4 の登場を祝して、私は個人的に開発し使用しているソリューションをオープンソース化することにしました。パッケージスクリプトと型定義、そして私が使用しているいくつかのユーティリティ関数とスクリプトを含んでいます。これにより、より多くの人々が楽しく OmniFocus スクリプトを書くことができることを願っています。

使用方法

  1. このテンプレートを使用してリポジトリを作成します
  2. 作成したリポジトリをクローンします
  3. pnpm installを実行して依存関係をインストールします
  4. pnpm buildを実行してスクリプトをビルドします

スクリプトのソースコードはsrcディレクトリに配置され、(OmniFocus スクリプトで使用できる)コンパイル結果はdistディレクトリに配置されます。

スクリプトの作成

srcディレクトリ内の_で始まらない任意の TypeScript ファイルは、OmniFocus スクリプトと見なされてコンパイルされます(_で始まるスクリプトファイルはユーティリティ関数用に予約されています)。

任意のスクリプトは、次のパターンに従う必要があります:

export const action = new PlugIn.Action(function (selection) {
  // do anything you want
});

action.validate = function (selection) {
  // do anything you want
};

export const meta: Meta = {
  label: "...",
  description: "...",
  identifier: "...",
  author: "...",
  version: "0.1",
};

ここで:

  1. actionmetaは必須であり、action.validateはオプションです
  2. metaはスクリプトの最後の部分でなければなりません。それ以降には何も含めることはできません。

ビルドと使用

pnpm buildを実行すると、ビルドされたスクリプト(.omnifocusjsで終わる)がdistディレクトリに配置されます。

ビルドされたスクリプトを OmniFocus のスクリプトディレクトリに直接コピーするか、スクリプトを使用して同期することができます。

OmniFocus スクリプトを iCloud で保存している場合は、pnpm syncを使用してビルド済みのスクリプトを iCloud の OmniFocus スクリプトディレクトリに自動的に同期できます。iCloud を使用せずにカスタムパスを使用している場合は、sync.shファイルを変更してターゲットパスを変更できます。

End

このソリューションは私個人が 1 年以上使用していますが、オープンソースバージョンにはいくつかのエラーがある可能性があり、さらにカスタマイズのニーズがあるかもしれません。

リポジトリページに Issue や PR を投稿することを歓迎します!

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。