Q&A

ことせかい に寄せられたご意見ご要望について、何らかの理由で実装されなかったご提案について記述しておきます。

目次

はじめに (2018/05)

ことせかい への新機能のご提案、ありがとうございます。 ことせかい は個人が趣味で開発しているアプリとなっております。また、開発者はアイディアをあまり思いつかないような人間ですので、新機能についてはユーザ様からのご提案に頼っている所もございます。いつもありがとうございます。
ただ、このことせかい は「個人が趣味で開発している無料アプリ」であるということを今一度よく考えて頂ければと思います。下記のご意見ご要望への回答を読んで頂けるとわかるかと思いますが、個人制作であり、お金をいただいていないという事が原因で採用できないという問題が多くございます。新機能を思いついてご提案を書くということまでして頂ける方にはお手数までおかけした上で誠に申し訳ないのですが、「ことせかい の開発者は、ことせかい が使いやすくなってユーザが増えたりしても、1ユーザとして使いやすくなるという恩恵以外には恩恵はなく、逆にユーザが増えることでユーザサポートの手間が増えるというデメリットの方が大きい」という事をご理解ください。
例えば、開発者 は ことせかい を目で読むためには使っておりませんので、目で読むための機能を積極的にサポートする気はありません。目で読むために ことせかい をお使い頂きたい方には誠に申し訳ないのですが、ことせかい があまり目で読むための仕組みを持っていないのはそういう理由があります。まぁ、ご提案された機能で、簡単に実装できるものについては実装しておりますけれども。
そんな背景があります事をご理解の上、新機能のご提案をしていただければと思います。 また、ことせかい の開発者は褒められるととても喜びます。礼儀正しくお願いなどされても嬉しいと感じます。逆に、「〜はおかしい、〜となるのが当然であるので直すように」といったような思いやりのないお問い合わせ受けると傷つきます。 開発者としましては、それらのご意見ご要望はできるかぎり分け隔てなく評価し、実装するかしないかを決定しようと思っていますが、所詮は人の子ですので褒められたり礼儀正しいご提案の方が採用されやすくなると思います。どうぞお手柔らかにお願いいたします。

読み替え辞書をユーザ間で共有したい (2018/05)

読み替え辞書をクラウド的なものでユーザ間で共有して編集できないかというご提案について。
これは実現したらとても良いものになるとは思うのですが、そのクラウド的な物を維持するのにはお金がかかるので、ことせかい の開発者側としては対応できない案件となります。ことせかい が何らかの形で定常的にお金を生むような形にしていればよかったのかもしれませんがそうはなっていませんし、今から何らかのお金を生む要素を入れるのは多くの人が望まない事ですよね。なので、やる気はありません。ただ、数年間分のサーバ費用にオマケもつけるからやってくれという人が現れたり、自分がサーバ側を管理運営するのでアプリ側はなんとかしてくれという人が現れたり、この無料のサービスをこうやって使うと実現できるんじゃね?というウルトラCを考えついたりしたらあるいは、という気もしなくもありません。(もちろん、その費用が尽きたりサーバ運営をしてくれている人が諦めたりその無料サービスから想定外の使い方しちゃ駄目と怒られたらそこでそのクラウド読み替え辞書共有サービスは終了になりますので、不安定なサービスであるといえます)

何らかの問題で期待しないデータがダウンロードされてしまった章について (2018/05)

