正直誰向けの記事なのかよくわからないですが、多分僕向けのログなのでしょう。
2月のまとめ記事でも書いていたんでうが、ノルマ監視は僕に対して上手く機能しなかったので、いっそのことロギングツールとして方向転換させて、ツール自体を改良しました。
クリスタ特有の罠に苦労させられた点等を(これまた)ログとして記事に残しておきます。
全くイラストとは関係のないプログラミングの話になるので、もし興味があれば……
仕様のおさらい
Windows11上で動作するデスクトップアプリケーション。
目標時間を分単位で設定。
CLIP STUDIO PAINT(以下クリスタ)がアクティブ状態、かつクリスタがアイドル状態ではない場合に目標時間を1秒毎に減算。
目標時間を全て使い果たすと、画面上の文字を赤くして超過時間として加算されていく。
リセットするか、目標時間を再設定するまでは残り時間はアプリを閉じても保存される。
変更要件
正直なところ、ノルマ設定したところで、ノルマ未達でも追われるものが特にないので効果はほぼなかったというのが一番の理由です。
元々MMORPGとかでも露天の販売ログとかを貯めて分析したりするのが好きだったことを思い出して、せっかくだから日別でどれくらいイラストに向き合ったかを集計してみたらモチベーションにも繋がるんじゃないかという思いつきで仕様変更することにしました。
また、可能であれば作品ごとに時間集計したいなぁとも思いました。
整理すると以下。
- 画面に表示させる時間を、カウントダウン方式、カウントアップ方式で切り替えられるようにする
- いつか分析するように、ログはデータベースに保存する
- 作品ごとに注ぎ込んだ時間が見られるようにする
- 全体的なUIの見直し
3ポチ目がヤバかったです。
カウントアップ方式の追加と切り替え
今時点ではノルマ時間を減少させるよりも、経過時間を表示したほうが◯◯時間がんばった!という達成感を味わえる可能性が高いので、これを実装します。
ただ、やるかどうかはわかりませんが、ワンドロとかをやるとき用にカウントダウン機能も残しておきたいので、メイン画面上でトグルボタンを追加して、カウントダウンとカウントアップを切り替えられるようにしておきました。

こんなやつですね。
もちろんリセットしたときは、カウントアップモードを選択中は表示時間がゼロに。カウントダウンモードの場合は各自で設定した時間にリセットされます。
あと、小さいことですがメイン画面に監視するアプリを表示するようにしました。

あまり意味はない気がしますが、なんとなくで追加。
関連して設定ファイル周りの処理も修正していますが、ユーザーの目にはほぼ触れないので詳細は割愛。
ここは簡単でした。
ログをデータベースに保存する方式へ変更
初期から思っていたことなんですが、テキストファイルにログを吐いていた部分をDBに保持するよう変更しました。
普通にDBを作成して普通にログを更新、一部でログの読み取りもやっていますが、そう難しいものではないです。
DBにはSQLiteを採用して、特にロックも何もせず生で持っています。
今時点では1テーブルのみなので、極小DBです。
今後ちょっと作品名を手動で登録しておけるラベルテーブルを作るかもしれませんが、まぁおいおいです。

こんな感じで生データが保存される。
項目としてはテキストに吐いていたときとほぼ変わらずですが、ProjectNameカラムを追加しています。
次の仕様を盛り込んだ際に使ったハッシュ値が保存されています。
集計キーですね。
ここまでも簡単。
作品ごとに注ぎ込んだ時間が見られるようにする
これが無茶苦茶大変でした。
あくまで僕が使っているのがクリスタなので、クリスタから編集中のイラスト情報を取ろうとしたんですが、3度の方式変更を経てようやく実現した次第です。
クリスタのタイトルバー

