[SlackLogViewer]Mac、Linuxへの対応。

更新情報とは少し異なる。Windows版ユーザーには関係のない話である。
cielavenir様からプルリクエストをいただき、SlackLogViewerMacLinux上で使用可能になった。Mac用のビルド済みのバイナリもcielavenir様が作成してくださったので、Releasesにて配布している。macosと付いたファイルをダウンロードすればよい。Macユーザーはcielavenir様にひれ伏しなさい。

2022年8月23日追記。cielavenir様から頂いたmacOS用バイナリのダウンロードに失敗していたらしく、ファイルが破損していることを確認したので、差し替えた。 2022年9月2日追記。上記の差し替えたファイルにも不具合があることがわかり、その修正版を新しいバージョンで公開した。

Linux用のバイナリは到底配布できないのでユーザー各々にビルドしてもらう必要がある。色々とライブラリを使っているのでちょっと面倒ではあるが、本記事ではCMakeを用いたビルド方法を簡単にまとめておく。なおコンパイラはMSVC、GCCにのみ対応しており、Clangは未対応であるため1Macの場合もGCCでビルドする必要があるv1.2.Alpha-1以降はMSVC2019/2022、GCC-9.5.0/11.3.0、Clang-12.0.0でビルドできることを確認している。GCC-10以前とClangの場合は<execution>を使用しないように変更してある。
SlackLogViewerの説明はこちらへ

ビルドに必要なライブラリ

  • Qt Qt5なら5.14以上、Qt6は6.2以上。追加モジュールとして、QtWebEngine(Qt6の場合はさらにQt5Compat、QtWebChannel、QtPositioning2)も導入すること。
  • zlib ver-1.2.11で動作確認。
  • QuaZIP ver-1.1で動作確認。
  • TBB GCC-11以上を使う場合に必要。ver-2021.5.0で動作確認。

aptコマンドなりhomebrewなり自前ビルドなりでこれらをインストールしなければならない。

Qt5についてはQtWebEngineにPDF表示機能が実装されたのが5.14以上だったような記憶があるため、これより上でなければならない。Qt6でも6.1以前はQtWebEngineを持たないので、6.2以上が必要である。
zlib、QuaZIPの最小バージョンは不明である。Linuxの場合、QuaZIPは古いバージョンだとCMakeの互換性に問題があり自前でビルドしなければならない場合があった。
TBBはMSVCでは必要なかったのだが、GCCではstd::execution::parを用いる場合に要求されるらしい(標準ライブラリの機能だろうに変な依存関係作るなよ……)。こちらも最小バージョンは不明。

そういえばWindowsだと実行時にQtがOpenSSLを要求していたが、MacLinuxでどうなのかはよく分からない。

インストール手順

通常のCMakeのビルド、インストール手順に則る。GitとかCMakeとかちんぷんかんぷん、なんて人がLinuxユーザーにいるとは思わないが、一応典型的な手順を簡単にまとめておく。

  1. 事前に上述のライブラリをインストールし、PATHLD_LIBRARY_PATHCMAKE_PREFIX_PATHを設定しておく。
  2. 任意のディレクトリでgit clone https://github.com/thayakawa-gh/SlackLogViewer.gitを実行し、ソースコード等をクローンする。
  3. mkdir build
  4. cd build
  5. cmake ../SlackLogViewer -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=path_to_install_dir 。Qt5を使う場合は-DQT_MAJOR_VERSION=5を追加する。
  6. make
  7. make install

と実行すればよい。指定したインストール先にビルドされたファイル等が展開される。
警告がたっぷり出るかもしれないが、私が修正をサボっているだけであるので無視してよい。

余談

私はMac未所持であるためMac上での動作確認を一切行っていないしデバッグも出来ない。Mac特有の不具合があったとしてもcielavenir様のように対処してくださる方が現れない限り対応困難であることをご理解いただきたい。また、今後の継続的なバイナリ提供が可能かどうかも不明である。GitHub Actionsなどを使ってバイナリを作成する方法はあると思うが、動作確認できない以上は誰かしらの協力は必要となる。誰か私にMacを提供してくれそうしたら全力でサポートするから。

