[[📒Articles]] > [[📒2022 Articles]] <div class="minerva-last-modified"> 🚀公開日: 2022-xx-xx </div> <div class="minerva-last-modified"> 🖊最終曎新日: 2022-08-24 </div> ![[2022-08-14.jpg|cover-picture]] > [!warning] > この蚘事は執筆䞭のものです。途䞭たでしか曞かれおおらず、既存の内容にも倉曎を加える可胜性が高くなっおいたす。 [[モブプログラミング]]で掻甚したい[[IDE]]のアクション(コマンド)に぀いお、たずめおみたした。 ## はじめに 私は仕事でコヌディングするこずが倚いです。業務コヌディングず蚀えば、事前のミヌティングで必芁事項を固めおおき、その埌に圹割分担をしお、各自が黙々ず䜜業するむメヌゞが匷い方も倚いず思いたす。しかし、近幎はそうではありたせん。 ### [[モブプログラミング]]の普及 [[モブプログラミング]]ずは、皆で集たり、同じ堎所に同じ堎所で同じものを開発するプログラミング手法です。 > Mob programming (sometimes informally called mobbing or ensemble programming) is a software development approach where the whole team works on the same thing, at the same time, in the same space, and at the same computer > [Mob programming \- Wikipedia](https://en.wikipedia.org/wiki/Mob_programming) より モブず略され、プログラミング以倖の甚途における同様の䜜業を指し瀺すこずもありたす。たずえば、『資料䜜成をモブでやろう』ずいった具合に。 そしお[[モブプログラミング]]では画面の共有を行い、[[ドラむバヌ]]ず呌ばれる1人が操䜜を担圓する颚朮がありたす。 ### より重芁になった操䜜スキル 1人で開発しおいる堎合でも、[[IDE]]の操䜜スピヌドは生産性に倧きく圱響を䞎えたす。ある関数の呌び出し箇所を確認するのに、かたや党文怜玢で1぀ず぀確認、かたや[[Call Hierarchy]]機胜を䜿った堎合、その生産性はほずんどのケヌスで10倍以䞊倉わりたす。 幞いなこずに、今たでは非効率な操䜜をしお30秒無駄にしおも、本人の30秒が無駄になるだけでした。それが2人、3人、4人ずなった堎合はどうでしょうか。4人の堎合は合蚈2分の時間が無駄になりたす。たった1぀の操䜜で? 同垭しおいる人の人件費が自分より高い堎合はそれ以䞊にコストがかかりたす。 そのような無駄を削枛するためにも、是非[[IDE]]の䟿利なアクションを芚えお掻甚しおください。そんなこず蚀われおも『知らない』『芚えられない』 ず思うかもしれたせん。それでいいんです。知らなければ教えおもらえたしょう。芚えられなければ、芚えるたで教えおもらいたしょう。そのために[[モブプログラミング]]では耇数人の人が集たっお1぀の䜜業を行っおいるのです。 ### そうは蚀っおも聞きにくい たしかに、党く䜕も知らない状態ではやりにくいですよね。毎回聞いおいるたびに呚囲の雰囲気が重くなっおいくかもしれたせん。それに、**䜕ができるか分かっおいなければ質問するタむミングも分からない**ず思いたす。自分ではベストだず思っお操䜜しおいたら、『そうじゃなくお、こうした方がいいですよ』っお毎回蚀われるの蟛いず思いたす。 この蚘事はそんな方に向けお曞きたした。[[IDE]]のアクションを優先床が高い順に玹介しおいたすので、䞊から自分のペヌスで習埗しおいくこずができたす。オススメは優先床順ですが、もちろんどのセクションを芋おも理解できるように曞いおいたす。 ## 蚘茉に぀いお ### [[IDE]]環境 - [[OS]]は[[Windows 10]] - [[JetBrains IDE]]は[[IntelliJ IDEA]]の`2022.2` - [[VSCode]]は`1.70.1` ### ランク 優先床を以䞋のように定矩し、ACの3぀を玹介したす。 | ランク | 説明 | | ------ | -------------------------------- | | S | 必ず芚えおほしい | | A | 必ず䜿っおほしい | | B | 特別な理由がなければ䜿っおほしい | | C | 䜿えた方がいい | | D | 䜿わなくおもいい | 私が[[モブプログラミング]]を行う堎合、基本的にはSBのアクションをマスタヌしおいただくようお願いしおいたす。Sランク以倖は、開始時にすべおを䜿える必芁はありたせん。[[モブプログラミング]]の䞭で、郜床䜿甚しおもらうように促すだけです。 ### 項目 それぞれ以䞋の項目を蚘茉したす。 - 🗚 `モブプロでトリガヌずなるセリフ` - ⌚ `筆者が割り圓おおいるショヌトカットキヌ` - [[JetBrains IDE]] - ⚙ `アクション名の絶察パス` - ⌚ `デフォルトショヌトカットキヌ` - [[VSCode]] - ⚙ `アクション名の絶察パス` - ⌚ `デフォルトショヌトカットキヌ` 🗚はモブプロの最䞭に[[ナビゲヌタヌ]]の人が蚀うであろうセリフです。セリフは倧抵やっおほしいこずを暗に意味するものになるため、把握しおおくずスムヌズでしょう。 ⚙は[[JetBrains IDE]]や[[VSCode]]での呌び出しやショヌトカットキヌの蚭定に必芁ずなる名前です。 ⌚は筆者が割り圓おおいるショヌトカットキヌず、[[JetBrains IDE]]たたは[[VSCode]]のデフォルトショヌトカットキヌに分けおいたす。埌者は[[JetBrains IDE]]たたは[[VSCode]]の箇条曞き配䞋にそれぞれ蚘茉しおいたす。 筆者が割り圓おおいるショヌトカットキヌが1぀しかないのは、[[JetBrains IDE]]ず[[VSCode]]のショヌトカットキヌが共通になるよう蚭定しおいるためです。なぜそのようにしおいるかは、[[📗共通キヌバむンド戊略を採甚する]]をお読みいただければず思いたす。 <div class="link-card"> <div class="link-card-header"> <img src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" class="link-card-site-icon"/> <span class="link-card-site-name">minerva.mamansoft.net</span> </div> <div class="link-card-body"> <div class="link-card-content"> <div> <p class="link-card-title">📗共通キヌバむンド戊略を採甚する - Minerva</p> </div> <div class="link-card-description"> これを読んでいる方ならショヌトカットキヌがProductivity向䞊に有効であるこずは蚀うたでもないだろう。キヌボヌドに関するネタは本シリヌズでもいく぀か玹介しおいる。 </div> </div> <img src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/minerva-image.webp" class="link-card-image" /> </div> <a class="internal-link" data-href="📗共通キヌバむンド戊略を採甚する" ></a> </div> > [!hint] ショヌトカットキヌ割り圓おのススメ > > > 個人的に、**ショヌトカットキヌは各自が盎感的に䜿える蚭定をした方がよい** ず思いたす。なぜなら、その方が芚えやすいからです。他人のPCを操䜜するずきに困るず考えるかもしれたせんが、自身のPCが割り圓おられおいる環境であれば、そのような時間はほずんどありたせん。その為に䜿いにくいキヌを䜿い続けるのは非効率です。 > > [[IntelliJ IDEA]]の堎合、ショヌトカットキヌの蚭定は、[[Find Action]]の結果で`Alt+Enter`を抌すのが䞀番楜です。はじめは[[Find Action]]から実行したあず、自分にずっお盎感的なキヌを考え、もう䞀床怜玢しお蚭定できるからです。 > > ![[intellij-key-map.mp4]] ### 陀倖アクション 以䞋のような䞀般的機胜は察象から倖したす。 - Undo - Redo - `Ctrl+F` のような怜玢 - `Ctrl+H` のような眮換 - マりスダブルクリックで単語遞択 - マりストリプルクリックで行遞択 などなど。 ## ランクS 必ず**芚えお**ほしいアクションです。 ### 怜玢系 #### アクションの怜玢 - 🗚 `『<コマンド名>を実行しおください』` - ⌚ `Ctrl+Shift+A` - [[JetBrains IDE]] - ⚙ `Main menu | Help | Find Action...` - ⌚ `Ctrl+Shift+A` - [[VSCode]] - ⚙ `Show All Commands` - ⌚ `Ctrl+Shift+P` フリヌワヌドでアクションを怜玢する最も倧切な機胜です。このショヌトカットキヌさえ芚えおおけば、他はすべお忘れおいおも最悪なんずかなりたす。絶察に芚えおください。 > [!info] > ⚙のコマンド名は䞋蚘のようにkeymap蚭定画面ず䞀臎したす。 > > ![[Pasted image 20220815005024.png]] ## ランクA ### 怜玢系 #### ファむル名でファむルを怜玢 これがあれば、゚クスプロヌラヌから目芖でファむルを探す䜜業ずもお別れできたす。 - 🗚 `『<ファむル名>を開いおもらっお...』` - ⌚ `Ctrl+J F` - [[JetBrains IDE]] - ⚙ `Main Menu | Navigate | Go to File...` - ⌚ `Ctrl+Shift+R` - [[VSCode]] - ⚙ `Go to file...` - ⌚ `Ctrl+P` #### ファむル内の構造化されたシンボル怜玢 クラス、関数、プロパティなどの階局構造を保ったたた怜玢できたす。 - 🗚 `『<関数名>の...』` - ⌚ `Ctrl+J O` - [[JetBrains IDE]] - ⚙ `Main Menu | Navigate | File Structure` - ⌚ `Ctrl+O` - [[VSCode]] - ⚙ `Go to Symbol to Editor...` - ⌚ `Ctrl+Shift+O` #### プロゞェクト内の党文怜玢 他の怜玢で芋぀からないものを探すための最終手段です。 - 🗚 `『プロゞェクトのどこかでXXXっお蚘茉ありたしたっけ?』` - ⌚ `Ctrl+J G` - [[JetBrains IDE]] - ⚙ `Main Menu | Edit | Find | Find in Path...` - ⌚ `Ctrl+H` - [[VSCode]] - ⚙ `Find in Files` - ⌚ `Ctrl+Shift+F` #### プロゞェクト内のシンボル怜玢 クラスやむンタフェヌス、関数、倉数などのシンボルに察しお怜玢できたす。 - 🗚 `『XXXっお名前のクラス/関数/倉数がどこかにあるず思うんですが..』` - ⌚ `Ctrl+J S` - [[JetBrains IDE]] - ⚙ `Main Menu | Navigate | Go to Symbol...` - ⌚ `Ctrl+Alt+Shift+N` - [[VSCode]] - ⚙ `Go to Symbol in Workspace` - ⌚ `Ctrl+T` #### 呌び出し箇所を階局的に衚瀺 関数の圱響範囲を調べるのに䟿利です。 - 🗚 `『この関数の圱響範囲はどこたででしょうか?』` - ⌚ `Ctrl+J H` - [[JetBrains IDE]] - ⚙ `Main Menu | Navigate | Call Hierarchy` - ⌚ `Ctrl+Alt+H` - [[VSCode]] - ⚙ `Show Call Hierarchy` - ⌚ `Shift+Alt+H` ### 線集系 #### コヌド補完 (むンテリセンス) `.`を打った時に衚瀺される候補を、明瀺的に出す堎合に䜿いたす。 - 🗚 `『(コヌド補完が衚瀺された前提で) XXXのYYYを呌び出しお...』` - ⌚ `Ctrl+Space` - [[JetBrains IDE]] - ⚙ `Main Menu | Code | Code Completion | Basic` - ⌚ `Ctrl+Space` - [[VSCode]] - ⚙ `Trigger Suggest` - ⌚ `Ctrl+Space` #### 倉数名/関数名などの䞀括倉曎 - 🗚 `『この倉数の名前を倉えたしょう』` - ⌚ `Alt+Shift+R` - [[JetBrains IDE]] - ⚙ `Alt+Shift+R` - [[VSCode]] - ⚙ `Rename Symbol` - ⌚ `F2` #### コヌドフォヌマット - 🗚 `『フォヌマットかけたしょう』 (蚀われる前にやるのがベスト)` - ⌚ `Ctrl+Shift+F` - [[JetBrains IDE]] - ⚙ `Main Menu | Code | Reformat Code` - ⌚ `Ctrl+Shift+F` - [[VSCode]] - ⚙ `Format Document` - ⌚ `Shift+Alt+F` できれば手動ではなく、ファむル保存時に自動でフォヌマットできるようにしたしょう。[[📒IntelliJ IDEAでファむルが保存されたら自動フォヌマット]] も参考にしおください。 #### むンポヌトの最適化 - 🗚 `『䞍芁むンポヌトを消したしょう』 (蚀われる前にやるのがベスト)` - ⌚ `Ctrl+Shift+O` - [[JetBrains IDE]] - ⚙ `Main Menu | Code | Optimize Imports` - ⌚ `Ctrl+Shift+O` - [[VSCode]] - ⚙ `Organize Imports` - ⌚ `Shift+Alt+O` 䜿甚しおいないむンポヌトを削陀したり、むンポヌト文の順序を敎理したす。これも、ファむル保存時に自動実行できるず䟿利ですね。 #### 意図したアクションの提案 ゚ラヌを解消する候補を提案し、修正できるコマンドです。むンポヌト文の自動補完や、クラスや構造䜓メンバの補完は、積極的䜿っおいきたしょう。 - 🗚 `『その゚ラヌ消したしょ.. (そうじゃなくお..そこでクむックフィックスしお..)』` - ⌚ `Alt+Enter` - [[JetBrains IDE]] - ⚙ `Other | Show Context Actions` - ⌚ `Alt+Enter` - [[VSCode]] - ⚙ `Quick Fix...` - ⌚ `Ctrl+.` ### 移動系 #### 宣蚀に移動/䜿甚箇所䞀芧 凊理を远う堎合に必須の機胜です。 宣蚀郚で䜿甚するず呌び出し元が衚瀺されたす。呌び出し元、呌び出し先の䞡方をこのコマンド1぀で賄えたす。 - 🗚 `『(関数や倉数を指しお)飛んでもらっお...』『この倉数どこで䜿っおいたすか?』` - ⌚ `Ctrl+]` - [[JetBrains IDE]] - ⚙ `Main Menu | Navigate | Go to Declaration or Usages` - ⌚ `F3` - [[VSCode]] - ⚙ `Go to Definition` - ⌚ `F12` マりスだず`Ctrl+巊クリック`です。 #### 1぀前に戻る 宣蚀や別ファむルにゞャンプした埌、元の䜍眮ぞ戻るために䜿いたす。 - 🗚 `『さっきのずころに戻っおもらっお...』` - ⌚ `Alt+å·Š` - [[JetBrains IDE]] - ⚙ `Main Menu | Navigate | Back` - ⌚ `Alt+å·Š` - [[VSCode]] - ⚙ `Go Back` - ⌚ `Alt+å·Š` #### 1぀先に進む [[#1぀前に戻る]]でコヌドを確認したあず、元の箇所ぞ戻るために䜿いたす。 - 🗚 `『(Backで少し戻っお確認した䞊で) さっきのずころに戻っおもらっお...』` - ⌚ `Alt+右` - [[JetBrains IDE]] - ⚙ `Main Menu | Navigate | Forward` - ⌚ `Alt+右` - [[VSCode]] - ⚙ `Go Forward` - ⌚ `Alt+右` ## ランクB ### 衚瀺系 #### 関数などのパラメヌタヌ情報衚瀺 関数の匕数ずいったパラメヌタヌに関する情報を確認できたす。 - 🗚 `『その関数の匕数なんでしたっけ?』` - ⌚ `Ctrl+P` - [[JetBrains IDE]] - ⚙ `Main menu | View | Parameter Info` - ⌚ `なし` - [[VSCode]] - ⚙ `Trigger Parameter Hints` - ⌚ `Ctrl+Shift+Space` ### 怜玢系 #### 宣蚀ず䜿甚堎所を怜玢 クラス、関数、倉数などの宣蚀堎所ず䜿甚堎所を怜玢できたす。[[#宣蚀に移動 䜿甚箇所䞀芧]] ずの違いは、移動に重点をおくか、怜玢に重点をおくかです。 - 🗚 `『そのクラスっおどんな感じに䜿われおいたすか?』` - ⌚ `Ctrl+J U` - [[JetBrains IDE]] - ⚙ `Main menu | Edit | Find Usages | Find Usages` - ⌚ `Ctrl+G` - [[VSCode]] - ⚙ `該圓なし` [[IntelliJ IDEA]]の`Find Usages`による怜玢結果は、`Recent Find Usages`で埩元できたす。 ### 線集系 #### 盎前に出珟した単語で補完 盎前に出珟した順で単語を補完できたす。[[#コヌド補完 むンテリセンス]]ずは違い、文法や文脈は䞀切考慮したせんが、その分予枬はしやすいです。 - 🗚 `『『xxxの...』 (xxxは盎前に出おきた単語)』` - ⌚ `Shift+Space` - [[JetBrains IDE]] - ⚙ `Main menu | Code | Code Completion | Cyclic Expand Word` - ⌚ `Alt+/` - [[VSCode]] ([[Simple Autocomplete]]が必芁) - ⚙ `Searches for the next result of Simple Autocomplete` - ⌚ `なし` #### 行のコメントアりト/コメントむン 珟圚行をコメントアりトしたす。耇数行遞択しおいる堎合は、遞択されおいる行すべおをコメントアりトしたす。すでにコメントアりトされおいる堎合はコメントむン(コメントアりト解陀)したす。 - 🗚 `『そこをコメントアりト(解陀)しお』` - ⌚ `GCC` ([[Vim]]に関するプラグむンが必芁) - [[JetBrains IDE]] - ⚙ `Main menu | Code | Comment with Line Comment` - ⌚ `Ctrl+/` - [[VSCode]] - ⚙ `Toggle Line Comment` - ⌚ `Ctrl+/` #### 珟圚のハンクを元に戻す 珟圚の[[ハンク]]に察し、バヌゞョン管理䞋の状態に戻したす。マりスでGuttarの差分衚瀺をクリックしお戻すアむコンをクリックしおも同じです。 - 🗚 `『そこリバヌト(元に戻)しおもらっお..』` - ⌚ `Ctrl+J Ctrl+U` - [[JetBrains IDE]] - ⚙ `Version Control Systems | Rollback Lines` - ⌚ `Ctrl+Alt+Z` - [[VSCode]] - ⚙ `Revert Selected Ranges` - ⌚ `Ctrl+K Ctrl+R` ただ、『元に戻す』ずいう意味はUndoのケヌスもありたす。どちらの意味で蚀っおいるのかを、きちんず確認したしょう。 > [!caution] > [[VSCode]]の`Revert Selected Ranges`はデフォルトではdiff editorのみで有効になっおいるので、diff editor以倖でも䜿いたい堎合は`When`の条件を削陀する必芁がありたす。[[keybindings.json]]の堎合は以䞋の蚭定を远加したす。 > ```json > { > "key": "ctrl+j ctrl+u", > "command": "git.revertSelectedRanges" > } > ``` #### 遞択範囲/単語指定のマルチカヌ゜ル カヌ゜ル䞋の単語に察しお、出珟箇所にカヌ゜ルを増やせたす。範囲遞択をするず、遞択した文字列の出珟箇所に察しおカヌ゜ルを増やしたす。 - 🗚 `『型がxxxになっおいるずころをyyyに倉えたしょうか』` - ⌚ `Ctrl+K` ([[Vim]]に関するプラグむンが必芁) - [[JetBrains IDE]] - ⚙ `Main menu | Edit | Find | Add Selection for Next Occurrence` - ⌚ `Alt+Y` - [[VSCode]] - ⚙ `Add Selection To Next Find Match` - ⌚ `Ctrl+D` 線集したい箇所がすべお画面に収たっおいる堎合は、怜玢+眮換よりも芖芚的フィヌドバックを埗やすい点で有利です。たた、その埌もマルチカヌ゜ルのたた続けお操䜜したい堎合でも有効です。 ### 移動系 #### 指定行に移動 実行埌、`10`のように行番号を指定しお移動したす。`10:5`のように列番号も指定できたす。 - 🗚 `『XX行目の..』` - ⌚ `行番号G` ([[Vim]]に関するプラグむンが必芁) - [[JetBrains IDE]] - ⚙ `Main menu | Navigate | Go to Line:Column...` - ⌚ `Ctrl+L` - [[VSCode]] - ⚙ `Go To Line/Column...` - ⌚ `Ctrl+G` #### 最近開いた順でタブ切り替え `Alt+TAB`のように、最近開いた順でタブを切り替えたす。 - 🗚 `『さっきのタブに戻っおもらっお...』` - ⌚ `Ctrl+TAB` - [[JetBrains IDE]] - ⚙ `Other | Switcher` - ⌚ `Ctrl+TAB` - [[VSCode]] - ⚙ `View: Quick Open Previous Recently Used Editor in Group` - ⌚ `Ctrl+TAB` #### 次のInspectionに移動 (珟圚のファむル限定) Inspectionずぱラヌや譊告など、怜査の結果衚瀺されるものです。このコマンドを䜿っお移動した先で、[[#意図したアクションの提案]]を実行するずスピヌディヌで心地よい操䜜ができたす。 - 🗚 `『゚ラヌず譊告がありたすね.. (移動しお)』` - ⌚ `Ctrl+Shift+J` - [[JetBrains IDE]] - ⚙ `Main menu | Navigate | Next Highlighted Error` - ⌚ `なし` - [[VSCode]] - ⚙ `Go to Next Problem (Error, Warning, Info)` - ⌚ `なし` #### 前のInspectionに移動 (珟圚のファむル限定) [[#次のInspectionに移動]]の前バヌゞョンです。 - 🗚 `『゚ラヌず譊告がありたすね.. (移動しお)』` - ⌚ `Ctrl+Shift+K` - [[JetBrains IDE]] - ⚙ `Main menu | Navigate | Previous Highlighted Error` - ⌚ `なし` - [[VSCode]] - ⚙ `Go to Previous Problem (Error, Warning, Info)``` - ⌚ `なし` > [!todo] > - 続きを曞く > - 最近移動した堎所を怜玢はCに移動