Zennに移行します。
エンジニア要素の投稿がほとんどですので、 今後のブログ投稿はZennに移行します。(していた。)
Goを複数バージョンインストールする
はじめに
これまでは、バックエンドの開発でgo1.17系を使っていましたが、別アプリケーションの開発をすることになりました。 そちらのアプリケーションではgo1.18で作成されていたため、最初の環境構築時にGoのバージョン違いによりエラーが発生しました。 今後もこれまで関わっていたアプリケーションの開発を行う可能性もあるため、複数Goバージョンでの開発が必要になり実施することにしました。
結論
複数バージョンのインストールする、というタイトルとは矛盾しますが、 下記にあるように、Go言語は後方互換性を保っているため、 特別な理由が無い場合は複数バージョン持たずに最新版をインストールしておけば問題ありません。 セキュリティ面や不具合等によっては互換性が保てない場合も出てくる可能性はありますが、これまでのところ出てはいないようです。
インストーラでインストール
現在のバージョンをアンインストール後、ダウンロードページにて最新版を取得してイストールしましょう。 アンインストールは下記のように直接ディレクトリを削除することで完了します。
rm -rf /usr/local/go
brewでインストール
# 最新版にアップグレード brew upgrade go
バージョンを指定する場合
# アンインストール brew remove go # バージョンを指定してインストール brew install go@1.18
とはいえ
テストコードが十分ではないアプリケーションのバージョンを気軽に上げるのはやはり抵抗はありますよね? また、ベータバージョンのGoで搭載される新機能を試してみたい場合、 ローカルのバージョン上げてしまうと、プロダクトの開発で使用しているバージョンと異なってしまうため、業務に支障をきたします。 ということで、複数バージョンをインストールできる方法を知っておくと便利です。
バージョンが異なることでどんなエラーが発生するか
複数バージョンのインストール方法の前に、バージョンが合わない場合に、どのようなエラーが表示されるかを示しておきます。
go mod tidy
エラーが出て実行できません。
go mod tidy go mod tidy: go.mod file indicates go 1.18, but maximum supported version is 1.17
go mod vendor
特にエラー発生せず。vendorディレクトリが作成されます。
go run
こちらも特にエラー発生せず。アプリケーションも動作しました。
go test
注意は出ますが、一応テストは実行可能。※下記「note:」の部分 上位バージョン特有の書き方が実行ファイルに存在する場合はエラーになるかもしれません。
go test ./... 〜〜 中略 〜〜 note: module requires Go 1.18 ? app/path [no test files] ? app/path/one [no test files] ok app/path/two 0.532s
複数バージョンのインストール
他のプログラム言語では、複数バージョン管理するために○○env的なパッケージを用いるのが多いです。 Goにもgoenvなるものがありますが、公式で提示されている方法がありますので、そちらで実施していきます。
下記のコマンドでの[バージョン]の部分を好きなバージョンに変えて実行すればOKです。
$ go install golang.org/dl/go[バージョン]@latest $ go[バージョン] download
インストール可能なバージョンについては、ダウンロードページを確認することで、存在するバージョン番号を知ることができます。
現時点の最新版はgo1.19.1、1.18系の最新版は、go1.18.6となっています。 go1.18の場合は下記のコマンドになります。
go install golang.org/dl/go1.18.6@latest go1.18.6 download # バージョン確認 go1.18.6 verion go version go1.18.6 darwin/amd64
続けてgo1.17もインストールしてみます。 go1.17の最新版は1.17.13なので下記のコマンドです。
go install golang.org/dl/go1.17.13@latest go1.17.13 download # バージョン確認 go1.17.13 version go version go1.17.13 darwin/amd64
ということで複数バージョンのGoをインストールすることができました。
使い方
各バージョンのGoを実行するには、goの後ろにインストールしたバージョンを付けてコマンドを実行することになります。
go1.18.6 verion go1.18.6 env GOROOT go1.18.6 run main.go ...etc
アンインストール
ダウンロードしたバージョンをアンインストールするには、 GOROOT環境変数で指定されたディレクトリを削除するだけです。
インストールしたGoはインストーラでインストールした場合と異なり$HOME/sdk 配下に保存されています。
Goのアンインストール
goのインストール先の確認
go1.18.6 env GOROOT
ディレクトリ削除
rm -rf $(go1.18.6 env GOROOT)
/etc/paths.d/goを削除する
rm -rf /etc/paths.d/go
おまけ
Go 2.0が登場すると今回の記事の内容がより活用できる場が増えるかもしれません。 Goは2月と8月にマイナーバージョンが上がりますので、 予定通りであればGo 1.20は、2023年2月のリリースとなります。
下記の記事ではGo 1.20がGo 2.0となるような内容にも読めるため、 来年Go 2.0がリリースされるかもしれませんね。
reviewdogのmisspellとalexでエラーが発生したのを解決した件
事象
本日PullRequestした際の、CIでreviewdog/misspellとreviewdog/alexのエラーが発生
reviewdog: PullRequest needs 'git' command: failed to run 'git rev-parse --show-prefix': exit status 128
reviewdogのイシューも立ってるようで、割とリアルタイムにコミットされてそうなので、 このまま順調にマージされれば、対応版がすぐ出てきそうな雰囲気ですね。
https://github.com/reviewdog/reviewdog/issues/1158
解決策(暫定)
CIのyamlに下記を追記
- run: sudo chown -R root:root $GITHUB_WORKSPACE
全体
misspell: name: runner / misspell runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - run: sudo chown -R root:root $GITHUB_WORKSPACE - uses: reviewdog/action-misspell@v1 with: github_token: ${{ secrets.github_token }} reporter: github-pr-review level: warning locale: "US" alex: name: runner / alex runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - run: sudo chown -R root:root $GITHUB_WORKSPACE - uses: reviewdog/action-alex@v1 with: github_token: ${{ secrets.github_token }} reporter: github-pr-review level: warning
原因
Githubのセキュリティ アップデートが4/12にあったようで、これの影響ということらしい。
Git security vulnerability announced | The GitHub Blog
Cannot add parent directory to safe.directory on git - Stack Overflow
JavaScript学習に役立つサイト(入門用)
無料で学習できるサイト
基礎部分に関して言えば現状ではYouTubeに公開されている入門系の動画が一番わかりやすいと思います。
Youtube
- JavaScript超入門コース 合併版【JavaScriptの超基本的な部分をたった1時間で学べます】【プログラミング初心者向け入門講座】 - YouTube https://www.youtube.com/watch?v=gs0l4rsQCGM
javascriptの基礎となる文法をとても分かりやすく解説されています。
- JavaScriptの「基礎」が1時間で分かる「超」入門講座【初心者向け】 - YouTube https://www.youtube.com/watch?v=E08jeQBa1D0
サンプルコードの実装を行っていますので、とても理解しやすいです。
動画内ではbootstrapの導入についても触れていますので、簡単なデザインの適用についても学べます。
- 【JavaScript超入門講座】わずか50分で知識ゼロから基礎をマスター! - YouTube https://www.youtube.com/watch?v=QCjFPSO96RU
こちらもサンプルコードの実装を行いながらなので分かりやすいです。
コードのテキスト内容が面白いので楽しみながら進められます。
Progate
JavaScript I はすべて無料 JavaScript II以降は最初のいくつかが無料
ドットインストール
CloudSQLへMySQLのデータをインポート(DBeaver)
はじめに
MySQLのDumpデータをGCSに置いてCloud SQLにインポートします。
DBeaverがあればGUIベースで完結できます。
事前準備
Dump取得
DBeaverからdumpを取得します。
GUIベースで説明してますが、コマンドでもイケると思う。
# 全テーブル mysqldump --single-transaction --routines --add-drop-table --extended-insert -u <ユーザ名> --host=<ホスト> --port=3306 <DB名> # テーブル指定 スペース区切りでテーブルを指定する mysqldump --single-transaction --add-drop-table --extended-insert -u <ユーザ名> --host=<ホスト> --port=3306 <DB名> <テーブル名> [<テーブル名> ...]
Dump databaseを選択
データベースを開いて、テーブルの一覧からどれでも良いのでテーブルを選択して右クリック
ツール ー> Dump databaseをクリック
テーブルを選択
必要に応じてテーブルにチェックして次へ
全部インポートしたい場合はAllで選択
出力の指定
Execution Method:Online backup in single transaction を選択
※デフォルトのNomal(no lock)だと権限の問題かエラーとなる。
Settings:Disable keysのチェックを外す
※チェックがついているとPrimary Keyなどの情報がdumpから落ちてしまう。
開始
しばし待つ
バケットにアップロード
Cloud SQLへインポート
- インポートしたいインスタンスのページを表示
ページ上部のインポートをクリック
インポートしたdumpファイルを選択
インポートするデータベースを選択
インポートボタンクリック 開始
Chromeでmailtoが反応しないので対応してみた。
はじめに
mailto周りの修正をした際に動作確認したところChromeで反応しなかったので原因を調べ解決しました。
今まで反応していなかった方が問題ですが・・・ gmailだけなのか不明
Gmail設定
ひし形が二つ重なったアイコンをクリックすると下記のようなポップアップが表示されるので「許可」を選択します。
すでにgmailを開いている場合、下記のような表示になる場合があるので、「許可」を選択しましょう。
アイコンが表示されない場合はすでに許可済みか拒否済みなので次のChrome設定を確認します。
Chrome設定
設定よりプライバシーとセキュリティをクリックし、サイトの設定を選択
「権限」よりその他の権限をクリックし詳細を開き、プロトコルハンドラを選択
「サイトがプロトコルの処理を要求できるようにする」が選択されていることを確認
「サイトにプロトコルの処理を許可しない」が選択されている場合は、
「サイトがプロトコルの処理を要求できるようにする」を選択した後、Gmail設定の操作を行います。
「プロトコルの処理を許可しないサイト」の欄にmail.google.comが存在している場合、
×ボタンをクリックし一度削除した後、Gmail設定の操作を行います。
下記のように、「メール」の欄にmail.google.comが存在していればOK
上記でもまだメールが開かない場合、拒否設定となっている場合があるため、
再度プロトコルハンドラの設定を開き、
mail.google.comの右にある縦3つの点「・・・」をクリックし、「デフォルトとして設定」をクリックします。
これにてmailtoが反応するようになります。
ちなみにmailtoでgmailを開くと下記のような表示になります。