もんりぃ is undefined.

育児ネタとか、技術ネタとか。

.NET SDK を入れても dotnet コマンドにパスが通らない問題

前置き

  • 久しぶりの技術ネタ。
  • Visual Studio Code で .cs なファイルを開いたところ The .NET CLI tools cannot be located. .NET Core debugging will not be enabled. Make sure .NET CLI tools are installed and are on the path. というエラーが出続けて困っていた。
  • 普段は JetBrains Rider を使っているので良いっちゃ良いんだが、毎回エラーが出るのもアレなので、一念発起して調べてみて、解決策を見つけたのでその辺について綴る。

現象

  • .NET SDK が入っており C# 用拡張が入っている状態でも、Visual Studio Code がエラーを吐く。

環境

原因

  • #1259|Dotnet is not found under default PATH に答えがあった。
  • zsh はデフォルトだと /usr/libexec/path_helper を呼び出してくれないらしく、 /usr/local/share/dotnet/dotnet にインストールされる dotnet コマンドへのパスが通らない。
  • そのため、Visual Studio Code からも dotnet コマンドが見つけられず、「.NET CLI 入ってないっぽいよ?」ってエラーが出力される。
    • 勿論、ターミナルから which dotnet とかやっても、dotnet not found とか言われる。

解決策

其の壱

  • .zshrc 辺りに以下のシェルを追記する。
PATH="${PATH}:/usr/local/share/dotnet"
  • シンプルに dotnet コマンドがあるディレクトリへのパスを追加するだけ。
  • 影響範囲を極小に出来る。

其の弐

  • .zshrc 辺りに以下のシェルを追記する。
# system-wide environment settings for zsh(1)
if [ -x /usr/libexec/path_helper ]; then
    eval `/usr/libexec/path_helper -s`
fi
  • /etc/paths.d/ 以下にあるファイル内に書かれているディレクトリを $PATH に追加してくれるコマンド(らしい)。
    • おまけとして $MANPATH 変数が宣言されているなら /etc/manpaths.d を走査して追加してくれるんだとか。
  • で、 /etc/paths.d/dotnet/usr/local/share/dotnet と書かれているので、結果として dotnet コマンドへのパスが通るというカラクリ。
  • 私はこちらを採択しました。

所感

  • 環境周りは色々とハマりますね…。
  • なお、今回の件とは関係ありませんが、 rcm というライブラリを使った dotfiles (.zshrc とかの設定ファイル)管理が便利です。

リモートワーク Rev.12 / 夜更かし問題

はじめに

  • 2018年あけましておめでとうございます!🎍
    • もう半月以上経ってるけどな!
  • 2018/01/17 (Wed) はリモートワークでした。
  • いつもの KPT を綴る。
  • なお今回から、前回の Try の振り返りも追加することにした。

KPT

前回の Try

  • ✅ 水分を多めにとって、トイレの回数を増やす作戦を試してみよう。
    • 割と席を立てた。
    • トイレや用事や娘に構うイベントがちょいちょい発生したから、かな?

Keep

  • この日やるべきコトは達成できた。💪
  • 奥さんの具合が悪そうだったので、程よく休んでもらえた(かな?)。
  • 家族との時間が圧倒的に増える。
    • そして、娘が安定して可愛い!😍
  • 家事が捗る。
    • 昼食後に、溜まったお皿やフライパンをまとめて洗えるので、夕食後の負担が少ない。*1
  • 家から一歩も外に出なかった。何なら外気に触れることすらなかった。
    • すげー楽!

Problem

  • 午前中の集中力が低い。
    • 朝ごはんがクリームパンだけだったのがダメだったのかなぁ…?
  • 娘が定期的に「パパ構って〜!」な感じになるので、集中力が分断されてしまい悩ましい。
    • 娘が可愛すぎる所為で、「お、何だい?☺」ってなっちゃうんだよね。
    • まぁ、オフィス勤務の時も話し掛けられたりして集中力の分断は起きるのだが。
    • この辺は、子どもの年齢が要素として大きいと思うので、奥さんの協力も少なからず必要になりそう。
  • 残業してしまった。
    • 娘を寝かしつけた後に「よーし!」ってな感じで開発しちゃうのは、イカンなぁ…。
  • 家から一歩も外に出なかった。何なら外気に触れることすらなかった。
    • さすがに、自堕落かなぁ…?

