プログラミング言語学習環境設定

基本的にVimを使用してコーディングしている。ただしプログラミング言語を学習しているときには、補完やサジェストを使用してくれるツール(IDEなど)があると便利なので、VSCodeを併用することもある。IntelliJなどの統合環境は重いので可能な限り使いたくない。

TypeScript

TypeScriptは型があるため、ツール側からすると補完やサジェストをより的確にしやすい。普段はMarkdownのビューアくらいにしか使っていないVSCodeだが、TypeScriptもVSCodeもMicrosoft製のもののため相性も良いのではないかと考え、VSCodeを試しに使ってみることにした。 

案の定、VSCodeによるTypeScriptの補完やsuggestはIDEのようにかなり便利なレベルだった。VSCodeだけで充分ではないかと思えるほどその出来が素晴しい。

ところで、Vimmerはどの環境を使うときでもVimキーバインドにするものだ。今までの私も当然のようにVSCodeVimというプラグインを導入してVimキーバインドにしていた。ところがこのプラグインは細かな挙動がVimと違い、暫く使っているとストレスが溜まってくる。

このストレスに我慢出来なくなりVSCodeを辞めてVimに戻りたくなってきた。そのときVSCode上でNeoVim(Vimから派生した新しいVim)を動作させることが出来るvscode-neovimというプラグインがあることを知った。このプラグインはVimキーバインドのエミュレーションではなく、裏でVim(正確にはNeoVim)が動いているという。

これは使うしかないということで早速導入。但し、NeoVimのバージョン0.5以上(現時点では、stableではなくnightlyになってしまう)が必要らしい。stableの0.4.4でやってもそれっぽく動くが、たまに変な挙動になっていて0.5にすると大丈夫だったので素直に0.5を導入するのが良さそうだ。

NeoVim用にカスタマイズした設定を有効にしておくと、VSCode上の挙動が怪しかったので、NeoVimの設定ファイルを読み込まないようにして、VSCodeから素のNeoVimを使うことにした。

これでかなりストレスが緩和されてVSCode上でコーディングが出来るようになった。1ファイルで完結するレベルのコーディングであれば

VSCodeだとファイルの切り替えや画面分割などが(私にとっては)簡単に出来ない。そんなに難しくもなく出来るのは分かるのだが自分の中で慣れ親しんだ操作がある。その操作で切り替えたいのだが、それをやるとVSCodeが意図しない動作をする。Vimではこの辺りを自分好みに細かに設定していたのだがVSCodeではどこまで手に馴染むように設定できるのか。ファイルの切り替えや画面分割はコーディング時にはよくやる操作のため考えるよりも手が先に動くレベルでやりたい。大きなアプリケーションを作成するときには、これらは必須なので開発時にはVimに戻ることになりそうな予感がしている。

とはいえ、TypeScriptに慣れるまでの間は、VSCodeの補完・サジェストがかなり有益なのでメインはVimで操作しつつ必要に応じてVSCodeで編集すれば良さそうだ。

ということで以下の設定をvimの設定に追加した。

if has("mac")
 function! ExecVSCode()
   let path = expand("%:p")
   let run = '!code ' . path
   exe run
 endfunction
 nnoremap <C-W><C-C> :<C-U>call ExecVSCode()<CR>
endif

これでVimで開いているファイルをVSCodeで開くことが出来る。やってみたら以外に便利だったので個人的にはこれで充分。

但し、Vimでもそれなりに補完してくれると嬉しい。そこでVim上でもある程度快適にTypeScriptのコーディングが出来るようにTypeScript用の設定をしておいた。具体的にはsyntax用に typescript-vim 、補完・suggest用に tsuquyomi というVimのプラグインを導入した。そして、以下のようにfiletypeの設定を.vimrcに追加した。

autocmd BufNewFile,BufRead *.ts set filetype=typescript

