クラウドでインスタンスを新しく構築した際にpython用にviを設定

調査研究

1.クラウドでインスタンスを新しく構築した際にpython用にviを設定まとめ

・viはunix用のシンプルなエディターなので操作方法を覚えておくと色々と役に立つ
・.vimrcの設定を行わないと非常に使いにくままになってしまうので設定をしましょう
・sudoでviを起動した時はrootのホームディレクトリの.vimrcが使われるのでそちらも忘れずに

2.viを統合開発環境並みに使い勝手を良くする設定ファイル

以下、towardsdatascience.comより「Jupyter has a perfect code editor」の意訳です。元記事の投稿は2021年2月17日、Dimitris Poulopoulosさんによる投稿です。元記事のタイトルは「Jupyterには完璧なコードエディタがあります」なのですが、内容的には全くJupyter関係ないので、タイトルはまるっと意訳してます。

viはunix用のシンプルなエディターですが、カーソル移動などが独特なため、蛇蝎のごとく嫌う人もいます。私も一番最初にunixを触った時は何故、矢印キーを使わずにわけのわからないキーでカーソルを移動するんだと憤慨しましたが、今ではviを好むようになりました。

圧倒的な利点は軽さと「どんなシステムでもunixであれば必ずインストールされている」事でしょうか。何のディストリビューションが使われているのかも不明なクラウドシステムがトラブってるからとにかく見て欲しい、などと言われた時などでも、viはインストールされている事が期待できます。

しかし、最近のクラウドなどでは、素のvi(ブイアイと読みます。VIsual editorの略です)が入っているケースが多いです。その場合、自分では今までずっとviを使っていたつもりでも、実はvim(ヴィムと読みます。Vi IMprovedの略です)がviと言う名前でインストールされているディストリビューションを使っていた場合、「あれ、なんでこのviはコピペが使えないんだ?」などと戸惑ってしまう事が多いので、そういった際にviの使い勝手、特にpythonスクリプトの編集機能を改善させるために非常に参考になるかな、と思ったのですが、結局vimを新規にコンパイルする以外に解決策を思いつかなかったので、手軽とは言い難い、中々に困難な作業になってしまいました。

アイキャッチ画像は往年のUnixベンダーの雄Sun MicrosystemsのUltraSPARCプロセッサーでクレジットはPhoto by Stefan Sidén on Unsplash

Jupyter Notebookはソフトウェアのアイデアをいつでも段階的に開発できる優れたツールでした。
データサイエンティストは、Jupyterを使用して作業を記録し、新しいアルゴリズムを探索して実験し、新しいアプローチの概要をすばやくつかんで、結果を即座に観察します。

更に、Jupyter Notebookの後継であるJupyter Labは本格的なIDEになる方向に向かっています。あなたが普段使い慣れているIDEというだけではありません。kaleやnbdevのような優れた拡張機能とライブラリを備えているため、アイデアを作成するだけに留まりません。

しかし、月に一回程度は.pyファイルを直接編集したくなる事があるかもしれません。

このファイルには、Notebookにインポートしたり、モデルのクラスを定義するユーティリティ関数が含まれているかもしれません。実際、そのように作業することをお勧めします。こうすれば、Notebook内でハードコーディングしてNotebookを理解しにくくする事を避ける事ができます。しかし、Jupyter Labに付随するテキストエディタはシンプルで多くの機能を備えていません。

それで、私たちは何ができるでしょうか?

jupyterlab-monacoのような取り組みがあり、monacoエディター(VS Codeを強化するコードエディター)をJupyter Labに統合しようとしています。それでも、貢献者がREADMEファイルで明示的に言及しているように、「この拡張機能は単なる「概念実証」の実装であり、本番環境にはほど遠い」です。また、最後のコミットは3年前(執筆時点)であったため、あまり活発なプロジェクトではないようです。

ただし、拡張機能は必要ありません。 ターミナルがあります。 したがって、ViMを使用できます。 そしてViMには必要なものがすべて揃っています。 習得するには少し時間がかかります。ViMが好きなら、私が何を言っているかご存知でしょう。そうでない場合は、まだ躊躇わないでください!本稿では、ViMをPython IDEに変換し、Jupyterと併用する方法を説明します。

原作者の宣伝
Learning Rateは、AIとMLOpsの世界に興味がある人向けのニュースレターです。 毎週金曜日に、最新のAIニュースや記事に関する最新情報や考えをお聞かせください。towardsdatascienceで購読してください!

Python用ViM
要点を説明しましょう。最初のステップは、ViMがまだインストールされていない場合は、実際にインストールすることです。この話では、私たちはクラウドホスティング業者のJupyter Lab環境で作業していると想定しています。

