足跡-sokuseki-

りかの日進月歩の記録

herokuのDB(無料)を使って競技プログラミングのアプリケーション開発

自分の用意したDBにコンテスト情報を入れて、情報の閲覧&追加ができるアプリケーションを作った。
https://hackerrank-jp.herokuapp.com

DB周り

ただ情報が古いのか違うところが多少ある。
DBの接続情報取得のところは heroku postgres
f:id:wk1080id:20200623230100p:plain
からsettingタブを開くとview credencialsがある
f:id:wk1080id:20200623230237p:plain

  • view credencialsのページのHeroku CLIをコピーしてコマンドラインで実行するとDBに接続できる。多分初回はThe local psql command could not be located的なことを言われるので、そこで言われたリンク先のlocal setupをする。
  • DBに接続できたら、\lコマンドを打つとherokuに登録してあるdatabase全てが表示される。自分のdatabaseに入るには\c [database名](自分のdatabase名はview credencialsのページに載っている)を打てばよい。
  • 自分のdatabase内で\dt;(テーブルの一覧表示コマンド)を打つとDid not find any relations.と言われるはず。ここから好きにテーブルを定義して使う。
CREATE TABLE contest(
contest_id serial,
contest_name varchar(80),
contest_url varchar(80),
contest_date date,
writer varchar(80)
);

serialは連番型です。
urlはwww.hackerrank.com以下のコンテスト名だけ登録するようにします。
これを実行してから\d CONTEST;(CONTESTテーブルの情報を表示)するとテーブル構造が見れます。f:id:wk1080id:20200624004921p:plain

例えばこのテーブルに試しにhttps://www.hackerrank.com/yfkpo2を追加してみると、

INSERT INTO contest (contest_name, contest_url, contest_date, writer) 
VALUES ('ゆるふわ競技プログラミングオンサイト at FORCIA #2 ゴリラの挑戦状', 'yfkpo2', '2019-09-14', 'prd_xxx, matsu7874');

f:id:wk1080id:20200624010836p:plain
ちゃんと追加できました。あとはこれを使ってアプリケーションを作ります。

※このテーブルは初期構想のものであり、今動いてるものとは異なります

コードを書く

今回はNode.jsのexpressを使います(理由:最近勉強したので)。たぶん言語はなんでもいいです。
参考:ExpressからHeroku Postgresを使う - Qiita
githubにコードをpushします。

herokuにデプロイ

参考: 【備忘録】GitHub経由でHerokuにデプロイするまでの流れ - Qiita

package.json"start": "node main.js",書いてない(Node.jsアプリをHerokuにデプロイする | | KeruuWeb)とかherokuの環境変数の設定(Why is my Node.js app crashing with an R10 error? - Heroku Help)とかでだいぶ苦戦した。

その他

DB扱うときはインジェクションに注意しような👊

f:id:wk1080id:20200630160132p:plain
インジェクションチェックの様子