hishidaの開発blog

EBシリーズ(EBPocket,EBWin,EBMac,EBStudio),KWIC Finder,xdoc2txt,読書尚友の開発者ブログ

読書尚友 引き続き改良

引き続き、読書尚友の改良を続けている。

メモ機能

要望が多かった機能だが、メモを記入できるようにした。範囲指定してメモボタンを押すとメモの入力ができ、下線とメモマークが表示される。メモは目次のしおり画面に追加され、共有でメモの内容を他のアプリに受け渡しできる。

メモ機能

ePubのスワイプによるファイル移動

前回ePubの一括読み込みを追加したが、一括読み込みがオフの場合、前後のファイルへの移動をタップだけではなくスワイプでもできるようにした。これで一括読み込みにしなくても、自然なページ移動ができるようになった。

複数のテキストファイルをzipで固めたファイルでも、同様にスワイプで前後のファイルに移動できるようになった。

foldable端末での段組表示

読書尚友では、横向き画面の時に段組表示する機能があるが、foldable端末のようにスクエアに近いアスペクト比だと、横向きと判定されない場合があった。スクエアの場合は横向きと判定して段組を有効にした。

foldable端末で読書するのが夢だが、高価で手が届かないので、Android Studio のエミュレータで実行したスクリーンショットをお見せしたい。

折り目の部分に空白行が入るのがミソである。

横書きの段組

縦書きの段組

 

 

読書尚友 3.0

読書尚友について、 ePubと本棚、RARの改良が一段落したため、メジャーバージョンを上げて3.0として公開した。

RAR5 対応

RAR5はWinRAR5.0以降の比較的新しいフォーマットで、最近では主流になっているが、拡張子は.rarでRAR4以前と同じである。
Android のRAR ライブラリではjunrarがポピュラーだったが、junrarはRAR5に対応していない。RAR5を読める代替ライブラリを探していたが、7-Zip-JBinding-4Android に行き着いた。

github.com

このライブラリは7-Zipのオープンソースライブラリの 7-Zip-JBinding を Android 向けに移植したもので、コア部分がC++のため、Javaのライブラリよりも高速で、かつ多数のフォーマットに対応している。
これで一般に流通しているRARで、読めないものは無くなったはずだ。

本棚の改良

本棚に関しては、昨年、「本棚の書籍の順序の変更」をできるようにした。

ebstudio.hatenablog.com

最近の改良では、①「本棚の個数の増加」と②「本棚の名称変更」の機能を追加した。

ebstudio.hatenablog.com

最新版では、
③ 本棚の本の陰影の追加
④ ePubの表紙画像のキャッシュをLruCacheから DiskLruCacheに変更し、再起動後も高速に表示されるようにした。
⑤ フリー版もePubの表紙のサムネイルを本棚に表示(pro版はPDFもサムネイルを表示する)
⑥ 安定性の改善
を行った。一連の改良で、本棚に関してはかなり改善されたと思う。

ePubの改良

直前の改良では、①ePubの一括読み込みをサポートした。

ebstudio.hatenablog.com

最新版では、
② 空行( <p></br/></p> )が無視される問題を修正
③ 内部構造を見直し、安定性の改善
を行った。

特にePubファイルをファイラから本棚に登録しようとするときに異常終了するケースがあり、レビューで酷評されていたが、最新版では生じないと思う。

Androidで気軽に使える縦書き日本語ビューアは今でもそんなにないので、ver3.0からは、ある程度自信を持ってお勧めできると思う。


Android 版の改良が一区切りついたので、次はiOS版の見直しを行う予定である。

 

読書尚友 ePubの改良

読書尚友はePub形式にも対応しているが、読み込みの単位が章単位(ePub内のxmlのファイル単位)であり、章をまたいで移動するときには、画面をタップして次のファイルを読み込む必要があった。画像だけで構成されているePubでは何度も画面をタップする必要があり、お世辞にも実用的とは言えなかった。

今回、ePub内のxmlを一括で読み込んでメモリ上に展開するようにした。読書尚友の開発当初とは違い、現在のスマホはエントリークラスでもそこそこの性能なので、よほど極端なサイズのePubでなければ、一括読み込みでも問題ない。ただし読み込みに時間がかかると Time out になるので、バックグラウンドで読み込むようにしている。

手持ちのePubでは、旧約聖書や、青空文庫の『宮本武蔵』全冊、『レ・ミゼラブル』全冊を合本化したePubでも支障なく読み込めている。なお、一括読み込みは設定でオプションにしているので(初期値で有効)、問題があるときは従来のファイル単位の読み込みもできる。

青空文庫でも大同生命協賛のePubが多数提供されているので、これらの書籍も快適に読めるようになった。画像のみのePubでも、かなり快適に閲覧できると思う。

