本記事は広告・プロモーションを含みます。コピー2022.10.15こんにちは!たっきん(Twitter)です!今日はEclipseの開発支援機能である「リンター(コード解析)」と「フォーマッター(コード補完)」の紹介をしていきたいと思います。この機能を使うとソースコード内のバグに繋がる恐れのある箇所を指摘してくれたり、事前に決められた規則(コーディング規約)に従い、ほぼ一瞬でコードを整形してくれたりします。個人、チームでの開発を問わず、プログラミングする上でコードスタイルを気にかける必要がほぼなくなるため、爆速でキレイなコーディングを目指している方には必須の機能になります。目次なんでコードの整形が必要なの?コードの自動解析&自動整形機能で楽しよう!コード解析機能「リンター」PyDevコード分析Flake8MypyPyLintコード補完機能「フォーマッター」PyDev.Formatterautopep8BlackEclipseの設定手順リンターフォーマッターフォーマッターで自動整形できない例なんでコードの整形が必要なの?個人やチームでの開発を問わず、コードの解読やレビューなどで他人の書いたソースコードを読む機会は多いと思います。{0}年は閏年ではありません。{0}年は閏年ではありません。print("Error:数字以外が入力されました。{0}年は閏年ではありません。{0}年は閏年ではありません。("Error:数字以外が入力されました。ほとんどの人が<コードスタイル1>のほうが読みやすいと感じるはずです。プログラマはコードを書くのが主業務と思われがちですが、実際はコードを書くよりも読むことのほうに時間を費やされることも珍しくありません。自分で書いたコードだけでなく、他人が書いたコードを読む機会もそれなりに多いです。した場合、読みにくいコードというのはプログラム構造の理解を妨げるだけでなく、モチベーションの低下にも繋がってきます。ならないためにも、事前にコーディング規則を定めて、誰がコードを書いても同一のスタイルを保つために、コード整形が必要になってきます。規則正しくコードを書いたほうが、他人に読んでもらう場合も、後々自分で読み返す場合もストレスなく短時間でコードを理解することができるメリットがあります。RinkerAmazon楽天市場コードの自動解析&自動整形機能で楽しよう!いくら「コーディング・スタイルを守らねば!!」と意識していてもミスは付きもの。いちいちコーディング・スタイルを気にしながらコードを書いていたら、それだけでストレスが溜まってしまいますよね。Eclipseには、そのような問題を解決する機能としてコード解析機能の「リンター」と、コード補完機能の「フォーマッター」が備わっています。コード解析機能「リンター」リンターは特定のコーディングパターン(コーディング規約)に違反している箇所や、構文エラーではないが潜在的に不具合となり得る個所を指摘してくれるツールの総称になります。静的解析ツールと言われたりもします。Eclipseのセットアップ直後はデフォルトで下記4つのリンターが使用できるようです。PyDevコード分析Flake8MypyPyLintフォーマッターと違い、リンターは指摘のみなので複数種類のリンターを有効にすることができます。インポートなどを警告してくれます。Eclipse導入時はデフォルトで有効になっています。間違ったインデント(スペースの数が不正)Flake8Flake8は下記3つのチェッカーを複合したツールになります。script(循環的複雑度のチェック)Pythonのリンターとしては比較的有名で、まずはこれを入れておけば包括的にコードチェックが行えると思います。Eclipse導入時はデフォルトで無効になっているため、使用する場合は有効にする必要があります。MypyMypyは静的型チェッカーになります。Hints)の仕組みが導入され、”静的型付けのような”言語として扱うことができるようになりました。”静的型付けのような”とあえて書きましたが、型ヒントを用いることでC言語のように厳密に型が固定されるわけではありません。動作自体は動的型付けとしての挙動となり、型ヒントはあくまでもコメントに近い位置付けであり、Mypyのような型チェッカーなどのツールで使用されることを想定しています。よってMypyを使うか否かは好みでよいと思います。動的型付けの最大のメリットはデータ型を気にしなくてよいためコーディングの自由度が高まることですが、型ヒントの導入はこの自由度を犠牲にすることになるからです。Eclipse導入時はデフォルトで無効になっているため、使用する場合は有効にする必要があります。PyLintPyLintはFlake8は同等レベルの静的解析を行ってくれるツールになります。Flake8と併せて導入しておきたいツールになります。Eclipse導入時はデフォルトで無効になっているため、使用する場合は有効にする必要があります。ちなみに、PyDevコード分析とPyLintの違いですが、PyLintが完全性を優先するのに対し、PyDevコード分析は誤検知を減らすため、少数かつ高速なチェックを優先します。これはPyLintがPyDevコード分析よりも多くのエラーを検出することができることを意味しますが、実行速度と誤検知率が増加する可能性があります。PyLint?コード補完機能「フォーマッター」フォーマッターは事前に決められた規則(コーディング規約)に従い、ほぼ一瞬でコードを整形してくれる機能になります。リンターは指摘だけでしたが、フォーマッターは整形までしてくれます。なるとリンターは不要なのでは?と思う方もいると思いますが、リンターの指摘内容によっては自動で整形できない箇所もあり、その場合は手動で修正する必要があります。基本的には、まずフォーマッターで整形を行い、残ったリンターの指摘を手動で修正していく形で使い分けていくのが良いでしょう。Eclipseのセットアップ直後はデフォルトで下記3つのフォーマッターが使用できるようです。PyDev.Formatterautopep8Blackフォーマッターはコード整形機能になるため、リンターと違って1種類のみしか有効にすることができません。Eclipse導入時はPyDev.Formatterがデフォルトで有効になっています。<フォーマッター実施結果例>BeforeAfterPyDev.FormatterPyDev.FormatterはEclipse(PyDev)でデフォルトで設定されているフォーマッターになります。カスタマイズ性はそこそこありますが、2018年を最後に更新されてないようです。(フォーマッターのため、あまり更新する必要もなさそうですが・・・)autopep8autopep8はPEP8に準拠するようにコードをフォーマットします。BlackBlackはPEP8準拠の独自のフォーマッターです。「デフォルトの設定が全てだ」と謳っているくらいカスタマイズ性は低いです。逆に言うならBlackを使っておけば誰がフォーマットしても同一規則に準拠したコードで整形できるというわけです。最近割と人気のあるツールのようです。2022」バージョンを使って説明していきます。バージョンによっては表示画面やメニューが多少異なっているかもしれませんが、基本的には同様の操作で設定できるはずです。リンターリンターは複数種類を同時に有効にすることができるため、今回はEclipseでデフォルトで使用できる下記4つのリンターを導入し、有効にしていきます。PyDevコード分析Flake8MypyPyLintまずはパッケージのインストールをしていきましょう。PyDevコード分析だけはPyDevインストール時に同時にインストールされています。Anacondaをインストールしている場合は、下記のコマンドでインストールできます。pylintパッケージのインストールが完了したらEclipseを起動してメニューの「ウィンドウ」→「設定」を選択します。設定ウィンドウが開いたら、左のペインから「PyDev」→「エディター」→「コード解析」を選択します。PyDevコード分析はデフォルトで有効になっているため、「コード分析を行いますか?」にデフォルトでチェックが入ってるはずです。チェックが入ってなければチェックを入れておきましょう。Flake8Flake8を有効にしたい場合は左ペインで「Flake8」を選択し、右ペインの「Flake8を使用する?」にチェックを入れ、「適用して閉じる」をクリックします。MypyMypyを有効にしたい場合は左ペインで「Mypy」を選択し、右ペインの「Mypyを使用する?」にチェックを入れ、「適用して閉じる」をクリックします。PyLintPyLintを有効にしたい場合は左ペインで「PyLint」を選択し、右ペインの「Pylintの使用」にチェックを入れ、「適用して閉じる」をクリックします。指摘の重要度のカスタマイズ各リンターは“指摘の重要度”をカスタマイズできる場合が多いです。重要度は高い順から“エラー”、“警告”、“情報”となります。“無視”を選択すると何も指摘されなくなります。ツールの実行を妨げる重大なイベントを示します。ツールの実行中に問題につながりかねない状況が発生した場合、または結果がユーザーの期待するものとは異なる可能性がある場合を示します。ツールの実行に関する情報です。問題を示すために使用されることはありません。情報フォーマッターフォーマッターはコードを整形する機能になるので1種類しか有効にできません。Eclipse導入時はPyDev.Formatterがデフォルトで有効になっていますが、他のフォーマッターを使いたい場合の切り替え方を説明していきます。Eclipseの設定ウィンドウを開き、左のペインから「PyDev」→「エディター」→「コードスタイル」→「コード・フォーマッター」を選択します。次に右ペインの「フォーマット・スタイル?」のドロップダウンリストから使用したいフォーマッターを選択します。その後、「適用して閉じる」をクリックします。これでフォーマッターの設定は完了です。次は実際にフォーマッターでコード整形していきましょう。例として下記のような整形前のコードを用意しました。リンターのFlake8で5項目ほどエラー指摘を受けている状態です。エディター上で整形したい箇所を選択します。基本的にはコード全体を整形することになるので「Ctrl+A」でコード全体を選択しましょう。選択後は「Ctrl+Shift+F」で整形されます。メニューの「ソース」→「コードのフォーマット」からでも実行できますが、実行頻度が高いのでショートカット・キーで実行するようにしたほうが楽です。コードが整形されてリンターFlake8の指摘も全て解消されました。フォーマッターの自動実行ショートカット・キー「Ctrl+Shift+F」でフォマッターを実行できますが、ファイル保存時に自動で実行するように設定することもできます。saving?」にチェックを入れ、「適用して閉じる」をクリックします。何かと便利なフォーマッターですが、リンターで検出された箇所全てをフォーマッターが修正してくれるわけではありません。以下のコード7行目を見てください。PEP8違反箇所!中身のない例外処理を利用してはいけない。print("Error:数字以外が入力されました。")7行目で中身のない例外処理を書いていますが、これはPEP8の規約に違反します。中身は人が決めないといけないため、このような箇所はフォーマッターでは修正できません。このような場合は人の手で修正することになります。例外処理の中身を定義。print("Error:数字以外が入力されました。今日はROSで「並行処理(マルチスレッド)」を行う方法について紹介したいと思います。今日からROS通信の機能について紹介していこうと思います。ROSアプリケーションは、ノードと呼ばれる実行可能な最小単位のプログラム同士がROS独自のメッセージ通信を介して接続されることで実現されます。こ...Python【NumPyの使い方】サンプルコード集NumPy数値解析ライブラリのサンプルコード集です。使い方の備忘録的な感じで残していきます。これまでROS通信機能について、トピック(Topic)、サービス(Service)と解説をしてきました。今回はROS通信3つ目の機能である「アクション(Action)」通信について解説していきます。コメントをキャンセルメールアドレスが公開されることはありません。Trader」の開発・運用状況を逐次公開しています。ソフトウェア開発の仕事を10年以上経験してきたこともあり、僕が持っているプログラミングやシステム設計などのノウハウも公開しています。最終的には自作のシステムトレードで不労収入生活を送ることが目標です。資産運用状況や自作システムトレード開発の進捗ブログを気ままに書いていますので、よかったら覗いていってくださいね!スポンサーリンクX(旧Twitter)たっきんに興味ある方はぜひフォローお願いします。takilogX(旧Twitter)たっきんに興味ある方はぜひフォローお願いします。コメント目次へトップサイドバータイトルとURLをコピーしました。