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でrubyとJavaをブリッジしてしまえばよい。
JNI
Java Native Interface JVM上で動くコードでネイティブコードで連携するためのインタフェース仕様
このブリッジを実装したgemがあるので使う。
require 'rjb' out = Rjb::import('java.lang.System').out out.println('jarh')
こんな感じでかける。 これでRailsアプリのモデルや何かの資産を活用しつつ、Officeファイルを操作できる。
注意すべき点
RJBはメインスレッド以外のスレッドでの動作はサポートしていない。 うっかりSidekiqのworkerとかで処理しようとするとうまく動かなかったりする。 ジョブキューを使う場合はシングルスレッドで動かすとか、マルチプロセスモデルのものを使うとかしよう。