これは、例えば小説ではなく、「アクセス数が多いのでエラー」といったものがダウンロードされてしまった、というような場合の事です。 現状では、既にダウンロードして登録されてしまった部分(章)を再ダウンロードする方法はありません。
内部的には HTTP のステータスコードでエラーを返してくれている(200 OK ではない場合、例えば 429 Too many requests を返している)場合であれば、ダウンロードが失敗したとみなして保存せずにダウンロードを終了しています(していない例がありましたら不都合になりますのでお問い合わせフォーム等から教えてください)。逆に、HTTPのステータスコードによるエラー以外で「アクセス数が多いのでエラー」という文字列が取得できてしまう場合(200 OK で取得したデータの場合)には、ダウンロードが失敗したかどうかを判定するのは難しいため、そのままの文字列が保存されてしまいます。これをユーザ様の側で「この章だけ再ダウンロードせよ」という指示を出せるようにしたらよいか、とも思ったのですが、現在の内部データベース仕様ですと「その章」がどんなURLであったのかの情報が不足しており、再ダウンロードすることができないために実現できませんでした(現状では最初にダウンロードしようとした章のURLと、最後にダウンロードしようとした章のURLしか保存されていませんので、10章分読み込んでいた場合には2章から9章までは再ダウンロードすることができない、という状態です)。
なので、「アクセス数が多いのでエラー」といったようなエラーメッセージそのものが保存されてしまっている場合は一旦小説を本棚から削除して、通信環境の良い所で再度ダウンロードしていただく必要があります。
この問題については将来的には対応しようとは思っているのですが、現在の内部データベース形式では上記の理由で無理となります。また、将来的に対応できたとしても、現在既にダウンロード済みのものについて(上記の例だと2章から9章について)はURLを推測できない関係上、対応が不可能な問題となります。予めご了承ください。

縦書き表示について (2018/05)

まず、ことせかい は「読み上げ」アプリですので「目で読む」ための機能については真面目にサポートするつもりはありません。
また、縦書き表示についてのお問い合わせは何度か受けておりますので少し調査してみたことがあるのですが、残念なことに簡単には縦書き表示はできそうにありませんでした。
グダグタと調査したものを書き下しますと、NSAttributedString に NSVerticalGlyphFormAttributeName 辺りを設定すると縦書き表示ができそうなのですが、1行分しか縦書き表示してくれないようであったり、TTTAttributedLabel というライブラリを公開してくれている人が居てそれを使うと良さそうだと思ったら、Label であって TextView ではないのでスクロールできなかったり、UIWebView に CSS で writing-mode: vertical-rl; 辺りを含ませた物を表示させれば綺麗な縦書き表示ができるかと思ったけれど、現在の読み上げ位置をハイライトする方法が一筋縄ではいかなくて断念したり、といった感じです。最後の UIWebView 辺りの仕組みがうまく動くのであれば表示している WebPage をそのまま読み上げさせる事や、挿絵を表示しながらの閲覧もできるようになりそうでいいかなぁとも思ったんですけれども、読み上げアプリとしては読み上げ位置が見えないのはなぁということでお蔵入りになりました。なお、これらは 2,3年前 に調査したものになりますので、今ではもっと良い方法があるかもしれません(その辺りの知識のある方がおられましたら教えていただければ嬉しいです)。

スライダーについて (2018/05)

ことせかい の中の色んな所にあるスライダー(左右にスライドして値を入力する奴)なんですけれど、これ、微妙な値を指示したい場合にはちょっと面倒ですよね。そんな時は、スライダーのつまむ所(丸い奴)をタップしたまま(つまむ所が見える状態になるまで)指を下にずらして、そこで指を左右に傾けるような形で位置を調整すると微妙な値もなんとなく入力できます。まぁ正確に0.1づつ動かしたい、みたいなのには使えないのですけれど、覚えておくとちょっと便利な感じです。あ、これは左右への0.1づつとかのボタンを配置するのが面倒だから言っているのではなくてですね、ボタンを配置てしまうとiPhone SEとかの幅の狭い端末だとレイアウトが崩れちゃってちゃんと操作できなくなっちゃうのでボタンを配置できない所があったりするのです。

ルビ表示の改善について (2018/05)

