tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

【BigQuery】Golang x BigQueryでのCredentialの指定方法メモ

はじめに

GolangでBigQueryをざつに扱っています。

ローカルで開発するときはCredentialを指定しますが、
よく使う2つの方法を忘れがちなので自分メモ。

アジェンダ

1. Credentialの作成

これは必ずやることとして、Credentialを作成します。

具体的には、以下2つを行います。

  • Service Accountの作成
  • keyの作成(これがCredential)

ここは本旨ではないので軽く触れる程度で省きます。

Service Accountの作成は、以下から行います。

f:id:tweeeety:20210404004104p:plain

Service Accountを作成したら、Manage keysを選択します。

f:id:tweeeety:20210404004113p:plain

次の画面にてADD KEY > Create new keyでkeyを作成します。

f:id:tweeeety:20210404004123p:plain

keyのタイプはjsonを選択してください。
このあとつかうCredentialsファイルになります。

ブラウザのダウンロードが始まるのでプロジェクトルートなどに置いてください。
この記事ではファイル名をkey.jsonとして保存しています。

2. 環境変数で設定する

上記で作成した、credentialsファイルを環境設定で指定する方法です。

まんまなので以下のコマンドを打つだけです。

$ export GOOGLE_APPLICATION_CREDENTIALS=./key.json

環境変数に設定しておくことで、bigqueryパッケージが環境変数に設定されていれば読み込んでくれます。

ただし、端末やPCの再起動で設定は消えてしまうので再設定が必要です。

3. プログラムで指定する

こちらはプログラムに書くので再設定が必要ありません。
option.WithCredentialsFileを使ってcredensialsを読み込みます。

package main

import (
    "context"
    "fmt"
    "log"

    "cloud.google.com/go/bigquery"
    "google.golang.org/api/iterator"
    "google.golang.org/api/option"
)

const (
    key       = "./key.json"
    projectID = "your-project"
    query     = "select * from your-project.datasetName.tableName"
)

func main() {
    ctx := context.Background()

  // client作成時にoption.WithCredentialsFileでファイルを読み込む
    client, err := bigquery.NewClient(ctx, projectID, option.WithCredentialsFile(key))

    if err != nil {
        fmt.Printf("Failed to create client: %v", err)
    }
    defer client.Close()

    it, err := client.Query(query).Read(ctx)
    if err != nil {
        log.Printf("Failed to Read Query: %v", err)
    }

    for {
        var values []bigquery.Value
        err := it.Next(&values)
        if err == iterator.Done {
            break
        }
        if err != nil {
            fmt.Println("Failed to Iterate Query:%v", err)
        }
        fmt.Println(values)
    }
}

参照

試したコードスニペットをおいておきます

おわりに

BigQueryは触っていて楽しいですが、golangから扱うときにちょくちょく面倒なことがありますね!

【BigQuery】bqコマンドでdataset/table/partitionの作成から確認まで試すメモ

はじめに

最近、BigQueryを触っています。

bqコマンドでコマンドラインからアクセスする際の自分メモです。

この記事で使うschemaやcsvファイルは以下のリポジトリにおいてあります。
* https://github.com/tweeeety/bq-command-sample

アジェンダ

1. bqコマンドつかう前の確認

bqコマンドを使いはじめるにあたり確認です。

# bqコマンドのversionを確認
$ bq version
This is BigQuery CLI 2.0.65

# projectを確認
$ gcloud config list
[compute]
region = asia-northeast1
zone = asia-northeast1-b
[core]
account = [your account]
disable_usage_reporting = False
project = [your project]

Your active configuration is: [default]

# 設定されていない場合はprojectを設定してから行う
gcloud config set project [project name]

bqコマンドを使うには、cloud SDKをインストールする必要があります。
もしbq versionでコマンドが確認できない場合は、以下2点をやってみてください。

2. bqコマンドつかう前の設定

フラグ

bqコマンドは大きく2つのフラグがあります。

  1. グローバル フラグ(共通フラグ): すべてのコマンドで使用可
  2. コマンド固有のフラグ: 特定のコマンドに適用される

