Goの勉強 バージョン比較で遊んだから記事にしてみた編
こんにちは。たかしです。
今回も前回に引き続いて、Go言語とAmazon Web Service(AWS)の勉強です。
前回の記事はこちら
僕がGoの勉強をするのに使っている本はこちらです。kindle unlimited入っていると月額で読めますよ!
今回は「第2章 S3イベントの活用」を読み進めていきたいと思います。
S3とかシーケンスとかフォルダ構成とか
最初のほうは、S3の説明とかシーケンス図とかフォルダ構成の説明とかが書いてある。
S3はAWSが提供しているサービスのことで、こういうのもブログでまとめていくといいんだろうなぁ。いずれAWSのことも本格的な記事にしていこうかと思います。
シーケンス図とフォルダ構成は重要なことではあるけれども、そもそもGoを触ったことないので、ソース読んだり書いたりしながら参照していくことにしよう。
では、ソース作成…その前に
ソース作成に入ります。こういうのってどこまで書いていいのか難しいところですなぁ。重要そうなポイントをピックアップしていくレベルなら問題ないかな?
まずは、Goは1.11.2を使用するそうなので、自分の作業領域だけを1.11.2にしてほしいとのこと。手順に従って1.11.2を設定。
$ goenv local 1.11.2
goenv: version '1.11.2' not installed
インストールされてないから設定できんのかーい!
仕方ない。インストールして設定しますか。
$ goenv install 1.11.2
$ goenv local 1.11.2
$ goenv local
1.11.2$ goenv global
1.16.2
おーできたできた。「goenv local」は1.11.2だけど「goenv global」は1.16.2だ。
折角なので、「goenv local」と「goenv global」の違いを楽しんでみることにしよう。
今、「/home/ec2-user/work 」で作業をしている。つまりここのエリアでは、Go1.11.2が有効になっているわけだ。
$ pwd
/home/ec2-user/work
$ goenv local
1.11.2
$ go version
go version go1.11.2 linux/amd64
では、フォルダを移動した場合どうなるのだろうか?
試しにホームディレクトリに移動して、同じコマンドを実行してみよう。
$ cd ~
$ pwd
/home/ec2-user$ goenv local
goenv: no local version configured for this directory$ go version
go version go1.16.2 linux/amd64
ほー!なるほど!まず「goenv local」を実行すると「goenv: no local version configured for this directory」と言われる。つまり「ローカルバージョンの設定、このディレクトリではしていないですやん」とのこと。
そして、「go version」。「goenv local」でバージョン設定した「/home/ec2-user/work 」内では「1.11.2」。「/home/ec2-user」ではバージョンは「1.16.2」。つまり、環境構築時に設定した「go global」が有効になっているというわけ。
こうやって試すと、コマンドに意味が分かりやすいし楽しい。
と、なんかいい感じの記事になったので、いったんここで区切ります。
次回の更新では、続きのコーディング部分をやります!
ではまた。
Goの勉強 環境構築編
こんにちは。たかしです。
会社からの要望で、Go言語とAmazon Web Service(AWS)の勉強をすることになりました。
特に
ここを勉強してほしいと言われたことと、オススメ図書を教えてもらいましたので、まずはその本をやりながらブログ書いていこうかと思います。
ただの技術ブログだとつまらないので、読み物としても面白くなるように文章も頑張ります。
僕がオススメされた本はこちらです。kindle unlimited入っているので月額で読めました、ラッキー!
まずは環境構築…いきなり問題発生
さあ、まずは環境構築するか!ってことで「第一章 環境構築」を開く。
『macOSでの開発を前提としています』だと…?!
家ではWindowsを使っている僕。(しかも20代前半で買ってそろそろ10年くらい経つ)
しかも、第二章を確認するとこの環境構築の章で扱っているものをかなり扱っている模様。
Windows向けに同じものをインストールしていく必要がありそう…
そういえば、昔勉強するためにAWSのアカウント作ったなー。AWS環境にGoインストールして使うかー。と思い、自分のEC2環境に構築することに。
使用しているOSは、Linuxです。
というわけで、早速インストール。
ブログ書きながら進めたので、作業はだいたい3時間ほどかかりました。
書かなければすぐ終わると思います。笑
anyenv
$ git clone https://github.com/riywo/anyenv ~/.anyenv
$ echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(anyenv init -)"' >> ~/.bashrc
$ exec $SHELL -l
「exec $SHELL -l」が「exec $SHELL -1」に見えてしまい打ち間違い。コマンドが落ちてしまった。。。
再ログインするとこんなメッセージが表示された。
ANYENV_DEFINITION_ROOT(/home/ec2-user/.config/anyenv/anyenv-install) doesn't exist. You can initialize it by:
> anyenv install --init
念のため、初期化しておく。
$ anyenv install --init
Manifest directory doesn't exist: /home/ec2-user/.config/anyenv/anyenv-install
Do you want to checkout ? [y/N]: y
Cloning https://github.com/anyenv/anyenv-install.git master to /home/ec2-user/.config/anyenv/anyenv-install...
Cloning into '/home/ec2-user/.config/anyenv/anyenv-install'...
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 62 (delta 1), reused 1 (delta 0), pack-reused 57
Unpacking objects: 100% (62/62), done.Completed!
ふー。これで何とかなったのかな?
anyenvupdate
続いて、anyenvupdateを実行する。
$ mkdir -p $(anyenv root)/plugins
$ git clone https://github.com/znz/anyenv-update.git $(anyenv root)/plugins/anyenv-update
$ anyenv update
盛大にログ出るかと思ったら、結構あっけない量しかログが表示されなくて、本当にアップデートできているのか不安。笑
goenvとGo
いよいよGoのインストールだ。
goenvっていうのはGoのバージョン管理用のツールらしい。この本ではanyenv配下で管理をしていくとのこと。
$ anyenv install goenv
$ exec $SHELL -l
$ goenv install --list
インストールは、「goenv install --list」で表示されたバージョンの中から指定して実行するらしい。
使用している本はちょっと古いのでVer1.11.2らしい。
僕がこのブログ書いているときの最新はVer1.16.2 。
なので、1.16.2をインストールしておくことにします。
$ goenv install 1.16.2
利用するバージョンも指定する必要があるらしい。
「global」と「local」の二つがあって、システム全体で利用するなら「global」。特定ディレクトリ内なら「local」。という使い分けをするようだ。
システム全体で使いたいので、迷わず「global」で行けよ。行けばわかるさ。
$ goenv global 1.16.2
$ goenv global
1.16.2
本には書いてなかったけど、Goのバージョンを確認してみる。
うん。ちゃんと1.16.2になってる。
最後に、GOPATHを指定してあげる必要があるようだ。指定先はどこでもいいようなので、とりあえず作業領域に設定しておく。
$ export GOPATH=/home/ec2-user/work
$ printenv GOPATH
/home/ec2-user/work
exportで設定したけど、ログイン時に毎回設定するの面倒なので「.bash_profile」に書き込んじゃうか。
$ echo 'export GOPATH=/home/ec2-user/work' >> ~/.bash_profile
$ tail -1 ~/.bash_profile
export GOPATH=/home/ec2-user/work
これで次回からログインしても設定する必要ないかな。
pyenvとPython
この本では、Pythonのインストールも必要らしい。
pyenvというのはPythonのバージョン管理ツールとのこと。先ほど利用したgoenvと同じですね。(※爆乳戦隊パイレンジャーのパイではありません)
$ anyenv install pyenv
$ exec $SHELL -l
ここから先も、goenvと使い方同じですね。
バージョン確認して、バージョン指定でインストール。利用するバージョンの指定をするようだ。
$ pyenv install --list
最新版のPythonを入れたいところだが、このあとインストールする「aws-sam-cli」というののサポートがPython2.7と3.6をサポートしているらしい。だから3.6をインストール。すると思いきや、この本によると3.7でも問題なく動いたから3.7インストールしようぜ!とのこと。まあ、3.7でも最新版ではないのだけど、ここは本に従うことにする。
$ pyenv install 3.7.0
~~~
BUILD FAILED (Amazon Linux 2 using python-build 1.2.26)
~~~
make: *** [install] Error 1
ん?んんん???インストールエラー???
インストールできなかったら先に進めないけど、AWSに最初からPythonインストールされているならそれでいいよね。と思い、バージョン確認実施!
よかったー!最初からインストールされてたじゃん!しかもサポートされている2.7で。なんて喜んでいたら、この後利用する「pip」コマンドがPython3.6からじゃないと対応していないんだってさ。(ブログでは端折ってますが、2.7のまま突き進んでエラーになって調べた。)
というわけで、違う手順を使ってバージョンアップを試します。
参考にしたのはこちらの記事。
さあ、バージョンアップだ!
$ sudo yum update
$ sudo yum install python3 -y
OK!
$ python --version
Python 2.7.18
$ python3 --version
Python 3.7.9
おー、 Pythonで見ると2.7.18だけどPython3で見ると3.7.9だ。
GoとPythonのバージョン確認
anyenvでインストールしたものは一覧で確認とれるらしい。さっき調子に乗ってGoもPythonもバージョン確認してしまったけど、ここでも確認しておく。
$ anyenv version
goenv: 1.16.2 (set by /home/ec2-user/.anyenv/envs/goenv/version)
pyenv: system (set by /home/ec2-user/.anyenv/envs/pyenv/version)
pyenvの「system」はインストールした3.7.9のことを言ってくれているんだと捉えて次行きますー
aws-cli
AWSのサービスを操作するためのツールとして「aws-cli」というのを使うらしい。
$ pip install awscli
bash: pip: command not found
あれれ。pipなんてコマンドは無いよって言われてしまった。
調べてみたら、インストールしてくる必要がある様子。
$ curl -kL https://bootstrap.pypa.io/get-pip.py | python
~~~
ERROR: This script does not work on Python 2.7 The minimum supported Python version is 3.6. Please use https://bootstrap.pypa.io/pip/2.7/get-pip.py instead.
3.6以上じゃないとだめだよって言われた。うおーめんどくせーーーー!
でもさ、待ちたまえよ。「Python」でバージョン確認したら2.7だったけど、「Python3」で確認したら3.7だったよね。つまりこういうことだ…
$ curl -kL https://bootstrap.pypa.io/get-pip.py | python3
~~~
Installing collected packages: wheel, pip
Successfully installed pip-21.0.1 wheel-0.36.2
はいビンゴ!
では、再実行します。
$ pip install awscli
$ aws --version
aws-cli/1.18.147 Python/2.7.18 Linux/4.14.219-164.354.amzn2.x86_64 botocore/1.18.6
インストール成功!Pythonが2.7って表示されているのが気に食わないけど、まあいいでしょう。
クレデンシャルのセットが必要らしい。
$ aws configure
AWS Access Key ID [None]:
AWS Secret Access Key [None]:
Default region name [None]: ap-northeast-1
Default output format [None]:
とりあえずこれでOKかな?何か問題あったら都度修正しよう。
aws-sam-cli
続いて、aws-sam-cliをインストール。AWS Lambdaの実行とかができるようになるらしい。Dockerにも依存しているらしく。Dockerのインストールも必要。僕はDockerの勉強していたのでインストール済み。
続いて、環境変数のセット。
$ USER_BASE_NAME=$(python -m site --user-base)
$ export PATH=$PATH:$USER_BASE_NAME/bin
これも設定ファイルに書いておくか。
$ echo 'USER_BASE_NAME=$(python -m site --user-base)' >> ~/.bash_profile
$ echo 'export PATH=$PATH:$USER_BASE_NAME/bin' >> ~/.bash_profile
$ tail -3 ~/.bash_profile
export GOPATH=/home/ec2-user/work
USER_BASE_NAME=$(python -m site --user-base)
export PATH=$PATH:$USER_BASE_NAME/bin
バージョン確認
$ exec $SHELL -l
$ sam --version
SAM CLI, version 1.21.1
saw
ホラー映画ではなく、CloudWatch Logsに出力されるログをコマンド画面に流してくれるツールとのこと。
早速インストール。
$ pip install saw
これで完了かな。
direnv
特定のディレクトリ配下の環境変数を管理するためのツールらしい。
$ git clone https://github.com/direnv/direnv
$ cd direnv
$ sudo su
# make install
ほい。インストール完了。
シェルにフックを設定する。
ここら辺も設定ファイルに入れておこうかな。
$ echo 'export EDITOR=vim' >> ~/.bash_profile
$ echo 'eval "$(direnv hook bash)"' >> ~/.bash_profile
$ tail -5 ~/.bash_profile
export GOPATH=/home/ec2-user/work
USER_BASE_NAME=$(python -m site --user-base)
export PATH=$PATH:$USER_BASE_NAME/bin
export EDITOR=vim
eval "$(direnv hook bash)"
dep
Goの依存関係を管理するためのツールとのこと。
ただ、MACとLinuxでは手順が違う上にうまくインストールできなかったので、いったんパスします。
gig
使用している本の筆者さんが作ったツールらしい。
いよいよLinuxへのインストール方法がわからなかったのでこれもパス。
環境構築終了
これで環境構築終了!
depとgigはどうしても必要そうだったらインストール方法考えます。
今日はここまで!
次回は本の第二章部分を書きます。
時間かかるかもなので、のんびり更新してきます。
ではまた今度。
ブログ始めた
こんばんは。たかしです。
日々の勉強したことを、のんびりブログに書いていきたいと思います。
思っているだけです。続くように頑張ります。
書き方とかわからないので、しばらくはブログを書くための練習みたいな内容になるかと思います。
上手く書けるようになったら、本格的な内容をアップしていきますね。
ではまた。