Riderはいいぞ!
by
RyotaMurohoshi
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Riderはいいぞ! @RyotaMurohoshi 2019/10/27(日) .NET Conf in Tokyo 2019
Slide 2
Slide 2 text
「なんか最近Riderって言うのをよく聞くぞ?」 「Riderに興味があるぞ・・・」 「Riderがいい感じらしい、どんな感じにいいの!?」 今日はそんなUnityプログラマのみなさんに Riderが使ってみたくなるような紹介セッションをします
Slide 3
Slide 3 text
突然ですが問題です!
Slide 4
Slide 4 text
問題1 このコードの良くないところはどこでしょう?
Slide 5
Slide 5 text
答え1 monstersが空かどうかの判定に、Count()を使っている IEnumerableだから、Any()を使うべき
Slide 6
Slide 6 text
こう書くとGood!
Slide 7
Slide 7 text
C#に慣れている人にはおなじみだけど 初めてC#をやる人には「わかりにくい改善ポイント」
Slide 8
Slide 8 text
さらにもう一問!
Slide 9
Slide 9 text
問題2 このコードの良くないところはどこでしょう?
Slide 10
Slide 10 text
答え2 transform.positionはそこそこ負荷が重い処理 transform.positionに連続してアクセスするなら 一度ローカル変数に格納すべき
Slide 11
Slide 11 text
こう書くとGood!
Slide 12
Slide 12 text
C#に慣れていても、Unityに慣れていないと なかなか気づけない「わかりにくい改善ポイント」
Slide 13
Slide 13 text
大丈夫、そう Rider なら!
Slide 14
Slide 14 text
Riderならこういう「わかりにくい改善ポイント」 を指摘してくれ、「ポチッとな」で改善できる!
Slide 15
Slide 15 text
デモ
Slide 16
Slide 16 text
自己紹介・Riderの概要
Slide 17
Slide 17 text
自己紹介
Slide 18
Slide 18 text
● @RyotaMurohoshi(むろほし) ● Rider : 趣味ゲーム開発 ● WebStorm : お仕事はウェブフロント ● Android Studio : 元Androidアプリ開発者 ● お仕事でも、趣味でも、JetBrains IDE!
Slide 19
Slide 19 text
Rider、WebStorm、IntelliJ IDEAは JetBrainsの有償IDEです Android Studio(無料)も JetBrainsのIntelliJ IDEAがベースです
Slide 20
Slide 20 text
JetBrainsはチェコにある ReSharper、dotPeekなどの.NETツール、そして Rider、IntelliJ IDEA、WebStorm、GoLand、 PyCharm、RubyMineなどの様々なIDEを作っている会社
Slide 21
Slide 21 text
IntelliJ IDEAとReSharper、どちらも長い歴史を持つ 二つをベースにしてRiderが生まれました IDEとしての使い方は他のJetBrains IDEと同じ感じに使える リファクタリングなどはReSharperと同じものが使える ここら辺の話は、 https://blog.jetbrains.com/jp/2018/11/08/1460
Slide 22
Slide 22 text
Riderは Cross Platform IDEです Windows、macOS、Linuxに対応!
Slide 23
Slide 23 text
RiderはUnityサポートが手厚いです!
Slide 24
Slide 24 text
このセッションで言いたいこと
Slide 25
Slide 25 text
C#やUnityを今から始める人・最近始めた人こそ、 Rider は いいぞ!
Slide 26
Slide 26 text
C#やUnityを教える立場の人も Rider は いいぞ!
Slide 27
Slide 27 text
皆さんの同僚、チームメンバー、メンティーは Riderが教えてくれるUnity・C#の書き方を 知らないかもしれない ぜひあなたの代わりに、Unity・C#を教えてもらいましょう
Slide 28
Slide 28 text
Riderの機能紹介
Slide 29
Slide 29 text
デモ おさらい
Slide 30
Slide 30 text
Rider/ReSharperは 一部の人からこう呼ばれています
Slide 31
Slide 31 text
赤ぺ●先生
Slide 32
Slide 32 text
「ここはよくないよ」って教えてくれて 「こうするといいよ」っていうコードに書き換えてくれる
Slide 33
Slide 33 text
Code Inspections と Quick Fix
Slide 34
Slide 34 text
Code Inspections 静的コード解析によりコードの課題を検出
Slide 35
Slide 35 text
No content
Slide 36
Slide 36 text
No content
Slide 37
Slide 37 text
Code Inspectionsは いろいろな理由で指摘してくれる ● Language Usage Opportunities : 新しい言語機能が使える箇所 ● Potential Code Quality Issues :エラーや警告の理由になりそう ● Redundancies in Code : 到達しないコードとか不必要なコード ● Spelling Issues : タイポ
Slide 38
Slide 38 text
Code Inspectionsのレベル ● エラー : コンパイルエラーやエラーを引き起こすもの ● 警告 : コンパイラの警告。不要なもの、冗長なもの、よくないもの ● 提案 :「 間違ってはいないけど、もっと良くなる」に対する提案 ● ヒント: 特定のコードの詳細に注意を促し、改善方法を推奨
Slide 39
Slide 39 text
Code Inspections は、ただ「ここが間違っている!」ってだけじゃなくて なんで間違えているかも教えてくれる! (詳細理由を載せてるWebページを開いてくれる)
Slide 40
Slide 40 text
Option + Enter / Alt + EnterでAction Listを表示 「Why is Rider suggesting this?」を選択で解説ウェブページへ
Slide 41
Slide 41 text
Code Inspectionsは ソリューション全体や特定のスコープにも!
Slide 42
Slide 42 text
Option + Enter / Alt + EnterでAction Listを表示 「Find similar in file」で似たような問題がないか指定のスコープで探索
Slide 43
Slide 43 text
Solution-Wide Analysis Solution全体のエラーや警告を見つけ、一覧表示してくれる
Slide 44
Slide 44 text
Preference | Editor | Inspection Settingsから。警告も有効にできる。
Slide 45
Slide 45 text
警告レベルInspectionも有効にするとどっさり出てくる。
Slide 46
Slide 46 text
Solution-Wide Analysisは ソリューション全体を分析 コード配布形式のアセットなども対象 ※設定で任意のディレクトリを無視することは可能
Slide 47
Slide 47 text
Inspect Codeでソリューション全体じゃなくて、 対象を指定してインスペクションもできる
Slide 48
Slide 48 text
Code | Inspect Code...
Slide 49
Slide 49 text
スコープを指定
Slide 50
Slide 50 text
指定スコープのインスペクション結果がずらり
Slide 51
Slide 51 text
Run Inspection by Name... 特定のインスペクション項目のみを探す (例えば「このコミットでこのWarning全部直したい!だから探したい!」ってときに便利)
Slide 52
Slide 52 text
Code | Run Inspect by Name...
Slide 53
Slide 53 text
Inspectionの説明を入力、フィルタリング、探したいインスペクションを選択
Slide 54
Slide 54 text
対象がずらり
Slide 55
Slide 55 text
次の話題
Slide 56
Slide 56 text
Quick Fix さくっと手早くコードを修正
Slide 57
Slide 57 text
Code Inspectionsで指摘された問題点をさくっと修正 キーボードショートカットでも、マウスからでも
Slide 58
Slide 58 text
Code Inspectionで指摘された箇所で「Option + Enter / Alt + Enter」 もしくは黄色いバルブのAction Indicatorをクリック
Slide 59
Slide 59 text
Action Listが表示される ここでは、この中から「Introduce variable」Quick Fixを選択
Slide 60
Slide 60 text
Enterで選択肢、Quick Fixによる修正が行われる
Slide 61
Slide 61 text
いくつかのQuick Fixは一箇所だけじゃなくて ファイル、プロジェクト、ソリューション内の 同じ修正を一気にできる
Slide 62
Slide 62 text
ファイル、フォルダー、プロジェクト、ソリューション ドリルダウンし修正範囲を指定し、Quick Fix!
Slide 63
Slide 63 text
次の話題
Slide 64
Slide 64 text
コードって書く時間より、読む時間のほうが多いですよね コードを読む時に必須な機能
Slide 65
Slide 65 text
Go to Declaration 定義箇所・宣言箇所にジャンプ
Slide 66
Slide 66 text
Find Usages このコードがどういう場所で使われているかを一覧
Slide 67
Slide 67 text
コンソールアプリケーションだったら、 あるメソッドは、別のメソッドから呼び出され ある型のインスタンスは、メソッド中で生成される コードを読めばだいたい処理の流れが追える
Slide 68
Slide 68 text
コンソールアプリに比べて Unityでコード・データ・処理の流れを追うの大変!
Slide 69
Slide 69 text
ゲームオブジェクトのコンポーネントとして、生成され シーン上のボタンなどのハンドラーからメソッドが呼ばれ フィールドはインスペクターから値が設定される Unityではコードだけで流れが全然追えない!
Slide 70
Slide 70 text
大丈夫、Riderなら!
Slide 71
Slide 71 text
Code Vision コードのメトリクスを計測し、付加情報をいい感じに表示
Slide 72
Slide 72 text
「このコンポーネント、どこで使われるんだ?」 どのシーンのどのゲームオブジェクトのコンポーネントかわかる どのディレクトリのどのプレファブのコンポーネントかわかる
Slide 73
Slide 73 text
クラス名の上「3 asset usages」をクリックするとウィンドウが出る。 Unity Editor上の該当のゲームオブジェクト・プレファブに飛ぶことこともできる。
Slide 74
Slide 74 text
「このメソッド、どこで呼ばれるんだ?」 どのシーンのどのイベントハンドラーから メソッドが参照されているかわかる
Slide 75
Slide 75 text
StartMoveメソッドの上「1 asset Usage」をクリックするとウィンドウが出る。 クリックでUnity Editorの該当のゲームオブジェクト・プレファブに飛ぶことこともできる。
Slide 76
Slide 76 text
「これ、どこのインスペクターからどんな値が設定されるんだ?」 どのシーンのどのインスペクターから どんな値が設定されているかわかる
Slide 77
Slide 77 text
フィールドの右「Changed 3 assets」をクリック。 設定される値・参照と、設定箇所がわかる 該当のゲームオブジェクト・プレファブに飛ぶことこともできる。
Slide 78
Slide 78 text
Code Visionで見えるもの ● 最後にコミットした人 ● どういうふうに使われているか ● この型をどう派生しているか
Slide 79
Slide 79 text
Find Unity Usage Unityのシーンやプレハブでの利用場所を探してくれる
Slide 80
Slide 80 text
次の話題
Slide 81
Slide 81 text
どんなフレームワークを使っていても ある程度お決まりのコードフレーズってあるじゃないですか それ、さくっとかけたら嬉しくないですか?
Slide 82
Slide 82 text
例えば、public static void Main
Slide 83
Slide 83 text
例えば、Unityだったらこんなコード
Slide 84
Slide 84 text
Live Template 煩雑なお約束コードも手早く・素早く
Slide 85
Slide 85 text
これを手早く書きたい
Slide 86
Slide 86 text
まず、psvmって打つ。Code Completionで候補が出る。 そこでEnterかTabを打つと・・・
Slide 87
Slide 87 text
public static void Mainが展開される
Slide 88
Slide 88 text
Live Template あれ?ただのテンプレートじゃね?ライブ感なくない?
Slide 89
Slide 89 text
これを手早く書きたい
Slide 90
Slide 90 text
まず、spropって打つ。Code Completionで候補が出る。 そこでEnterかTabを押す・・・
Slide 91
Slide 91 text
まず、テンプレート展開。キャレットは型の位置に
Slide 92
Slide 92 text
intって打つと、フィールドもプロパティも同時にintに変わる!
Slide 93
Slide 93 text
No content
Slide 94
Slide 94 text
型のメンバとか、制御構文とか C#の便利なLive Templateがたくさん! 今日はUnity向けのLive Templateを一気に紹介!
Slide 95
Slide 95 text
sfield UnityEngine.SerializeFieldアトリビュートがついた privateなフィールドを作るライブテンプレート
Slide 96
Slide 96 text
reqcomp UnityEngine.RequireComponentを付与するライブテンプレート
Slide 97
Slide 97 text
menuitem UnityEditor.MenuItemアトリビュートを付与するライブテンプレート
Slide 98
Slide 98 text
log UnityEngine.Debug.Logなどのライブテンプレート
Slide 99
Slide 99 text
cor コルーチン用のIEnumeratorを返すメソッドのライブテンプレート
Slide 100
Slide 100 text
assetmenu UnityEditor.CreateAssetMenuアトリビュートを 付与するライブテンプレート
Slide 101
Slide 101 text
DOTS用のLive Templateとか欲しくないですか?
Slide 102
Slide 102 text
残念ながら、まだないです けど、大丈夫! Live Templateは自分でも作れる
Slide 103
Slide 103 text
Preference | Live Templateから、自分のテンプレートを作成できる!
Slide 104
Slide 104 text
お決まりのコードフレーズだけじゃなくて、 お決まりのファイル構造もできる
Slide 105
Slide 105 text
File Template お約束なファイル構成のコードも手早く・素早く
Slide 106
Slide 106 text
ファイル新規作成の時に、テンプレートから選択
Slide 107
Slide 107 text
いい感じにScriptableObjectが新規作成!
Slide 108
Slide 108 text
自分のファイルテンプレートを登録できる
Slide 109
Slide 109 text
チームでよく使うテンプレートがあったら 作成してチームに共有するとスムーズですね!
Slide 110
Slide 110 text
Unityにおける「お決まりのコードを書く」 といえばAwake、Start、Update などの「Unity Event Functions」
Slide 111
Slide 111 text
Code Generation C#の頻出コード・Unityのライフサイクルメソッドも楽々作成
Slide 112
Slide 112 text
型のメンバの生成(cmd + N など) コンストラクタ、等値比較とか、文字列とか、オーバーライドメソッドetc
Slide 113
Slide 113 text
MonoBehaviourのサブクラスだと 「Unity Event Functions」が選べる
Slide 114
Slide 114 text
生成したい「Unity Event Functions」を選択
Slide 115
Slide 115 text
選択した「Unity Event Functions」が生成される
Slide 116
Slide 116 text
MonoBehaviourサブクラス内でコード補完(Code Completion)でも 非MonoBehaviourサブクラスでは出てこない (※ Unityイベント関数は仮想関数ではない)
Slide 117
Slide 117 text
余談 ライフサイクルメソッドのドキュメント見れるの、初心者にオススメ
Slide 118
Slide 118 text
次の話題
Slide 119
Slide 119 text
Performance Indicators 「このメソッド、Updateから呼ばれてんぞ」って指摘してくれる
Slide 120
Slide 120 text
例えば、GetComponentはそこそこ負荷がかかる処理 UpdateやFixedUpdateの中で毎回毎回呼ぶのはよくない Riderはそれを指摘してくれる
Slide 121
Slide 121 text
Updateで読んでるメソッド に「Frequently Called」 GetComponentに赤線 GetComponentを内部で読 んでるMoveを呼び出してい る箇所に赤線
Slide 122
Slide 122 text
「Introduce field and initialize in ‘Start’」 毎回毎回GetComponentせず、フィールドを作ってStart/Awakeで初期化
Slide 123
Slide 123 text
さくっと改善できる!
Slide 124
Slide 124 text
次の話題
Slide 125
Slide 125 text
Unity Editorとの連携
Slide 126
Slide 126 text
RiderとUnityエディタの連携
Slide 127
Slide 127 text
Riderからゲームプレイ開始・デバック
Slide 128
Slide 128 text
Riderの中からDebug.Logの中身が見れる
Slide 129
Slide 129 text
UnityでもBreakpoint、Step Over、Step In、Step Out
Slide 130
Slide 130 text
Breakpointは条件を指定できる
Slide 131
Slide 131 text
Breakpointで停止中、式の評価ができる。Watchに追加も
Slide 132
Slide 132 text
次の話題
Slide 133
Slide 133 text
とりあえずこれだけ覚えて! Rider & JetBrains IDE ショートカットベスト3
Slide 134
Slide 134 text
Show Action List とりあえず「option + Enter」 / 「alt + Enter」 Quick FixやContext Actionを一覧表示! 空気を読んでいろいろやってくれる
Slide 135
Slide 135 text
Find Action Ctrl+Shift+A など キーボードショートカットが覚えられない? 「Find Action」でやれることを検索!
Slide 136
Slide 136 text
Search Everywhere Shift + Shift (2回連続) コードも、クラスも、ファイルも、シンボルも、アクションも 全部まとめて検索!!!
Slide 137
Slide 137 text
次の話題
Slide 138
Slide 138 text
Unity向けのCode Inspectionsの解説
Slide 139
Slide 139 text
ここ、Unity Code Inspectionの理由が書いてあるので 読むのおもしろいです! https://github.com/JetBrains/resharper-unity/wiki
Slide 140
Slide 140 text
次の話題
Slide 141
Slide 141 text
複数のJetBrains IDEを使う人 あと、EAPやRCを使いたい人 ぜひJetBrains Tool Boxを!
Slide 142
Slide 142 text
IntelliJ IDEAハンズオン ――基本操作からプロジェクト管理までマスター 山本裕介さんと今井勝信さんの IntelliJ IDEAの書籍 コードの書き方・読み方の基本操作は Riderとも共通 ライセンスについても
Slide 143
Slide 143 text
Rider Build in Tutorial
Slide 144
Slide 144 text
Rider Build in Tutorial
Slide 145
Slide 145 text
Riderはいいぞ! @RyotaMurohoshi 2019/10/27(日) .NET Conf in Tokyo 2019