蔵書管理リストアプリ
個人が所有する書籍を登録し、管理するためのアプリ
購入日・読了日の記録、シリーズ単位での分類ができる
タイトル、著者名、シリーズ名、出版社名などで検索できる
使用技術
バックエンド(フレームワーク):Java (Spring Boot)
フロントエンド:HTML/CSS、Bootstrap、JavaScript
RDBMS:MySQL
IDE:Eclipse
ソースコード:https://github.com/MasahiroOgata/PrivateLibraryList

制作や使用技術についての所感
・Spring Boot
Spring Bootは、クラスやメソッド、フィールドにアノテーションを付与することにより、さまざまな機能や情報を設定できるのが特徴で、アノテーションを見れば対象が持つ役割や意味を把握できることが開発のしやすさに繋がっていると思います。さらにバリデーション用などのアノテーションそのものを自作することもできるので、機能の追加についても柔軟に対応できます。
標準のテンプレートエンジンであるThymeleaf(タイムリーフ)が使いやすく、Servlet/JSPで使われるEL式によく似た記述ができます。個人的にHTMLに他言語のコードを埋め込む書き方が少し使いづらかったので、フロントエンドにJavaのコードをあまり書かなくていいSpring Bootは開発がしやすく感じました。
使用するデータベースに関して、フレームワーク経由で最初の設定をするのではなく、DBMS側で直接SQLを操作して必要なテーブルを作成する方法を採用しました。また、よく使われるO/RマッパーのMyBatisでは自分でSQLを書くことになるのですが、最初からフレームワークにマイグレーションなどをすべて任せてしまった場合よりも、かえってデータベースの構造や処理に関して理解を深めることができたと思います。
・苦労した点
このアプリでは、ログインユーザーが登録した内容は本人しか閲覧・編集できない仕様になっているため、起動中は頻繁にログインユーザーが誰なのかをアプリ側で確認する必要があるのですが、ログインユーザー情報を取得する処理を作るのに非常に手間取りました。
ユーザーのログイン情報を管理するSpringセキュリティの機能が、参考にした書籍の発行後に大きく変更になったこともあり、どこにどうアクセスすればログインユーザーの情報に行き着くのか、まるで見当がつかず、相当な時間をさまざまなサイトの検索に費やすことになりました。ちなみにThymeleafの拡張ライブラリを導入すると、フロントエンドでは簡単にログインユーザーの情報を表示できます。
多数のデータを一覧表示するときに、それを複数のページに分割するページネーションを導入するため、当初JavascriptのライブラリであるDataTablesの利用を試したのですが、同じような機能をバックエンド側の処理で実現しようとすると、非常に多くの手順を要することになり戸惑いました。特に、別のフレームワークであるDjangoでは、かなり簡単にページネーションを実装できたので、その落差が印象的でした。
・工夫した点
シリーズものを何巻まで読んだか(買ったか)を確認できるようにしたかったので、書籍をシリーズごとにまとめる機能を持たせました。さらにシリーズ本の一覧画面から直接新規に書籍を追加できるようにした他、同一シリーズでありながら途中から著者が変わるケースや、新装版が出版されて同じ巻数の本が存在するケースなどにも対応しています。
開発はすべてPCを使って行ったので、レスポンシブデザインへの対応は後回しになっていましたが、色々な人からもらったアイデアを参考に、Bootstrapを活用して、画面幅に応じた細かい表示内容を設定しています。
・今後の課題
書籍には、タイトル・著者・出版社以外にも、ジャンル・レーベル・書籍コード・紙媒体の判型・電子版のフォーマット・書影など、数多くの情報が付随しているので、ゆくゆくはそうした情報も扱えるようにできればと思います。ただし、そのためにはDBテーブルやモデルクラスに大規模な変更や追加が必要になると思うので、どのように整合性を保つのかが課題になってくると考えています。