艦これタイマー for firefox addonの拡張

5,399 views

Published on

艦これタイマー for firefox addonを拡張してみた。

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,399
On SlideShare
0
From Embeds
0
Number of Embeds
78
Actions
Shares
0
Downloads
1
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

艦これタイマー for firefox addonの拡張

  1. 1. 艦これタイマー for Firefox addonの拡張 吉田@板橋 1
  2. 2. 艦これとは • 『艦隊これくしょん -艦これ-』(かんたいこれくしょ ん かんこれ)は、角川ゲームスが開発し、 DMM.comが配信しているブラウザゲームである。 第二次世界大戦期の大日本帝国海軍の軍艦を 萌えキャラクターに擬人化した、「艦娘(かんむ す)」と呼ばれるキャラクターのカードをゲーム中 で集め、強化しながら敵と戦闘し勝利を目指すと いう内容である。 • http://ja.wikipedia.org/wiki/艦隊これくしょん_艦これ2
  3. 3. 艦これタイマー for Firefoxとは • Amanoさん作のソフトウェア • 艦これタイマーとは遠征や入渠、建造の残り 時間を管理し、時間がくると通知してくれるア プリの総称。 • 艦これタイマー for Firefoxはタイマーを自動設 定するためにFirefoxアドオンとして作成された 艦これタイマーです。 • http://miku39.jp/blog/wp/?page_id=1705#i-2 3
  4. 4. 艦これタイマー for Firefoxの技術 • nsIObserverService で http-on-examine-response (HTTPの受信)の通知を受け取り、艦これのURL であれば nsITraceableChannel で通信の内容を チェック、タイマーの設定を行っています。 • 残り時間の取得のためにサーバーに一切アク セスは行わないため、サーバーの負荷に優しい 仕様です。また、オンラインゲーム利用規約を読 んだ上でサーバーにアクセスを行わない実装 • http://miku39.jp/blog/wp/?page_id=1705#_for_ Firefox 4
  5. 5. 規約との整合性 • • • http://www.dmm.co.jp/rule/=/category=onlinegame_service/ (8)不正な方法(特殊なプログラムを介しての)でのアクセスを試みる行為 (12)その他当社が不適切と判断する行為 • (8)については、人口増加によるサーバー過負荷での猫問題もあったのでむや みやたらにサーバーにアクセスしない方がサーバーに負荷はかからないし、サー バーにアクセスしなければ「アクセスを試みる行為」にも該当しないし誰にも迷惑 がかからないので、通信内容を見て判断するのは問題ない”だろう”と、通常こう いう項目はサーバーのクラッキング行為や、通信手順をなぞる外部プログラムを 使った、1クリックで遠征できますとかダメージのある艦艇をまとめて入渠させま すとかのマクロや、戦闘シーンを高速にしてさくさくと経験値稼ぎできます(通常で はありえない頻度で通信をすることになりサーバー負荷も高まる)とかいんちき処 理などを想定しているものであること、(12)については、当社というのは DMM.comを指していますが、何をもって不適切と判断するのかDMM.com次第の ため気にしてもしかたがないので、その時になったら開発中止などを考えることに する。要請があれば素直に従う。 http://miku39.jp/blog/wp/?p=1867 • 5
  6. 6. 艦これタイマー for Firefox のライセンスとソース • MITライセンス – http://miku39.jp/blog/wp/?page_id=1705 • ソース – xpiファイルなのでzipとして展開可能 • リポジトリ – https://bitbucket.org/amano_rox/kancolle-timerfor-firefox 6
  7. 7. 現在の状況 • 本家はタイマーとしての機能は十分に実装済 • サイトのコメントで要望は多くでているが、タイ マーの範囲を超える要望が多い • 作者のamanoさんは提督業で忙しい • 個人的にも付けたい機能がある – 艦これタイマー for Firefox をベースにしてAddonを作ることにした 7
  8. 8. 本題 • • • • ビルドの自動化 JavaScriptの構文チェック Smarttab&(改行コード)問題 (Mercurialからgitへ) 8
  9. 9. ビルドの自動化(1) • 当初はリポジトリが不明であった。 – ライセンスも明示されていなかった。 – ビルドスクリプトも無かった。 – ビルドのためのスクリプトを作成 #ビルドスクリプト初期版 rm chrome/kancolletimer.jar; (cd chrome/ ; zip -r kancolletimer.jar chrome/ ) ; rm ../kancolletimer.xpi ; zip -r ../kancolletimer.xpi * 9
  10. 10. ビルドの自動化(2) • リポジトリの所在が公開される。 – リポジトリ内にはbuild用のスクリプトが存在 • 上記を使う(呼び出す)ようにスクリプト修正 – マニフェスト(作者等の情報ファイル)がxpi版と異 なる • その整合性を合わせる • 作者情報等を正しく入れるようにする – JavaScriptの構文チェック(後述)を追加 10
  11. 11. ビルドの自動化(3) #ビルドスクリプト $ cat Makefile define SHELLSCRIPT mkdir -p ../build/chrome if type -a JSsyntaxcheck.sh > /dev/null 2>&1 ; then JSsyntaxcheck.sh chrome/content/*.js || exit 1; fi #Version modify cp -f install.rdf install.rdf.orig sed -i -e "s/<¥/em:version>/."`git rev-parse --short HEAD`"<¥/em:version>/g" install.rdf sed -i -e "s/<em:creator>/<em:creator>KoedoYoshida<¥/em:creator><em:creator>/g" install.rdf (中略) bash build.sh cp -f install.rdf install.rdf.bak cp -f install.rdf.orig install.rdf endef export SHELLSCRIPT all:: echo "$${SHELLSCRIPT}" > /tmp/$$$$ ; $(SHELL) /tmp/$$$$ ; rm -f /tmp/$$$$ 11
  12. 12. JavaScriptの構文チェック(1) • 構文等のケアレスミスがあると、がっかりする。 • Firefox23まではWebコンソールにJavaScriptの 構文エラーがわかりやすく表示されていた。 • Firefox24でWebコンソールの出力内容変更、 構文エラーが表示されないケースが… • FirefoxESR17を使えるのもあとわずか…. • 構文チェックツールを探すことに… 12
  13. 13. JavaScriptの構文チェック(2) • JShintを使用 – Node.jsまたはRhino等で動作 – http://www.jshint.com/install/ • Rhino – Rhino(ライノー)とはオープンソースで開発されて いるJavaScriptの実装である。RhinoはJavaで記述 されており、Mozilla Foundationによって管理、配 布されている。 – https://developer.mozilla.org/en-US/docs/Rhino/ 13
  14. 14. JavaScriptの構文チェック(3) • cygwin環境で下記を作成。 • ^Eは構文エラー検出のみ使用したかったため、 ワーニングレベルだと元ソースでも多数出る。 $ cat /usr/local/bin/JSsyntaxcheck.sh #!/bin/bash "/cygdrive/c/Program Files/Java/jre7/bin/java.exe" -Dfile.encoding=UTF-8 -jar "C:¥cygwin¥home¥user¥rhino1_7R4¥js.jar" "C:¥cygwin¥home¥user¥jshintrhino-2.1.10.js" $@ | grep "^E" && exit 1 exit 0 14
  15. 15. JavaScriptの構文チェック(4) • チェック行数を無制限に変更 • Node.js版と出力フォーマットも多少異なるが、1行で出力するよう修正。 • エラーはE999,ワーニングはW999といったフォーマット。 $ diff -uNr jshint-rhino-2.1.10.orig.js jshint-rhino-2.1.10.js (中略) state.option.maxerr = state.option.maxerr || 50; + state.option.maxerr = state.option.maxerr || Number.POSITIVE_INFINITY; (中略) for (var i = 0, err; err = JSHINT.errors[i]; i += 1) { print(err.reason + " (" + name + ":" + err.line + ":" + err.character + ")"); print("> " + (err.evidence || "").replace(/^¥s*(¥S*(¥s+¥S+)*)¥s*$/, "$1")); print(""); + print(err.code + ":" + err.reason + " (" + name + ":" + err.line + ":" + err.character + ")" + "> " + (err.evidence || "").replace(/^¥s*(¥S*(¥s+¥S+)*)¥s*$/, "$1")); 15 }
  16. 16. smarttab問題(1) • 元ソースのインデントは – – – – 1段目:4SPACE 2段目:tab 3段目: tab 4SPACE 4段目: tab tab • いわゆるsmarttab(by JSHint) • Java ScriptのIndent規約 – http://www.oracle.com/technetwork/java/javase/documentatio n/codeconventions-136091.html#262 – Four spaces should be used as the unit of indentation. The exact construction of the indentation (spaces vs. tabs) is unspecified. Tabs must be set exactly every 8 spaces (not 4). 16
  17. 17. smarttab問題(2) • リファクタリングしにくいので置換する – 差分は… diff –bで 17
  18. 18. smarttab問題(3) • .git/hooks/pre-commitで対応 – 特定ブランチはtabの存在を許す。 – それ以外のブランチは強制修正または警告 • git cherry-pickにpre-commitが呼ばれない – git format-patchとgit amを併用 – .git/hooks/pre-applypatchで.git/hooks/precommitを呼ぶ。 – 最終的にgit commit --amend -C HEAD 18
  19. 19. smarttab問題(3) $ cat .git/hooks/pre-commit #!/bin/bash if git rev-parse --verify HEAD >/dev/null 2>&1 then against=HEAD else # Initial commit: diff against an empty tree object against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 fi #master branch is ok git branch | grep -e '^* master$' && exit 0 RET=0 if git branch | grep -e '^* target-branch$' >/dev/null 2>&1 then for FILE in `git diff-index --name-status $against -- | grep -E '^[AUM].*¥.js$'| cut -c3-`; do sed -i -e 's/¥t/ /g' "$FILE" done exit $RET 19 fi
  20. 20. smarttab問題(4) cat .git/hooks/pre-applypatch #!/bin/sh #サンプルそのまま有効化 . git-sh-setup test -x "$GIT_DIR/hooks/pre-commit" && exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"} $ git-format-patch ~ (中略) $ git am --ignore-space-change 000x.patch $ git add -A ;git commit --amend -C HEAD 20
  21. 21. 改行コード • 省略 21
  22. 22. Mercurialからgitへ • 省略 22
  23. 23. 閑話休題 23
  24. 24. UI比較 24
  25. 25. オリジナル 25
  26. 26. 機能追加後 例1 26
  27. 27. 機能追加後 例2 27
  28. 28. 機能追加内容 • 保有艦数、保有設備数を表示 – 最大に近づくと警告表示へ • 艦隊のコンディション等内部パラメータの可視化 • レベルが高いのにロック解除されている艦があ ると警告(誤操作での解体、合成の警告) • 入渠の修理時間での降順リスト表示 • 近代化改装(合成)での候補リスト表示 • 演習相手の編成から獲得できるEXP概算を表示 • 等 28
  29. 29. 参考資料 • カスタム版ソース – https://bitbucket.org/koedoyoshida/kancolletimer-for-firefox/ – ライセンスMIT • オリジナル – http://miku39.jp/blog/wp/?page_id=1705 – https://bitbucket.org/amano_rox/kancolle-timerfor-firefox 29
  30. 30. 注意事項 • 本資料およびソースは無保証であり、本資料お よびソースによって直接、または間接に損害を 受けられたとしても私は責任を取りません。 • 一部機能は隠し機能です。適当に操作したり、 ソースを見てください。 • 開発版のため機能等については予告無く変更さ れます。 • 要望、ご不満等ある方はパッチの送付をお願い します。 • 予定は未定です。 30

×