月別アーカイブ: 2022年9月

部屋を広くするための電子書籍自炊 (ScanSnap iX1600)

電子版を所持していない・そもそも電子版が存在していない大量の本を電子化して部屋を広くするために ScanSnap iX1600を導入しました。一つ下のiX1400とどちらにするか悩みましたが、PDF編集ソフト「Kofax Power PDF Standard」が含まれている事を考慮して上位モデルのiX1600にしました。結果的にはこれで正解でした。

ScanSnap ix1600

裁断

裁断用カッターはカール事務機の「DC-F5100」。カッターは枚数が切れるものほどサイズも大きいので家庭の事情に合わせて選びましょう。ただ、DC-F5100よりも対応する厚みが小さい物は作業が面倒になるので、これより上の範囲で選ぶ感じで。DC-F5100の対応する厚みとしては「一般的なA5同人誌が7割そのまま切れる」という感じです。それ以上のサイズはカッターで複数冊に分ける→裁断機で裁断→スキャンという流れになります。カッターで複数冊に分ける際はページを開いた状態で中央を切るようにします。

DC-F5100

その他にはスキャナ清掃用の無水エタノール、元々持っていたカッター、カッターマットを用意しています。これらも必須でそろえておきましょう。

スキャン設定

いくつか試しましたが一般的に言われている設定でOKでした。スキャンをする際は必ず糊が残ってまだくっついたままのページが無いかに注意しましょう。

ScanSnap Home 設定
プロファイル名: 適当に決める
カラーモード: カラー
読み取り面: 両面
画質: スーパーファイン
向き: 回転しない
ファイル形式: PDF

詳細設定
白紙ページを自動的に削除: 無効化
圧縮率: 中

フィード: 継続スキャン
フィードオプション: 現行サイズ自動検出を有効化

フィードを継続スキャンに設定しておくことで一度には読み込めないページ数のスキャンでも1つのPDFとして読み込み可能です。

本をばらした際にどうしても少し残る糊がScanSnap内部のスキャン部分を汚していくので、何冊かごとにスキャン面を無水エタノールを含ませたタオルで拭き取ります(無水エタノールは保証外なので本来は純正のクリーナーを使った方がいいです)。

PDFの表示設定調整

「右綴じ」や「表紙ページは単独でそれ以降が見開き表示」のPDFにする設定は添付の「Kofax Power PDF Standard」で可能です。ファイルメニューの中からアクセスします。

Kofax Power PDF Standardの設定
Kofax Power PDF Standardの設定

電子書籍自炊時のPDF編集で一番必要なのはこの2点の編集なので、サブスクリプションで費用の掛かるAdobe AcrobatではなくiX1600添付のKofax Power PDF Standardで十分に感じました。

使用感

今の所100冊ほどを電子化しており、まだまだ目標の半分も対応していない所では有りますが、使用感はなかなかいいです。ScanSnapと裁断機のサイズを合わせても本が詰まった段ボール箱1個分なので、既にそれより大きな体積を部屋から解消できています。また、本以外にも仕事や研修などで溜まった紙の書類も大幅に処分出来ました(先述のスキャン設定の片面読み取り版を作っておくといいです)。置いてはおきたいが場所を取っている紙の本が大量にある方はいかがでしょうか。


Amazon アソシエイト


Amazon アソシエイト

Laravel 9 + Vue 3で作る8割Laravelの知識で行けるSPA

LaravelにはVue.jsを使ったSPAでありながらルーティングやバリデーション処理などはLaravelのルーティングをそのまま利用して実装できる仕組みが有ります。この仕組みはVueフロントエンドとLaravelの間のやり取りをしてくれる 「Inertia.js」で実現されています。これを実際の社内プロダクトで利用して十分実用的でしたので紹介したいと思います。

  • ルーティング→Laravelの仕組みをそのまま利用できる。一部だけ要御調整(後述)。
  • バリデーションと結果のエラー表示→Laravelの仕組みをそのまま利用できる。各フォーム項目内容を集めてPOSTするようなコードを自分で書く必要は無く普通のHTMLフォームを描くだけで内部的にAjaxな通信になってくれます。
  • ビュー作成→Vueコンポーネントとして作成、コンパイルの仕組みなども用意してくれる。Bladeテンプレートエンジンで作るテンプレートはほぼ不要。
  • 必要なVueの知識: ルーティングなどVueを補助するツールに対する別のツールへの理解は不要。代わりにInertia.jsについての知識は要確認

