2012年11月25日日曜日

このJavascriptをどうすりゃいいの、あとSublime Text 2とか

チョット前までJavaやってたんすけど、なんかやんなきゃならなくなったのでJavascriptやってます。やってますがなんか名前空間やクラスのようなものをやろうとするといろいろ面倒(できなくはないがObjectを◯◯だと思い込むとか動的にしかチェックできないみたいなのばっかり)のようで、なんか文化が違うなぁと思いながらどう書こうか悩んでおります。ので悩んだ結果をちょっとだけまとめました。余力があったらテスティングとかの話もあとで書くかもしれません。
以下、macと言ったら10.7.5、winと言ったらWindows7 home 64bit だと思って下さい。

Javascriptの書き方について

名前空間やクラスの書き方については、衝突回避をどれぐらい頑張るかとかによって無数の書き方があるようでした。ので困ったんですが、とりあえずTypeScriptが生成するコードを参考にしようかな、基本的にはGoogle先生のコーディングガイドラインに従おう、あとドキュメンテーションはJsDoc3で書こうかな、と思った結果が以下。

 

Sublime Text 2 について

何も入れなくてもJSのハイライトしてくれてなんかしら便利機能あったりとそこそこ便利なのですが、Linterとかは後からパッケージとして入れる必要があったので入れました。また、キーバインドとかも設定ファイル直接いじりまわして追加してね!というスタンスのようなのでなんぼか弄る必要があります。
パッケージはPython(2.*系列)で書けるようなので気が向いたらなんかしてみても面白いかもしれません。わりとお手軽に作れるものなのか、新しいツールや変なツールを叩くパッケージとかもすぐ見つけられたり、似たような機能のパッケージがたくさんあったりして、わりと活気のある感じです。入れたら便利そうかもレベルのパッケージや、jQuery等の個別のフレームワーク向けのパッケージとかもあるのですが、今回はそういうのは行きませんでした。
あと日本語及び日本語入力の扱いがわりと雑で、winだと変換候補がなんかぶっとんだ位置に出たり(そんなに困らない)、macでは変換確定のEnterを改行と認識して動いちゃう奴がいたり(例えばコメント内での確定するとDocBlockerが確定した文面ぶっ飛ばして改行入れたりする 困る)しますがそれ以外はいい子なんです。
以下入れたパッケージについて。

・Package Control

