VSCode。。。エディタやめるってよ。

# VS CODEってなんですか？

超高機能な**テキストエディタ** です。最近では統合開発環境（IDE）だと言っても良いぐらいに高機能になりました。

##  IDEってなんですか？

ソフトウエア開発のためにプログラムエディタ、コンパイラ呼び出し、テストの実行、デバッグ支援などの機能を統合したソフトウェアのことです。だいたいこんな機能を持っています
 
 
NO.|機能|概要
---|---|---
1|任意コンパイル|ユーザーの求めに応じて、プログラムをコンパイルする。
2|オートコンパイル|プログラムの変更の度にコンパイルして、問題などがあればエディタ上にわかりやすく表示する。
3|補完|入力された情報から、取り得る選択肢を並べる。開発者はその中から適切なものを選択する。
4|フォーマッタ|インデントなどを適切に整形してくれる
5|シンタックスハイライト|プログラムに色を付けて構文をわかりやすくする
5|依存解決|そのプログラムが利用する外部のライブラリを読み込む
6|多言語対応|自然言語じゃないよ。Javaとかcとかたくさんのプログラミング言語に対応するってことだよ。

だいたい1〜4までできたらIDEって言ってもいいかな。と個人的に思う。

## IDEはなんでいるんですか？

これは一言でいえば、 **使わないとプログラムという作業が煩雑になりすぎるから** 

プログラムはただのテキストファイルです。テキストエディタとコンパイラもしくはパーサがあれば、 **プログラムを作ることは可能。** 事実、僕は、19の時分からJavaを書き続けているが、最初は、Emacsで書いて、javacコマンドでコンパイルしたものです。

![ProjectImages-TextEditor.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/837176/1b21e42b-c401-5d31-fa72-62d72b04457d.png)

こういった開発スタイルは早晩生産性の観点で、行き詰まります。代表的には以下のような場合です。

- プログラムの文法上の間違えの発見が遅れる。
- パッケージ含んだクラス名を一字一句間違いなく覚えることも、入力することも現実には難しい。
- プログラム整形を人手で行う。そのため、品質が安定しない上に時間がかかる
- リファクタリングが難しい。



この問題を解決してくれるのがIDEです。つまり

- オートコンパイルで常に文法的には正しいプログラムを書ける。
- プログラム補完で、入力すべきコードが補完されるため「名称の一部」を覚えておけばよくなった。
- プログラム整形は、IDEにおまかせ♪
- リファクタリングが簡単なので、より良いプログラムに変更を続けられる。

![ProjectImages-IDE.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/837176/acdb8cc7-fc1d-8869-91a3-3fed9d4cbc6d.png)


こんな感じになります。

## VS CodeってIDE？

これはちょっと判断が難しいところですね。デフォルトの状態ではVSCodeはIDEではありません。超便利な、**テキストエディタ** です。ただし、VS Codeは拡張機能が豊富なため、組み合わせれば超強力な **統合開発環境(IDE)** へと変貌します。

たとえば、私は

* Pythonを書いたり
* Javaをデバックしたり
* Ansible Playbook　で構築作業を自動化したり
* Plant UML だってかけちゃう。

そう、VS Codeならね♪

つまり、基本的にはただのエディタに過ぎないVS Codeは拡張機能を組み合わせることで、単なるエディタであることをやめ、統合開発環境へと変貌するのです。

# Java を書いてみる



## 導入拡張機能
![Java拡張機能.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/837176/3a340f98-d767-f1c7-5009-5dd954e91b31.jpeg)

わたしの導入している Java関係の拡張機能はこんな感じです。殆どがExtensions for Javaを導入すると一緒にはいります。

## ソースコード整形

まずは整形です。
![フォーマット前.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/837176/503457ea-7237-9108-7ca4-8a5565986147.jpeg)
このように、1行になってしまっている、Javaのソースコードも。。。
![フォーマット手順.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/837176/566992cb-c62b-02b2-99de-aba11968fc93.jpeg)

ドキュメントの整形を実行すれば...
![フォーマット後.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/837176/29277a85-894c-5518-474a-32ddac86e6ef.jpeg)

このようにあっという間に整形されます。


## コード補完

たとえば、このようにString#formatを呼び出したい場合も、途中まで入力すれば補完候補が表示され、開発者はそれを選択するだけです。

![補完.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/837176/353807d8-97a0-f9fa-9f15-fe8daea1c115.jpeg)

## ビルド

Java 拡張機能は、Mavenでのビルドをサポートしているため、このように。Maven packageを実行することが可能です。
![WS000015.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/837176/b167a6fa-7499-23fc-6e8d-68162897d3d2.jpeg)
はい。ビルド完了です。
![WS000017.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/837176/c5a59dc2-de79-c57e-1cab-0bbfe6da7d75.jpeg)


## デバッグ

さて、私が大好きなIDEな機能の一つにデバッグ機能があります。どんな言語の開発でもデバッガを探しておくことから私は始めます。これなしでは問題追跡がやりにくいからです。

このように、ブレークポイントを設定してから。
![ブレークポイント.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/837176/e399b5dd-5873-cfed-190f-9eca358ac182.jpeg)

Debugを押すと、プログラムの動作を開始しますが。ブレークポイントに処理がささると。。。

![デバッグ実行.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/837176/13a455c9-d4f4-1209-55a3-f5b8a8a5b566.jpeg)


処理を一時停止します。

![ストップ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/837176/6b751453-c3aa-4df5-9776-6e92ca73cca3.jpeg)


この後、1行1行個別に実行する「ステップオーバー」も可能ですし、呼び出されるメソッドの中に入って実行を継続する「ステップイン」も可能です。このとき、変数内のデータを参照することが可能です。


## そのほかのIDE

|No.|IDE|特徴|
---|---|---
|1|Eclipse|IBMの製品をOSSとして現在のecipse.orgに寄贈。長い間Javaのデファクトスタンダード的なIDEとして君臨。独自のビルドツールのほかMaven等にも対応
|2|NetBeans|もともとはOpenJDKとともに公開されていた、デフォルトIDE。いまはApacheプロジェクトに寄贈されている。ネイティブでMaven対応していたり、Junitのテストケースのガワを勝手にはいてくれたり。僕の大好きなIDE|
|3|InteliJ|なぜか、みんな大好きInteliJ ビルドはgradleを採用。逆にGradleを書く場合は最強|
|4|Android Studio|Googleが開発したIDE、だった。いまはInteliJ派生。Androidのプロジェクトを作成するのに便利|
|5|Pycharm|これもInteliJ派生|
|6|Visual Studio Code|言わずと知れたVS Code。|


## まとめ

- IDEがないと、生産効率ぐんと下がるよ
- VSCodeも拡張機能を入れれば、IDEとして使えるよ
- Javaの拡張機能を例に、使い方をみてみたよ