要件
開発・バグ統計分析プラットフォームの構築 技術スタック:Python データベース:MySQL フロントエンドグラフ:Matplotlib ロジック実装:Jiraデータベースから開発者によるバグデータをSQLで取得し、グラフで表示する 開発環境:Windows 10ローカル環境 ブラウザ上で動作し、グラフを表示できる実際のコードが必要。
Flaskのインストール方法
- Pythonがインストールされていることを確認してください。FlaskはPythonベースのWebフレームワークであり、使用前にPythonをインストールする必要があります。Python公式サイト(https://www.python.org/downloads/)からオペレーティングシステムに適したPythonバージョンをダウンロードしてインストールできます。
- コマンドラインインターフェースを開きます(WindowsのコマンドプロンプトやmacOS/Linuxのターミナルなど)。
- コマンドラインで以下のコマンドを入力してFlaskをインストールします:
- Python 2とPython 3の両方がシステムにインストールされている場合は、pipの代わりにpip3を使用してください:
- 環境変数を設定するには、まで移動します。
1 pip install flask
2 OR
3 pip3 install flask
これにより、pipパッケージマネージャーがFlaskとその依存関係をダウンロードしてインストールします。
- インストール後は、Flaskアプリケーションを作成して実行できます。
Flaskが正しくインストールされたか確認するために、簡単なFlaskアプリケーションを作成できます。コマンドラインで、app.pyという名前のPythonファイルを作成し、以下のコードをapp.pyファイルにコピーしてください:
1 from flask import Flask
2
3 app = Flask(__name__)
4
5 @app.route('/')
6 def hello():
7 return 'Hello, Flask!'
8
9 if __name__ == '__main__':
10 app.run()
ファイルを保存して閉じます。その後、コマンドラインでapp.pyファイルがあるディレクトリに移動し、以下のコマンドを実行してFlaskアプリケーションを起動します:
または、Python 2とPython 3が共にインストールされている場合、以下のコマンドを使用します:
1 python app.py
2 OR
3 python3 app.py
以下のような出力が表示されるはずです:
1 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
これは、Flaskアプリケーションがローカルホストのポート5000で実行されていることを示しています。ブラウザでhttp://127.0.0.1:5000/またはhttp://localhost:5000/にアクセスすると、「Hello, Flask!」が表示されるページが表示されます。
これでFlaskのインストールと実行が完了しました!これ以降はFlaskを使ってより複雑なWebアプリケーションを構築できます。
検証:
完全なバグ統計分析プラットフォームのコード例:Python、MySQL、Flaskフレームワークを使用して、ブラウザ上でグラフを表示する:
1、必要なライブラリのインストール:
- コマンドラインで以下のコマンドを実行して必要なPythonライブラリをインストールします:【Flaskは既にインストール済みのため無視可】
1 pip3 install mysql-connector-python flask matplotlib
2、app.pyファイルを作成し、以下のコードを追加します:
1 # -*- coding: utf-8 -*-
2 import mysql.connector
3 from flask import Flask, render_template
4 import matplotlib.pyplot as plt
5 from io import BytesIO
6 import base64
7
8 plt.rcParams['font.family'] = 'sans-serif'
9 plt.rcParams['font.sans-serif'] = ['SimSun', 'Arial', 'Microsoft YaHei', 'Heiti TC', 'STXihei', 'STHeiti']
10
11
12 app = Flask(__name__)
13
14 @app.route('/')
15 def index():
16 # MySQLデータベースへの接続
17 db = mysql.connector.connect(
18 host="localhost",
19 user="root",
20 password="123456",
21 database="jiradb"
22 )
23
24 # カーソルオブジェクトの作成
25 cursor = db.cursor()
26
27 # # ローカルファイルからクエリ文を読み込む
28 # with open('sql/1.sql', 'r') as file:
29 # query = file.read()
30
31 # SQLクエリの実行
32 query = "SELECT cwd_user.`first_name` 開発者, COUNT(cwd_user.`first_name`) バグ数 FROM jiraissue, `app_user`, `cwd_user`WHERE app_user.`lower_user_name` = cwd_user.`user_name` AND app_user.`user_key` = jiraissue.`ASSIGNEE` AND jiraissue.project IN ('10101','10102') AND jiraissue.`issuetype` = '10003' AND jiraissue.`issuestatus` IN('10111', '6', '3') AND jiraissue.CREATED >= '2022-10-1 00:00:00' AND jiraissue.CREATED < '2022-10-31 00:00:00' AND cwd_user.`first_name` NOT IN ('劉曉敏','臧亞亞','曹燕楠','李怡婷','李東坡','鄧飛','黃曉峰','江欣凝','') GROUP BY cwd_user.`first_name` ORDER BY COUNT(cwd_user.`first_name`) DESC;"
33 cursor.execute(query)
34
35 # クエリ結果の取得
36 results = cursor.fetchall()
37
38 # 開発者名とバグ数の抽出
39 developers = [result[0] for result in results]
40 bug_counts = [result[1] for result in results]
41
42 # 棒グラフの生成
43 plt.bar(developers, bug_counts)
44 plt.xlabel("開発者")
45 plt.ylabel("バグ数")
46 plt.title("開発者ごとのバグ数")
47
48 # グラフをバイトストリームとして保存
49 image_stream = BytesIO()
50 plt.savefig(image_stream, format='png')
51 image_stream.seek(0)
52 encoded_image = base64.b64encode(image_stream.getvalue()).decode('utf-8')
53
54 # データベース接続のクローズ
55 cursor.close()
56 db.close()
57
58 # テンプレートをレンダリングし、グラフデータを渡す
59 return render_template('index.html', chart_image=encoded_image)
60
61 if __name__ == '__main__':
62 app.run()
補足:app.pyファイルと同じディレクトリにquery.sqlファイルを配置し、SQLクエリ文を適切に編集してください。
3、index.htmlテンプレートファイルを作成し、以下のコードを追加します:
1
2 <html>
3 <head>
4 <title>バグ統計グラフ</title>
5 </head>
6 <body>
7 <h1>バグ統計グラフ</h1>
8 
9 </body>
10 </html>
4、同じ階層にtemplatesフォルダを作成し、index.htmlテンプレートファイルをそこに配置します。
5、アプリケーションの実行:
- コマンドラインで、app.pyファイルを格納しているディレクトリに移動します。
- 以下のコマンドを実行してFlaskアプリケーションを起動します:
python app.py
- http://localhost:5000/にアクセスすると、バグ統計グラフが表示されるウェブページがブラウザで表示されます。
これにより、ブラウザ上でバグ統計グラフを表示できるようになりました。MySQLとFlaskが正しくインストールされており、データベース接続情報が適切に設定されていることを確認してください。
この例が役立つことを願っています!さらに質問があれば、いつでもお気軽にどうぞ。
問題発生時:
1、問題: VSCodeでmysql-connectorのコンパイルに失敗し、エラーが出る。
解決:Ctrl+Shift+Pで「Python: Select Interpreter」を入力し、ローカルのPythonバージョンと環境を選択し、VSCodeの設定が完了するまで待ちます。
2、問題: 「SyntaxError: Non-ASCII character '\xe8' in file d:/004 GPT code/app.py on line 11, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details」というエラーが出る。
解決:app.pyファイルの先頭に、ファイルのエンコーディングを宣言するコメント行を追加してください。たとえば、UTF-8エンコーディングを使用する場合、以下のコメント行を追加します:<# -- coding: utf-8 -->
3、問題: 【File "C:\Python27\lib\site-packages\mysql\connector\__init__.py", line 32, in
from .connection_cext import CMySQLConnection File "C:\Python27\lib\site-packages\mysql\connector\connection_cext.py", line 86 f"MySQL Connector/Python C Extension not available ({exc})" ^ SyntaxError: invalid syntax 】
解決:Python 2.7を使用しているようで、mysql.connectorライブラリの一部がそのバージョンに対応していない可能性があります。mysql.connectorライブラリは通常、Python 3.xで使用されることを想定しています。
4、問題: グラフが日本語表示されない(文字化け)
解決:
1)プロジェクトディレクトリ(app.pyファイルと同じ場所)にmatplotlibrcという名前のtxtファイルを作成し、保存します。
2)matplotlibrcファイルに以下の内容を追加します:
font.family: sans-serif
font.sans-serif: SimSun, Arial, Microsoft YaHei, Heiti TC, STXihei, STHeiti
上記設定では、複数の日本語フォントを順番に試して利用可能なものを選択します。
3)matplotlibrcファイルを保存します。
4)app.pyの先頭に以下のコードを追加し、matplotlibrcのパスをデフォルト設定として設定します:
1 import matplotlib.pyplot as plt
2 plt.rcParams['font.family'] = 'sans-serif'
3 plt.rcParams['font.sans-serif'] = ['SimSun', 'Arial', 'Microsoft YaHei', 'Heiti TC', 'STXihei', 'STHeiti']
これにより、Matplotlibが描画時に指定された日本語フォントを使用することが保証されます。