Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS CodeGuruでPythonのコードを自動レビューしてもらおう

AWS CodeGuruでPythonのコードを自動レビューしてもらおう

おもにクラウドの話してます - 広島 #2 での発表資料です
https://omoni-cloud.connpass.com/event/320415/

Satoshi Kaneyasu

June 29, 2024
Tweet

More Decks by Satoshi Kaneyasu

Other Decks in Programming

Transcript

  1. 2 ⾃⼰紹介 ⽒名︓兼安 聡 所属︓株式会社サーバーワークス 在住︓広島(フルリモート) 担当︓DevOps、PM、SM 2024 Japan AWS

    Top Engineers (Database) 2024 Japan AWS All Certifications Engineers 認定スクラムマスター X︓@satoshi256kbyte
  2. 4 Amazon CodeGuruReviewerの料⾦ リポジトリサイズ (AWS アカウントごと) ⽉額料⾦ オンボーディングリポジトリの最初の 10 万⾏のコード

    10.00$ オンボーディングされたリポジトリの追加の 10 万⾏のコード (最近接の 10 万に切り上げられます) 30.00$ ※東京リージョンの価格です。 参考
  3. 9 レビュー結果① To check if a container or sequence (string,

    list, tuple) is empty, use if not val. Do not compare its length using if len(val) == 0 コンテナやシーケンス(⽂字列、リスト、タプル)が空かどうかをチェックするには、if not val を使 ⽤します。if len(val) == 0 を使って⻑さを⽐較しないでください。 if len(val) > 0: 空判定に指摘が⼊りました。 ⾔われてみれば妥当ですが、細かい指摘ですね。 原⽂ ⽇本語訳
  4. 10 レビュー結果② To return a single item from a list,

    we recommend using the list.index() method or indexing [] operator instead of a for loop. Iteration when only one item is needed from list is inefficient and can make your code difficult リストから単⼀の項⽬を返すには、forループの代わりにlist.index()メソッドまたはindexing []演算⼦を使⽤ することをお勧めします。 リストから必要な項⽬が 1 つだけの場合に繰り返し処理を⾏うと、⾮効率的でコードが読みにくくなります。 data_map: dict[str, list[str]] = {address: [key for key, value in host_mapping.items() if value == address] for address in address_list} 原⽂ ⽇本語訳 dictの再構成に指摘が⼊りました。 こちら確かにindexの⽅が効率が良いようです。 このコードは確かに読みにくく、良い指摘をもらえたと感じます。
  5. 11 レビュー結果③ This function calls 16 other functions. By comparison,

    98% of the functions in the CodeGuru reference dataset use fewer. This indicates the function is highly coupled with other functions. A function that is highly coupled with other functions is difficult to understand and its behavior might change unexpectedly when one of its referenced functions is updated. High coupling could also increase the integration test complexity, maintenance cost and technical debt. We recommend that you simplify this function or break it into multiple functions. For example, consider extracting the code blocks on lines 103-122, lines 125-131, lines 135-141, lines 146-155, lines 160-193 into separate functions. The high number of functions called inside a function indicates that it is highly coupled with other functions. A function that is highly coupled with other functions is difficult to understand and its behavior might change unexpectedly when one of its called functions is updated. High coupling can also increase the integration test complexity, maintenance cost and technical debt. この関数は16の他の関数を呼び出している。これに対して、CodeGuruのリファレンス・データセットにある関数の98%は、 より少ない数しか使っていません。これは、この関数が他の関数と⾼度に結合していることを⽰しています。他の関数と⾼ 度に結合している関数は、理解するのが難しく、参照されている関数の1つが更新されると、その動作が予期せず変更される 可能性があります。また、⾼度な結合は、統合テストの複雑さ、保守コスト、技術的負債を増加させる可能性があります。 この関数を単純化するか、複数の関数に分割することを推奨します。例えば、103⾏⽬から122⾏⽬、125⾏⽬から131⾏⽬、 135⾏⽬から141⾏⽬、146⾏⽬から155⾏⽬、160⾏⽬から193⾏⽬のコードブロックを別の関数に分割することを検討し てください。 関数の内部で呼び出される関数の数が多いということは、その関数が他の関数と⾼度に結合してい ることを⽰しています。 他の関数と⾼度に結合している関数は理解しづらく、呼び出された関数の1つが更新されると、その振る舞いが予期せず変化 する可能性があります。⾼度な結合は、統合テストの複雑さ、保守コスト、技術的負債を増加させる可能性もあります。 原⽂ ⽇本語訳
  6. 15 IaCもレビューしてくれる Ensure that S3 buckets have cross-region replication enabled.

    By enabling cross-region replication for your S3 buckets, you create redundant copies of your data in different AWS regions. This helps improve data durability and availability, as well as provides protection against regional outages. It also allows you to comply with data residency requirements by replicating data to specific regions. S3 buckets have cross-region replication not enabled. Ensure that S3 buckets have cross- region replication enabled. S3バケットでクロスリージョンレプリケーションが有効になっていることを確認する。S3バケットのク ロスリージョンレプリケーションを有効にすることで、異なるAWSリージョンにデータの冗⻑コピーを 作成する。これは、データの耐久性と可⽤性を向上させ、リージョン停⽌に対する保護を提供するのに 役⽴ちます。また、特定のリージョンにデータをレプリケートすることで、データレジデンシー要件に 準拠することもできます。 S3バケットのクロスリージョンレプリケーションが有効になっていない。S3バケットでクロスリージョ ンレプリケーションが有効になっていることを確認してください。 ⽇本語訳 原⽂
  7. 23 今後考えて⾏きたいスタイル 設計 実装 ソース レビュー ⼈⼒レビュー Amazon Q Developer

    ⼈⼒レビュー Amazon CodeGuru GitHub Copilot ここは現場の事情に応じて 選びたい