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

naichi's lab

3日後の自分(他人)への書き置き

【Unity、Android】最新のAndroidStudio入れたらUnable to list target platforms.が出て困った

WindowsPCでAndroidビルドしようとしたらエラーした

環境

  • Windows 10 Home
  • Unity 5.6.0f3

症状

状況

WindowsPC買い替えて、Unity5.6インストール。 Android Studioも最新版いれて、JDK1.8も入れた。

さてAndroidビルドするか。->エラー

f:id:naichilab:20170409155809p:plain

Unable to list target platforms. Please make sure the
android sdk path is correct. See the Console for more
details. See the Console for details.

コンソール

CommandInvokationFailure: Unable to list target platforms. Please make sure the android sdk path is correct. See the Console for more details. 
C:/Program Files/Java/jdk1.8.0_121\bin\java.exe -Xmx2048M -Dcom.android.sdkmanager.toolsdir="C:\Users\kitte\AppData\Local\Android\Sdk\tools" -Dfile.encoding=UTF8 -jar "C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer/Tools\sdktools.jar" -
stderr[
Error:Invalid command android
]
stdout[
]
exit code: 64
UnityEditor.Android.Command.Run (System.Diagnostics.ProcessStartInfo psi, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg)
UnityEditor.Android.AndroidSDKTools.RunCommandInternal (System.String javaExe, System.String sdkToolsDir, System.String[] sdkToolCommand, Int32 memoryMB, System.String workingdir, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg)
UnityEditor.Android.AndroidSDKTools.RunCommandSafe (System.String javaExe, System.String sdkToolsDir, System.String[] sdkToolCommand, Int32 memoryMB, System.String workingdir, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg)
UnityEditor.HostView:OnGUI()
Error building Player: CommandInvokationFailure: Unable to list target platforms. Please make sure the android sdk path is correct. See the Console for more details. 
C:/Program Files/Java/jdk1.8.0_121\bin\java.exe -Xmx2048M -Dcom.android.sdkmanager.toolsdir="C:\Users\kitte\AppData\Local\Android\Sdk\tools" -Dfile.encoding=UTF8 -jar "C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer/Tools\sdktools.jar" -
stderr[
Error:Invalid command android
]
stdout[
]
exit code: 64

なんのこっちゃ

Android Studio でSDKパスを確認

Android Studioを起動して右下から

f:id:naichilab:20170409160326p:plain

f:id:naichilab:20170409160357p:plain

書かれてるパスをコピー

f:id:naichilab:20170409160432p:plain

Unity側

f:id:naichilab:20170409160515p:plain

ちゃんと入ってる。

ぐぐる

それっぽい記事が見つかった

Unityで「Unable to list target platforms」というエラーが出て、Android向けビルドができなくなった場合の対処法

Android Sdk Toolsのバージョン確認

AndroidStudio -> Configure -> SDK Manager

f:id:naichilab:20170409163116p:plain

26.0.1 だった。

Android.bat のほうのバージョン確認

って↑の記事に書かれてる Android.bat 起動しない・・・

AndroidStudioのメニューから Tools -> Android -> SDK Managerってやっても同じものが起動するし・・・

別の記事を参考に

qiita.com

ダウンロード

https://developer.android.com/studio/index.html

一番下の tools_r25.2.3-windows.zip

f:id:naichilab:20170409165657p:plain

293Mって・・・

Android SDK Tools フォルダを上書きする

SDKフォルダのtoolsフォルダはリネームしておく

プロセスから adb 殺さないとリネームできないかも

f:id:naichilab:20170409170049p:plain

さっきダウンロードしたファイルを解凍して、tools フォルダとしてコピーする

新旧toolsフォルダの中身

f:id:naichilab:20170409170232p:plain

全然ちがう・・・

ビルド

通った!!!!

まとめ

  • 新しいAndroidStudioだとSDKToolsの構造が違うみたい。
  • Unity側がまだそれに対応してないのかな。
  • SDKToolsのフォルダを手動でダウングレードして対応。

