macOS のカレンダー(Calendar, 旧称 iCal)をコマンドラインで触るためのツールです。CSV ファイルを取り込んで、Calendar に同期させることができます。
まずは、ソースコードを丸ごと自分の環境にコピーするなり、git clone するなりしてください。そのあとはお好みの方法でインストールして下さい。
$ swift build -c release
$ cp .build/release/iCalTool ~/bin
~/bin
の部分は適当にパスの通っているディレクトリに直して下さい。
Swift Package Manager で xcodeproj を生成する必要があります。
$ swift package generate-xcodeproj
iCalTool.xcodeproj
が生成されますので、あとは、Xcode もしくは xcodebuild でビルドして下さい。
なお、iCalTool.xcodeproj
を生成した直後は、ターゲットが iOS などになっている場合があります。この時は、My Mac をターゲットに設定し直して下さい。
引数なしで起動すると、以下のように簡単な usage を表示します。
$ iCalTool
iCalTool 1.0.5
The macOS Calendar manipulation tool
Usage: iCalTool [Flag] <Subcommand> ...
Flags:
-v Enable verbose output
-s Enable silent output
-h Print help message
Subcommands:
list[n|i] [calendar-name [start-date [end-date]]]
add [csv-file|-]
sync (csv-file|-) [start-date [end-date]]
diff (csv-file|-) [start-date [end-date]]
desc[n] [uuid]...
delete [uuid]...
help
サブコマンドの add
, sync
, delete
は、あなたのカレンダーの内容を変更しますので、注意してお使いください。
指定したカレンダーを CSV 形式で出力します。ただし、エンコーディングは UTF-8 で出力されますので、出力を保存したファイルを EXCEL で開きたい場合には、適切なツール(nkf
など)で Shift JIS に変換してからファイルに保存した方が良いでしょう。
カレンダーとして "" もしくは "." を指定すると、macOS のカレンダーアプリのデフォールトカレンダーを指定したことになります。ただ、なぜかそうならないこともあり、原因は不明です。
start-date
と end-date
で出力する期間を指定することができます。指定可能なフォーマットは yyyy/MM/dd[ HH:mm[:ss]]
です。
list
の代わりに listn
とするとノートも出力されます。 listi
とすると UUID のみが出力されます。
引数に何も指定しない場合には、カレンダーの一覧が出力されます。
指定した UUID のイベントの内容を CSV 形式で出力します。
カレンダーの UUID が指定された場合には、カレンダー名が出力されます。
desc
の代わりに descn
とするとノートも出力されます。
指定した UUID のイベントをカレンダーから削除します。
csv-file
に記述されたイベントをカレンダーに追加します。イベントに指定されたカレンダーが存在しない時にはエラーになりますので、事前に macOS のカレンダーアプリでカレンダーを追加しておいてください。
ファイルのフォーマットは以下の CSV 形式です。個人的に Windows 環境からカレンダーデータを持ってくることが多いため、ファイルのエンコーディングは Shift JIS になっています。 次のバージョンではフォーマット周りはコンフィグ可能にしたいと思います。
"表示名","件名","開始日時","終了日時","終日","場所",,,,,"ノート"
各カラムは macOS の以下の項目にマッピングされます。「なし」は対応する項目がないことを意味します。
calendar,title,startDate,endDate,isAllDay,location,なし,なし,なし,なし,notes
つまり、"表示名"
が macOS でのカレンダー名になります。なお、"" で囲まなくても正しく処理されますので、CSV ファイルを EXCEL で読み込んで、再度 CSV で書き込んでも大丈夫なはずです。行末は "\n" のみでも "\r\n" でも大丈夫なはずです。
ファイル名として -
を指定すると、標準入力から読み込まれます。主な使い途としては、
$ nkf -s *.csv | iCalTool add -
というところです。
start-date
と end-date
の間のカレンダーを csv-file
の内容で置き換えます。この時、全く同じ内容のイベントの UUID は変更されませんが、イベントのノートを含め、少しでも変更があれば、新たな UUID に付け替えられます。
ファイルのフォーマットは CSV 形式で add
サブコマンドと同じです。ファイルのエンコーディングは Shift JIS です。
start-date
や end-date
が指定されない場合には、csv-file
の中身をスキャンして、最も早くから始まるイベントの開始日時を start-date
、最も遅く終了するイベントの終了日時を end-date
とします。
ファイル名として -
を指定すると、標準入力から読み込まれます。
start-date
と end-date
の間のカレンダーと csv-file
の内容を比較します。sync
の dry run 相当です。
本ソフトウェアは as-is での公開となります。バグ等により macOS 上のカレンダーが壊れることがありますが、それに対する責任は負いません。壊れても良い環境でご利用ください。
本ソフトウェアの開発とテストは macOS Mojave (10.14.6) + Swift 5.0.1/5.1 で行なっています。
著者: Satoshi Moriai https://github.com/moriai バージョン: 1.0.5 (2019/8/30)