エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

WindowsのVSCodeでGitbashを使った際に.gitbash_profileが読み込まれない

環境

VScodeのバージョン情報より転記

バージョン: 1.43.2 (system setup)
コミット: 0ba0ca52957102ca3527cf479571617f0de6ed50
日付: 2020-03-24T07:38:38.248Z
Electron: 7.1.11
Chrome: 78.0.3904.130
Node.js: 12.8.1
V8: 7.8.279.23-electron.0
OS: Windows_NT x64 10.0.18362

問題

.gitbash_profileにalias ll="ls -la"を登録しているはずなのだが、vscodeのターミナル(gitbash)でllを実行しても、command not foundになる。。。

原因

gitbashがログインシェルとして実行されていないため、.gitbash_profileが読み込まれていないらしい。

対応

settings.jsonに、下記の内容を追加する。
この指定の意味は、terminal.integrated.shell.windows に指定した実行ファイルの引数に何を指定するのかの設定だと思う。(挙動や設定名から推察)

"terminal.integrated.shellArgs.windows": ["-l"]

次回以降、ターミナル起動時に.bash_profileが読み込まれるようになる。

感想

llが使えなくて、意味がわからんかった。。。
どうでもいいことに悩んでしまった気がする。

何気なく.bash_profileを使っていたが、ログインシェルという仕組みで読み込まれていたのが初めて分かった。
あんまり深く考えたことはなかったので、勉強になった。

参考サイト

Windows の VSCode で GitBash ターミナルを開いた時に .bash_profile が読み込まれない - Corredor

ログインシェルとインタラクティブシェルと~/.bashrc達の関係 - Qiita

【Python】virtualenvの使い方まとめ

きっかけ

仕事でpython使うようになって、環境作る際にvirtualenv使っているのだが、よく使い方を忘れるのでまとめる。

virtualenvとは?

python開発のための仮想環境作成ツール

なぜvirtualenvを使うのか?

  • 開発機の環境を汚さずに済む
  • ライブラリの依存関係に悩まなくていい
  • 環境を再構築しやすい

前提

python, pipがインストール済みであること。

自分の環境

OS

>ver
Microsoft Windows [Version 10.0.18362.836]

python

>python -V
Python 3.8.1

pip

pip -V
pip 19.3.1 from c:\users\<ユーザ名>\appdata\local\programs\python\python38-32\lib\site-packages\pip (python 3.8)

インストール

pip install virtualenv

インストールできたかは、下記のバージョン表示で確認できる。

>virtualenv --version
virtualenv 20.0.21 from c:\users\<ユーザ名>\appdata\local\programs\python\python38-32\lib\site-packages\virtualenv\__init__.py

表示ができたらインストール成功。

使い方

インストールしただけだと、環境は作られていない。
基本的な使い方は、下記の通り。

  1. 仮想環境の作成
  2. 環境の有効化

環境の作成

$ virtualenv <環境名>

上記コマンドを叩くと、カレントディレクトリに、環境名のフォルダができる。

下記の例だと、sampleフォルダができる。

$ virtualenv sample

ディレクトリ構造は、下記。

sample
├─Lib
├─Scripts
├─.gitignore
└─pyenv.cfg

環境構築時、使用するpythonのバージョン指定もできる。

$ virtualenv -p python3.6 sample

この場合は、指定バージョンがインストール済みである必要がある。

仮想環境の有効化

仮想環境を使うには、有効化をする必要がある。

windowsdos場合だと、<環境名>\Script\activateで仮想環境が有効化される。
実行すると、下記の例のようにコマンドラインの先頭に(<環境名>)が付く。

E:\dev\python>sample\Scripts\activate
(sample) E:\dev\python>

windowsのgitbash等でやる場合は、source <環境名>\Script\activateで実行可

mac/linuxだとフォルダ構成が異なっているはず。
binフォルダにactivate.shがあるので、source <環境名>/bin/activateで実行可能

仮想環境から出る

$deactivate

パスが通っているはずなので、上記コマンドで抜け出せるはず。

参考サイト