詳しくは以下をご参照ください。
* コマンドライン ツール リファレンス

.bigqueryrc

bqコマンドは予めフラグ(コマンドのオプション)を設定しておくことができます。

vim $HOME/.bigqueryrcに設定することで毎回オプションを指定せずに実行できるようになります。

グローバルフラグは直で、
コマンド固有のフラグは[command]でセクションをきって指定します。

$ vim ~/.bigqueryrc
---- vim ----
--credential_file="[path to file]/key.json"

[query]
--use_legacy_sql=false

[mk]
--use_legacy_sql=false
-------------

デバッグ フラグ

特に使いそうなbqフラグにログとステータスを表示することものがあります。

うまくいかないときは設定してみると良いでしょう。

  • --apilog=path_to_file: ログ・ファイルを指定
  • --format=prettyjson: レスポンスをJSON形式で出力

3. bqコマンドでprojectの確認

# projectの確認
$ gcloud config list

4. bqコマンドでdatasetの作成/確認

bqコマンドでデータセットを作成します。

# 東京:asia-northeast1 にデータセットを作成
$ bq mk --data_location=asia-northeast1 bq_command_dataset
Dataset '[your project]:bq_command_dataset' successfully created.

# データセットの確認
$ bq ls
      datasetId
 --------------------
  hogehoge
  fugafuga
  bq_command_dataset

5. bqコマンドでパーティション無し/有りtableの作成

bqコマンドにてテーブルを作成します。
schemaはjson形式にて記述したローカルのファイルを参照できます。

まずは、bqコマンドにてパーティション無しのテーブルを作成します。

$ bq mk \
--table \
--description "no partition table" \
--label hoge:fuga \
--schema ./schema.json \
hoge-project:bq_command_dataset.bq_command_no_pt_table

以下は、今回のschema.jsonのサンプルです。
BigQueryでのデータ型は以下を参照してください。
* 標準 SQL のデータ型

$ cat schema.json
[
  {
    "mode": "NULLABLE",
    "name": "employee_id",
    "type": "STRING"
  },
  {
    "mode": "NULLABLE",
    "name": "name",
    "type": "STRING"
  },
  {
    "mode": "NULLABLE",
    "name": "attendance",
    "type": "STRING"
  },
  {
    "mode": "NULLABLE",
    "name": "partition_date",
    "type": "date"
  }
]

テーブルが作成されました。
consoleでもデータセットとテーブルが確認できます。

f:id:tweeeety:20210329233321p:plain

また、Detailsタブを開くとno partition tableと表示されてるのが確認できます。

f:id:tweeeety:20210329233335p:plain

次に、bqコマンドにてパーティション有りのテーブルを作成してみます。

$ bq mk \
--table \
--description hogehoge \
--schema ./schema.json \
--label hoge:piyo\
--require_partition_filter \
--time_partitioning_field partition_date \
--time_partitioning_type DAY \
hoge-project:bq_command_dataset.bq_command_pt_table

上記フラグはこんな感じの意味です。

  • --require_partition_filter: クエリを実行するパーティションを指定するためにWHERE句の使用を必須にする。
  • --time_partitioning_type: DAY/HOUR/MONTH/YEARを指定。デフォルトDAY。
  • --time_partitioning_field: パーティションに利用するカラムの指定

再度、consoleにて確認してみます。

f:id:tweeeety:20210329233524p:plain

また、detailsタブをひらくと、今度はパーティションについての情報が表示されるのが確認できます。

f:id:tweeeety:20210329233534p:plain

6. bqコマンドでdataset/table/パーティション情報の確認

consoleで確認しても良いですが、
毎回ブラウザを開いてはリロードで確認するのは面倒です。

そこで、コマンドラインにてbq showでテーブルの情報を確認します。

# dataset/table情報の確認
$ bq show \
--format=prettyjson \
hoge-project:bq_command_dataset.bq_command_pt_table

