神記逸天プログラマーブルリーデイズ

行き詰まったことをメモっておく中二プログラマーのブログ。スマホアプリとかゲームアプリ関係が多い

悠久の時を経て、蘇らないキオク (訳:前動いたはずのphpunitが動かなくなった

「呼びかけるも、音は悲しく響いて、君の声は聞こえなくて」

またずいぶんと間が空いてしまったああ!
けれど、大丈夫。日記は書いてなくとも、日々中二な台詞で会話をしているから(痛い人

前回の日記から色々あったのだけれど、それはいつか書くとして(書かないフラグ
気がついたらphpunitが動かなくなっていたので、設定のやり直しついでにoilなるものに手を出してみた。

やったこと、その1「oilを使ってみる!」
もうね、怖いから、ここに書いてある通りにやったよ!
http://qiita.com/uchiko/items/a5c2e45264963acc0e4a
http://qiita.com/uchiko/items/b62eafc18519a5970046

phpのインストール自体はやっているので、実際には以下の手順でやった!

1.Composerでアップデート
$ php composer.phar self-update
$ php composer.phar update

2. Oilのインストール
$ php oil refine install
※自分の環境にはcacheフォルダがないって怒られたので追加した!

3. phpUnitのインストール
composer.jsonに以下を追加
"require": {
...
"phpunit/phpunit": "4.1.*",
"piece/stagehand-testrunner": ">=3.5.0"
},

4. Oilの設定
$ cp fuel/packages/oil/config/oil.php fuel/app/config/
fuel/app/config/oil.phpを修正
'autoload_path' => '' ,
'binary_path' => DOCROOT.'fuel/vendor/bin/phpunit' ,

5. テストを実行
$ php oil test --group=Core
※何故かテストには失敗する……

この手順でやったら素直に動いてくれました。
よーし、ガリガリテストを書いていくぞー!


やったこと、その2「DBを使ったテスト!」
と思ったら今度はDBに接続するところでエラー
oilははるniにDBを使ったテストをさせてくれないというのか!?

PDOException: SQLSTATE[HY000] [2002] No such file or directory
ぴーえちぴーでーたおぶじぇくとえくせぷしょん、えすきゅーえるすてーと・・・なんでしょう、このエラーは。

エラー番号みたいなのも出てるし検索すれば引っかかるかな。はい、来ました!

http://spicy-space.hatenablog.com/entry/2013/08/04/225743

しかし、この通りやっても動かない・・・なんで!?
というかいくらdb.phpを変更してもエラー文に変化がない、なんで!?



config/development内のdb.phpをずっと触ってました。。。
はるniの環境下ではテスト時にはconfig/test内のdb.phpが読み込まれるようで、これを修正したところちゃんと動きました。 良かった!
db.phpはテスト用とか開発用とか色々準備している人は気をつけた方がいいと思う!(初歩的なミス

これでDBを使ったテストをたくさんかけるぞおお! わああああい!

黒い記憶は蘇るのさ、いつでも、何でも。(訳:別案件の〆間近に過去の案件の修正が発生しました

「限界の中に可能性を見て、多忙の中にゆとりを見いだす。追いつめられなきゃ、進化しないものさ、生き物ってのは」

この日記。

まあ、こんな日記なので。

知り合いとかに読まれたら。

それはまるで小学校の頃に考えた「ぼくのかんがえた、つおいもんすたー」くらい恥ずかしいもので。



読まれました


真の中二病患者はイタい自分を認識して、それにすら酔えなきゃあ、いけないのさ。


今日は課金周りで再び大苦戦したので後日の為に記録!

現象1
「このアイテムは購入できません」と表示される

はるni的解決方法:一時(半日)待つ

今回、半日くらい時間を費やした。。。
パッケージは合ってて、アイテムのプロダクトIDも合ってるのに、何故か「このアイテムは購入できません」って出る現象。
全く同じコードでパッケージだけ別のapkのもの(以前から課金テスト用に上げてあるapk)にすると何故か課金できるという謎現象。
本当に混乱したよおお。
しかもこれ、はるniが数ヶ月前に担当した部分で、コード的な問題ならば先方に「中途半端なクオリティで納品してるんじゃねえええ」と言われても仕方ないくらいのおおごと。

実際は、課金テストをするためにapkを上げた直後だったようで、単にapkを認識できなかっただけっぽい。
というか、なんで存在しないパッケージのプロダクトを指定してもプロダクトIDがない時と同じメッセージなんだろう。
このパッケージ名は存在しません、とかエラーメッセージを出してくれればとてもわかりやすいのに。

現象2
「このバージョンのアプリは、Google Playを通じたお支払いはご利用になれません。」と表示される

これが出たら、とりあえずステップ1個進んだ感じ。
単に署名がアップロードしたapkと違うだけ。署名したapkをコマンドとかから実機へインストールすれば次に進むはず。



現象3
「このアイテムは既に所有しています」

これマジラスボス。というかクリアできないラスボス。
探してみたら有名アプリでも出てる不具合のよう。
http://pad-plus.com/archives/8051.html

https://groups.google.com/forum/#!msg/android-sdk-japan/xHTP_kxrfSI/muCR3n-xQogJ
https://support.google.com/googleplay/known-issues/1319135?hl=ja

一番最後のURLの更新日時が1年前だけど、これは放置されてしまっているのだろうか。。。?
ちなみに無理矢理再現しようと思ったら、購入ダイアログを複数立ち上げて、それぞれで購入処理を進めるとあら不思議
「このアイテムは既に所有しています」
と出ます。そして元に戻りません(恐怖

課金処理の裏で2個フラグが立って、けど実際は1個しかフラグ下ろさなくて、立ちっぱなしになってしまうみたいな感じなのかな?
これの回避方法を知っている方がいらっしゃったら教えてください。。。
URLにあるようなことを何回か試していると、復帰できることがある。



課金周りで書く事たくさんあるううう。
早くメモしておかないと、忘れちゃいそうだああ。
公開鍵を使った認証とかも、メモ書き残しておきたいけど、今日はこのくらいで終わり!

風が泣いている、雲も奔ってやがる、……そろそろか(訳:Cocos Code IDEが出たのでcocos2d-JSを試します)

「時の流れというものは従来より混沌とし闇に覆われている。しかし、だからこそ人はその中に光を見い出すのだ」

学生時代からずっとWindows使いだったのだけど、ここ1年くらいですっかりりんご色に染まってしまいました、はるniです。どうもよろしく!

今、スマホアプリ開発というとiPhone対応を考えるとMacを使っていた方が良さそうな感じになっちゃってるけれど、決してWindows心を忘れたわけじゃないよ! だってずっとWindowsと一緒に生きてきたんだから……!

というわけでVMWareを使ってiMacWindows7を入れた!
正直に言うと請けております案件の関係でWindowsが必要で、Bootcampしてたのだけど切り替え面倒だよおおお!ってなってVMWareに切り替えたのです。はるniの端末だとちょっと動作が重いような気がするのだけれど、一回一回切り替えるよりはずっと楽。頻繁に使うようになったらWindows機を買えばいいし。

でで、前々からWindowsにcocos2dxが入れられないって知り合いに泣きつかれたりしていて、そりゃMacに比べればちょっと面倒だけどそれほど難しくないんじゃないとあれこれアドバイスしてきたけど、実際はどうなんだ、と入れてみることにしたよ!
けどおんなじMacにcocos2dxが入っているのにVMWare内にもcocos2dxを入れるなんてもったいない! せっかくだから違うことをしたいよ! みんなと違う事に憧れる中二病真っ盛り!

そういえば最近Cocos Code IDEというのが出たらしい。はるniの敬愛する「cocos2d-x入門」の著者清水様がFacebookで発言してらっしゃったのをみたのを思い出した!
良くわからないけど早速触ってみよう!

f:id:haru_ni:20140501121154j:plain
どれどれ、ふむふむ、なるほど、……全くわからない。


とにかくこれを使えばcocos2d-JSが楽にできるよとかそういうことなのかな? Luaもできる、と。ふむふむ。
良くわからないのでとりあえず入れてしまおう。 
わからぬなら、入れてしまおう、ソフトウェア(感染フラグ

というわけでやってみました!

Macの人すでに旧バージョンで開発している人はこちらの記事様がとてもわかりやすかったよおおお!
図付きだし、明快!
http://dev.classmethod.jp/smartphone/cocos_code_ide/



ここから下は、ボク、Windowsだし、初めてだから何もわからないの。優しくしてね、って人向け!
はるniも全然わかってないから一緒に頑張ろうね! 結構みちのりは長いよ!


1.必要なものをダウンロード&インストール


1-1.Code Editor IDEをダウンロード!
http://www.cocos2d-x.org/wiki/Code_Editor
f:id:haru_ni:20140501122225j:plain
好きなフォルダに落として解凍! これが今回の主役!



1-2.JDKをインストール!
http://www.oracle.com/technetwork/java/javase/downloads/index.html
f:id:haru_ni:20140501122314j:plain
Javaの開発をしたことがない人はJavaSDKを入れよう!
Java Platform (JDK) 8u5ってやつを押して、その後自分の環境にあったものを落とすといいと思うよ!
はるniもWindows7を入れたばかりだったのでWindows x64をインストール!
f:id:haru_ni:20140501122440j:plain
こちらはダウンロードした後に「実行」を忘れずに!



1-3.Pythonをインストール!
http://www.python.org/download
f:id:haru_ni:20140501122809j:plain
3.4.0があったけど、必要なのは2.7って書いてあったから2.7.6を落としたよ!
これはcocosがコマンドを実行する為に必要みたい! cocosに頑張ってもらえるようにせっせと環境を整えますよ!
f:id:haru_ni:20140501122934j:plain
そして「実行」するよおおお!
実行終わったらPATHの設定!
はるniの場合はC:¥Python27にインストールされたみたいなので、環境変数に設定!
f:id:haru_ni:20140523202308p:plain
Windowsのスタート→コントロールパネル→システムとセキュリティ→システム→システムの詳細設定
f:id:haru_ni:20140523202422p:plain
ここの環境変数というところにPATHを設定してあげる。
f:id:haru_ni:20140523202551p:plain
Pathという項目があるので、それを編集。
f:id:haru_ni:20140523202746p:plain
Pythoがインストールされたパスを指定してあげる。ここではC:¥Python27。前のパスとはセミコロン「;」で区切るよ!
環境設定を触るときは気をつけないと大変なことになるみたいだから、慎重に!



1-4.ADTを落として解凍するよ!
https://developer.android.com/sdk/index.html?hl=sk
f:id:haru_ni:20140501123016j:plain
Androidの開発を行う為に必要なADT (Android Development Tools)を取ってくる!
これがないとAndroidアプリ開発できないよ! これは解凍して置いておく。



1-5.NDKを落として解凍!
https://developer.android.com/tools/sdk/ndk/index.html
f:id:haru_ni:20140501123449j:plain
NDK (ねえねえ今どんな気持ち?)をダウンロードして解凍!
これはcocosをAndroidで利用する為に必要なもの、、、だと思う。
C++で書かれたcocosをAndroidで利用するから必要なんだよね!きっと!
上記間違いでした。NDKの正式な名称は 「(Android) Native Develoment Kit」でした。



1-6.ANTを落とすよ!
http://ant.apache.org/
f:id:haru_ni:20140523191540p:plain
アントというのも入れないといけないらしい!
1.9.3というのがあったのでこれをダウンロードして解凍!
よーし、揃った! これで全部揃った!


1-7.そしてついにcocos2d-JS!
http://www.cocos2d-x.org/wiki/Code_Editor
1-1.で落としたフォルダの中にある「eclipse」というのをダブルクリック!
f:id:haru_ni:20140523192414p:plain
f:id:haru_ni:20140523192034p:plain
そしたらワークスペース(作業する場所)はどこにしますか? って聞いてきたけどどこでもいいよ! 早くcocos2d-JSやりたいよ!
そのままOK!

f:id:haru_ni:20140523192538p:plain
できた!
こんにちは、cocosIDE。
こんにちは、cocos2d-JS。
こんにちは、アタラシイセカイ。


2.設定

2-1.cocosIDEを設定していくよ!
cocosIDEが起動したら設定!
なんか違う画面しか出ないよ!という人は画面の中を良ーく見ると右上辺りに×印があって、それを押すと幸せになれるかも!
(初めてワークスペースを開いた時は説明画面みたいなのが出るのでそれを閉じると普通の画面に)

2-2.JavaScript Frameworkの設定
Window→Perferencesを選ぶと画面が出てくるので、Cocosの項目の中にある「JavaScript」を選択。
そこのBrowseというところをおして、cocos2d-JSを解凍した場所を選択。
f:id:haru_ni:20140523193137p:plain
「framework」ってフォルダがある一個上の階層を指定すると、良いと思うよ!


2-3.SDK / NDK /ANTの設定
次に必要な3つを設定していく。
全部、さっきダウンロードしたばかりだから場所も覚えてるし、ちゃちゃっとやって早くふぁいなるふぁんたじーに負けないゲームを作るんだ(妄想
f:id:haru_ni:20140523193627p:plain
ちなみにはるniの環境だとこんな感じ。
SDKの設定
C:〜〜〜\Documents\adt-bundle-windows-x86_64-20140321\sdk
NDKの設定
C:〜〜〜\Documents\android-ndk-r9d
ANTの設定
C:〜〜〜\Documents\Documents\apache-ant-1.9.3



3.作成!

3-1.プロジェクト作成
準備が出来たらとりあえず動かしてみよう!
最初からいろいろ触っちゃうと、動かなかった時にどこが悪いのかわからないからね!
というわけでプロジェクトを作成

f:id:haru_ni:20140523193929p:plain
File→New→Cocos JavaScript Project
と選ぶとウィンドウが出てくるので、とりあえず適当に「Finish」!
細かい事は後々わかっていけばいいのだ。とにかく動かしたい!

少し時間が経つと左側のCocosExplorerってところにCocosJSGameっていうのが出てきた。
できた! 初めてのcocos2d-JSが出来たよ!

ちなみにここで左側にCocosExplorerってのが無い人はWindow→Open Perspective→Otherの中から
JavaScript」というのを選ぶと画面の構成が変わって現れるはず。
f:id:haru_ni:20140523194416p:plain


3-2.いよいよ実行!
ここまでできたらもう一息!
f:id:haru_ni:20140523201900p:plain
Run→Run Configurationsを選んで、新規作成ボタンをポチリ!
Nameは実行名なので適当にCocosJSGameとしておいて、ProjectはBrouseからCocosJSGameを選んであげる
とりあえず動かしたいのでWin32を選択。

そして、、、、いっけええええええええ!

Run!

と押すとHelloWorldと書かれた画面が出て来るよ!
どんな画面かはここまでやってみてからのお楽しみ!



おまけ
今回引っかかったところ。。。
新規作成できないと思ったら、Pysonの設定だった
http://www.cocos2d-x.org/forums/20/topics/51526?r=51661


おまけのおまけ
書き始めたのが5/1……
請けてる案件が忙し過ぎてこんなに時間がかかってしまった。。。

来週からは少し落ち着く(普通に戻る)ので日記も書けるといいなぁ。

朽ちた心に安らぎを与えると、その静穏を極限まで食らい尽くす (訳:怠け始めるとダメになる)

「裂かれた翼は散り、割れた爪は剥げ、淀んだ瞳は光を失う」

覚えておくために調べたことは全部メモしておこうと思ったのに、1ヶ月も間が開いちゃったよ!
一度、怠け始めるとダメだ。 自分を奮い立たせるきっかけがない限りそのまま堕落してしまいそう。
なので、きっかけを自ら作る為に1ヶ月の間にあったことを書いておこうと思った。

▼リジェクト
前回の日記「なんかAppleっぽいデザインだからダメ!」と英語で怒られていた広告を別のデザインに変更したらすんなり通った。 一体、なんだったんだ。。。

きっと審査する人によって良かったり悪かったりするんだろう、そう思って納得することにしたよ!


▼phpstorm買っちゃった!
便利すぎたんです。 phpstormなしでphpを書くなんてもう、できません。

今までdreamweaverでせっせとphpを書いていたのだけれど、デザイン抜きのコードメインならphpstormの方が使いやすい気がしたので思いきって買った!
お値段も$98とかなりお買い得! これで案件に対応出来る事を考えたら安いもの。
http://samuraism.com/products/jetbrains/phpstorm

せっかく買ったのだからちゃんと機能を使い来なさないとということで早速文字コードの設定。
自分で作ったテキストファイルならUTF-8にしてるのだけど、クライアントさんからもらうデータは経験的にSJISが多いので文字コードを切り替えて使うのだ。
http://blog.livedoor.jp/okashi1/archives/51750184.html

これからもっと勉強していくぞー!
けど、php案件の方は具体的な内容に入ってきたため、あんまり技術的なところはなくて、書く事がない。


▼3年ni組 はるni先生!
のらりくらりとフリー生活をしているはるniの元に、ある日一通のメールが。
スマホのプログラミングを教えてください。」

!?

なにごとだあああ!
たしかに、スマホ関係ならばお仕事受付ますと言ってますが!
まさかの講師案件! けど、嬉しい! やってみたい! 興味あるよおおお!
ということで、早速、返信をして、打ち合わせをすることに。
まだ具体的な中身の話は進んでないので、どうなるかわからないけど、今からすっごく楽しみ!
昔、家庭教師で磨いた指導力が火を吹く時が来たぞおお!


▼cocos2dx 3.0rc
入れたよ!
入れて3日でとりあえず簡単なシューティング作ったよ!
(そのうち、ここにメモしとこ。所々苦戦したから)
記述レベルでの変更はあるけれど、基本的な思想は変わらないので(当たり前だけど)、2.Xで開発をずっとしてきている人はもう少し2.Xで書いていても大丈夫かも。
今からやるという人は3.0の方が良い気がする。移植する手間もあるしね!
はるniは2.Xだろうが3.0rcだろうが大したものが作れないので3.0を使い始めることにした!
2.Xと3.0の大きな違いが書いてあるページがあったのでメモメモ。
http://gamebiz.jp/?p=127030



▼チーム開発
ナンパしちゃった。。。
ナンパしちゃったよ! 昨日の深夜。
むっちゃイケメンの男子が生放送してたから声かけちゃったよおおおお!

はるniと付き合ってください! じゃない、一緒にゲーム作りませんか? と言ったらぜひぜひと言ってもらえた! やたああああああ!
憧れのチーム開発!
まだ、スケジュールとか決めてないけど、1本目は2週間くらいで作れたらいいなあって勝手に思ってる。

よし! その開発の内容をここに書き留めて青春の1ページにするんだ!

こんにちはチーム開発! こんにちは、イケメン!

記すだけで全てが正される。そんなセカイをボクは生きていくんだ (訳:phpunit使いました)

「それは神の預言書のように。時流に迷える猫のように」

先日リジェクトを受けたアプリは、広告のデザインを変更して再申請した。
これで上手くいかなかったらほんと泣き寝入りするしかない。
いや、個人でやってるアプリならそれでいいけど、請けちゃってるから泣き寝入りするわけにもいかなくて!

説得するしかない。英語で!!!

▼テスト自動化
別の案件である程度コードを書き終わったと思ったら、「テスト自動化しちゃってー」と言われた。

ヤバい……。テスト自動化なんてしたことないよ。

というわけで早速google先生に聞いてみた。

phpだとphpunitというのを使うと良いらしい。そして今触っている環境はFuelPHPというやつだから、これを合わせたような記事が見つかればできたも同然だ!

fuelPHPphpunitを試すよ!
http://fuelphp.jp/docs/1.6/general/unit_testing.html
記事を探していたら、なんだか結構簡単にテストを書けそうなことを書いてあったので、「まあ1時間くらいでできるだろう」なんて思った。

甘かった。

1. phpunitって別にインストールする必要があるらしい!
fuelPHPってすごい!なんてことをいろんなところに書いてあったものだから、phpunitなるものも勝手に備わっているとか、そんなあまっちょろいことを考えてました。
現実はそんなに甘くない。

http://phpunit.de/getting-started.html

けれど、ここに書いてある通りにやればできるらしいので、このくらいならできる、と思って早速やってみると……


2. wgetがない

wgetなんてコマンドないよ! ってターミナル師匠に怒られました。
すみません、師匠。というわけで今度はwgetのインストールの仕方を。

http://www.absolute-keitarou.net/blog/?p=296

ヤバいよ!すごいよ!
ここに書いてある通りにやったら簡単にインストールできたよ!
唯一、

sudo ./configure –with-ssl=openssl

ってところが

sudo ./configure -–with-ssl=openssl

とやらないと、自分の環境では通らなかったよ!

これで無事wgetも手に入れて、phpunitも手に入れてめでたしめでたし……じゃなかった!

3. phpStome上で動かしたいのだが

phpunitはインストールしたものの、はて、これをどうやって動かせばいいのだろうか。
いろんなサイト上には「テストが走って成功すると緑のランプがつくよ!」「失敗すると赤いランプがつくよ!」なんて面白そうなことが書いてあって、早くみたい!
実行する度に緑やら赤に光るランプがみたいよおおお!

まずはphpunitを設定しないといけないらしい。
http://d.hatena.ne.jp/epy0n/20110511/1305097833
これで、phpstomeからphpunitが使えるようになったらしい。
けど肝心のテストはどうやるんだろう。画面が微妙に違って、自分の頭ではついていけないので、他の記事に頼る事に。

http://www.findxfine.com/programming/php/995557148.html

Testscope: Class
Class: CalcTest
File: CalcTest.phpのパス

と設定すれば動くとか。
とりあえず、サンプルのコードを全部コピーして貼付けてやってみたところ……!
動いた! 動いたよおおおおお!

緑のランプが神々しく光ってるよおおおお!
こんにちは、phpunit! こんにちはTDD!


しかし、次の問題。
DB接続が出来ない。。。。。。。。
というか指定したクラス以外のテストができない。。。。
単体テストだからそういうものなのかな? 複数のクラスが絡み合うようなテストはできないってことなのかな?

そうなると結局、今までみたいなかいはつ 方法になってしまう気が。。

また明日ももう少し調べてみよう。

隣に戦友がいようとも、人は孤独な闇を抱えて生きている (訳:よく使われている広告なのにリジェクトくらいました)

「濡れた翼では崇い空へは羽ばたけないから、ひたすらに僕は泣いたフリをする」

リジェクトきたよおおおおおお!
iPhoneの審査でリジェクト!

内容は「app storeに似てるからだめ」って内容!
そして添付されていた画面は、広告SDKを使ってリストを表示している部分。


いや、それ他のアプリでもたくさん使われている画面ですけど!?!?!?!?


なんでだあああ!
何か情報を持っていないかと、広告SDKの配布元に問い合わせたら「そんなこと言われたの初めてです」とのこと。

ええええええ、このアプリが悪かったのだろうかあああ!
それとも審査する人が新人さんで「これはapp storeっぽいデザインだ!(キリ」とかなっちゃってリジェクトしたんだろうかあああ!

どちらにしてもリジェクトを直さない限りは公開できず、クライアントさんに迷惑が……。
SDKを乗り換えるか。。。

終焉は誰にも知られずに、苦しみと共に訪れた (訳:複数案件で納期重なって忙しさがヤバかったです)

「深い闇と、悠久の虚と、小さき存在を嗤うかのように」

おかしいなー。サーバ側の人間じゃなかったはずなのにここのところずっとPHPMySQLを触ってるよ。
勉強になることばかりだけど。

一人で開発っていうのに慣れていたものだから、この分業っていうのがとても不思議な感じ。
フォーマットに乗っ取りさえすれば描画関連のことはフロントに丸投げしていいんだって。ついついフロント側のことも考えてしまうよ。こういうデータ構造の方が扱いやすいんじゃないかな、とかとか。

しかし今日は単純に実装を進めていただけで、これ!っていう発見がなかった。
PHPの参照渡しと値渡しについて少し調べたくらいな気がする。
あとはずっとコーディングしてたよ。。。