Kotlinのチュートリアルをやってみた①

SwiftエンジニアがKotlinのチュートリアルをやってみたのでメモ書きします。今回はHello Worldをするまでです。IntelliJ IDEAを使ってやります。
ちなみに私はAndroidアプリをむかーしに1回だけ書いたことがある（eclipse / Java）程度で、IntelliJ IDEA、Kotlinは触ったことありません。

# チュートリアル資料

https://kotlinlang.org/docs/tutorials/
※今回私はIntelliJ IDEAを使うのでその中でもこのページに沿って進めます。
https://kotlinlang.org/docs/tutorials/getting-started.html

# Hello Worldをするまで

## IntelliJ IDEAをダウンロードする

[こちらのページ](https://www.jetbrains.com/idea/download/index.html#section=mac)で最新のCommunity版をダウンロードしました。古いIDEAやAndroidStudioを使う場合は手動でKotlinのプラグインを追加する必要があるようです。追加方法については以下のように書かれています。

```
Under Preferences (OSX) or Settings (Windows/Linux) > Plugins > 
Browse Repositories type Kotlin to find the Kotlin plugin. 
Click Install and follow the instructions.
```

## 新規プロジェクトを作成する

IntelliJ IDEAを立ち上げてCreate New Projectをします。
![スクリーンショット 2017-04-08 16.23.53.png](https://qiita-image-store.s3.amazonaws.com/0/100736/fbefd675-ecc9-7868-5dc9-5cb0d6bcff53.png)
KotlinはJDK 1.6以上で動くようです。`Kotlin(Java)`チェックボックスにチェックを入れてNextをクリックします。
![スクリーンショット 2017-04-08 16.25.20.png](https://qiita-image-store.s3.amazonaws.com/0/100736/369fa972-9b02-3cd5-ac3b-b97762073798.png)
プロジェクト名を設定します。
![スクリーンショット 2017-04-08 16.25.43.png](https://qiita-image-store.s3.amazonaws.com/0/100736/af09ac70-5549-d6c5-ee02-d713d48af3cb.png)
するとこんなかんじでプロジェクトが作られました。
![スクリーンショット 2017-04-08 16.27.21.png](https://qiita-image-store.s3.amazonaws.com/0/100736/e30c07f1-3b3b-09f2-7016-b35e80c63754.png)

## Kotlinファイルを作成する

srcフォルダの下にKotlinフォルダを作成します。srcフォルダの上で右クリックをし、New -> Kotlin File/Classを選択します。
![スクリーンショット 2017-04-08 16.50.18.png](https://qiita-image-store.s3.amazonaws.com/0/100736/463b3b79-4ad7-1c47-6a84-5fcb7c52d0df.png)
適当に名前を決めてOKをクリックします。
![スクリーンショット 2017-04-08 16.50.44.png](https://qiita-image-store.s3.amazonaws.com/0/100736/2357ecf4-d540-65ae-67d7-7702468fb2fa.png)
ファイル追加ができました。
![スクリーンショット 2017-04-08 17.03.42.png](https://qiita-image-store.s3.amazonaws.com/0/100736/95337b8a-0b93-7908-d6a6-bd46814a1b34.png)

## Hello Worldを表示する

main関数を書きます。`mai`くらいまでタイプすると予測補完が出てきます。
![スクリーンショット 2017-04-08 17.39.30.png](https://qiita-image-store.s3.amazonaws.com/0/100736/29157394-7fb9-5f41-c817-fe3e9cffb6aa.png)
ここでEnterかtabを押すと補完が聞いてmain関数が入力されます。
![スクリーンショット 2017-04-08 17.39.43.png](https://qiita-image-store.s3.amazonaws.com/0/100736/578b7bfc-0fd5-2357-9e14-ba40c327d8f4.png)
main関数の中に`println("Hello, World!")`と打ってみます。

ではいよいよ動かしてみます。一番簡単な実行方法は左のKotlinマークをクリックし、Run 'AppKt'を選択することだということなのでその通りにやってみます。
![スクリーンショット 2017-04-09 0.05.31.png](https://qiita-image-store.s3.amazonaws.com/0/100736/73d5675c-8650-bcc1-ba4b-564a0b691c7b.png)
するとRun tool windowに実行結果が表示され、Hello Worldを表示させることに成功しました。
![スクリーンショット 2017-04-09 0.07.30.png](https://qiita-image-store.s3.amazonaws.com/0/100736/5e77d592-2203-987b-674f-6a39dbeb17e2.png)

# おまけ：快適に開発するために

## 保存時に自動でフォーマットをかける

http://qiita.com/suzuki-hoge/items/98df92eb44eb131de6eb#保存時にフォーマッタを実行する という記事に従って設定しました。とても便利です。

## 大文字小文字を区別しないで補完

IntelliJ IDEA -> PreferencesからEditor -> General -> Code Completionを選択し、Code sensitive CompletionをNoneにします。
![スクリーンショット 2017-04-09 19.42.04.png](https://qiita-image-store.s3.amazonaws.com/0/100736/27b5ecaa-54a9-53d2-979f-61c809906612.png)
するとこのように大文字小文字関係なく補完が出て来るようになります。
![スクリーンショット 2017-04-09 19.42.32.png](https://qiita-image-store.s3.amazonaws.com/0/100736/62ae8568-e520-b718-3dc6-6a6d74369ee0.png)

## 綴りチェックのOFF

造語などを書いた時にいちいち波線を引かれたくない時に設定します。
↓ちょっと見えにくいけど`Shouhin`の部分に緑色の波線が入っている。
![スクリーンショット 2017-04-09 19.55.25.png](https://qiita-image-store.s3.amazonaws.com/0/100736/e8e25306-e6c9-711b-a076-547cf4f98685.png)
IntelliJ IDEA -> PreferencesからEditor -> Inspections -> Spellingのチェックを外せば波線は表示されなくなります。
![スクリーンショット 2017-04-09 19.59.26.png](https://qiita-image-store.s3.amazonaws.com/0/100736/5606ebc9-03c2-47f0-9bfb-917cdc0d4a26.png)



## .gitignore

こちらをまるっとコピーして入れました。
https://github.com/JetBrains/kotlin/blob/master/.gitignore

## コマンド：[名前からアクションを見つける](https://www.jetbrains.com/help/idea/2017.1/navigating-to-action.html)

`Command + Shift + A`で設定系のことも検索できます。例えば`white`と入力するとwhite spaceの設定などが表示されます。
![スクリーンショット 2017-04-09 19.01.18.png](https://qiita-image-store.s3.amazonaws.com/0/100736/b6112385-1881-ef15-1dfd-00514f0d2913.png)


# 警告対処

※結論から言うと、私は放置しておくことにしました。ので、興味ある人のみ最後まで読んでみてください。

## 警告内容

初めてHello Worldを実行した時にコンソールにこんなメッセージが出ていました。

```
objc[16282]: Class JavaLaunchHelper is implemented in both 
/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/bin/java and 
/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/libinstrument.dylib.
One of the two will be used. Which one is undefined.
```

![スクリーンショット 2017-04-09 0.08.21.png](https://qiita-image-store.s3.amazonaws.com/0/100736/23c04833-fc18-7bc9-26e2-bdd162a2407b.png)

実行はできているものの不穏なメッセージが表示されています。

## 対処法調査

stack over flowに辿り着きました。
http://stackoverflow.com/questions/20794751/class-javalaunchhelper-is-implemented-in-both-one-of-the-two-will-be-used-whic
どうやらJDK 1.7.0_45時点から発見されているバグであり、JDK 1.8.0_92時点でもそれは直っていないとのこと。執筆時最新バージョンはJDK 1.8.0_121だったのでまずは最新バージョンを入れて直っていないか確かめることにしました。

## 対処実行

JDKは[こちら](http://www.oracle.com/technetwork/java/javase/downloads/index.html)からダウンロードし、指示に従ってインストールをしていきます。インストールが終わったらIntelliJで設定をします。File -> Project Structureを選択します。
![スクリーンショット 2017-04-09 12.49.16.png](https://qiita-image-store.s3.amazonaws.com/0/100736/1621577c-c285-4cbc-08a5-aa955e9a537c.png)
Project SDKを設定する箇所があるので、New -> JDKを選択します。
![スクリーンショット 2017-04-09 14.00.31.png](https://qiita-image-store.s3.amazonaws.com/0/100736/9daf5004-739f-311f-7fa4-a5cf6a3ba9d2.png)
JDKを選択する画面が出てくるのでJDK 1.8.0_121を指定します。
![スクリーンショット 2017-04-09 13.28.23.png](https://qiita-image-store.s3.amazonaws.com/0/100736/5cdd4b75-cd95-9fa6-4fb4-de1691acdf44.png)
もしJDKの場所がどこかわからなかったら以下のコマンドラインツールで以下のコマンドを打ってみてください。パスが表示されます。
`/usr/libexec/java_home -V`
![スクリーンショット 2017-04-09 13.27.47.png](https://qiita-image-store.s3.amazonaws.com/0/100736/1fc19e05-95cd-0d93-e894-58ad03b6e43c.png)

JDKを最新に指定できたところで再度プログラムを実行してみます。が、またも同じ警告。しょうがないので先程のstack over flowに書かれていた通り、Java 7u21を使用してみることにします。[こちらのページ](http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html#jdk-7u21-oth-JPR)からJava 7u21をダウンロードします。アーカイブからダウンロードするにはOracleのプロファイルを作成する必要があります（アカウント登録のようなもの）。ダウンロードしたらインストールしてIntelliJにセットした上で実行します。すると警告なく実行できました。
![スクリーンショット 2017-04-09 13.30.04.png](https://qiita-image-store.s3.amazonaws.com/0/100736/06e4cb69-3a04-2f19-a9fe-a5d3011a8011.png)

こうして解決したものの、古いJDK使うのもアレだし警告出てても実行自体はできるので私は最新版のJDK 1.8.0_121を使うことにしました。何か問題が出てきたらまたその時考えます。

# 感想

## 開発開始までが早い

開発開始までにやる環境構築が少なく、すぐに開発に取り掛かることができて非常に良かったです。

## 現在カーソルを合わせている関数名が表示されるのは面白い

今カーソルを合わせているところの関数名が上部に表示されるのは面白いなと思いました。
![スクリーンショット 2017-04-09 19.33.22.png](https://qiita-image-store.s3.amazonaws.com/0/100736/78b1a3ff-f34f-79a6-54be-434ee63851fd.png)![スクリーンショット 2017-04-09 19.33.31.png](https://qiita-image-store.s3.amazonaws.com/0/100736/22c0e6ba-02ac-8b07-3419-85b38e2e44e4.png)

## .gitignoreも表示できるのが良い

Xcodeだと（たぶん）Xcode内で.gitignoreを表示することはできませんが、IntelliJではできます。頻繁に編集するわけではありませんがいちいちコマンドラインツールを立ち上げることなく編集できるのは便利だと思いました。
![スクリーンショット 2017-04-09 20.15.07.png](https://qiita-image-store.s3.amazonaws.com/0/100736/496fc6ea-5d9f-283c-369a-84c106a40e7f.png)

## 保存済みかどうかがわかりにくい

Xcodeの場合は保存していないファイルはグレーになりますが
![スクリーンショット 2017-04-09 19.36.59.png](https://qiita-image-store.s3.amazonaws.com/0/100736/bc598832-1542-b4db-6a40-f21c1bc24a4e.png)
intelliJは特に変化がないように思います。保存していなかったとしても実行時に自動保存されるようなので特に問題はないのですがXcode, eclipseを触ってきた身としては少し戸惑いを感じました。