{
  "creationTime": "1617024639811",
  "description": "hogehoge",
  "etag": "Q/5/uQq/jZawUbYZchsKvw==",
  "id": "hoge-project:bq_command_dataset.bq_command_pt_table",
  "kind": "bigquery#table",
  "labels": {
    "hoge": "piyo--require_partition_filter"
  },
  "lastModifiedTime": "1617025188641",
  "location": "asia-northeast1",
  "numBytes": "168",
  "numLongTermBytes": "0",
  "numRows": "8",
  "schema": {
    "fields": [
      {
        "mode": "NULLABLE",
        "name": "employee_id",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "name",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "attendance",
        "type": "BOOLEAN"
      },
      {
        "mode": "NULLABLE",
        "name": "partition_date",
        "type": "DATE"
      }
    ]
  },
  "selfLink": "https://bigquery.googleapis.com/bigquery/v2/projects/hoge-project/datasets/bq_command_dataset/tables/bq_command_pt_table",
  "tableReference": {
    "datasetId": "bq_command_dataset",
    "projectId": "hoge-project",
    "tableId": "bq_command_pt_table"
  },
  "timePartitioning": {
    "field": "partition_date",
    "type": "DAY"
  },
  "type": "TABLE"
}

--schemaフラグをつけることで、スキーマ情報のみを取得することも可能です。

# schemaのみを取得
$ bq show \
--schema \
--format=prettyjson \
hoge-project:bq_command_dataset.bq_command_pt_table

[
  {
    "mode": "NULLABLE",
    "name": "employee_id",
    "type": "STRING"
  },
  {
    "mode": "NULLABLE",
    "name": "name",
    "type": "STRING"
  },
  {
    "mode": "NULLABLE",
    "name": "attendance",
    "type": "STRING"
  },
  {
    "mode": "NULLABLE",
    "name": "partition_date",
    "type": "date"
  }
]

また、bq lsコマンドにてテーブルの一覧表示を確認できます。

$ bq ls \
--format=prettyjson \
hoge-project:bq_command_dataset
[
  {
    "creationTime": "1617024216763",
    "id": "hoge-project:bq_command_dataset.bq_command_no_pt_table",
    "kind": "bigquery#table",
    "labels": {
      "hoge": "fuga"
    },
    "tableReference": {
      "datasetId": "bq_command_dataset",
      "projectId": "hoge-project",
      "tableId": "bq_command_no_pt_table"
    },
    "type": "TABLE"
  },
  {
    "creationTime": "1617024639811",
    "id": "hoge-project:bq_command_dataset.bq_command_pt_table",
    "kind": "bigquery#table",
    "labels": {
      "hoge": "piyo--require_partition_filter"
    },
    "tableReference": {
      "datasetId": "bq_command_dataset",
      "projectId": "hoge-project",
      "tableId": "bq_command_pt_table"
    },
    "timePartitioning": {
      "field": "partition_date",
      "type": "DAY"
    },
    "type": "TABLE"
  }
]

__PARTITIONS_SUMMARY__メタテーブルを使うとパーティションに関する情報を取得できます。

$ bq query \
--use_legacy_sql=true \
'SELECT
  partition_id
FROM
  [bq_command_dataset.bq_command_pt_table$__PARTITIONS_SUMMARY__]'

Waiting on bqjob_r3c1cbe985379d7e7_000001787e541b29_1 ... (0s) Current status: DONE
+--------------+
| partition_id |
+--------------+
| 20210101     |
| 20210102     |
+--------------+

7. bqコマンドでdataのinsert

これまで作成したデータセットとテーブルにデータを入れてみます。

今回はcsvですが、json形式でも大丈夫です。

# 01.csvを読み込む
$ bq load \
    --replace \
    --source_format=CSV \
    --schema=./schema.json \
    hoge-project:bq_command_dataset.bq_command_pt_table \
    ./source01.csv
   
Upload complete.
Waiting on bqjob_r78d80973f8b7b92c_000001787e35fed2_1 ... (0s) Current status: DONE