Linuxの方は簡単に表示、検索などの試験は行ったものの、如何せん試験時間が極めて短いので、予想だにしないバグが隠れている可能性を否定できていない。が、そのあたりはユーザーからの報告を待ち必要に応じて対応することにする。私はそもそもLinux版をサポートする気はなかったのだ。申し訳ないがそこまで細かくテストできるほど私の余力は大きくない。
細かいところで言えば、Windows用に調整したGUILinux上で動かすと若干の乱れが生じるらしい。特に致命的でもないので我慢して欲しい。

久しぶりにUbuntu仮想環境とCLionを引っ張り出してきてビルドなどの作業を行ったのだが、至る所の設定方法を忘れていて大変だった。CLionはWindowsLinuxの作業環境統一のためにしばらく使ってみて、結局はVisual Studioのほうが使いやすかったので移行を断念したという経緯がある。残る選択肢はVisual Studio Codeくらいだろうか。しかしあれはあれで使いにくいんだよなぁ……。 最近はWSLがGUIにも対応したらしいので、あちらがQtアプリケーションのテストくらいこなせるのならVisual Studioのみで作業が完結するのだが、どうなのだろう。


  1. SlackLogViewerは検索結果を日時順にソートする際にstd::execution::parを使っているが、Clangは未だに<execution>を実装していないため、ビルド不可能なのである。
  2. Qt5CompatはQuaZIPが依存している。QtWebChannel、QtPositioningはQtWebEngineが必要とする。

[SlackLogViewer]Slack過去ログ閲覧ツール更新(4)。

超久々のブログ更新だが、単なるSlackLogViewerのバグ修正である。
SlackLogViewerの説明はこちらへ
Windows版のダウンロード先はこちら。SlackLogViewer.v1.1.Beta-4.zipをダウンロードして解凍すればよい。

更新情報

ver-1.1.Beta-3で次のようなバグを確認した。修正できたのは1.のみである。2.と3.はそこまで致命的な不具合ではないので、時間のない今は対応を見送った。

1. 検索結果中のスレッド内返信に関するバグ

メッセージを検索した結果の一覧には通常のメッセージとスレッド中の返信とが一緒くたに表示されるが、これをクリックして元のメッセージに飛ぼうとした時、通常のメッセージであれば問題なく移動できるのに、返信だと移動できない。
1.1.Beta-3で各jsonファイルの読み込みを並列化したときの変更が原因だったので、ちょこちょこと修正した。

2. 再現性のない異常終了

zipまたはjsonファイルを開いた時、異常終了することがある。原因がまだ分かっていない。内部的には、QDateTimeのsetTime_tあたりを呼び出している際に再現性のない例外が飛んでくることを確認しているものの、そもそも問題が起きるようなコードではないので、正直理解しがたい。Qtのバグじゃないかとさえ疑っている(そういう疑念が正しかったためしがないけれども)。

3. 閲覧するjsonを切り替えた後の検索時の異常終了

一度jsonやzipを開いた後でアプリケーションを終了せず別のjsonやzipを開くと、ある程度は正常に動くのだが稀に異常終了する場合がある。こちらで確認できているのは検索時だ。閲覧するファイルを切り替えた後でメッセージ検索を行い、それをクリックして元のメッセージへ移動しようとすると、何故かコケることがある。
まだ確実に再現する状況を特定できていないので、今回は修正していない。

閑話

いい加減リリースしたいなぁ。したいけど、バグが残っている段階ではちょっとできない。本アプリケーションは設計の甘い部分が多々あるので、こういうのはまだ色々出てきそうだ。ちなみに、バグというほどではないが、1.1.Beta-3ではSlackLogViewerのアプリケーションの説明が何故かADAPT-IVEという名前になっており、タスクマネージャー等で見るとSlackLogViewerではなくADAPT-IVEと表示されるという珍妙な現象が起きていたが1、これはしょうもないミスである。CMakeLists.txtの記述が誤っていた。本バージョンでは修正済みである。
今はこちらの開発に費やす時間がないので、残っているバグに対応できるとしても来年以降になるだろう。その間にユーザーの報告でもあれば助かるのだが、しかし如何せん再現性がないので原因を特定するのは難しそうである。よく訓練されたユーザーが多く集まってくれれば、それこそ先日のSlackのフリープラン内容変更告知で一気にユーザーが増えたらしいのでそのあたりの人たちが色々検証してくれれば、ひょっとしたら解決できる可能性もなくはないかもしれないが、まあ期待はしない。ユーザーの99%は無言を貫くものである。悲しいことに。


  1. ちなみにADAPT-IVEというのは私が研究用に作っている検出器情報等の3D表示を行うアプリケーションの名前である。こちらのCMakeLists.txtからバージョン情報をコピペした時に一部修正し忘れたのだ。馬鹿め。

