ashelの日記スマートフォン用の表示で見るashelの日記この広告は、90日以上更新していないブログに表示しています。始めたきっかけは、先日のエントリにも書いたとおり開発合宿だったのですが、だいぶ前からこういうものを作りたいなあという漠然とした思いはありました。その頃は吉里吉里/KAG互換とかを考えていました。いざ開発合宿のネタとして採用しようとして、実際に調べてみると、吉里吉里/KAG互換のものを2泊3日の開発合宿中に作るのは不可能に近いということがわかりました。それに高機能で仕様もかなり複雑になりそうなので、そんなに高機能でなくても良いのではないかと思い、思い切って独自仕様で作ることにしました。独自仕様で行くとなると、今度は仕様を決めなければいけません。仕様を決めるにはどうしたらよいか?僕はプログラムを書くときは、まず最初にユースケースを書き出すことから始めるようにしています。ユースケースというのは、「このプログラムで何ができたらいいか」というのを具体的に列挙したもので、仕様を作る上での指針になるものです。Softwareという本を読んで学びました。ユースケースとして参考にしたのは、前のエントリでも書きましたが、ニコニコ動画でNovelsM@sterと呼ばれる、ビジュアルノベル風画面の動画です。僕はこのジャンルの動画が好きでいろいろ見ていたので、「この動画が作れるくらいの機能があれば十分だろう」と考え、これらの動画を観察してユースケースを作ることにしました。実際に参考にしたのは、こちらの動画やこちらの動画などで、当時作成したのがこちらの文書です。結果的に多くの機能を実現できたのですが、まだできていないものもありますね。今見返すと面白いです。あとは、Web上で動かすとなるとJavaScriptで書くしか選択肢がなく、かつライブラリを使ったほうが早くできるだろうということから、tmlib.jsを使うことにしました。enchant.jsでもよかったのですが(以前テトリスを作るのに使ったことがありましたし)、使ったことがないものを使ってみたほうがいいかなと思ったのでこちらにしました。結果的には、tmlibの方が自分に合っていたので、良かったと思います。tmlibの勉強は、こちらのブログの「フラットデザインを使ったタッチゲーム」をひと通り作ってみました。良いチュートリアルで、おおよそ機能を掴むことができたと思います。あと、合宿の最後に見せられるようにするためには実際にビジュアルノベルを作らないといけないので、シナリオの大まかな筋を考えたり、立ち絵や背景の素材を集めるのもやりました。立ち絵は、だいぶ前に見て、凄いなあ、いつか使ってみたいなあと思っていた碧茶さんのミクを使わせていただきました。結局、開発合宿の前に行った準備は以下のものでした。名古屋の近くにある西浦温泉という場所で行われました。海の近くで海産物も美味しく、眺望も素晴らしい温泉地です。Softwareによると以下のようになります。ユースケースを書く要求仕様を書く実装仕様を書く実装する(同時にテストも書く)事前の準備ではユースケースまでできていたので、本来は要求仕様を書くところなのですが、時間がないので今回は省いて、いきなり実装仕様を書くことにしました。実装仕様をどういう風に書くかは、人によって違うと思います。僕の場合は、オブジェクト指向で考えるのに慣れているので、そのプログラムにはどのようなクラスがあるかどのようなメソッドを持っているかを書き出すようにしています。合宿中はノートパソコンを使っていて、パソコンの中で書くと見ながら実装するのに不便だったので、メモ帳に書いていきました。当時書いたのがこのメモです。メッセージボックス(ダイアログ)、背景の画像、人物の画像という構成になってますね。この構成は今もあまり変わっていません。スクリプトを実際に駆動するマネージャクラスの仕様が見つからないのですが...メモをなくしたのか、実際に書かなかったのか、これについては忘れてしまいました。したメモですが、他人に説明しなくてよい(自分がわかればいい)のであればこのくらいで十分です。合宿中は、このメモを元に機能を実装していき、ある程度できたところでスクリプトを書き始めて、足りない機能を追加して...という感じで進めていきました。3日間でだいたい85コミット、JavaScriptのプログラムが500行くらい、スクリプトが700行くらいになったみたいです。スクリプトの行数がやたら多いのは、この時点ではまだスクリプトのパーサがなかったので、内部構造のJSON(パースしたらこうなるという予定のデータ構造)をそのまま書いていたのと、あとウェイトを自動で入れる仕組みがなくて、全て手動で入れていたからです。今のスクリプトは600行くらいで収まっています。終わった後、公開に向けて機能を追加したり、サイトを整備したりしました。開発だけに集中する開発合宿と違って、日常生活の中で開発のための時間を取るのはなかなか難しいです。コミットログを見返してみると、8月初旬のの合宿が終わった後、年末までに集中して開発を行えた日は10日しかありませんでした。年が変わって、3月21日のサイト公開までに、プログラムがおおよそ完成するのに3日間、データのバリエーションを増やしたり、サイトを作ったりするのに10日かかったみたいです。最終的に、コア部分のプログラムコードは1200行程度くらいになりました。合宿前から数えて、トータルだと、tmlibの勉強に1日ユースケース、データ等の事前準備に1日プログラムを書くのに15日スクリプト(シナリオ)を書くのに1日サイトを作るのに10日というのを半年間でやったことになりますね。自分が開発に取れる時間とか、プログラミング能力とかはもうそんなに向上しないと思うので、このくらいが僕が個人で作ることのできる現実的な開発規模なのだと思います。最後に今回の開発全体を振り返ってみて、自分でも気がついていなかった発見があったりして面白かったです。今後もやりたいことはいろいろあるので、今後の開発が途中で投げ出すことにならないように、今回の振り返りを活かしたいと思います。月別アーカイブはてなブログをはじめよう!ashelさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。