GGJで作ったゲームを展示してきました @ サイエンス・ワークショップ in けいはんな #精華町

今日はこのイベントに行ってきました。

kscan.jp

といっても講演を見に行ったわけでもなく、ワークショップを開いたわけでもなく、
子供達にGGJで作ったゲームを遊んでもらってました。

写真

f:id:naichilab:20170306004142j:plain

楽しそうに遊んでくれる子供達

f:id:naichilab:20170306003431j:plain

親子の対戦中

f:id:naichilab:20170306003434j:plain

子供はルールの理解も早い

他にも Microsoftさんが 女子高生AI りんな の出し物してたり、
Pepper君がPPAP踊ってたり、リアル精華ちゃんがいたりしました。

展示したゲーム

基本的にGGJで作ったゲームを展示。
自分が参加した会場もここだったので、試遊会って位置付けですね。

blog.naichilab.com

育毛DJ

IKUMO-DJ | Global Game Jam®

植毛リズムゲーム。
見た目がわかりやすく親子で楽しんでくれました。

Escape by Ship

Escape by Ship | Global Game Jam®

船を狙う砲台 に分かれて戦うゲーム。
逃げる or 撃つ とやることがはっきりしてるので小さな子も楽しんでました。

心電図パニック

心電図パニック Electrocardiogram panic | Global Game Jam®

運び込まれる患者をタップ連打で助けるゲーム。
なかなか忙しいゲームなので小さいお子さんには難しそうだった。
そもそもマウス操作に慣れてない子も多かったので
その場でiPadに書き出してタッチ操作できるようにして展示しました。

四子舞

Shishimai | Global Game Jam®

2人1チームでコントローラを操作して対戦する4人対戦ゲーム
大人も子供も楽しめるいいゲーム。

FORDITE

Fordite | Global Game Jam®

シンプルな避けゲー
間違いなく今日一番遊ばれたゲームですね。
1時間かけてクリアして帰って行った子もいました。

子供に遊んでもらった所感

  • マウス操作に慣れていない
    • マウスを初めて触る子もいました
  • とにかく飲み込みが早い
    • 最初はわけわからず操作してても、数回やったらもう理解してる
    • マウス操作も然り
  • タッチ追従よりドラッグ
    • 心電図パニックはタッチしている箇所に移動。という操作なんだけど、 キャラクターを何度もドラッグ移動しようとしてる子が多かった。

なるほどな〜

おまけ

f:id:naichilab:20170306003436j:plain

こっそり太陽人間も展示

f:id:naichilab:20170306003435j:plain

お父さんに単語の意味を聞きながら太陽人間を遊んでる女の子
たしなめる ってなに?
ドン引き ってなに?
JK ってなに?
お父さん困らせてすいませんでしたw

f:id:naichilab:20170306003432j:plain

1-2 Switch で遊ぶ兄弟
そら面白いよね
任天堂さすがやわ〜〜〜〜〜

【unity】プログラマーがデザイナーと協力してゲームを作った話【 #太陽人間 】

f:id:naichilab:20170304165555p:plain

太陽人間リリースしました

太陽人間というゲームアプリをリリースしました!

コミット履歴を見たら昨年7月3日からだったので、、、開発8ヶ月!
まじか。2〜3ヶ月で出すつもりだったのにw

ちょっと不具合出てるみたいですが、評価は概ね好評で胸を撫で下ろしています。
すでにプレイいただいている皆様、ありがとうございます!

ダウンロードリンクはこの記事の最下部にまとめてありますので 未プレイの方はぜひダウンロードお願いします!

さて、このアプリですが 、 開発はプログラマー(私 @naichilab )とデザイナー( りるをさん )の二人体制で作りました。

今日はプログラマー視点で開発を振り返ってみたいと思います。 会話までは全部覚えてないので使ったツールの紹介とかそういうのメインで。

ではさっそく。

開発期間

2016/07頭〜2017/02末 (8ヶ月間)

