muzigram

山椒は小粒でもピリリと辛い

2017/06/22

UnityでSceneやPrefabがコンフリクトした時のUnityYAMLMergeについて

■はじめに
Unityでチーム開発する際ってみんなどうしてるんすか案件の話。
つまりは同じSceneやPrefabを触ったときにコンフリクトとか起きると思うんですけど、どうやってその問題を
解決、もしくは回避してますか?
  • 声かけて同じ物を触らないようにするのか -> 運用でカバーしてもミスは避けられない気がする。
  • git-lfsのロック機能を使うのか -> YAMLを登録するのなんかずれてる感じがしません?

■つまり?
SceneとPrefabの作業が被ってYAMLマージすか死ねますね。

■対策

あるのか?あるらしい、以下
https://docs.unity3d.com/jp/540/Manual/SmartMerge.html

■検証

今回は

Unity 5.5.1p4
SourceTree 2.5.2 (111)
の環境で試しました。

解決済みになってるのにコンフリクトが解決されてなかったりしてつらすぎる。うまく動いてなくね?というわけで調査。

* http://labs.gree.jp/blog/2015/04/13836/
* http://qiita.com/Shaula/items/ebe778c232c30aff46fd
* http://tsubakit1.hateblo.jp/entry/2015/05/14/040852

だいぶ参考にさせてもらったのですが、少なくとも自分の環境(5.5.1p4)では上記だけではうまくいかない模様。特に「auto」というファイルでツールを指定するところがうまく行きません。

フォーラムみたり
https://www.reddit.com/r/Unity3D/comments/39bdq5/how_to_solve_scene_conflicts_with_unitys_smart/

色々触ってみた結果、以下のような挙動をするらしい


  1. gitでマージする
  2. SceneやPrefabでコンフリクトが発生する。
  3. CLIならgit mergetool。SourceTreeなら外部マージツールで設定したUnityYAMLMergeを起動。
  4. マージ作業を行ってくれる
  5. どうしても解決できない更新があった場合(同じPrefabの同じパラメータを触った場合)
  6. /Applications/Unity/Unity.app/Contents/Tools/mergespecfile.txt で指定した外部マージツールを起動させる。
  7. マージツールでDiffを解消して、マージツール終了するとUnityYAMLMergeに戻り、終了。


■いろいろつまったところ

MacのデフォルトのDiffツールとUnityYAMLMergeの相性が悪い。Diffツールのファイル保存を待たず、UnityYAMLMergeが終了するのでDiffが残ったままのファイルが残り、Sceneが死ぬ。ということでP4Mergeを利用してます。

libc++abi.dylib: terminating with uncaught exception of type std::runtime_error: Cannot find transform parent for fileID
で死ぬ。ファイル削除とかそのあたりなのかなー。あんまり詳しくは見てない。

autoファイルで指定するって話があったけど、認識してくれなかった。結局app内のファイル書き換えた。←マジで?
自分はこんな感じで指定してます。
#
# UnityYAMLMerge fallback file
#
# Modify the next two lines if scene or prefab files should fallback
# on other that the default fallbacks listed below.
#
# %l is replaced with the path of you local version
# %r is replaced with the path of the incoming remote version
# %b is replaced with the common base version
# %d is replaced with a path where the result should be written to
# On Windows %programs% is replaced with "C:\Program Files" and "C:\Program Files (x86)" there by resulting in two entries to try out
# On OSX %programs% is replaced with "/Applications" and "$HOME/Applications" thereby resulting in two entries to try out
unity use "/Applications/p4merge.app/Contents/Resources/launchp4merge" "%b" "%r" "%l" "%d"
prefab use "/Applications/p4merge.app/Contents/Resources/launchp4merge" "%b" "%r" "%l" "%d"
* use "%programs%/p4merge.app/Contents/Resources/launchp4merge" "%b" "%r" "%l" "%d"
#
# Default fallbacks for unknown files. First tool found is used.
#
それでも、マージが失敗するときがある。何回かmergetoolを起動すると動くことがある(いやいやいや…




結論

git mergetoolやSourceTreeの外部マージツールにUnityYAMLMergeを適用。
/Applications/Unity/Unity.app/Contents/Tools/mergespecfile.txt

細かくブランチを切って、細かくマージする。に勝る対策はない感じ。
それでも、ちょっとした更新のマージならUnityYAMLMergeが吸収してくれるのではないか。という手応えはある。
ただ、情報がすくなかったり、機能が更新されたりすると、また喧々諤々としそうではあるけども。
というわけで、うまい感じのgit-flowを構築しつつ、UnityYAMLMergeを頼っていくるのがいいのかなという感じ。

Unityを触っている開発者がココらへんどうやって運用してるのかいい感じの運用やツールがあったら教えてください

2017/06/12

FirebaseとUnity

個人で製作するUnityアプリとFirebaseは相性が良いのではないか?という直感があるので
改めて検証していこうと思う。

なんで?


  • サーバー管理が(自前で用意するよりかは)必要ない
  • ライブラリが一通り揃ってる
  • ホスティング、認証サービスも使える。
  • AdMobとも親和性があるので
  • Push通知も行ける。
  • 開発環境であればほぼノーコストでOK
といった利点があると思う。

欠点として考えられるもの

  • Parseの二の舞いの可能性
  • RDBとは違ったDB管理の理解
  • CloudFunctionがJavaScriptのみなので苦手な人は大変そう
  • 移行を希望するときの選択肢のなさ


ドキュメント

https://firebase.google.com/docs/auth/unity/password-auth?hl=ja

2017/06/11

lambdaでSlack Interactive Message. まずはHello world

概要

http://tech.mercari.com/entry/2017/05/23/095500
をみてGo + AWS lambdaでJenkins氏を叩くか。と思い至る。

環境

⋊> ~ sw_vers
ProductName: Mac OS X
ProductVersion: 10.12.4
BuildVersion: 16E195
⋊> ~ go version
go version go1.8.1 darwin/amd64
⋊> ~ docker --version
Docker version 17.03.1-ce, build c6d412e
⋊> ~ aws --version
aws-cli/1.11.97 Python/2.7.10 Darwin/16.5.0 botocore/1.5.60

準備

ドキュメントをかき集める


手順

ざっくりと環境インストールと設定を行う。


  • AWS CLIをインストール
  • AWSにIAMを用意、AccessKey,Secretを作成して、CLIに登録する。←aws configure
  • Docker環境も用意する必要がある(https://docs.docker.com/docker-for-mac/)
eawsyにあるコマンドを試しに実行してみる。
wget -qO- https://github.com/eawsy/aws-lambda-go-shim/raw/master/src/preview.bash | bash
# "Hello, World!" executed in 0.45 ms
の中身を覗いてみると、DockerでGoコードのビルド、
AWS環境の整備(lambdaを実行できるように)、アップロード等を行っている。

lambdaを作成したらAPIGatewayで公開。ひとまず、HelloWorldまで完了。