ローカルで作業している場合、ViMよりもVS Codeを起動したいのであれば、VSCodeの起動を妨げるものは何もありません。つまり、あなたはクラウド上のヴァーチャルマシン内で作業していると思います。これは通常、Linux環境を意味します。DebianディストリビューションにViMをインストールするには、次のコマンドを実行します。

sudo apt-get remove vim-tiny
sudo apt-get update
sudo apt-get install vim
訳注:Click To DeployからインストールできるGCPのDeep Learning VM(Debian 10)で検証しているのですが、上記コマンドでインストールされるViMはpython関係のFeaturesが有効になっていませんでした。「sudo apt install vim-nox」で+python3になっているViMがインストールされる事を確認しています。ただし、後述しますが、このViMは最新版の一歩手前のVersionなので一部のPluginが機能しないため、前述のとおりPythonをコンパイルする事を最終的に選択しました。

一部のLinuxディストリビューションにはvim-tinyがプリインストールされていることに注意してください。したがって、最初にそれを削除してから、フルバージョンをインストールする必要があります。次に、必要なものがすべて揃っていることを確認しましょう。 vim –versionを実行し、次の2つのことに注意してください。

VIM> 7.3をインストールしておく必要があります
Featuresが+pythonまたは+python3となっている事を確認してください
これで私たちは準備ができています。

次に、優れたプラグインマネージャーが必要です。

Vundle
Vundleは優れた使いやすいプラグインマネージャーです。したがって、これを使用して必要なものをすべてインストールします。 Vundleをインストールするには、2つのものが必要です。 まず、プロジェクトを適切なディレクトリにgitクローンします。

git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim

次に、ホームディレクトリに.vimrcファイルを作成し、その上にいくつかの行を追加する必要があります。まず、最初にファイルを作成します。

touch ~/.vimrc

次に、次の行を追加します。

set nocompatible " required
filetype off " required

" set the runtime path to include Vundle
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

" let Vundle manage Vundle, required
Plugin 'gmarik/Vundle.vim'

" add all your plugins here between the vundle#begin() and "vundle#end() calls

" All of your Plugins must be added before the following line
call vundle#end() " required
filetype plugin indent on " required

vundle#begin()を呼び出している行に注目してください。

これとvundle#end()呼び出しの間に、必要なプラグインを追加できます。実際のところ、上の例では既にこれを行ってgmarik/Vundlevimプラグインを追加しています。

新しいプラグインのインストールは、GitHubパスをコピーして貼り付けるのと同じくらい簡単です。 後で説明します。それでは、ViMを起動し、Escキー、:キーを押してコマンドモードに入り、PluginInstallを実行します。

次に進みます。

訳注:vimを使って.vimrcに「Plugin ‘gmarik/Vundle.vim’」などの行を追加した際はいったんvimを終了させてから、もう一度、.vimrcを開いてEscキー押下、「:」キーに続けて「PluginInstall」と入力してください。

Python IDE
インストールする最初のプラグインは折りたたみ(folding)を可能にします。numpyを使っているソースコードを見たことがありますか?通常、関数のdocstringは画面全体を占めます。デフォルトで折りたたんでみましょう。先ほど見たvundleの開始呼び出しと終了呼び出しの間に次の行を追加して、プラグインをインストールします。

Plugin 'tmhedberg/SimpylFold'

注意:新しいプラグインを追加するたびに、先ほど実行したPluginInstallコマンドを使用してプラグインをインストールすることを忘れないでください。

デフォルトでdocstringの折りたたみを有効にするには、begin-endブロックの外側に次の設定を追加します。

let g:SimpylFold_docstring_preview=1

次に、自動インデントを有効にしましょう。次のプラグインをインストールします。(導入方法はもうわかりますよね?)

Plugin 'vim-scripts/indentpython.vim'

更に、vimrcファイルに次のオプションを追加することで、.pyファイルをどのように処理するかをViMに伝えることができます。

au BufNewFile,BufRead *.py
\ set tabstop=4 |
\ set softtabstop=4 |
\ set shiftwidth=4 |
\ set textwidth=79 |
\ set expandtab |
\ set autoindent |
\ set fileformat=unix

これらの設定は名前から、ほとんど自明です。自動インデント設定はほとんどのことを正しく行いますが、安全を保つために、Python固有のvim-scripts/indentpython.vimプラグインをインストールしてください。

最後になりましたが、オートコンプリートが必要です。この仕事に最適なツールはYouCompleteMeです。ただし、そのインストールはもう少し複雑です。まず、次の行でプラグインをインストールします。

