2016年にやったゲーム

2015年はこちら

去年に引き続き2016年にプレイしたゲームを振り返ってみる。スマホゲーム、テーブルゲームは除く。

今年はかなり仕事のほうが忙しかったんだけどなんだかんだで色々ゲームできたなあ。少しのネタバレもあるので注意。

東京ザナドゥ

PS Vita版。トゥルーエンドまでクリア。

アクションゲームとしてはまあまあいいんだけどカメラワークが荒くて高速移動しながら攻撃するとわけがわからなくなる。フル3Dもいいけど、フェルガナの誓いみたいなクオータービューのアクションゲームもまたやりたいなあ。

Bloodborne

聖杯ダンジョンを最後までクリア。本編+DLCは2015年にクリア済み。

あと2016年末に新規キャラ作ってもう一周してついでにトロフィーコンプリートも達成した。2015年にやったときにはPS Plus未加入だったのでメッセージや死に様が見れて楽しかった。協力プレイや対戦プレイはやってない。

Steins;Gate 0

外伝小説のゲーム化。小説の一部は読んでいたけど最後までは読んでなかった。 本編で語られなかった部分が語られるのは楽しいけど、矛盾が生じるのも気になった(例えば、繰り返しのタイムリープで戻ってきたらしいけど長期間監禁されてませんでしたっけ?)。まあツイートにも書いたけど多少の矛盾など声優さんの演技によって感情の勢いで押し切ればいいのです。

自分はPS4版でプレイ。攻略縛りでトロフィーコンプリートしたりした。ダークオカリンが一番好き。

ダークソウル3

今年一番やりこんだゲーム。シリーズはデモンズソウル、ダークソウル、Bloodborneをクリア済み。ダクソ2はそのうち。。。

一周目はグレートアックス+呪術で脳筋ゴリ押し。二周目以降はダークソードちょっと使ってみたけど最終的にはトゲの直剣に落ち着いた。出血はうまく決まると楽しい。

魔法、奇跡をほとんど使ってないのでそのうち新キャラ作ってやり直したい。灰瓶とエスト瓶のバランスを考えなくちゃいけないので1周目は脳筋選ぶ人が多い気がする。

クリア後はストーリーラスボスの白霊で稼いだりしてた。レベル下げる手段がないのでレベル上げにも使えずソウルが余りまくってる。 (レベルをあげちゃうとマッチングしにくくなる)

1キャラで3周してトロフィーコンプリートも達成。約定の証集めがやはり一番つらかった。生まれ変わりで運と理力あげまくって、見えない体+ソウルの槍で銀騎士を暗殺し続けた。

ダークソウル3やるときにPS Plusに加入した。一回プレイ中にブレーカー飛ばしたことがあって、セーブデータ壊れたことがあった。 周回キャラだったのでうへ~まじかよ、と思ったんだけど、PS Plusの自動バックアップからほぼ復旧できた。加入しててよかった。。。

DLC1もクリア済み。攻略見る前にボス倒したんだけど、探索がガバガバで武器とか全然拾えてなかった。

一番好きなボスは冷たい谷の踊り子。勝てなすぎて絶望&勝てた時の快感がやばかった。

逆転裁判6

大逆転裁判の大しておもしろくない+伏線はりまくったストーリーが謎のままだったのに大変不満だったので始める前に不安だったけどやってみたら大変楽しめた。王道ストーリー好き。

6は1話からだいぶ難しいと感じた。特に託宣はちゃんと考えても難しかった。

なるほどくんがいつまでも世代交代できないのはかわいそうだけど、ドラゴンボールの悟空みたいなものだから今後もなんだかんだで出てくるしか無いんだろうなあ。

スローンとマクヘールの謎の物語

ウミガメのスープを飲んだ男が自殺した。なぜか?」という水平思考パズルのDSゲーム。

通勤中にもくもくとやってた。こういうゲーム少なくなってきてるけど私は好きです。

よるのないくに

PS Plusのフリープレイであったのでプレイ。 二人のイチャイチャを見るゲームなので世界がどうなったのとかはどうでもいいや。

GRAVITY DAZE

PS4版をプレイ。ツイートにも書いたけど爽快感がすごい。一階下に行こうと思ったときに崖を飛び越す、みたいな自由な気分になれるのが素敵。キトゥンになりたい。

2がPS VR対応だったら面白いなーと思いつつ、間違いなく酔うよなあ。。。