# 02.csvを読み込む
$ bq load \
    --source_format=CSV \
    --schema=./schema.json \
    hoge-project:bq_command_dataset.bq_command_pt_table \
    ./source02.csv

Upload complete.
Waiting on bqjob_r448ceceb57f44638_000001787e3639bc_1 ... (0s) Current status: DONE

--replaceフラグを追加すると、データの追加ではなく上書きになります。
delete or insertのような感じでしょうか。

8. bqコマンドでdataのselect

bqコマンドにてselectする方法は主に2つあります。

  • bqコマンドに生SQLを書く
  • bqコマンドにSQLファイルを読み込ませる

まず最初に、生SQLでのbqコマンドでのselectです。

# bqコマンドに生SQL
$ bq query \
--use_legacy_sql=false \
'SELECT
  employee_id,
  name,
  attendance,
  partition_date
FROM
  `bq_command_dataset.bq_command_pt_table`'

次に、SQL文を記載したSQLファイルを読み込んでのselectです。

  • SQLファイル
SELECT
  employee_id,name
FROM
  bq_command_dataset.bq_command_pt_table
WHERE
  _PARTITIONDATE = "2021-01-01"
  • コマンド
# bqコマンドにSQLファイルを読み込ませる
$ bq query \
--use_legacy_sql=false \
< query.sql

Waiting on bqjob_r4ce8a710bfc9077f_000001787de9e611_1 ... (0s) Current status: DONE
+-------------+------+------------+----------------+
| employee_id | name | attendance | partition_date |
+-------------+------+------------+----------------+
| 1001        | hoge |       true |     2021-01-02 |
| 1002        | fuga |       true |     2021-01-02 |
| 1003        | piyo |       true |     2021-01-02 |
| 1004        | fufu |      false |     2021-01-02 |
| 1001        | hoge |       true |     2021-01-01 |
| 1002        | fuga |       true |     2021-01-01 |
| 1003        | piyo |       true |     2021-01-01 |
| 1004        | fufu |       true |     2021-01-01 |
+-------------+------+------------+----------------+

consoleからパーティションを指定したSQLで容量が変わるかを確認してみます。

まずは、パーティションの指定無しSQLから。
168Bと表示されているのがわかります。

f:id:tweeeety:20210329233618p:plain

次に、パーティションを2つとも指定したSQL。
こちらも168Bと表示されています。まぁそうですよね。

f:id:tweeeety:20210329233629p:plain

最後に、パーティションを1つだけ指定したSQL。
84Bと表示されました。指定カラムをそのままでも容量が減っている事が確認できます。

f:id:tweeeety:20210329233637p:plain

9. bqコマンドでtableのdelete

最後は、作成したtableを削除して終わりにします。

$ bq rm \
-f \
-t \
hoge-project:bq_command_dataset.bq_command_no_pt_table

参照

おわりに

bqコマンドが以外に便利だという事がわかりました!!enjoy!

【BigQuery】BigQueryへのDATA型のINSERT時に`Could not parse'20210101' as DATE for field partition_date`と怒られるエラー

はじめに

表題のとおりですが、bqコマンドなんかを使用してDATE型の値をINSERTしようとすると以下のようなエラーになりました。

この原因と対処法について。

どういうエラーか

まず、INSERTするSchemaとdataです。

schema

$ cat ./schema.json
[
  {
    "mode": "NULLABLE",
    "name": "employee_id",
    "type": "STRING"
  },
  {
    "mode": "NULLABLE",
    "name": "birthday",
    "type": "STRING"
  },
  {
    "mode": "NULLABLE",
    "name": "name",
    "type": "STRING"
  },
  {
    "mode": "NULLABLE",
    "name": "partition_date",
    "type": "DATE"
  }
]

data

$ cat ./source.csv
1001,20210101,hoge,20210101
1002,20210303,fuga,20210101
1003,20210505,piyo,20210101
1004,20210707,fufu,20210101

