5.1さらうどん - 過去ログ

過去ログ倉庫です

gitをgithub向けに拡張するhubが超便利

git

githubのリポジトリをコマンドから作成できないかなぁ、と探していたらこんなものを見つけた。

defunkt/hub

これはなに?

これを使うと

git init
git create -d "Description!!!!"
git push -u origin master

とするだけで簡単にremoteリポジトリが作れてしまう。お便利!

他にも

git clone username/repository

と言った形式でcloneやsubmodule addができてしまったり

git browse

などと実行することで、remoteリポジトリをブラウザで開くことも!


他にもpull requestやforkなんかもできる。ベンリベンリ。

インストール

最近、githubのAPI Tokenが廃止になった関係で、最新版じゃないと動かないので注意。

GitHub API: Moving On

brew install hub

でOK

hub --version #=> hub version 1.10.1

と表示されることを確認する。

brew upgrade

せずにハマっていた……。

その後、

hub alias -s zsh >> ~/.zshrc
source ~/.zshrc

と実行し、hubのaliasを設定することで、gitコマンドが拡張され、hubのコマンドをgitコマンド経由で実行できる。


もちろん、他のshellにも対応しているので、利用しているshellによって適宜書き変えるが宜し。

zshで補完する

追加されたコマンドをzshで補完することもできるので、設定しておくと幸せになれる

curl https://raw.github.com/defunkt/hub/master/etc/hub.zsh_completion > $HOME/.hub.zsh_completion
echo 'source $HOME/.hub.zsh_complation' >> ~/.zshrc
source ~/.zshrc

音を奏でる奥スクロールRPG『VOXQUEST -オクスクエスト-』公開しました

iPhone向けゲームとして、AppStoreにて公開しました!

f:id:gigi-net:20120414223307j:image
f:id:gigi-net:20120414223306j:image


App Store - VOXQUEST
Kawaz - VOXQUEST-オクスクエスト-

ジャンルは、音ゲーのような、RPGのような、アクションのような、不思議なゲームです。

あまり既存のゲームでは説明できないようなジャンルのゲームなので、是非遊んでみてください!


GlobalGameJamのあとに、仲間内で行った「強くてニューゲームジャム」により、2日で企画、プロトタイプが完成し、その後、1ヶ月かけて完成度を高めた作品です。


プログラムは全て僕が担当しており、企画や作曲、デザインは@, @, @、ttntawasiさんに手伝って頂きました。ありがとう!


今回は遊びやすさを心がけて作ったつもりなので、インターフェイスのわかりやすさや、意図的なレベルデザインなどを意識しました。

序盤はチュートリアルを兼ねる程度の難易度で、終盤は一発クリアは難しいというレベルデザインはかなり絶妙に構築できたかなぁと思います。


ゲームの攻略として言えることは、かかるターン数と与えられる総ダメージのコストを考え、以下にパフォーマンスの良いコマンドを立て続けに選択できるかにかかっています。

初見でクリアするのは難しいとは思いますが、繰り返し遊ぶことで確実に成長でき、最終的にはノーダメージクリアも可能です。


このゲーム、時間の決まっていない曲データを、1小節、1パートごとに分離して、シームレスに曲が繋がり、同時に多チャンネル演奏するような実装になっています。

ドラム音と攻撃音が別々の音源になっていて、敵がどれくらい近づいているかによって、重ねるドラムを変更したり、次のコマンドが入力されたときに、対応する音をシームレスに演奏しているため、その辺りの処理が非常に面倒でした。


ゲームフレームワークとしてはKobold2Dを利用しており、音周りはOpenALObjective-CラッパーであるObjectALを利用しております。

ソースコードはgithubに公開中です!

giginet/VOXQUEST


良かったら感想なんかも教えてくださいね!

iPhone Dev Sap勉強会でKobold2Dについてセッションしました

iPhone Dev Sap勉強会 Jan, 2012 : ATND

参加してきました。

また、iOS/Mac向け、ゲームフレームワークのKobold2Dについてお話させて頂きました。
機会を頂きありがとうございます!


