tweeeetyのぶろぐ的めも

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

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^)/

【mongodb】Mac OSにmongodbをinstallするメモ

はじめに

久しぶりにMongoDBを触ろうと思いおもむろに
brew install mongodb
としたらエラー。

どうやらHomebrew Coreから消えたようです。
ということでinstallメモ

アジェンダ

  1. どんなエラーか
  2. brew tapからinstallする
  3. brew tapからinstall時のエラー

1. どんなエラーか

brew install だと以下のようなエラーが出ます。

$ brew install mongodb
Updating Homebrew...
Error: No available formula with the name "mongodb"
==> Searching for a previously deleted formula (in the last month)...
Warning: homebrew/core is shallow clone. To get complete history run:
  git -C "$(brew --repo homebrew/core)" fetch --unshallow

Error: No previously deleted formula found.
==> Searching for similarly named formulae...
Error: No similarly named formulae found.
==> Searching taps...
==> Searching taps on GitHub...
Error: No formulae found in taps.

2. brew tapからinstallする

改めて公式を見返すと、installや使い方などはちゃんと記載がありました。

brew tapにて公式以外のリポジトリをフォーミュラとしてHomebrewに追加してからinstallを行います。

# tapをする
$ brew tap mongodb/brew
Updating Homebrew...
==> Tapping mongodb/brew
Cloning into '/usr/local/Homebrew/Library/Taps/mongodb/homebrew-brew'...

# installを行う
$ brew install mongodb-community
Updating Homebrew...

-- 省略  

To have launchd start mongodb/brew/mongodb-community now and restart at login:
  brew services start mongodb/brew/mongodb-community
Or, if you don't want/need a background service you can just run:
  mongod --config /usr/local/etc/mongod.conf
==> Summary
🍺  /usr/local/Cellar/mongodb-community/4.4.0: 11 files, 136.7MB, built in 2 seconds
==> Caveats
==> mongodb-community
To have launchd start mongodb/brew/mongodb-community now and restart at login:
  brew services start mongodb/brew/mongodb-community
Or, if you don't want/need a background service you can just run:
  mongod --config /usr/local/etc/mongod.conf

3. brew tapからinstall時のエラー

brew install mongodb-communityでエラーが出る場合

brew install mongodb-communityで以下のようにエラーが出る場合、すなおにbrew install gccを行いましょう。

# mongodb-communityでインストール
$ brew install mongodb-community
Updating Homebrew...
==> Installing mongodb-community from mongodb/brew
==> Downloading https://fastdl.mongodb.org/tools/db/mongodb-database-tools-macos-x86_64-100.1.1.zip
######################################################################## 100.0%
==> Downloading https://fastdl.mongodb.org/osx/mongodb-macos-x86_64-4.4.0.tgz
######################################################################## 100.0%
==> Installing dependencies for mongodb/brew/mongodb-community: mongodb-database-tools
==> Installing mongodb/brew/mongodb-community dependency: mongodb-database-tools
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
Error: An exception occurred within a child process:
  CompilerSelectionError: mongodb/brew/mongodb-database-tools cannot be built with any available compilers.
