🛺

LLM生成コードのライセンスをチェックをするコマンドを作成した

に公開

サマリ

LLMにコーディングを任せると、生成したコードが実はソースコードの開示が必要なライセンスに抵触している可能性を考えて、プロジェクト内で自動でライセンスチェックをするコマンドをClaude Codeを使用して作成しました。
個人用の発展途上なコマンドではありますが、今後の改修で実用向けになりそうです。

マシンスペック

MacBook Air M2 arm64

事前の実験

まず初めに、生成AIが作成するコードにライセンスに抵触するものがあるのかを確認するような簡単なプロジェクトを作成しました。
ローカルLLMがpython, golang, typescriptのコードを作成して、それに対してチェックを行うような機構でレポートの出力ができるようなものを考えました。
ローカルLLMにはollamaを使用して、pythonスクリプト経由で任意の数分のファイルを作成してコードを出力するようにしました。
今回は、レポートを出力することに成功して、かなり厳しいチェックをしていたのでチェック項目のチューニングをしました。
例として、LLMが作成するコードにコードブロックの使用や、500文字を超えるものは危険と判断されるものでした。

参考: ollamaのセットアップ

brew install ollama

# Ollamaサーバーを起動
ollama serve

# 別のターミナルで
# 汎用言語モデル(軽量)
ollama pull llama2:7b

# コード生成特化モデル(軽量)
ollama pull codegemma:2b

# その他の選択肢
# ollama pull codellama:7b        # より大きなコード生成モデル
# ollama pull deepseek-coder:6.7b # 高性能コード生成モデル
# ollama pull mistral:7b          # 汎用モデル

コマンドの作成

いくつかの項目を見直していて実験を繰り返していた際に、毎度スクリプトを実行するのが手間だったことからコマンド化しました。
任意のディレクトリ内を再帰的に確認して、ファイル内にライセンスに抵触しているか否かを判断するようにしました。
コマンドは単純に check-licenseで動作は下記のようになります。

実際に使用した結果です。

ライセンスあり

check-license
🔍 ライセンスチェックツール
スキャン中: /Users/xxxxx/yyyyy
お待ちください...


============================================================
ライセンスチェック結果
============================================================
📁 スキャンディレクトリ: /Users/xxxxx/yyyyy
📄 解析ファイル数: 84
⚠️  問題のあるファイル数: 1
🔍 発見された問題数: 1

📊 重要度別問題数:
   重要: 1件

詳細な問題一覧
------------------------------------------------------------

📄 LICENSE
   ● MIT/BSDライセンス全文 (5行目)

推奨対応
------------------------------------------------------------
🚨 重要な問題が発見されました - 至急確認してください!
   • 実際のライセンス違反がないか確認
   • コードの所有権と許可を検証
💡 一般的な推奨事項:
   • ファイルに適切なライセンスヘッダーを追加
   • コードの出典と帰属を文書化
   • SPDXライセンス識別子を使用
   • CI/CDでライセンススキャンツールの使用を検討

ライセンスなし

check-license 
🔍 ライセンスチェックツール
スキャン中: /Users/xxxxx/yyyyy
お待ちください...


============================================================
ライセンスチェック結果
============================================================
📁 スキャンディレクトリ: /Users/xxxxx/yyyyy
📄 解析ファイル数: 122
⚠️  問題のあるファイル数: 0
🔍 発見された問題数: 0

✅ ライセンス問題は検出されませんでした!
コードはライセンス関連の懸念事項がないようです

実行時間

実行時間はそれぞれ下記でした。

# ライセンスあり
check-license  0.11s user 0.02s system 96% cpu 0.127 total
# ライセンスなし
check-license  0.12s user 0.02s system 97% cpu 0.136 total

まとめ

今回は、LLMが作成するコードがライセンスに抵触しているか否かのチェックをするコマンドを作成しました。
もっと強力なコマンドになれば公開して皆さんに使用いただけるようなものにしていきたいです。

Discussion