virtualenv 基本的なコマンド使い方メモ - Qiita

Virtualenv の使い方 - Python 入門

2020/05/18週 気づきと振り返り

業務こなしての問題・気づき

SSH接続で「Bad owner or permissions」エラー

GCEの環境でgithubを使おうと思ったが、誰かがsshの設定の鍵をすでに作っているようだったので、別途、鍵を作成した。
その際にconfigを作って使い分けようと思い、作って接続テストしたら、「Bad owner or permissions」エラー

サイト調べたら、権限がないために起こっているような記事ばかりだったので、chmod 666を実行して権限付与すれば問題ないだろうと思い、権限付与してテストしたら、変わらず「Bad owner or permissions」エラー。。。

どうやら、権限が甘いと接続エラーにするらしい。
ちゃんと複数のサイトで書かれていたchmod 600で権限付与したら、接続成功した。。。

権限の付与に意味がある的な言及があれば迷わなかったのに。。。
あまい権限の付与でエラーになることもあるってのは、意外だった。

SSH「Bad owner or permissions」エラーの解決 | 積水成淵日記

python

django

migrateでno such table

modelに新規追加して、viewに利用する処理を追記後、python manage.py migrateしたら、no such tableになった。

modelの定義に問題はなく、いろいろ調べたが解消しなくて悩んだ。。。

原因は、migrateする前に実装に組み込んでしまったから。
処理を削除してmigrateしたら、no such tableは発生しなかった。

migrateって、どう動いているのか分からんな。。。
migrateは、modelを見てるってのは想像できるが、利用箇所が原因になるとは思わなかった。。。

GCEからGCSへの接続ができない

GCEのdjangoのアプリからmysqldbを使って、GCSのmysqlにアクセスしようとしたが、接続ができなくて悩んだ。。。

メッセージ上は、mysqlが見つからないというエラーで、設定を何度も見直したが、間違っている箇所はなさそうだった。
結局、原因は、CORSだったらしい。
「らしい」というのは、対処療法でやったら動いたので、本当にそれが問題だったのか自信はない。

django-cors-headersというのを入れたら、ちゃんとmysqlへの接続ができた。
プロキシ使ってたときは、接続できたので、おそらくCORSエラーだったのだろうと思う。
要望に、「cloud-proxy使わずにできないか?」と言われていたので、プロキシを使わないで接続できないか試行錯誤していた。
CORSが早く頭に浮かんでいたら、対応はもっと早かったかもしれない。

在宅勤務

昼寝

だいぶ暖かくなってきた。
昼寝をするには丁度いいい温度。

昼過ぎが、眠気との戦いだった。
もう、効率が上がらないから、あえて30分くらい仮眠するようにしてた。

夏服

最近気づいたが、着れる夏服がほとんどない。。。
近くの店は休業中なのが痛い。。。
下手したら、夏は厚手の長袖になってしまう。。。

早く緊急事態宣言が解除されるように最善を尽くして祈るしかなさそう。。。

2020/05/04週 気づきと振り返り

業務こなしての問題・気づき

VCSがないことで起きた問題

今回のプロジェクトが終わったら、愚痴込みでVCSを導入すべきみたいな記事を書いてやる。

バージョニング問題

バージョン管理が、フォルダ名変える環境。。。
どこでどの修正が入ったのか分からず、最後に動作するバージョンがどれだったのか不明である点。

これが意外と厄介。
システムの中枢部分の実装をしている人が一番苦労する。
改修で、実はFW部分に影響あるとか、別の実装箇所に影響あるんだけど、個々の実装をしている人は、そこまで気が回らない。テストするのを忘れるのが常。
それであとで発覚して、中枢部分の実装した人に調査依頼が来る。
そして、改修された箇所のソースレビューが始まり、頭がハゲるというルートに突入する。
こういう問題は、緊急度が高く、相手の改修内容と意図、どうあるべきかを考える必要があるため、結構負担。
緊急度が高いというのが特に曲者。焦りが加わるので、本来のパフォーマンスが若干落ちる。