訳注:以降で説明されているYouCompleteMeは本稿の手順通りにやるとgo言語用のセットアップで以下のエラーが出て、これが完全解決に至らなかったのでgo言語のサポートをインストールしない事を最終的に選択しました。同様にpython機能のみで良い方は

「python3 install.py –all」のコマンドを「python3 install.py」とすれば他言語向けセットアップをスキップできます。

go: finding mvdan.cc/xurls/v2 v2.2.0
go: mvdan.cc/xurls/v2@v2.2.0: unknown revision mvdan.cc/xurls/v2.2.0
go: finding gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405
go: finding gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127
go: error loading module requirements

Bundle 'Valloric/YouCompleteMe'

おそらく最後にエラーが表示されます。

心配しないでください。 続行して、必要な依存関係をインストールします。

sudo apt install build-essential cmake python3-dev
sudo apt install mono-complete golang nodejs default-jdk npm
訳注:他言語向け設定が不要な方は2行目の「sudo apt install mono-complete golang nodejs default-jdk npm」は不要と思います。また、下記の「python3 install.py –all」では–allを取って「python3 install.py」としてください。

最後に、プラグインをコンパイルします。

cd ~/.vim/bundle/YouCompleteMe
python3 install.py --all

これでおしまいです!
ViMをPython IDEに変えるために必要なもののほとんどがあります。
あなたが考慮したいと思うかもしれない他のプラグインは次のとおりです:

vim-syntastic/syntastic

Python構文の強調表示

nvie / vim-flake8

PEP8チェック

scrooloose/nerdtree

フォルダー構造エクスプローラー

tpope/vim-fugitive

git統合

これで完成しましたが、完全ではない.vimrc構成です。追加したいプラグインなどが他にもある場合は、コメントをください。

" Vundle setup

set nocompatible " required
filetype off " required

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

" let Vundle manage Vundle, required
Plugin 'gmarik/Vundle.vim'

" Python folding
Plugin 'tmhedberg/SimpylFold'

" Python indentation
Plugin 'vim-scripts/indentpython.vim'

" Python autocomplete
Bundle 'Valloric/YouCompleteMe'

" Python syntax highlighting
Plugin 'vim-syntastic/syntastic'

" PEP8 checking
Plugin 'nvie/vim-flake8'

" folder structure explorer
Plugin 'scrooloose/nerdtree'

" git integration
Plugin 'tpope/vim-fugitive'

call vundle#end() " required
filetype plugin indent on " required

" fold docstrings
let g:SimpylFold_docstring_preview=1

" YCM settings
let g:ycm_autoclose_preview_window_after_completion=1
map <leader>g :YcmCompleter GoToDefinitionElseDeclaration<CR>

let python_highlight_all=1
syntax on

" end of Vundle setup

set encoding=utf-8

" enable line numbers
set nu

" settings for .py files
au BufNewFile,BufRead *.py
\ set tabstop=4 |
\ set softtabstop=4 |
\ set shiftwidth=4 |
\ set textwidth=79 |
\ set expandtab |
\ set autoindent |
\ set fileformat=unix

" setup split default behaviour
set splitbelow
set splitright

" split navigations
nnoremap <C-J> <C-W><C-J>
nnoremap <C-K> <C-W><C-K>
nnoremap <C-L> <C-W><C-L>
nnoremap <C-H> <C-W><C-H>

結論
従来のNoteBookは常にソフトウェアのアイデアを段階的に開発するためのツールでした。後継であるJupyterLabは更に本格的なIDEになる方向に向かっています。

ただし、月に一回程度は、.pyファイルを編集したい場合もあり、JupyterLabに付属のテキストエディターは単なるテキストエディターです。

このストーリーでは、ViMをPython IDEに変換し、ターミナルを介してメインのコードエディターとして使用する方法を検証します。ViMの使用に関する詳細なヘルプが必要な場合は、ターミナルでvimtutorを実行し、指示に従ってください。

著者について
私の名前はDimitris Poulopoulosです。私は、Arriktoで働く機械学習エンジニアです。私は、欧州委員会、ユーロスタット、IMF、欧州中央銀行、OECD、IKEAなどの主要なクライアント向けにAIおよびソフトウェアソリューションを設計および実装しました。

機械学習、ディープラーニング、データサイエンス、DataOpsに関する投稿をもっと読むことに興味がある場合は、Medium、LinkedIn、またはTwitterの@james2plでフォローしてください。また、すばらしい本や一流のコースが掲載されている私のWebサイトのリソースページにアクセスして、独自のデータサイエンスカリキュラムの作成を開始してください。

3.クラウドでインスタンスを新しく構築した際にpython用にviを設定関連リンク

1)towardsdatascience.com
Jupyter has a perfect code editor

 

コメント

タイトルとURLをコピーしました