まず、ことせかい は「読み上げ」アプリですので「目で読む」ための機能については真面目にサポートするつもりはありません。
なのですが、簡単に実現できるのに実装しないのだとすると悪い気もしますので、調査してみました。しかし、残念なことにルビの表示を簡単に実現するのは難しいという結論に達しましたため、この機能については見送りました。
ことせかい で小説を表示している画面では、UITextView というコンポーネントを利用しています。このコンポーネントは NSAttributedString という、属性つきの文字を表示する機能があります。この NSAttributedString には CTRubyAnnotation というルビをふるためのそのものの属性があります。なのですが、どうも UITextView はこの CTRubyAnnotation には対応していないようです(設定してみても何も起こりませんでした)。UILabel という別のコンポーネントでは同様にCTRubyAnnotation属性を設定した文字列にルビが振られましたので、多分使い方が間違えているとは思えませんでした。では UILabel を使えばいいではないかと思った人は鋭いかもしれませんが、UILabel ですとスクロールができませんし、範囲選択という概念もありませんので小説の本文を表示するためには使えません。 ではどうするのが良いのかというと恐らくは WKWebView といったような HTML のレンダラを使っての表示にしてしまうのが良いと考えられますが、縦書き表示についての所でも書きましたように、それはそれで解かねばならない問題が解けませんでしたので採用できないという判断になりました。
以上の理由から、ルビの表示の改善については見送らせて頂いています。

読み上げ時の話者について (2018/05)

ことせかい は読み上げアプリですので、読み上げの話者に関して、他の話者を選択できないか、というお問い合わせを受けることがあります。

ことせかい では、iOS の AVSpeechSynthesizer という、Siriさん も使っている音声合成エンジンを利用させて頂いています。これは Appleさん が無償で提供してくれているものになりますので、できるだけお金をかけず運用されている ことせかい としましてはとても使いやすいものとなっています。

同様な無償で利用可能な音声合成エンジンもいくつかあります。例えばAQUEST AquesTalk(一部の方には「ゆっくりの音声」というと馴染みがあるかもしれません)などがあります。 これらの音声合成エンジンは、(人によって評価は別れるのかもしれませんが) AVSpeechSynthesizer と比べてとりたてて良い品質の読み上げを行うようなものはなさそうでした。 また、現在の内部データベース情報では音声合成エンジンを変更するためのデータがなく、別の音声合成エンジンを指定することができません。従って、AquesTalk のような別の音声合成エンジンも利用可能とするためには内部データベースの更新が必要となりますが、これは最悪ダウンロードした小説が消えてしまうというような修正が伴う事にはなるため、慎重に行う必要があります。 そのため、現在のところはこれら AVSpeechSynthesizer 以外の無償で利用可能な音声合成エンジンを利用できるようにする予定はございません。

さて、ことせかい の開発を開始した頃(多分2014年頃)と比べて、最近は音声合成の技術もかなり進歩してきました。 中でも最近流行りのDeep Learningの技術を利用した音声合成には目を見張る物があります。 例えば Google CLOUD TEXT-TO-SPEECH や、Amazon PollyMicrosoft Bing Speechといったものです。 ただ、これらのサービスは所謂クラウドによるサービス提供を行うもので、利用にはわずかながらとはいえお金がかかります。 ご承知の通り、ことせかい にはお金を生み出す導線がありません。そのため、これらのお金のかかるサービスを利用しようとすると開発者側の持ち出しとなるため、そのままでは利用することは出来ません。

