5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Maya-PythonAdvent Calendar 2016

Day 4

MayaとPyCharmと、時々、VIM(後編)

Last updated at Posted at 2016-12-04

この記事はMaya-Pythonアドベントカレンダー12月4日の記事です。

前編からの続きです。

MayaとPyCharmの連携についてですが、今日は思うところあってのエディット機能についての再確認をしていきます。

今日触れる機能については無料のCommunity版でもすべて使用できると思います。

PyCharm 2016.3 Professional
Maya 2016 Extension2

VIM愛

昨今自分が使うプログラム言語は

  • Python
  • HTML
  • CSS(lessで書いてるけども)
  • JavaScript(近々TypeScriptに移行予定)
  • DosBatch
  • C++

といったところです。軽く調べてみるとPyCharmはこれらほとんどをサポートしてるんですよね。TypeScriptなんて特に気合入ってる。

私はVIMを長年使ってます。主に使用しているプラグインの中で無いと悲しいのは、

  • Unite
  • Jedi
  • Syntastic

くらいで、基本的にはhjklでの移動など基本機能が便利で使ってます。単純にタイプ数、視線の移動、などが少なくて楽なのです。
つまり自分でvimscriptを書くほどのユーザーではありません。

詳しい方は、ちょっと古いプラグイン使ってない?とお気づきかもしれません。
そう、ちょっと設定ファイルを書くことに疲れてます・・・NEOVIMも挫折。

使用中のプラグインの中でもJediっていうプラグインが強力なPythonサポートになります。
かなり賢くて、メソッドの候補などをプルダウンメニューで表示してくれます。
2016-12-04_11h36_27.png

こういった機能の代替えになるのかを検証していこうと思います。

Mayaのスクリプトエディターの自動補完

まずは改めてMayaのスクリプトエディターの機能確認。

スクリプトエディターにはCommand Completionというオプションがあります。

MELコマンドを入力する際に、自動補完やオプションの説明が表示されます。非常に便利。
2016-12-03_19h28_17.png

Pythonでも同様にMELコマンドやPython標準モジュールに関しては自動補完が効きます。
2016-12-03_19h26_39.png

でもaliasには反応しません。pymel.coreのMELコマンドにも対応していないようです。ちょっと厳しい。
2016-12-03_19h29_05.png

PyCharmはどうなんだ

さて、PyCharmです。

pm(pymel.coreのalias)を入力すると、MELコマンドは表示されませんでした。listHistoryだけが候補に挙がっているのはこのソースコード中で使用しているためです。
2016-12-04_11h44_04.png

Maya組み込みPythonでしか有効にならないモジュールは通常のPythonでは読み込めないのが原因だと思います。

しかしMayaに関してはmayapyというインタープリターが用意されています。オートデスクさんは非常に分かってる。
Settingsからデフォルトインタープリターを変更してみましょう。

2016-12-04_11h42_53.png

なんということでしょう。候補が表示されました。

2016-12-04_11h43_38.png

ただ、オプションについては動的に解釈してるから(?)何も表示されません。
2016-12-04_11h51_02.png

ちなみにこのような設定だと、PyCharm内のPython Consoleもmayapyになります。
2016-12-04_11h55_08.png

さて編集中に良く行う動作としては、関数の定義部分にジャンプしたり。

2016-12-04_12h02_38.png

逆に関数が使用されているところを検索したり。
2016-12-04_12h04_19.png

もちろん強力なリファクタリングツールも作業効率アップ間違いなしです。

VIM愛ふたたび

ここまでくると非の打ちどころがありません。すでに最強と言えるでしょう。

しかし私の心をむしばむ愛という名の悪魔がささやきます。

「十字キーなんてタッチタイプできるのかい?・・・」

JetBrainsなめんな。そのくらいのプラグインあるわ。

2016-12-04_12h09_07.png

うぐぐ・・・VIM操作ほとんどできた・・・

Uniteに代わるスニペット管理、syntasticに代わるコードチェックがあれば愛を捨てることができそうです。

スニペット管理

syntasticが行ってくれてたコードチェックはPyCharmだとある程度リアルタイムに行ってくれるのでよしとして、スニペットだけはしっかり確認が必要です。

Live Templatesという機能だそうです。

お決まりのロガー初期化とロガー取得をスニペット登録してみましょう。

ロガー初期化
    import logging
    if $ISDEBUG$:
        LOG_FORMAT = r"%(asctime)s %(name)s [%(levelname)s] %(filename)s:%(lineno)d %(message)s"
        LOG_LEVEL = logging.DEBUG
    else:
        LOG_FORMAT = r"[%(levelname)s] %(message)s"
        LOG_LEVEL = logging.INFO

    _logger = logging.getLogger(u'$NAME$')
    _logger.handlers = []
    _stream_handler = logging.StreamHandler()
    _formatter = logging.Formatter(LOG_FORMAT)
    _stream_handler.setFormatter(_formatter)
    _logger.addHandler(_stream_handler)
    _logger.setLevel(LOG_LEVEL)
ロガー取得
from logging import getLogger
logger = getLogger(u'$NAME$')

Settings/Editor/Live Templateから追加します。あらかじめ内包表記とか登録されてますね。話がそれますが、条件付き内包表記、永遠に覚えれれませんよね(あ、私だけ?・・・)
2016-12-04_12h38_03.png

「+」ボタンを押して新規グループにスニペットを作ってみました。毎回入力したい可変の部分は$NAME$のように$で括るルールのようです。
2016-12-04_13h07_09.png

settingsのダイアログではペーストできないようですので、%USERPROFILE%\.PyCharm2016.3\config\templates\Python.xmlを直接編集してもいいようですが、私はうまくいきませんでした。特殊文字のエスケープとかに失敗してるんでしょうけども、調べる気にもなりません。XMLって。

大きめのスニペットを登録するのはちょっと辛いですね。小分けにしましょう。

登録はちょっとめんどくささを感じましたが、ともあれ、Ctrl+Jでスニペットを呼び出せます。候補から選択するために十字キーを使わなくてはいけないってのが嗚呼VIM・・・と思わせる瞬間だったりします。
2016-12-04_13h04_21.png

以上、スニペット登録から呼び出しをやってみましたが、おおむねLive Template機能も問題ないような気がします。よくできてます。

無料でここまでの環境が手に入るって本当にすごい時代です。

まとめ

PyCharmすさまじい。

さてどうしたものか。

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?