世界一長い5分間

プレイ中。 iOSの「彼女は最後にそう言った」がよかったのでその作者の別ゲーを探していて見つけたゲーム。 暇な時にたまにやってるけどVitaをプレイする時間が減ったので放置してる。

2015年にやったゲーム

技術的な内容はQiitaに書くことにしてここで2015年にプレイしたゲームを振り返ってみる。スマホゲーム、テーブルゲームは除く。

1月 デモンズソウル

冬休みに難易度の高いアクションゲームがやりたいなと思い、ゲーム実況でもよく見ていたダークソウルをやろうと思ったのだがPS3PS Storeでダウンロード購入できなかったため購入できるこちらをプレイ。the Bestになっているので安いのもありがたい。

このデモンズソウルが自分の中でソウルシリーズ初プレイであり動画でほとんど見ていなかったのもあってガッツリハマりこんだ。プレイした人ならわかると思うが当然のように王城1では雑魚相手に殺されまくり、初見のボスに殺された時は手が震えてゲームが出来ないためそのまま床につく、そんな日々だった。

ネットワークゲームもあまりやらないのだが、このデモンズソウルでは共闘・敵対という仕組みがあり、デーモンを倒して手に入れた貴重な生身があっという間に黒ファントムに失われたりとスリルを味わうことができた。デモンズソウルは発売から5年経つゲームなのにちゃんとネットワークが機能していて愛されてるなあと感じた。

噂通り難易度がそこそこ高いゲーム(下手くそでもソウル稼いでレベルを上げればなんとかなる)なので万人受けするわけではないと思うが2015年で一番面白いゲームだった。惜しむらくはこのような経験ができるチャンスがほんとに少なくなっていること。悲しきかな社会人の忙しさよ。

一番好きなボスは黄衣の翁。召喚されたどこかのプレイヤーに対人慣れてないのを突かれてフルボッコされたいい思い出。

2月 ダークソウル

デモンズソウルが面白すぎたので引き続きダークソウルをPS3でプレイ。こちらは実行プレイ動画でかなり見ていたため初見ならではの新鮮さは薄かったが、それでも見たことがある世界を巡り強力なボスを倒し倒されするのはやはり楽しいものだった(死んだ回数でいうと雑魚やステージによるもののほうが圧倒的に多いのだけれど)。

デモンズソウルと違ってステージ同士がつながっているのも没入感向上に役に立っていたと思う。おかげで何度も迷子になるは目になったけど。。。

好きなボスは貪食ドラゴン。脳筋でオラオラ殴ってたらそれ以上の攻撃でぶっ殺されてやっぱりこのゲーム難易度高いなって再確認した。

嫌いというか苦手なボスがたくさんいた。オンスモも辛かったし(オーンスタイン→スモウの順で倒した)苗床はうまく枝に乗れなくて落下死しまくった。10回以上ボス戦で死んだのはマヌスか苗床かどっちかだけだとおもう・・・。

4月 Ever17

気になっていた名作アドベンチャーゲーム。リメイクされたXbox360版でプレイ。ネタバレは避けるがいわゆる恋愛アドベンチャーゲームだと思ってやると引っかかる仕掛けが用意されている。

若干古いゲームではあるけれど、なかなか明かされない謎やなんとなく存在している違和感が明かされる時の快感はさすが名作。トゥルーエンドに到達した後に色々考察サイトを見に行ったりしてました。

好きなキャラは空。というか来年はもう2017年じゃないか。空は来年にはできてるんだろうなあ(混乱)

4-5月 世界樹不思議のダンジョン

ほんとはやるつもりなかったのだけど、周りでやってる人がいたのと惰性でプレイ。不思議なダンジョンの仲間プレイ(アスカ見参の一致団結とか)はいうことを聞いてくれないととても苦手なのだがこのゲームではAIが強かったり特技をちゃんと持たせることであまりストレスなくすすめることができた。

一度だけFOEに地上まで攻めこまれたが(ルールよくわかってなかった)それ以外で全滅することもなく淡々とプレイし淡々と終わった。

6月 Bloodborne

今年フロムゲー3作目。ゲームシステムはあまり違いはないがゲーム性は盾ゲーからすきを縫って斬りつけるゲーに変化した。結局最後まで銃パリィはうまくならなかったなあ。今回は死亡回数が表示されないのがちょっと残念。

