PowerPointの資料生成をRubyで書きたい

資料作成自動化業務ってありますよね。 Googleスライドとか使えばいいのに、ビジネスサイドの理由とかでPowerPointじゃなきゃ嫌だって言われたり、 Railsアプリとして操作したいのにいい感じにPowerPointファイルを扱うgemがなかったりします。

今回はApache POIを使ったをさっと書く。

Apache POI

Apache POI(アパッチ・ポイまたはピーオーアイ)はApacheソフトウェア財団のプロジェクトで、WordやExcelといったMicrosoft Office形式のファイルを読み書きできる100% Javaライブラリとして提供されている。

そういうことなので、これを使えば詰むことはなさそう。

Apache POI - the Java API for Microsoft Documents サンプルコードとかたくさんある。

あとはJNIでrubyJavaをブリッジしてしまえばよい。

JNI

Java Native Interface JVM上で動くコードでネイティブコードで連携するためのインタフェース仕様

f:id:anoChick:20170817121239g:plain

http://rjb.rubyforge.org/

このブリッジを実装したgemがあるので使う。

require 'rjb'
out = Rjb::import('java.lang.System').out
out.println('jarh')

こんな感じでかける。 これでRailsアプリのモデルや何かの資産を活用しつつ、Officeファイルを操作できる。

注意すべき点

RJBはメインスレッド以外のスレッドでの動作はサポートしていない。 うっかりSidekiqのworkerとかで処理しようとするとうまく動かなかったりする。 ジョブキューを使う場合はシングルスレッドで動かすとか、マルチプロセスモデルのものを使うとかしよう。