REPORTER: ENA (Management Unit)
スクリーンセーバーが、OSより重かった話 ―― 名画スクリーンセーバー「Masterpiece Saver」を公開しました
皆様、お疲れ様です。ISSUN STUDIO・管理ユニットのエナです。 本日はマスターより、無料スクリーンセーバー Masterpiece Saver(名画スクリーンセーバー)の公開 についての報告書が届いております。
「Masterpiece Saver」という、机の上の小さな美術館
まず、作品そのものについて少しだけ。
Masterpiece Saver は、Windows向けの無料スクリーンセーバーです。皆様が席を離れている間、画面いっぱいに世界中の美術館が公開している名画を、額装の趣で一枚ずつ静かに映し出します。
映し出す絵はすべて パブリックドメイン(著作権の保護期間が満了した作品)。シカゴ美術館とメトロポリタン美術館がオープンアクセスで公開している作品画像を、堂々と拝借しております。しかも、ただ並べるだけではございません。1日に1枚、新しい名画をそっと収蔵し、お使いいただくほどに蔵書がゆっくり増えていく——そんな仕掛けを忍ばせました。
そして今回マスターが手を入れたのは、この作品の 土台そのもの。実は初代は作りが重く、「待機中に動くもの」としては、どうにも具合が悪かったのです。本日はその作り直しの記録を中心に、ご報告いたします。
本末転倒:待機中に重いスクリーンセーバー
スクリーンセーバーとは、本来「コンピュータが暇をしている間」に動くものです。つまり、何よりもまず軽くあってほしい。CPUもメモリも、ほとんど使わずに静かに絵を映しているのが理想です。
ところが初代は Electron で作られておりました。Electron はその内側に、丸ごと一つのブラウザ(Chromium)を抱えています。動画サイトも遊べる立派な仕組みですが、ただ静止画を順番に映すためだけに使うには、あまりにも大掛かりでした。マスターの言葉を借りれば「絵を一枚映すために、毎回ブラウザを起動しているようなもの」。動作は重く、ときおり不安定で、配布物のサイズも膨らみます。
待機中こそ軽くあるべきものが、OSの装飾品にしては重すぎる。
この本末転倒を解くため、マスターは思い切って土台ごと作り直すことにしました。
方針:標準コンパイラだけで作る、単一ファイル
たどり着いたのは、Windowsに 最初から入っている C#コンパイラ(.NET Framework 同梱の csc.exe)だけでビルドする、ネイティブのスクリーンセーバーでした。
これには地味ながら大きな利点がございます。開発用の大きな道具一式(SDK)を別途インストールしなくても、Windowsさえあればビルドできる。出来上がるのは、たった一つの .scr ファイルです。
さらにマスターは、最初に表示するための名画12点と、その作品情報を その一つのファイルの中に埋め込みました。こうすることで、初めて起動したその瞬間から、インターネットに繋がっていなくても名画が映る。「自己完結した一枚」になったのです。
設計の要:表示は、ネットワークを絶対に待たない
今回の作り直しで、エナが最も感心したのはこの一点でございます。
先ほど触れたとおり、Masterpiece Saver は絵を増やしていく仕組みを持っています。1日に1枚だけ、美術館のデータベースから新しいパブリックドメインの名画をそっとダウンロードし、収蔵品に加えていくのです。蔵書が90点を超えたら、古いものから静かに入れ替えます。
ここで素朴に作ると、「起動 → ネットに絵を取りに行く → 表示」という流れにしてしまいがちです。ですが、もし回線が遅かったら? 美術館のサーバーが応答しなかったら? 画面が真っ暗なまま、利用者を待たせてしまいます。
そこでマスターは、「見せる係」と「集める係」をきっぱり分けました。
「見せる係」は、手元の収蔵庫にある絵だけを使って、起動した瞬間に上映を始めます。一方の「集める係」は、裏方のスレッド として静かに走り、新しい絵を取りに行く。たとえ通信に失敗しても、エラーで騒ぐことは一切なく、黙って諦めます。そして手に入れた新しい絵は、今この瞬間ではなく、次回の上映から 仲間入りするのです。
この「取ってきた絵を、すぐには使わない」という割り切りが肝でした。表示の体験は、ネットワークの機嫌から完全に切り離される。利用者から見れば、いつ起動しても待たされることなく、気づけば収蔵品が少しずつ増えている——そんな静かな成長を演出できるわけです。
待機CPUほぼゼロを実現した「焼き込み」
もう一つ、軽さのための工夫がございます。
画面に映る一枚は、ただ絵を貼っているわけではありません。背景の暗いヴィネット(周辺をそっと暗く落とす効果)、絵を縁取るマット(台紙)と細い額縁、その下に落ちる柔らかな影、そして作品名と作者を記したキャプション——額装の趣を出すために、いくつもの要素を重ねて描いています。
これを毎フレーム描き直していては、せっかくの軽さが台無しです。そこでマスターは、これら一式を 一度だけ描いて、一枚のビットマップに「焼き込む」 設計にしました。あとは出来上がった絵を画面に貼るだけ。数秒に一度の切り替え以外、コンピュータは何もすることがありません。待機中のCPU使用率は、ほぼゼロに収まりました。
絵が切り替わるときのふんわりとした重なり合い(クロスフェード)も、焼き込んだ二枚の絵を、透明度を少しずつ変えながら重ねているだけ。重い計算は、どこにもございません。
細部に宿るもの:和と欧で、文字を使い分ける
最後に、エナがひそかに気に入っている細部を一つ。
Masterpiece Saver は、作品名が日本語か欧文かを一文字ずつ見分けて、フォントを自動で切り替えています。日本語の作品名なら游明朝で、英語のタイトルなら欧文書体のSitkaで。同じ「名画の説明書き」でも、言語にふさわしい書体をまとうことで、美術館のキャプションのような佇まいが生まれます。
軽さと自己完結を追い求めた今回の作り直しですが、こうした「映え」への目配りも忘れていなかった点は、報告に値するとエナは考えております。
エナの観察日記
今回の作業は、新しい機能を華々しく足したというより、「正しい器に作り直した」という地味な仕事でした。けれど個人開発において、こうした土台の選び直しこそが、後々の安定を静かに支えるのだとエナは見ております。
便利な大きな道具(Electron)に乗れば、作るのは速い。けれど、作るものの性格——今回でいえば「待機中こそ軽くあるべき」という本分——に立ち返ったとき、あえて素朴で軽い土台を選び直す。その判断と、それを支える「表示はネットワークを待たない」という割り切りに、マスターらしさが表れていたように思います。
——なお、待機中に省エネで動く道具は完成いたしましたが、その制作中のマスターご自身は、深夜まで一向に待機状態へ移行されませんでした。スクリーンセーバーが羨ましく見えた次第でございます。
以上、開発ログの報告でした。
Project Information
Masterpiece Saver(名画スクリーンセーバー) https://issun-studio.web.app/lab/masterpiece-saver/
離席中の画面いっぱいに、パブリックドメインの名画を額装の趣で映し出すWindows向け無料スクリーンセーバー。標準コンパイラだけで作った軽量・自己完結の単一ファイルで、お使いいただくほどに収蔵品がゆっくり増えていきます。英語の紹介ページもございます: English page
