EduTools PluginにCodeforcesがサポートされていた

## はじめに
[EduTools PluginにCodeforcesがサポート](https://blog.jetbrains.com/blog/2020/03/04/edutools-plugin-v3-4-released/)されました。まさに公式ブログの通りなのですが、[Kotlin Heroes](https://www.jetbrains.com/promo/kotlin-heroes/)のコンテストを利用して触ってみましたので簡単に紹介したいと思います。

## EduTools Pluginとは
[EduTools Plugin](https://plugins.jetbrains.com/plugin/10081-edutools)を利用すると、JetBrains Academy、Courseraなどの学習プログラムをより便利に受講できます。IntelliJのIDE内でタスク参照や対話形式のコーディングやテストのカスタマイズが簡単に行え、Kotlin、Java、Pythonがサポートされています。EduTools Plugin v3.4からCodeforcesもサポートされ、IntelliJ IDEA 2020.1で利用できるようになっています。EduTools Pluginの導入についてIntelliJ IDEA 2020.1で紹介したいと思います。

まずIntelliJ IDEA 2020.1をインストールしてみましょう。EduToolsプラグインの導入はとても簡単で次の通りです。

- PreferencesからPluginsを選択する
- Marketplace タブを選択する
- EduToolsを検索する
- インストールと再起動をする

<img width="987" alt="スクリーンショット 2020-03-20 17.56.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23391/28d01666-9f89-e27b-0193-a749f09299aa.png">

次にIntelliJ IDEAのFile -> Learn and Teach -> Start Codeforces Contestを選択します。その後、Kotlin Heroes: Episode 3を選択することで当該Projectが表示されます。

<img width="497" alt="スクリーンショット 2020-03-20 17.59.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23391/c619116c-2023-6de9-67e4-c2caf9a738d0.png">

以上でEduTools Pluginの導入は終わりです。今回はCodeforcesに特化しましたが、他の学習プログラムも選択できるので便利です。では、次にEduTools Pluginの機能を紹介します。

<img width="1346" alt="スクリーンショット 2020-03-22 8.30.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23391/b310d82e-ff8f-9781-65f9-50aea6f3bc63.png">

## EduTools Pluginの機能紹介
先ほど紹介したKotlin Heroes: Episode 3を引き続き用います。ProjectのA. Likes DisplayのMain.ktを開くと、Task Descriptionが表示されます。ここでタスクの詳細がわかるようになっています。

<img width="1343" alt="スクリーンショット 2020-03-22 8.32.43.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23391/4829afef-fd6b-c7f8-d959-a8ffa04f8c7c.png">

Projectを見ると、srcとtestDataディレクトリがあります。src以下にはMain.ktという実行プログラムがあります。一方でtestData以下にはinput.txtとoutput.txtがあります。それぞれ入力形式のテストデータと出力形式のテストデータを配置できるようになっています。

入力形式のテストデータは以下の通りです。
<img width="1344" alt="スクリーンショット 2020-03-22 8.34.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23391/63d4fb8d-04e4-8f15-b7fd-57b97110d93d.png">


出力形式のテストデータは以下の通りです。
<img width="1345" alt="スクリーンショット 2020-03-22 8.34.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23391/abb926ca-cf67-8a7c-67ac-dbe574708057.png">

このようにコピペをして入力データを渡す必要がなく、簡単にテストデータを編集できるようになっています。では、ローカル上でテストを実行してみましょう。Task DescriptionのRun Local Testsボタンを実行しましょう。

Main.ktを空の状態にしてRun Local Testsボタンを実行してみると、Test No1 is failedと表示されテストが失敗したことがわかります。さらにRun Local Testsボタン以下にエラーの内容がわかるようになっています。

<img width="1345" alt="スクリーンショット 2020-03-22 8.36.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23391/69bcb30c-3495-eaa7-052a-76b3aaac33e3.png">

Compare Outputs...リンクを選択してみると、より詳細にテスト結果がわかるようになっています。

<img width="1146" alt="スクリーンショット 2020-03-21 19.54.24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23391/430fa006-a770-043d-523f-ada28a5ad2d9.png">

ここまで入力と出力形式のテストデータの設定が簡単なことがわかりました。それだけではなく、テストデータをカスタマイズすることもできます。testData以下に新たにフォルダ2を作成してみましょう。フォルダ2以下に空のinput.txtとoutput.txtを作成して、Run to Localsボタンを実行してみます。すると、Test No2 is failedと表示され正しくテストが実行されていることがわかります。このようにカスタマイズしたテストデータの設定も簡単にできます。

<img width="1345" alt="スクリーンショット 2020-03-22 8.38.43.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23391/902afc98-9ff8-f094-25dd-d3cb55522815.png">

テストが全て通ると、Run Local Testsボタン以下にSubmit soulutionリンクが表示されて、Submitできるようになります。このリンクを選択するとSubmitされそうですが、実際にはKotlin HeroesのSubmit solutionに遷移します。

<img width="1345" alt="スクリーンショット 2020-03-22 8.39.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23391/194d18c2-9e5a-c952-be53-bbe13ec73946.png">

SubmitについてもIDE内で完結できると便利そうです。
<img width="914" alt="スクリーンショット 2020-03-20 19.35.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23391/59b8b4e2-0d06-e795-210a-574f1fd8d696.png">

## おわり
EduTools PluginがCodeforcesにサポートされたことによって、IDE内で完結できることが増えてとても便利なりました。[EduTools Pluginのコード](https://github.com/JetBrains/educational-plugin)も公開されているので、コードを読んでみたいと思います。