iOS版の読書尚友も同様の問題があるので、そのうち対応したい。

 

次の課題としては、rarの改良を考えている。Androidでrarを読み込むライブラリとしてはjunrarがポピュラーで、読書尚友でもjunrarを使用しているが、これはrar5に対応していないため、実際は読めないrarが多い。rar5に対応したライブラリを何とか探して対応したい。

あとは段組みの改良で、左右見開きや上下二段組もやってみたいが、こちらは対応できるかどうかは分からない。

青空文庫も著作権の有効期間が死後70年に延長されてから、新規公開がめっきり減ってさみしくなった。新たな著者が追加されるのはまだ十数年先になるが、そのころはどんなプラットフォームが主流になっているのだろう。村岡花子訳の『赤毛のアン』を読書尚友で読める日が来るまで(2039年の元旦?)、健康で改良を続けられたらありがたい。

 

読書尚友 本棚の改良

Google Playで読書尚友のコメントを読むと、本棚に関するものが多かったので、久々に本棚の改良を行った。

本棚の個数の増加

pro版では4個までだったが、さすがに少ないので、8個+推薦図書の合計9個に増やした。

本棚の切り替えは、数字のアイコン(スペースの関係で6までしか表示できないが)、プルダウンメニュー、およびNavigation Drawerから行う。

本棚名の編集

本棚の名前を変更したいという要望も多かったので、次のように編集可能とした。

あとは細かいところでは、本棚をスクロールするとき、背景画像も同時にスクロールするようにした。これで本棚に関しては一段落したと思う。

 

次はePub周りの改善を考えている。複数のxmlで構成されているePubの場合、性能を考えてxml毎に読み込みを行っていたが、一度に全体を読み込むモードを追加する予定である。

 

WebBrowser からWebView2に移行(EBWin4,KWIC Finder4)

Visual StudioでWindowsフォームアプリを開発するとき、Webページの表示には WebBrowser クラスを利用するのが一般的だったが、WebBrowserクラスはIE ベースなので、最近では表示の不具合が増えてきた。拙作のEBWin4とKWIC Finder4 では、次の不具合が起きていた。

  • KWIC Finder 4 の64bit版でPDFをブラウザビューで表示できない―WebBrowserのPDFの表示ではAdobe Readerのプラグインを使用しているが、Adobe Readerでは64bit版のプラグインが提供されていないためである。
  • EBWin4のWeb検索で検索結果のWebページに表示が乱れる。特にGoogle Search では、検索結果が表示できない。

最近ではWebView2という Edge ベースのUI部品が提供されており、こちらだと上記の問題が解消できる。EBWin4とKWIC Finder4 も、遅ればせながらWebBrowserからWebView2へ移行を行った(64bit版のみ)。

WebView2の使用

WebView2を使用するには、まずNuGetパッケージマネージャで Microsoft.Web.WebView2をインストールする。
するとツールボックスにWebView2 コントロールが現れるので、Formにドラッグドロップで追加が可能になる。
WebBrowserとWebView2では若干メソッド名が異なるが、それほど苦労することなくWebView2に移行できた。
これにより、KWIC Finder4の64bit版でのPDFのブラウザ表示、およびEBWin4のWeb検索の正常な表示ができるようなった。

ただし、インストーラで配布ファイルを作成するとき、WebView2のランタイムを同梱しておく必要がある。特にARM版Windowsでx64エミュレータで実行するとき、x64用のランタイムがないと実行できない。

なお、M1 MacBook AirのVMWare上で動作するARM版Windowsで、EBWin4とKWIC Finder4 の64bit版が動作することを確認した。

実は、ARM64ネイティブのEBWin4とKWIC Finder4の開発も試みたが、C++/CLIで作成したDLLがARM64版だとどうしてもロードできず、断念した。.Net Frameworkの4.8.1ではARM64のネイティブサポートが入っているはずだが、どうも不完全な気がする。

Visual Studio 2026化

Visual Studio 2026 が正式版になったので、Visual Studio 2022 から移行してみた。

これまではVisual Studio のバージョンアップではプロジェクトファイルの更新がつきもので、必ず何らかの修正が必要になっていた。今回のVisual Studio 2026ではVisual Studio 2022と互換性が高く、拡張機能も含めてVisual Studio 2022 のプロジェクトがそのまま動き、2022と2026の共存も可能とのことである。

試しにVisual Studio 2026をインストールしてみたら、無修正で2022用のプロジェクトが動いた。起動も2026のほうが速く、2022を残しておく意味もないので、2022はアンインストールした。

 

キーボード沼の終焉

一年半ほど前に、Surface Pro の外付けキーボードとしてARCHISS ProgresTouch RETRO TINY を購入した話を書いた。

