お出かけできない夏休みに自宅で花火大会を開催
なかなか気軽にみんなでお出かけもしづらいご時世、もともと引きこもりの私は特に問題ないのですが、5歳の娘にとってはつらい時期です。
せめて、夏の思い出に花火くらいは見せてあげれないかなと思い、プログラミングを使って自宅で花火大会を開催してみることにしました。
プログラミングで花火を打ち上げる
早速花火を打ち上げるプログラムを作ることにしました。慣れているPythonで作ろうかと思ったのですが、以下の点からProcessingという言語で作ることにしました。
- 比較的誰でも簡単に動かせる
- 映像や音声を扱うのが簡単
- バイナリパッケージの配布も可能
既に作っている人いないかなーと思い調べてみたら、良さそうな花火のプログラムがMITライセンスで公開されていたので、そちらをベースにキーボードをトリガに花火を打ち上げるプログラムを作成しました。
ベース作った時点で、一人でちまちま作っても、自分の実力だとあんまりクオリティ上がらなそうだったので、プログラムのソースをGitHubで公開すると共にQiitaで作り方を公開して、PR(Pull Request、プログラムの改善提案みたいなものです)を募集することにしました。
そしたら、なんと@tomo-makesさんが改善に名乗りを上げてくれて、みるみる花火のクオリティが上がっていきました。
プロトタイプ
花火っぽくなってきた
続 #Processing でおうち花火大会。少し現実に近づいた。レンダリングをP2Dに、ポストエフェクトにPostFX(Bloomフィルタ)。
— tomo-makes@図解速習DEEP LEARNING (@tomo_makes) August 14, 2020
Firework, Particle, BallShellというクラス構成だけど、色んな花火の動きバリエーションをどこにどう実装するか、と普段と違う脳みそで考えるので楽しい。 #dailycoding pic.twitter.com/ms1sbGE7wz
#お家花火大会 #dailycoding 楽しくなってしばらく書いていましたが、 @karaage0703 さんのアイコンが夜空に輝くところまできて一区切り。
— tomo-makes@図解速習DEEP LEARNING (@tomo_makes) August 19, 2020
最初考えたものはほぼ実装でき、後はリファクタ。#processing のOOP練習になり、アニメーション一般をどんな文法、気持ちで扱いたくなるか理解が深まった。 pic.twitter.com/RVA1R23X4w
@tomo-makesさんには本当に感謝しています。OSSでの開発の力を感じました、これが伽藍とバザールですね(全然分かってない)。
お家で花火大会開催
開発から2週間後、いよいよお家で花火大会開催してみました。
セッティングはPCとプロジェクタを繋ぐだけです。
少しでも大きく写すことを優先して、スクリーンは使わずに、白い壁に花火を投影しました。多少歪みなどありますが、花火の場合はそれほど問題ありませんでした。
花火をみる娘
娘のリアクションを動画で。予想以上のリアクションで喜んでくれました。
まとめ
プログラミングを使って、娘のためにお家花火大会を実施しました。娘も予想以上に喜んでくれて良かったです。またプログラミングも地道に改善しつつ何度か開催したいなと思います。
今回は、プロジェクタを使いましたが、大きなテレビなどに写しても家族で楽しめるのではないかなと思います。ソフトも、ある程度知識のある人なら、クリックとコピペで動かすことができますので、以下のQiita記事を参考にチャレンジしてみてください。
ソフトはGitHubで公開されているので、開発も誰でも参加できます。@tomo-makesさんが機能を追加しやすくするソフトの構造にしてくださっています。OSS開発は初めてという方も、これを機会に是非チャレンジしていただけると嬉しいです。
誰で簡単に動かせるように、バイナリパッケージの配布や、ブラウザでクリックするだけで動かせるWebアプリとしての公開などもしたいなと考えています。こちらも、協力してくださる方(勝手にやりたいという方)、大歓迎です!
プログラムの力で、夏の終わりにお家で大きな花火を打ち上げましょう!