Try

  • 集中力の分断がツラい業務の時は、カフェとかコワーキングスペースとかで作業するのがヨサソウ。
    • 自宅近くにあると良いんだけどなぁ…。一応探してみよう。
  • 仕事し過ぎちゃう問題は、「仕方ない」と言えばそれまでなんだけど、組織全体の課題にもつながるので、何とかしていく所存ではある。
  • 引きこもり問題は一長一短で、今のところ大きな問題ではないので放置。

所感

  • 後半集中できたので、最近の遅れを取り戻せた気はする。
  • 娘の可愛さが無尽蔵😘

*1:奥さんの手荒れが酷いので、可能な範囲で水仕事は担当している。

Unity 2017.3.0f3 気になったポイントメモ

はじめに

  • 2017/12/19 (Tue) 深夜に Unity 2017.3.0f3 がリリースされました。
  • 実質的な Unity 2017.3 のメジャーリリースとなる今バージョンのリリースノートで気になったポイントをコメント付きでメモします。

Features

  • Animation: Added support for integer and enum animation.
    • これは地味に欲しかった。
    • float -> int -> enum というキャストを行う必要があり、モヤモヤしていたので。
  • Editor: Added assembly definition files for script compilation pipeline in the editor. This allows you to define your own managed assemblies based on scripts inside a folder. Splitting your project's scripts into multiple assemblies can greatly reduce script compilation times in the Editor. Note that the latest version of Visual Studio Tools for Unity is required for this feature to work with solution and project generation for Visual Studio.
    • 個人的には一番の目玉!
    • umm の Assembly とかサブプロジェクトの Assembly とかを簡単に固められるようになれば、コンパイル時間的に相当有利。
  • Editor: Added the Transform Tool, a single Gizmo you can use to move, rotate and scale in the Unity Editor.
    • どういう操作になるかは分からんが、便利そうな予感。
  • Graphics: Added a new method, ScreenCapture.CaptureScreenshotAsTexture. Use this to save screenshots taken with ScreenCapture as Textures in the Editor.
    • これは、デバッグとかが楽になりそう!
    • PlayMode Test と組み合わせてスクショ撮るとか、夢が拡がる!
  • Graphics: Support for 32 bit Mesh index buffers:
    • 2D メインなウチにはあんまり関係ないけど、表現の幅が拡がるのかな?
  • Particles: Added a new Speed Modifier option in the Particle System Velocity Module. Use this to control particle speeds without changing their directions.
    • Particle の表現の幅が拡がる予感。
  • Particles: Added Unlit and Surface shaders for use with Particle Systems.
    • この手の自前シェーダ書かなくて良くなるのかな?
  • Particles: Ribbonized Particle Trails.
    • ブログに動画貼られてたけど、これは使いどころが多そう。
    • 詳しく理解できなかったが、リボンみたいになびく軌跡って感じかな?
  • Playables: Added new delay feature for IPlayables.
    • Animator とか Timeline とかの Playable を遅延実行できるのかな?
    • 使い方調べないと。
  • Playables: Added new Video Playables Integration.
    • 動画までサポートしたのか。
    • まぁ、ウチで使うことはなさそうだけど。

Backwards Compatibility Breaking Changes

  • OSX: Removed support for targeting 32bit macOS applications. Replaced BuildTarget.StandaloneOSX* enums with BuildTarget.StandaloneOSX.
    • Intel とか Universal とかの謎のサフィックスがなくなるのか。
    • エディタ用の AssetBundle 作るときに毎回困っていたので地味に嬉しい。
    • Windows はまだなのかな?

Changes

  • 2D: Unity now generates a default Physics Shape when it creates a Sprite from an imported Texture.
    • 2D Collider を簡単に作れるようになるってコトかな?
    • 元々、SpriteRenderer に対してゴニョゴニョすればできたような気はするが、Scale の問題とかがあったから嬉しいかも。
  • Android: Release Gradle builds no longer have ProGuard enabled by default.
    • サヨナラ ProGuard...
  • Editor: Added methods EditorGUI.EnumFlagsField and EditorGUILayout.EnumFlagsField, which respect the values of the enum type and support custom names for values 0 and ~0 (all bits set). Deprecated methods EditorGUI.EnumMaskField, EditorGUILayout.EnumMaskField, EditorGUI.EnumMaskPopup, and EditorGUILayout.EnumMaskPopup, which always assume values to be 1, 2, 4, 8 (and so on). (896176)
    • フラグ周りが便利になるっぽさ。
    • Editor 拡張おじさんには朗報かも。