京ゆにで作ろうか〜って話をしたときは3ヶ月ぐらいで出そうって話をしていた覚えがあります。
ぜんっぜん無理でしたね。見積もりの3倍かかるのは本当w

当初はキャラ30種類!とか、アプリ内課金もする!とか、
りるをさんの中で風呂敷広げまくりで大変だった記憶が・・・w

京ゆに行くたびみんなにいつ出るの?って聞かれて
もうちょっと、もうちょっとって言い続けてた気がするw

役割分担

  • 原案 りるを
  • ゲームデザイン りるを、ないち
  • キャラクターデザイン りるを
  • 素材
    • 背景 りるを
    • キャラクター りるを
    • UI りるを
    • 音 りるを
  • プログラム
    • ゲームロジック全般 ないち
    • アニメーション りるを、ないち
  • ストア準備 りるを
  • 開発環境準備 ないち
  • 開発協力
    • テキスト作成アシスタント いおさわさん
    • キャラコラボ ぴのPさん

まぁ見た目に関するところはりるをさん、 プログラム系は自分、
どっちでも無いところは都度相談って感じでした。

お互いのスキル分野が全く被ってないのでその点は楽だった。

使ったツールとか

Git & GitHub

ソースコード管理に利用。ホスティングはGitHubのPrivateリポジトリ(有料)。

github.com

りるをさんも使った経験はあるが、あまり深くは知らないのでブランチは切らずに全部masterで運用した。
競合対策は専用フォルダ ( assets/riruwo/)の用意!安易w

f:id:naichilab:20170304173625p:plain:w320

全部で822コミットだった。 だいたい自分700、りるをさん100ぐらい。

f:id:naichilab:20170304173745p:plain:w320

コミットの時間帯分布。深夜過ぎて笑えるw

SourceTree

GitのGUIツール。無料。

ja.atlassian.com

自分もりるをさんもこれを使用した。
使い慣れればまぁまぁ使いやすい。

Brabio

プロジェクト管理ツール。無料。

brabio.jp

最初の一ヶ月ぐらい使ったけど、二人ならここまで大掛かりなものは不要だった。
すぐにTrelloに移行した。

Trello

タスク管理ツール。無料。

trello.com

むちゃ手軽で使いやすい。Android/iOSアプリも使いやすい。
リリースまでの全タスクを書き出して担当者を割り当てて管理。
バグとか改善案とか見つけたらすぐに放り込んでた。

Slack

コミュニケーションツール。無料。

slack.com

チャンネルは3つ

会話用チャンネル

f:id:naichilab:20170304175110p:plain:w320

普段の会話用。
Trelloカードへのコメント記入や、GitHubへのプッシュを自動通知するように設定してた。

CI用チャンネル

f:id:naichilab:20170304175300p:plain:w320

機械的な通知を集約。
Trelloカードの作成・編集・アーカイブ・コメント、GitHubへのプッシュ、
UnityCloudBuildの成功・失敗

夜中にGitHubへプッシュしておくと、朝にはCloudBuildから通知がきていて、
通勤時間にリンクからスマホにインストールして不具合をTrelloにメモ。とかそんな使い方をしていた。

エゴサ用チャンネル

f:id:naichilab:20170304175643p:plain:w320

IFTTT経由でTwitterの検索結果を通知。
全部見てますw

Unity Cloud Build

自動ビルドツール。無料。

unity3d.com

GitHubにプッシュすると自動ビルドが開始されるように設定。

f:id:naichilab:20170304175941p:plain:w320

最終的に残ったビルド設定は3つ。

  • Android Release
    • スマホでダウンロードして直接試す用途
    • GooglePlayConsoleのベータ版にアップロードする用途
    • GooglePlayConsoleのリリース版にアップロードする用途
  • iOS AdHoc
    • テスト端末を登録した証明書で署名したもの。
    • 実機での動作確認用に利用
    • Slackへの通知->CloudBuildを開く->iPhone/iPadに直接インストールって使い方
  • iOS AppStore
    • iTunes Connectにアップロードする用
    • ダウンロードしてApplication Loaderでアップロード