つぎにINSERTです。
以下のようにエラーで怒られます。

$ bq load \
>     --replace \
>     --source_format=CSV \
>     --schema=./schema.json \
>     [your project]:bq_command_dataset.bq_command_pt_table \
>     ./source.csv
Upload complete.
Waiting on bqjob_r187e4b6bf330eafd_000001781872232f_1 ... (0s) Current status: DONE
BigQuery error in load operation: Error processing job '[your project]:bqjob_r187e4b6bf330eafd_000001781872232f_1': Error while reading data, error message: Could not parse
'20210101' as DATE for field partition_date (position 3) starting at location 0  with message 'Unable to parse'
Failure details:
- Error while reading data, error message: CSV processing encountered
too many errors, giving up. Rows: 1; errors: 1; max bad: 0; error
percent: 0
- query: Could not parse '20210101' as DATE for field partition_date
(position 3) starting at location 0  with message 'Unable to parse'

対処法

公式サイトに記載がありますが、YYYY-MM-DD形式が必須らしいです。

CSV データまたは JSON データを読み込む場合、DATE 列の値に区切りとしてダッシュ(-)を使用し、YYYY-MM-DD(年-月-日)の形式にする必要があります。

ということで、YYYY-MM-DDに変えてやるとINSERTが成功します。

# YYYYMMDDに変更する
$ cat source.csv
1001,20210101,hoge,2021-01-01
1002,20210303,fuga,2021-01-01
1003,20210505,piyo,2021-01-01
1004,20210707,fufu,2021-01-01

# 成功する
$ bq load \
>     --replace \
>     --source_format=CSV \
>     --schema=./schema.json \
>     [your project]:bq_command_dataset.bq_command_pt_table \
>     ./source.csv

Upload complete.
Waiting on bqjob_rc9c3d4712ae526_00000178187453d6_1 ... (0s) Current status: DONE

おわりに

BigQuery,とくにbqコマンドはオプションやルールがたくさんあるので公式を良く読むのが吉ですね!

Golang x Gin(ジン)を5分でためす

はじめに

GolangでGin(ジン)を5分で試すサンプルです。

f:id:tweeeety:20210217212431p:plain

本記事では以下の3要素のみ扱います。

  • Golang
  • Go Modules
  • Gin

アジェンダ

1. Ginとは

Ginは、Golangのフレームワークです。
歴史も長く、Golangで最も使われているフレームワークと言っても過言ではありません。

特徴は「薄い/早い/情報多い」と言った三拍子が揃っています。

Ginは数年前に職場で利用していました。
最近になり、あらためて触る機会が出たので再学習しています。

参考程度に、Golangのフレームワーク5つの人気比較を載せておきます。

FW Name Stars Forks Open Issues
Gin 40.2k 4.6k 238
beego 25.5k 4.9k 746
echo 17.7k 1.6k 37
kit 17.5k 1.8k 59
fasthttp 13k 1.1k 34

ref: Top 5 Golang Frameworks in 2020

2. Go Moduleで環境用意

ローカル環境

まずは、ローカルの環境を参考程度に載せておきます。
あくまでも自分の環境ですのであしからず。

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.15.7
BuildVersion:   19H524

$ go version
go version go1.15.5 darwin/amd64

Go Modules

ディレクトリをつくり、go mod initでセットアップを行います。

# ディレクトリを作る
$ mkdir go-gin-sample
$ pwd
/Users/tweeeety/go/src/github.com/tweeeety/go-gin-sample

# go modulesを初期化する
$ go mod init github.com/tweeeety/go-gin-sample
$ cat go.mod
module github.com/tweeeety/go-gin-sample

go 1.15

3. Ginを試す

Ginいれる

Go Modulesが整っていればgo getするだけです。
正常であればgo.modgo.sumのファイルが作成されているはずです。

$ go get github.com/gin-gonic/gin

$ cat go.mod
module github.com/tweeeety/go-gin-sample

go 1.15

require github.com/gin-gonic/gin v1.6.3 // indirect

