読者です 読者をやめる 読者になる 読者になる

5.1さらうどん

@giginetの技術ブログ。ゲーム開発、iOS開発、その他いろいろ

try!Swift Tokyo 2017で『👾&⌚️』というトークをします

f:id:gigi-net:20170226214728p:plain

TOKYO - try! Swift

3/2, 3/3に行われるtry!Swiftカンファレンスで『👾&⌚️』(GAME AND WATCH)というタイトルでLTをさせていただきます!!! 3/3 18:00からの予定です。トリの1つ前です。

内容はApple Watch + SpriteKitについてです。 僕の仕事は愚か、おそらく皆様の業務に1ミリも役に立たない話だと思うのですが、好きなことをこのような大きな場で話させていただけるのは光栄ですね。 わずか5分話すだけなのですが、おそらく1000人近い参加者の前で、同時通訳付きで話すのは初めての経験なので緊張しています。

Apple Watchでのゲーム開発は以前にwatchOS 2でブロック崩しを作るというトークをしたことがあります。

giginet.hateblo.jp

今回はいろいろパワーアップしてると思うのでご期待ください。

fastlane Meetup Japan

f:id:gigi-net:20170226214949p:plain

try!Swiftとは関係ないのですが、3/1(水)にはfastlane Meetup Japanというイベントでも発表いたします。

fastlane Meetup Japan - connpass

fastlaneは業務で使っていることもあって、最近かなり高頻度でcontributionしていて、それがご縁でcontributorとして話させていただきます。 こちらは業務の話が中心になると思います。

平日の日中という参加しづらい時間帯ですが、fastlane開発者の方も来日する貴重な機会となっておりますので、ご興味のある方は是非。

2016年にやったことを振り返ってみた

振り返る

なんか流行ってるっぽいので今年の活動をまとめた

出したアプリ

ふっかつのじゅもん(3月)

〜ふっかつのじゅもん〜

〜ふっかつのじゅもん〜

  • gigi-net.net
  • ゲーム
  • 無料

今年のGGJ(48時間でゲームを作るイベント)で作ったアプリを手直ししてほぼそのまま出した。 プレイ時間は2~3分で終わるけど、そこそこの完成度だし、自己紹介代わりに人に見せたり、アイスブレイキングに最適な作品になった気がする。

48時間2人で作れるゲームとしてはボリューム、完成度共に事実上限界に近い気がするので、来年以降のGGJのあり方を考えていかなければならない

あの日々を思い出す脱出ゲーム『ふっかつのじゅもん』をリリースしました - Kawaz広報ブログ

Camp Camera(12月)

f:id:gigi-net:20161222000454j:plain

Camp Camera

Camp Camera

  • gigi-net.net
  • フード/ドリンク
  • 無料

この前出したやつ。FF15っぽい飯画像が撮影できる。 年末駆動で思いついて1週間ぐらいでガッと作ってみた。ちゃんと使えてるし満足。

地味にゲーム以外のアプリを個人でリリースしたのは初めて。

VOXQUEST(11月)

VOXQUEST -オクスクエスト-

VOXQUEST -オクスクエスト-

  • gigi-net.net
  • ゲーム
  • 無料

2012年ぐらいにリリースしたゲームが、iOS10で動かなくなっていたので、この機会に基幹部分をドラスティックに作り直した。 昔作って思い入れの強いゲームは今後遊べなくなると辛いので、継続的にメンテしていきたい。

続編のVOXCHRONICLEなどは未だに32bitで開発していて、そろそろヤバいと思うので保守管理に着手していきたい。

OSS

今年は仕事が開発基盤系の仕事に移った関係もあり、OSSを作ろうという気概が高まり、ちゃんと使える形にした物は過去最高レベルで多かった。

未完成でボツになった奴も多いけれど、ちゃんと使える状態まで作ったぞ!というのをまとめてみた。

作ったやつ 概要 時期 言語
0 giginet/CCBlowingDitector cocos2d-x for iOSでマイクからの息を検知するやつ 1月 C++
11 giginet/JSONMatcher SwiftでJSONのテストケース書くやつ 5月 Swift
5 giginet/NibLoaderKit UIKitのカスタムビューを簡単に読み込むやつ 7月 Swift
1 giginet/alfred-irkit-workflow AlfredからIRKitで部屋のリモコン弄るやつ 7月 Python
15 giginet/CustomKeyboardTextField UIKitでピッカー付きのテキストフィールドを簡単に作る奴 8月 Swift
3 giginet/beddit-python Beddit Sleep TrackerというIoTのAPI叩くやつ 8月 Python
2 giginet/django-slack-invitation Djangoでユーザー登録時にSlackチームに招待するやつ 8月 Python
11 cookpad/Phakchi iOSアプリのCDC Testingするやつ 9月 Swift
47 giginet/Toybox CLIからXcode Playgroundの管理するやつ 9月 Swift
72 giginet/xcprofiler Xcodeプロジェクトのビルド時間を計測するやつ 12月 Ruby

OSSだから当たり前だけどちゃんと他人が使えるような形で出すこと、未完成でもお蔵入りになるよりは拘らずに出すことを強く意識した。

