Railsチュートリアル終わった

自分は中の仕組みが分からない状態というのがあまり好きではなく、そのため重厚なフレームワークとは距離をとっていた。

でも実際こうやって体系的に学んでいくとその偏見は薄らいでいき、ベストプラクティスがある程度敷かれてる環境の良さが分かってきた。「実際このやり方で世の中のWebサービスの大多数は上手く回ってるよ?」の説得力は大きい。

中の仕組みが分からないと言っても、頑張ってRailsのソースを読めばその懸念は払拭できる訳だし、何も恐れる必要はなかった。人生損してたなぁ。まぁでも今気づけてよかった。

Github Codespacesを使ってみたメモ

Windowsにちょっと古いAnglarの環境を構築しようとしたところ、やれnpm 7.xは駄目だ6.x使えだとか、nodistはメンテされてなくてnpmインストールしようとするとエラーになるだとか、散々な目にあったのでGithub Codespacesに手を出してみた。

まずはローカルで

いきなりやっても上手く行かないだろうから、devcontainer(VS Code + Docker)の環境を最初に作った。

/.devcontainer/devcontainer.json を用意する。

VS Codeのパレットで

Remote-Containers: Add Development Container Configuration Files

を打つと各言語のテンプレートが選択できるので、Node.js & TypeScriptのものを選んだ。

{
    "name": "Node.js & TypeScript",
    "build": {
        "dockerfile": "Dockerfile",
        "args": {
            "VARIANT": "12"
        }
    },
    "settings": {},
    "extensions": [
        "dbaeumer.vscode-eslint"
    ],
    "mounts": [
        "source=hello-modules,target=${containerWorkspaceFolder}/hello/node_modules,type=volume"
    ],

    "remoteUser": "node",
    "postCreateCommand": "sudo chown node ./hello/node_modules"
}

変更したのは以下の箇所。

"mounts": [ "source=hello-modules,target=${containerWorkspaceFolder}/hello/node_modules,type=volume" ],

"postCreateCommand": "sudo chown node ./hello/node_modules"

これはnode_modulesをホスト側と共有しない設定。 自分はhelloの下にnode_modulesを置いてるのでこのような指定になっている。

これを指定しないと我慢ができないほど遅い。指定すれば我慢出来るレベルの遅さになる。

/.devcontainer/Dockerfile を用意する。

これはdevcontainer.json と一緒にできる。

ARG VARIANT="12"
FROM mcr.microsoft.com/vscode/devcontainers/typescript-node:0-${VARIANT}

RUN su node -c "npm i -g @angular/cli@10.2.3"

変更したのは以下の箇所。

ARG VARIANT="12"

テンプレートを作成する時にバージョン12を指定したのに、なぜかここは16で作られていた。 自分の理解が浅いためか、正直よくわからない。何を指定してもdevcontainer.jsonの設定で上書きしてくれるのだろうか。

追記:上書きされるみたい Dockerfile ARG入門 - Qiita

RUN su node -c "npm i -g @angular/cli@10.2.3"

angularをインストールしている。

空のプロジェクトフォルダを作成する

ここの手順は正直正しいのか自信がないが、先に空フォルダを作っておかないと権限周りで行き詰まった。

hello

VS Codeでコンテナを立ち上げる

VS Code の右下にある><みたいなアイコンをクリックして、Open Folder in Containerを実行する。 すると定義したDockerfileに応じたコンテナが起動する。

Angularのプロジェクト作成

コンテナの中で ng new hello といった形でAnglarプロジェクトを作成する。

自分はここで権限エラーに遭遇して苦しんだ。 コンテナを初回起動する前に先に空フォルダを作っておくことで回避できた。

npm インストール

プロジェクトフォルダに移動してnpm iを実行。

npm start

実行できることを確認。

githubにpush

push push

Github Codespacesを試す

Codespacesを有効にする

ここに行って「ベータ版を申し込む」を押す。

github.co.jp

Codespaceを作成

リポジトリページの緑色のCode▼のボタンをクリックするとCodespacesのタブが追加されてるので、そこからCodespaceを作成。

やってみた感想

とにかく権限周りで躓いた。

苦労してnode_modules周りを隔離しても、Windows + WSL2 + Dockerは結構重い。

Codespacesの方が断然軽かった…と思ってCodespaceのインスタンスの種類を調べたら、4core 8GB RAMだった。そりゃ速いに決まってる。個人の利用は今のところ無料だけど、本来なら1時間$0.36のプラン。1日8時間20日使ったら6000円くらいになる。まぁアリっちゃアリか。

iPhone13miniを予約した

今使ってるのがiPhoneXsなので、画面サイズ的にはダウングレードすることになる。

かねてからスマホの大型化に不満を持っていて、なかなかiPhoneSE後継機が登場しなかったのでXsのタイミングで痺れを切らして大画面に移行したという経緯がある。

そんな自分でも、大きな画面から小さな画面に移行するのはとても勇気が必要だった。 一度大きくしたものを小さくするのは大変だ。でもどこかで勇気を出さないと、際限なく大きくなってしまう。 iPhone13miniを買うのは好みというよりイデオロギーに近いかも知れない。

Ruby Gemを作った(classifile)

github.com

詳しい内容は1.0.0にしても良いかな、と思えるタイミングでQiitaなりに投稿しようと思う。

Rubyの文化にどっぷり浸かってみたいと思い、DSLでファイルを整理するコマンドを作ってみた。

Ruby的なお作法やキーワードの言葉選びのセンスにはまだ不安があるけど、極力その文化に染まって見ようと意識的に努めたところ、思いのほか満足できるものになった。rubocopの言いなりになるのも悪くない。

メタプログラミングRubyを(9章まで)読んだ

Railsチュートリアルを読み勧めていて色々疑問に感じる部分に多々遭遇していたので、これはもうメタプログラミングについてちゃんと勉強しないと駄目だなと思いこの本に手を出した。

www.oreilly.co.jp

この本は必読だと思う。 だいぶ前にRubyの入門書を読んだし基本文法くらいは一度通ったつもりだったけど、自分は全然Rubyのことを理解していなかった。 Rubyの入門書で解説されている文法は他の言語と似ているけれど、それらはほとんどRubyメタプログラミングで擬似的に作られたものだったなんて…。

全部読み終わったらまた感想を書き残そう。

今日の勉強会:自動UIテストハンズオン

kagoben.connpass.com

テスト自動化の鬼門となるUIテストについての勉強会。

いつものメンバーなのでUIテストのツールの使い方というよりは、「組合せ爆発して複雑化するテストにどう立ち向かうか」とか「どうやって抽象化して読みやすいテストにするか」とか「クラス名や変数名を日本語で定義することについて」といった方面の話で盛り上がった。

日本語変数名。社会人になってはじめて参加したプロジェクトがそれで仰天したんだけど、やってみると意外と良かった。日本人向けの業務システムを作る場合には扱ってるビジネスロジック上の概念が必ずしも英単語と正確に1対1で紐づくとは限らないし、そういう概念のブレを無くせるというのは大きなメリット。日本人の専門家同士が日本語ではなく外来語の単語を使うのことと本質的には同じかもしれない。まぁでもそれが世間的に拒絶反応があるのも十分理解できる。

今日の感想。
『高度に発達した抽象化は仕様書と見分けがつかない』