<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Autopep8 on YAGI BLOG</title>
    <link>https://www.yuyagishita.com/tags/autopep8/</link>
    <description>Recent content in Autopep8 on YAGI BLOG</description>
    <image>
      <title>YAGI BLOG</title>
      <url>https://www.yuyagishita.com/images/top.png</url>
      <link>https://www.yuyagishita.com/images/top.png</link>
    </image>
    <generator>Hugo -- 0.152.2</generator>
    <language>en</language>
    <lastBuildDate>Fri, 09 Dec 2022 01:21:47 +0900</lastBuildDate>
    <atom:link href="https://www.yuyagishita.com/tags/autopep8/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Pythonコードを静的解析した</title>
      <link>https://www.yuyagishita.com/tech/python/try-flake8-autopep/</link>
      <pubDate>Wed, 01 Apr 2020 20:34:45 +0900</pubDate>
      <guid>https://www.yuyagishita.com/tech/python/try-flake8-autopep/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;python&#34; loading=&#34;lazy&#34; src=&#34;https://www.yuyagishita.com/img/python.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;今回は&lt;strong&gt;flake8&lt;/strong&gt;, &lt;strong&gt;autopep8&lt;/strong&gt;を使って、Pythonコードを静的解析します。&lt;/p&gt;
&lt;h2 id=&#34;静的解析とは&#34;&gt;静的解析とは&lt;/h2&gt;
&lt;p&gt;コードを実行せずに行う解析です。コーディングルールチェックや、制御フローの解析、コードの複雑度の分析をすることでソースコードにある問題点を発見してくれます。&lt;/p&gt;
&lt;h2 id=&#34;flake8とは&#34;&gt;flake8とは&lt;/h2&gt;
&lt;p&gt;pep8のチェック、pyflakesのチェック、及び循環的複雑度をチェックできるラッパーのことです。導入をすることで普段から綺麗なコーディングができます。&lt;/p&gt;
&lt;h2 id=&#34;autopep8とは&#34;&gt;autopep8とは&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.python.org/dev/peps/pep-0008/&#34;&gt;pep8&lt;/a&gt;のスタイルガイドに適用するように、自動的にPythonコードをフォーマットしてくれます。&lt;/p&gt;
&lt;h2 id=&#34;flake8-autopep8インストール&#34;&gt;flake8, autopep8インストール&lt;/h2&gt;
&lt;p&gt;さっそくインストールしていきましょう。&lt;br&gt;
以下コマンドでflake8をインストールできます。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;pip install flake8
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;次にautopep8をインストールします。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;pip install autopep8
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;とても簡単ですね。&lt;/p&gt;
&lt;h2 id=&#34;使い方&#34;&gt;使い方&lt;/h2&gt;
&lt;h3 id=&#34;flake8&#34;&gt;flake8&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;flake8 &amp;lt;対象ファイルへのパス&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;このコマンドで対象ファイルを静的解析することができ、結果をターミナルに表示してくれます。&lt;/p&gt;
&lt;h3 id=&#34;autopep8&#34;&gt;autopep8&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;autopep8 --in-place --aggressive --aggressive &amp;lt;filename&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;https://github.com/hhatto/autopep8&#34;&gt;公式ドキュメント&lt;/a&gt;にはこのように実行することを推奨しています。
&lt;code&gt;--in--place&lt;/code&gt;をつけることでファイルを更新してくれます。これがないとコードを自動的にフォーマットして、更新してくれません。
&lt;code&gt;--aggressive&lt;/code&gt;をつけることでコード整形のレベルを指定でき、２つつけることでレベル2になり修正対象のエラーが増えるそうです。
このコマンドで対象ファイルを静的解析することができ、結果をターミナルに表示してくれます。&lt;/p&gt;
&lt;h2 id=&#34;試してみる&#34;&gt;試してみる&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;test.py&lt;/code&gt;を任意のディレクトリに作成します。
内容はこんな感じにしてみました。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;example&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;num_a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;num_b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;num_c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;num_d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;num_e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;num_f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;num_g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;num_h&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;num_a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;num_b&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;num_c&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;num_d&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;num_e&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;num_f&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;num_g&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;num_h&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;num_a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;num_b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;num_c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;num_d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;num_e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;num_f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;num_g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;num_h&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;example&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;num_a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;     &lt;span class=&#34;n&#34;&gt;num_b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;      &lt;span class=&#34;n&#34;&gt;num_c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;num_d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;num_e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;num_f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;num_g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;num_h&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;適切な改行や空白をいれることができていないし、文字列がとても長くなってしまっています。まずはflake8で静的解析をします。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;test.py:1:18: E231 missing whitespace after &amp;#39;,&amp;#39;
test.py:1:24: E231 missing whitespace after &amp;#39;,&amp;#39;
test.py:1:30: E231 missing whitespace after &amp;#39;,&amp;#39;
test.py:1:36: E231 missing whitespace after &amp;#39;,&amp;#39;
test.py:1:42: E231 missing whitespace after &amp;#39;,&amp;#39;
test.py:1:48: E231 missing whitespace after &amp;#39;,&amp;#39;
test.py:1:54: E231 missing whitespace after &amp;#39;,&amp;#39;
test.py:3:1: E305 expected 2 blank lines after class or function definition, found 0
test.py:3:6: E231 missing whitespace after &amp;#39;,&amp;#39;
test.py:3:12: E231 missing whitespace after &amp;#39;,&amp;#39;
test.py:3:18: E231 missing whitespace after &amp;#39;,&amp;#39;
test.py:3:24: E231 missing whitespace after &amp;#39;,&amp;#39;
test.py:3:30: E231 missing whitespace after &amp;#39;,&amp;#39;
test.py:3:36: E231 missing whitespace after &amp;#39;,&amp;#39;
test.py:3:42: E231 missing whitespace after &amp;#39;,&amp;#39;
test.py:3:80: E501 line too long (80 &amp;gt; 79 characters)
test.py:4:9: E201 whitespace after &amp;#39;(&amp;#39;
test.py:4:47: E231 missing whitespace after &amp;#39;,&amp;#39;
test.py:4:80: E501 line too long (81 &amp;gt; 79 characters)
test.py:4:80: E202 whitespace before &amp;#39;)&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;コードが汚いと怒られていますね。この汚いコードを綺麗にするために、autopep8を実行します。
その後、ソースコードを見ると&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
