検索
連載

株価データベースを「Docker」で作ってみる「お金に愛されないエンジニア」のための新行動論(4)(10/12 ページ)

今回は、株価情報のデータベースを「Docker」で作ってみます。長いエンジニア生活で私が学んだこと――。それは、「自力で作らなかったものは、結局、自分の”モノ”にはならない」ということです。だからこそ、やってみるのです。

Share
Tweet
LINE
Hatena

CSVファイルとDockerを使ってデータベースを作成してみよう

 では、ここから、このCSVファイルとdockerを使った株情報のデータベースを作成してみたいと思います。

 ここでは、私と同じ環境を持っていることを前提に話を進めます。あなたのPCのOSがWindows 10で、Docker for Windowsがインストールされているものとします。インストール方法は、こちらのページをご参照ください。また、Go言語の環境もインストールされているものとします(参考)。

 次に、こちらから、適当なディレクトリに、ファイル一式をダウンロードしてください(取得済みのcsvファイルも入っています)。

 Zipファイルでダウンロードしても良いですが、この機会に、あなたのPCにgitがあると、いろいろ幸せになれます。gitは、”git” “install” “windows”でググって頂き、サクっとインストールできると思います。

 gitをインストールした後、

$ git clone https://github.com/TomoichiEbata/money

のコマンド一発で、私と同じ環境が、あなたのPCに構築されます。

 現在、moneyというディレクトリに、

のような、ディレクトリとファイルができています。stock_dbに格納されている、”hitachi.csv”, “sharp.csv”, “toshiba.csv”, “jfe.csv”は、SBI証券のサイトからダウンロードした株価情報です。

 さて、ここからdockerコンテナの作成に入ります。

 まず、ダウンロードしたディレクトリに入ります(私の場合、f:\money)。ここから、

$ cd money1

で、money1のディレクトリに入ります。

 ここで、

$ docker-compose -up d

で、データベース用Dockerコンテナが作成されます。

 このコンテナを作成する設計図になっている”docker-compose.yml”の内容です。

 上記の設計図の内容を簡単に説明すれば、(1)postgreSQLというデータベースを含むコンテナを作成し、(2)そのデータベースは、ポート番号15432でアクセスできて、(3)money\money1\stock_dbというディレクトリの内容を共有できて、(4)データベースのログインパスワードは、”password”である、ということです。

 正直、docker-compose.ymlの内容は(というか、dockerそのものが)結構面倒くさいです(筆者のブログ)。参考にはなりませんが、私の苦労した記録ならこちらにあります。

 さて、

$ docker-compose start

で、Dockerコンテナを起動してください。

$ docker-compose ps

で、以下のような内容が表示されていれば、起動に成功しています。

 さて、現時点でPostgreSQLのデータベースは稼働状態になっていますので、psqlなどのクライアントを使えばログインできますが、さらにpsqlをインストール(インストール手順はこちら)するのも面倒だと思いますので、このままDockerコンテナに入ってしまいましょう。

$ docker exec -it postgres bash

で、Dockerコンテナの中に入れます。

 さらに、ここから、postgreSQLのデータベースの中に入ります。

# psql -U postgres

 今回は、日立製作所、東芝、JFEホールディングスの3社の株価情報DBを作成します(この3社を選んだのは、単に、江端の趣味です)。

Postgres=# create database hitachi;

 で、”hitachi”という名前のDBを作成したら、さらに、そのDBの中に入ります。

postgres=# \c hitachi

 これで、”hitachi”に入れました。

 ここで、このhitachiのDBのテーブル(データを入れる容器)を作ります*)

hitachi=# CREATE TABLE stock(Date varchar(10), Open int, High int, Low int, Close int, Ave5day int, Ave25day int, Ave75day int, VWAP int, Vol int, Vol5day int, Vol25day int);

(改行しないで、一行で投入してください)

*)こちらのページの記載をコピペしてご利用ください

 これは、先程ダウンロードした、csvファイルの見出しに会わせて作成したものです。

 さて、ようやく、このhitachiのDBにcsvファイルをインポートします。

hitachi=# \copy stock from '/stock_db/hitachi.csv' with csv delimiter ',';

 これが無事インポートされたかは、以下のコマンドで確認できます。

hitachi=# select * from stock;

 以下のようになっていれば、成功です。

 これと同じ手続きを、”toshiba.csv”,”jfe.csv”でも行って、”hitachi”,”toshiba”,”jfe”の3つのデータベースを作成してください。

 完成すれば、こんな感じになっているはずです。

 データベースの作成が終了したら、”\q”やら、”exit”やらを打ち込んでいけば、元の画面に帰ってきます。

 その後、DBを停止させる場合は、

\money\money1のディレクトリの中から、

$ docker-compose stop

と打ち込んでください。この場合、$ docker-compose startで再起動できます。

 ちなみに、

$ docker-compose down

とすれば、コンテナ本体を消滅させることができます。消滅後でも、$ docker-compose -up d で再構築できます。

 以上ですが、総じて、Dockerを知らない方にとっては、「チンプンカンプンだった」と思いますし、Dockerの経験者は、「ブサイクな説明だな」と感じたかもしれません。私には、これ以上、「Dockerコンテナを使ったデータベース」と「データベースへのcsvファイルのインポート」を簡単に説明することができませんでした。ご容赦ください。

 データベースを(SQL文などを使って)操れるようになると、世界観が変わります ―― パラダイムシフトです。単なる検索やGoogleサーチとは、全く次元の異なるデータの見方が可能となるからです。

 『SQLを使い倒して、テロリストグループの周到なマネーロンダリングの流れを突き止めた』という場面が登場する海外ドラマを見たことがありますが ―― 多分、実話をベースにしていると思います。私も、自作のGIS DB(地図情報データベースを使い倒して、その威力を実感しています(筆者のブログ)。

 というわけで、ここは一つ、読者の皆さんにも、(面倒でも)データベースを取り扱えるようになって頂きたいと希望しており、今回の記事が、そのきっかけになれば幸いです。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る