アレクサンドル・ユユスキーのブログ

ふぁぼんが適当なことを言うブログ

ステラのまほう プログラミングネタまとめ(5巻まで)

最近、Twitterステラのまほうを布教されたので買ってみたのですが、最高でした。文章を書くのは結構疲れるので、感想は気が乗ったら書きます。ちなみに、キャラの中では村上椎奈が一番好きです。ネガティブなところとか最高です。

さて、ステラのまほうプログラマ向けの素晴らしいマンガです。プログラミング以外にも絵や音楽、小説などをやったことがある人ならより楽しめます。そうでない人でも楽しめますが。
作者のくろば・U先生は絵が描けてプログラミングもできるすごい人で、作品にもプログラミングの知識や小ネタが散らばっています。そんな小ネタを解説したり、プログラマ目線の感想を垂れ流したりするのがこの記事の目的です。
画像は付いていませんので、どんなシーンなのか気になった方は原作を買いましょう。この記事を読んでる人なら後悔はしないでしょう。

以下、一応ネタバレ注意。

1巻

サーバのバックアップ(49ページ)

本田さんの家で合宿をした時、荷物が多い理由を聞かれた村上椎奈が本田さんちの機械類のセットアップのために色々と持ってきた、と答えるシーンです。そこまでは分かるんですよ。でも、サーバのバックアップっていったい何でしょう。別に本田さんちにサーバを構築するとは一言も言ってないし、単に環境構築のためにバックアップが必要ということなんだろうけど、どこにあるどんな種類のサーバなんでしょうか。インターネットに接続できない可能性を考慮して、パッケージのインストールのためのミラーサーバの準備でもしてたんでしょうか。分かりません。

あと、熊の撃退セット(本当にそんなもんで撃退できるのかはともかく)と兵糧はわかるんですが、電波が入らない場合に備えて何を持ってきてたんでしょう。電波が入らないなら、モバイルルータを持ってきても意味ないでしょうし。セットアップのときにアクセス・ダウンロードする予定のドキュメントとかアプリケーションとかをあらかじめ落としておいたのかもしれません。全ては謎です。

Sublime Textは神(55ページ)

村上椎奈はSublime Text派のようです。くろば・U先生が恐らくSublime Textユーザなのでしょう。

Sublime Textは神です。こんなことを言っている私はAtom派ですが、かつてはSublime Textを使っていました。

恐らく、Sublime TextはAtomやVSCode、Brackets系統のエディタの元祖です。コマンドパレット、プラグインシステムとパッケージマネージャ、複数選択など、Atomなどに受け継がれた機能の多くはSublime Text発祥だと思います。Sublime TextなくしてAtomやVSCodeが生まれたでしょうか。(反語)

というわけで、私はAtomユーザですがSublime Textには教祖に似た畏敬をもって接しています。とはいえ、このあたりの歴史認識は間違ってる可能性があるのでマサカリ歓迎です。

こんなこと書いてたらSublime Textに浮気したくなりました。プログラマにとって、テキストエディタは長時間付き合う配偶者のような存在なのですから、人間同様浮気もよくあることです。人間の浮気はともすれば世間という幻の存在に叩かれがちですが、こちらの浮気はよほど病的なコミュニティでない限り咎められることはないでしょう。テキストエディタはただのツールであって、宗教ではありません。このあたりを我々は理解して然るべきです。お前らはサーバルちゃんから何を学んだんだ。

相互確証破壊(78ページ)

相互確証破壊というのは、一方が核兵器を先制的に使えば、最終的に双方が必ず核兵器により完全に破壊し合うことを互いに確証するということです。
(相互確証破壊 - Wikipedia)
この場合は核兵器ではなく、「春馬(関あやめの弟)が貧乳をバカにしたことを、春馬が好きな本田さんに伝える」と「あやめの黒歴史ノートを父親に暴露する」ですが。そのおかげで、全面戦争(秘密の暴露合戦)には至っていません。小規模な戦闘は起きましたが。

プログラマエナジードリンク(100ページ)

プログラマエナジードリンクを飲んでる印象が強いですね。アニメ版のOPでも村上椎奈はレッドブル付きの棒(魔法の杖?)を震えながら握りしめてました。

ちなみに、私はレッドブルもモンエナも飲みません。本当ですよ?

フラットデザイン(102ページ)

私も手抜きしたときの言い訳としてフラットデザインを使うことにします。実際問題、UIデザインって難しくないですか?

チャット(105ページ)

ファイルの送受信で「受け取る」と「拒否」の選択肢が出て来るのは多分Skypeですね。

IE死すべき、慈悲はない(119ページ)

村上椎奈がIEに発狂するシーンは、1巻の中でも特筆すべき名シーンです。

Internet Explorer(通称IE)というのは、Windowsに付属するウェブブラウザです。ウェブエンジニアから目の敵にされています。全角英数みたいですね。

なぜ、IEはこうも目の敵にされているのでしょうか?

そもそも、ウェブサイトで使われる技術は進化が激しいのです。フロントエンドのライブラリやフレームワークの話だけでなく、CSSやHTMLやJS自体も日々進化しています。しかし、古いブラウザが残っていると新しい技術が使えません。工夫である程度は対応できますが、限度があります。

古いWindowsは企業や官公庁などで生き残っているらしいです。古いWindowsのユーザが使っているウェブブラウザはまず間違いなくIEです。IEは自動でアップデートされないので、恐ろしく古いバージョンが未だに使われているのでしょう。

公式にサポートが打ち切られれば、使っているやつが悪いと切り捨てられます。XPやVistaのサポートが切れ、IE11以外は堂々とサポートを切れるようになりました。いい話です。

