【GitHub】GitHubでリントを導入してコード品質を向上させる方法

【GitHub】GitHubでリントを導入してコード品質を向上させる方法

更新日:2024/10/15

この記事をシェア

  • X
  • Facebook
  • LINE
  • COPY LINK
クリップボードにコピーしました

はじめに

今回はGitHub Actionsでリント(Lint)ツールを導入する方法を紹介します。リントツールを導入することでコードのスタイルや構文エラーを自動でチェックすることができ、コードライティングを効率的にすることが可能になります

別の記事では、GitHub Projectsを使ったタスク管理方法についても紹介しています。
興味のある方は、下記を参考にしてください。

GitHub Actionsとリント(Lint)についての大前提

Github Actionsとは

「GitHub Actions」とは、GitHubが提供する自動化ツールです。

このツールを使用することで、特定のイベント(例えば、コードのプッシュやPRの作成)が発生した際に自動的に特定のタスクやワークフローを実行することができます

これにより作成者は自動ビルド、テストの実行、デプロイの自動化などを容易に設定できます。CI/CDと言われているものですね。

リント(Lint)とは

リントとは、ソフトウェア開発においてコードの品質を向上させるためのツールやプロセスの一部を指します

一般的にはLintツールは開発言語ごとに特化しており、例えばJavaScriptにはESLint、Pythonにはpylintなどがあります。これらのツールは、コーディングスタンダードを守るためや、バグの発見や修正を迅速化させます。

今回は、SQLのLintツールである「SQLFluff」を使います。

リント導入のメリット

リントを導入するメリットはいくつかありますが、主なものは下記の三つです。

三つのメリット

  1. 自動化された品質管理
  2. 一貫したコーディングスタイルの遵守
  3. フィードバックの迅速化

一つずつ詳しく見ていきましょう。

1. 自動化された品質管理

リントツールを設定しておけば、コードのスタイルや潜在的なバグを自動的にチェックし、問題があれば通知を受け取ることができます。
これにより問題の即時対応が可能になり、安定した品質維持が可能です。

2. 一貫したコーディングスタイルの遵守

チーム全体で共通のコーディングスタイルや規約がある場合、Github Actionsを使ってリントを設定することで、全てのコミットやPRがそれに従うように監視できます。
これにより、スタイルの一貫性が保たれ、読みやすくメンテナンスしやすいコードを維持することができます。

3. フィードバックの迅速化

各イベントに応じて自動的に実行されるため、PRやコミットに対してすぐにリント結果がフィードバックされます。
作成者はすぐに問題点を把握し、修正を行うことができます。ジュニアメンバーのコードチェックもちょっと簡単になるかもしれません。

GitHub ActionsでLintを使用してみる

5つのステップに分けて解説します。

1. GitHubCLIの準備

Github Actions自体はGUIでも操作可能ですが、利便性を考えてCLIを入れておくことをおすすめします。

CLIのインストール(Windowsの場合)

$ winget install --id GitHub.cli

ちゃんとインストールされたかは、$ gh --versionで確認できます。

CLIのセットアップ

$ gh auth login

選択肢を選んでいくとブラウザが起動してセットアップができます。

✓ Authentication complete.
- gh config set -h github.com git_protocol https
✓ Configured git protocol
✓ Logged in as mocchann
! You were already logged in to this account

リポジトリの作成

以下コマンドで作成できます。

$ gh repo create sample --private

質問に答えていくとGitHubにリポジトリを作成することができます。

リポジトリのクローン

リポジトリのクローンをローカルに作成しておきます。

$ gh repo clone <アカウント名>/sample

ブランチの用意

ブランチを切って移動します。

$ git branch sub
$ git checkout sub

2. ワークフローファイルの作成

GitHubActionsを使うには、yml形式で書かれたワークフロー(以下WF)ファイルを「.github/workflows」配下に置くことで実行できます。

WFファイルの作成

$ mkdir .github/workflow
$ touch .github/workflow/sample.yml

WFファイルの中身

今回は、PR作成時に任意のルールに則ってリントを実行してみます。

#name:WFの名称を設定
name: sample lint 

#on:実行タイミングを指定(今回はPR作成時)それ以外にもpush時やIssue作成時など色々あります
on: [pull_request]

#jobs:WFの実行単位、複数並べることも可能
jobs:
  lint_project: #ジョブID
    runs-on: ubuntu-latest #ubuntuの最新版を用いる設定
	  
	  #steps:WFにおける処理の最小単位
    steps:
	    #uses:モジュールを呼び出します、with句の併用でパラメータを渡すことが可能
	    - uses: "actions/checkout@v4" #コマンドを実行するうえで必要なもの
      - uses: "actions/setup-python@v5" #SQLFluffではPython3が必要なので指定したpythonをインストールするもの
        with:
          python-version: "3.10" #pythonのバージョンを指定
            
      - name: Install SQLFluff 
        run: "python -m pip install sqlfluff" #SQLFluffをインストールする記述
        
      - name: Get changed files
        id: changed-files
        uses: tj-actions/changed-files@v35 #変更のあったファイル一覧を取得するもの  
      
      - name: Lint changed files
        run: |
          for file in ${{ steps.changed-files.outputs.all_changed_files }}; do #上記のファイルにリントを実行
            sqlfluff lint "$file" --dialect bigquery --rules L011,L012,L014,L019 #SQLの方言と適応ルールを指定
          done
  • sqlfluff lint "$file"対象のファイルにリントを実行します。
  • --dialect bigquery使用したいSQLの方言を指定します。
    指定できる方言一覧はsqlfluff dialects で確認することができます。
  • --rules L001,L002,L004,L006,L010,L019 :SQLFLUFFにあるルールのうち、任意のルールを適応します。

