個人開発｜読書をハックする。技術書ランキング&読書メーターサイトを作りました

何かインプットする際に技術書を読んで体系的に学ぶ、ということが以前より増えてきたので、自分が欲しいと思うサービスを作りました。

[技術書ランキングと読書メーター｜Book Hack](https://bookhack.org/)

[![技術書ランキングと読書メーター｜Book Hack](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113133/dae73872-9b7a-efb1-4d40-32a2ef2698cb.png)](https://bookhack.org/)

# どんなサービスか（エレベーターピッチ的に）

- **良い技術書から効率的に学習を**したい
- **エンジニア**向けの、
- **[Book Hack](https://bookhack.org/)**というプロダクトは、
- **技術書ランキング&読書メーターサイト**です。
- これは**エンジニアに紹介されている良書を見つける**ことができ、
- **Qiitaに加えてはてなブログで紹介された回数もカウントし、読んだ履歴や読みたい本を記録する仕組み**が備わっている。

正直「QiitaのAPIを使ってエンジニアに紹介される回数の多い技術書を探すことができるサービス」で言うと何番煎じだよという感じですが、個人的にこんな機能も欲しいというものがあったのでそれらを盛り込んでサービス化しました。

ちなみに既存の技術書ランキングサイトだと
[技術書ランキング | テック・ブック・ランク](https://www.techbookrank.com/)
[techbooks - 技術書籍のレビュー・ランキングサイト テックブックス](https://techbooks.jp/)
が有名です。QiitaAPIの使い方や見せ方はかなり参考にさせて頂きました。

# 工夫した点

### 読みたい本と読んだ本を記録

読みたいと思った本を読みたいリストに追加したり、読んだ本を記録しておけるようにしました。
読んだ本は、気が向けば同時にレビューコメントを残すことができます。

![FireShot Capture 006 - mtitg｜Book Hack - bookhack.org.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113133/f8594e33-116c-41e1-93de-f88d340166ef.png)

### 最近のアクティビティやランキングを表示

最近本を読んだユーザーやよく本を読んでいるユーザーは、トップページで表示するようにしています。
「最近の読んだ」は一定数を超える文字数のレビュー付きで読んだ記録を付けた方が表示されます。
「ユーザーランキング」はスコアを元に変動する作りで、スコアは本を読んだ際にレビューを書くことと、レビューに対して「いいね」がつくことで加算されます。

<img width="315" alt="スクリーンショット 2019-07-21 14.12.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113133/ecb08572-fe84-16d0-f44e-dd1856b8784b.png">

### Qiitaに加えてはてなブログでの技術書紹介記事を活用

Qiitaに加え、はてなブログでエンジニアに紹介されたかどうかも活用しています。具体的には、

- Qiitaの記事内で紹介され、かついいねが多くついていると高いスコアになる
- はてなブログの記事内で紹介され、かつスターが多くついていると高いスコアになる

というロジックになっています。
さらに、特にQiitaだと記事がバズっていいねがかなり多くつくということがあるので、対数計算とかをごにょごにょすることで、いいねが多すぎてもそこまでスコアに影響しないように調整しています。

### 検索キーワード入力時のサジェスト

検索は

- タグ
- 本のタイトル

の２つから検索できるようにしてあり、基本的にタグからの検索を想定しています。
そのため、検索キーワードからタグを見つけられなかった場合のみ本のタイトルでの検索されます。

タグはQiitaのタグを流用していて、10,000種類以上あるため、キーワード入力時にサジェストを表示するようにしました。
こんな感じで動きます↓

![bookhack_suggest.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113133/2904c6dc-50c2-9f02-e93b-80f1f87d4ba3.gif)


### 複数のタグを使った検索

複数のタグで検索できるようにもしました。

例えば「画像認識」で検索したけど、Deeplearning全般に関してよく紹介されている本が上位に出てしまったので、「OpenCV」も検索対象のタグに追加することでより専門的な本を探す、みたいなことができるようにしてあります。
こんな感じです↓

![bookhack_multipletags.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113133/872c665f-1c94-fa6b-ed90-593e194a0814.gif)

# 技術スタック

- Python
- Django
- （生の）JavaScript
- ConoHaVPS
- Nginx
- Docker

真新しい技術は特につかっていません。
継続的に機能追加とかをしていきたいので、あまり新しい技術にトライしてしまうと少し経った後に触ろうとしても「あれ、これどうやって使うんだっけ？あかん」みたいなことになるのが怖いので、そこは保守的な進め方をしました。
なのでむしろ今後も運用しやすいように気をつけていて、例えばGithubにプッシュすると自動でデプロイする、みたいな部分は対応しています。

# 今後やりたいこと

### インプット自体が見える化・評価されるようにしたい

いろいろ見ていると

- 個人開発
- ポートフォリオ作成
- 技術ブログ執筆
- イベント登壇  

などなど、アウトプットがエンジニアの評価につながることが多いなーと感じますが、インプットも同じように評価されてもいいんじゃないかと思っています。

個人的にWebの断片的な情報をもとに知識を得ることに加え、書籍からインプットをすることが以前と比べて増えました。
書籍はしっかり体系立って網羅的に書かれているので、足りない知識を吸収するには最高なんですが、けっこう時間かかるし心折れそうになります。なので、もっと書籍でのインプットそのものが見える化できて評価されるようになったら素敵だなと思うわけです。

今回は一応読書の量によってスコアリングできるようにしましたが、まだまだ見える化とまでは言えません。
今後はタイムラインに合わせてスコアが上がっている様子をチャートにしたり、GitHubのように草が生える様にしたいと思っています。

それで面接の時とかに
「Book HackでXXスコア取ってます！」
「めっちゃいいですね！」
みたいな会話になったら最高だなと。

---

良かったら是非使ってみてください。
もし何かお気づきの点があれば、コメントいただけると嬉しいです。

[技術書ランキングと読書メーター｜Book Hack](https://bookhack.org/)