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