今回は以下のルールを適応しています。

  • L011:テーブルの別名にASを用いる
  • L012:カラムの別名にASを用いる
  • L014:カラム名は大文字か小文字に統一する
  • L019:カンマは行頭

3. 対象となるSQLファイルを用意

わざと上記のルールに引っかかるように書いています。

$ touch .github/sql/test.sql
select
columns1 a
,columns2 b
,COLUMNS3 c
from sample_table t1

4. 変更ファイルのプッシュ

$ git add -u
$ git commit -m "Add sample.yml"
$ git push sample

5. リントの実行

PRを作成してリントが実行されるか確認します。

$ gh pr create --base main --title "Sub" --body ""

リポジトリの画面から下記を順にクリックします。

①「Actions」タブを選択
➁「sample lint」を選択
③WFの一覧からジョブ履歴

内容を確認するとエラーが出ていることが確認できます。

Lは、クエリの行数を示しています。

Pは、何文字目かを示しています。

すなわち14行目のエラーは、「クエリ2行目の10文字目がAL02のルールに違反している」ということを表しています。

少しわかりづらいですが、AL02というのはL012と同じものを指しているため、columns1 a の部分でAS を使っていないミスがしっかりと検出されたことが分かります。

それ以外の部分は割愛しますが、どれも指定したルール違反をしっかりと教えてくれています。

ちなみにクエリファイルを以下のように修正して、再度PRを作成するとエラーは検出されませんでした。

SELECT
	columns1 AS a,
	columns2 AS b,
	columns3 AS c
FROM sample_table AS t1

その他のコマンドについて

エラーを知らせるのではなく、勝手に修正してほしい場合はfixを使います。

sqlfluff fix "$file" --dialect bigquery --rules ~~~

またSQLFluffで設定できるルールは60個以上あるため、実運用する場合はsqlfluffファイルを用意して次のように該当させたいルールをまとめて記載する方法がおすすめです。

[sqlfluff]
rules = all
dialect = bigquery
templater = jinja
sql_file_exts = .sql,.sql.j2,.dml,.ddl
max_line_length = 100
exclude_rules = AL07, ST06, ST05

[sqlfluff:indentation]
indented_joins = True
indented_using_on = True
tab_space_size = 2
indent_unit = space

[sqlfluff:rules]
allow_scalar = True
single_table_references = consistent

[sqlfluff:layout:type:comma]
line_position = leading

[sqlfluff:rules:capitalisation.keywords]
capitalisation_policy = upper

[sqlfluff:rules:aliasing.table]
aliasing = explicit

[sqlfluff:rules:capitalisation.identifiers]
extended_capitalisation_policy = lower

[sqlfluff:rules:ambiguous.column_references]
group_by_and_order_by_style = explicit

sqlfluffファイルを参照してリントを実行

sqlfluff lint "$file" --dialect bigquery --config .sqlfluff

おわりに

GitHubでリントを使うと、コードの一貫性を保つ、バグを防止する、コード品質を向上させるなどの利点があります。自動化によってレビューの手間も減らせるので、チーム全体の開発効率が向上するはずです。

気になった方はぜひ参考にしてみてください。

データ活用でお困りの方へ

私たちDX-Accelerator事業では、データ活用についての様々なスキルを持った人材が常駐でデータ活用支援を行うサービスを提供しています。
当事業はローンチから約3年(24年9月時点)ですが、これまでに様々な業界・業種のお客さまのお手伝いをさせていただいております。

少しでも興味を持ってくださったり、すでにご相談をしたいことがある方はお気軽にご相談ください。現在あなたの組織のフェーズがどこにあるかは関係ありません。まずはお話をしましょう。

もう少しサービスについて知りたい方はサービス紹介資料もご用意しています。

お役立ち資料をご活用ください!

データプロフェッショナルであるDXAメンバーが、業務経験をもとにお役立ち資料を作成しています!
おすすめ3選はこちら!

1.GA4 サンプルレポート|Looker Studio 無料プレゼント
GA4の基本KPIが網羅されたテンプレートです!データを差し替えればすぐにご活用いただけます。

2.サンプル経営ダッシュボード | Tableau無料プレゼント
実際にご提供しているダッシュボードをテンプレート化したものです!是非構成やグラフ選択の参考にしてください。

3.データ活用の部長さん必見!データ活用 内製化の正しい進め方
これまでご支援してきた実績をもとに、データ活用の内製化の進め方を解説しています!組織のDXを担われている方、必読です!

以上、おすすめ3選でした!
すべて無料でダウンロードできますので、お気軽にご利用ください。

この記事をシェア

  • X
  • Facebook
  • LINE
  • COPY LINK
クリップボードにコピーしました

関連記事

DX-Acceleratorについて
より詳しく知りたい方!

DX-Accelerator データ人材常駐支援サービス

即戦力の
アナリティクスエンジニアが
常駐支援!
まずはお気軽にご相談ください。

DX-Acceleratorについて
より詳しく知りたい方!