少なくとも、フォルダでバージョン管理する場合、テストコードは必須な気がする。

長過ぎるエラーメッセージ

何が原因なのか分からない。
原因が分かるメッセージが隠れる場合がある。

クラウド環境での環境構築

GCEのインスタンスで、何か途中でやっていた環境に、まったく関係ない別の環境を入れるのは辞めたほうがいい。

apacheにプロキシの設定をした環境を作ったのだが、プロジェクトがご破算になり、別プロジェクトに環境を流用した。
新規プロジェクトでは、apache不要だったが、開発を進めていく後に必要となり、プロキシの設定をしたのを忘れて利用しようとして、意図しない挙動を繰り返して悩んでた。。。

プロキシの設定をやっていたのを思い出したら、速攻で解決した。。。

新規にプロジェクトを始めるのなら、新規のインスタンスでまっさらな状態から始めたほうがいい。

環境の相乗りは、悲劇しか産まない。

雑記

ほとんど稼働日がないので、あんまり思うところはない。

休日が多いと、日付の感覚がおかしくなる。
稼働日なのに、休日と同じ振る舞いをしてしまいそうになった。。。

GW中は、マリカー8DXとFF7R、ポケモンやってた。
ほぼ家から出ない。出たのは、食料調達くらい。
ポケモンは、シングル・ダブルの両方でマスタボール級に行けた。
マリカーは、GW終盤で届いたが、中毒性が高い。
無言でずっとやってしまう。

本当ならジャンプコミックスの発売があるから、漫画読もうと思ったけど、新刊の発売がGW後というのを知って、かなり落胆した。。。
鬼滅の刃を読みたかったが、こんな状況だから仕方ないよね。。。

あとは、ロジックパズルとかやってた。
学生時代によくやっていたが、久々にやると、結構時間がかかる。
4045でもGW中の暇つぶしにはなったかな?
終盤に180
70に挑戦したが、終わらなかった。。。

2020/04/27週 気づきと振り返り

業務こなしての問題・気づき

django

カスタムユーザの修正反映時にInconsistentMigrationHistoryが発生する

途中から変更した場合、差分が生じて、migrate対象にならない場合がある。
環境構築のタイミング等も関係してくる。

Python - djangoで途中からカスタムユーザーに変更するとエラーが出る|teratail

一番楽なやり方は、テーブル全削除して再構築が簡単。

sqlite->mysqlへの移行で、誰かがmysql上で先に環境構築してしまったがために、自分が開発したカスタムユーザ周りの箇所が動かなかったので、お鉢が俺に巡ってきて、調査してた。
俺のせいじゃなくない?って思いながらも、ちゃんと対応してあげる僕は、とても偉い子だと思います。

在宅勤務

やり始めて3週間経過。
やってて思ったけど、目がものすごい疲れる。
遠い場所を見ないから、目の周辺の筋肉が凝ってるんだろうな。。。
現場にいたころは、フロアが広かったから、遠くにいる女子社員を眺めていたが、在宅だとそれもできないね。

目が疲れるので、目薬をよく使った。
在宅勤務で、目薬を目にさすスキルは、抜群に上がったと思う。
以前は、何回か失敗してやっと目に入る感じだったけど、今は、だいたい1発で入るようになった。

緊急事態宣言は、いつまで出るのだろうか?
早く終息してほしいと思う反面、在宅勤務をこのまま継続したい気持ちがある。

あと、祝日っていうのを忘れて、仕事してしまいそうになる。
GWは、いつもののりで在宅勤務しないように気をつけないとな。

雑記

自宅に体重計がないけど、太ってきている実感が確実にある。
腹回りが特に気になる。
運動不足がヤバいな。。。

2020/04/20週 気づきと振り返り

業務こなしての問題・気づき

GCE(CentOS8)にpythonをインストール

windowsでは、exeでインストールしていたが、centosでのインストールで手間取った。
windowsでは、python3.8使っていたが、centosでのデフォルトが v3.6で焦った。
3.8のインストールをいろいろ調べたが、ソースからコンパイルし直す必要があり、面倒だったので辞めた。
調べた限り、v3.6でも動くようだったので、デフォルトのv3.6をインストールした。

