2018-07-20(金) [長年日記]
■ 常用エディタをVisual Studio Codeに変えようかな(挫折する予感はある)
普段はさほどカスタマイズしていないvimでコード(やコード以外のなんでも)を書いていて、sshで乗り込んだ先でもローカルといっさい違いのない環境でものが書けるのはとてもいいし、困ったことは特にない。とはいえ、いろんな支援技術が入っている最近のエディタも使ってみたいんだよなぁ……とはもう何年も考えてるんだけど、ここらでえいやっと取り組んでみることに。とりあえず勢いのあるVS CODEがいいんじゃないの。
目標は、職場(Ubuntu Desktop)と自宅(Windows 10)で同じ環境にすること。WindowsではWSLを使っているから、基本的にLinuxに合わせるのがいい。ということで、まずはUbuntu 18に導入。これはらくちん。
ちゃんとハード3タブにできるんだ。えらいぞ、Microsoft。Light系のテーマ、日本語化、フォントはMyricaM。あとは言語サポート拡張をいくつか入れて、環境はぼちぼち作れた。ビルトインのgit連携でリモートへのpush / pullがうまくいってないけど、コンソールでもできるから解決はあとで。
次にWindows。さすがにMicrosoftが作ってるだけあって、導入は楽だし、エディタ機能でトラブルはない。DropBoxを使ってLinux環境と設定の共有もした*1。
問題は、WSLとの連携だ。ご存知のとおり(ご存知ないかも知れないけど気にせず続ける)、Windows側からWSL側のファイルシステムは見えない。逆は可能。てことは、Windows側に置いたコードを、WSL側からも扱えばいい……んだけど、またもやご存知の通り、WSLから見えるWindowsファイルのパーミッションが極めて気持ち悪い。具体的には全部「-rwxrwxrwx」になる。しかも所有者はroot。
で、この春のアップデートでこのへんに改良が入ったのでやってみる。(WSL内の)/etc/wsl.confを作って以下を入力:
[automount] enable = true root = /mnt/ options = "metadata,uid=1000,gid=1000,umask=022" mountFsTab = false
WSLを再起動すると*2、Linuxのパーミッションまわりがだいたい期待したような感じになる。なんでこれ、デフォルトじゃないんですかね。
なお、Windows版のgitを入れなくても、WSLGitというコマンドをパスの通ったところに入れておけば、VS CODEはWSL内のgitを使ってくれるようになる*3。
それから、コンソールまわりでもいくつかいじる必要がある。まずは
"terminal.integrated.shell.windows": "C:\\WINDOWS\\System32\\wsl.exe"
標準だとbash.exeになってるのかな? ログインシェルを変えてる場合はwsl.exeを呼ぶようにしないとうまくいかない。これで開いているワークスペースに相当するディレクトリをカレントにしてくれる。
あと、個人的にあらゆるシェルから起動中のscreenセッションにアタッチする設定にしてあるんだけど、これだと都合が悪いので、VS CODEから入ったときにはscreenを無視させたい。いろいろ調べてみると、Linuxでは環境変数「TERM_PROGRAM」が「vscode」になるのでこれがあるときに無視させる。Windowsではいい感じの環境変数はなかったんだけど、「PWD」が「/mnt」から始まるのを利用できるのでそうした。これでVS CODEの中では対象のプロジェクトにフォーカスできる。
んー、だいたいこんなところかな。意外とうまくいった感じはある。あとssh先にあるディレクトリをマウントできるSSH FSなんて拡張もみつけたので、リモート開発もVS CODEでできるかも?
あとは、使い慣れたvimのキーアサインからどれだけ慣れることができるか、だなぁ。vimのキーアサインになる拡張もあるようだけど、そこはあえて入れない方向でしばらく使ってみる。もうちょっと目に優しい感じのテーマも探したい。
2018-07-16(月) [長年日記]
■ ドーラ、我が家にきてから8年になる
日記にはまったく書いてこなかったがこの一ヶ月間ロシアでワールドカップが行われていて、今日の0時が決勝戦。おれは時間帯が合わなくてあまり観戦してこなかったんだけど、日本戦の一部とこの3連休中に行われる3位決定戦・決勝は見ておくか……という感じで2時まで起きていた。
で、今日は海の日なので、例年どおり4時に起きて茅ヶ崎の浜降祭へ向かう……はずだったのだが、さすがに2時間睡眠では体が保たず、生きて帰れる気がしなかったので泣く泣くキャンセルとあいなった。なにせ最高気温は連日35℃ラインだし。おれは去年も行けなかったし、来年は行きたいなぁ。
で、そんな今日はドーラを飼い始めてからちょうど8年になる。さすがに変化はないですな。最近のお気に入りの場所は玄関マットの上。とおりかかる人と目があうたびに「かまっていけ」と要求する。でもあいかわらず抱っこは嫌い。
おまけ。この連休中、ひたすら甘えまくっていたグスタフ。ベッドに腰掛けると寄り添うように寝そべって、頭を脚に乗せてくる。この連休、暑すぎてあまり出歩かなかったから、猫にとっては甘え放題のいい日々だったもよう。
2018-07-12(木) [長年日記]
■ わさますのmassrをHerokuからGCPへ引っ越した
すでに数日が経過したが、長年Heroku上で運用してきたわさますのmassrを、GCP (Google Cloud Platform)へ引っ越した。いまのところいくつか問題はあるものの、順調に稼働中。
きっかけはHerokuのプラグインとして提供されているMongoDBにいい感じのプランがなくなってしまったことで、とにかく長いこと運用していて数百MBオーダーまで膨れ上がったコンテンツを適当な価格でサーブしてくれるところがない。ちょうどGCPのGCE (Google Compute Engine)の一番小さなやつ(f1-micro)に無償プランがあるから、それを試用してみようという話に。
とはいえf1-microはメモリたったの600MB。ここにこれだけのサービスを乗せないといけない:
- nginx (reverse proxy、https終端)
- mongodb (storage)
- memcached (cache)
- massr (app)
かなり無茶ですなー。OSはDebian9。そこにAnsibleでnginxのリバースプロキシをざっくり構築。あとLet's Encryptで専用ドメインをHTTPS化。残りのパッケージはdocker-composeを使って全部コンテナに乗せる形にした。
これで「えいやっ」と動かしてみたら、残メモリ50MBあたりでいちおう稼働してる。ギリっギリやんけ(笑)。しかも、検索みたいなちょっと重い処理を走らせると、CPUが100%に張り付いてsshすらできなくなるので、やっぱメモリ不足はあきらか。まぁネックはMongoDBでしょう。
このあたりで、内輪で「f1-microチャレンジ」と呼び始める(つまりゲームになった)。もう引っ越しちゃったのでしばらくこのまま様子は見たいし、やれるところまでやろう。
ということで、焼け石に水だとは思いつつ、swap領域を設定してみた。ついでにStackdriverも入れて各種ステータスの監視を始める*1。
そしたら、重めの処理を走らせるとCPUやディスクI/Oがガンっと上昇するものの、swapの使用率がちょっと上がるだけでなんとか死なずに結果を返すようになったのだった。仮想メモリすげー。というわけで、意外や意外、f1-microでもけっこうまともに動くじゃん。
それでもしばらく運用してると重くなったりするし、検索もちょくちょく失敗したりするので、定期的に再起動かけてやったりする必要はありそうで、少しは課金してメモリ1GBくらいの環境にしてやった方がよさそうだ。まぁそれもぼちぼち。
今回の話でしみじみ思ったのはやっぱHerokuってすげーーー!!ってことだな。運用に手間暇かけられない趣味のサイトなんて、Herokuがやっぱりいちばん楽だよ。予算が許せばとことんHerokuだけで運用したいものだ*2。