お知らせ
12/12開催のclj_nakano#2では仕様第一版とその実装を紹介し、仕様第二版はclj_nakano#3で扱いたいと考えております。
Rich HickeyのClojure/Conj2017キーノートの考察として、外界の変化を言語ごとにどれだけ上手く扱えるか比較する
- 複数のシステムから構成されていること
- 他者によって書かれたライブラリを含んでいること
- データベースを使用していること
- 時間の経過とともに変わる要件に柔軟に対応できること
- 本リポジトリを自分のアカウントにフォークし、選択した言語で実装し、ソースコードをコミットする。
- 本リポジトリにプルリクをする必要はなく、発表時はフォークしたリポジトリを用いる。
version1gitブランチに保持すること
- 本リポジトリ内で定義された
swagger-spec-v1.jsonに基づいたエンドポイントを持つ。 - HTTPリクエストを処理し、レスポンスを返す。
- POSTデータをPostgreSQLに格納し、GETリクエストはPostgreSQLから読み出す。
- テーブルスキーマは本プロジェクト内で
psql-v1.sqlとして定義されている。
-
コマンドラインプログラムであり、サーバURL, コマンド, 引数をとり、標準出力にデータを表示し、終了する。
-
イメージ
java -jar situated-program-scala.jar http://localhost:3000/person POST key1=value1 key2=value2 -
システム1と通信し、RESTful POST/GETエンドポイントを呼び出す。
-
本システムは、POSTとGETという2つのコマンドをコマンドライン引数にとる。
-
POSTコマンドは、コマンドライン引数から与えられたデータをPOSTで送信する。
-
GETはシステム1からデータを取得し、標準出力に表示する。
- PostgresSQLを起動する
docker-compose.ymlが本リポジトリで提供されているので、それを利用してサーバを起動する。 - PSQLは所与の環境として考え、比較の対象外である。
- オンライン上でのミートアップもサポートするため、
online-venue(オンライン会場)エンティティが追加された。/groups/{group-id}/online-venuesエンドポイントが新設され、GET, POSTメソッドが追加された。
- バージョン1から存在した
venue(会場)と、オンライン会場は、ミートアップに両方とも紐付けて共存することができる。(会場からの中継を想定) venuesデータベーステーブルに、下記のカラムが追加された。venue_type... PostgreSQLのEnumタイプ。取りうる値はphysicalかonline。既存のデータはマイグレーション時にphysicalに設定される。url... オンライン会場用のURLを格納する。
version2gitブランチに保持すること
- 本リポジトリ内で定義された
swagger-spec-v2.jsonに合わせ、エンドポイントを修正する。
- スキーマ変更を反映させるためには、下記コマンドを実行。
lein migratus up 20180115065446
- 初期仕様におけるコードサイズ
- サードパーティライブラリを最大限活用して、自前で書くコードを最小限に抑える
- 仕様変更にかかる変更量を、
version1version2ブランチ間のdiffファイルサイズで判定 - 開発者にとって修正のやりさすさ、変更のわかりやすさも主観的に判定
- docker, docker-compose
- 自分の選択した言語に必要な開発環境は追記してください。
- dockerを使う必要はありません。
docker-compose up
- Daemonとして走らせたい場合は
-dオプションを追加。 - 5432番ポートでソケットを開いているので、ホストOSのpsql、または他のSQLツールで接続可能。
- 接続情報は
docker-compose.ymlを参照のこと。 - Dockerからpsqlを利用することも可能。
docker run -it -e PGPASSWORD=password123 -v $PWD:/project postgres:9.6 psql -U meetup -h docker.for.mac.localhost meetup
- 仕様バージョン1のスキーマを設定するには、下記コマンドを実行。
- Java9で動作しない問題があったが、migratusを1.0.3にバージョンアップし、問題が解消されていることを確認した。
lein migratus up 20171204200333
- 仕様バージョン2のスキーマにアップグレードするには、下記コマンドを実行。
lein migratus migrate
- swagger editorでswagger-spec-v1.jsonを開く。
- スペックをUIで確認。
- Swagger codegenでコード生成することも可能だが、必ずしもコードのクオリティが高くないので、見極めが必要。