dnf -y install python36

上記インストールだと、pythonの実行にはpython3でやらないといけない。
まどろっこしいので、pythonで実行できるようにするには、下記を行う。

alternatives --config python

CentOs8 pythonインストール | mebee

django

URL管理

app毎にurls.pyを作って、プロジェクトのurls.pyにincludeするのが無難そう。
プロジェクトのurls.pyにまとめると、appが増えたときに重複やドメイン整理が面倒くさくなりそう。

DjangoでDisallowedHost

ローカル環境(windows)では発生しなかったが、GCEに移行して動かしたときにDisallowedHostが発生した。 原因はよく分からないが、対処法は、分かった。 settings.pyのDEBUGをFalseにするか、ALLOWED_HOSTSにサーバのIPアドレスを追加すると解消する。

許容するのは狭い範囲が無難だろうと思い、自分はALLOWED_HOSTSにIP追加で対応。

DjangoでDisallowedHostを回避 | ハックノート

Bootstrapを使ってみての感想

classの指定で、ある程度、見栄えのいいデザインに変更できるのは、簡単で扱いやすかった。
部分部分の手入れは簡単だったが、全体のデザインがなかなかうまくできない。
これは、俺のスキルのせいだろうな。。。
webデザイナーのスキルがあれば、electronとかでいい感じの画面が作れると思うが、初期開発でデザインスキルのなさに絶望して、開発がすすまいことがままある。
画面を凝ろうとして、システムの開発を厳かにしちゃうパターンが多い。

その他

FWで使いそうな命名は避ける

djangoのstartappでアプリを追加する際、appという名前で作成したら、AppConfigというクラスが自動生成されるが、djangoで用意されているAppConfigと競合していたのに気づかず、起動したときに意味不明なエラーが発生してて、かなり悩んだ。。。

appとか、srcとか、libとかのFWとかでよく使いそうな命名は、なるべく辞めたほうがいいと感じた。

雑記

在宅勤務

8時間なんて働かない。
最初は、罪悪感はあったけど、いまはないな。
ちゃんと成果物は作ってる。
作業に集中する時間、全力で休憩する時間を決めてやると、案外、作業は進む。

問題は、ダラダラやることが一番まずい。
休憩するのもダラダラすると、ズルズル時間が過ぎて、「何の成果も得られませんでしたぁぁ!!」状態になる。
時間を決めて、きっちり守ることが大事。

時間にルーズな人は、在宅勤務に向かないかもね。
たぶん、サボって何も成果でないと思う。
他人の目は、自分を律するのに効果絶大だなってのが、最近感じる。

作業中のBGM

最初の頃は、アニソン流してたけど、飽きてきた。。。
最近は、休憩時間にdアニメストアこち亀を流してる。
久々に見ると、ギャグが秀逸だなって感じる。
本田の初登場とか、結構面白かった。
変身前後のギャップがツボった。
変身シーンも結構好き。漫画だと変身シーンは分からないからな。

運動不足対策

dアニメストアで「ダンベル何キロ持てる?」を見て、在宅筋トレを週末にちょっとやった。
放送時は見てるだけだったけど、実際やると、思ったよりキツいってのが分かった。。。
本当に運動してないと、翌日に軽い筋肉痛になる。

頑張れば街雄みたいになれるかな?

ポケモン近況

やっとダブルとシングルでマスタボール級に到達。
最近のお気に入りは、ウォッシュロトム
シングルでの選出率は、トゲキッスヒヒダルマと同じくらい。
ボルトチェンジを技構成に入れるか入れないかで、最近悩んです。
ギャラドスに有利対面だろうと思って出すと、パワーウィップやダイソウゲンでやられる。。。

ダブルは、リザードンラプラスの2大エースを手持ちに入れて、選出はどっちかにするパターンが多い。
問題は、バンドリ構成への対応が面倒なんだよね。。。
ヤミラミをサポートで使っているのだが、バンギラスがあくタイプで、ダイマックスする可能性が高いから、非常にやっかい。