スライドは発表時より加筆しております。口頭で話したけれど、重要なところ・基本的な情報が抜けていたので。
@さんにも突っ込んで頂きましたが、至らぬところが多いなぁと。


今回、とりあげたKobold2Dは、日本国内ではまだ誰も使っていない+取り上げていないようなので、良い情報を提供できたのではないかと思います。
本当は何かサンプルゲームを作っていきたかったんですけどね!


Kobold2Dに関する日本語の文献は、今のところ、僕が作った資料と、公式の日本語ドキュメント、ドキュメント訳者によるスライドの3つしかないようです。

日本語ドキュメントは、まだほとんど翻訳作業が進んでいないようなので、興味のある方は、やはり本家ドキュメントを参照されることをオススメします。
Home - Kobold2D™ - Kobold2D

Kobold2D ドキュメント - Kobold2D™ 1.0 Documentation (Japanese) - Kobold2D

Kobold2d users_guide_japanese



今回、発表前にちょこちょこ使ってみて、GlobalGameJamに向けての準備ができて良かったと思います。
本格的に使ってみるのはGGJだと思うので、GGJ終了後に開発したゲームについて記事を書きたいと思います!
『GlobalGameJam2012 in 札幌』開催します! - 5.1さらうどん

このスライドを読んで、少しでもゲーム開発仲間が増えたら幸いです。


今回、中心になっていた@さんともお話しさせて頂いたのですが、iPhone Dev SapはiOS開発では最先端の内容を扱っているのに、今までのセッションの資料などが共有されていなくてもったいないなぁと思った。
@notoroidさんによる、ARC(Automatic Reference Counting)についてのセッションを楽しませて頂いたのですが、続き物だったこともあり、前提知識や前段階の知識がない人には理解しづらい内容になっていたのではないかなぁと。
やっぱり、自分で触ってみないと、ハマるところや、便利さなどは体感しづらいと思う。

iPhoneの勉強会って、プログラマ以外の方も結構いらっしゃるので、セッションの内容としては浅く広く、最大公約数を取る感じになってしまうので、深い内容が扱いづらいですね。


最近Objective-Cばかり書いているけど、プロダクトがあんまりないので、年度内にゲーム1本出したいなぁと考えています。
来月から本気出す。

『GlobalGameJam2012 in 札幌』開催します!

皆様、新年明けましておめでとうございます!
2012年があなたにとって良い年となりますように。


さっそくですが、1月27日から29日までの3日間、北海道大学において、GlobalGameJam2012 in 札幌を開催いたします!

f:id:gigi-net:20120101151421p:image
GlobalGameJam2012 in 札幌 : ATND


GlobalGameJamは、世界中のゲーム開発者が集まってゲームを作る世界規模のイベント。
開催期間中、世界同時にテーマが発表され、そのテーマに沿ったゲームを各チームが開発、48時間で完成させて、世界中の参加者からフィードバックをもらう、世界中のゲーム開発者のためのお祭りです。

2009年から始まり今年で4回目。札幌では2回目の開催になります。

f:id:gigi-net:20120101151422j:image
The Global Game Jam | January 27-29, 2012


インテルACMなんかも協賛しており、昨年は6500名のゲーム開発者が参加しました。
プログラマはもちろん、デザイナや3DCGモデラー、コンポーザーなど、様々なゲームに関わる職種の方が参加しています。
昨年、札幌会場では30名により5つのチームに分かれ、5ほんのゲームを開発しました。


昨年は、同じく僕らが主催した北海道大学による札幌会場と、東京工科大学による東京会場、九州大学による福岡会場の3カ所で開催されました。
今年は、国内の会場には東京・宮城・大阪が加わり6会場に。ご興味をもたれた方は、お近くの会場で是非ご参加ください!

企画だけでも参加できるため、特別なスキルは必要ありません。この機会に是非!

Hokkaido University | The Global Game Jam



僕は、去年はPyGameで開発したのですが、今年はKobold2dを利用して、iPadのゲームを開発しようかなぁと考えています。
Home - Kobold2D™ - Kobold2D


cocos2dに関しては資料がたくさんあるのですが、Kobold2dは、少なくとも国内ではまだほとんどの人が目をつけていない感じなので、この機会に習得したいと思います。


