QQmlApplicationEngineのキャッシュとプロファイル序またしても無知を晒すPython*Qt*WebEngineのお話。Unsurfが「Incognitoブラウジングにいいよ」とか言ったけれど、実際プロファイルもキャッシュも残ってしまうので、なんとかならないかな、ということを考えた。この記事、及びこのソフトウェアのコードは、PyQtに関する情報を調べる中で「いくら検索しても情報や実例が出てこない」という問題に悩まされたことを踏まえてコードを書き残すことを主眼としたものであり、内容はレベルの高いものではない。私自身があまり理解していないのだから。storageNameといった値でコントロールされることがわかる。QWebEngineの場合はデフォルト名が<appname>/QWebEngineで固定であり、従来の方式だと~/.local/QWebEngineなんかになってしまってよろしくない。WebBrowser")web.load(QUrl(url))web.show()sys.exit(app.exec_())にちょっと書き足しておく。単純にアプリ名を与えてあげれば固有にはなる。web)web.setPage(page)これでプロファイル名が“unsurf”になる。sys.exit()って感じ。おっと、importも忘れずに。ところがそもそもの話としてQWebEngineにはoffTheRecordモードが入っていて、使い方がわからず調べ回った結果、QWebEngineProfileにからっぽのQObjectを与えるか、そもそも何も与えなければ良い、ということがわかった。file+sys.exit(app.exec_())って感じ。Viewerに置かれる形(Linux上において)。公式ドキュメントはこちらで、QQuickWebEngineProfileに含まれているcachePathとpersistentStoragePathというプロパティでコントロールされる。QQuickWebEngineProfileはPyQt5/QtWebEngineで提供されている。QWebEngineProfileの情報は調べればちらほら出てくるのだけど、QQuickWebEngineProfileのほうは全くといっていいほど出てこない。ワードを変えると出てくるものもなくはないので、Googleがだめなだけ、という気はするけど、DuckDuckGoにすればヒットするとかそんなことはない。Bingに至ってはクォートしたところでワードを無視するので、QtWebEngineの話ばかり出てきて役に立たない。QtWebEngine.QQuickWebEngineProfile.defaultProfile()でいけるから、QWebEngineProfileと似た感じではある。QQmlApplicationEngineにsetPageがないので同じようにはいかない。検索しても類似コードも見つからずどうしようもない展開に。質問してみたんだけど、回答がこなかったのでがんばった。結果分かったのは、「Qtの場合はコード上で書くけど、QtQuick(QML)の場合はあくまでQML上で書くんだよ」ということ。QMLオブジェクトとつなげる方法があるのかはよくわからないけれど、QQuickWebEngineProfileはQML上で書けってことのようだ。いうことで直したんだけど、オリジナルのリポジトリは消してしまっていたので元がどうだったか説明するのが難しい。diffはあるので、diffを見ると別物である。}新しいリポジトリはこちら。コードも掲載するとこんな感じ。}}QMLで書かれているWebEngineView.profile.storageNameにセットする形でできた。ローカルファイルを見る用に考えていたのだけど、機能的にはUnsurfよりも多く乗る形になった。作りましたそんなこんなでQtのWebEngine周りをいじってたので、もうちょっと実用的なのが欲しいなと思って作っちゃいました。戻る・進む)プロファイル切り替えといったところ。ローカルファイルよりもウェブ優先になっていたりと、Unsurfとはちょっと違う。すごい簡単に作れた感じだけれども、QtもGUIアプリケーションもPythonも全然慣れてないので、かなり時間もかかったし、一個ずつ調べながら形にしていくみたいな感じだった。昔、IEコントロールを使ったブラウザ(架装ブラウザとか呼ばれてた)がすごく流行ってたくさんあった。browserとkikiをすごく使っていたし、今でも残っているSlaipnirとかLunascapeとかも元々はそういうブラウザだった。Mozillaと「マルチエンジン実装!」なんてのも流行ったね。今はブラウザが高度化していたり、拡張機能への依存度が上がったりして、そうしたブラウザはほとんどなくなってしまって、大手ですらも見なくなったのだけど、QtでWebEngineを使うとすごく簡単に実装できるから(経験に乏しい私でも手探りでできたくらいだから)、やってみても面白いかも知れない。ちなみにこのブラウザ、WebEngine(Blink。Chromiumと同じもの)を使っている関係上、パフォーマンスや表現能力はGtkWebKitを使うSurfやMidoriよりもよかったりする。なんだか今回、エンジン自作を期待されてしまったような気がするのだけれど、実用的にはエンジン自作はもはや一般レベルでできるものではないので、ポイントを抑えて自分で作るのが良いと思う。拡張機能を作るのがベストっていうことも多いだろうけれども。個人的にはよりシンプルで軽く、プロファイル機能があり、余計なことをしないブラウザが欲しかったのでかなり満足。