大体ほとんどのプロジェクトは思いつきではじめられて、土日でガッと作ってリリースみたいなのが多くて長続きしない。 スターの最高は数日前に出したxcprofilerの72個で、ありがたいことにGitHubのTrending1位にも入れた。

反面、ひそかに今年の抱負に★100個を掲げていたので、そこまでは到達せずに残念である。 とはいえ、まあ今までちゃんと出してこなかったので、質・量的にわりと良いのではと言う感じ。

あと、多くのモノはちゃんと実用しているものが多くて良かったと思う。 プロダクトに組み込むとか、業務で利用していくようにしないと、一度作ったモノを継続的に保守管理していくのは難しいと認識した。

Contribution

今年github.comで出したPRは84件だった。とはいえ、自分のモノに出したり、個人プロジェクトに出したりも多いので、純粋なパッチ自体はそこまで多くなさそうだし、ちょっと寂しい。まだまだ増やせると思う。

今年よくPRを出したのはfastlaneで、5件ほど出していた。 今年の抱負に掲げていたけど、達成できなかったので、来年はSwiftとかPythonとか言語自体にcontributionしたい。

f:id:gigi-net:20161231212156p:plain

育てた草

ブログ記事

何か作るごとに書いていた。ありがたいことにコンスタントにブクマをいただけている。

記事
SwiftでJSONのテストを良い感じにするJSONMatcher作った - 5.1さらうどん
XIBを読み込んで良い感じにViewを生成できるライブラリ作った - 5.1さらうどん
UITextFieldに簡単にカスタムキーボード貼るライブラリ作った+iOS UIライブラリのCI改善の話 - 5.1さらうどん
PyCon 2016でPythonのライブラリ開発についてトークします - 5.1さらうどん
PyConJP 2016で『はじめて作るDjangoプラグイン』というトークをしました #pyconjp - 5.1さらうどん
バースデープレゼント2016 - 5.1さらうどん
XcodeのPlaygroundを簡単に管理できるツール「Toybox」を作りました - 5.1さらうどん
あのゲームっぽく飯画像を撮るアプリ、『Camp Camera』をリリースしました - 5.1さらうどん
Swiftプロジェクトのビルド時間を計測・改善するxcprofilerを作った話 - クックパッド開発者ブログ
iOSアプリの継続的デリバリーへの取り組みについての勉強会を開催しました - クックパッド開発者ブログ

意外と爆発的に流行った記事はなかった。来年はゲームの記事とか書きたい。

発表

今年デカかったのはPyConで発表したこと。 懇親会などで聞いた話によると、結構対抗が少ない分野で運が良かった気がする。

準備がひたすら大変だった記憶しか無い。

あとは体調が悪くて、今年の大半は引きこもっていて何もしていない。秋ぐらいからちょっとマシになってきたので出歩くようになってきた。 iOS/Swiftのデカいカンファレンスで話せていないので、来年は何か話したい。特に海外カンファレンスは行ってみたい。

あと、発表ではないのだが、ご縁でPodcastに出たりとかした。自分の声が嫌いなのであまり表に出たくない。

遊んだゲーム

Kawaz - 今年遊んだゲームを振り返ってみる2016【Kawaz Advent Calendar 12/19】

55本ほど買ってた。新作は20本ほど。印象に残ったのはクラロワ、P5、Undertale辺り

続けていたこと

Coursera Machine learning

流行には乗っておこうと思って、CourseraのMachine Learnngコース修了した。 なんだかんだで11週無事にやり遂げた。

まだ何にも実装できていないが、基礎的な所は学べたので、「マシンラーニングでドーン」みたいな雑な発言をしなくて済むようになった。オススメ。

来年はアイディアはあるのでChainerとか使って何か雑に画像判定とか作ってみたい。

日記

5月中旬ぐらいから1日も欠かさず毎日書いていた。わりと続いたと思う。

すぐに記憶が揮発するので、読んだ本の感想とか、作業記録とか、飲み会で話したこととか書いておくと良い。

f:id:gigi-net:20161231212427p:plain

DMM英会話

2ヶ月ぐらいは毎日やってたけどその後飽きて続かなかった。

読んだ本

何冊読んだか数えてないけど2~30冊ぐらい読んだ気がする。書評はパブリックにはしてないけど、日記とかには書くようにしてた。

印象に残ったやつ

Functional Swift: Updated for Swift 3

Functional Swift: Updated for Swift 3

ALLIANCE アライアンス―――人と企業が信頼で結ばれる新しい雇用

ALLIANCE アライアンス―――人と企業が信頼で結ばれる新しい雇用

チームが機能するとはどういうことか――「学習力」と「実行力」を高める実践アプローチ

チームが機能するとはどういうことか――「学習力」と「実行力」を高める実践アプローチ

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

やり抜く力 GRIT(グリット)――人生のあらゆる成功を決める「究極の能力」を身につける

やり抜く力 GRIT(グリット)――人生のあらゆる成功を決める「究極の能力」を身につける

あと、身体ぶっ壊してたので、とにかく辛くて、睡眠とか、マインドフルネスとか、哲学とか、普段絶対読まないような怪しげな書物に傾倒していたのが印象深かった。