ゲーム開発に興味のある方は、この辺の記事も併せてどうぞ!
CoffeeScript+enchant.jsで始めるゲーム開発入門 - 5.1さらうどん
『cocos2dで始めるiPhoneゲーム開発入門』を放送しました - 5.1さらうどん

CoffeeScript+enchant.jsで始めるゲーム開発入門

CoffeeScriptからenchant.jsを叩いて使ってみたところ、スゴい速さでクロスプラットフォームなゲームができあがって、非常に開発がしやすい感じだったので、今回の開発についてまとめてみました。

この方法でゲームを開発すると

ゲーム開発ができます。

enchant.jsとは、国産のJavaScriptで実装されたゲームフレームワークです。


ドキュメントやサンプルが充実しており、初学者でも敷居が低いのが特徴です。
enchant.js - HTML5 + JavaScript Game Engine

ゲームを作ってみました

僕の所属している、札幌ゲーム制作者コミュニティKawazで、enchant.jsを利用した初心者向けのゲーム開発イベントがあったので作ってみました

新感覚シューティングゲーム、Jubiol -ユビオル-

Jubiol
giginet/Jubiol - GitHub
Kawaz - JUBIOL -ユビオル- 〜新感覚シューティング〜


弾を数える新感覚シューティングゲームです。
ルールの詳細や遊び方などはリンク先をご覧ください。

CoffeeScriptとは

  • JavaScriptにコンパイルすることができる
    • 文法ミスの場合、コンパイルできないため、エラーに気付きやすい
    • シンタックスチェックに通るJSが生成される
      • minifyに失敗するなどの問題が起きない!
  • 見た目はRubyとかPythonっぽい
    • うつくしい!
    • JSがゴミのようだ
  • JSで欲しかったような機能が言語レベルで実装されている
    • リスト内包表記とか
    • 変数展開とか
    • undefinedチェックとか
  • プロトタイプ継承を意識せずにオブジェクト指向ができる
  • うつくしい!

文法などはこちらをどうぞ
CoffeeScript
今日から始めるCoffeeScript | tech.kayac.com - KAYAC engineers' blog
CoffeeScript基礎文法最速マスター | 株式会社インフィニットループ技術ブログ

環境を構築する

当方はMacユーザーなので、他の環境については各自ググってください。

Homebrewをインストール済みの方は、

brew install node
brew install coffee-script
brew install yuicompressor

辺りをインストールしておくと良いと思います。(MacPortsでも大丈夫!)
yuicompressorについては任意ですが、後述するCakefileで、JSをminifyするのに利用しています。

エディタの設定を整える

当方はVimmerなので、他のエディタ使いの方は自力でなんとかしてください。

vimの場合、vim-coffee-scriptというプラグインがオススメです。
Bundleなどで導入すると良いと思います。

kchmck/vim-coffee-script · GitHub

Cakefileを書く

ゲームを作り始める前にCakefileを記述してみましょう

Cakefileとは、CoffeeScriptで記述できるMakefileのようなもので、コンパイル時の動作を定義しておくこともできます。

今回は、コマンド一発で

  • 複数のcoffeeファイルを結合する
  • 結合したファイルを元にJavaScriptのコードを生成する
  • 生成されたJavaScriptのコードをminifyする

という一連の動作を行ってくれるように記述してみましょう。

例えば、以下のようなCakefileを用意します。

その後

cake compile

を実行すると、定義したCoffeeScriptのソースコードを全て結合し、minifyされたgame.min.jsが自動で生成されます。
(このCakefileを実行する場合、yuicompressorをインストールしていないと正常に動作しません)


また、エディタの設定を変えて、cake compileの実行をバインドしておくと、キー一つで、変更をゲームに反映させることができます。

例えばvimの場合
~/.vim/ftplugin/coffee.vimを以下のように定義しておくと良いでしょう。

このように設定しておくと、特定のキー(今回はCtrl+C)を押すと、Cakefileが存在する場合、cakeを実行し、存在しない場合はjsを自動的に生成します。
あらかじめこのような下準備をしておくと、高速に動作確認が行えるようになります。