では、クラウドの利用料金をユーザ様から払って頂くような形式にするとどうだろうという考えも思いつきます。 ただ、これは以下に述べますようないくつかの点で問題があり、やりたくありません。

  1. クラウド側の利用料金はとても細かい単位での従量課金制であることがほとんどなのですが、iOS における課金体系にはそのような細かい単位での従量課金というものはございません。 従って、アプリ側での課金は例えば一度に120円分頂いておき、クラウド側の利用料金が120円を超えた辺りでもう一度120円を課金で頂く、というような動作が必要になります。ただ、クラウド側の利用料金はアプリのユーザ単位ではなくアプリ単位で課金されると考えられるため、一人のユーザの利用した利用料金を正確に算出するのは難しいと考えられます。そのため、恐らくは「だいたいこの位使ったのだからこの位のお金がかかっただろう」というざっくりとした推測を働かせる事になると考えられます。また、その推測はどちらかというとユーザ様側の支払う金額の方が多くなるように設定しておかないと、ことせかい の開発者側で赤字になってしまい、サービスが継続できなくなると思われます。
  2. これらのクラウドで提供される音声合成サービスを利用する場合、利用料金の問題が解決したとしても、ネットワークアクセスという問題がつきまといます。ネットワークへのアクセスは常に失敗する可能性があり、失敗からの回復のための実装が必要となり、実験などの検証は恐らく終わりがありません。
  3. ご存知の通り、現在の ことせかい には課金の仕組みはありませんので、新しく課金の仕組みを組み込む必要があります。課金の仕組みはお金に関する事ですので、慎重に組み込む必要があります。ことせかい の開発者は課金の仕組みをアプリに組み込んだ事は一度もなくその辺りの経験が少ないため、この作業にはかなりのコストを見込む必要があります。
  4. クラウド側の従量課金分をアプリ側の課金で補おうとした場合、アプリ側の課金成立時に Apple側 に支払われる 30%分 のアプリ内課金利用料が問題になります。というのは、例えばクラウド側の従量課金で120円分の音声合成を行ったとします。その場合、ことせかい のユーザとしては 120円 だけを払えばいいような気がしますが、これをアプリ内課金で120円を払って支払おうとすると、お金が足りなくて支払うことができません。これは Apple側 で120円の30%の36円が引かれて、84円しか開発者側には手に入らないため、クラウド側でかかった120円に満たないことになります。従って、アプリ内課金でクラウド側の従量課金分を補うためには、その30%分を多く頂く必要が出てきます。恐らくこれは期待されていない動作となるでしょう。

ことせかいの開発者としましては上記ような複雑な仕組みを構築しなければならない上に、さらにお金の問題(多分何かよくない間違え方をすると烈火の如く怒られたり最悪裁判とか警察沙汰になったりする可能性が高い)を抱え込むというコストもリスクも高い案件になります。正直な所、そこまで苦労してこれらの問題を抱え込むだけの利点がありません。

以上の事から、現在のところは問題が多いという理由でこれらの別の音声合成エンジンを利用するというのは難しいと考えています。


小説のお気に入りや本棚のフォルダ分けなど、本棚に関する拡張について (2018/05)

小説をお気に入りに登録したり、フォルダ分けするなどで小説を探しやすくするための機能についてなのですが、これは、現在の内部データベースに保存されている情報だけですと対応が不可能なものが多く、内部データベースの定義を変更して対応しようと思っています。 ただ、その場合は本棚だけではなく他の部分にも影響が及ぶ上に、場合によってはダウンロード済みの小説が見えなくなったりといった問題が発生する可能性があります。そのため、リリース用の枝(branch)ではなく、別の枝で作業しています。 この作業はかなり前から行っているのですが、まだまだ先は長い感じですぐにリリースできるとは思えません。

つまり、本棚に大量の小説を登録していると本棚から小説を探しにくくなっているというのは認識しているのですが、すぐに対応できる状態ではないということになります。 お手数をおかけしますがのんびりお待ち下さい。


pixiv小説のシリーズへの対応について(2018/08)

結論から言うとこれは現在の仕組みでは無理そうです。 ことせかい では Web取込時に HTTP GET request の一回で取得できるHTMLから小説の本文や次の章へのリンクを取得しているのですが、このQ&Aを書いている時点では取得されたHTMLにはそのシリーズ小説の別の章へのリンクが含まれていません。 そこまで深く追いかけてはいないのですが、恐らくはページが表示された後に JavaScript による読み込みによってシリーズ小説の別の章へのリンクが生成されているのではないかと思います。ことせかい側 では JavaScript は動作しませんので、そのような仕組みのWebPageの場合は対応できません。 以上の原因により、原理的に対応が不可能な案件と判断されました。


読み上げ時の音量(ボリューム)について(2018/10)

読み上げ時の音量が小さいのでもっと大きくできないか、というお問い合わせを何回か受けました。 なのですが、これ以上の音量は出せません。

