herokuのDB(無料)を使って競技プログラミングのアプリケーション開発
自分の用意したDBにコンテスト情報を入れて、情報の閲覧&追加ができるアプリケーションを作った。
→https://hackerrank-jp.herokuapp.com
DB周り
- まずherokuにappを登録する(名前を入力するだけでOK)
- コマンドラインで
$ brew tap heroku/brew && brew install heroku
を実行してCLIを使えるようにする - その後は基本はこれ:無料でHerokuで簡単にDB[PostgreSQL]を作成する - ゼロからはじめるWEBプログラミング入門
ただ情報が古いのか違うところが多少ある。
DBの接続情報取得
のところは heroku postgres
からsettingタブを開くとview credencialsがある
- 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テーブルの情報を表示)するとテーブル構造が見れます。
例えばこのテーブルに試しに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');
ちゃんと追加できました。あとはこれを使ってアプリケーションを作ります。
※このテーブルは初期構想のものであり、今動いてるものとは異なります
コードを書く
今回は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扱うときはインジェクションに注意しような👊