また、vimスクリプト中のCoffeeMake!はvim-coffeescriptのコマンドのため、前述のステップでインストールしていないとこのままでは使えません。

基本的なゲームを作ってみよう

ここでさっそくCoffeeScriptからenchant.jsを利用して、ゲームを作ってみましょう。

わずかこれだけのコード量でキャラクターの移動が実装できてしまいます。

JavaScriptを用いて書くよりも、簡潔に書けることがわかります。
また、enchant.jsのクラスをCoffeeScriptの文法で継承して利用することができるため、あたかもクラスベースのオブジェクト指向のように開発することができます。

詳しくはenchant.jsのドキュメントをご覧ください。
Class Index | JsDoc Reference

作ってみて雑感

  • 凄まじい速度でアイディアが形にできる
  • 環境構築不要
  • クロスプラットフォームスマートフォンでも動く!
    • ↑のゲームは5~6時間×3日ぐらいでできた気がします。
  • すぐに作れるし、遊んで貰いやすい!
  • ファイルを分割しても簡単に結合できるので、大規模開発にも向いている
  • もうJS書きたくない
  • enchant.js使いにくい
    • クラス構造が謎
      • 例えば、scaleやrotateはSpriteのフィールドなので、LabelやGroupを回転したり拡大したりできないとか
    • ところどころバギー
      • Safariで動かなくてハマる
    • イベント周りが貧弱
      • 一時的にイベントを退避させたりができない
      • そのため、ポーズなどを実装するときにイベントドリブンだと難しい
    • いつか自分でゲームフレームワーク作りたいですね

ついでにライブラリも作ってみました

enchant.jsが機能不足だったので作ってみました。

kwing Documentation - GitHub

汎用的なフレーム管理(Timer)とベクトル演算(Vector)をカプセル化したクラスです。

また、Arrayをprototypeで拡張しまくったライブラリもあります。

オマケ:nodeunitでテスト駆動する

ライブラリを作るときにTDDを行うためにnodeunitを利用したのですが、日本語の記事がほとんどなかったため、ついでにまとめてみます。

caolan/nodeunit - GitHub



nodeunitをインストールしてしまっても良いのですが、プロジェクト内に組み込んでしまうのがオススメです。
具体的には

git submodule add git://github.com/caolan/nodeunit.git node_modules/nodeunit
git submodule init
git submodule update

をプロジェクトrootで実行すると良いでしょう。



次に、テストコードを記述します。


以下のように、testを引数とするユニットテストを書いていきます。
テストコードの最後にtest.done()が必要ですのでお忘れなく。


その後、テスト実行用のコードを記述します。ここではnodeunit.coffeeとします。


このとき、nodeunitはnode_modulesディレクトリ直下に置いておきます。
nodeのモジュールロードが若干取っつきにくいですが、詳しくはこの辺に書いてます。
node.jsのモジュールロードのルール - hakobenikki# - subtech


その後

coffee nodeunit

を実行すると、テストが走ります。

test_calc.coffee
✔ testCalc - testSum
✔ testCalc - testSub
✔ testCalc - testMul
✔ testCalc - testDiv

OK: assertions (5ms)

このようにすることで、CoffeeScriptでテストを記述することができます。
ゲーム開発の場合、TDDで開発するのは難しいですが、知っておくと役に立つかもです。


ここに書いてある情報は、nodeunitのREADMEとほぼ同じ内容なので、そちらを見てもらった方が詳しくわかります。

まとめ

みんなゲーム作ろうぜ!

あと、面白いと思った方はCoffeeScriptでenchant.jsよりも良い感じのゲームフレームワークを作ってくださると僕が喜びます。

リスト要素を3DSのホームメニューっぽくするjQueryプラグイン『jquery.3dsmenu.js』書きました

3DSのホーム画面の列数を変更できるUIがカッコ良かったから作った。

デモはこちら
jquery.3dsmenu.js - jsdo.it - Share JavaScript, HTML5 and CSS
フルスクリーン版


jquery.3dsmenu.js - jsdo.it - share JavaScript, HTML5 and CSS



3DSのトップ画面を忠実に再現しており、列の数を自由に指定したり、長押しドラッグで、各セルを並び替えることが出来ます。