ebstudio.hatenablog.com

ARCHISSのキーボードはその後、職場のPCのキーボードとして日々愛用しており、キートップにテカリが目立つまでになった。

Surface Pro用のキーボードとしては、その後 Keychron B1 Pro を購入して半年ほど使用していた。ロジクール MX KEYS mini とそっくりだが価格が安く、それなりに満足度は髙かった。

この構成でしばらく落ち着いていたのだが、最近ふとしたきっかけで、「HHKB パーフェクトセット」なるものを衝動買いしてしまった。

HHKB Professional HYBRID Type-Sと、アクセサリがセットになった商品であり、次の内容となっている。

  • HHKB Professional HYBRID Type-S 日本語配列(白):36,850円
  • シリコンタイピングベッド(クールグレー):4,400円
  • HHKB吸振マットHG(Professionalシリーズ用):2,970円
  • HHKBキーボードルーフ(フリーザー):4,730円
  • キーボードポッド2(グレー):5,940円
  • 合計価格:54,890円
  • 特別セット価格:46,500円

HKKBパーフェクトセット

HHKB は購入すべきかどうか何度も迷っていたが、結論的には、早く購入して使い倒した方が、人生の時間において得だったと思う。入力効率のわずかな向上でも、投資する価値はある。それにキーボードの寿命はPCより長いので、長く使うほどお得だ。
キータッチも絶妙だし、ミニマムサイズなので机上が広く使える。ControlキーがAの左なのもよい。
なお、HKKBキーマップ変更ツールで、fn+矢印キーだけはPgUp,PgDown,Home,Endに変更した。
Type-Sは静音タイプとのことだが、全く音がしないわけではない。だが外のカフェやファミレスで使っても周りに迷惑をかけない程度には静かだ。吸振マットを裏側に貼るとさらに静かになる。(背面スタンドを立てると意味はなくなるが…)
キーボードルーフとキーボードポッドはいずれ購入したと思うので、セットの意味は十分にあった。
ひとつだけ残念だったのが、シリコンタイピングベッドで、予想外に重く、硬く、掌を置いた時の感触が冷たい。夏なら冷たくていいのかもしれないが、どうしても使う気にならず、結局、別途木製のパームレストを買ってしまった。

HHKB Professional HYBRID Type-Sに不満点があるとすると、Bluetoothで接続時にスリープに入ると、物理ボタンを押さないと復帰しないことである。何かキーを押せば自動的に復帰してほしい。Keychron B1 Proでは、キーの取りこぼしもなく自動復帰できて、便利だった。

もう一点、日本語キーボードの場合、下段のZ~Mの位置がわずかに左に寄っているのが気になるが、使っているうちに慣れてしまった。(よく見ると、REALFORCE RC1もそうなっている)

それなりの出費にはなったが、今後これ以上「理想のキーボード」を求めて他のキーボードに手を出さずに済むという安心感はある。

 

読書尚友の最近の改良

読書尚友をAPI35(Android15)に対応させるついでに、前から気になっていた問題をいくつか修正した。

(1)本棚の書籍の位置の移動

これまでは本棚の書籍の順序を変えられなかったが、GridView / ListView の代わりにRecyclerView を使い、ドラッグで移動できるようにした。本棚をリスト形式で表示しているときは、スワイプで削除もできる。

 

(2)ダウンロードフォントの追加

以前は源ノ明朝 Regularをダウンロードして内蔵のIPA明朝の代わりに使用できたが、Androidのどれかのバージョン以降、標準のSerifが Noto Serif になり、源ノ明朝と同じになったので、ダウンロードの意味がなかった。

今回、源ノ明朝 Light / Regular / Medium / SemiBold / Bold、および、しっぽり明朝、字雲フォントをダウンロードできるようにした。

雲のマークをタップするとダウンロードされ、選択できるようになる。

また、Unicode拡張領域(Ext.B)の表示に使用するフォントも、従来は花園明朝Bを使用していたが、現在は後継フォントの字雲があるというご指摘をいただいたので、字雲に変更した。

※カスタムフォントも使用できるが、フォントを所定の位置にPCからコピーして、設定から選択しないといけないので、ハードルがちょっと高い。

 

(3) Word97-2003 形式のサポート

これまでWordは .docx 形式だけサポートしていたが、.doc 形式を閲覧したい場合が多々あるので、org.apache.poi を使ってサポートした。

 

最近反省しているのが、Google Playのレポートを全然読んでいなかったこと。Android13以降書籍・著者の検索ができない問題や、Free版が広告の問題で落ちる問題が報告されていたが、気がつくのに時間がかかった。大変申し訳なかったと思っている。今後はもう少しユーザの声にも気を配りつつ、引き続き改善していきたい。