【Pythonパッケージ開発🛠】オープンデータ利活用を促進するCKAN拡張機能をPyPIへリリースした❗️

# CKAN拡張機能　ckanext-feedback

CKAN拡張機能であるckanext-feedbackのVer.1.0.0をPyPIへリリースしました！
今回、OSSとして開発を行ったこちらの拡張機能について紹介いたします。

PyPIのページは[こちら](https://pypi.org/project/ckanext-feedback/)！
GitHubのリポジトリは[こちら](https://github.com/c-3lab/ckanext-feedback)！

## オープンデータ利活用の現状

有名な事例としては[東京都 新型コロナウイルス感染症対策サイト](https://github.com/tokyo-metropolitan-gov/covid19)があります。
この事例はオープンデータには市民の抱える課題を解決できる力があることを証明しました。
しかし、オープンデータ利活用は思うように進んでいないというのが現状かと思います。🤔

その理由として私たちは以下のように仮説を立てました。

### 悪魔のサイクルが回ってしまっている！👿

![devil cycle.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730983/276e92ef-b2a2-b441-7632-74eca3008b9c.jpeg)

1. オープンデータの重要性を理解できない(提供者)
2. オープンデータの提供・整備が進まない(提供者)
3. 素早く信頼できる形でオープンデータを取得できない(利用者)
4. オープンデータを活用した開発に苦労する(利用者)
5. オープンデータ活用事例が増えない(利用者)
6. 1に戻る

#### 現状を打破するためにCKAN拡張機能としてフィードバック機能を開発しました❗️

### どんな種類のフィードバックが存在するか🤔

今回開発したフィードバック機能では以下のフィードバックに対応する必要があると考えました！

* 集計
    * データのダウンロード数
    * データの利活用数
    * データによる課題解決数

* レビュー
    * データに対するレビュー

* 活用方法
    * データの利活用方法

* 要望・依頼・報告
    * データの新規公開要望
    * データの修正要望
    * データの更新要望
    * データのリンク切れ報告

* 問い合わせ
    * データの利用ルールについて質問
    * データ項目について質問

今回の開発では以下のフィードバックは対応しませんでした

* 市民の抱える課題や問題の収集
* データを活用したシステムに対する意見

これらのフィードバックを得るサービスは既に存在すると考えたためです
そのサービスについては以下にリンクを貼っておきます
既に利用されている自治体もあるようです❗️

https://decidim.org/ja/

## リリースしたCKAN拡張機能

### 主な機能は４つ！

* 👀 集計情報の可視化機能(ダウンロード数、利活用数、課題解決数)
* 💬 データおよび利活用方法に対するコメント・評価機能
* 🖼 データを利活用したアプリやシステムの紹介機能
* 🏆 データを利活用したアプリやシステムの課題解決認定機能

#### ダウンロード数、利活用数、課題解決数を可視化👀

![static data.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730983/e0412009-200c-6876-f375-9adff359716c.jpeg)

#### データに対するコメント・評価機能💬

![register_resource_comment.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730983/85930ff9-4037-14d4-6260-2b4bd3ec864b.jpeg)

#### 登録された利活用方法に対するコメント機能💬

![utilization_comment_image.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730983/9c9032ab-e77a-4e0b-6afd-0d52ac8aae87.jpeg)

#### データを利活用したアプリやシステムの紹介機能🖼

![register_utilization_image.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730983/1c3fd18a-ed5c-0ceb-f0e4-88392ff20e0f.jpeg)

#### データを利活用したアプリやシステムの課題解決認定機能🏆

![admit_solution.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730983/9c17fb2e-476b-b38e-4539-62464e86f063.jpeg)

## フィードバック機能で天使のサイクルへ！👼

フィードバック機能を導入することで、
以下のような天使のサイクルへ転換させることが出来ると考えています！

![engiel cycle.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730983/19d28553-32a9-2da4-626f-4d3174e018ff.jpeg)

1. オープンデータの重要性を理解できない(提供者)
    * 集計情報を可視化することで活用状況を把握することが出来る
    * 実際の利活用方法をデータに紐づけて登録することが出来る
        * オープンデータ公開の重要性を理解できる

2. オープンデータの提供・整備が進まない(提供者)
    * 利用者からのコメントで要望を知ることが出来る
    * 集計情報からデータのニーズを知ることが出来る
        * オープンデータの公開・整備計画を立てる指針になる

3. 素早く信頼できる形でオープンデータを取得できない(利用者)
4. オープンデータを活用した開発に苦労する(利用者)
    * データに対してコメントを送信することが出来る
        * データに関わる要望/質問をコメントで簡単に行える

1~4の工程へのアプローチを行うことでオープンデータの利活用を促進し、
5の利活用事例増加を強力に後押しします。

## クイックスタート

以下の手順により、
フィードバック機能が持つ全ての機能を利用することが出来るようになります！

1. CKANの仮想環境をアクティブにする(CKANコンテナ等のCKAN環境内で実行してください)

    ```bash
    . /usr/lib/ckan/venv/bin/activate
    ```

2. 仮想環境にckanext-feedbackをインストールする

    ```bash
    pip install ckanext-feedback
    ```

3. 以下のコマンドで設定を行うファイルを開く

    ```bash
    vim /etc/ckan/production.ini
    ```

4. 以下の行に`feedback`を追加し、保存

    ```bash
    ckan.plugins = stats ・・・ recline_view feedback
    ```

5. フィードバック機能に必要なテーブルを作成する

    ```bash
    ckan --config=/etc/ckan/production.ini feedback init
    ```

## フィードバック機能をカスタマイズする

#### この拡張機能は３つのモジュールから成り立っています。

* データの利活用方法に関するモジュール(utilization)
* データリソースに関するモジュール(resource)
* ダウンロードに関するモジュール(download)

それぞれのモジュールの**オンオフを切り替えることが可能**です。
※ デフォルトでは全ての機能がオンになっています。

## データの利活用方法に関するモジュール(utilization)

#### 以下の機能をもつモジュールです。

* 📝データに紐づけた利活用方法の登録機能

* 🏆課題を解決した利活用方法の認定
    * 登録されている利活用方法で市民から上がっていた課題を解決したものを認定できます❗️

* 💬利活用方法へのコメント機能
    * 登録された利活用方法をさらに発展させるための要望
    * 使っている上での疑問点の質問
    * 開発してくれたことへの感謝
    * 開発者による利活用方法の宣伝

* 👀利活用数、課題解決数を可視化
    * オープンデータを使った利活用方法の集計情報
    * 登録されている利活用方法で解決することが出来た課題の数

#### 導入の利点

* データの利活用状況を知ることができる
  * データの公開や整備の計画を立てる際の指針になる
  * オープンデータの重要性をより認識することができる

* データを使った利活用方法の利用と改善が進む

## データリソースに関するモジュール(resource)

#### 以下の機能を持つモジュールです。

* ⭐️データの評価機能
    * データに対して星5段階で評価をすることができます

* 💬データへのコメント機能
    * 1つのリソースに対するコメント回数を各ユーザー1回に制限する機能
    * データに対する要望
    * データの中身や使い方に関する質問
    * データを公開・整備してくれたことへの感謝
    * データを公開・整備したことの宣伝(告知)

* 👀評価の平均値を可視化
    * 評価機能で集まった評価の平均を表示

#### 導入の利点

* データの利活用状況を知ることができる
  * データの公開や整備の計画を立てる際の指針になる
  * オープンデータの重要性をより認識することができる

* データへの問い合わせが簡単にできる
  * データへの理解が進み、利活用が進む

## ダウンロードに関するモジュール(download)

#### 以下の機能を持つモジュールです。

* 👀データごとのダウンロード数を可視化
    * データがダウンロードされた数を集計し、データごとに可視化

#### 導入の利点

* データの利活用状況を知ることができる
  * データの公開や整備の計画を立てる際の指針になる
  * オープンデータの重要性をより認識することができる

## 特定のモジュールの持つ機能をオフにするには

1. インストール(まだの方のみ)
    * [クイックスタート](../../README.md) **1~4番**の手順を参照してください

2. **オフにするモジュール**について、`ckan.plugins`の下に以下の記述を追記する
    * utilizationモジュールをオフにする場合

        ```bash
        ckan.feedback.utilizations.enable = False
        ```

    * resourceモジュールをオフにする場合

        ```bash
        ckan.feedback.resources.enable = False
        ```

        * 1つのリソースに対するコメント回数を各ユーザー1回に制限する場合(ユーザーのCookieを利用)
            * デフォルトの設定(False)では複数回のコメントが可能です

            ```bash
            ckan.feedback.resources.comment.repeated_post_limit.enable = True
            ```

    * downloadモジュールをオフにする場合

        ```bash
        ckan.feedback.downloads.enable = False
        ```

3. テーブル作成(まだの方のみ)
    * **オンにするモジュール**のテーブル作成を行なってください

        ```bash
        # utilization(利活用方法)機能に関わるテーブル作成
        ckan --config=/etc/ckan/production.ini feedback init -m utilization

        # resource(データリソース)機能に関わるテーブル作成
        ckan --config=/etc/ckan/production.ini feedback init -m resource

        # download(ダウンロード)機能に関わるテーブル作成
        ckan --config=/etc/ckan/production.ini feedback init -m download
        ```

## まとめ

オープンデータ利活用を促進するためのCKAN拡張機能であるckanext-feedbackのver.1.0.0をPyPIにリリースしました❗️
しかし、まだこれで完璧に完成というわけではなく、
機能追加や使いやすさの改善などを行っていき、アップデートしていきたいと考えています。
もし、課題感に共感して開発に参加してみたいという方は大歓迎です❗️

https://github.com/c-3lab/ckanext-feedback