このブログはDroidKaigi 2019の Android Studio設定見直してみませんか? の詳細です。 せっかく聴いてくれる方がメモを取ってて話を聴き逃してもらいたくないためのエントリーです。
登壇中何らかの問題が発生した時の対策でもあります。
前提
- 設定の遷移の区分けはJetBrainsの公式と同じで「 | 」です。「Preferences | Keymap」という記述の場合、Preferencesの中にあるKeymapというメニューを表しています。
- Macを使っている前提で話が書いてあります。
- Android Studio 3.1から3.3.1での動作確認はしています。
Quick Lists
リファクタ、Surrend With、右クリックなどをすると出てくるポップアップがあると思います。
これ、実は自分専用のポップアップを作ることができます。
Preferences | Appearance & Behavior | Quick Lists
と遷移するとQuick Listsを作成する画面が出てきます。
ここの「+」をクリックし、「Display name」にはわかりやすいものを設定し、ポップアップに表示したいアクションを追加します。
「Find Actions」で「Display name」に入力した値を選択すると、自分でカスタマイズしたポップアップが表示されるようになります。
このQuick ListsはKeymapを設定することも出来て、便利です。
Font ligatures
!=, ->, ==ってITエンジニアなら読むことは出来ると思うのですが、!=は≠と表示される方がカッコイイです!(主観です)Android Studioではこの表示をサポートしています。
Preferences | Editor | Font
Enable font ligaturesにチェックを入れ、Font ligaturesに対応しているフォントに変えます。
そうすると、コードがこんな感じに表示されるようになります。
Notification
右下や右上に出てくるポップアップです。
このポップアップですが、すぐ消えちゃったり、何度も出てきてイライラさせたりしてくれます。 全てのポップアップにはIDが振られており、Notificationの設定で表示方法を変えることができます。これは3rdパーティのプラグインも含まれます。
今回紹介したいのはこの設定ではなく、どのNotificationでも使われていない、「Read aloud」という設定です。
Gradle Syncの設定の「Read aloud」を選択して、Gradle Syncをしたらどうなるでしょう? Notificationの内容をAndroid Studioが大きな声で何秒かかったのかを伝えてくれます!(この渾身のネタが文字でしか伝えられない悲しさ・・・)
ちなみに当日は、「おおおお!」とAndroid Studioさんに言ってもらうためのプラグインを使い、褒めてもらいました。
File Color
File Colorはデフォルトで利用されているので、結構みんな知らないうちに使っている機能だと思います。Project Viewにあるテストコードの背景が黄緑になっています。これがFile Colorです。
File Colorは便利な利用方法があります。
Preferences | Appearance & Behavior | File Colors
上の方のWindowにある、プラスボタンをクリックします。
「Scope」を「Production」として、「Color」を「Blue」としてみます。そうすると、「Run」ボタンを押して、アプリを起動する時に利用されるソースコードが青くハイライトされるようになります。
Build Variantを変えても即反映されます。
コードフォーマット
コードフォーマットにはいろんな方法が提供されています。
昔よく話に上がっていたのは、reformat code/organize importsなどを保存時に実行するマクロを組むとか、Eclipseのデフォルト機能から作られたであろう、Save Actions - Plugins | JetBrainsというプラグインを導入する、Commitダイアログにあるreformat code/organize importsなどにチェックして、Commitする。
ここで紹介するのは、コードを書いているときに、コードフォーマット漏れしているかを確認する方法です。
Preferences | Editor | Inspections | Kotlin | Style Issues
KotlinのInspectionの中に「File is not formatted according to project」という設定があります。これを有効にして、「Severity」を「Error」とします。
これでプロジェクトのコードフォーマット設定に違反したコードを書くと文法エラーのような表示なります。
この赤線のところで、「Option(Alt) + Enter」をすると、「Reformat File」という選択肢が出るようになります。
そこで「Reformat File」を選択すると、フォーマットされるようになります。
これを利用すれば、コーディング中にフォーマットされているかどうかの確認が可能です。Android Studio上でエラー表示になっているだけで、ビルドは問題なく出来ます。
余談ですが、特定の箇所をCode Formatしたくない場合もあると思います。そう言う場合は
Preferences | Editor | Code Style
「Enable formatter markers in comments」を有効にし、「@formatter:off」と「@formatter:on」で括れば、フォーマットエラー表記もされないようになりますし、「Reformat File」しても無視されます。
Breakpointsの削除
Breakpointsはデバッグ時に必須なものです。Breakpointsを特定の条件下のみ発動することも可能です。Breakpointを右クリックし、「Condition」を入力すればその「Condition」がtrueの時のみBreakpointで止まります。
で、このBreakpoint、作るときも削除するときも簡単で、クリックしたら出来ちゃいます。
結構複雑な条件を設定したにも関わらず、誤ってワンクリックで消してしまい、またその条件を入力しなくてはならなくなった経験ありませんか?筆者は首がもげるくらいあります。
この問題への対処方法があります。
Preferences | Build, Execution, Deployment | Debugger
「Remove breakpoint」のところにある、「Confirm removal of conditional or logging breakpoints」を有効にしてみてください。
そうすると、条件付きのBreakpointをクリックすると、削除するか確認ダイアログが出現するようになります。
Inject Languages
Inject Languageと言う機能は生のStringに対して、JSONやYAMLなどの言語に対するサポートができるようになる機能です。
対象のStringにカーソルを合わせ、「Option (Alt) + Enter」を押し、「Inject Language or reference」を選択します。その後、そのStringの言語を指定したら、その言語のサポートを受けられるようになります。
また、ここではJSONを利用しているため、「Edit JSON Fragment」と言う機能も利用でき、それを利用すると、別WindowでJSONを入力したら、エスケープなどを良しなにやってくれるようになります。
この機能は非常に便利なのですが、チームで共有するためには、@language("JSON")
や//language=json
などを記述しなくてはなりません。この記述は「Inject Language or reference」を選択したタイミングですぐに再度「Option (Alt) + Enter」を押せば補完してもらえるのですが、忘れがちです。
この問題を解消する機能があります。
Preferences | Editor | Language Injections | Advanced
この設定画面の一番下にある「Add @Launguage annotation or comment if needed」を有効にします。その後、もう一度「Inject Language or reference」を選択すると、@language("JSON")
や//language=json
を最初から補完してくれるようになります。
Layout Editor
Android開発者なら誰もがお世話になるだろうLayout Editorの設定の紹介です。
このLayout Editorは設定がいっぱいあって、なかなか面白い機能ではあるのですが、今回紹介するのはこの画面の設定ではなく、Preferecesの方の設定を変えてみます。
Preferences | Editor | Layout Editor
この三つの設定のうち、一番上にある、「Prefer XML editor」という設定。有効にしてみて、もう一度Layout Editorを開いてみます。
よーく見てみます。
Textタブの位置が変わっています。
デフォルトでは、Designが左で、Textが右。
細部までこだわり抜いて作られている感じがします。
Preferenceのパスのコピー方法
これは設定というより機能のお話です。
登壇中もこのブログでも特定の設定画面への遷移を「Preferences | Keymap」のように記述していました。たぶんここを読んでいる方も社内や自分のドキュメントで設定への遷移を書いたことある人いるのではないでしょうか?
これをタイピングするのは、なかなか厳しいです。そこでこの機能を使うと便利です。
左側にあるTree的なメニューにポインターを合わせ、右クリックしてみてください。「Copy Preferences Path」と出てきます。これをクリックすれば、そこまでのパスをコピーすることが出来ます。
Pluginのインストールを強制する
特定の機能を使っている場合、チームで必須で使うプラグイン揃えたい時があると思います。例えばDatabindingを使っているプロジェクトでDatabinding Support - Plugins | JetBrainsを入れるとか。
登壇で使ったプロジェクトでは、自分がどんなタイピングをしたのか、どんなActionを実行したのかをあとでみやすくなるように、Presentation Assistant - Plugins | JetBrainsを強制していました。
Preferences | Build, Execution, Deployment | Required Plugins
プラグインの強制方法はこの設定画面で、現在使っているプラグインの中から強制するプラグインを選択します。
これらのプラグインをインストールせずにプロジェクトを開くと、右下のところにエラーが表示されます。
このエラーポップアップの「Install required plugin」というリンクをクリックすると、インストール予定のプラグインの詳細が表示されます。OKボタンを押すと、全てのプラグインをインストールしてくれます。
当日の発表は多分ここまでです。これ以降は時間の都合上、発表することが出来なかったお話です。
設定の共有
ここまで色々設定変更を見てきましたが、これらの設定はチーム内で共有することが可能です。多くの設定はプロジェクトの.idea
内に含まれています。
externalDependencies.xml
は必要なプラグインの設定、vcs.xml
はバージョンコントロールの設定だったりします。
ただし、例えば、workspace.xml
のようなその個人の設定ファイルも含まれてしまっていますので、必要に応じて、.gitignore
などでコミットしないように注意が必要です。
GitHubのgitignoreにJetBrainsのものが公開されていますので、それを参考にすると良いと思います。
icon.png/icon_dark.pngというファイルがあると思います。これはそのプロジェクトiconとして認識されます。
ちなみに、最近Android Studioの対応がされた、Toolboxでもアイコンが表示されます。
Android StudioをNotepadにしてみよう!
最後に(最初から?)ちょっとAndroid Studioで遊んでみます。
Android Studioにはいろんなボタンや空白などがあります。これを全て消すとどうなるか!?を試してみます。
「Hide All Windows」
「Tabs Placement」を「None」に
「Show line numbers」を「OFF」に
「Status bar」を「OFF」に
「Navigation Bar」を「OFF」に
「Show Gutter icons」を「OFF」に
「Tool Buttons」を「OFF」に
「Breadcrumbs」を「Don't Show」に
ここまで来るともうNotepadとほぼ見分けが付きません!画面が有効活用出来そうです!
ちなみに、ここまでやってしまって、最初に戻す方法は用意されていません。Macの場合、~/Library/Preferences/AndroidStudio3.3/
のoptions
フォルダを消せば元に戻せます。実行は自己責任でお願いします!
まとめ
以上、DroidKaigi2019の Android Studio設定見直してみませんか? の詳細でした。
これを聴いてくれた、または読んでくれた方が1人でも設定変えてみたり、他にも面白い設定/機能ないかなー?ってAndroid Studioの探訪をしてくれると嬉しいなーって思います!
宣伝
さて、Ubieでは、こんな感じで、便利なものを積極的に採用して開発を進めています。もし、Ubieに興味出てきたなーって方はぜひ、@shiraj_iにDM下さい!
サーバサイドエンジニア以外にもいろんな職種募集していますので、こちらもぜひ確認してみてください。