pylintで2スペースインデント用の設定
Pythonの標準的なコーディング規約であるPEP8では、インデントは4スペースと定められています。
PEP 8 -- Style Guide for Python Code | Python.org
個人的には、しばらくメインで書いていたJavaScriptを2スペースでやっていたこともあって、なんとなくPython書くときは2スペースインデントで書いているのですが、そうすると静的チェックで使っているpylintでいくつかエラーが発生してしまいます。
そこで以下の点を変更することで、2スペース用の設定にすることができました。
[FORMAT] ... # String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 # tab). indent-string=' ' # Number of spaces of indent required inside a hanging or continued line. indent-after-paren=2 ...
インデントを2スペースとする
2スペースのインデントで発生したエラーは、 Bad indentation. Found 2 spaces, expected 4 [bad-indentation]
というものでした。
この場合は indent-string
の設定を、デフォルトでは ' '
とスペース4つとなっているため、 ' '
とスペース2つにすることで、上記エラーにならないようになりました。
括弧に続く行のインデントも2スペースとする
indent-after-paren
もデフォルトは 4
なのですが、そのままでは以下のように次の行に継続するような場合のインデントを2スペースにすると、 Wrong hanging indentation (add 2 spaces). [bad-continuation]
という警告が出てしまいます。
my_list = [ 1, 2, 3, 4, 5, 6, ]
そこで、ここも 2
を設定しておくことで、エラーとならなくなりました。
参考
- Pythonでインデントをスペース2つにした際の周辺ツールの設定 | タロスカイ公式ブログ
- 他の静的チェックツールのflake8やautopep8での設定についてまとめられていました
Pythonによるクローラー&スクレイピング入門 設計・開発から収集データの解析まで
- 作者: 加藤勝也,横山裕季
- 出版社/メーカー: 翔泳社
- 発売日: 2017/10/23
- メディア: Kindle版
- この商品を含むブログを見る
gnupackでWindowsの環境変数PATHを引き継ぐ
gnupackを使いだして一つ困ったのは、Windows側で設定している環境変数PATHが引き継がれなかったことでした。
そのままだと、Windows側でも使うプログラムのPATHをCygwinやEmacs上で再設定しなければならず、二重・三重の管理となってしまうので避けたいところ。
そこで調べてみたところ、解決方法を見つけたのでメモ。
対象
項目 | バージョン |
---|---|
gnupack | devel 13.06-2015.11.08 |
解決方法
PATH =
として既存のPATHをクリアしているような記述を発見。
[Process Variable] CYGWIN_DIR = %ROOT_DIR%\app\cygwin\cygwin HOME = %ROOT_DIR%\home TMP = %TEMP%\gnupack TEMP = %TMP% SHELL = /bin/bash CYGWIN = winsymlinks:lnk MAKE_MODE = unix TZ = JST-9 LANG = ja_JP.utf8 # PATH = # ←この部分が既存の環境変数を消していたっぽい PATH = %PATH%;%EMACS_DIR%\bin PATH = %PATH%;%LOCAL_DIR%\bin PATH = %PATH%;%CYGWIN_DIR%\bin PATH = %PATH%;%ROOT_DIR%\app\script PATH = %PATH%;%ROOT_DIR%\app\vim PATH = %PATH%;%windir%\system32;%windir%;%windir%\system32\Wbem PATH = %PATH%;%WINDIR%\System32\WindowsPowerShell\v1.0
そこで、上記のように該当部分をコメントアウトすることで、既存のPATHも残るようになりました。
これにより、gnupackと共通で使いそうなものはWindowsの環境変数側に寄せることができるので、一元管理できて便利。
Robo 3T(旧Robomongo)でmLab(Heroku Add-on)につなぐ
オープンソースのMongoDBクライアントであるRobomongoをたまに使っていたのですが、いつの間にか高機能なMongoDB IDEのStudio 3T(旧MongoChef)の会社に買収されて、Robo 3Tという名前になっていました。
Robomongo is now Robo 3T, with MongoDB 3.4 support
というわけで、MongoDBのHerokuアドオンであるmLabにRobo 3Tでつないだ際のメモです。
確認環境
項目 | バージョン等 |
---|---|
OS | Mac OS X 10.11.6 |
Robo 3T | 1.1.1 |
mLabへの接続情報の確認
mLabへの接続情報は、環境変数 MONGODB_URI にあります。
プロジェクトフォルダにて以下のコマンドを叩くか、Heroku Dashboardから該当アプリのConfig Variablesから確認します。
$ heroku config:get MONGODB_URI -a <app name>
すると、以下の様な形式の文字列が取得できます。
mongodb://<user>:<password>@<host>:<port>/<database>
mLabへつなぐ
Robo 3Tを起動すると出て来るダイアログで「Create」を選択する。
Connectionタブの以下の項目に、接続情報から以下のものを転記する。
- Address:
<host>
:<port>
Authenticationタブの以下の項目に、接続情報から以下のものを転記する。
- Perform authenticationにチェックを入れる
- Database:
<database>
- User Name:
<user>
- Password:
<password>
「Test」ボタンを押して、接続確認。
「Connect」を押して接続。
おわり
Robo 3Tもマルチプラットフォームで展開されているので、WindowsやLinuxでも使えます。
DBeaverでHeroku Postgresにつなぐ
久々にHerokuを触ることになり、DBもHeroku Postgresなので、Windowsで使えるPostgreSQLのGUIクライアントがないかと探していたところ、良さそうなものを発見。
PostgreSQL専用というわけではなく、MySQLやSQLiteなどいろいろなデータベースをサポートしている上に、実はマルチプラットフォームで展開しているものでした。
で、いざHeroku Postgresにつなごうとしたところで、単純にDatabase Credentialsをコピペしただけでは繋がらなかったので、接続方法をメモ。
確認環境
項目 | バージョン等 |
---|---|
OS | Windows 10 Pro |
DBeaver | 4.2.0 |
Heroku Postgresへの接続情報の確認
Heroku Postgresへの接続情報は、環境変数 HEROKU_POSTGRESQL_COLOR_URL (※ COLOR 部分はいろいろと変わる)にあります。
プロジェクトフォルダにて以下のコマンドを叩くか、Heroku Dashboardから該当アプリのConfig Variablesから確認します。
$ heroku config:get HEROKU_POSTGRESQL_COLOR_URL -a <app name>
すると、以下の様な形式の文字列が取得できます。
postgres://<user>:<password>@<host>:<port>/<database>
Heroku Postgresへつなぐ
左側に表示されるDatabase Navigator内で右クリックして「Create new connection type」、もしくはメニュー「Database」→「New Connection」を選ぶ。
Select new connection type内で「PostgreSQL」を選択する。
Generalタブ内で、先に調べた接続情報から以下のものを転記する。
- host
- port ※たぶんPostgreSQLのデフォルトポート
5432
が設定済 - database
- user
- password
Driver propertiesタブ内で「sslmode」に require
と入力する。
「Test Connection」で問題がなければ、あとは「Next」「Next」「Finish」でOK。
Driver propertiesの「sslmode」の設定をしていないと、接続時にエラーになります。
ということが、Herokuドキュメントに書かれていました。
Connecting to Heroku Postgres Databases from Outside of Heroku | Heroku Dev Center
おわり
MacではPSequelをメインで使っていましたが、わりとDBeaverの使い勝手が良かったので、個人Macにも導入することにしました。
gnupackのCygwinを指定したディレクトリで開く
先日、 chere
でエクスプローラからCygwinを開く設定を付けましたが、Emacsで作業中にカレントディレクトリをCygwinで開きたい場合があり、その方法を調べてみました。
やり方
$ cygpath -w "$(pwd)" | tr -d '\n' > /dev/clipboard && /root/startup_cygwin.exe
Windowsの clip
コマンドでも良かったのですが、文字化けすることがあったので変更。
間に tr
を入れているのは、 cygpath
の出力結果に含まれる最後の改行があると、移動がおこなわれなかったためです。
この設定に気づいたきっかけ
gnupackの設定ファイルを眺めていたときに、Chdir_With_Clipboard
という項目を発見。
もしかして、クリップボード上のパスへのディレクトリ移動フラグ?と気付いたのがきっかけで、それならこんなことできるかも?と試してみました。
/root/startup_config.ini
[startup_cygwin.exe] Cmdline_Image = "%term.exe%" -e "%bash.exe%" Application_Id = Mintty Init_Current_Dir = %HOME% Chdir_With_Clipboard = yes Synchronous_Run = no Load_Private_Font = yes Tune_Cygwin_Mount = yes Tune_Cygwin_Profile = yes Convert_Cygwin_Path = yes
Emacsから呼び出す
Lispはよくわからないので、シェルスクリプト経由で開くことにしました。
こんな感じのスクリプトをPATHが通った場所に設置。
Open current directory in Cygwin
それをEmacsから呼び出す関数を用意して、適当なキーバインドを割り当て呼び出しています。
https://github.com/umi-uyura/dot.emacs.d-gnupack/blob/master/lisp/win-open-folder.el
(defun open-cygwin() "cyghere CURRENT-DIRECTORY" (interactive) (process-query-on-exit-flag (start-process-shell-command "open folder in Cygwin" nil "cyghere")))
参考
エクスプローラのコンテキストメニューからCygwinを起動する
エクスプローラで作業しているときに、あるフォルダをカレントディレクトリにしたCygwinプロンプトを開きたいときがあります。
Cygwinに含まれる chere
というコマンドを使うことで、エクスプローラのコンテキストメニューにCygwinを追加することができました。
chereをインストール
setup.exeか、gnupackには標準で含まれている apt-cyg
コマンドなどを使い、 chere
コマンドをインストールします。
$ apt-cyg install chere
コンテキストメニューに追加
Cygwinプロンプトのショートカットを右クリックし、「管理者として実行」します。
起動したCygwinプロンプト内で、以下のように chere
を実行します。
$ chere -i -cm1 -s bash -t mintty -e "Cygwin Here(&W)"
-1
を付けないと、.bashrcが読み込まれませんでした-e
の後ろは、コンテキストメニューに表示される文言です- デフォルトではアンインストーラを導入してくれますが、うまく動かなかったので、
-m
で不要にしました
コンテキストメニューの削除
アンインストーラは使えませんでしたが、
$ chere -u
でコンテキストメニューが削除されます。
注意点
gnupackの場合、本来は startup_cygwin.exe で起動しているが、それを使っていないので、一部gnupackでカバーしている機能が使えないっぽいです。
参考
Cygwinの$PS1で関数を使うと構文エラーが発生した
個人Mac環境では、Bashプロンプトの表示をカスタマイズしています。
※これ自体はどなたかの設定をほぼ丸パクリさせていただいたものですが、入手元を失念してしまいました
で、同じものをgnupackのCygwinでも使おうとしたところ、何やらエラーが発生。
command substitution: 行 1: 予期しないトークン `)' 周辺に構文エラーがあります command substitution: 行 1: `prompt_git)'
どうやらカレントディレクトリのGitステータスをプロンプトに表示する関数でエラーが発生しているもよう。
調べていると、同じ現象に対処された方を発見。
この記事を参考に、「 $''
でエスケープシーケンスを評価する」の方法を使い、
PS1+="\n" # Newline
となっていた箇所を
PS1+=$'\n' # Newline
に変更したところ、動くようになりました。
変更後のgnupack用の設定は以下のような感じ。
- 作者: 三宅英明,大角祐介
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2017/06/08
- メディア: Kindle版
- この商品を含むブログを見る