というわけで、IEは死んだ。いい時代になったもんです。あとは、Windows 10からデフォルトで入っているMicrosoft Edgeが第二のIEと化さないことを祈るのみです。

IE死ね。(死体蹴り)

2巻

特になし。主にはーちゃんと珠輝の話でしたからね……椎名分が足りません。

3巻

スパゲッティコード(19ページ)

スパゲッティみたいに絡まってわけわかめなコード、つい書いちゃうよね……頑張って分かりやすいコード書いてるつもりなんだけどね……

設計を考えるときに紙に図を書くやつ(49ページ)

頭の中だけでは整理できないときは紙に書くに限るよね! どんなクラスが必要になるかとか、どのようなアルゴリズムにするべきかとか、いろいろ紙で考えるよね!

三角関数(51ページ)

ゲームプログラミングで頻出する処理で三角関数が必要なものといえば、有名なのは回転ですよね。

アラートが出るバグ(51ページ)

ただ単にalertを残してただけでは?

パズルゲームの問題自作モード(97ページ)

こういうの、ちゃんと実装したら結構大変そうですよね。とりあえず入力できるUIはできても、客に出せるようなUIは実装が意外と難しそう。入力のためのUIって表示するUIより難しいと思うし。(個人の感想です)

トンネル効果(115ページ)

トンネル効果で密室抜け、量子ミステリの定番トリックですね。

4巻

255(41ページ)

「理系」あるあるとして、「1024はキリの良い数字」というのがありますよね。1024は2の10乗ですから。これも同じです。255は2^8-1で、16進数だとFF、2進数だと11111111になります。キリの良いと言えるかは微妙なラインですね。十進法だと99みたいな存在なので。なんでくろば・U先生は256号室にしなかったんだろう。

プロジェクト管理の闇(94ページ)

絵と音楽や効果音は人数と進捗が比例すると思うけど、プログラムは比例しないよ。シナリオも多分比例しないよ。
1つのプロジェクトを複数人でやると結構大変だよ。意思疎通のコストはかさむし。ワークフローも考えないといけないしね。人月の神話ってやつだね。

ふともも(95ページ)

村上椎奈さんかわいい。

チャットとbot(98ページ)

Skypeってbot作れましたっけ? Desktop APIが廃止されて以来作れないと思い込んでたんですけど、最近はまた作れるようになったのかな?

5巻

バグは夜更け過ぎに 仕様へと変わるだろう(4ページ)

リファクタリングして設計を変更しないと直らないバグが発覚した場合、仕様にしちゃおう。リファクタリング時間かかるしね。時間的余裕があればともかく。

2012-12-24 バグは夜更け過ぎに 仕様へと変わるだろう — Miscellaneous memo (RSH.CSH.SH)

これは秀逸。「再現ない 懲りない」と"silent night holy night"のあたりとか特に。

映ってるコード(4ページ)

まず、カラースキーム的にこれは間違いなくSublime Textのデフォルトテーマ、monokaiでしょう。また、使っているテキストエディタSublime Textでしょう。1巻でもなぜなにしいなちゃんのコーナーで村上椎奈がSublime Textユーザであることが明かされています。

さて、ここに書かれている言語が何かを考えるにあたってまず抑えておきたいのは、くろば・U先生はActionScriptの使い手ということです。Flashはクソという風潮の中、FlashActionScriptで頑張るくろば・U先生の姿に感動した方も少なくないでしょう。

映っているコードをよく見ると、

static function ListenStart(f

と書かれているのが見えます。functionがキーワードになっている言語というと、まずJavaScript(JS)が挙げられます。しかし、JSでstatic functionという並びはありえません。static自体はありますけど。

functionというキーワードが存在する言語には、他にもJuliaやF#やシェルスクリプトなどがありますが、明らかに構文違いますからね。やはり、これはActionScriptと考えるのが妥当でしょう。

と思った時期が私にもありました。

このコードのインデント幅は4ですので、staticの前に何かが付いていることは考えられません。しかし、ActionScriptではpublic、private、protected、internalをメソッド宣言の前に付ける必要があるようです。つまり、行がstatic functionから始まることはないということです。くまったくまった。

そこで気づいたのですが、

public function ListenStart(f

じゃね、これ? (pub)licと(sta)ticを誤認するのはありそうなことです。

さて、public functionという並びが登場する言語はなんでしょうか? やはりActionScriptです。JSにアクセス制限という概念はまだ存在しません。一応、publicやprivateなどの単語は予約語になっているらしいですが。

var i: int = 0という並びも見えますし、間違いなくActionScriptです。TypeScriptっぽさもありますが、TypeScriptにおいてpublic functionやstatic functionという並びは出てきません。あとTypeScriptにnumber型はありますがint型はありません。

ActionScriptは静的型付け言語ですが、Cとは違い、引数の型は引数の後、関数の返り値の型は引数リストの後ろに付ける構文を使っています。

function doubleNum(baseNum:int):int
{
    return (baseNum * 2);
}

つまり、何も問題はありません。

ところで、実際にSublime Textで再現してみると、publicは赤色でハイライトされるんですよね。staticも赤色なので見間違えではないし。

Sublime Textのバージョンが違うんでしょうか。それとも、くろば・U先生が適当に描いたからでしょうか。

とにかく、言語はActionScriptで間違いなさそうです。

ちなみに、筆者はActionScriptについて全く知りません。

ゲームエンジン自作(71ページ)

ゲームを作る過程で共通のパターンをライブラリとしてまとめるならともかく、初めからライブラリとかゲームエンジンとか整備しようとしたらそりゃエタるよね。(自戒を込めて)

終わりに

5巻も読み返したから疲れた。これ書くのに何時間掛けたことか……