ピッピやマホイップ、エルフーンあたりを利用できないか検討中。

エルフーンって、害悪すぎない?
シングルでもダブルでも、使われると非常に嫌なのだが。。。
シングルだとコットン身代わりが突破できなくて、泣きながら降参することがある。
ダブルだと、追い風打たれたあとに倒してしまって、追い風を最大限使われるのが嫌。
ダブルは、ヤミラミが上手く使えないと高確率で負ける。
振り返えると、ヤミラミの使い方ミスったってのが、よくある。

バトルの記録を見返したいのだが、どうやって記録を取ればよいのだろうか?

2020/04/13週 気づきと振り返り

業務こなしての問題・気づき

他人のソースコードを読んで

公式のドキュメントとかじゃなく、引き継ぎで渡されたコードを読んでいた。
なんというか、抽象化レベルがチグハグだな~と感じた。
メソッド名から想像する結果と内部の実装が違うと、結構、脳に負担がくるものだと思った。

せっかく上手く抽象化したものが上手く使えてない感じがした。

実際のコードは書けないので、例を上げると、↓みたいな感じ。

const command = getXxx()
const result = execute(command)

個人的には、getXxx()がresultを返して欲しい感じ。
ビジネスロジックであってるのかな?そこに詳細な実装が交じると、やりたいことが、分かりづらくなる気がする。

python

最近、仕事で触るようになった。

三項演算子

なんというか、構文がものすごく気持ち悪いのだが。。。

今までの言語だと、条件 true : false みたいな構文が多かった。
pythonだと、true 条件 falseみたいな感じ。
条件がなぜ真ん中に置いてあるのか、何か意図があるのだろうか?
それが分からないと、違和感は長いこと残りそうな気がする。。。

あれかな?
追加修正とかバグ修正を楽にするために、こういう構文になったとか?
ケツに追記するだけだから、差分が見えやすいとか?
それでも、違和感はあるな。。。

django

model.ForeignKey

引数にon_deleteが必須になったらしい。
情報が古い記事を見ていたらしく、python manage.py makemigrationsとか打ってエラーが出てる理由の理解に時間がかかった。。。
python後方互換を切ってる印象が、また強まってしまったな。。。

記事とかで紹介するのはいいのだが、バージョン指定するようにしてくれませんかね?
バージョン指定がないと、将来読む人がかなり苦労する。

APIを提供する側に物申す

APIのレスポンス定義をしっかり書いてくれませんかね?
API利用する側は、そこの認識が合わないと、try&errorでやるしかないのが、工数爆増でキツイ。。。

I/Oの重要性を再認識したよ。。。

利用する側にとって、内部の実装は、まったく気にならない。

雑記

今週も、ほぼ家の中で過ごした。
外に出たのは、食料調達くらい。
ポケモンGoで外に出るかもしれないと思ったが、意外と出ようと思わなかった。

家の中では、ポケモンかFF7Rやってた。
ポケモンのランクマがなかなか勝てないから、ストレス貯まる。

あとは、dアニメストアで流し見してた。
最近見たのは、ハイキューの劇場版とワンパンだったかな?
ものすごく、ギャグに飢えてる自分がいる。
一日中、無感情に過ごしているから、何か感情の変化を起こしてくれるものが見たいのだが、何かないかな?
視聴済みなやつは、もう、感情の変化が起こりづらいから、あんまり見る気はしない。

在宅勤務について

成果さえ出せれば、8時間働く必要はないなって思った。
問題は、成果を出しづらいんだよね。。。
誘惑が直ぐ側にあるから、他のことをやってしまう。
夏休みの宿題を、最後まで溜め込む人の気持が、最近わかってきた。
誘惑が多すぎて、やらなければいけないことが厳かになった結果、最後まで残るんだろうな。。。
俺は、最初の1週間ですべて終わらせてたから、学生時代にそんな気持ちにはならなかった。
だけど、在宅勤務で同じようにやるのは、難しい。。。