データベースドキュメント管理システム dmemoを立ち上げてみた。

eyecatch

はじめに

好物はインフラとフロントエンドのかじわらゆたかです。
晩ごはん何作ろうかなと思っていた際にこの記事を見かけたので、
動かして見るじゃ〜と思い1ヶ月以上経ってしまいました。

データベースドキュメント管理システム dmemo のご案内 - クックパッド開発者ブログ

実際のところデータベースに存在するスキーマ・テーブル・カラムなどのスキーマ情報はプログラムで自動的に取得できる情報です。スキーマ情報からはわからない「このテーブルはなんのためのテーブルなのか」「このカラムが取りうる値はなんなのか」といった情報のみを人が管理していけば良い、そんなツールを目指して作ったのが dmemo です。

ddmemoが解決しようとしている課題は弊部でも同様に存在している課題であり、
それ以外のケースにおいても、dmemoが解決してくれるケースは多いのではないか思っております。

起動するための下準備 Google API編

dmemoはGoogle+ の認証を用いているため、GoogleのAPI Keyを払い出す必要があります。
Google APIの払い出しには、プロジェクトの作成・APIの有効化・認証情報の作成といった3段階の作業を行う必要があります。

プロジェクトの作成

Google Cloud PlatformのAPI等はプロジェクトに紐付いていく考え方になります。
そのため、まずはプロジェクトを作成します。
Google Cloud Platformにログインし、プロジェクトを作成します。

GoogleAPI_01

GoogleAPI_02

APIの有効化

dmemoの認証はOmniAuth Google OAuth2 Strategyを用いて実装されており、
内部的にはGoogle+とContacts APIを用いているため、それらを有効にします。
Google APIを利用するを選択します。
GoogleAPI_03 APIを利用するを選択し、Google+,Contacts APIを有効にします。
GoogleAPI_04

GoogleAPI_05

GoogleAPI_06

GoogleAPI_07

GoogleAPI_08

認証情報の作成

最後にこれらのAPIを使うための認証情報を作成します。
API Managerの左側のメニューか認証情報を選択し、出てきたダイアログから承認情報を選択→OAuthクライアントIDを選択します。
GoogleAPI_09 OAuthは同意画面を作成する必要がある旨を言われるので、同意画面を作成します。
GoogleAPI_10 GoogleAPI_11

同意画面を作成後、ウェブアプリケーションの認証情報を作っていきます。 アプリケーションの種類はウェブアプリケーションを選択し、承認済みのリダイレクト URIにdmemoが用いるリダイレクトURIを記載します。
今回の場合は以下の内容を入力します。

http://localhost:3000/auth/google_oauth2/callback

GoogleAPI_12

入力後、作成を押下することでクライアントIDとクライアントシークレットが取得できます。
これらを設定ファイルに記載していくことになります。

起動するための下準備 Docker Compose編

Dockerコマンド一発でdmemoと、それに必要なPostgresqlを動かそうと思います。
そう言った際にDocker composeを用いるとDBとdmemoのコンテナを同時に立ち上げるといったことが可能です。
私は以下に記載しました。

docker-compose.yml

version: '2'
services:
    web:
          image: hogelog/dmemo
          env_file: .env.docker
          volumes:
              - ./log/docker:/app/log
          ports:
              - "3000:3000"
          depends_on:
              - db
          links:
              - db
    db:
        image: postgres
        environment:
            - POSTGRES_PASSWORD=mysecretpassword

起動するための下準備 Docker Compose編

最後雛形が公開されてて.env.sampleを元に、.env.dockerファイルを作成します。

.env.docker

GOOGLE_CLIENT_ID=(Google APIより払いだされたクライアントID)
GOOGLE_CLIENT_SECRET=(Google APIより払いだされたクライアントシークレット)
GOOGLE_HOSTED_DOMAIN=(必要に応じて入力・入力した場合、当該のドメインを含むGメールアカウントのみdmemoを使うことができる)
SECRET_KEY_BASE=(docker run --rm --env-file .env.docker -t hogelog/dmemo ./bin/rake secretを実行することで発行されたsecret)
DATABASE_URL=postgresql://postgres:mysecretpassword@db/postgres

起動してみた

上記の設定が完了した状態で、以下のコマンドを実行することでdockerのコンテナが2台立ち上がります。

docker-compose up

初回起動時はTableのMigrationが必要なため以下のコマンドを実行します。

docker exec -it dmemo_web_1 ./bin/docker_db_apply.sh

以下のURLを開きます。

http://localhost:3000

Googleのアカウントにログインしていない環境だと、
まずGoogleのログイン画面が表示されるかと思います。

GoogleAPI_13

ログインが完了した後に、dmemoが用いるリクエストの確認画面が表示されます。

GoogleAPI_14

許可することで、dmemoの画面が表示されます。

GoogleAPI_15

まとめ

ひとまずdmemoを起動することができました。
次回、ユーザーの管理者への昇格・テーブルスキーマの登録・Keywordの登録周りと実施したいと思います。