私はまだ補完用のプラグインは neocomplete.vim を使っている(このプラグインは既に開発終了しているので、これから導入する方は deoplete.nvim を使用した方が良いと思う)。ここまで設定しておくとVimのオムニ補完によりTypeScriptのコーディング時にある程度適切な補完が出来るようになる。VSCodeほど便利ではないが、必要に応じて使っていこうと思う。

Go

Goに関しては殆どVimの設定を追加する必要はなかったのだが、どうやらGo界隈ではソフトタブではなくハードタブを使うのが流儀のようだ。私はVimに expandtab を設定しているため、通常は強制的にソフトタブにしているのだがGoのときはハードタブにするように以下の設定を.vimrcに入れておいた。

autocmd FileType go setlocal noexpandtab ts=4 sw=4

vscode-neovimというプラグインのおかげでVSCodeも悪くないなと感じたが、開発するとなるとやはりVimになってしまう。しばらくの間は要所要所でVimとVSCodeを行き来する感じになりそうだ。

Kotlin

個人的には、一時期Scalaを触っていたとき以来、久しぶりのコンパイル型言語。そして生のJavaは触ったことがないのでJVM系の言語はいつも戸惑ってしまう。Scalaを触っていたときは、可能な限りvimで編集していた。でもオブジェクトの方やメソッドのインターフェイスがどうしても分からないときが多々あり、頻繁にIntelliJも使用していた。というよりは、vimとIntelliJで同時にファイルを開きながら編集していた。

恐らくKotlinもvim併用になるんだろうな、と思うので、最終的にはvimとIntelliJの2つの環境を整備した。

vimは以下のpluginを入れた。主にsyntax-highlight用。

そして以下を .vimrc に記載。 

autocmd BufNewFile,BufRead *.kt setfiletype kotlin
autocmd BufNewFile,BufRead *.kts setfiletype kotlin

Kotlinの文法確認など初期の入門時には、kotlincでコンパイルして実行するだけで済んでいたので、

.PRECIOUS: %.kexe
.PHONY: run run_% clean

KOTLINC = /usr/local/kotlin-native/bin/kotlinc

run: run_sample

run_%: %.kexe
	$<

%.kexe: %.kt
	$(KOTLINC) $< -o $*

clean:
	rm -rf *.kexe* *~

.PHONY: FORCE
FORCE:こ

このようなMakefileを作って、vimのterminalから、修正→実行をササっと確認していた。

が、非同期処理(コルーチン)を試すころから、kotlincを使う方法が良く分からずgradleを使うことになった。以下の手順でgradleの導入〜ビルド・実行が出来るようだ。

# macでgradleをインストール
brew install gradle

# gradleプロジェクト用のディレクトリを作成
mkdir apps

# gradleプロジェクトの生成
cd apps
gradle init --type=kotlin-application

# gradleプロジェクトのビルド・実行
./gradlew run

この状態で暫く色々と試しつつ、私の最終目標のサーバーサイドでKotlinを使用するために、Spring Boot + Kotlinをやるところまで来た。

このサイト(https://start.spring.io/)でSpringを使うプロジェクトの雛形ファイルを作成できるらしい。Gradle, Kotlinを選び他の項目も自分の使いたいものを選んで「GENERATE」でzipをダウンロードできる。Webアプリケーションを構築するならSprint Web、Thymeleaf(テンプレートエンジン)あたりをDependenciesで選択しておくと良さそう。ダウンロードして解凍したフォルダの中にある「build.gradle.kts」をIntelliJで開けばOK。Webアプリケーションの起動はコマンドラインからなら「./gradlew bootRun」だし、IntelliJから起動するならRun/Debug ConfigrationsでTasksとしてbootRunを設定しておけばOK。

Webアプリケーションをちょっと弄ろうとして、最初はIntelliJを使わずにvimだけでコードを手打ちしてビルドしたら「Unresolved reference: Controller」と出てどこのパッケージをimportするのか、IntelliJを使えば適切なパッケージのimport文を入力してくれた。こういうときにIDEは便利だ、な。

この記事が気に入ったらサポートをしてみませんか?