を入れないととにかく始まらないようなのでcontrol + ` ( = JISでは control + shft + @ )でコンソール開いて、公式に書いてあるインストール用のコードをコピペってきて実行すると入る。入れたらsublimeを再起動すると有効になる。
再起動後にcommand + shift + P してinstall くらいまで入力すると「Package Control : Install Package」が候補に残ると思うので、これを使って以降のパッケージの追加をしていく。たまには別の手段で入れなきゃならない子もいるが、Githubにコードがある場合はAdd RepositoryでPackage Controlの管理対象に追加できる。

SublimeLinter 

コードの静的チェック機能が追加される。Javascriptにおいてはjshintによるチェックが行われているらしい(インストールしとけばclosure linterによるチェックも出来るらしい)。結構いろんな言語に対するチェックが出来る様子。Install Package起動後にLinter くらいまで入力すれば多分出てくるので選択してEnterでインストールです。
あとこれ、Macで確認したら日本語見つけ次第Unsafe Characterを叫んでるのですが、これは全然解決策がわからんで、v1.5.4で直したっぽい話もあるのですが、出るよ、余裕でめっちゃ出るよ(v1.6.11で見た)。jshint_optionsとしてencodingなりunsafeなりそれっぽいのをいじれたらいいんですが、jshint自体にはそういうオプション無さげでどうしたものやら。
のでめんどくさいけどgjslint( = closure linter)をpython入れてからeasy_installして、そんでPreference->Package Settings->SublimeLinter->Setting-Default を選択して設定ファイルを開き、javascript_linterを定義している箇所を

"javascript_linter": "gjslint",

にしてあげるとバッチリです。バッチリですと素直に言いたいのですが、こいつはこいつでJsDoc3のつもりで書いてるドキュメントコメントをClosure Compilerのアノテーションとして解釈して、namespaceってナンダヨとかmemberofってナンダヨとか言ってくるのですが、まあ気分的には日本語全部にunsafe character出るより大分マシだし疲れたのでいいことにします。できれば誰かがjshintの方を頑張って処理してくれるといいなあと思いました。winではそんなこと無かったと思うのだが…。

DocBlocker(sublime-jsdoc)

JsDoc等のドキュメンテーションの入力補助をしてくれる(要は/**まで入れてEnterしたらなんとなくテンプレ入れてくれたりする)ツール。普通程度に便利だけどmacで日本語入力時に前述の難あり。

・javascriptのformatter

 Closure Linterも入れちゃったことなので素直にsublime-closure-linterのfixjsstyle呼び出し機能を使おうとしたのですが、処理を実行した風のログを吐いた後にファイルの内容を全消しするという珍挙動しかしないのでまずこれは諦めました。あと有名ドコロのJsFormatはぐぐる先生とちょっとポリシーが違っててアレ(制御構文と条件式入ったかっこの間にスペース入れる入れないとか)なんでやめました。んで仕方ないのでどうしたかというと以下のとおり。
この設定を完了すると command + b でfixjsstyleをキックし、command + shift + r で結果を読み込んでこれる環境になります。
1. build systemとしてfixjsstyleをキックするやつを作り、javascriptに割り当てる
Tools->Build System->New Build System… を開き、以下のコードを入れます。

{
    "cmd": ["fixjsstyle", "$file"],
    "selector": "source.js"
}

これはcmdで始まるやつはほぼ見たまんま(開いてる最中のファイルにfixjsstyleを実行)で、下のはjavascriptのためのビルドシステムですよとsublimeに対して明示するものです。これを適当な名前で保存してあげると、javascriptファイルを開いてる最中にcommand + bするとfixjsstyleが走るようになります。
2. (ホントは再読み込みも一連の流れでやりたかったけどせめて)再読み込み操作にキーバインドをあてる
例えば外部ツールを複数回叩くとかだと外部にシェルスクリプト置いといてソレ叩くcmd書いてとか出来るらしいのですが、sublimeになんかやらせる方法がわからんでした。
今回はcommand + shift + r にファイルの再読み込みを割り当てます。Preference->Key Bindings - Userを開いて以下を入力します。

[
    { "keys": ["super+shift+r"], "command": "revert" }
]

これを保存すると前述のキー入力でファイル再読み込みが走るようになります。GUIのメニューで言うとFile->Revert Fileに当たる操作です。

2012年11月18日日曜日

2012-11-18ごろの日記とMoH:Wの感想

'Medal of Honor: Warfighter' photo (c) 2012, Joshua Livingston - license: http://creativecommons.org/licenses/by/2.0/

 

大したことは何もなく、相変わらずゲームしたりパソコン触ったりしてます。

 

最近クライアント側のウェブっぽいのやってるけどJavascriptが好かん

だいぶしばらくの間クラスベースで設計してJavaで実装する星の人間だったので、アレが無いコレが無いこう書けば出来るというが動的にしかチェックできねーじゃねーかフンギーみたいな感じです。詳細は別途まとめたい。中長期的にはクラスとモジュールをサポートするECMA6がやって来てみんな救われるといいんじゃないかと思いました。

 

3DSとぶつ森買った

BDFFとか他にやりたいゲームもぼちぼち出てきたしいいかなーと思って買いました。とりあえず海釣りして小銭集めてたぬきちを金でしばいて家の拡張などの日々。

 

MoH:Warfighterの感想

安くなってから買おう安くなってから買おうと思ってたけど、ついOriginで定価で買っちゃったので感想。

よかった

  • 銃声や効果音がよい
  • 銃器メーカーが協力したという装備類がオシャレ
  • 何選んでも同じだけどなんかいろいろ選べてうれしいドアブリーチング
    • 例えば、ドアの種類によって適切な手段を選択すると有利とかなら意味あったのでは
  • 妙に本格的な車の運転するミッション(ただ隠れながら移動する後半のやつはキーボードだとだるかった)

よくなかった

  • なんかテカテカした画作りがMWっぽすぎる気がする
  • ヘビーガンナーっていうジャガノっぽい敵が出てくるが好かん
  • 敵味方ともにやたら真っ直ぐ突っ込むAIがあんま賢くない感じで、たまに不思議にスポーティーな動きとかする
  • だいたい大丈夫だけど時々不安な日本語訳(「これがアメリカ海軍だ!武器を捨てろ!」は無いべ)
    • あと、英語音声+日本語字幕に出来ない(吹替と字幕どっちも同じ言語にしか出来ないらしい)

結論から言うと、出来はそこまで悪くないけどなんか妙にMWっぽくて個人的に嫌です。前作のMoH(2010)をやった時に「やった!落ち着いた現代戦ができるシリーズが来たような気がする!」と思っていたので、その点でMoH:Wはほんのり残念でした。でも長い目で見ればオナーってCoDみたいなゲームだから本来こっちだよねと言われればそうかもしれない。

シナリオやロケーションがそれほどひどく浮ついているかというとそこまででもなくて、何がそんなに気に入らなかったのかなと考えてみると、グラがなんかテカテカしててAIがバカっぽいところがなんとなくMWっぽいなぁと思ってたところに、トドメとしてジャガノもどきの重装甲ムジャヒディンが出て来て、あれでだいぶ気分を害したのではないかという気がしてきた。他にも爆発する謎のドラム缶や車とかあって、そういうそれっぽいモノは控えて欲しかった。出来が悪いわけじゃないけど現代戦もの大作FPSを一通りやってる人にとって「またこういうのか」と思う要素に溢れたゲームのように思われた。

銃声や装備類、突入時等のスクリプトされたモーションとか、細部のこだわりはわりといい所もあったけど、先に挙げたような欠点から全体として雑な印象を受ける場面が多かった。あとせっかく特殊部隊推しなんだし実際の特殊部隊の訓練っぽいトレーニングモードとか充実してたらうれしかったかもしれない。ベータでなんか察したのでマルチはほぼやってない。COOPはそもそも存在しない。