さくさくやれるのでクリアしたあともメインの武器を変えて2周目やったり全裸素手縛り(乳母までいって燃え尽き症候群で放置中)やったりしてる。聖杯は固有ダンジョンのみ(全部クリアできてないけど)。

ストーリーというか主人公の目的がよくわからなかったんだけど、ゲーム終わってからクトゥルフ神話が元になっているのではないかという話をみてなるほどと思ったりした。 最近DLCを最後までプレイし、インスマス(のような場所)を探索するのはかなりテンション上がった。

好きなボスはヤーナムの影。全裸素手縛りで泣きそうになった。

7-8月 大逆転裁判

期待したのが悪かったのだけれど、それでも予約や発売直後で買った人に対して完結してない作品であることを伏せるのはがっかり。

8月- 艦これ

今更始めたのかよと言われたけど、いつも満員で、空席があるサーバーを見たのは今回が初めてだったのです。いまは司令部レベル102で5-3攻略中。 こうやって振り返ると時間泥棒は間違いなくこいつなのでほどほどにしないとなあ。

10-12月 東京ザナドゥ

未クリア。最近ようやく最終章まで来た。たぶんいろんな人がいってるだろうけどペルソナ4ぽい。。。

GitHubのMarkdownの目次を自動でつくるChrome Extensionを作った

f:id:mtgto:20150329221332p:plain

GitHubのMarkdownに目次が欲しかった

Markdownが便利なのでよく使ってます。メモはKobitoで取り、はてなブログもMarkdownで書いています。GitHubではMarkdown以外にもOrgとかRestructured Textとか使えますが、一番使われてるのはMarkdownなのではないでしょうか。

ところがGitHubではMarkdownドキュメントの目次がデフォルトでは表示されてないため、長いドキュメントの場合読むのが不便でした。ユーザースクリプトでもよかったんですが、一度Chrome Extensionを作ってみたかったので作って公開しました。

Chrome Web Storeのダウンロードページ

GitHubのプロジェクトページ

3/27(金)に作り始めて3/29(日)に公開しました。

感想

TypeScript

先日作ったオープンなプルリクエストを表示するExpress.jsアプリにつづいてTypeScriptを使いました。といってもTSファイル2つしかないので、どちらかというとChromeJQueryの型定義ファイルを使えて楽だったというのが大きいです。特に理由がない限りしばらくはAltJSとしてはTypeScriptを使おうと思います。

あともう慣れてしまったけど、tsdpmがずっと落ちているのが辛い。

Chrome Extensionのドキュメント

ぐぐるといろんな記事が出てきますが、古くなっているものが稀によくあるので注意したほうが良いと思います。今回だと無視URLリストを機能拡張のオプションページで指定できるんですが、これの保存にLocalStorage使えばOKみたいな記事が最初見つかったけど、もっと使いやすいstorage機能が標準であったのでそっちに途中から切り替えました(保存できる値がLocalStorageだと文字列だけだけどChrome storageは配列が使える)。

公式ドキュメントは便利だけど、APIドキュメントがDash対応してくれればもっと見やすいんだけどなあ。

小さいプロジェクトでgulp使わなくてよいのでは

今回はgulpを使ってTypeScriptのコンパイル、SourceMap追加、uglify、JadeからHTMLへの変換を行いました。まあ便利なんですが、それを実現するためにgulpを使い、利用するライブラリの使い方を調べるのは少々コスパが悪いかと感じました(今回のプロジェクトでは9つのライブラリを使ってます)。3日で作成から公開まで作れる程度のプロジェクトだったから特に感じたのかもしれません。それらパッケージがさらに別のパッケージに依存しているため、バージョンアップが止まった時の影響が大きいのも気になります。

Grunt/Gulpで憔悴したおっさんの話という記事が最近はてブで人気でしたが同じ気分で、次にJSプロジェクト作るときにはnpm run-scriptを試してみます。express.jsとChrome Extensionのプロジェクト作るときはすでにgulpfile作ったのでgulp使うけど。

その他・BowerとかPrimerとか

Chrome ExtensionのContent ScriptモードからはCDNのJQuery使えなかったのでプロジェクト内にJQueryを取り込む必要があります。GitHubJQueryを持ち込むのも嫌だったので、Bower使ってJQueryとPrimer(オプションページのCSS用)をプロジェクトに取り込んでみました。