とにかくローカルでビルドしなくて済むようにした。

f:id:naichilab:20170304180409p:plain:w320

プッシュさえしておけば15分後にはダウンロードできるのでオススメ。

GitHubWiki

GitHubの一機能。

f:id:naichilab:20170304180521p:plain:w320

Trello&Slackで決めて決まったら記入的な使い方。
っていってもやっぱり面倒なので忘れがち。

GoogleDrive

共有フォルダ。無料。

f:id:naichilab:20170304180641p:plain:w320

当初は仕様書的なものも入れてもらってたけど、
結局Git上に Documents/ ってフォルダ作ってそっちに入れてもらうようになった。
最後まで使ってたのは Google SpreadSheet
これはセリフとか文章リソースの管理に使った。

IFTTT

なにかをトリガーになにかするサービス(なんていうのw)。無料。

ifttt.com

Slackのとこにも書いたけど、Twitter検索してSlackに通知。って用途で使ってる。

Skype

一度だけ打ち合わせに使ったけどほぼ毎月京ゆにで合うしそんなに使わなかったなぁ。

京ゆに

コミュニケーションツール(?)。1500円/回。

https://kyotounity.jimdo.com/

人に見せるのはモチベーション維持に大事ですね・・・
よくエターナらずにリリースできたと思う。

人に見せる

デジゲー博に出したり、POP会で見せたり、妻や知人に遊んでもらったり。 人に遊んでもらって反応を見る・聞くのは大変有益でした。

