宮崎に帰省したら5歳の息子の為に月齢カレンダーアプリを作るはめになった話
成果物はこちらです。
きっかけ
今年は7月30日から8月14日まで宮崎県の実家に家族4人で帰省していました。
私が所属しているBrewusはフルリモートなので飛行機で移動となる初日と最終日以外は実家でリモートワークしていました。
帰省中に日向灘地震にも遭遇しましたが、私の実家は所謂「県北(けんぽく)」と呼ばれる震源地から遠い所でしたので、震度3から4程度で余震も少なく米がなくなることもありませんでした。
午前8時から9時半くらいの仕事前(会社開始は10時)には、実家の車を借りて弟に助手席に座ってもらい20年以上ぶりに、車の運転をして少しだけ脱ペーパードライバーをしたり、土日は海や川へ行ったり、夜は息子の天体観測に付き合ったり、2週間で3回も実家の庭でBBQをしたり充実した地方暮らしをしていました。
さて、皆さんは宮崎県の観光地と聞いてどんなものが思い浮かびますか?高千穂?霧島?日南のモアイ像?青島?サーフィン好きだと日向市の海岸でしょうか?
私のお勧めは、宮崎駅から5分程度で行ける、宮崎科学技術館です。
関東近郊の方に分かりやすく言うと、つくばエキスポセンターの宮崎県版です。
ここには実寸大のロケットがあり(つくばがH-IIロケットに50m対して、宮崎のはH-Iロケット40m)科学の実験を色々体験したりできますが、個人的な目玉は1987年当時ギネスにも登録された事もある直径27mを誇るプラネタリウムで、つくばの25.6mよりも大きいのです!(2022年の時点でも世界でも6番目)
そんな場所に大人1人760円、こどもなら310円(3歳以下無料)で行けちゃいます。
(プラネタリウムなしならもっと安いです)
そんな中、東京に帰ってきた週末のこと息子が一言「月の観察がしたい」と言ってきました。(去年もやったのに……)
なぜか?……その週末(17日から19日)は、ほぼ夜なのに満月で外が明るかったのです。
とりあえず、月齢カレンダーを用意したい
エンジニアになら耳にする「車輪の再発明」(誰かが作ったものをわざわざ作り直す)をやってもしょうがないので、既存のサービスを探しました。
そこで見つけたのがpdfにもできる家勉キッズさんのサービスでした。
「うむむ…pdfにはできるが、月の画像が小さい……」
素晴らしいサービスなんですが、5歳のこどもに曜日以外の部分が「ひらがな」にならなかったり、どうしても個人のニーズとはズレが生じてしまいます。
「よし、文句を言うぐらいなら、エンジニアらしくHackしよう!」
そう決めて、usercssで暫定対応します。
table img{
background:#000;
width:78px !important;
height:78px !important;
margin-left:-42px !important;
border-radius:50% !important;
}
「どや!これぞお手軽Hack!」
そうやって、IT父ちゃんの威厳を勝手に感じながら12月までのpdfをDLし、ウチにあるモノクロプリンタで2up(1枚の用紙に2ページレイアウトする機能)にして両面印刷し、ラミネート加工をして、一旦は子どものご機嫌をとりました。
子どもならでは問題発生?
翌日のこと、どうしても頭に残っていることがありました。
「パパ、この(印刷したカレンダー上の)お月様とお空の月の大きさが違うよ」
で、調べると昼の12時に月があるものとして換算していることが分かりました。子どもってこういう大人ならスルーしがちな問題もしっかり提起してくれます。
「あと、この紙のやつお月様が灰色で暗いね……」
これです。
黄色をモノクロ印刷すると微妙にグレーになるのがお気に召さないよう。
しかもラスタ画像埋め込み式なためchromeのextension書けばできなくはないですが、前述のcssで大きさ変更した時のように簡単に黄色から白にするのはちょっと面倒です。
そして、ウチのカラープリンタは用紙を手動で入れ直さないと両面印刷できません。
大体、月の満ち欠けという「光と影」でモノクロで表現できるものの為に、カラープリンタのヘッドクリーニングなどのご機嫌を取る作業をしたくないのです。
ここで、いつものヤツですね。
四の五の人のサービスに文句言うくらいなら自分で作れと。
「まぁ、他人が作った月齢計算のライブラリとか絶対あるから簡単っしょ」
そんな、気持ちで毎年恒例の父親の夏休みの宿題決定です。
車輪の再発明
そこから、2時間程度である程度のものはできたんですが(A4用紙に最適化するcssが一番面倒でした)そもそも既存の月齢を教えてくれる無料APIを使ったり、ライブラリを使って試行錯誤する度に
「色々割り切れば簡単なアルゴリズムなのにAPIやライブラリ使うのってなんだろうな……」
という気持ちになりました。
肝心な月の満ち欠けが、デフォルメされてなかったり
ご丁寧にグラデーションかかってたり(オフにできるけど)
絵文字で再現してくれたり
満月を1として考えて計算をやり直さなきゃいけないとかetc……
「もう、自分で1から作った方が早いな……」
ということでAPIもライブラリも使わないことになりました。
(日本の休日判定だけは外部のライブラリを使ってます)
また、つまらぬものを作ってしまった
一々「作成」ボタンを押さないといけないとか
インターフェースがイケてないとか
スマホ対応してないとか
pdf作れないとかetc……
ツッコミどころは沢山ありますが(というかchromeの印刷機能でpdf作れるし!)例えプリンタである程度ページの設定ができたとしても
「2upの両面印刷した時に、楽に1月の裏に2月が来て、お月様がでかく表示されればいい!」
突貫の個人開発なんて、この程度でいいんです!(言い訳)
いつもなら頑張ってsvgでfaviconとか作ったり、もうちょっと頑張りますが、印刷物になるのが目的で、それもこども相手です。
目的と手段を間違ってはいけません。そして子どもは待ってくれません。
まとめ
スカイツリーのプラネタリウムは時間も短くお値段が都会のお値段です。
そもそも東京で空を見上げても星の見える数が全く違うので、その土地専用の独自コンテンツを用意できないってのもあると思いますが、思いついた時にプラネタリウムに行ってみるのもいいなと思います。
2024/08/26以下 追記
都内のプラネタリウムで検索したら「葛飾区郷土と天文の博物館」が大人の入館料が100円、プラネタリウムが350円と破格(?)でした。
実際に足を運んでみたところ、科学の実験コーナーなどはありませんが、都内で「星を見る」という事を考慮すると天体観測室もあり非常に良いと感じました。
追記ここまで
残暑厳しいですが、秋の空も近づいています。
皆さんも夜ふとした時に月や星を見てみてはいかがですか?
サポートしていただいたら娘・息子に何かプレゼントしようと思います! 多分、ミルクorトミカになると思います。 面倒な方は、LINEスタンプを購入していただいても大丈夫です。 https://store.line.me/stickershop/author/261022/ja