というのは、ことせかい は iOS の提供しております AVSpeechSynthesizer というものを使って読み上げを行っています。 この AVSpeechSynthesizer では AVSpeechUtterance というものの volume プロパティで音量の指定ができるのですが、ことせかいではこの volume プロパティを標準値の 1.0 で利用しています。 という状態なのですが、この volume プロパティで指定できる値の範囲は 0.0 から 1.0 なのです。 つまり、現状で最大音量で発話させています。 ということなのでこれ以上の大きい音量では発話できないのです。 どうしても音量を大きくする必要がある方は外部のスピーカーなどの導入をお考えください。

アルファポリス様について(2018/10)

Web取込 機能で対応していました アルファポリス様 なのですが、先日よりダウンロード時に本文の内容が取得できない状態が発生しております。詳細な確認は行っておりませんので正確な事は言えませんが、今現在確認できている所では本文を JavaScript により遅延読み込みしているために、本文情報がカラの物が取得される、という状態のようでした。 このような遅延読み込みを行うWebサイトについては ことせかい の側では対応が難しいため、アルファポリス様 については ことせかい ではダウンロードができないとお考え頂けますと有り難いです。

iOSの音声合成エンジン側の問題について(末尾がリフレインする、一部の文字を読み上げない等)(2018/10)

ことせかい は iOS の提供しております音声合成エンジンを利用して読み上げを行っています。この音声合成エンジンは Siriさん の発話にも使われているような汎用性のあるものなのですが、一部の文字列について不思議な動作をすることがあります。これらの iOS の音声合成エンジン側の問題からくる不思議な動作については、ことせかい の側からは干渉しづらい問題となりますので対応が難しいです。

今現在確認されている問題は例えば以下のようなものです。

  • 末尾がリフレインする文字列がある。例:「/17歳」
  • 読み上げがされない文字列がある。例:「人の噂も75日」の75
  • 途中で謎の言語話者が憑依したようになる文字列がある。例:「軌跡を描くが、それは全く同じ軌道で描かれた白い軌跡」の「描くが」や「描かれた」の辺り
  • 「あ」の後ろに「、」があると「あ」ではなく「ええあいえむ」と読み上げる事がある。例:「あ、ああ」

上記の問題と似たような問題が起きた時に、ことせかい の側で起きている問題なのか、iOS の音声合成エンジンの側で起きている問題なのかを簡易に判定する方法があります。 設定アプリ → 一般 → アクセシビリティ → スピーチ にて、「選択項目の読み上げ」をONにした上で、該当の文字列を範囲選択して出てくる「コピー」といった項目の中にある「読み上げ」を用いて読み上げさせた時は iOS の音声合成エンジンのみの発話になりますので、その読み上げでも同じような問題が起きる場合は iOS の音声合成エンジン側の問題であると考えて頂けると幸いです。

一応、これらの問題は ことせかい の側の 設定 → 読みの修正 にて問題の起こる文字列を別の文字列に置き換える事で問題が回避できる事があります。ただ、これらの問題は iOS のアップデートの時に今まで問題が起きていた文字列が問題なくなったり、問題がなかった文字列で問題が起きたりという現象も確認されており、その全てを読み替え辞書に登録するような事は現実的ではなさそうです。ですので、何度も同じ文が出てきて同じように読み上げがおかしくなる、という問題を抱えている時などはこの方法も考慮すると良い位に考えて、当面は「あぁ、何かおかしな読み上げをしているな」とスルーするのが良さそうな気がしなくもありません。

読み上げ時の話者データのダウンロードについて(2018/11)

ことせかい は iOS の提供している音声合成エンジンを使って読み上げを行っています。この音声合成エンジンでは、予め用意されたいくつかの話者を選択して読み上げさせることができます。話者は 設定アプリ → 一般 → アクセシビリティ → スピーチ → 声 → 日本語 で出てくる話者を利用することになります。このとき、これらの話者のデータを追加でダウンロードすることもでき、そのダウンロードを行った後に ことせかい を起動すればそれらダウンロードされた話者が使えるようになります。