GinでGolang書いてみる

main.goにroutingとhtmlを表示するコードのみ書きます。

  • main.go
package main

import (
    "github.com/gin-gonic/gin"
)

func main() {
    router := gin.Default()
    router.LoadHTMLGlob("templates/*.html")

    data := "Hello Go/Gin!!"

    router.GET("/", func(ctx *gin.Context) {
        ctx.HTML(200, "index.html", gin.H{"data": data})
    })

    router.Run()

}
  • index.html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>Sample App</title>
</head>
<body>
  <h1>{{.data}}</h1>
</body>
</html>

起動してwebで確認

特に問題がなければgo runで立ち上がります。

$ go run main.go
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:   export GIN_MODE=release
 - using code:  gin.SetMode(gin.ReleaseMode)

[GIN-debug] Loaded HTML Templates (2):
    -
    - index.html

[GIN-debug] GET    /                         --> main.main.func1 (3 handlers)
[GIN-debug] Environment variable PORT is undefined. Using port :8080 by default
[GIN-debug] Listening and serving HTTP on :8080
[GIN] 2021/02/15 - 19:57:13 | 200 |     452.175µs |             ::1 | GET      "/"
[GIN] 2021/02/15 - 19:57:14 | 404 |         660ns |             ::1 | GET      "/favicon.ico"

ブラウザでhttp://localhost:8080/にアクセスすると以下のように表示されるのが確認できます。

f:id:tweeeety:20210217212943p:plain

参考

おわりに

かなり爆速で試せたんではないでしょうか?
今回のリポジトリは以下です。

https://github.com/tweeeety/go-gin-sample

薄いと開始が早くて良いですね!
routingもいろいろできます。そのあたりを含めたAPI Sampleは公式をご確認ください。

【git】CentOS6にgitの2xをソースからインストールする

はじめに

ひさびさにさくらVPSに入ってみました。
CentOSもまだ6ですが、それ以外もいろいろ古い。

gitだけでも新しくしておこうと思ったのでメモです。

インストール手順

# バージョン確認 -> 古い
$ git --version
git version 1.7.1

# tar.gzをダウンロードして解凍する
$ cd /opt
$ sudo wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.9.5.tar.gz
$ sudo tar xzvf git-2.9.5.tar.gz
$ sudo rm git-2.9.5.tar.gz

# make, make installでインストール
$ cd git-2.9.5/
$ sudo make prefix=/usr/local all
$ sudo make prefix=/usr/local install

# バージョン確認 -> 新しい
$ git --version

他のバージョンは以下から確認できます。 https://mirrors.edge.kernel.org/pub/software/scm/git/

おわりに

ひさーーーしぶりにVPSに入ると何もかもが古い問題。。。

【linux】サーバ時間がズレていたのでntpdateで更新する

はじめに

ひっさしぶりにさくらVPSのlinuxにアクセス。

いろいろするものことごとくエラーになったので何かと思ったら時間がズレていました。

ということで時間を合わせるメモ

ntpdateで合わせる

以下のように確認しながら合わせます。

# 時間がズレている
$ sudo hwclock -r
Wed Sep  9 21:15:20 2020  -0.695846 seconds
$ date
Wed Sep  9 18:33:09 JST 2020

# serversを確認
sudo vim /etc/ntp
-- vi確認 --
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server ntp1.sakura.ad.jp 
------------

# ntpを更新
$ sudo ntpdate ntp1.sakura.ad.jp

# 時間が合う
$ sudo hwclock -r
Wed Sep  9 21:19:31 2020  -0.217525 seconds

$ date
Wed Sep  9 21:19:36 JST 2020

終わり

何事も、放置しておくのは良くないですね...!!

【mongodb】Mac OSにmongoDB Compassを入れてlocalのmongodに接続してみるメモ

はじめに

MongoDBを触っています。

MongoDB Compassという補助ツールを使ってみたのでそのメモです。

