@skylokenの技術ブログ

はじめに

Qrunchの初投稿です。
ここならQiitaに投稿する感覚でパーソナルな記事を書けると思ったため、ブログを開設することにしました。
本当に目の付け所が良い、素晴らしいサービスだと思います。

作ったサービス

techshelf (テックシェルフ)

技術書のレビューサービスです。
読みたい技術書をマークしたり、読んだ技術書をレビューすることができます。
サービス名は「技術(tech)」+「本棚(bookshelf)」みたいな感じです。
コードはGitHubに公開しています。

なぜ作った?

技術書をレビューするメジャーなサービスってそういえば無いなぁ、と思ったので作りました。
技術書のレビュー手段は以下のような感じだと思いますが、それぞれ思うところがありました。

  • AmazonのようなECサイトにレビューを書く
    • パーソナルな読書記録を残したいので、なんか違う...
  • ブログで書評の記事を書く
    • 長文でしっかり書かないといけない使命感から、なんか手軽に書けない...
    • 個人ブログは孤独感があるので、モチベーションが続きにくい...
  • 読書メーターのような本に特化したサービス
    • 小説やコミックがメインだと思うので、もっと技術書に特化したサービスがほしい...

そこで、もっと気軽にレビューができて、ユーザ同士のコミュケーションもしやすい技術書レビューサービスを作ることにしました。
参考にしたのは、個人的に普段からよく使っているFilmarksという映画レビューサービスです。ここは本当によく出来ていて、まさにこれの技術書版が作りたいと思い、がっつり参考にすることにしました。

技術スタック

  • Backend
    • Python
    • Django
    • SQLite (develop)
    • Postgre (production)
  • Frontend
    • HTML/CSS
    • jQuery
    • UIkit 3
  • Deployment
    • Heroku
    • Google Cloud Storage (静的ファイル配信)

ありきたりな構成です。
Djangoは開発しやすいので大好きです。
UIkitはデザインが良いので、そのまま使っても良い感じです。
Herokuは無料プランあるので好きです。

本データ

本データの取得はGoogle Books APIを使っています。一番手軽に使えて、種類も多いということで使うことにしました。
今の所、本を最初からある程度追加しておくのではなく、ユーザがその都度ISBNを入力して追加していく方式にしています(サボり)。
また、こんな仕様のため現在はまだGoogleブックスにある本しかレビューすることができません...。他の本APIに対応したり、手動で本を追加できる機能も必要だと思っています。

開発状況

開発は3ヶ月前くらいからちまちまやってたという感じです。
しばらくコミットしてない期間もありましたが、レスポンシブ対応とか非同期処理とかでUI/UXに無駄に凝ったりしていたら割と時間かかっていました。
とりあえずサービスとして機能しそうな最低限の実装は終えたので、一区切りということで記事にしてみたという温度感です。
しかし、ユーザ同士のSNS機能はまだ「コメント」や「いいね」くらいしか無かったり、ページネーションが無かったり、他にも細かい機能が無かったりするので、まだまだ未完成です。
実装予定の機能はGitHubのissueにメモったりしています。
やる気があるときにちまちまやろうと思います。

ちょっと思ったこと

レビューサービスを作るとWebアプリ開発の基本をちょうどよく押さえられる、ということを何となく思いました。理由として、チュートリアルに出てくるようなものは割とフル活用できたり、機能を実装しているうちにチュートリアル以上のことにも自然と手を広げられるからです。
ですので、

  • Webアプリ開発初学者の方
  • とりあえずチュートリアルは終わらせた
  • 具体的なアイデアはないけど何か作りたい

という方は、レビューサービスを題材にするのは結構おすすめです。

これからしたいこと

今回はピュアなDjangoとしてWebアプリを作りましたが、やはり昔ながらのテンプレートエンジンベースのやり方ではUIの構築が面倒だと感じる箇所もありました。例えば、レビューを表示するカードは複数のページで使っているので、コピペを多用する必要があり、結果的にUIがDRYにならないことなどです。また、いいね機能やマーク機能は状態を持つので、jQueryで直接DOMを操作するのは後々面倒になっていきます。
そのため、次Webアプリを作るときは、FEはReactなどのコンポーネントベースのフレームワークを使ってUI構築をし、BEはDjangoでREST APIを提供するような構成にしたいと思っています。

最後に

ポートフォリオとしてDjangoの勉強がてら作ってみたという感じなので、本格的に運用とかはあまり考えてないです。その証拠に、ドメインすらまだ取得してないです。
まだまだ未完成ですが、一応サービスとして使えなくはないので、興味のある方は是非使ってみてください。コメントなどもお待ちしております。

この記事へのコメント

まだコメントはありません