……というのが通常の使い方なのですが、たまに、この話者の一部または全てが選択できなくなるという症状を訴える方がおられます。そのような状態は開発者の所では再現したことがございませんのであまりよくはわかっていないのですが、どうやら「iOS をアップデートした時」や「設定アプリ でダウンロードされた話者データを削除して再度ダウンロードさせた前後」に ことせかい の側で話者の一部または全てが選択できなくなるという状態になることがあるようです。 この問題は iOS の OS 側の問題になりますので ことせかい の側ではどうしようもありません。

この問題が改善したという情報としましては、iTunes を使って復元を行ったであるとか、iOS のアップデートをしたであるとか、設定アプリでダウンロードされている話者データを一旦削除してもう一回ダウンロードしたといった事で改善したという話も聞いています。

なのですが、この症状に陥った後、設定アプリ側ではダウンロードされた話者データを削除するためのボタンが出てこないといった症状になってしまって、どうにもできなくなってしまった、という報告も受けています。 さらに酷いことに、そのようなどうにもできなくなってしまった方で、端末を工場出荷状態にまで(完全にリセットして)戻せば、再度話者データがダウンロードできるだろうとしようとしてみた方もおられるのですが、その場合でも削除のボタンもなく、ダウンロードのボタンも無いという状態になったという報告も受けています。 ここまで来ると端末自体を交換する位しかこの症状を直す方法が見当たらないような気もするのですが、さすがにそこまでするのは難しいかと思われます。

ただ、そのようなどうにもならない症状になってしまった方で、ごく少数の方で改善したという報告を受けた方法があります。 それは、ことせかい 側では話者として選択できなくなった(選択肢に出てこなくなった)が、設定アプリ側では話者データがダウンロードされている、という方で、以下の ことせかい のバックアップデータを使って読み上げに使う話者を強制的に目的の話者に上書きするという方法をとることです。 ただ、上記のような設定アプリ側では全てダウンロードされている(またはダウンロードボタンが無い)状態の方でこのバックアップデータで上書きしても改善しなかった方もおられますので確実な方法ではございません事はご了承ください。

以下に、それぞれの話者を読み上げ時の話者に強制的に上書きするための ことせかい のバックアップデータを置いておきます。 (恐らくは Safari で読み込まないと ことせかい に取り込めません。ことせかい に内蔵の Web取込 タブからだと失敗するかと思われます)

読み上げ時の速度上限(下限)について(2018/12)

読み上げ時の速度について、今以上の速度で読み上げをしたいというお問い合わせが何件か頂きました。 ことせかい の読み上げ時の速度は 設定 → 声質の設定 にある 速度 で調節できるのですが、ここで指定できる値の範囲がシステム側の上限と下限そのものになりますのでこれ以上の値の設定はできません。

わかる方にわかりやすく書きますと、AVSpeechUtterance の rate プロパティ に設定できます値の 下限(AVSpeechUtteranceMinimumSpeechRate) と 上限(AVSpeechUtteranceMaximumSpeechRate) を指定できるようにしてありますのでこれ以上の範囲を指定してもこの範囲内に丸められてしまいます。

この制限を外そうとしますと、ことせかい が利用している音声合成エンジンを iOS の提供している AVSpeechSynthesizer ではない別のもので、合成された音声をPCM的な物で取り出せるもの(例えばAquesTalk等)に変えて、音声をPCM的に取り出してそこからさらに再生速度を早めるような処理を入れる、などの対策が必要となると考えられます。 ただこの場合は、ことせかい の音声合成エンジン周りが AVSpeechSynthesizer に依存した書き方がされているものを別の音声合成エンジンを使うように書き換えないといけなくなりますし、さらに再生速度を変えるとなると恐らくは読み上げ位置の管理にあたる部分にかなり手を入れないといけなくなりそうです。これらの修正は非常に大変なことが予想されます。 以上の理由により、現状ではそのような再生速度の限界を超える目的の変更を行う予定はありません。