Qiita APIを使ったQiitaのストック管理サービスを作った

#Cusqs
Qiita API V2を使ったQiitaのストックをカテゴライズやストックからのタグ検索など、ストック管理するサービス**[Cusqs](https://cusqs.com)**を作りました。
** 追記 **
現在このサービスは閉鎖しました。
** 追記終わり **

![スクリーンショット 2016-07-07 12.07.14.png](https://qiita-image-store.s3.amazonaws.com/0/31292/47cac3e8-bde3-153c-7527-db45ae319af0.png)


##背景

この記事はいい記事だから開発するときにまた見るしストックしといた方がいいなとストックしたり、Twitterやらなんやらで流れてくるQiitaの記事を後で読んだほうがいいなとストックをしたり、どんどん溜めていってたわけですが、あとから見返すと150個を優に超えるストックが溜まっていったのに気ずいたときにはもう遅く、開発で使うGemの記事もストックから探すのも大変で普通にググって見つけたり、後で読もうと思ってた記事も見返す気にもなれず。
もったいないじゃないですか。ストックってめっちゃ便利なのに！

整理されてない情報ほど使いにくいものはないなー
ということで溜まるだけのストックを管理するため[Cusqs](https://cusqs.com/)を作りました。


##簡単な使い方
![スクリーンショット 2016-07-06 20.10.03.png](https://qiita-image-store.s3.amazonaws.com/0/31292/c444d2f6-096b-9123-1bda-8bbd34fe9212.png)

**注意**
~~Qiita認証後Cusqsにcallback時にストックの反映をするため10数秒かかります。~~
~~リロードなどせずお待ちくださいm(_ _)m~~
delayed_jobでストックの更新処理をバックグランドのworkerに移したので、スムーズに画面遷移できるかと思います。
画面遷移後10秒後ぐらいにリロードしてもらうと反映されます！

・各記事を押せばQiitaに飛び、記事を閲覧できます。

・右下のチェックマークを押してストックを選択し移動先のカテゴリを選択すればストックを任意のカテゴリにカテゴライズすることができます。
・この時削除を選択することでストックを解除することができます。
※Cusqsで削除されたストックはQiita上のストックも解除されます。

・カテゴリの作成をすることで新しいカテゴリを追加することができます。
カテゴリを言語や技術ごとに作成することでストックをカテゴリ毎に作成することができます。

・最初のログイン時にストックはデフォルトカテゴリの「未分類」にカテゴライズされます。

・マイページでデフォルトカテゴリを設定することでQiitaからCusqsに新規で登録されるストックのカテゴリを事前に決めることができます。
デフォルトカテゴリのデフォルトはサインアップ時に作られる「未分類」になります。


##つらかったところ
開発当初はAWSで運用するつもりだったのもありDBはMySQLを使ってたんですが、金銭的にいろいろ恐い話を聞いてビビったのとインフラの運用で時間取られたくなかったので、スケールから何から簡単&便利なHerokuでの運用に変更したわけです。
が、HerokuもClearDBのアドオン使えばMySQL使えないことはないんだが、有料プランにしたときの予想上限ユーザー数がmysqlの場合4200人弱だったのに対しデフォルトのpostgresqlだと20,000人だったのでposgreしかないなと思い、mysqlではエラー起きたなかったmigrationをpostgre仕様にしたのはまぁまぁつらかったかなと思う。

**金銭面的につらくなりそうだったところ**
SSL導入のためにHerokuのaddonで$20/month払うのがもったいなすぎたので、
AWS EC2にルートドメイン設定して、Nginx入れてリバースプロキシとして一枚かませて、
ルートドメイン設定したEC2にSSL設定して$20払うのを回避してます。
これについては[この記事](http://qiita.com/arc680/items/efc9b2ad5545717a739f)とか参考になります。

SSLには話題の**Let's Encrypt**を使ったのだが、
EC2をリバースプロキシとしてHerokuのRailsアプリに繋げた時のやり方がちょっと面倒くさかったのと、
この場合のやり方の記事がほぼなかったので、それも今度まとめようかと思う。
[この記事](http://qiita.com/kon_yu/items/4fba3365f548407908f0) と[この記事](http://qiita.com/tappie/items/e210c646ba10974f9604)を参考に他の記事読み漁ってやった。
特に[2個目の記事](http://qiita.com/tappie/items/e210c646ba10974f9604)はすごい便利でawsやvpsのnginxをリバースプロキシとしてしか使ってない人はルートパスやらルートディレクトリがないから証明書発行するのがすごい面倒くさいのだがこの記事の[SSLなう！](https://sslnow.ml/)でブラウザで証明書を発行できるので、これを使えば問題なくクリアできるのでオススメ。


まぁ、後は別につらくなかったけど、
Qiita APIで認証したユーザーのストックを取得しようとすると20件ごとしか取得できなくてちょっとめんどくさかった。


##今後の実装と課題
課題としては本当にストックを最新の状態にする処理が本当に重いんでここをどうにかしたい。
ここ以外はスムーズに使えるはずなのでご容赦くださいm(_ _)m
今後ストレスなく使えるようにしていきます！


今後の機能の実装としては


- すべてのストックで20件以上のストックを表示できるようにする
- 指定したタグのストックを一斉にカテゴリの変更できるようにする
- ログイン時とストックの更新のときの最新のストック状態をQiitaから取ってくる処理がめちゃくちゃ重いから[delayed_job](https://github.com/collectiveidea/delayed_job)を使ってバックグラウンド処理にするのと、ここのコードをもっと早するべく**リファクタしたい！！**

2016/7/9 14:24 追記
delayed_jobを導入して処理自体をバックグランドのworkerにやらせることで画面遷移をスムーズにできたかと思います。


とか実装したい機能はまだまだある。
**こういう機能がほしいとかあればコメントお願いします！！**


##まとめ

Cusqsの開発が終わってからリリースするまでの間もwebサービスを数個作ったんですが、自分が使ったり好きだったり情熱が注げないとなかなか継続的な開発にならないなーと。
Cusqsに関しては開発途中の時からCusqsの開発で使ってるGemやらの記事をCusqsで管理・検索して使ってました。
これの前にリリースした[HandOver](http://www.handoverto.me)というサービスは当初は自分が使う為開発に力を入れてましたが、リリース直後あたりでは自分が全く使わなくなり、他のサービスを作り始めたり受託をしたりしてました(笑)
HandOverは今ではHerokuの無料プランに落ちてますw

Qiitaは本当に便利でQiitaのおかげでいろいろな知見が溜まり、開発がしやすくなってます。
そして[Cusqs](https://cusqs.com)を使えばもっと開発プロセスがシンプルになり、ググる時間などの短縮にもなりますよー
使ってみれば絶対便利なんで一度でいいんで使ってみてくださいw

ということで
**Qiita最高！**
**Qiitaいつもありがとう！**