Install GNU's GCC:
  brew install gcc`

brew install gccでエラーが出る場合

brew install gccで以下のようにエラーが出る場合、Command Line Toolsをインストール or インストールしなおす必要があるようです。

ぼくはinstallしていたのですがエラーが出たのでinstallしなおしました。
installはxcode-select --installで行います。

# gccをインストール
$ brew install gcc
Updating Homebrew...
==> Downloading https://homebrew.bintray.com/bottles/gmp-6.2.0.catalina.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/2e6acd6e62d1b8ef0800061e113aea30a63f56b32b99c010234c0420fd6d3ecf?response-content-disposition=attachment%3Bfilename%3D%22gmp-6.2.0.catalin
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/isl-0.22.1.catalina.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/b5319e3bbbb36ef3536d841999b7497b3dce4bf9e07fb04f6b0db716e087896d?response-content-disposition=attachment%3Bfilename%3D%22isl-0.22.1.catali
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/mpfr-4.1.0.catalina.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/5fcf57834f58c18761c6c7b0eb961eb7f9fc54325b5361bf3a17c4dee6ebc08a?response-content-disposition=attachment%3Bfilename%3D%22mpfr-4.1.0.catali
######################################################################## 100.0%
==> Downloading https://homebrew.bintray.com/bottles/libmpc-1.2.0.catalina.bottle.tar.gz
######################################################################## 100.0%
Warning: Building gcc from source:
  The bottle needs the Xcode CLT to be installed.
==> Downloading https://ftp.gnu.org/gnu/gcc/gcc-10.2.0/gcc-10.2.0.tar.xz
######################################################################## 100.0%
Error: The following formula
  gcc
cannot be installed as binary package and must be built from source.
Install the Command Line Tools:
  xcode-select --install

インストールしなおした一連

Command Line Toolsはわりと時間がかかります。
15 ~ 30minほどみておくと良いでしょう。

# Command Line Toolsをインストール
$ xcode-select --install
xcode-select: note: install requested for command line developer tools

# gccをインストール
$ brew install gcc

# mmongodbをtapする
$ brew tap mongodb/brew

# mongodb-communityをインストール
$ brew install mongodb-community

4. mongodの起動

mongoの起動は、configファイルを指定してbackground processで起動します。
configファイルを見ればわかりますが、dbファイルは/usr/local/var/mongodbにあります。

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

# 起動を確認
$ ps aux | grep mongo
tweeeety  5730   0.2  0.1  5531164  22884   ??  S     3:54AM   0:00.68 mongod --config /usr/local/etc/mongod.conf --fork
tweeeety  5744   0.0  0.0  4278540    724 s009  S+    3:54AM   0:00.00 grep mongo

# confを確認
$ cat /usr/local/etc/mongod.conf
systemLog:
  destination: file
  path: /usr/local/var/log/mongodb/mongo.log
  logAppend: true
storage:
  dbPath: /usr/local/var/mongodb
net:
  bindIp: 127.0.0.1

終わり

数年前はどうしてたっけ?と自分のブログを見返してみました。
ソースからinstallしてたので、まあ時代は変わるよなーと思いました。

【github】二段階認証後にprivate repositoryのgit cloneで失敗するときの対応メモ

はじめに

しばらくManagementや組織開発を行っていました。
久しぶりに開発環境を作る必要がありcloneから…と思ったらいきなりコケたのでそのメモです。

条件は以下:

  • 個人のgit設定は問題がない
  • Private Organization
  • Private Repository
  • 二段階認証済み

アジェンダ

  1. エラーの状態と原因
  2. How to

1. エラーの状態と原因

エラーはこんな感じ

$ git clone git@github.com:yyyy/xxxx.git
Cloning into 'xxxx'...
ERROR: The 'yyyy' organization has enabled or enforced SAML SSO. To access
this repository, you must use the HTTPS remote with a personal access token
or SSH with an SSH key and passphrase
that has been whitelisted for this organization. Visit
https://docs.github.com/articles/authenticating-to-a-github-organization-with-saml-single-sign-on/ for more information.

fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

原因は、ERRORに記載のある通りですが訳を載せておきます。

The 'yyyy' organization has enabled or enforced SAML SSO. To access this repository, you must use the HTTPS remote with a personal access token or SSH with an SSH key and passphrase that has been whitelisted for this organization.
 
'yyyy'組織はSAML SSOを有効化または適用しています。このリポジトリにアクセスするには、個人用アクセストークンでHTTPSリモートを使用する必要があります。 または、この組織のホワイトリストに登録されているSSHキーとパスフレーズを使用してSSHを実行します。

2. How to

大まかに以下の順で設定を行います。

  • tokenを設定
  • tokenを保存
  • SSO連携を行いAuthorizeする
  • https x tokenでgit cloneを行う

tokenを設定

tokenを設定するために、 githubにログインして以下の順に開きます。

  • Settings
  • 左サイドバー > Developer settings
  • 左サイドバー > Personal access tokens
  • Generate new tokenボタン

以下の画面を開き、
Generate new tokenボタンからtokenの設定を行います。 f:id:tweeeety:20200818035049p:plain

次の画面にて以下を行います。

  • Personal Tokenに対するNoteに任意の文字列を入力
  • Select scopes(チェックボックス)をすべてチェック
  • Generate tokenボタンでtoken作成

f:id:tweeeety:20200818035037p:plain

tokenを保存

tokenが生成されると、次の画面が表示されます。
緑背景の部分がtokenですが、一度しか表示されないのでコピペするなりして保存します。

f:id:tweeeety:20200818035025p:plain

SSO連携を行いAuthorizeする

Enable SSOのプルダウンを選択します。
SSOが必要なorganizationsが表示されているのでAuthorizeを行います。

f:id:tweeeety:20200818035012p:plain

https x tokenでgit cloneを行う

ターミナルに戻りhttpsでgit cloneします。

UsernameとPasswordを聞かれるので、Passwordに保存したtokenを利用して認証します。

$ git clone https://github.com/yyyy/xxxx.git
Cloning into 'xxxx'...
Username for 'https://github.com':
Password for 'https://tweeeety@github.com':
remote: Enumerating objects: 158, done.
remote: Counting objects: 100% (158/158), done.
remote: Compressing objects: 100% (136/136), done.
remote: Total 7465 (delta 75), reused 82 (delta 22), pack-reused 7307
Receiving objects: 100% (7465/7465), 1.24 MiB | 1.41 MiB/s, done.
Resolving deltas: 100% (3699/3699), done.

終わり

git cloneみたいな最初でコケると「アレ、だいぶ忘れてるな…」と思いますねー。

【node】npmパッケージ nodemonを使ってみるメモ

はじめに

Node.jsの開発時、ソースコードの修正のたびに手動でctrl + c/d -> node main.jsしていると思います。
この一連の監視と再起動を自動で行ってくれるパッケージnodemonを使うメモです。

アジェンダ

  1. nodemonとは
  2. nodemonのインストール
  3. nodemonの実行方法

1. nodemonとは

はじめにでも触れましたが、
nodemonとは、ソースコードの変更を監視し、自動的にnodeコマンドを再起動してくれるnpmパッケージです。

詳細は本家をご確認ください。

2. nodemonのインストール

nodemonのインストールは2通りあります。

2.1. グローバルにインストールする(dependency)
2.2. 開発用だけにインストールする(devDependency)

2.1. グローバルにインストールする(dependency)

$ npm install -g nodemon

2.2. 開発用だけにインストールする(devDependency)

$ npm install --save-dev nodemon

3. nodemonの実行方法

利用もいくつか方法があります。

3.1. グローバルインストールした場合
3.2. 開発用だけにインストールした場合

3.1. グローバルインストールした場合

グローバルにインストールすると、PATHが通るのでコマンドがそのまま使えます。

$ nodemon main.js

3.2. 開発用だけにインストールした場合

開発用にだけインストールした場合、PATHが通っていません。
そのため、実行方法は大きく3通りあります。

  • package.jsonのscriptsを通して実行
  • npx経由で実行
  • 手動実行
package.jsonのscriptsを通して実行

一般的な実行方法です。
package.jsonのscriptsは後述する手動実行をかわりに行ってくれます。

# "start"行を追加
$ vim package.json
-- vim --
  "scripts": {
    "start": "nodemon main.js",
    "test": "echo \"Error: no test specified\" && exit 1"
   }
---------

# 実行
$ node start
npx経由で実行

npmにはnpxというコマンドが同梱されています。
npxを使うと、ローカルにインストールしたnpmパッケージを、npxコマンドだけで実行できるようになります。

$ npx nodemon main.js
手動実行

nodemonの実態は./node_modules/nodemon/bin/nodemon.jsにあります。
また、npmインストールを行うと実行用のファイルも別途生成されています。

# 実態ファイルの確認
$ ls -l ./node_modules/nodemon/bin/nodemon.js
-rwxr-xr-x  1 tweeeety  tweeeety  438 10 26  1985 ./node_modules/nodemon/bin/nodemon.js

$ 実行ファイルの確認
$ ls -l ./node_modules/.bin/nodemon
lrwxr-xr-x  1 tweeeety  tweeeety  25  6 13 03:35 ./node_modules/.bin/nodemon -> ../nodemon/bin/nodemon.js

つまり、実行用ファイルを通して実行する場合は以下のように行います。

$ ./node_modules/.bin/nodemon main.js

参照

終わり

nodemon便利\(^o^)/