GitLab Privateリポジトリより go get してみる

自分が作成したGitLabリポジトリより go get する方法をメモ

実行環境

GitLabリポジトリ作成

  • https://gitlab.com/へログインし、プロジェクトを作成
  • Visiblity Level を [Private]に設定
  • 今回は、ProjectName を "go-package"とする gitlab プロジェクト作成

今回go get する自作パッケージを配置

  • リポジトリよりクローン
  • go mod init XXXX でgo.mod を生成
  • mathディレクトリ内に、自作"math"パッケージを作成
    • mathパッケージは平均を返す関数"Average"のみ実装
$ git clone https://gitlab.com/xxxxxx/go-package.git
$ cd go-package.git
$ go mod init gitlab.com/xxxxx/go-package # 自分のリポジトリに合わせて編集する
# /go-package/go.mod

module gitlab.com/xxxxx/go-package

go 1.15
# /go-package/math/math.go

package math

// Average 平均値を返す
func Average(s []int) int {
    total := 0
    for _, v := range s {
        total += v
    }
    return int(total / len(s))
}
# ディレクトリ構成
go-package
│  go.mod
└─math
  └─math.go

AccessToken作成

go get でインストール

確認のため適当なプロジェクト作成

$ mkdir goproject
$ cd goproject
$ go mod init main

AccessToken登録

  • ~/.netrcを作成
    • GITLAB_USERNAME: GitLabにログインしているユーザ名
    • ACCESS_TOKEN: 先ほど作成したAccessToken
# ~/.netrc

machine gitlab.com
  login GITLAB_USERNAME@gitlab.com
  password ACCESS_TOKEN

環境変数 設定

$ set GOPRIATE=gitlab.com/xxxxxx/go-package

いざ、go get

  • イントールされたファイルは、$GOPATH\pkg\mod\gitlab.com\xxxxxx\go-package@v0.0.0 に配置される
$ go get gitlab.com/xxxxx/go-package
# /goproject/go.mod

module main

go 1.15

require gitlab.com/xxxxxx/go-package v0.0.0 // indirect

プロジェクトへインポート

  • 適当なgoファイルmain.goを作成し、自作パッケージをインポート
  • math/Average関数を実行し、平均値計算結果が出力される
# main.go

package main

import (
    "fmt"

        // インポート
    "gitlab.com/xxxxxx/go-package/math"
)

func main() {
    fmt.Println(math.Average([]int{1, 2, 3}))
}
# 結果
2

GOPRIVATEを設定しなかった場合

  • 503 Service Unavailable エラーが返ってくる
go get gitlab.com/xxxxxx/go-package: unrecognized import path "gitlab.com/xxxxxx": reading https://gitlab.com/xxxxxx?go-get=1: 503 Service Unavailable

pipenv + Flask 簡単なwebアプリケーション作成

f:id:wood__stock:20210629220219p:plain
最近初めてpipenvを使い仮想環境とパッケージ管理を行えることを知ったので、メモ。

pipenvとは

仮想環境作成(venv)とパッケージ管理(pip)が合わさったもの

実行環境

準備

pipenvインストール

pipコマンドでインストール

pip install --upgrade pip # pipアップグレード(必要に応じて)
pip install pipenv

プロジェクトファイル作成

mkdir project
cd project

仮想環境作成

使用するpythonバージョンに応じて選択(選択したバージョンのpythonがインストールされていること)
実行すると、~/.virtualenvs/project-XXXXXXに仮想環境が作成され、プロジェクト内にPipfileが作成される

# 仮想環境作成
pipenv --three # python3で作成
pipenv --two # python2で作成
pipenv --python 3.8 # バージョンを指定して作成
# project\Pipfile
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]

[dev-packages]

[requires]
python_version = "3.9"

作成する場所を変更する場合

たとえば以下のように変更したい場合、それぞれ環境変数を設定

仮想環境を作成するディレクトリを変えたい

# .\venv\project-XXXXXX に作成
# WORKON_HOME
set WORKON_HOME=%USERPROFILE%\venv 

プロジェクト内に作成したい

# project\.venv\project-XXXXXX に作成
# PIPENV_VENV_IN_PROJECT
set PIPENV_VENV_IN_PROJECT=true

Flaskプロジェクト作成

インストール

仮想環境にFlaskをインストールすると、Pipfile.lockが作成されインストールしたときのバージョンや依存関係のパッケージが記載される。Pipfile.lockは他のPCで同じ環境を再現する時などに使用。

# Flaskインストール
pipenv install flask
# Pipfile
[packages]
flask = "*"

アプリ作成

簡単に"HelloWorld"を返すアプリを作成

# project\app.py
from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    return "HelloWorld!"

仮想環境で実行

仮想環境に入り、アプリを実行

# 仮想環境へ入る
pipenv shell

# Flask起動
(.venv)flask run
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

# ブラウザで'http://localhost:5000'にアクセス
# 'HelloWorld'

# 仮想環境を抜ける
(.venv)exit