Windows環境でのLaravel開発はWSL2で

Laravel自体がそうなのですが、Windows(というよりはNTFS?)ネイティブ環境での動作がファイルI/Oの関係から遅いです。これはWSL2 + Ubuntuを導入したうえでWSL2管理下のパスにプロジェクトを置いておくする事で高速になります。

PHPやMySQLサーバーなどをDockerコンテナでまとめて用意してくれる「Laravel Sail」で用意した場合はWSL2 + Ubuntu + Dockerという環境になりますが、この場合もプロジェクトは /home/<ユーザー名>/xxx などWSL2管理下に配置しておきましょう(/mnt/c/ など/mnt/経由でWindows管理下のパスにアクセスすると非常に遅くなります)。WSL管理下のパスに置いた場合でもPhpStorm等の開発ツールは問題なくプロジェクトを開く事が出来ます。

参考: https://readouble.com/laravel/9.x/ja/sail.html

Laravel BreezeでのInertia.jsの導入

LaravelにはTOPページ、ログインページ、登録ページ、ログイン後TOPページなどをまとめてさくっと作ってくれる「Larvel Breeze」という機能が有り、これにオプションを付け加える事で Laravel + Inertia.js の環境を作ってみる事が出来ます。Vueコンポーネントをコンパイルする仕組みも一緒に用意してくれるのでVueでのSPAを作った事が無い人でもVueをリアクティブなDOM操作ができるjQueryのようなポジションで利用していた人でも比較的簡単に実装可能です。

参考: https://readouble.com/laravel/9.x/ja/starter-kits.html#laravel-breeze

php artisan breeze:install
php artisan migrate
npm install
npm run dev

Inertia.jsが実際にどういう動きをするのか、どう使えばいいのかは Inertia.js 自体のドキュメントを見ると分かりやすいです。

参考: Inertia.js – The Modern Monolith

上記のドキュメントを確認しつつ、Laravel Breezeで作成された最小限のプロジェクトを参考リンクの情報と併せて見てみる事で全体のイメージがつかめるかと思います。

この時、CSSフレームワークはデフォルトでは Tailwind CSSが利用されています。Bootstrapなどとは大きく考え方が異なるCSSフレームワークですが、コンポーネント部品としてボタン、その他フォーム、ボックス、ヘッダなど部品を作っていく際に、コンポーネントを素早くスタイリングするのに最適化された使用感になっており、余裕が有れば合わせてTailwind CSSも試してみるといいかもしれません。

Tailwind CSS
→角丸にする、サイズはこう、レイアウトはこうといった見た目のスタイリングを高速に簡単に組み合わせていく事に特化したCSSフレームワーク。
→再利用性・共通化はコンポーネント化すること対応。フォームであれば form-control クラスを付けるBootstrapとは異なり、先に作成したフォーム「コンポーネント」を使っていく感じの使用感。

参考:

Tailwind CSS – Rapidly build modern websites without ever leaving your HTML.

単一ファイルコンポーネント | Vue.js

SFC <script setup> | Vue.js

エラー処理ハンドリング

適切にVue + Inertia.js側でエラー処理を行うためにLaravel側の例外ハンドラーの調整が必要です。以下を参考に対応します。

参考: https://inertiajs.com/error-handling

終わりに

これでLaravel + Inertia.js + Vue 3 でフロントエンドでVueコンポーネントで作られたビューを主体としたSPAをサクサク作っていく事が出来ます(作りました)。ご興味が有ればぜひ触ってみてネット上の情報を増やしていきましょう。