これは何?
kaakaa/ppt-museum: ppt/pptx file uploader
docker-compose up -d
だけで起動する PowerPoint 資料アップローダを作っています。
トップ画面
スライド画面
使い方
必須環境
- docker
- docker-compose
実行コマンド
$ git clone https://github.com/kaakaa/ppt-museum.git
$ cd ppt-museum
// docker v1.10.0+ / docker-compose v1.6.0+ の場合
$ docker-compose up -d
// 上記のバージョン以外の場合
$ docker-compose -f docker-compose-v1.yml up -d
http://localhost:4567/
にアクセスするとトップページが表示されます。
内部構造
アーキテクチャ
4 つの Docker コンテナを起動しています。
- nginx
- mongo
- jodconverter
- => kaakaa/jodconverter-container: Dockerfile for JODConverter
- PowerPoint ファイルを PDF ファイルに変換するコンテナ
- ppt-museum-web
- => kaakaa/ppt-museum-webapp: Webapp for ppt-museum
- Java のマイクロフレームワーク Spark Framework - A tiny Java web framework ベースの Web アプリコンテナ
既知の問題
- DB 構造が変わったときのマイグレーションパスを用意していない
- アップロード資産を Zip ダウンロードして、kaakaa/ppt-batchでアップロードし直すという最底辺の人力運用でカバーの現状
- UI 周りが要改善
- フロントエンド力が圧倒的に足りない
- テストコードを全然書いていない
他にもたくさんありますが。。。
背景
以降は蛇足ですが、これを作ろうと思った背景について。
社内勉強会の資料をアップロードするために作りました。
社内勉強会の資料には、社外 NG の話が含まれていたり、「外に公開するほどの…」という方もいたりするので、そういう資料を個人で貯めこむことの無いようにと作りました。また、勉強会開始当初は勉強会用に立ててる Wiki に資料を添付するという運用を取っていましたが、Wiki に添付された資料をわざわざダウンロードして開くことなんて無いので、閲覧機会の損失を防ぎたかったという想いもあります。
その昔にkaakaa/pptgalleryを作って今まで運用していました。 しかし、コレには
- LibreOffice / ImageMagick などのミドルに依存しており、二度と環境が作れる気がしない
- ruby / js を手探りで組んでいたのでメンテできる気がしない
などの辛い面が多くあったため、匙を投げることにしました。 そして作りなおしたのが kaakaa/ppt-museum です。
kaakaa/pptgalleryの反省から
- 環境はどこでも立てられるように docker-compose を使う
- ruby/js に夢を見るのをやめて、メンテする気になれるよう一番慣れている Java で書く
という方針で作っています。
また、作りなおそうと思ったきっかけとなったのが、azu/pdf.js-controllerを見つけたことでした。スライド表示部分ではazu/pdf.js-controllerをそのまま使っています。
PPTGallery の頃にも、PowerPoint ファイルをJODConverter | Art of Solvingで PDF ファイルに変換することはできていましたが、その PDF ファイルをスライド形式で表示する方法が分からず、ImageMagick を使って画像ファイルに変換したものを表示するという茨の道を選択してしまいました。
azu/pdf.js-controllerにより、PowerPoint ファイルを PDF ファイルに変換するところまでを考えれば良くなったため、Javascript 方面へ深く足を踏み入れなくて済みました。
おわりに
docker を使って開発してみるのは初めてでしたが、一度動かせればインフラを簡単に立て たり壊したりできるので、アプリを書くことに集中できるようになっていると思います。
これを作る時に試した、Gradle を使った npm/grunt ビルドや、Docker イメージの作成について、下記にまとめています。 Gradle で bower を利用したフロントエンドのビルドまでを行う方法 (1/6) - Qiita