golangの自作パッケージインポートと環境変数
前書き
タイトルを見て分かる通り今回は結構初心者向けです。 こんなの言われなくても分かるよ!って人も多いかも知れませんが僕自身これで結構詰まったので備忘録として書いていきます。
環境
golangのバージョンは以下の通りです
$go version go version go1.14.6 darwin/amd64 $go env GO111MODULE="on"
自作パッケージのimport
ファイル構造は以下のような感じです。
go/ ├hello/ │ ├ hello.go │ ├ go.mod │ └ go.sum │ └val/ │ ├ sample.go │ ├ go.mod │ └ go.sum ├go.mod └ go.sum
ここでhello.goの中からsample.goを呼び出したい時以下のようにファイルを書いて下さい。
go/hello/go.mod module local.com/hello-module go 1.14 replace local.com/hello-module/val => ./val
module local.com/hello-module
がローカルパッケージを使う方のパッケージ名
go 1.14
がgoのバージョン
replace local.com/hello-module/val => ./val
が左側のモジュールを、右に指定した相対パスに置き換えるように指定しています
またなんでモジュール名がlocal.com/hello-module/valのような名前になっているのかというと任意だがパスのルート部分(ドメイン名に該当する箇所)にドットが含まれている必要があるらしいです。URLみたいですね
そして最後にhello.goでimportしてあげれば完了です!
import local.com/hello-module/val
あとは好きなようにコードを書きましょう!!
環境変数
続いては環境変数について
今回使うのはenvconfigです。
環境変数は結構大事で間違えてgitにパスワードを載せてしまったりしないように(経験談)みんなも環境変数とgitignoreを使おうね
では例としてsample.goでenvconfigを使って環境変数を読み込む場合。実行ファイルであるhello.goと同じ階層に.envを置かないといけない。
go/ ├hello/ │ ├ hello.go │ ├ .env ←new │ ├ go.mod │ └ go.sum │ └val/ │ ├ sample.go │ ├ go.mod │ └ go.sum ├go.mod └ go.sum
次に.envファイルの書き方として
#config export DBMS=mysql export DBUSER=user export PASS=passwd export PROTOCOL=tcp(127.0.0.1:3306) export DBNAME=db export TIME="parseTime=true&loc=Asia%2FTokyo"
こんな感じで変数は全部大文字、値には""をつけてもつけなくてもいい。これをsample.goでどうやって読み込むか
以下に例をあげます。処理としてはgoでmysqlに接続してるだけ
sample.go package val import ( "github.com/jinzhu/gorm" "github.com/kelseyhightower/envconfig" "github.com/joho/godotenv" "log" // MySQL driver _ "github.com/jinzhu/gorm/dialects/mysql" "fmt" ) //Config DBに関する情報 type Config struct { Dbms string `required:"true"` Dbuser string `required:"true"` Pass string `required:"true"` Protocol string `required:"true"` Dbname string `required:"true"` Time string `required:"true"` } //GormConnect データベースの情報を記載/接続 func GormConnect() *gorm.DB { doterr := godotenv.Load() if doterr != nil { log.Fatal("Error loading .env file") } var config Config config_err := envconfig.Process("", &config) fmt.Println(config) if config_err != nil { log.Fatal(config_err.Error()) } CONNECT := config.Dbuser+":"+config.Pass+"@"+config.Protocol+"/"+config.Dbname+"?"+config.Time //データベースに接続 db,err := gorm.Open(config.Dbms, CONNECT) if err != nil { panic(err.Error()) } return db }
変数は戦闘だけ大文字であとはstructで型を指定したらよしなにやってくれます。
メール認証の実装方法を考えた
今回はメール認証を実装していきたいと思います。
実装内容
イメージとしてはこんな感じ
まず最初に、クライアントからメールアドレスを受け取ったら生成した認証コードとメールアドレスを仮のDBに保存する。
次に入力されたメールアドレスに対して認証コードを記載したメールを送る。
クライアントは受け取った認証コードを入力する。
その後仮DBにあるかの判定を行い、不備があったらエラーを返し、正常ならトークンを生成して本番DBに格納した後クライアントに対して発行する。
AWSハンズオン感想
先日とある企業のイベントに参加したのでその感想だったりやったことを書き留めていこうと思います。
やったこと
まず内容として
サーバー構築
まず最初のサーバー構築ですがAWSのインスタンスを生成しただけなのでここでは省略します。
ミドルウェアのインストール
今回はmemcachedというミドルウェアを使ったのですが正直ここはあまり理解できませんでした。なので後日触る機会があればちゃんとまとめます。
MySQLの起動(エラーログを見よう)
イベント主催側がMySQLの設定ファイルの値をわざと変更して起動できないようになっていました。ここからエラーログを見て値を正常値に戻して起動させてみ用途いう問題。
ミドルウェアに負荷をかけてみる
ここではmemslapコマンドを使ってミドルウェアに負荷をかけていた。実際にどのくらいcpuを使っているのか、実行までどれくらい時間がかかるかを測定しました。
SQLをチューニングしてみる
最後にチューニングですがここではSQL文が7つ用意されておりそれぞれ実行時間を省略するようにチューミングをするという問題。 問題1~6はそれぞれindexをつけることで実行時間が1秒をきり最後の問題はデータ全部を参照するようになっていてMySQLのキャッシュを有効にすることで速度が上がった。
感想
今回のハンズオンは一応授業でやったことのある知識が出てきたがなんと言うか授業でやる時と楽しさが全然違った。 当時は意味も分からずやっていた作業も実際にどう使われているのかを知ることでやる気も出た。
物語シリーズグッズ買ったぜ(久々の更新)
まじで更新忘れてましたー。
はてなブログって一ヶ月更新がなかったら通知がくるんですね。
いい機会なんで適当に呟きますよー
本題なんですがsupergroupiesという企業から物語シリーズのコラボグッズが売っていました。
今回コラボしたキャラは物語シリーズの主人公である阿良々木暦、メインヒロインの戦場ヶ原ひたぎ、主人公のパートナーであり吸血鬼の忍野忍、八九寺真宵、斧乃木余接たちですね。
コラボ商品はそれぞれのキャラをモデルにして腕時計、財布、鞄が出てます。
忍野忍モデル
私はこの中でも忍野忍が一番好きなんですけど少しデザインが派手というか私の好みではなかったです、、、
しかし忍野忍の金髪をモチーフにしたデザイン、財布の内装は忍野忍の好物であるドーナツをモチーフにしておりファンとしてはとても良いと思います。
斧乃木余接モデル
そこで他キャラの商品を見ていたんですがとっても良いデザインの財布がありました。
それは斧乃木余接の財布ですね。ブラックの生地にトレードマークである頭の上の人形の装飾がされておりパッと見てもアニメグッズとは思わないでしょう。
内装は斧乃木余接の神の色であるミント色、オレンジ色を使っており色合いがとても綺麗です。
早くこの財布を使って買い物してみたですね〜
nignxでphpを動かしてみる(前回の続き)
今回は前回にインストールしたphp,php-fpm,nginxを使ってphpを実行してみたいと思う。
phpとnginxの連携
参考文献
www.spiceworks.co.jp
上記のサイトで書かれているが、ngixでphpを動かすにはcgiがプログラムを動かすように設定する必要があります。
ここで登場するのがphp-fpmでありこれはphp-FastCGI Process Managerの略でありcgiです。
そもそもcgiとは
HTTPはステートレスなプロトコルであり、ただユーザーが指定した静的なファイル(HTML)を呼び出すと言う機能しかありません。
そのため、サーバー上でプログラムを動作させるために必要な仕組みとしてcgiがあります。
cgiの処理の流れとしては以下の様になる。
- クライアントがサーバーに対してファイルを要求する。
- サーバーはcgiを起動させプログラムを処理する。
- その結果をクライアントに渡す。
php-fpmはFastCGIぞ?
FastCGIとはCGIの問題点を解決したものらしいですね。
CGIはリクエストのたびにプロセスを起動しそれが終わったら終了させています。この場合起動、終了に時間がかかったりサーバーに負荷がかかります。そのためFastGCIはリクエスト毎に新しいプロセスを作成するのではなく永続的なプロセスを利用してリクエストの処理をします。
つまり前回紹介したphp-fpmの起動コマンドはphpファイルを実行させるために必要なコマンドだったってことですね
因みに
php-fpmの設定
/etc/php-fpm.d/www.confファイルを開こう。デフォルトだとuser,group,listenの欄がapacheにowner,listen.groupの欄がnobodyになってると思う。
ここを両方nginxに変えてあげよう。ポート接続からソケット接続に変更してあげよう。listen = 127.0.0.1:9000となっているところを/var/run/php-fpm/php-fpm.sockに変えたらおk。
user = nginx group = nginx listen = /var/run/php-fpm/php-fpm.sock listen.owner = nginx listen.group = nginx
nginxの設定
/etc/nginx/nginx.confファイルで以下のコードがコメントアウトされていると思う。なのでコメントアウトを取ってあげよう。
location ~ \.php$ { fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
またデフォルトではnginxのドキュメントルートは/usr/share/nginx/htmlとなっているが今回は/var/www/に変更してみた。
location / { root /var/www; index index.html index.htm index.php; try_files $uri $uri/ /index.php?$args; }
最後にphp-fpmとnginxを起動させさっき設定したドキュメントルートにphpファイルをおけば完了。
phpinfoを置くのが多いらしいので私もphpinfoを置いてみました。
ブラウザで[http//:ipアドレス]に接続して表示されたら終了です!
centos7にphp,php-fpmとnginx,(MySQL)を入れて動作確認(下準備)
今回は授業でサーバーを借りて、Nginx+MySQLを利用してWordPressを構築し公開と言う課題がでたのでそのした準備をまとめてみた。
基本最新バージョンをインストールする。
まずcentosのバージョン確認
cat /etc/redhat-releaseコマンドを利用してosのバージョンを確認
CentOS Linux release 7.7.1908 (Core)
とりあえずphpインストール
参考サイト
deep-blog.jp
ここでは一度remiリポジトリをインストールしてからphpをインストールしている。
その理由としてcentosの標準リポジトリではphp5系をインストールしてしまうからである。
yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
osによってコマンドの数字が変わってくるが今回はver7なので7となってる。
次にphpをインストール今回はphp7.4をインストールした。さらにライブラリも一緒にインストールした。
yum -y install --enablerepo=remi,remi-php74 php php-devel php-mbstring php-pdo php-mysql php-gd php-xml php-mcrypt
ちゃんとインストールされているか確認しよう
# php -v PHP 7.4.7 (cli) (built: Jun 9 2020 10:57:17) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies
php-fpm
参考文献
CentOS 7にPHP-FPM 7.4をインストール(Remi's RPM repository) - Qiita
php-fpmをインストールする。以下のコマンドでインストール可能
yum install -y --enablerepo=remi-php74 php-fpm which
phpはこれでおk
nginxのインストール
参考文献
qiita.com
centosのベースリポジトリにはnginxがないので最初にレポジトリ作成から行う。
sudo vi /etc/yum.repos.d/nginx.repo
このコマンドでファイルを作成し、以下の内容を書き込む。
[nginx] name=nginx repo baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/ gpgcheck=0 enabled=1
nginxのインストールコマンドは
sudo yum install nginx
バージョン確認
nginx version: nginx/1.19.0
centosでの起動、停止のコマンド
sudoは忘れない様に
//起動コマンド sudo systemctl start nginx //停止コマンド sudo systemctl stop nginx
MySQLのインストール
参考文献
qiita.com
例のごとくmysqlのリポジトリはcentosのベースリポジトリにはないのでMySQLの公式が公開してるリポジトリを追加する。
以下のコマンドでrpmファイルをインストールする。
yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
/etc/yum.repos.d配下にmysql-community-source.repoとmysql-community.repoがあるか確認、こいつらがあればリポジトリはおk。
MySQLのインストールは
yum info mysql-community-server
バージョン確認
#mysql -version mysqld Ver 5.7.30 for Linux on x86_64 (MySQL Community Server (GPL))
デドバを始めるならswitchはやめた方がいいかも
タイトルをみて察した人もいるだろうがDead by Daylight(デッドバイデイライト)についての記事を書いていく。
以下よりDead by Daylight(デッドバイデイライト)をデドバと略しています。
まず今回のお題は『switchはデドバを快適にプレイできるだけのスペックがあるのか』と言うことを話そうと考えている。
と言うのも、私自身かなりswitch版のデドバをプレイしているのだがラグや動きのもっさり感に不満を感じていた。そんな中pc版はswitchと比較にならないほど快適と聞いた。そこでpc版を購入し実際にプレイした時その差に驚いたので少し調べてみようと思い立ったわけだ。
軽〜くデドバの歴史について調べてみた。
引用元
ja.wikipedia.org
PC版は2016年6月に発売され、
PS4版、Xbox One版は2017年6月23日に発売、日本国内ではPS4版が2018年4月4日に発売
switch版は2019年9月24日に発売。
パソコン版デドバの要求スペック
このサイトによるとデドバの最低動作環境と推奨動作環境は以下の様になっている。
最低 | 推奨 | |
---|---|---|
OS | 64-bit Operating Systems (Windows 7, Windows 8.1) | 64-bit Operating Systems (Windows 7, Windows 8.1 or above) |
プロセッサ | Intel Core i3-4170 or AMD FX-8120 | Intel Core i3-4170 or AMD FX-8300 or higher |
メモリー | 8 GB RAM | 8 GB RAM |
グラフィック | DX11 Compatible GeForce GTX 460 1GB or AMD HD 6850 1GB | DX11 Compatible GeForce 760 or AMD HD 8800 or higher with 4GB of RAM |
ストレージ | 25 GB 利用可能 | 25 GB 利用可能 |
※一部省略
switch自体のスペック(非公式)
引用元
ja.wikipedia.org
CPU | ARM Cortex-A57 4コア+ARM Cortex-A53 4コア |
メモリ | 4GBのLPDDR4 |
GPU | 第2世代MaxwellアーキテクチャのCUDAコア |
ストレージ | 32GB |
比べてみよう
PC版のデドバの最低/要求スペックとswitchのスペックを比べるのはどうかと思うが、一応同じゲームだしそんなに軽量化できるのかって思うから比べてみた。
プロセッサ(CPU)性能
CPUには大きく分けて「制御」と「演算」の2つの機能処理を行っている。そのため、CPUの性能が高ければ高いほどパソコンはサクサク動く。
ARM Cortex-A57 4コア+ARM Cortex-A53 4コア | Core i3-4170 | |
---|---|---|
コア数 | 8コア | 2コア |
動作周波数 | 1GHz | 3.70HGz |
コア数が多いほど同時に多くの処理が行える。switchはCortex-A57 4コア+ARM Cortex-A53 4コアで8コアとなっており
Cortex-A57がメイン処理を担い、Cortex-A53は省電力で負荷の小さい処理を行うように役割分担している様だ。
対してCore i3-4170は2コアである。
次は動作周波数だが数値が高いほど処理速度が高く実行能力が高くなる。
switchの1GHzに対してCore i3-4170は3.70HGzとなっておりCPU自体の性能はそこまで変わらない様に見える。
グラフィック(GPU)性能
第2世代MaxwellアーキテクチャのCUDAコア | DX11 Compatible GeForce GTX 460 1GB | |
---|---|---|
FLOPS | 157.2GFLOPS(ドック時393.2GFLOPS) | 907.2GFLOPS |
FLOPSはFLOPSは1秒間に何回浮動小数点数演算ができるかの単位で、どの程度のポリゴン数を1秒間何フレーム描画できるかを表す。
これも高ければ高いほど良い。
switch版とPCを比較した際およそ三倍もの差がみられる。
メモリ
メモリはよく机の広さに例えられる、CPUで処理する情報を貯めておく領域の広さのことを示す。これも大きければ大きいほどよい。
switchは4GBに対してPCは8GBである。
全体的に見て
あくまでこれらの比較はswitch版デドバの要求スペックがPC版の要求スペックと同程度と言う前提のもとで成り立っている。だが同じゲームだしそこまで変わらんだろ(適当)と割り切って書くことにした。
さらに、switchはFPS(フレームレート)が30FPSしかなく無線環境が多いのでそれらの要因もラグを生んでいると思う。