わかりづらい点やアドバイスももらえるし、何よりモチベ(ry

協力いただいた皆さんありがとうございました。

まとめ

って感じでいろんなツール使ってみました。
人と協力して作るのは初めてだったので、いろいろ勉強になりました。

お互い趣味での開発だったので、モチベーションの維持が一番大変だったかなぁ。 そういう意味ではCloudBuild、Slack、Trelloの組み合わせはよかったと思う。 常に動くものを確認できる。次やることを細分化してメモできる。って点で。

あとはツールと関係無いけどUnityのアニメーション周りとかりるをさんに教えてもらって、
ある程度使えるようになったのはよかった。

しばらくは休憩するけどまた何か作りたいねぇ。

太陽人間のプログラマからは以上です!!!

ダウンロードリンク

よろしくお願いします!

iOS

太陽人間

太陽人間

  • kawamura ayumi
  • ゲーム
  • 無料

Android

play.google.com

【Unity、TextMeshPro】簡単な使い方+日本語フォントアセットを作るときの設定値メモ

f:id:naichilab:20170301225136p:plain

ストアはこちら -> TextMeshPro

TextMeshProが無料になったらしい。

すごいですね。

自分はだいぶ前のセールに買ってからずっと使ってます。

日本語フォント作るときの設定値をメモしておきます。

Font Asset Creater

TextMeshPro付属のアセット作成ツール

Window -> TextMeshPro - Font Asset Creater

f:id:naichilab:20170301225453p:plain

ひらがなだけとか、使う文字が決まってる場合

key value
Font Source <フォントファイルを選択>
Font Size Custom Size - 48
Font Padding 5
Packing Method Fast
Atlas Resolution 1024 * 1024
Character Set Custom Characters
Custom Character List 下記参照
Font Style Normal - 2
Font Render Mode Distance Field 16
Get Kerning Pairs? false
0123456789
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
あいうえおかきくけこ
さしすせそたちつてと
なにぬねのはひふへほ
まみむめもやゆよ
らりるれろわをん
がぎぐげござじずぜぞ
だぢづでど
ばびぶべぼぱぴぷぺぽ
ぁぃぅぇぉっゃゅょゔ
アイウエオカキクケコ
サシスセソタチツテト
ナニヌネノハヒフヘホ
マミムメモヤユヨ
ラリルレロワヲン
ガギグゲゴザジズゼゾ
ダヂヅデド
バビブベボパピプペポ
ァィゥェォッャュョヴ
、。!?ー…「」『』×
( ) +-%.'・/:;

こんな感じ

f:id:naichilab:20170301224910p:plain:w480

あとは Generate Font Atlas -> Save TextMeshPro Font Asset で保存するだけ。

文字数によってはフォントサイズを小さくしないとダメかもですね。

使い方

UGUIなら -> Create -> UI -> TextMeshPro - Text

f:id:naichilab:20170301225543p:plain

3Dなら -> Create -> 3D Object -> TextMeshPro - Text

f:id:naichilab:20170301225813p:plain

あとはまぁさっき作ったフォントアセット選んでテキスト入力してって感じ。

f:id:naichilab:20170301230144p:plain

日本語全部は?

漢字含めた日本語全部、とかは作ったことないです。 必要になったら調べます。

【読んだ】UnityではじめるC# 基礎編

読んだ本の感想メモ。

読んだ本

UnityではじめるC# 基礎編

UnityではじめるC# 基礎編

なぜ読んだ?

Twitterで分かりやすいと評判っぽかったので一度読んでみたいと思ってた。
全くの素人にプログラミング教えたりすることがたまにあるので、
教え方の参考になるような箇所があればいいなーという思いもあった。

さらにたまたまAmazonの技術書セールで半額になってたので購入。

どんな本?

表紙に 知識ゼロでも大丈夫!! と書いてある通り、非常に分かりやすい。
非常に丁寧な説明と共に豊富なスクリーンショットが載っており、
誰でもゲームを完成させられる作りになっている。

この本で作成するゲームは下記2本。

  • 脱出ゲーム
  • 物理パズルゲーム

冒頭はC#の基本から、Unityの基本的なお作法とか。
脱出ゲームではタッチ判定とそれを受け取る処理、配列を使ってまとめる方法など。
物理パズルゲームでは2Dの物理処理と当たり判定とかに触れてた。
ゲーム自体はシンプルなものだけど、うまくUnityの機能を説明してるなーと感じた。

さらに最後にはXCodeでのビルド方法や、
GooglePlay/AppStoreへの公開方法まで書かれてるサービスっぷり。

とりあえず真似ればゲームができてスマホで動く、さらにストアにも公開できる。 これ1冊でばっちりスマホアプリ開発者を名乗れますね・・・ 初めてUnityを触る人にはとてもいい教材なんじゃないかな?

挿絵で 余裕があったらこういう改造してみよう! みたいに和尚が微笑んでる
とりあえずこれをベースに一本だしてみいって言われてるようだ・・・

おすすめできる?

こんな人におすすめ

  • スマホゲーム作ってみたいけど何から手をつけていいかわからない人
  • Unity触れるようになりたいデザイナーの人

こんな人にはオススメできない

  • 中級者以上(とっても易しいので)

まとめ

Unityの知識として知らなかった点は1つもなかったけど、
初心者への教え方とか、分かりやすい書き方とかの参考にはなった。
挿絵もたっぷりで誤植も見つからなかったし結構いい本だと思いました。

UnityではじめるC# 基礎編

UnityではじめるC# 基礎編

【zsh、percol】percolで履歴検索、cd履歴ジャンプとか

久々にターミナル触ったらほとんど忘れてたのでリハビリ

iTerm+zsh入れてたんだけどあんまり使いこなせてないし、 これを機に気になってたoh-my-zshっての入れてみることにした。

さらに調べてる途中で見つけたpercolってのも入れてみた。

環境

  • 2017/02/28
  • Mac OS X El Capitan 10.11.6

oh-my-zsh

git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc

インストールはこれだけ。

~/.zshrc のZSH_THEMEは wedisagree にした。

path が消えたので ~/.zshrc に下記を追加した。

export PATH=/bin:/usr/bin:/usr/local/bin:${PATH}
eval "$(rbenv init -)"

percol

sudo pip install percol してみたがエラー。

ぐぐったら easy_install pip すると直るよと書いてあったので試す。

入った

f:id:naichilab:20170228005320p:plain

percolでコマンド履歴検索

percolを使ってターミナル操作を早く、便利に。 - すぎゃーんメモ

上記の通りなんだけど、~/.zshrc に下記を追加した

# ctrl+Rで履歴検索
# http://memo.sugyan.com/entry/20140611/1402487717
function percol_select_history() {
    local tac
    if which tac > /dev/null; then
        tac="tac"
    else
        tac="tail -r"
    fi
    BUFFER=$(fc -l -n 1 | eval $tac | percol --query "$LBUFFER")
    CURSOR=$#BUFFER             # move cursor
    zle -R -c                   # refresh
}
zle -N percol_select_history
bindkey '^R' percol_select_history

はてなの引用貼り付けしたらフォーマット死んだのでコピペしました。すいません。

ctrl+r 押すだけでコマンド履歴がpercolで表示される。

f:id:naichilab:20170228005455p:plain

そのまま単語入れればAND検索で絞り込める。 さらにEnter押せばプロンプトに入力されるのでそのまま再実行できる。

なんて便利なんだ・・・

percolでcd履歴ジャンプ

percol で z / autojump のようにディレクトリ高速ジャンプ - Slip Ahead Logging

またまた上記の通りなんだけど、~/.zshrc に下記を追加した

# percolで履歴ジャンプ
# http://stillpedant.hatenablog.com/entry/percol-cd-history
# {{{
# cd 履歴を記録
typeset -U chpwd_functions
CD_HISTORY_FILE=${HOME}/.cd_history_file # cd 履歴の記録先ファイル
function chpwd_record_history() {
    echo $PWD >> ${CD_HISTORY_FILE}
}
chpwd_functions=($chpwd_functions chpwd_record_history)

# percol を使って cd 履歴の中からディレクトリを選択
# 過去の訪問回数が多いほど選択候補の上に来る
function percol_get_destination_from_history() {
    sort ${CD_HISTORY_FILE} | uniq -c | sort -r | \
        sed -e 's/^[ ]*[0-9]*[ ]*//' | \
        sed -e s"/^${HOME//\//\\/}/~/" | \
        percol | xargs echo
}

# percol を使って cd 履歴の中からディレクトリを選択し cd するウィジェット
function percol_cd_history() {
    local destination=$(percol_get_destination_from_history)
    [ -n $destination ] && cd ${destination/#\~/${HOME}}
    zle reset-prompt
}
zle -N percol_cd_history

# percol を使って cd 履歴の中からディレクトリを選択し,現在のカーソル位置に挿入するウィジェット
function percol_insert_history() {
    local destination=$(percol_get_destination_from_history)
    if [ $? -eq 0 ]; then
        local new_left="${LBUFFER} ${destination} "
        BUFFER=${new_left}${RBUFFER}
        CURSOR=${#new_left}
    fi
    zle reset-prompt
}
zle -N percol_insert_history
# }}}

# C-x ; でディレクトリに cd
# C-x i でディレクトリを挿入
bindkey '^x;' percol_cd_history
bindkey '^xi' percol_insert_history

こちらもはてなの引用貼り付けしたらフォーマット死んだのでコピペしました。すいません。

引用元の最後の2行はエラーしたので消した。

ctrl + x -> ; でcd履歴からジャンプ
ctrl + x -> i で履歴パスをプロンプトに貼り付け

もちろんpercolなので履歴を自由に絞り込める

これも超便利

まとめ

フォルダ移動する際に cd ~/hogehoge みたいなのを記憶を頼りに打ってたから超楽になった・・・

どっかに 世界変わるわ って書かれてたけどこれは本当に変わるわ・・・

ありがとうありがとう

【参加してきた】雲勉:大阪【勉強会:開発者向け】サーバーレスで作るモバイルアプリバックエンド #kumoben

kumoben.doorkeeper.jp

参加してきました。

会社紹介

おきまりの宣伝

  • アイレット株式会社
    • 2003〜
    • 従業員162名ちょい
    • システム開発、ゲーム開発、保守、マネージドホスティング
  • cloudpack大阪
    • 構築
    • MSP運用
    • MSP開発
  • cloudpack
    • デザイン
    • 設計・コンサル
    • システム開発
    • MSP
  • 7年間AWSのみで運用
    • 600社1200プロジェクト超
  • APNプログラム
    • Amazonパートナープログラムの
    • プレミアパートナーに5年連続選ばれている
    • アジアで7社だけ
  • 請求代行サービス
  • AWSよりも安い
  • 大阪の話
    • RoBoHon オートヒーリングシステム
      • 改ざん自動修復
    • スタバのサーバーレス案件
    • 毎日放送 動画イズム444
      • フルサーバーレスで実現
      • 3ヶ月でデザインからリリースまで
    • 近畿大学AWS移行
    • MSP事業支援開発
      • kibana
  • サーバーレス開発チームの取り組み
    • MaaS(仮) & ServerlessPack
  • KDDIの子会社になりました。 2017/01/25
  • 募集
    • 開発・インフラ・UI/UXエンジニア

雲勉について

  • cloudpackの社内勉強会を外に公開
  • 基本的に資料公開はしない
  • 今回は中級者向け
  • #kumoben

サーバレスで作るモバイルアプリバックエンド

やっとはじまり

自己紹介

  • すみさきさん
  • Webアプリケーションエンジニア
  • 2016/09~cloudpackにjoin

サーバレスってなに

サーバ「レス」

  • サーバが存在しない
    • サーバはあります
  • サーバの存在を意識しなくていい
    • 自動スケーリング
  • ハードウェア、OS、ミドルウェアに依存しない
    • コードが動くことが大事
  • ステートレス
    • リクエストごとにプロセスを使い捨てる
  • 使いたい「機能」にフォーカスを当てる
    • FaaS (Function as a Service)

どっかの偉い人 0.5秒実行するインスタンスを20mm秒以下で効率的に起動できるならサーバレス

メリット

  • リソースを時間単位で確保
    • 運用費用を削減できる
  • インフラが存在しないため構築の手間を削減
    • 初期費用も削減できる

デメリット

  • それぞれが独立・非同期
    • 原子性を確保することが難しい
  • SLAが保障されていないものが多い
    • 障害発生時のリカバリー手順が必要
  • 構築から運用まで一貫して考える必要あり

実案件で使おうとするとここらへんが難しい

構成例

f:id:naichilab:20170208195803j:plain

AWSにおけるサーバレスサービス

いくつかある。

f:id:naichilab:20170208195602j:plain

AWS Lambda

  • AWSのサーバレスといえばこれ
  • Java8、Node.js、Phthon2.7、C#で記述可能
    • java 初回が重たい
      • CPUがっつり使う処理には有効
    • Node.js
      • 色々めんどくさい
    • Phthon
      • コンソールでかけるのでよい
    • C#
      • まだあまり試してない
  • たいていの処理はなんとかしてくれる
  • 初期の同時実行数は100に制限(アカウント単位!
    • 過度な依存は禁物
    • AWSに相談すれば少しあげることはできる・・・
  • 最大処理可能時間は5分

Amazon API Gateway

  • RESTfulなAPIを構築できるサービス
  • 他のサービスのプロキシをしたり、APII/Fになったり
  • Webサービスのスロットリングにも使える
    • スロットリング:際限なくアクセスされることを防ぐ
  • Lambdaと仲良し
  • 30秒でタイムアウトする

Amazon DynamoDB

  • 高速で柔軟なNoSQLデータベース
  • 事前に設定したスループット要件に合わせて自動的にスケーリング
  • オンラインゲームのバックエンドに使われたりする
  • スループット要件に対して課金される
    • 利用料金が青天井
    • 例)秒間1万件データ取得したい
      • -> 秒間1万件以上に設定すると、その金額がずっとかかる
  • 1日2回しかスループット要件変えられない。

Amazon S3 (Simple Storage Service)

  • シンプルで耐久性がありスケーラブルなオブジェクトストレージ
  • 99.999999999%の耐久性
  • 99.99%の可用性
  • 静的ウェブサイトホスティングという機能があり、コレ1つでWebサイトを作ることも可能
  • 仕組み上高速ではない
    • 同じオブジェクトを読み書きする際には注意が必要
  • 親戚
    • グレイシア(長期保存用)

Amazon Cognito

  • ユーザーのサインアップとサインインの機能を追加できる
  • ソーシャルIDや自前のIDシステムによる認証もできる
  • 認証したユーザーにIAMロールを割り当てる使い方など
  • 中身は3つぐらいに分かれている
    • Cognito UserPool
    • Cognito Identity
    • Cognito Sync
      • スマホ間同期とか
  • 認証用メールがAmazon SESを通じて発行される
    • キャリアメールが関わる場合は工夫が必要
      • キャリア側の迷惑メールフィルタに引っかかる
    • 動画IZMではSendGridを利用

番外編

Amazon CloudFront

  • CDNサービス
  • コンテンツを世界に配信できる
  • S3やAPIGatewayの前段に挟むことで痒いところに手が届く
    • S3へのアクセスを減らせる
    • S3は404以外のエラーはサポートしていない
    • APIGatewayの前段でAppFirewallの機能を担う

Amazon Route 53

  • 可用性・拡張性に優れたDNSサービス
  • S3の静的ホスティング、APIGateway、CloudFrontを独自ドメインで使いたい場合に

他にも

  • Amazon SNS
    • プッシュ通知
  • Amazon SES
    • Email配信
  • Amazon SQS
    • メッセージキューイング
    • 溜め込んでLambdaで取り込んで処理とか。

実際にモバイルバックエンドをサーバレスで考えてみる

簡単な構築パターンを考えてみる

アプリから送ったデータを保存したい

  • 構成例
    • API Gateway -> Lambda -> S3 or DynamoDB
  • f:id:naichilab:20170208203148j:plain

  • Lambdaを直接たたくためにはIAMが必要

  • APIGatewayを挟むと抽象化できる

写真をとったらサムネイルを作りたい

  • 構成例
    • API Gateway -> Lambda(保存) -> S3 -> Lambda(加工) -> S3
      • たまにLambdaの処理が抜ける
  • f:id:naichilab:20170208203229j:plain

  • 構成例2

    • API Gateway -> Lambda(保存) -> S3 / SQS -> (Timer起動)Lambda(加工)
      • SQSを挟むことで確実性を上げる
  • f:id:naichilab:20170208203252j:plain

許可した人にだけAPIを公開したい

  • 構成例
    • Amazon Cognito
      • 認証トークンを発行
    • API Gateway -> Lambda -> …
  • f:id:naichilab:20170208203333j:plain

デモ

  • API Gateway -> Lambda -> Lambda -> S3
  • Unity -> Lambda <- S3
  • f:id:naichilab:20170208203455j:plain

Unity用SDKもあっていくつかの機能は直接呼べる

  • API Gateway
    • AJAXで呼ぶならCORS設定が必要

ホワイトペーパー

cloudpackサーバーレス開発ホワイトペーパーとして公開している

cloudpack.jp

質疑

サーバーレスのログ追跡どうやってるの?

  • CloudWatchは大変
  • 答えはあるがまだ発表できない
    • 2月末ぐらいに発表できる

次回予告

  • 2月開催
    • AWS Storage Gateway
  • 3月
    • 3/1 ホワイトペーパーの説明
    • 3/8 AWS Code Deploy
    • 3/29 クラウド基礎

感想

まだほとんど使えてないけど雰囲気つかめてよかった。 簡単に試せそうやし触ってみよう。