かなり小さいんですが、クリスタのタイトルバーを抜粋したのがこちらの画像です。
僕はイラストファイルに、いつからいつまで触っていたかをファイル名として入れています。
クリスタは編集中のファイル名がタイトルバーに表示されます。この画像の例だと、先日投稿したカリオペさんのイラストファイルですね。
実際のファイル名は「20260209-202602xx_森カリオペ_Bar.clip」なのですが、拡張子はタイトルバーに表示されません。
ファイル名から後ろに色々ついていますが、ざっくりと言えばキャンバス情報とCLIP STUDIO PAINT PROというロゴ的な文字列が引っ付いています。
クリスタはタブで複数の画像を同時に開くことができて、タブを切り替えるとタイトルバーのファイル名やキャンバス情報の文字が変更されます。
通常のWindows上で動くアプリケーションの場合、ここのウィンドウタイトルは比較的簡単に取得することが可能なんです。
GetWindowTextというWindowsAPIを呼んであげればいいだけなんですが、クリスタだとこの結果が何をどうやってもCLIP STUDIO PAINTという文字列しか返ってきませんでした。
対象のコントロールを見つけられていないだけ、という可能性もあったので、windows11に標準で搭載されている、視覚障がい者向けの、画面に表示されている文字を読み上げてくれるアプリでクリスタを調べてみたのですが、どう見ても表示されているファイル名は何をやっても読み上げてくれませんでした。
そもそもイラストを描くためのアプリなので、目の不自由な方が使うことは想定していないのでしょうが、これには参りました。
OCRを試す
次に試してみたのはOCRです。
OCRというのは、Optical Character Recognition(またはReader)の略で、日本語だと「光学的文字認識」といいます。
要するに写真や画像を解析して文字データを読み取るという機能です。ざっくり言えば。
Windows11にはSnippingToolというスクショ取ったりOCRで文字列を読み取ったりできるツールが標準搭載されています。
Win+Shift+Tを推してみると、画面全体が少し暗くなって四角でOCRで読み取りたい場所が切り取れるようになります。

こいつだとクリスタのタイトルバーに出ているファイル名っぽいのが読めたので、同じOCRエンジンをプログラムから呼び出してOCR解析しようと試みました。
ですが、OCRに関してはズブの素人なわけで、OCRエンジンに渡す画像に対してどういう事前編集が必要なのか、有効なのかが全然わからないんですよね。
一応このあたりはGeminiとやり取りしながらトライ・アンド・エラーを繰り返していたんですが、どうやっても微妙に誤認識してしまい、安定感もなくて結構絶望していました。
画像の2値化や拡大、輝度調整等も組み合わせて色々試験したものの、半角数字と漢字が交じる関係上、片方を立てれば片方が読めないという一進一退状態でした。
Windowsに標準装備されているSnippingToolは相当レベル高いんだなって実感しました。
どうしようもなくなって、結局はOCR機能も捨てて、前回キャプチャした画像と今キャプチャした画像を比較して、変更がない場合は同じキーとして集計する方式で進めることに。
途中の苦難は端折りますが、ようやくこれでやりたいことが実現できました。
まぁとにかくめっちゃ苦労した。
全体的なUIの見直し

で、全体的にUIも見直しました。
アプリ用のアイコンもつけた。
あと、ダークモードとライトモードを切り替えられるようにもしました。

僕用のツールなんだから見た目切り替え機能とかは別になくてもいいんですけども、そのあたりはまぁ気分転換用ということで。
強力なログ分析機能
ログがシンプルな分、この後は強力なログ分析が可能です。
ログにはいつの作業なのか、どのイラストを触っているのかの情報も持っているので、後からどのイラストにどれだけ時間を掛けたのかも分析することが可能です。
分析機能については未実装ですが、スプレッドシートに生ログを貼り付けたら日別のグラフ程度はすぐ出るので、今回はここまで。
イラスト別に集計できるようにログは保存していますが、DB上ではイラストの情報がハッシュ値で保存されているので、ログだけ見てもどのイラストかはわかんない状態。
これについてはもう少し機能追加する必要があるんですが、有料版のGeminiの制限があるので徐々に実装していく感じになります。
いくつか不具合も見えているので、そのあたりも修正しないとですが、取り敢えずは仕様変更の大筋は実装できたので、当面はこのまま使ってみるつもりです。
満足感はそれなりに。
引き換えに今月のイラスト制作が全く進んでいないという悲しみを背負って。

Comment