Improvements

  • 2D: Exposed methods to set and retrieve Physics Shape from a Sprite.
    • 上の Collider 関連の変更な対してスクリプトからもアクセス出来るようになったってコトかな?
  • 2D: If you use Shift-Click to do picking for Tile Palette, Unity now switches back to the original tool after picking is done.
    • Tilemap の操作性向上?
    • まだ Tilemap 使ってないから分からん。
  • Android: Added the option to configure Texture decompression format on Android devices that have no ETC2 Texture format support.
    • ETC2 をサポートしてない Android 向けの対応。
    • そろそろデバイスサポートを切りたいところだけどね。
  • Animation: Added a 2D mode to the Animation Previewer.
    • これが良く分からなかった。
    • そもそも Animation Previewer って、モデルの Inspector に出てくるアレかな?
  • Animation: Added zoom in the Animator Window
    • 複雑なステートマシン組んでる Animator の場合にズームは便利かも。
    • まぁ、そもそもそんなステートマシンは…(ry
  • Editor: It is now possible to adjust the number of lines per log row in the Console window.
    • いつも1行しか見えなくて困ってたので助かる!
    • どのくらいアジャストしてくれるのだろうか?
  • Editor: You can now select which Xcode version to build your project with on MacOS.
    • Xcode のバージョン選べるとか凄い時代だw
    • どうやって認識させるんだろうなぁ?
  • Mobile: Engine code stripping now works on Android
    • Android でも Strip Engine Code が使える、と。
    • やや地雷臭がするが、果たして…。
  • Particles: Added support for Meshes using lines and linestrips for particle Shape Module spawning. (931662)
    • 線状に発生する Particle ってコト?
  • Particles: Added update to display particle stats in Editor Play Mode for selected systems.
    • 再生しなくても Particle の Stats が見られるのかな?
  • Particles: Improved the workflow for creating multiple Particle Systems inside a shared GameObject hierarchy: The Particle System no longer resumes playing a paused preview when you select systems belonging to the same effect.
    • 良く分からなかったけど、なんか Particle のワークフローが便利になるっぽさ。
  • Timeline: Added multi-selection capabilities to the Clip Inspector.
    • Timeline 上で複数のクリップを選択したら Inspector で編集出来るようになるのかな?
  • Timeline: Introduced various clip snap improvements:
    • クリップの吸い付きが便利になるのかな?だとしたら嬉しい。
  • UI: All Editor tab views now use FitToContents for button contents with flexible space on either side of toolbar, instead of filling window width.
    • イマイチ理解出来なかったが、コンテンツの自動サイズ調整的な内容なのかな?
  • UI: Cached eventCamera access in Raycast() to avoid calling Camera.main multiple times.
    • UI のイベント関連でのパフォーマンス周りの改善かな?
  • UI: Made performance improvements to GraphicRaycaster and EventSystem. (934842)
    • これも、上に関連してそう。

API Changes

  • Caching: Added overloaded version of ClearCache() that can clear cached AssetBundles which are unused for longer than the given expiration time.
    • AssetBundle の ClearCache が便利になりました、って話っぽい。
  • iOS: Added iOS.Device.RequestStoreReview, a review request API for the App Store.
    • Apple オフィシャルのレビューリクエストダイアログを出せるようになる!
    • これは嬉しい。
  • Playables: Added new callback in PlayableBehaviour: OnBehaviourDelay. This is called in the first frame that the playable is delayed.
    • Playable の Delay 対応に関連したコールバック追加。
  • Playables: Added new callback in PlayableBehaviour: PrepareData. This is called if the playable is delayed.
    • PrepareData って具体的にどのタイミングなんだろうな…?
    • Delay されてるけどインスタンスが生成された時、とかかな?
  • Playables: Added new method to allow building or rebuilding the graph without initiating Play(): PlayableDirector.RebuildGraph.
    • これ、 PlayOnAwake はオフにして RebuildGraph 呼んだら PlayableAsset のイベントとかコールされるのかな?

Fixes

  • Animation: Fixed a crash when closing Animator Window (916970)
    • これが原因かは分からんけど、Animator 使ってると結構 Unity クラッシュしがちなので、直ってたら嬉しい。
  • Asset Bundles: Fixed bug where incorrect error was getting thrown if an asset was included in the same AssetBundle more than once (932726)
    • ぶつかったことはないけど、AssetBundle 関連なので気になった。
  • Cache Server: Fixed several cache server bugs that would manifest as freezes/hangs or failures when reading from a cache server (943300)
    • これ、ヘタしたらマシンごと巻き込んでクラッシュしてたような気もするので、直ってるなら嬉しい。
  • Editor: Crash on macOS when canceling undock of Hierarchy or Scene View (942253)
    • まぁ、これはそんなに行う操作じゃないけど、同じくクラッシュ系なので直ってるなら嬉しい。
  • OSX: Fixed new instance of MonoDevelop opening every time a script is opened (964078)
    • 2017.1 とか 2017.2 でもパッチリリースで直った気はするが、毎回 Open C# Project する度に MonoDevelop が開いていたのはウザかったのでありがたい。
  • UI: Fixed a bug where images would not render if they started disabled. (922641)
    • これ、確か椿さんだか時村さんだかが嘆いていた気がする。

リモートワーク Rev.11 / リビング開発の限界?

はじめに

  • 2017/12/13 (Wed) はリモートワーク日でした。
  • てことで、いつもの KPT する。

KPT

Keep

  • 集中的を保てて、進捗を出せた。
  • 娘からの「パソコン触らせて!」攻撃も割と巧いこと回避できた。(と思う)
  • 奥さん具合良くなかったので、休ませることができた。

Problem

  • ずっと座り続けてしまうので、背中や腰へのダメージが蓄積しがち。
  • 娘からの攻撃に対する応対策を考える必要がありそう。
    • 巧いいこと回避できたとは言え、結構苦戦したので気を紛らわす必要はありそう。
  • ドハマリしたときに、抜け出しにくい。
    • しょーもない Typo に1時間近くハマっていた…。

Try

  • 水分を多めにとって、トイレの回数を増やす作戦を試してみよう。
  • ドハマリしたときにこそ、席を立って伸びをするとか心掛けねば。
    • 妻に起立を促して貰うとか?w

所感

  • 総合点としては高いリモートワーク日だった。
  • 娘のいなし方を学ばねば。

Unity Case-Study / アニメーションあれこれ

はじめに

  • Unity で「アニメーション」をする方法って色々あって、「正直どれが最適なのか分からん!」って声が聞こえた気がするので、 個人的な見解 を紹介してみる。

Animator

  • 恐らくアニメーション用途として最も利用されている機能かな?
  • ステートマシンを用いてアニメーションの状態遷移を管理できる。
  • メニュー上で Assets > Create > Animator Controller を選択すると作られる Animator Controller (拡張子: .controller) というファイルに Animator のステートマシン情報が記載される。
    • どういう条件でアニメーションを再生するのか?みたいな。
  • アニメーションの実態は Assets > Create > Animation を選択すると作られる Animation Clip (拡張子: .anim) というファイルに記載される。
    • どのプロパティを、どういうカーブでアニメーションさせるのか?みたいな。
  • (その昔、 Animation という単独の機能があったが、 Obsolete 状態になっており、 Animator が代替と言える。)

メリット

  • アニメーションの定義を Unity Editor 上で完結できる。
  • MonoBehaviour.Update() メソッドとかでアニメーションさせるよりも(多分)パフォーマンス的に有利。
  • 中間補完やアニメーションブレンディングなど「よしなに」アニメーションしてくれる。
  • AnimationEvent を用いたイベント処理もできる。
    • ただし、コードから追いづらいため、バグの温床になったりもする。

デメリット

  • Unity Editor 上での操作に対する学習コストが高い。
    • Animation Clip 編集用の Dope Sheet とか Animation Curve 編集画面とかは、 Flash 経験者なら馴染みがあるかも?
  • ステートマシンがゴチャゴチャになりがち。
  • スクリプトでの操作と組み合わせたアニメーションを行おうと思うと柔軟性に欠ける。
    • Animator Controller 内に含まれる Animation Clip が操作する対象のプロパティはスクリプトから(原則)いじれない、とか。

Reference

MonoBehaviour.Update()

  • 毎フレーム呼び出されるメソッドなので、初期値とか終了値とか経過時間とかを巧いこと管理できればアニメーションの実装もできる。
  • DOTween とかの Tween ライブラリは、本質的には Update() での実装と言えるかも。
    • 内部実装読んだわけじゃないから分からんけど、多分最終的にはフレーム毎にゴリゴリ計算してるはず。
  • シンプルな移動とかに使う分にはアリっちゃありかも。

メリット

  • 実装力があれば、最強に柔軟な手法。
  • 世の中に優れたライブラリが存在している。

デメリット

  • Easing Curve とかも考え出すと自前実装は沼でしかない。
  • メッセージングによる呼び出しになるため、他に比べるとパフォーマンス的に不利。
  • それなりに数学的な知識を必要とする。
    • まぁ、他も本質的にはそうなんだけどねw

Reference

物理演算

  • スクリプトベースでサッとやるなら、割とアリな手法かも。
  • 程よいパラメータを見つけ出せれば、記述量は減らせる。
    • 基本的には Rigidbody.AddForce() なり Rigidbody.AddTorque() なりのメソッドを叩く感じになると思うので、加える力を調整する感じかな?

メリット

  • 巧くやれば自然なアニメーションになる。
  • スクリプトベースでありながら、計算を全て Unity (というか Physics)に丸投げできる。

デメリット

  • 小回りが効かない。
    • 途中で処理を介入させたりすると、思わぬ挙動をしたりするので、結構ヤバみある。
  • FixedUpdate() という Update() のサイクルとは別のメッセージングサイクルになるため、他のスクリプト実装とぶつかるコトがあり得る。
  • 「良い感じ」のパラメータを見つけるのが大変。
  • アニメーションそのものに対するイベント処理がやりづらい。
    • 「移動が終わったとき」みたいなイベントフックは面倒。

Reference

まとめ

  • 適材適所ではあるが、学習コストを飲み込んでも Animator でアニメーションするのがベターかな。
  • メンテナンス性が必要ないようなプロジェクトであれば、物理演算でサッと書き捨てるのも良いかも。

「ハンズオンズ / 「Unityとは?」から始める実践入門」で講師をしました

はじめに

KPT

Keep

  • 座学はほぼ予定通りの時間で進められた。
  • 実践も完全脱落した人は居なかったっぽい。
  • 概ね好意的な感想を頂戴できた。
  • 初学者向けとしては、ほどよい分量の資料が作れた。
    • これは、今後(?)に活かせそうな気がしている。

Problem

  • やろうと思っていたカリキュラムの半分も終わらなかった。
    • 無償のハンズオンってトコに甘えてしまった感は否めない…。
    • 蛇足的な作業を受講者の皆さんにさせすぎた。
    • エディタの使い方とハンズオンを一緒に考えない方が良かったのかも?
  • 開始前とか締め方とかの段取りがグダグダになってしまった。
    • 主催の方の挨拶とか会場説明とかすっ飛ばして始めてしまったのは猛省。
  • 登壇を詰め込みすぎた。
    • コレは、このイベントに限った話ではなく。
    • 2週間で3本のド新規ネタはしんどかった…。

Try

  • ハンズオンは必ず壁打ちをする!
    • 社内のメンバーとかを実験台にして壁打ちしないと、ペース配分が全く読めない。
    • Schoo の時に同じ轍を踏まないようにせねば。
  • もっと余裕を持って会場入りする。
    • 段取り周りの相談とかをする時間を取れなかったので、独演系の時は特に気をつけねば。
  • 資料作りをもっと早くやる。
    • 夏休みの宿題を8/31にやるマンを脱しないと…。
    • ひと頃よりはマシになったが、うーん…。

所感

  • 総じて楽しかったけど、かなり多くの課題を感じた。
  • 第2回をやる機会があれば、リベンジしたい所存。
  • 何事も経験あるのみ、だなぁ…。

Unity LT 大会で喋ってきました

はじめに

  • 2017/12/09 (Sat) に開催された「【年末だよ】Unity お・と・な のLT大会 2017【ポロりしてもいいのよ】」というイベントで喋ってきた。
  • それについて KPT する。

KPT

Keep

  • 割とウケた。
  • あるあるネタの時とかは皆さん「ウンウン」という感じに頷いてくれてた。
    • やはり、みんな悩んでいるんだよね。
  • ほぼ時間通りに収められた。

Problem

  • 時間通りに収めるために、ちょっと端折ったり早口になってしまったりした。
  • Keynote でのプレゼンだと資料を作るのに時間がかかる。
  • 補足記事とかがない。

Try

  • やはり、最初から10分に収まるような資料にすべきだった。
  • 次回は GitPitch とか esa とかでの発表を試してみよう。
  • Clean Architecture 解説ブログ書かねば…。

所感

  • 総じて楽しい LT 大会だった!
  • 馴染みのメンツと深い話も出来たりしたので、満足度高い。
  • 割と若いエンジニアさんも多い感じで、エネルギーをもらえた気がした。