アジェンダ

  1. MongoDB Compassとは
  2. MongoDB Compassのインストール
  3. localのMongoDBを起動してconnectしてみる

1. MongoDB Compassとは

公式の説明を引用します。

The GUI for MongoDB. Visually explore your data. Run ad hoc queries in seconds. Interact with your data with full CRUD functionality. View and optimize your query performance. Available on Linux, Mac, or Windows. Compass empowers you to make smarter decisions about indexing, document validation, and more.

日本語訳は以下です。

  • MongoDBのGUIです。データを視覚的に探索します。
  • 秒単位でアドホッククエリを実行します
  • 完全なCRUD機能を使用してデータを操作します
  • クエリのパフォーマンスを表示して最適化します
  • Linux、Mac、またはWindowsで使用できます
  • Compassを使用すると、インデックス作成、ドキュメントの検証などについて、より賢明な意思決定を行うことができます

2. MongoDB Compassのインストール

インストールは簡単でGUIベースで行います。

https://www.mongodb.com/try/download を開きます。

  • Toolsを開きます。 f:id:tweeeety:20200823140312p:plain

  • MongoDB Compassメニューを開きます。 f:id:tweeeety:20200823140326p:plain

  • Downloadからdmgをダウンロードしてインストールします f:id:tweeeety:20200823140339p:plain f:id:tweeeety:20200823140352p:plain

  • MongoDB Compassを開きます

  • 初回は「信頼できない開発元」と表示されて開けない事があります
  • その場合は、Finder で「control」キーを押しながらクリックし、メニューから「開く」を選択します f:id:tweeeety:20200823140419p:plain

  • 初回のみ設定を聞かれるのでお好きに選択します f:id:tweeeety:20200823140434p:plain

3. localのMongoDBを起動してconnectしてみる

MongoDBのlocalインストール

インストールは以下の記事に記載したので割愛します。
ご参考ください。

MongoDBのlocal起動

MongoDB CompassでlocalのdatabaseにアクセスするにはMongodを起動する必要があります。

以下のようにコマンドラインから起動を行います。

# バックグラウンドで起動する
$ mongod --config /usr/local/etc/mongod.conf --fork

MongoDB Compassを起動して接続してみる

  • MongoDBを起動したらFill in connection fields individuallyを開きます。 f:id:tweeeety:20200823135129p:plain

  • host:localhostとport:27017を指定して接続します。

  • うまくいくと以下のようにdatabaseが表示されます。 f:id:tweeeety:20200823135021p:plain
portの確認

ちなみに、起動したmongodのportはコマンドで確認できます。
localhost:27017:の後ろがport番号です。

$ lsof -i | grep mongod
mongod    6767 tweeeety   10u  IPv4 0x312fce8f7738332d      0t0  TCP localhost:27017 (LISTEN)

MongoDBにDBとCollectionを追加して確認してみる

コマンドラインでdatabaseとcollectionを追加します。

# mongoをインタープリタを起動
$ mongo
MongoDB shell version v4.4.0
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("b25bcf88-775a-42e2-85ed-1bdf0cfea72a") }
MongoDB server version: 4.4.0

# databaseを利用(create)
>use sample_db

# collectionをinsert
> db.sample_collection.insert({ name:"hoge", email:"hoge@hoge.com"})
WriteResult({ "nInserted" : 1 })

# insertしたdataを確認
> db.sample_collection.find()
{ "_id" : ObjectId("5f41e9336e71e6323e1a30eb"), "name" : "hoge", "email" : "hoge@hoge.com" }
  • 追加したdatabaseとcollectionが表示されるかを確認します。
  • 左サイドバーの更新ボタンを押すと画面に表示されるのがわかります。 f:id:tweeeety:20200823135002p:plain

  • sample_dbをクリックするとcollectionが確認できます。 f:id:tweeeety:20200823134934p:plain

  • sample_collectionをクリックするとさきほど追加したdataが確認できます。 f:id:tweeeety:20200823134915p:plain

終わり

MongoDB Compass、だいぶ便利そうですね。\(^o^)/