notepad

いろいろ書くメモ帳

anyenvとVisual Studio Codeで競プロ環境を構築する

以前までは競技プログラミングの環境として,Visual StudioなどのIDEを使っていました. しかしIDEだと起動が遅かったり,実行がプロジェクト単位だったりと,競技プログラミングのような小規模プログラムを書く環境としては,いまいち使いにくい部分がありました.

そこで,anyenvとVisual Studio Codeを使った,手軽にプログラムを書けるような環境を構築しました.これはその時のメモです.

環境

anyenvのインストール

anyenvのインストール方法なんて世の中に溢れていますが一応.

anyenvというのは,いろんな言語の開発環境管理ツール(pyenv,rbenv,plenvなど)を一括管理するためのツール.簡単にいえば,開発環境管理ツールの管理ツール(?)

github.com

これを使うといろんな言語の開発環境を簡単に構築することができる.

インストール方法

とりあえずcloneしてきて,

$ git clone https://github.com/riywo/anyenv ~/.anyenv

.bashrcに以下を追記して,

# anyenv
export PATH="$HOME/.anyenv/bin:$PATH"
eval "$(anyenv init -)"

シェルを再起動する.

$ exec $SHELL -l

終わり.超簡単.

pyenvとPythonのインストール

以下のコマンドを実行するだけ.

$ anyenv install pyenv
$ exec $SHELL -l
$ pyenv install -l     # バージョンのリストを見れる
$ pyenv install 3.5.1  # 最新バージョンをインストール

Pythonのインストール時に,あれもないこれもないと怒られるので,その都度無いと言われたものをインストールする.

最後にglobalのバージョンを指定する.これをしないと,OS標準のバージョンが使われることになってしまう.

$ pyenv global 3.5.1  # さっきインストールしたバージョン

Visual Studio Codeのインストール

ここからダウンロードしてインストールする.

code.visualstudio.com

拡張機能(Runner)のインストール

Runnerは,VSCodeで書いたプログラムを実行してくれる拡張機能. これを使うことで,わざわざターミナルを開いてコマンドを叩かなくても,ショートカットキー一発でVSCode上からプログラムを実行できる.

VSCodeを開いた状態でctrl+Pを押すと,ウィンドウ上部にコマンドパレットが開く.

f:id:Hatanas:20160713113525p:plain

そこにext install runnerと入力すると,候補に「Runner」があるので選択してインストールする.

f:id:Hatanas:20160713113239p:plain

Runnerの設定

ここまでできれば,プログラムを書いてctrl+shift+Rを押せば実行してくれるが,1つ問題がある. VSCodeのコンソールからは標準入力が(たぶん)できないため,シェルスクリプトのリダイレクト機能を使ってファイルから標準入力を与えてやる必要がある. Runnerはプログラムを実行するためのシェルスクリプトを自分で設定することができるので,標準入力をリダイレクトで受け取るように設定しておく. 競技プログラミング的にも,標準入力をファイルから受け取れたほうが便利な気がする.

シェルスクリプトの例. 正答データがあれば,出力との差分をとって,正解か不正解かを判定するようになっているが,必要なければ2行目までで十分かと.

あとはVSCodeのユーザー設定に以下を追記すれば完了.

"runner.languageMap": {
        "python" : "シェルスクリプトを保存したパス/python.sh"
}

標準入力用のinputファイルや,正答データ用のanswerファイルは,VSCodeで開いているディレクトリの直下に置く.

f:id:Hatanas:20160713113243p:plain

おわりに

anyenvとVSCodeを使った競プロ環境を構築しましたが,この環境は言語によって向き不向きがあります. 例えば,C++なんかはWindows環境でVisual Studioを使ったほうがいいでしょうし,JavaScalaだったらIDEを使ったほうが楽になると思います. でも,Pythonのようなスクリプト言語であれば,anyenvを使ったこの環境が使いやすいと思います.