KeynoteをRubyから操作するkeynote-clientを作りました

2015.08.10 / ruby

唐突の約1年ぶりのエントリーになりますが、itunes-clientの親戚みたいなかんじのkeynote-clientを作ってみました。

これは何?

itunes-clientと同様、高レベル(のはず)なAPIでKeynoteを操作できます。たとえばこんなかんじ。

  require 'keynote-client'
  
  # インストール済のテーマ一覧を取得
  themes = Keynote::Theme.find_by(:all)
  
  # 特定の名前のテーマを取得
  theme = Keynote::Theme.find_by(name: 'cookpad').first
  
  # テーマを指定して新しいドキュメントを作成
  doc = Keynote::Document.new(theme: theme, file_path: '/path/to/slide_name.key')
  
  # 現状のスライド一覧
  doc.slides
  
  # 利用可能なマスタースライド一覧
  doc.master_slides
  
  # マスタースライドを指定して、新規スライドを追加
  doc.append_slide("タイトル & 箇条書き")
  
  # 保存
  doc.save
  

スライドを追加するあたりのAPIがかなり微妙なんですけど、Keynoteのマスタースライドを一意に指定する方法が名前しか無く、これも言語環境によって名前が同じドキュメントでも変わってしまうという、かなり辛い仕様なので対応方法が結構難しい感じです。頑張ればどうにかできそうか。。本当はシンボルを指定したい。

あとスライドはappendするとき、またはappendした後にタイトルや本文を更新できるようにすれば、シンプルなスライドであればひと通りの自動生成できそうかな。

背景

@k0kubunがLTのスライド作らずにスライドを作るツールを夜な夜な作ってるのを見てゲラゲラ笑ってたのですが、AppleScriptで疲弊してそうな印象が強かったので、itunes-clientの知見をどうにか活かせないかなーと思ったのと、JXAを一度使ってみたいなーと思ってたので、その練習がてらがっと書いてみました。

JXA、謎仕様が依然多いですが、少なくともAppleScriptよりだいぶ書きやすいので、感覚つかむまでの速度はだいぶ速くいけました。md2keyもJXAに切り替えちゃってもいい気もしますね。。

今後

スライドのタイトル、本文くらはいじれるようになると実用段階になると思うので、そうしたらmd2keyの下地をいい感じにしてあげられないかなーと企んでます。まだまだ実装雑なので、PRもお待ちしています!