[SlackLogViewer]Slack過去ログ閲覧ツール更新(3)。

最初はちょっとしたバグフィックスをして更新するつもりだったのだが、Qtでzipファイルを解凍せずに読み出すためのとても良いライブラリを見つけてしまったので、それも導入しつつ色々と改造した。
SlackLogViewerについての説明はこちら
Windows版のダウンロード先はこちら。SlackLogViewer.v1.1.Beta3.zipをダウンロードし解凍すればよい。

更新情報

1. エクスポートしたzipファイルを解凍せずに読み出す機能を追加

今まではzipを解凍してからそのフォルダを指定して中身を読み出していたが、本バージョンからはzipファイルを直接読み出せるようになる。従来どおり解凍してから読ませてもよい。

2. エクスポートしたデータの破損への対応

最近Slackのデータをエクスポートしたところ、一部のメッセージが破損していた。具体的に言うと、ファイルへのコメントの一部でメッセージの内容とユーザー情報などの欠如が見られた。従来のSlackLogViewerはこれらの情報が存在することを前提に設計していたので、情報欠如により例外が送出され、異常終了する可能性があった。 本バージョンではとりあえず異常終了のみを回避しており、SlackLogViewer上では破損したメッセージの残骸(NoNameユーザーによる謎メッセージ)が表示される。もしかしたらファイルへのコメント以外にもこのような破損が生じるかもしれないので、その保険でもある。

3. その他

zipファイルへの対応ついでにjsonのパースを並列処理するようにしたので、チャンネルの読み込みが少し速くなっている。
また最近私はVisual Studioのプロジェクトを諸々CMakeへ移行させているのだが、本プロジェクトも同様にCMakeへ切り替えた。ただしGCCやClangでのビルドはまだ試していないため、MacLinuxで使用できるかは不明である。

なお、今回の更新により新たにQuaZIPとzlibの2つのライブラリを導入している。

余談

上述したQuaZIPというライブラリを発見したことが今回の更新の発端である。zipファイルを解凍せずに読み出す方法をずっと調べていたもののなかなか良い方法がなく、半ば諦めつつもあったのだが、まさかQt上でzipファイルを扱う専用のライブラリが存在したとは。
しかしこのライブラリの導入も一筋縄ではいかなかった。vcpkg経由でインストールしようとしたのだが、できなかったのである。問題はQuaZIPではなくてQtの方だ。Qt Web Engineをvcpkgでインストールしようとすると「ファイルパス長すぎ」とエラーが出てしまい、解消できなかったのだ。かと言ってvcpkgのリポジトリをアップデートすると今度はQtそのもののインストールが謎のビルドエラーにより不可能になってしまい、にっちもさっちもいかなかった。仕方ないので、Qt、QuaZIP、zlibをvcpkgに頼らずすべて手動でインストールした。C++の環境構築は何故こんなに面倒臭いんだ!

Qtもvcpkgも使うんじゃなかった、とちょっと後悔し始めている。しかし有力な代替案があるわけでもないのが悲しいところ。C++自体を使うべきじゃなかったって?……まあ、うん、SlackLogViewerに限って言えばそうかも知れない。本アプリケーションはC++にしかない独自機能などはほぼ必要ないし使っていないので、他の言語でも十分実装可能だろう。

先日過去ログの自動バックアップ機能を付けてほしいという要望があったが、今回の更新で私の余剰時間を使い果たしてしまったこと、恐らくどこかに同等の機能を有するツールが転がっているであろうことを理由に一旦見送ることにした。需要が多くて、今回のように偶然時間が出来、かつ私の気分が上向いたら作るかもしれないが、期待しないで欲しい。