---
# System prepended metadata

title: 日本版 Decidim 開発メモ

---

日本版 Decidim 開発メモ
===

- [Github Repos](https://github.com/codeforjapan/decidim-cfj/issues/26)


## View の上書き？

ここに、 deface gem を使って view の上書きをする方法が書いてある。使えるかも？
https://docs.decidim.org/en/customize/views/

↑使えました。使う場所にもよりますが、書き換えたいDOMをうまく指定できる場合はそこそこ便利そうです（が、第三者から見て分かりやすいかどうかはちょっと怪しい）

## Decidimの構成について

DecidimはRailsアプリケーションですが、インスタンスごとに異なる要件にも柔軟にカスタマイズして対応できるよう、高度にモジュール化されています。

* 各機能はRails::Engineを使ったコンポーネントとなっており、各インスタンスのアプリケーションではコンポーネントの組み合わせとして実装する
* 各コンポーネントにおけるRails::Engineのapp/ディレクトリ下は、標準のディレクトリの他にcells/、forms/、commands/、services/、queries/、presenters/などがある。これらはいわゆるFat Modelsを防ぐためのもので、適宜使い分けてモデルへの記述を減らすようにしている(validationはモデル内に書く)。
    * なお、cells/はTrailbrazerのCells、formsやcommands等にはRactifyが使われている。

## ユーザー情報の追加について

ユーザー情報について、既存のインスタンスではAuthorization / Verification の一環として生年月日や電話番号(SMS)等の情報を登録しています。これらはDecidim標準のDecidim::Verificationsコンポーネントが使われています。

日本版でユーザー情報を追加するにあたり、このしくみを使えば、将来Decidim自体に変更が入ったとしても継続して運用できる可能性が高そうです。そのため、厳密に言えばverificationではない（単純に値が入っているかしか見ない）ですが、今回はこれを使用しています。

### DecidimのVerification機能について

Verifacitionにはon the flyでverifyするdirect verificationと、ワークフローを使ってverifyするdeferred verificationがある。後者であればRails::Engineとして実装することになるが、前者であればEngineは必要なく、単なるRectify::Formを追加すれば良い（とWorkflowManifestのコメントに書いてある）。ただし、Rectify::Formは単なるFormオブジェクトであり、情報は保存しない。そのため、別途Authorizationに保存する（ためのCommandを用意する）必要がある。

データの保存先はAuthorization(decidim_authorizationsテーブル)のmetadataとverification_metadataになる。本来はユーザーから登録された情報をmetadataに、管理者や外部サービスから得られた情報をverification_metadataに保存する、といった使い分けをしている模様。今回はverification_metadataを使うかどうかは要検討（何も登録しなくても良さそう）。

なお、revokeやgrantとどう関連づけさせるかは未定。

### validationについて

VerificationはActiveRecordもActiveModelも使わないため、validationはFormオブジェクトのみに書かれる。
metadataはDBではJSONB型のカラムになっているため、JSONであれば何でも保管できるため、Formで適切にvalidateするよう注意が必要である。

## フロントエンドについて

基本的にはjQuery && [Zurb Foundation](https://get.foundation/sites/docs/) を使っている雰囲気があります。

Foundationは少し前に一部で流行っていたフロントエンドフレームワークで、Bootstrapをすごくしたような印象です（私見）。jQueryに依存しており、React/Vue等よりは前の世代のものになります。

HTML内の`data-*`属性はFoundation由来のものがありそうですが、さらに拡張している部分もあるため、assets/javascript以下にあるjsファイルを確認する必要があります。

## 参考になるDecidimインスタンスrepository

### 大きいもの

* https://github.com/City-of-Helsinki/decidim-helsinki/
* https://github.com/AjuntamentdeBarcelona/decidim-barcelona
* https://github.com/Platoniq/decidim-indices

### 小さいもの

* https://github.com/AjuntamentdeSantCugat/decidim-sant_cugat

## 参考資料

* decidim docs https://docs.decidim.org/en/ 何はなくてもこれ。ちょっと古いそうだけれど、これより便利そうなものはなさそう。
* Rectify https://github.com/andypike/rectify Railsについては普通のドキュメントで良いとして、formsとcommandsに手を入れるならこれを理解する必要がある。


## 本番環境

AWS の Elastic Beanstalk 上に下記の手順で設定。

https://platoniq.github.io/decidim-install/decidim-aws/