まとめ

今年はとにかく体調をぶっ壊してアカンかった。 今振り返れば、1月からひたすら具合悪いと言ってる記憶しか無かった。 特に夏ぐらいが最悪で、いきなり過呼吸で病院に運ばれたり、仕事以外に外に出歩けないようになっていた。 具合悪すぎて、MRIとか大腸内視鏡とか突っ込んだけど特に病変はなくて良かった。結局原因はよくわからなかった。 それが原因で、引きこもって1人で風呂に入りながら本読んでたりとか、出歩かずにコード書いていたりしていて、対外的な活動があんまりできなかった。

11月中旬ぐらいになってようやっと調子がよくなってきて、普段の生活を取り戻せたけど、今年はとにかくそれが辛かった。 とにかく来年は辛い思いをすることなく健康に生きたい。

皆様身体には本当に気をつけて欲しい。

今振り返ってみると、勢いだけでガッと進める短期プロジェクトが多いので、来年は趣味のゲーム開発とかを含めて、半年ぐらい長期で続けられることをしていきたい。 特にゲームはもうちょっと出したい。

今年もお世話になりました。来年もよろしくお願いします。

あのゲームっぽく飯画像を撮るアプリ、『Camp Camera』をリリースしました

Camp Camera

f:id:gigi-net:20161221232434p:plain

この度、あのゲームっぽくお飯の画像を撮るiOSアプリ『Camp Camera』を公開しました。

Camp Camera

Camp Camera

  • gigi-net.net
  • Food & Drink
  • Free

思いついてシュッと1週間ぐらいで作った。

右下にウィンドウが付くほか、ゲーム画面っぽく見えるように良い感じに写真を加工してくれるアプリです。 普段のお飯がステータスアップしそうな感じに撮影できます。

f:id:gigi-net:20161221235622j:plain

無料でダウンロードできますので、良かったら是非使ってみてください。

技術的な見所

アプリ開発自体は、仕事でいつもアプリを作っているのでシュッと作れた。 この週末で作らないとAppleの冬休みの関係で年内にリリースができないので、締めきり駆動開発みたいな感じで一気に作った。

技術的には強いて言えば、この辺が面白い気がする

Core Image

お飯の画像をゲーム画面っぽくするのに、iOSCore Imageというやつを使っている。

最初はMetalなどを使ってシェーダーを書こうと思っていたけど、シェーディング言語は、一応GLSLを触ったことはあるけど、ほぼ書いたことがなかったので学習コストがかかりそうだったのと、よくよく調べたら、デフォルトで実装されているフィルタを組み合わせればやりたいことはできそうだったので、結局はbuilt-inのフィルタだけを使ってそれっぽく実現した。

並べてみるとこんな感じで変換される。陰影が消えてゲームっぽい。

Before After
f:id:gigi-net:20160831115628j:plain f:id:gigi-net:20161222000454j:plain

ドキュメントが公開されているのだが、パラメータの調整などについて、全く資料がなくて、このアプリの開発時間の半分ぐらいはフィルタを良い感じにするためのパラメータ調整に費やされた。 iOS9から追加された、被写界深度を調整するフィルタなどを利用しているのだけど、どこにも資料がなくて厳しかった。

Core Image Filter Reference

それに加えて、このアプリを作るに当たって、わざわざCore Imageの知見を学び直したりして勉強になった。

What's New in Core Image - WWDC 2015 - Videos - Apple Developer

Developing Core Image Filters for iOS - WWDC 2014 - Videos - Apple Developer

まだまだ無限に調整の余地があるのでいい感じにしていきたい。

Core Text

ユーザーが任意のレシピ名を入力して、右下のウィンドウにそれっぽく入れるのにはCore Textを使っている。

ウィンドウは、Sketchでベクターデータとしてそれっぽく目コピーして作り直した。

f:id:gigi-net:20161221234207p:plain

アプリ内ではこのデータを保持していて、Core Textを使って動的にレシピ名を合成して描画している。

f:id:gigi-net:20161221234748p:plain

Core Text、上手くやれば影や縁取りなども簡単にできるし、頑張ればこれぐらいのリッチな表現はできる。

まとめ

Camp Camera

Camp Camera

  • gigi-net.net
  • Food & Drink
  • Free

思いついて誰かに先を越されないか気にしつつ、1週間弱でガッと作ったけど、いろいろ勉強になって良かった。 ほかにも地味にPure Swift 3で書かれていたり、fastlaneでサブミットまでできるようになってたり、中身は無駄にモダンです。

どうぞご利用ください。

冒頭の親子丼は、職場の近くにあるお店の究極の親子丼というメニューで美味しかった。

恵比寿 鶏味座

食べログ恵比寿 鶏味座

こんな感じで毎日美味しいものを食べながらデバッグできてモチベーションを維持できて良かった。

他にも取材と称して昼から3500円の鰻などを食べたりしていて、完全に気が狂っていた。美味しかったです。

f:id:gigi-net:20161221235931p:plain

Thanks to WPZOOM about nice icon sets.