Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

いまさらウィンドウ位置復元処理の話

はじめに

ずっとQiita Advent Calendarに参加してみたかったんですが、自信はまったくなくて参加していませんでした。
今年のカレンダー一覧を眺めていたときに「このカレンダーなら先々月あたりにあったことが書けるかも」と思ったので、記事にしてみました。

現象というか

2020年、急にテレワークが流行りました。(否応なしに巻き込まれた皆さん、お疲れ様です)
初めはソフト屋(およびソフトに強い人々)だけだったテレワークも、時間が経つにつれて別の専門性を持つ方々にも適用されていき、そして起きたのです。

「昨日まで使っていた○○が、今日起動したら表示すらされない!!」
 ※タスクバーには表示されていたんですけれどね。

タイトルと合わせれば、何が起きたか察した方も多いと思います。

  • 昨日=会社でいつもの環境(ノートパソコンにディスプレイを接続)
  • 今日=自宅に持ち帰ったノートパソコンだけの環境

接続していたディスプレイに○○のウィンドウを置いたまま終了し、ディスプレイがない状態で立ち上げ直した。
そして○○に実装されていたウィンドウ位置(およびサイズ)の復元処理が、存在しないディスプレイ側にウィンドウを表示した。

ウィンドウの復元処理を実装した or しようと思ったことがある人なら、直ぐにわかる現象かもしれませんが、専門外の人はパニックです。
数日にわたり、質問者と○○の部分が変わっただけの質問が何回もありました。いつも同じ助言で皆さん解決したようです。
対処は、Alt+SPACE → M → 矢印キーでウィンドウを見えるところまで移動する。それだけです。

なお、Win+矢印キーはこの現象にはあんまり役に立たないです。
Windows10 21h2ぐらいで直るかしら?

なんと、皆さんおなじみ TortoiseSVN も○○に該当しました。

歴史は繰り返された?

Windows 95/98の頃でしょうか。いろいろな人がPCを手にできるようになって、インターネットもそこそこ使えるようになって、窓の手とかVectorとかのサイトを介して沢山のフリーソフトが生まれました。それは、沢山のプログラマが生まれたことを示します。

あの頃、結構な人数の人が思いました。私も思いました。
限られたデスクトップ領域、いつも使うソフトも決まっている。作業しやすい配置やウィンドウサイズもいつも同じ。だったら起動する度にその状況を再現してほしい。

そんな需要に応えるように、起動時のウィンドウ位置をWindowsにお任せするのではなく、記録した前回値で表示するコードを実装するソフトが増えました。
その処理をどう書けば良いのか、サンプルコードと共に掲載するWeb記事も増えました。

それらの大半が 考慮不足 でした。
当時、この考慮不足を指摘し、考えねばならぬことをまとめた素敵なブログ記事があったのですが、いまさら検索しても見つかりません。どなたか「これじゃね?」という方は是非ともコメントでお知らせいただきたく……。

でも、当時のパソコン環境のおかげで不具合は顕在化しませんでした。当時はタワーと呼ばれるぐらい重いパソコンとブラウン管モニタが、今よりずっと高額でした。モニタの解像度も、Windowsが扱える解像度も数種類で、Videoカード(マザーボードにGPUが乗っているなんて有り得ない)だって高くて、モニタが2台ある環境なんて出版関係ですか?みたいにレアでした。

Windows XPが出始めた頃でしょうか。液晶ディスプレイを使う人が増えました。今のと比べものになりませんが、ノートPCも出てきました。使える解像度も種類が増えました。(WXGAが2種類あるのは勘弁してほしい)

その結果、「顕在化しないんだから良いじゃん」と放置されていた考慮不足が遂に顕在化します。

前回値を覚えたタイミングと、それを読み込んだタイミングで、デスクトップ領域のサイズが違う。

その考慮不足です。

結果、ウィンドウが見えないところに表示されたり、サイズがハチャメチャで戻すのに苦労したり、 たかが 親切機能のためにソフトを使うまでに 余計な手間 を払う羽目になった人は多いのでは。
ちなみに、この考慮不足があるコードの多くでは、前回値を覚える際に「ウィンドウが最大化 or 最小化されている場合」の考慮不足も多く見られます。
 最大化したまま終了したら、通常のウィンドウサイズがディスプレイめ一杯に表示された。
 最小化したまま終了したら、タイトルバーだけのサイズで表示された。
この経験がある人、それなりにいるのでは?

しかも、プログラマからしても たかが 親切機能のために時間も頭も使いたくないんですよ。
仕事としてプログラム組むようになってからウィンドウ復元処理を要求されると「それで売れる訳でもないのに面倒でバグの温床を要求しやがって」と思いましたね。
実際、今も使われているソフトの復元処理、バグがあっても放置されているでしょう?

だからこそ、ン十年も前と同じことが、2020年に再びプチ騒動になった訳ですが。

Windows UX Guidelines

ようやく「技術の変化」に触れた話です。前置き長すぎでした。

この騒動でやっぱりアテにするのはUX guidelinesかなと思いまして。だってWindowsアプリのユーザビリティのお話ですもの。
ということで、Windowsアプリケーションを作る人間が一読しておくべき もの、Windows UX Guidelinesを引いてみましょう。

Windows98~Windows7版まで、その中にはウィンドウの配置について言及がありました。
つまりアプリが起動したときに表示するウィンドウの位置は、プログラマが責任を持つものだったと解釈できます。

構造すら刷新された最新版「Design and code for Windows apps」では、ウィンドウ位置の話が見当たりません。
まあ、マルチデバイス=スマホすら想定した状態でウィンドウ位置って言われても...とは思います。

上記と同じ考えでいけば、もはや (Windows10以降では) ウィンドウ位置はプログラマが関与すべきでないものになった、と言えるでしょう。

ディスプレイの解像度だけなら未だしも、テキスト他の拡大率まで 再起動なし でホイホイ変更できる環境で、ウィンドウ位置や配置を制御するコードをバグなく実装するの、想像するだけで面倒ですね。払ったコストだけのメリット、もう得られないでしょう。

私見に溢れたまとめ

まさか2000年頃の騒動を COVID-19が再燃させるとは思いませんでした。という驚きと共に私見で〆ます。

ウィンドウの復元処理なんて無駄な実装はいますぐ削除しよう!

_mamo_
WinXP時台から Windowsターゲットのdesktop applicationを作るプロジェクトのPLをしているが, メンバにC#やWPFやUWPやUX Gudelinesに明るい人が誰もいないという現実と戦っているなう。 職場での開発環境の「普通」はVS2012 → 最近さすがにVS2015になった! って、相変わらず苦しい...。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away