2016年3月28日月曜日

初めて一人でWebサービスを作った手順をまとめてみた(3)

自分でゼロから立ち上げたWebサービスの作り方を振り返り中。
フロントエンドがざっくり出来て、なんだ割と簡単にできそうじゃん、って思ったのも束の間、バックエンドで大いにハマりました。
その一部をご紹介。

前回までの記事はこちら。
初めて一人でWebサービスを作った手順をまとめてみた(1)
初めて一人でWebサービスを作った手順をまとめてみた(2)

7. ImageMagickでハマる


PDFをアップロードしてJPGにして、それをユーザーが閲覧できる、みたいなシステムを組みたかったので、そういうのができるツールがないか探し回って見つけたのがこれ。
ググってもすぐヒットして、インストールも楽そう。なので、これでいってみよう!と気軽に試してみました。

やりたかったのは、以下のようなこと。


  • アップロードファイルのPDFを1ページずつにバラして、JPG(or PNG)保存(指定サイズにリサイズ)
  • 同じタイミングで最初の1ページを切り出して、DBにサムネイルとして保存
  • 上記の処理をコマンドラインではなくPythonから操作したかった
やりたいことは至極単純でした。
ImageMagickは遅い、みたいな記事もググったら出てきたけど、あんまり重い処理も無いし大丈夫だろう、と思って早速インストール。してみたら、インストールから躓きました。。
どうも、ググって出てきた記事の内容が古いのか、そのままやっても動かない。何日かかけてようやく動く方法を見つけて、インストール。
で、PythonからもWandというパッケージがあって、そちらから操作できるらしいのでそっちもインストール。それは簡単に出来たけど、問題は動きの方。
やりたかったことの1点目は、何度やっても2ページ目以降のリサイズがうまくいかない。1ページ目だけは指定したサイズになるけど、それ以外は元々のサイズのまま。QAサイトとかでも聞いてみたけどできないので、仕方なくPythonからコマンドライン動かして直接ImageMagick動かして回避。

やりたいことの2点目はWandのままでできたけど、一連の処理がとにかく遅い。これは今もそのままになってて、改善予定のトップにあります。Wandのせいかはわからないけど、時間とか計測していった感じ、ここなのかなと。
結局、やりたいことが完全には実現できなかった上に、情報も少なくてかなり時間がかかった。。

8. Twitterログインでハマる


当初は、自前のログインシステムではなく、Twitterアカウントでログインする形式を考えてました。https対応とかやったことなかったし、正直ちょっと興味もあったし。
以前ドットインストールでPHPのレッスン見て、いけそうだなって思ったのでやってみました。

ところが、PHPとPythonなので、使用するライブラリが違って結局いろいろ調べる羽目に。
結局ググれば見つかるんだけど、どれがベストプラクティスなのかわからなかったし、エラーが出るたびにググってた上に、自分が使ってたBottleというフレームワークはデフォルトではセッション管理機能を持ってないので、その対応に追われたりして意外と時間がかかりました。。
ただ、実装自体はそこまで苦労はしなかった印象。

9. 自前ログイン機能の構築でハマる


前項で、Twitterログインはできたんですが、悩んでました。
誰が作ったかわかんないWebアプリと、Twitterを連携させたい人なんているのか?と。
実際、私も信用できるかわからないサイトはソーシャル連携させないで、メールアドレスでユーザー登録してるし。
怪我の功名とでもいうのか、開発がずるずる長引いてる間に昨年12月頃かな?Let's Encryptというサイトで無料のSSL証明書を発行してくれるようになったので、これ幸いとばかりに申請。
その構築はググればできたんですが、今度は一度はスコープから外した自前ログイン機能が復活したので、設計・実装・テストと一通り工数がかさみました。

最終的には何とかなったので良かったです。
やっぱ嫌ですよね、Twitterアカウント使うの。。
一応Twitterログインの機能は残してるので、後々何かに活かしていければと思っています。

10. mod_wsgiでハマる


他の言語やってる方には何のこっちゃだと思いますが、PythonでWebアプリ作るときの定番みたいです。サーバーにインストールして、Apacheのコンフィグ追加して、アプリケーションもそれに対応してちょっと書き換えて…みたいな感じ。
これもググれば何とかなったんですが、Bottleをmod_wsgiで動かす方法がわからないとか、ソースコード書き換えても反映されなくなるとか(gulpを使って回避しました)、いろいろハマりポイントが…


ハマったポイントは他にもsendmail周りとかいろいろあるし、ほとんどの原因が経験値不足だったので、一度ハマるたびに調べて試して身に付けて、とやってたので、面白いようにスケジュールがずれこんでいきました。
でもここまで対応したらもうだいたい動くようになってきたので、リリースを意識し始めた感じです。

続く。
次回くらいで振り返りも完結しそうな気がします。