ツールの概要と開発手順と基本的なCSVアップロードとデータ管理のツール

提案するツールの概要と開発手順を示します。


## ツール概要


### 必須機能

1. **データアップロード機能**:

    - CSVデータのアップロード

    - 店舗名の選択

    - 重複データの検出と間引き


2. **データ参照・編集機能**:

    - 全データのテーブルビュー表示

    - 並び替え、フィルタリング、検索機能

    - データの編集・削除


3. **各種設定機能**:

    - 店舗名の管理(追加・編集・削除)

    - 項目の追加


4. **バックアップ機能**:

    - 定期的なデータバックアップ


## 開発手順


1. **データベース設計**:

    - データベーススキーマの設計(店舗、広告データテーブルなど)

    - 必要な列の選定と不要な列の排除


2. **インターフェース設計**:

    - ユーザーがCSVファイルをアップロードし、データを参照・編集できるインターフェースの設計

    - 店舗名の管理インターフェース


3. **機能開発**:

    - CSVファイルアップロード機能

    - データ参照・編集機能

    - 並び替え、フィルタリング、検索機能

    - 重複データ検出・間引き機能

    - バックアップ機能


4. **テストとデバッグ**:

    - 各機能の単体テスト

    - 結合テスト

    - パフォーマンステスト


5. **デプロイとメンテナンス**:

    - サーバーへのデプロイ

    - 定期的なメンテナンスとアップデート


### 使用技術

- **バックエンド**: Python(DjangoまたはFlask)、データベース(PostgreSQLなど)

- **フロントエンド**: HTML、CSS、JavaScript(Reactなど)

- **デプロイ**: Docker、AWSまたはGCP


## 次のステップ


1. CSVファイルのサンプルを提供していただく

2. 使用技術の決定とプロジェクトの設計

3. 開発開始


まずは基本的な機能を実装するためのプロジェクトの骨組みを提供します。今回はPythonのFlaskフレームワークとSQLiteデータベースを使用します。プロジェクトは以下のように構成されます。


### ディレクトリ構造

```

my_ad_tool/

├── app/

│ ├── __init__.py

│ ├── models.py

│ ├── routes.py

│ ├── templates/

│ │ ├── upload.html

│ │ ├── view.html

│ │ └── settings.html

├── migrations/

├── instance/

│ └── ad_data.db

├── config.py

├── run.py

```


### 1. `__init__.py`

```python

from flask import Flask

from flask_sqlalchemy import SQLAlchemy


db = SQLAlchemy()


def create_app():

    app = Flask(__name__)

    app.config.from_object('config.Config')


    db.init_app(app)


    with app.app_context():

        from . import routes

        db.create_all()


    return app

```


### 2. `models.py`

```python

from . import db


class Store(db.Model):

    id = db.Column(db.Integer, primary_key=True)

    name = db.Column(db.String(128), unique=True, nullable=False)

    ads = db.relationship('Ad', backref='store', lazy=True)


class Ad(db.Model):

    id = db.Column(db.Integer, primary_key=True)

    store_id = db.Column(db.Integer, db.ForeignKey('store.id'), nullable=False)

    campaign_name = db.Column(db.String(256), nullable=False)

    clicks = db.Column(db.Integer, nullable=False)

    impressions = db.Column(db.Integer, nullable=False)

    cost = db.Column(db.Float, nullable=False)

```


### 3. `routes.py`

```python

from flask import Flask, request, render_template, redirect, url_for

import csv

from .models import db, Store, Ad


app = Flask(__name__)


@app.route('/')

def index():

    return render_template('index.html')


@app.route('/upload', methods=['GET', 'POST'])

def upload():

    if request.method == 'POST':

        store_id = request.form['store']

        file = request.files['file']

        if file:

            csv_file = csv.reader(file)

            for row in csv_file:

                ad = Ad(

                    store_id=store_id,

                    campaign_name=row[0],

                    clicks=row[1],

                    impressions=row[2],

                    cost=row[3]

                )

                db.session.add(ad)

            db.session.commit()

            return redirect(url_for('view_data'))

    stores = Store.query.all()

    return render_template('upload.html', stores=stores)


@app.route('/view')

def view_data():

    ads = Ad.query.all()

    return render_template('view.html', ads=ads)


@app.route('/settings', methods=['GET', 'POST'])

def settings():

    if request.method == 'POST':

        store_name = request.form['store_name']

        store = Store(name=store_name)

        db.session.add(store)

        db.session.commit()

        return redirect(url_for('settings'))

    stores = Store.query.all()

    return render_template('settings.html', stores=stores)

```


### 4. `templates/upload.html`

```html

<!DOCTYPE html>

<html lang="ja">

<head>

    <meta charset="UTF-8">

    <title>データアップロード</title>

</head>

<body>

ここから先は

2,212字

¥ 3,500

この記事が気に入ったらサポートをしてみませんか?