使い方は、リスト要素に対して以下のように書くだけ!(要jQuery, jQueryUI)

$(document).ready(function(){
  $('ul').dsmenu();
});


ソースコードや詳しい使い方はgithubをご覧ください!

giginet/jquery-3dsmenu - GitHub


オプション

オプション名 説明 デフォルト
animation ソートや列数を変えるときのアニメーションありなしを設定します true
animationDuration アニメーション時の速度をミリ秒かslow/normal/fastで指定します 'normal'
margin 各セル同士のマージンを、[x, y]の配列で指定します [3, 3]
maxSize 要素の最大サイズを数字か[width, height]の配列で指定します。falseの場合は領域いっぱいまで広がります false
row 列の初期数、最小数、最大数を含んだオブジェクトを指定します {initial : 3, min : 1, max : 6}
sortable 各要素のソートができるかどうかを設定します true

メソッド

メソッドは

$(document).ready(function(){
  $('ul').dsmenu('methodname', arg1, arg2);
});

といったような感じで呼び出します。

メソッド 引数 説明
contract なし 列数をデクリメントします。最小列数未満にはなりません
expand なし 列数をインクリメントします。最大列数より大きくはなりません
init options(object) 要素を初期化します。$('ul').dsmenu(options);と同じです
row なし 現在の列数を取り出します
setRow row(number), [animation(boolean)] 列数を任意の列数に変更します。animationが指定されていると、アニメーションありなしを指定できます。指定しない場合optionsの値に依存します

その他

Safariではソーティングが出来ない不具合が発生しております。
GoogleChromeFirefoxの最新版推奨。他はノーサポートです。


どうぞご利用ください。

テスト駆動開発Boot Camp(TDDBC)札幌2.1で講師をしてきました

また、id:shuji_w6eさんにTAをしていただきたいなぁ、というお話を頂けたので、PythonチームのTAをしてきました。
TDD Boot Camp 札幌 2.1 : ATND


今回は各言語毎にWebフレームワークを使ってシステムをTDDで構築していくというテーマでした。

うちのチームは、DjangoというWebフレームワークを、Django標準のテストフレームワークではなく、noseというPython用UnitTestモジュールを使ってテストし開発するという手法を採用しました。


Installation and quick start ― nose v1.1.3 documentation
jbalogh/django-nose - GitHub

Djangoについては、最新版の1.3含め、ある程度の機能を使い慣れており、内部の実装にも明るかったため、指導や事前準備の点では問題ありませんでした。


今回、東京から遙々チームに参加されていた@さんは、日本でも数少ない、業務でDjangoを採用されている企業で働かれている方で、いろいろ教えて頂くことが多く、逆に僕の方からもいろいろ提案させて頂くことができ、非常に有意義な時間が過ごせたと思います。
今回、初めてDjangoを使ったという@さんも、1日でかなりのレベルに到達できたようなのでなによりでした。



giginet / RoomReservation / source — Bitbucket

普段の開発ではTDDで行うことはほとんどないので、Viewレベルでのテストを書いたのは今回が初めてでした。その点での技術習得も出来たのは非常に良かったですね。


それと、今回もLTをさせていただけました。

前回、やる夫を使ったLTがすごく受けたので、またやる夫を使ってみた。
TDD BootCamp 札幌 2.0に参加してきた - 5.1さらうどん


今回ははてなインターンでの経験を絡めて、はてなでのTDDについて話してみようかと思ったのですが、実際そんなに書くことがなくてタイトル詐欺w


その割に、はてブ数が50件以上も付いてビックリでした!作って良かった!ホッテントリ狙えるかも。
【TDDBC2.1】やる夫で学ぶTDD


今回、学生TAはもちろん、学生の参加者も僕だけだったのが少し寂しかったです。
「学生はテストって聞くとみんな嫌がるから来ないんじゃないですか?」とジョークを飛ばしてみたところ、ウケたので良かった。
テストと聞いて身構えずに学生さんにも来て欲しいですね。
あと、次回はSmalltalkを触ってみたいです。


そんな感じで、参加されたみなさま、お疲れ様でした!