Python tkinterでCSVを読み込んでチャットアプリ風に読み込むアプリを作ってみた

NO IMAGE

弊社でメインで使っているチャットアプリ(自社製品)のサービス終了に伴い、ログを表示し検索できるアプリが欲しいなと思い、作ってみました。

Teamsとかが流行る以前の2015年あたりから使われていたんじゃないでしょうか。

結構貴重なログも残っているので、弊社内でそういう需要があるんじゃないかなと思いながら…。

要件

・ログ自体はチャットルームごとにCSVファイルで出力されるので複数のCSVファイルを読み込める(3年目の私で88ルーム=88ファイルある)

・ローカル環境で動く(ユーザによって参加ルームが異なるのでAWSなどでホスティングしなおすのは費用的にも不可)

・すぐに作れて誰でも使える(提供が遅くなっても需要はなさそうですし、特殊なインストールが必要なのも面倒なので不可)

・GUIで動かせる(想定ターゲットは非エンジニア)

・検索機能とログの表示機能を有し、デザインは弊社製品と似たものとする。

使用技術

以上の要件を満たすには、Pythonのtkinterを使うことにしました。

その上で、pyinstaller で実行ファイル化してpythonがなくても実行できるようにしました。

C#も考えたのですが、Macにも対応させたいと思いました(とCSVの処理の速さが不明なため.)

作成物

こんな感じです。

このようにCSVの各行を読み込んで、チャットのように表示できます。

ちゃんと検索もできますし、意外と良い出来です(笑)

工夫したところ

  • マウスホイールでチャットを辿れるようにした
  • 読み込み中の場合は、画面を表示させないことでユーザーに読み込み中であることを伝わるようにした
    • tkinterのローディングアイコンは作るのが大変と判断した
  • さくさく動くように、データの読み込みを50件毎もしくは、高さ20000文字以内とした。
    • tkinterの動作要件なのか、一気にCSVを読み込んで表示することができなかったという背景もある。
  • 配色
    • デザインを担当している方に教えてもらった。
      • 当初はハイコントラストで目が疲れる感じであった。
  • アプリのロゴ
    • tkinterのロゴだとつまらないので、自分でロゴを作って埋め込みました。

つまったところ

  • tkinterでスクロールを縦二つで行えるようにすること。
  • CSV読み込み後のスクロールバーの高さの計算
  • CSVがなぜか全て表示されない件(高さが一定を超えると表示されないようだ)
  • CSVデータの改行コード・インテントが上手く表示されない件
    • CSVデータでは改行コードが//nのように、2つスラッシュがついていることが原因だった。
  • 表示の遅さ
    • スレッドを使ってみたところ、まぁ使えるかな?という風になった

作成日数

構想・設計…3日

作成…10日

レビュー・改造…7日

コードは1000行近くになってしまった。

the密結合になってきており、誰かに助けてもらうことも、改造も難しくなってきているので、

デザインパターンをお勉強して適用しようと思います。

参考文献

Modern Tkinter for Busy Python Developers

tkinterのコミッターが書いている本。英語の本ながらこれが一番参考になった上に、分かりやすかった。

日本語の本は、初心者向けが多くあまり参考にならなかった。

…とはいえpythonで作るのはちょっと面倒ですね。