<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>PostgreSQL</title>
	<atom:link href="https://techgrowup.net/tag/postgresql/feed/" rel="self" type="application/rss+xml" />
	<link>https://techgrowup.net</link>
	<description>エンジニアを強くする</description>
	<lastBuildDate>Sat, 05 Feb 2022 11:00:00 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://techgrowup.net/wp-content/uploads/2021/05/hp-icon-150x150.png</url>
	<title>PostgreSQL</title>
	<link>https://techgrowup.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>DockerでNode×PostgreSQL×Typescript環境を作る</title>
		<link>https://techgrowup.net/create-env-docker-node-postgres/</link>
					<comments>https://techgrowup.net/create-env-docker-node-postgres/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[techgrowup]]></dc:creator>
		<pubDate>Sat, 05 Feb 2022 10:59:59 +0000</pubDate>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[Node.js]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Typescript]]></category>
		<guid isPermaLink="false">https://techgrowup.net/?p=1498</guid>

					<description><![CDATA[はじめに 今回Dockerを利用して、Node×PostgreSQL×Typescript環境を作るときの手順を解説します。私自身バックエンドエンジニアとしては初学者レベルですが学んだことのアウトプットとして記載したいと [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading" id="はじめに">はじめに</h2>



<p class="wp-block-paragraph"> 今回Dockerを利用して、Node×PostgreSQL×Typescript環境を作るときの手順を解説します。私自身バックエンドエンジニアとしては初学者レベルですが学んだことのアウトプットとして記載したいと思います。主な開発環境としては以下となります。</p>



<div class="wp-block-cocoon-blocks-blank-box-1 blank-box block-box">
<ul class="wp-block-list"><li><strong>Mac M1</strong></li><li><strong>Docker version 20.10.11</strong></li><li><strong>Postgres: 13</strong></li><li><strong>Node: 14</strong></li><li><strong>Typescript(4.5.5), Express(4.17.2) &lt;- 今回ここは大して関係ありません</strong></li></ul>
</div>



<h2 class="wp-block-heading" id="ゴール">ゴール</h2>



<p class="wp-block-paragraph"> 今回のゴールはDockerでNode環境、Postgres環境を作成し、http://localhost:3000を叩くと下記のような結果をPostgreSQLを通して取得できるところまでとなります。実際に開発する場合はセキュリティやDB設計、API設計などが重要になってくると思いますが、今回はその辺は特に記載しません。</p>



<pre class="wp-block-code"><code>&#91;
  {
    "id": 1,
    "created_at": "2022-02-05T10:22:44.994Z",
    "updated_at": "2022-02-05T10:22:44.994Z",
    "email": "test@gmail.com",
    "password": "password"
  }
]</code></pre>



<p class="wp-block-paragraph"> またフォルダ構成としては最終的に下記のような形になります。<span class="marker-under">appフォルダ、initdbフォルダ、docker-compose.ymlファイルを作成しておきましょう。</span></p>



<pre class="wp-block-code"><code>.
├── app
│   ├── Dockerfile
│   ├── package.json
│   └── src
│       └── index.ts
├── docker-compose.yml
└── initdb
    └── setup.sql</code></pre>



<h2 class="wp-block-heading" id="node環境の作成">Node環境の作成</h2>



<p class="wp-block-paragraph"> 次にnode環境を作るために<span class="marker-under">appフォルダに移動して</span>、下記コマンドを打ちましょう。「-y」コマンドはnpm init時に出てくる質問に全てyesで回答するためのコマンドです。今回は特別設定することは無いので、-yをつけています。</p>



<pre class="wp-block-code"><code>cd app
npm init -y </code></pre>



<p class="wp-block-paragraph"> これでpackage.jsonが作られたと思いますので、次は必要なパッケージ類をインストールしましょう。<br>1行目の<a rel="noopener" target="_blank" href="https://expressjs.com/ja/">express<span class="fa fa-external-link external-icon anchor-icon"></span></a>はWebアプリケーションを作成するためのフレームワークで、pgはPostgreSQLを利用するためのライブラリとなります。また、2行目はTypescriptを利用するためのライブラリとなります。</p>



<pre class="wp-block-code"><code>npm install --save express pg 
npm install --save-dev typescript ts-node @types/express @types/node @types/pg</code></pre>



<p class="wp-block-paragraph"> 次にappフォルダ配下に、<span class="marker-under">src/index.tsファイルを作成</span>し、下記コードを記載しましょう。ある程度コードを見れば分かると思いますが、expressを利用して&#8217;/&#8217;にリクエストが来た際に、PostgreSQLのusersテーブルを読込、レスポンスとして返すシンプルなルーティングです。</p>



<pre class="wp-block-code"><code>import express from 'express'
import { Pool } from 'pg'
const app: express.Express = express()

const pool = new Pool({
  host: 'postgres',
  database: 'postgres_db',
  user: 'postgres',
  password: 'password',
  port: 5432
})

// ルーティングの設定
app.get('/', async (req, res) => {
  const { rows } = await pool.query('select * from users')
  return res.send(rows)
})

const PORT = 3000
app.listen(PORT, () => {
  console.log(`server started on port ${PORT}`)
})
</code></pre>



<p class="wp-block-paragraph"> 最後にnodeを実行するために、package.jsonファイルのscriptsの部分に以下を付け足しましょう。これでTypescriptのnodeを実行できます。</p>



<pre class="wp-block-code"><code>"start": "npx ts-node ./src/index.ts"</code></pre>



<h2 class="wp-block-heading" id="docker環境の作成">Docker環境の作成</h2>



<p class="wp-block-paragraph"> appフォルダと同じ階層に、docker-compose.ymlを作成したと思いますので、中身に下記を記載しましょう。構成としてはnode環境とpostgers環境を作るためのコードを記載しています。<br> ちなみに後にinitdb内にsqlファイルを作成しますが、docker-entrypoint-initdb.dという場所にsqlファイルを置くと初期設定時に自動でsqlを実行してくれます。</p>



<pre class="wp-block-code"><code>version: "3.7"
services:
  node:
    container_name: node_express
    build: ./app
    volumes:
      - ./app:/app
    tty:  true
    ports:
      - 3000:3000

  postgres:
    container_name: postgres
    image: postgres:13
    ports:
      - 5432:5432
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
      POSTGRES_DB: postgres_db
    volumes:
      - db_data:/var/lib/posrgresql/data
      - ./initdb:/docker-entrypoint-initdb.d

volumes:
  db_data: {}</code></pre>



<p class="wp-block-paragraph"> 次にappフォルダ内に<span class="marker-under">Dockerfileという名前のファイルを作成</span>し、以下を記載しましょう。下記でdocker起動時に[npm run start]コマンドを実行し、nodeを実行するようにしています。</p>



<pre class="wp-block-code"><code>FROM node:14-slim
RUN npm install
WORKDIR /app
CMD &#91;"npm", "run","start"]</code></pre>



<h2 class="wp-block-heading" id="初期db設定">初期DB設定</h2>



<p class="wp-block-paragraph"> docker作成時にdb設定を行うため、initdbフォルダに<span class="marker-under">setup.sqlというファイルを作成</span>しましょう。そしてその中に下記を記載しましょう。内容としてはシンプルで、usersテーブルを作成しサンプルとして1つINSERTを行っています。</p>



<pre class="wp-block-code"><code>set
    client_encoding = 'UTF8';

create table users(
    id serial primary key,
    created_at timestamp not null default current_timestamp,
    updated_at timestamp not null default current_timestamp,
    email text not null,
    password text not null
);

INSERT INTO
    users (email, password)
VALUES
    ('test@gmail.com', 'password');</code></pre>



<h2 class="wp-block-heading" id="実行してみる">実行してみる</h2>



<p class="wp-block-paragraph"> 最後に、docker-compose.ymlと同じ階層に戻り下記コマンドを打ちましょう。実行するとimageのダウンロードとdockerコンテナが起動します。</p>



<pre class="wp-block-code"><code>docker-compose up -d</code></pre>



<p class="wp-block-paragraph"> 無事に終わりましたら、ブラウザで<a rel="noopener" target="_blank" href="http://localhost:3000">http://localhost:3000<span class="fa fa-external-link external-icon anchor-icon"></span></a>を開くと下記が返されるようになったと思います。</p>



<pre class="wp-block-code"><code>&#91;
  {
    "id": 1,
    "created_at": "2022-02-05T10:22:44.994Z",
    "updated_at": "2022-02-05T10:22:44.994Z",
    "email": "test@gmail.com",
    "password": "password"
  }
]</code></pre>



<h2 class="wp-block-heading" id="まとめ">まとめ</h2>



<p class="wp-block-paragraph"> Dockerやnodeもまだまだ経験不足でしたが、自在に使えるようになるとかなり便利だなと思いました。次はPrismaなどのORマッパーも利用してみたいと思います。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://techgrowup.net/create-env-docker-node-postgres/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Disk: Enhanced  を使用したページ キャッシュ

Served from: techgrowup.net @ 2026-06-25 00:32:05 by W3 Total Cache
-->