Bowerはどう使うとnpmやgulpと連携しやすいのかよくわからなかったので、デフォルトの設定のままにライブラリをインストールし、gulpで必要なファイルだけコピーすることにしました。bower initbower.jsonが作成できますが、package.jsonの情報を見てくれてない?ぽくてよくわからなかった。

Chrome拡張機能のオプションページ(chrome://extensions/から移動できる)は拡張ごとにわりとフリーダムなようだったので今回は最近GitHubが公開したPrimerを使ってみました。といってもフォームをいくつか使っただけで大した使い方したわけじゃないんですが。

DashでJava SE 8 日本語ドキュメントに対応させてみた

Java 9版はこちら

f:id:mtgto:20140826013726p:plain:w300

Java SE 日本語ドキュメントの置き場所を読んでいて気付いたのですが、いつの間にかJava SE 8の日本語ドキュメントが公開されていたのですね(リンクはAPIドキュメント)。現時点ではまだすべてのクラスが日本語化されてるわけではないようですが、よく調べるところを日本語で読めるのはありがたいものです。

ということでMacユーザーならきっとみんな使ってるAPIビューアDashJava SE 8のドキュメントを見る方法の紹介です。なおJava APIドキュメントのライセンスで、インターネットでの再配布は許可されていないため、Docsetの再配布をする予定はありません。予めご了承ください(ライセンスにcan be redistributed internallyとあるので、作ったものを個人的にお渡しすることならできるようです)。

※この記事はJava SE 7編の続編です

必要なもの

  • Xcode (docset変換アプリのビルド用)

手順

  1. 改造版javadocsetを取得、ビルド
  2. zip書庫になってるドキュメントをダウンロード
  3. docsetを作成
  4. Dashに取り込む

1. 改造版javadocsetを取得、ビルド

DashでAPIドキュメントを利用するには、専用のdocsetという形式に変換する必要があります。 Dash作者のGitHubリポジトリjavadocsetというJavadocをdocsetに変換するアプリがあるのですが、このアプリでは日本語のAPIドキュメントには対応してないため、改造したものを使います。

a. 日本語版対応javadocsetをダウンロード

私が作ったjavadocsetの改造版があるのでそれをcheckoutしてください.

git clone https://github.com/mtgto/javadocset.git

終わったらjavadocset/javadocset.xcodeprjXcodeで開きます.

b. ビルドする

MacアプリのビルドするだけならAppleMac Developer Programへの登録は不要です.

XcodeProductメニューからArchiveを選択します.

f:id:mtgto:20140826013845p:plain

ビルドに成功するとOrganizerが開くので、Export...ボタンを押します.

f:id:mtgto:20140826013925j:plain:w300

Save Built Productsを選択し、適当なフォルダに保存します.

f:id:mtgto:20140826014001p:plain:w300

保存したフォルダのusr/local/bin/javadocsetというファイルをパスの通るところにコピーします.

2. zip書庫になってるドキュメントをダウンロードする

次に日本語版ドキュメントをダウンロードします.

http://www.oracle.com/technetwork/jp/java/java-sun-1440465-ja.html

執筆時点ではこのURLですが、将来変わっているかもしれません。そのときには冒頭の「Java SE 日本語ドキュメントの置き場所」を参考に探してください.

今回はJava SE 8用のドキュメントがほしいので8.zipをダウンロードします. 展開するとE54527_01というフォルダが生成されます.

f:id:mtgto:20140826090222p:plain:w300

3. docsetを生成する

1.で作ったjavadocsetを使ってDashが読めるdocset形式へ変換します.

コンソールで2.で書庫を展開したフォルダに移動してから、

$ javadocset 'Java SE 8' api

のように実行すると、3分ほどで完了し、Java SE 8.docsetというフォルダが作成されます. Java SE 8.docsetのファイルサイズは281.9MBとなりました.

4. Dashに取り込む

あとは適当なフォルダにJava SE 8.docsetをコピーしてダブルクリックすればDashに取り込まれます.

以上で終わりです!ここまで読んでいただきありがとうございました.

znc (IRC proxy server) のSSLオレオレ証明書をMacにインストールする

大したことじゃないんだけど、解決するのに2時間くらいかかったからメモ。

背景

znc wikiの署名済みサーバ証明書のページにはちゃんとした証明書貰った場合の設定の仕方が書いてあって、そりゃそっちの方が正しいってのはわかるんだけど実験用サーバとかでHostsに適当な名前をつけて使いたいことがあった。 そのサーバにznc建ててSSL使おうと思ったんだけど、IRC Client(俺はTextual使ってる)とかweb adminがサーバ証明書おかしいぜ、っていちいち文句言うのなんとかしたかった。

TL;DR

自己署名証明書でもいいからSSLでznc使いたいならznc --makepemで作成したpemに含まれる証明書をキーチェーンアクセスに追加すればよい。

試したこととかハマったこととか

  • opensslで生成したcrtとかkeyをzncサーバにコピーして使う
  • キーチェーンで生成したcrtとかpemをzncサーバにコピーして使う

→zncがpem読めないのか、TCPつないでもすぐ切れる

  • chefのレシピ作成中のvagrantznc --makepemで作成したpemを使ってたらCNがvagrant-centos65.vagrantup.comとかになってた

→正しいホスト名にしてからpemつくろう

最終的にやったこと

  1. zncサーバに入ってznc --makepem秘密鍵兼証明書を作成
  2. BEGIN CERTIFICATEからEND CERTIFICATEまでの行をhogehoge.certに保存
  3. hogehoge.certをキーチェーンアクセスで開きホスト名が正しいことを確認して追加する

以上です。

夏コミで出す本のご紹介「ななかInside PRESS vol.5」3日目 8/17 (Sun) き36b

f:id:mtgto:20140814231248j:plain:w300

夏が暑くて本も厚い

前回の投稿が1月だったのにいつの間にやら夏本番!台風も来てましたが本番の天気はどうなることでしょうか。そこ、どっちみち中は暑いだろ、とか言わないように。

さて、なんだかんだで我々第七開発セクションのコミケ参加も五回目となります。まあ今回は初回以来の落選とあいなりまして、これで今回はゆっくりできる・・・と思ったのですが、@richmikanまつらリッチ研究所さんのところで置かせていただけることにあいなりまして、めでたしめでたし。 今回も冬コミの紹介同様に各記事の紹介をしちゃいますので、参加する人もしない人も気になったら読んでみるといいよ。

各記事のご紹介

「Immutable Infrastructureの最適解を探る」 by いつもの戦犯 @tboffice

Immutable Infrastructure(略すとII)ってのは直訳すると不変なインフラ、つまり設定をあとでいじったりしない、というような意味です。当記事では前回冬コミで特集したChefを始めとしてAnsible、Serverspec、Docker、Cobbler、Serfといったツールの紹介と導入方法について触れています。 私個人はプログラマーとして作ったコードをインフラに載せるのが仕事なわけで、デプロイのスクリプト化(CapistranoとFabric)はやったことがありますが、それより下のレイヤー(ミドルウェアやOS)までコード化しないと大規模インフラを扱えないクなってきているわけでして。いやはやインフラの世界も流行の入れ替わり激しいものですね。

「恐怖 シェルショッカーの掟 ~Web アプリ早く作れぬ言語は rm -rf の巻~」 by 謎の救世主 @richmikan

個人的に一番面白かった記事。シェルスクリプトでWebのショッピングサイトを作る記事です。とか書いてもワケガワカラナイヨッて感じですが、要はショッピングサイトのCGI部分を*NIX標準コマンド+独自の便利シェルスクリプトの組み合わせることによって実現できることの説明をしています。コードはGitHubで公開&実際に稼働しているサーバーもあるので机上の空論ではありませんので念のため。

「解説 Socket.IO 1.0」 by @sisidovski

WebSocketが注目されていた時代に、プロトコル未対応のブラウザでも同じようなAPIで利用することができたnode.js用の双方向通信ライブラリSocket.IOは今年2014年の5月にリリースされました。1.0においてマルチプロセス環境でのスケーラビリティの向上やNode.js以外のプログラムからサーバへのイベント通知ができるようになったことをご存知でしょうか。 はい、私は全然知りませんでした。この記事ではそんな方にもう一度Socket.ioの重ねてきた進化を知るいい機会になるのではないでしょうか。

「バランス wii ボードで健康管理」 by @tkzwtks

プログラマーのダイエットは一味違います。Wii Fit UのバランスボードをBlueToothでPCに接続、通信内容をパースして最後はfitbit.comに送信するところまで作っちゃいます。 それ以外にも自転車の走行距離を自動計測したり食事の内容はEvernoteに保存したり、とどこまでもプログラマーらしさが光る内容となっています。実際にダイエットの効果があったのかはこの記事で確認してみてください。

「今すぐ試そう HTTP/2」 by @syu_cream

ここ1, 2年、GoogleのSPDYプロトコルをベースとした次期HTTPバージョンの仕様の策定、標準化が進んでいるHTTP/2。皆様も耳にしたり気が早い人は既にブラウザのオプションでHTTP/2を有効にしてTwitterFacebookなどを使っているのではないでしょうか。 この記事では現行のv1.1の問題点の解説、2.0がそれをどう解決するのかの説明、そしてHTTP/2対応のサーバーやクライアントの使い方の紹介を行っています。ちなみにこの記事の執筆後にdraft14が公開されて、慌てて加筆してもらったのはここだけのはなし。

風水プログラミング」 by @irimo_hot

中国4000年の歴史が産みだした気の流れを元にしたプログラミング環境の構築の紹介を行っています。そう、コンソールの入力待ちのときに$マークが表示されているのは風水によって金運をアップさせるためなんだよ、な、なんだってー?みたいな知識を得ることができます。 関係無いですが銀座にある弊社では机の上にいろんな私物をおいている人が多いですが、あれもひょっとしたら風水に基づくものだったりするんでしょうか。

AWS をコード化する」 by @rosylilly

AWSの設定を試行錯誤した結果、再現できない状態になってしまって困ったことはないですか?かといってChefのクックブックは学習コスト高いし・・・みたいな。 当記事ではRoute 53(AWSDNSサービス)を題材に、RubyによってDNSレコードの設定を例を交えながら解説します。例えば「Route 53がサービスのヘルスチェックを行い、サービスダウンと判定したらレコードを自動的に変更する」設定をRubyで書くことができることを説明しています。 DNSの設定って最初にやって後は放置、みたいなものだと思っていたのですが、Route53なら動的に切り替えられることを知っていれば「他のスクリプトと組み合わせればもっと面白いことができるのでは?」など新しい発想が出てくるきっかけにもなるかもしれませんね。

「できね!家庭用 3D プリンタ」 by おめが

「Up!Plus2」「SCOOVO C170」「Da Vinci」という3つの家庭用3Dプリンタ(といってもそれなりのお値段します)を半年間使ってみて分かった比較と必要な調節について解説しています。 魔術師でなくても空想具現化ができるのはありがたい時代になったものです。あとは空想の3Dモデリング化の技術の進歩の方をお願いしたいです。。。

というわけで

日曜日の三日目、き36b「松浦リッチ研究所」でお待ちしております。 B5で160ページってもうわけわからんな!おねだんは1,200円だそうです。既刊(前回+前々回)もあるだけ持っていきます。 ちなみに表紙の地球(?)はコードによって生み出される世界(=サーバー)を意味してるんだそうです。言われなきゃわからなかったけど可愛いから許しました。

そういえば私が今回の本のために書いた記事は諸事情でお蔵入りにしたので近いうちにこのブログで公開できればなあと思っています。

新年の挨拶と1年半ぶりにiOSアプリをバージョンアップした話

あけましておめでとうございます。コミケを見にきていただいた方はお疲れ様でした。


突然だがニコニコ実況っていうサービスが好きだ。日曜洋画劇場ニコニコ実況片手にみんなで見てる気分になるのが好きだった(最近は全く見なくなってしまった。理由は察してくれ)。ニコニコ実況っていうのは要はテレビ版のニコニコだ。俺の部屋のテレビとPCはそっぽ向くように置かれてるのでテレビ見てる時にパソコンを見るのが面倒だった。なのでiPhone版アプリを作った。

ニコ実

ニコ実

  • Satoshi Goto
  • エンターテインメント
  • 無料

12月後半、あるきっかけで休日の3連休にがっつり改修を行い、iTunes Connectのホリデーが終わってすぐアプリ申請、大晦日にリリースされた。iPadで文字が小さくなってしまう問題があったりもしたが(修正版を申請したのでもう少しお待ちください)、概ねレビューを見ると好評のようでアップデート作業をやってよかったなと思っている。

最後に更新してから1年半以上経ったアップデートになったわけだが、最初はリファクタリングのつもりだったんだがこれから書く変更点のせいで結局ほとんど1から書き直すことになった。この文章を書く前は「こうしたほうがいい」とかいう話にしようかなとおもったんだけど正月だしお酒飲んでてめんどくさくなってきたのでただの列挙になってしまった。ここまで読んでる人がいたら申し訳ない。

覚えてる大きな変更点

ARC

それまでのアプリは非ARCコードで書かれていたので、ARC対応にした(アップデート前はiOS 4.3対応だったため)。retain, release, autorelease, dealloc書かなくてよくなったのはほんとうに有難い。やはり面倒なことは一つでも少ない方がいい。行も短くなるし。

CocoaPods

以前は対応しているライブラリも少なく使ってなかったのだが、最近はかなり揃っているので使うことにした。使っているライブラリは次の通り。

  • AFNetworking
  • CocoaLumberjack
  • AFKissXMLRequestOperation
  • SSKeychain

空っぽなプロジェクトにAFNetworkingを追加すると、出来上がるバイナリサイズが370KBほど増えたので結構怖いなと感じた。何でもかんでも追加するとファイルサイズがどんどんでかくなっていくので使用するライブラリは必要最小限にするようにしたほうがいい。

今はMac / iOSのアプリを一つのxcworkspaceで作ってるんだが、そういったPodfileの定義する方法の情報が見つからなくて辛かった。ごちゃごちゃいじってたらできたんだが、ここでは書かない。興味ある人はそのアプリをOSSで公開する予定なのでそれを待ってほしい。

Storyboard

チーム開発ではコンフリクト解消が困難になるので使わないほうがいいだろうが、個人開発では使ったほうがいいと思う。ビュー間の移動をSegueでコード無しで追加できるのは楽だ。ただiPadのビューが6つあるとThunderbolt Displayを使っていてもStoryboardの編集は狭くて使いづらいのである程度ビューが少ないアプリじゃないときついかもしれない。

あと慣れてないのも悪いんだが、Auto layoutにかなり苦しめられた。親画面からの相対位置で右寄せ、下寄せさせたいだけなのに何度もXcodeに怒られながら修正をする必要があった。たまに警告なしの状態にしてもビルド時に失敗したことがあったので、なんかバグが残ってる気がする。前のバネで指定する方式は楽だったなあ。

Localize

前はUIのローカライズをするときにはxibをロケールの数作って編集していた気がするんだが、今はxib/storyboardとstringsファイルに分けて後者だけを編集すればいいようになっている。便利だなと思う一方で、自動生成されるstringsをみてもどの位置の文字列かパッとわからないこともあって辛かった。今後xib/storyboardいじったときにstringsのアップデートで苦しめられそうな未来が予想できる。

あと前もあったんだが、Localizable.stringsを追加してもシミュレータでは追加が反映されるのに実機では反映されないことが起きた。Option押しながらクリーンをやったら反映されるようになったんだが、原因がはっきりせずにもやもやしたままだったりする。

iOS 7の全画面ビュー

iOS 7からステータスバーの裏もビューとして使われるようになった。そのためコメントが流れる領域とステータスバーが被ってしまい、ステータスバーがとても読みにくくなった。ぐぐると一枚ビューを置いてTop Layout Guideを使ってステータスバー分だけずらすように設定しておけばStoryboardだけでもステータスバーには被らないように出来た。

delegateからBlocksへ

今回のアプリだと例えば「HTTP API叩いて通信結果が成功したらビューを更新して失敗したらエラーダイアログだす」みたいな処理が多い。今までまずは成功、失敗呼び出しを定義したプロトコルを作り、delegateを登録し、ってことをやってたんだがこれをBlocks型に書き換えた。 Blocksにしたことで「成功と失敗処理が同一メソッド内にあるので見やすい」「プロトコルを定義する必要がない・名前を考える必要がない」という楽さを感じた。ちょっと変わったことをやろうとすると苦労することもあるが(例えばBlocksで再帰呼び出しメモリリークしないように書く、とか)、ちょっとした通信処理とか書くときにはスッキリ書けるっていうだけでBlocksに変えてよかったなと思う。

終わりに

1年半ぶりのアップデートをやることでiOSの世界では1年半ってとても長いんだなというのを強く感じた。例えばNSArray, NSDictionaryなどのシンプルな糖衣構文や、上では書いてないがModulesも使うようになった。OSのメジャーバージョンも上がるのが早いし、開発者が追いついていくのもなかなか大変なものだ。それでも、いやだからこそiOSは新しいものが好きな開発者にとって楽しいプラットフォームなのかなと思ったのだった。