Sakiのプログラミング学習ブログ

プログラミングについて学んだことや、学習の振返りを書いています。

【Node.js】fishシェルでnvmを使う手順

f:id:Saki-Htr:20210811214438p:plain

はじめに

フィヨルドブートキャンプの、JavaScriptの環境設定をするプラクティスで、

終了条件
1. nvmをインストールする。
2. nvmを使ってNode.jsの最新版をインストールし、デフォルトで利用するNodejsのバージョンとして設定する。

という課題があった。
そこで、

  • JavaScriptを書くのに、なぜJavaScriptではなく、Node.jsというものをインストールするのか?
  • そもそもnvmとは何か?
  • nvmをfishシェルで使うにはどうすればいいか?

という疑問に直面したので、今回の記事で、

  • nvmとNode.jsとは何か
  • fishシェル環境下でnvmを使う手順
  • nvmで最新のNode.jsをインストールする手順

についてまとめた。

目次

用語解説

そもそもJavaScript とは

  • JavaScript(以下、JSと記載)はブラウザ上で動くために開発されたプログラミング言語。ブラウザ上で、ページに動きを追加するのがメインのお仕事
    • クライアントサイド:クライアント側のWEBブラウザ、および「WEBブラウザで動作する処理」のこと。JSはこっちで動く
    • サーバーサイド:サーバーから構築されたコンピュータ、およびそれらでおこなわれる処理のこと

Node.jsとは?

  • サーバーサイドのJavaScript
  • 本来クライアントサイドで動くJSを、サーバサイドで動けるようにしたものが、Node.js。Node.jsによって、PHPのようにサーバーサイドで動く。勿論コードはJSで書く。
  • サーバーサイドJavaScriptは、Node.js以外にも有るが、これが一番メジャー。(ネットで他の種類を探したが、出てこなかったので「サーバーサイドJSといえばNode.js」と認識することにした)

nvmとは?

Node.jsのバージョン管理ツール

nvmをインストールする前に、気になったこと

  • 以前railsの環境構築で、node.jsをインストールしないとrails sすることができず、当時、Node.jsを、nodebrew(Node.jsのバージョン管理ツール)を使ってインストールした記憶がある。 MacにNode.jsをインストール - QiitaNode.jsを見ながらインストールした思い出。
  • そういえばこの時、Node.jsをインストールする方法がもう一つあり、それがnvmだった。nodebrewとの違いも気になったので、調べた。

nvmとnodebrewの違いは?

→新たな疑問:NodeとNode.jsの違いは?同じものなのか?

NodeとNode.jsの違いは?

ネットを検索しているとNode.jsの情報ばかり出てくるので、同じものを指すと判断した。
おそらく、Node.jsを実行するときのコマンドが、nodeなので、それを受けてNodeと呼ぶことがあるのだと思う。

→よって、nvmもnodebrewも、Node.jsのバージョン管理ツールと判断した。

fishシェル環境下でnvmを使う手順

環境

  • macOS BigSur 11.5
  • nvm 0.38.0
  • Fisher 4.3.0
  • Node.js v16.6.0

nvmをインストールする

公式のGitHub:nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versionsのとおりにインストールした。

$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash

Homebrew installation is not supported.

とあったので、Homebrewと使ってインストールはしなかった。

nvmはfishをサポートしていない

nvmのGithubを見ると、fishシェルをサポートしていないとあり、fishシェル環境下で使える方法をいくつか紹介している。

Note: nvm does not support Fish either (see #303). Alternatives exist, which are neither supported nor developed by us:
- bass allows you to use utilities written for Bash in fish shell
- fast-nvm-fish only works with version numbers (not aliases) but doesn't significantly slow your shell startup
- plugin-nvm plugin for Oh My Fish, which makes nvm and its completions available in fish shell
- fnm - fisherman-based version manager for fish
- fish-nvm - Wrapper around nvm for fish, delays sourcing nvm until it's actually used.

(nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versionsより)
私はこの中で、fish-nvmを使うことにした。

Fisherをインストールする

なぜFisherをインストールするのか

fish-nvmのGitHubのInstallを見ると、

  1. Fisherを使った手順
  2. oh-my-fishを使った手順
  3. fundleを使った手順

が紹介されている。
(FabioAntunes/fish-nvm: nvm wrapper for fish-shellより)

動作報告の多かったFisherを使うことにした。

Fisherとは

Fisherのインストール手順

# そもそもインストールしていないか確認
$ fisher
fish: Unknown command: fisher #=>インストールしてない

# 公式GitHubの通りにインストール
$ curl -sL https://git.io/fisher | source && fisher install jorgebucaran/fisher

fisher install version 4.3.0

Fetching https://codeload.github.com/jorgebucaran/fisher/tar.gz/HEAD
Installing jorgebucaran/fisher
           /Users/<ユーザー名>/.config/fish/functions/fisher.fish
           /Users/<ユーザー名>/.config/fish/completions/fisher.fish
Installed 1 plugin/s

# バージョン確認
$ fisher -v
fisher, version 4.3.0  #=> インストール成功!

fish-nvmのインストール

先程インストールしたFisherを使ってfish-nvmをインストール。 公式GitHub(FabioAntunes/fish-nvm: nvm wrapper for fish-shell)の通りに実行。

$ fisher install FabioAntunes/fish-nvm edc/bass

fisher install version 4.3.0
Fetching https://codeload.github.com/FabioAntunes/fish-nvm/tar.gz/HEAD
Fetching https://codeload.github.com/edc/bass/tar.gz/HEAD
Installing FabioAntunes/fish-nvm
           /Users/<ユーザー名>/.config/fish/functions/__nvm_run.fish
           /Users/<ユーザー名>/.config/fish/functions/node.fish
           /Users/<ユーザー名>//.config/fish/functions/npm.fish
           /Users/<ユーザー名>//.config/fish/functions/npx.fish
           /Users/<ユーザー名>//.config/fish/functions/nvm.fish
           /Users/<ユーザー名>//.config/fish/functions/nvm_alias_command.fish
           /Users/<ユーザー名>//.config/fish/functions/nvm_alias_function.fish
           /Users/<ユーザー名>/.config/fish/functions/yarn.fish
           /Users/<ユーザー名>//.config/fish/completions/nvm.fish
Installing edc/bass
           /Users/<ユーザー名>//.config/fish/functions/__bass.py
           /Users/<ユーザー名>//.config/fish/functions/bass.fish
Installed 2 plugin/s

# バージョン確認
$ nvm -v
0.38.0 #=> インストール成功!

nvmの使い方

nvmで最新のNode.jsをインストールする手順

  • nvm --helpを見ると、以下の記述がある。
 nvm install [<version>]                     Download and install a <version>. Uses .nvmrc if available and version is omitted.
   The following optional arguments, if provided, must appear directly after `nvm install`:
    --latest-npm                              After installing, attempt to upgrade to the latest working npm on the given node version
  • 最新の安定版をインストール
$ nvm install stable --latest-npm
Downloading and installing node v16.6.0...
Downloading https://nodejs.org/dist/v16.6.0/node-v16.6.0-darwin-x64.tar.xz...
########################################################################################################################### 100.0%
Computing checksum with shasum -a 256
Checksums matched!
Now using node v16.6.0 (npm v7.19.1)
Creating default alias: default -> stable (-> v16.6.0)
  • インストールできたか確認。
# インストールされているNode.jsの一覧を出力
$ nvm ls
->      v16.6.0
default -> stable (-> v16.6.0)
iojs -> N/A (default)
unstable -> N/A (default)
node -> stable (-> v16.6.0) (default)
stable -> 16.6 (-> v16.6.0) (default)
lts/* -> lts/fermium (-> N/A)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1 (-> N/A)
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.24.1 (-> N/A)
lts/erbium -> v12.22.4 (-> N/A)
lts/fermium -> v14.17.4 (-> N/A)
  • 念のため、v16.6.0が最新の安定版か公式のページをチェックする。
    推奨版はv17.17.4、最新版はv16.6.0とあるが、最新の安定版はv16.6.0なので、無事に最新安定版をインストールできていることになる。

f:id:Saki-Htr:20210811225330p:plain
推奨版と最新版
(ダウンロード | Node.jsより引用)

最新版を、デフォルトで利用するnode.jsのバージョンとして設定する

  • nvm helpを確認すると、
Example:
nvm alias default node                Always default to the latest available node version on a shell

とあるので、同様に実行する。

$ nvm alias default node
default -> node (-> v16.6.0) #=> デフォルトが最新版になっている!
hattorisaki@SakinoMac ~/jsbook> nvm ls
        v16.6.0
default -> node (-> v16.6.0)
iojs -> N/A (default)
unstable -> N/A (default)
node -> stable (-> v16.6.0) (default)
stable -> 16.6 (-> v16.6.0) (default)
lts/* -> lts/fermium (-> N/A)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1 (-> N/A)
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.24.1 (-> N/A)
lts/erbium -> v12.22.4 (-> N/A)
lts/fermium -> v14.17.4 (-> N/A)

# nodeコマンドでも最新版になってるか確認
$ node -v
v16.6.0 #=>最新版になっている!

参考記事

「初めてのLT会」に登壇した感想

はじめに

8/7(土)に、フィヨルドブートキャンプで開催された「⚡️初めてのLT会 Vol.8」で登壇しました。
今回のテーマは、「フィヨルドブートキャンプでの活動を通して、発見したこと」で、6名が登壇しました。
私は、「悩みは一人で抱え込まず、オープンに話していこう」というお話をしました。

f:id:Saki-Htr:20210808133524p:plain

一緒に登壇したフィヨルド生のブログ

一緒に登壇したフィヨルド生の感想の記事はこちら!

目次

初めてのLT会とは?

フィヨルドブートキャンプで2~3ヶ月に1回開催されているオンラインLT会です。

なぜ登壇しようと思ったのか?

初めてのLT会には、何度か聞く側で参加させていただいていて、ずっと登壇してみたい気持ちがありました。
私はもともと物事を深堀りして考えるのが好きなのですが、フィヨルドブートキャンプに入るまではそれをオープンな場でアウトプットしたことはありませんでした。しかし、フィヨルドブートキャンプで、日報にコメントをいただいたり、ブログやscrapboxを読んでくださった方が「役に立った」「参考になった」と仰ってくださる経験を経て、「自分がLTで伝えたことに対してフィードバックや感想をくれたら嬉しいだろうな」「自分の発表が、誰かの役に立てたら嬉しいだろうな」と思い、登壇してみたいと思うようになりました。

ただ、勇気が出ず、なかなか声をあげられませんでした。 今回は「発見」というテーマで、「これなら私にも発表できそう」と思ったのと、最近は登壇者枠があっという間に埋まってしまうので「今申し込まないと機会を逃す」と思い、お知らせが来てすぐに衝動的に手を上げました。

準備

テーマを決める

発表直前になって焦らないように、iPhoneの「イベントまであと何日か」通知してくれるアプリを入れていました。

f:id:Saki-Htr:20210808113247p:plain

どんなテーマを話すかについては、1ヶ月ほど前から鍵付きののscrapboxに、ネタを思いついたらちょこちょこ書いていました。ネタ出しをし始めると、日常生活でも「あれいいかも」とふっとアイデアが浮かぶので良かったです。 2週間前になって、本格的に準備を始め、それまで書き溜めていたネタの中から選びましたが、テーマをどうするか非常に悩みました。 そんな時、メンターの伊藤さんの記事を読んで、ハッとさせられました。

blog.jnito.com

聞き手にメリットを与える

うまく話すための大事なポイントは、聞き手に明確なメリットを与えることです。 これを「パワー・プレゼンテーション」の中ではウィッフィー(WIIFY = What's in it for you?)と呼んでいます。

発表の構成を考えるときは、自分の中にある「これを話したい!」「これを聞いてほしい!」という思いが起点となることは間違いありません。 しかし、そのままスタートを切るのではなく、一度自分の視点を聞き手の視点に置き換えて「それを聞いて何がうれしいの?」「その話のどこがおいしいの?」と自問自答してみると、聞き手にとっていっそう満足度の高い発表にすることができます。

(発表でうまく話すためには (富山Ruby会議01のPRをかねて) #toyamark - give IT a tryより引用)

こちらの文章を読んで、「自分が何を話したいか」にばかり目が行っていたことに気づきました。
みなさん貴重な時間を割いてお話を聞きに来てくださるので、聞いた方にとってもメリットのあるお話をしようと思いました。
発見したことというのは、自分に対して発見したこと、フィヨルドブートキャンプに対して発見したこと、プログラマーという職業に対して発見したことなど、様々な対象があると思います。
自分以外への発見だと、"いい話"で終わってしまい、「聞いた人にとってメリットがある」という条件を満たす発表はできなさそうだと思いました。 聞きにきてくださる方々はほぼ、フィヨルドブートキャンプ生なので、過去に自分が直面した問題とそれを乗り越えた経験が、同じ悩みを抱えている人の役に立てそうだと思い、「自分に対して発見したこと」にしました。

今までやってきたプラクティスの中で、Rubyラクティスが一番時間がかかり大変で、「もっと人に聞いてみたり相談すればよかったな」と感じていました。そのため、かつての私のように、悩みを抱えているけれども話せない状態の方に向けて、「悩みは一人で抱え込まず、オープンにしていこう」と話すことにしました。

原稿を書く

だいたいの出来でスライド作成に取り掛かったが...

テーマが決まった後、そのテーマに関連することを時系列順に、privateなscrapboxに書き出しました。 フィヨルド生の(id:yana_g)さんから、

LTのスライドを作っている途中で、文脈や繋がりが変なことに気づいたことがある

と伺い、原稿を100%完成してからスライド作成に取り掛かっても、出戻りがありそうだと思ったので、この時点でスライド作成に取り掛かりました。 スライドにしたら、話す順番や文脈が変な所が浮き彫りになったり、伝えたいことに対して不要な情報がたくさん入っていることに気づいたので、一旦スライド作成をやめて原稿をしっかり作り直すことにしました。

原稿を練り直す

テーマを決めたら、あとは自分の頭の中を文字に起こすだけと思っていましたが、自分が伝えたいことを分かりやすく伝えるために、「どのような道筋を立てるのか」、「必要な情報は何なのか」を考えるのがとても大変でした。準備の中ではここが圧倒的に大変でした。

しかし大変だった分、抽象化(大事なところだけを抜き出して他は切り捨てること)の良い訓練になったと思います。

原稿を書いている途中で、

  • テーマを決めている時は自信満々だったのに、内容が薄く感じて不安になる
  • 5分と短いからこそ、簡潔に自分の言いたいことを伝えなければいけないのが、難しい。発表時間が短いからといって準備時間も短く済むわけではない。
  • 自分が何を伝えたいのか分からなくなる
  • どういう構成・順番で伝えたら分かりやすいか難しい

などの問題に直面しました。
フィヨルドブートキャンプではdiscordをコミュニケーションツールとして使っており、受講生は自分の分報チャンネルを作って自由に呟くことができるのですが、ここで"ああでもないこうでもない"と実況しながら原稿を書いていました。

f:id:Saki-Htr:20210811192741p:plain f:id:Saki-Htr:20210811193102p:plain

過去にLT登壇された方が共感スタンプを押してくださったり、今回一緒に登壇させていただくぺろ(id:mosshu0703)さんが「お互いがんばりましょう!」とコメントくださったりと、励ましていただいたので、落ち込んでも回復することができました。ここで今回の私の発表テーマである「悩みをオープンにする大切さ」を改めて実感しました。フィヨルドブートキャンプのみなさん、ありがとうございました☺️

原稿を書いて学んだこと

試行錯誤しながら書き上げた結果、以下のことを学びました。

  • 話の構成や入れるべき情報に困ったら、「自分が何を伝えたいか」というゴールを思い出す
  • 盛るよりも削ることが大事。あれもこれも話したいと欲張ると伝えたいことがブレていく
  • 箇条書きではなく、実際に発表で話す時の話し言葉で書くと、文脈がおかしいことに気づきやすい

次回登壇する時、これらのことを意識しようと思います。

スライドを作る

当時、たまたま自分のMacBookにミルクティーをこぼしてしまい修理に出しており、妹からWindowsのPCを借りていたので、MacWindowsの両方で使えるKeynoteを使いました。
(慣れないPCで本番を迎えるのは避けたかったため、早く帰ってきて本当にホッとしました...)

f:id:Saki-Htr:20210811194521p:plain
修理が終わった連絡がきた時の呟き

WindowsKeynoteを使う方法は以下の記事を参考にしました。

www.dot-plus.com

スライド作りは大学生の時依頼で、現職もパワーポイントを使ってプレゼンをするお仕事はないので、どうすれば分かりやすいスライドにできるのか悩みました。 こちらも同じくメンターの伊藤さんの先程の記事を参考にさせていただきました。

工夫したことその1:問いかけを入れる

客席に目をやる、問いかけを盛り込む

発表の途中に「問いかけ」を盛り込むのも効果的なテクニックのひとつです。 「〜ですよね?」とか、「〜だったりしませんか?」とか、「〜ってご存じですか?」とか、こういった問いかけを挟み込むことで、聞き手はあなたと会話をしているような気持ちになります。 そうすると、話し手と聞き手の心の距離が縮まって、聞き手はあなたの話にじっくり耳を傾けてくれるようになります。

(発表でうまく話すためには (富山Ruby会議01のPRをかねて) #toyamark - give IT a tryより引用)

こちらを読んで、初めてのLT会 Vol.6で登壇された(id:fuga__ch)さんの発表を思い出しました。 fu-gaさんは、「どんな方に聞いてほしいか」「どんな風に聞いてほしいか」を明言されてから本題に入っていました。
問いかけを入れた方が、一方的に話すのではなく、聞いてくださってる方と対話するような雰囲気になり、聞きやすいと思ったので、以下の問いかけを入れました。

f:id:Saki-Htr:20210808133158p:plain

fu-gaさんの発表内容については、こちらの記事に感想を書いていらっしゃいます。

fuga-ch85.hatenablog.com

工夫したことその2:箇条書きにアニメーション機能を使う

こちらも伊藤さんの記事を参考にさせていただきました。

スライドを読ませない(聞き手の意識をスライドに集中させない)

スライドが文字だらけになると、聞き手はスライドの字を読むことに必死になります。 スライドを読むのに必死になると、聞き手の意識があなたの言葉ではなく、スライドの文字に集中します。

情報量が多すぎるスライドを防止する方法のひとつは、「スライドの中の文字を絶対に折り返さない」という制約を課すことです。

(発表でうまく話すためには (富山Ruby会議01のPRをかねて) #toyamark - give IT a try)

私の話ではなく、スライドの文字を読むことに集中してしまうのはたしかに良くない!と思ったので、伊藤さんの記事を参考に、以下を意識しました。

  • スライドの文字は折り返さない(実は最後のページだけ折り返しているのですが💦)
  • 文字をできる限り大きくする
  • アニメーション機能を使って、話に合わせて表示する

発表を練習する

ぺろさんによる発表練習会に参加する

本番3日前に、ぺろ(id:mosshu0703)さんに「発表練習会をやりませんか?」と呼びかけていただいたので、参加しました。

発表の途中でヤイヤイ言い合えるレベルの堅苦しくならない本当にただの練習会にしたいと思っているので、資料途中までしかできてないけど聞いて欲しいとかの方も全然参加していただいて構いません!

と仰ってくださったので、まだスライドが完璧でなかったですが、「むしろ完璧に作り終えてしまう前にフィードバックをいただけた方が、修正しやすい!」と思い、参加させていただきました。
アニメーション機能を使っていたので、私のスライドを進めるタイミングと、聞く方から見えるタイミングにタイムラグが生じないか心配でしたが、ここで大丈夫なことが分かり、安心できました。声をかけてくださったぺろさん、ありがとうございました!

本番直前に録画してみる

本番直前に、Keynoteの録画機能を使って自分の発表を録音してみました。 この時、自分の声が緊張のためか低くなっていて自信がない様子が伝わってきたので、本番では、お仕事での電話対応のように、声のトーンを上げてハキハキ話すことを意識して話しました。
その結果、今回のLT会のオーガナイザーの(id:ud_ike)さんに、

リハーサルのときより聴きやすくて、なんというかこなれてる感じがした

と仰っていただけて、とても嬉しかったです。

そして本番!

LT会は15時からなのですが、本番当日は始まるまでずっとソワソワしていました。ただ、「恥をかいたらどうしよう」という嫌なドキドキではなく、緊張と同時に、がんばって準備してきた発表を聞いてもらえる嬉しさや、どんな感想をもらえるかな~というワクワクした気持ちも感じていました。
このような気持ちでいられたのは、フィヨルドブートキャンプの皆さんがいつもあたたかく接してくださり、「たとえ失敗しても大丈夫」と思えたからだと思います。聞いてくださった皆さん、ありがとうございました☺️
本番は、回線トラブルやミスもなく、無事に終えられてホッとしています。

アンケートの感想を読んで

昨日(id:ud_ike)さんから、私の発表についての皆さんの感想が送られ、読みました。 感想楽しみだな〜とワクワクしていたのですが、まさかあんなにたくさんの方々がこんなに丁寧に感想をくださると思っていなかったので、本当に嬉しかったです😭✨ 何度も読み返しています。
感想を書いてくださった皆さん、ありがとうございました!家宝にします!!

さいごに

フィヨルドブートキャンプに入会したばかりの頃は、まさか自分がLT会に登壇する側で参加するとは思っていませんでした。LT会開催のお知らせがきた時、テーマは何も決まっていなかったのですが、あの時「えいや!」と半ば勢いで申し込んで本当によかったです。
今年元旦に掲げた2021年の目標の一つが、「LT登壇すること」だったので、叶って嬉しいです。
発表の場をくださったフィヨルドブートキャンプの皆様、本当にありがとうございました。 次は、技術LTに挑戦したいです!

参考記事

週報 4/12(月)~4/18(日)

4/12(月)~4/18(日)の一週間の学習の振り返りをざっくり。

今週の目標&結果

今週の目標 結果
debise課題の合格
omniauth課題 4/25(日)までに提出予定

今週の学習時間

ラクティス外の学習・勉強会への参加は含めない。

日付 目標 実際
4/12(月) 2:00 3:30
4/13(火) 2:00 4:30
4/14(水) 2:00 0:00
4/15(木) 6:00 5:30
4/16(金) 2:00 2:00
4/17(土) 6:00 7:00
4/18(日) 6:00 8:00
合計 26:00 30:30

今週やったこと

4/12(月)

やったこと

  • omniauth(1日目)
    • 記事を読んでOAuthが動く仕組みの時系列を自分なりに整理した

考えたこと

  • OAuthが何をするものなのか理解できた!
  • 認証と認可のちがいについて理解が深まってきた。参考記事を読み進めて、ちゃんと理解できるようにしたい。
  • 普段使ってるアプリがどういう仕組みで動いてるか知るのがとても面白い。この課題でGitHubSNSのアカウントによる認証が実装できるようになると思うと、ワクワクする😃

4/13(火)

やったこと

  • omniauth(2日目)
  • OAuthについて調べた
    • そもそもなぜOAuthを使うのか
    • なぜクレデンシャル情報を使って認可しないの?
    • 認可とは
    • omniauth1.9で使うOAuthのバージョンは1.0と2.0どっち?
    • OAuth2.0の仕組みを図で理解
    • 認可コードとは
    • oauh gemのREADMEを読む(omniauth gemとは別のもの)

考えたこと

  • OAuthの仕組みを理解できた
  • 疑問に思っていた「認可コード」が何かを理解できた
  • 良い感じの図を作れた。コードを書いて詰まったときは自分がどこの処理を実装しようとしているかこの図を見て確認しよう
  • deviseのユーザー認証はユーザーとアプリの1対1のやりとりでシンプルだったのに対して、 今回の課題はRails/devise/OAuth/omniauth/omniauth-github/GitHubと、たくさんの登場人物が出てきて難しい

4/15(木)

やったこと

考えたこと

4/16(金)

やったこと

  • omniauth(4日目)
  • 15(木)の日報提出
  • <復習> deviseでコントローラをカスタマイズしたいときのルーティング追記方法
  • OmniAuth: Overview · heartcombo/devise Wikiの続きを読む

考えたこと

  • githubアクションがありません」とエラーが出る理由がわかった。ちゃんとREADMEを読めば書いてある。
  • gemは、便利だからこそREADMEに書いてないカスタマイズをしたいときに、ちゃんと裏側の仕組みやコードやgemの依存関係?を理解していないと難しそうだなと思った。 GitHubでのログインと通常ログインを両方使えるようにする実装が難しそうなので、少し不安💦

    4/17(土)

やったこと

  • omniauth(5日目):GitHub認証ができた!
  • devise課題の修正

考えたこと

  • GitHubでログインできるようになった🎉 普段使っているアプリと同じ画面が自分のアプリに出てくると感動する。

4/18(日)

やったこと

  • 17(土)の日報提出
  • deviseの課題修正:すべて完了
  • devise-i18nの正しい使い方

    考えたこと

  • i18nのプラクティスでtメソッドを自分で追記したので、今回もそうだと思い、i18n化を一番最後に行ったが、最初にdevise-i18nを行って、その後i18n化以外のカスタマイズをすればよかった😂 まさかdevise-i18n がtメソッドの追記まで全部やってくれるとは思わなかった。便利すぎる...!
  • deviseとdevise-i18n、カスタマイズしていない場合はデフォルトのコードが適用される仕組みだが、どういう仕組みでデフォルトのコードが適用されているか仕組みが気になる。。手元にそのコードのファイルがないのに適用されているのがムズムズする

今週の振り返り

✅ できたこと/できるようになったこと

  • OAuthの仕組みを理解した
  • 認証と認可のちがいが分かった
  • devise-i18nの正しい使い方がわかった
  • Qiita記事ではなくREADME(一次情報)を読んで課題を進めた

✅ "こうしたらもっと良かった"と思うこと

  • 3月から学んだことをあんまりアウトプットできてない... ユーザーフォロー課題、コメント課題が重そうで、これに取り掛かり始めたら学んだことを忘れてしまいそう&課題に取り掛かってる途中で復習を挟みたくないので、ユーザーフォローに入る前にかならずブログにまとめる✍🏻

週報 4/5(月)~4/11(日)

週報 4/5(月)~4/11(日)

4/5(月)~4/11(日)の一週間の学習の振り返りをざっくり。 先週の3/29(月)~4/4(日)の週報を書いてないのでそちらもざっくり振り返る。

今週の学習時間

ラクティス外の学習・勉強会への参加は含めない。 目標達成🎉

日付 目標 実際
4/5(月) 2:00 0:00
4/6(火) 2:00 1:45
4/7(水) 2:00 3:15
4/8(木) 6:00 5:15
4/9(金) 2:00 3:15
4/10(土) 6:00 7:15
4/11(日) 6:00 7:30
合計 26:00 28:15

先週

3/29(月)

やったこと

考えたこと

朝活した🌟必要なページはほぼ完成したと思う!

3/30(火)

やったこと

  • 昨日の日報提出
  • i18n課題の再提出
  • URLがusers/editの理由を知る。 →/users/:id/editだと、ログイン中のユーザが自分以外を編集しようとしていないか?をチェックする認可の処理が必要になる。実際のアプリケーションの自分のユーザーページのURLを見たら、current_user/editusers/settingsになっていた。なるほど〜

考えたこと

今日は早起きに失敗してしまったので、ほとんど学習できなかった。ずっと読みたいと思ってて一ヶ月ほど積ん読していた本を読み始めた💪 学習に集中できない時に少しずつ読み進めたい。

3/31(水)

やったこと

  • 画面遷移図の変更
  • ログインしたらユーザー一覧にリダイレクトさせたい→できず
  • ユーザー編集画面で更新した情報が、更新できてないことに気づいた→未解決のまま
  • ログイン前に/books に行けないようにする:before_actionを使う
  • 夜は友人と会う約束があったので学習せず。

考えたこと

  • やりたいことを都度検索して記事のコードをその場その場でコピペしても、その場しのぎの解決になっていて、自分が理解していないと意味がない&Qiita記事は前提がそれぞれ違うし間違っている可能性もあるので、やめる。
  • Railsの仕組みを分かってなさすぎる。今、Railsの仕組みがわかっていないのにdeviseを導入しているから、コードを書くときに、Railsのもともとの機能をつかえばいいのかdeviseを使えばいいのか分からず、混乱している状態。
  • 他の方の日報を見ていると、deviseあたりで、「Railsを全然分かってないので、書籍などで体系的に学んだほうがいいかも」と感じている方をチラホラ見かけたので、私もそうすることにした。
  • 教材が色々あって迷ったが、独習Railsがとても分かりやすいので一通り目を通すことにした。一回目を通すと、詰まったときにあそこに書いてあったな〜と思い出せるので、頭の中にインデックスを貼る方式で読もうと思う。が、devise課題に関係ありそうなところは自分のコード見つつしっかり読む。
  • 明日から独習Rails読む💪

4/1(木)

やったこと

  • 独習Railsを読む
    • 1章
      • 設定より規約
      • リソースフルルーティング
      • MVCモデル
    • 2章は実際にコードを書くときに読む
    • 3章途中まで
      • rails sしたら再びwebpackerのエラー

考えたこと

  • 私含めてみなさんが、「Railsはいろいろやってくれていて、どういう仕組みでこうなったか分からない」となるのは、この設定より規約という基本理念からきているのか〜なるほど。deviseも導入したらすぐにユーザー登録・ログイン/ログアウト機能・ユーザー編集ができてて、びっくりしてたけど、この理念からきていたのか。
  • プログラミング言語には、設定重視だったり、規約が多すぎたり色々な言語があるらしいが、webアプリを作るにあたって1から全部の設定を書くより、「どのwebアプリでもこの機能は使うよね」、というものがデフォルトでオンになっている方が、毎回同じ設定を1から書くより効率的でよさそうと思った。Railsが色々やってくれている仕様になっている理由が分かってちょっとスッキリ
  • 今日はたくさん寝たはずなのに学習中も眠くてあんまり集中できなかったのが辛かった。今週はそんな週だと割り切るようにする。

4/2(金)~5(月)

おやすみ😪

今週

4/6(火)

やったこと

  • 独習Rails:3章読む
  • モデルはデータベース自身のことではなく、データベースを便利に扱えるようにデータベースとやり取りする役割を持つ。 →モデル=DBと勘違いしていた。

考えたこと

  • 忘れかけていたscaffoldを思い出せた。初めてscaffoldを実行したときよりも深く理解できていると思う。
  • 2日の金曜から4日間学習していなかった💦元気が出てきたので今日からまたがんばる。「ちょっとずつでいいから毎日やる」を実行するのって結構難しい。
  • devise課題のコードの現況や残りのタスクがどうだったのか日にちがあいて、忘れかけているので進捗確認する。

4/7(水)

やったこと

  • 独習Rails3章で気になったことを調べた
    • before_actionとは
    • form_withヘルパー
      • form_withとform_forのちがい
      • deviseはform_forで書かれいるが、現場ではform_withに書き直しているのか? →メンターさんにコメントで教えていただいた。現場ではすぐに全部form_forをなくそうというほど急ぎで対応はしていないようだ。
  • たまった日報の提出

考えたこと

  • deviseのコードの意味がわかってきて嬉しい。
  • form_forを理解できた

4/8(木)

やったこと

  • 独習Rails3章
    • 部分テンプレート
      • renderメソッド
      • deviseの部分テンプレート
    • モデルに使えるメソッド
    • 「登録する」ボタンをクリックした時に裏側で何がおこっているか(時系列)
  • deviseについて調べた
    • deviseはデフォルトだとモデル,コントローラ,ビューが無い状態→カスタマイズしたければrails gで作成する
    • rails g devise User は何をしてるのか?
    • rails g devise:viewsrails g devise:views usersのちがい →READMEを読んでもよく分からず。 →メンターさんに、「後者を使うのはscoped viewというもので、管理者ユーザを別モデルのadminsにする場合などに、usersとadminsでそれぞれ別のviewを使いたかったりして、そういうとき使うというイメージ」と教えていただいた。

考えたこと

  • 今回の課題はモデルが一つなので、rails g devise:viewsの実行が正しいと分かった。Qiita記事など見ると、モデルが一つの場合でもrails g devise:views <モデル名>を実行している記事があり、どう使い分けたらいいか悩んでいたが、正しい情報をメンターさんに教えていただけてよかった。 なんとなくviews/users/の直下にdeviseのviewsもあった方がいいかなと思って、rails g devise:viewsを消してrails g devise:views usersを実行しなおそうとしていたので、実行する前にしれてよかった。
  • 私がdeviseで詰まっているメインの原因は、実装したいことをdeviseを使ってやればいいのか、Railsにもともと備わっている仕組みでやればいいのか分からないところだと思う。詰まったところを解決できそうなところはとくに重点的に読みたいので残りの要件とか課題を整理しようと思う。

4/9(金)

やったこと

考えたこと

  • deviseのカスタマイズ方法 https://github.com/heartcombo/devise/tree/master/app ここを見れば、deviseのコントローラやビューのコードが見れて、デフォルトの状態だとこのコードが参照される。 最初、 rails g devise:viewsやrails g devise:controllers を実行したらカスタマイズできることを知らなくて、deviseのコントローラやビューを探しても該当するコードがアプリケーションに無くて混乱した。 Railsの設定より規約の理念を知ってからこの仕様にしっくりきている。
  • READMEをがんばって読んだ!一次情報大事。 Qiita記事のコードを安易にコピペしない。

4/10(土)

やったこと

devise課題

  • deviseのコントローラをカスタマイズする
  • アプリの利用にはログインを必須にする
  • リダイレクト先を設定する
  • ユーザー情報を更新できない問題を解決
  • 更新時のリダイレクト先を自分のユーザー詳細画面にする
    • 書いたコードの意味を調べる
  • パスワードを忘れたらパスワード再設定メールを送信してパスワードを再設定できる
    • letter_opener_gem導入
  • i18n
    • devise-i18nのREADMEを読む
    • rails g devise:i18n:locale jadevise.views.ja.ymlを作成

考えたこと

  • 初めてdeviseを導入したときはコードの意味がわかってなかったが、今日はRailsの仕組みを理解した上で、READMEを見ながらコードの意味を理解して課題を進められた。成長を感じる💪
  • 詰まっていて後回しにしていたタスクを全部実装できた!うれしい🎉

考えたこと

  • 独習Rails読み勧めてから課題に戻ろうか迷ったが、意外とRailsへの理解が進んでいて、詰まっていたタスクを実装することができた。progateと独習Railsのおかげだ。嬉しい!成長を感じる😆

4/11(日)

やったこと

  • devise課題
    • i18n
    • Gitでの疑問
    • 提出🎉
  • 日報提出
    • 4/9(金)
    • 4/10(土)
    • 4/11(日)
  • 先週と今週の週報を書いた(この記事)

考えたこと

deviseの課題を提出できた🎉 この課題を通してRailsの仕組み、deviseの使い方への理解を深められたので嬉しい。

今週の振り返り

✅ できたこと/できるようになったこと

  • deviseの課題を提出できた🎉
  • Railsとdeviseの仕組みがわかってきた
  • devise,letter_opener_web,devise-i18nのREADMEを翻訳しながら読んだ
  • 遅延評価勉強法を実践できている。「全部理解してから始めたい病」を克服できている✨ 勉強が苦手な人向けの「遅延評価勉強法」 : けんすう日記 分からないことだらけの課題と向き合うよりも、教科書を順に読んでいくほうが、壁に当たることもなく、メンタル的にも楽だが、要件を実装するために情報収集している時が一番身になっていると感じるので、これからもこの方法を実践していく💪
  • 学習時間が目標を上回った。

✅ "こうしたらもっと良かった"と思うこと

来週の目標

  • devise課題の合格
  • omniauth課題
    所要時間の目安は12時間だが、この辺からRailsラクティスが難易度が上がるらしく、また独習Railsを読んでRailsを理解する必要がありそうなので、提出目標は、2週間後の4/25(日)にする。

週報 3/22(月)~3/28(日)

3/22(月)~3/28(日)の一週間の学習の振り返りをざっくり。

今週の目標&結果

今週の目標 結果
i18nの合格 修正中
kaminariの合格 再提出完了
deviseの課題 来週には提出できそう

今週の学習時間

ラクティス外の学習・勉強会への参加は含めない。

日付 目標 実際
3/22(月) 2:00 4:15
3/23(火) 6:00 7:30
3/24(水) 2:00 2:15
3/25(木) 6:00 8:00
3/26(金) 2:00 3:30
3/27(土) 6:00 4:30
3/28(日) 6:00 4:15
合計 30:00 34:15

先週から再開した朝活のおかげで、目標時間を超えられた🎉

今週やったこと

3/22(月)

やったこと

  • devise #1
  • deviseの課題用のブランチを新しく切ってチェックアウト
  • Notionを使ってdeviseの要件の把握
  • WebアプリのDB利用の課題に合格をもらえたのでマージ
  • 週報書いた

3/23(火)

やったこと

考えたこと

  • 記事の通りに行ったらユーザー登録の機能はできたが、応用力が皆無。
  • ユーザーの一覧ページをどうやって作るのか?新しいページのルーティングの設定方法は?
  • 画面遷移図をつくって把握した方がいいと思った。
  • 郵便番号・住所・自己紹介はおそらくuserテーブルに追加するんだろうけど、どうやってやるんだろう。
  • アカウント登録のページと本棚のページがつながっていないからボタン作ってリンク貼るか、リダイレクトさせるようにせねば。
  • 色々メモしたが、何をやっているかいまいち分かっていない。Railsの教科書をもう一度読み直したほうがいいかも。
  • ファイルがどんどん増えるrails gコマンドを使うのがこわい。
  • Rails・deviseと仲良くなりたいので、もっとコードを書いて慣れていきたい💪

3/24(水)

やったこと

  • 23(火)の日報提出
    • 昨日のcodezineの記事の、コマンドやコードの意味を振り返った
  • devise #3

考えたこと

  • Railsが広大で、何も分からない状態だけれども、ユーザー認証機能を自力で作れるようになったらとても嬉しいので、急がば回れの精神でがんばりたい。

3/25(木)

やったこと

  • progate:Rails Ⅰ~Ⅱ途中
  • devise #4
    • 画面遷移図作成
    • rails g controller users indexでusersコントローラ作成
    • Usersモデルにカラム追加
    • railsでDBを確認する方法
    • rails db:migrateを無かったことにする方法

考えたこと

  • Userモデルにカラムを追加できたのと、画面遷移図を分かりやすくかけたのがよかった
  • Railsが何も分からなくて辛い...という気持ちになりかけているので、一番とっつきやすいprogateで学習することにした。
  • ページの作り方はわかったけど、ユーザー一覧ページと詳細ページを作成するために、どこにどうファイルを作ればいいか分からない。
  • 明日も引き続きprogateをやりながらdeviseを考える。画面遷移図を書いたことで、やるべきことが目に見えてクリーンになった✨
  • 疑問:/users というパスにユーザー一覧のページを作りたいのだけど、deviseですでに/users/~のページが作られている。 コントローラはdeviseだけど、パスは/users/~ がすでにある状態。この場合、deviseで作ったcontrollerをいじればいいのか 新しくrails g controller users indexでページを作るのか? →メンターさんから、「devise のcontrollerはそのdeviseの機能に専念させたほうがあとからツラくならない」と教えていただいたので、rails g contrller user indexでuserコントローラーを作ることにした。

3/26(金)

やったこと

  • devise #5
    • Userモデルにカラムを追加して、viewで表示する
    • formヘルパーを学ぶ
    • autofocus: trueautocomplete: "email"の意味を理解
    • アカウント登録画面でユーザー名なども入力できるようになった!

f:id:Saki-Htr:20210328210525p:plain

考えたこと

  • Userモデルに追加したカラムを、ユーザー登録画面に表示できた!目に見えると嬉しい。

3/27(土)

  • 日報提出
    • 25(木)
    • 26(金)
  • devise
    • deviseで作られた画面(ルーティング)の確認
    • ユーザー一覧画面/ユーザー詳細画面を作成:rails g controller Users index show
    • strongパラメーター設定
    • 既存のカラムに後から制約をつけたかったが、できず
    • バリデーション:登録時全部を入力必須にする

やったこと

  • devise #6
    • ユーザー一覧とユーザー詳細ページのルーティングができた!
    • deviseが用意してくれるルーティングの範囲と、自分で用意しなければいけないルーティングの範囲が分からず混乱していたが、わかってきた

考えたこと

  • 何が分からないか分からない状態は抜け出せたと思う。来週には提出したい。

3/28(日)

やったこと

  • devise #7
    • link_toで、ユーザー一覧から詳細画面にとべるようにする
    • ユーザー詳細画面の作成
    • マイページに編集リンク作る
    • kaminari実装
  • i18nの提出物にコメントする
  • kaminariの再提出

考えたこと

  • コントローラでUserモデルやBookモデルに対して使えるメソッドが分かってないから知りたい。new,find_by,allぐらいしか知らない。書籍をしっかり見たほうがよさそう。
  • どこのページにどのリンクを貼るかってユーザーの使い勝手において大事だろうな〜
  • ページができてきて嬉しい。
  • コミットの粒度こんな感じでいいのかな。コミットまとめられるらしいのでこまめにやってしまってる。

今週の振り返り

  • deviseがどんな機能を実装してくれるか、どんなルーティングを作ってくれるか分かった。
  • 月曜の時点で、Railsの知識は「Railsの教科書」を一周読んだ程度で、コントローラやモデルについては結構忘れていて、ビューしかちゃんと分かってない状態だった。その状態で火曜にdeviseを実装して、何も分からない状態だったが、progateをやりなが課題を進めたら、どこのファイルに何を書くべきかや、rails gコマンドが何をしてくれているかの理解が深まった。
    やっぱり、アウトプット駆動で教材をやった方が身につくなと思った。
  • 今週は出勤日全部、早起きしてカフェで2時間学習した!えらい😆

来週の目標

deviseの課題を来週中には提出したい。 - パスワード再設定をメールに送信する - ログインしたないとユーザー情報も本棚も見れないようにする - アプリケーションルートと、ログイン完了後のリダイレクト先を、ユーザー詳細ページにする

あたりで時間がかかりそうだな〜と思っている。i18n化はdevise-i18n-viewというgemをうまく使いこなせれば、そんなにかからなさそう。
だんだんRailsのことが分かってきて、「もっとRailsのことを知りたい!」というポジティブな気持ち。 次のomniauthの課題から難易度もグッと上がるらしいので、progateや独習Railsで基本をおさえていきたい。

週報 3/15(月)~21(日)

3/15(月)~21(日) の一週間の学習の振り返り。

今週の目標&結果

今週の目標 結果
WebアプリからのDB利用の合格 ◎21(日)に合格
i18n の提出 ◎20(土)に提出
kaminari を使ったページング処理 ◎20(土)に提出
devise を使ってユーザー認証を実装する ✕ 来週から着手

今週の学習時間

ラクティス外の学習・勉強会への参加は含めない。

日付 目標 実際
3/15(月) 2:00 4:30
3/16(火) 2:00 2:30
3/17(水) 2:00 3:45
3/18(木) 6:00 0:00
3/19(金) 2:00 0:00
3/20(土) 6:00 8:15
3/21(日) 6:00 4:45
合計 26:00 23:45

今週やったこと

3/15(月)

やったこと

  • i18n:2日目
    • 用語理解:ロケール/国際化/localizationとは
    • デフォルトロケールの設定を、config/initializers/locale.rbconfig/application.rbのどちらに書けばいいかわからず。 →
    • I18n_generatorsを使って、ja.ymltranslate_ja.ymlを自動生成
    • 疑問点整理

考えたこと

  • 昨日はRailsガイドの説明がわからず、とにかく動くものを作るという感じだったが、i18nの使い方や書いたコードの意味がが少しずつわかってきた。
  • 久々に早起きして朝カフェで学習した!頭がスッキリしていて体も元気なので集中できた。温かくなってきて布団から出やすくなったので朝活がんばりたい。
  • 買った独習Railsi18nの項目があったので明日読む!
  • 公式ドキュメントの日本語が違和感があったり少し変なときは、原文を確認してみるとよいと学んだ

3/16(火)

やったこと

  • 独習railsi18nの部分を読む
  • Railsの教科書を読んで、モデルの復習

考えたこと

  • 翻訳ファイルが何をしているのかや、使い方・書き方がわかった
  • 独習Railsi18nの説明分かりやすい。いろんな記事を見て回るより一冊の本をじっくり読んだ方が効率的。
    翻訳ファイルが何をどこまで日本語化してくれるものなのかわからず大変だったが、独習Railsを読んだら体系的にi18n化のやり方が載っていて、説明もわかりやすくて本当に助かった。

3/17(水)

やったこと

  • 独習Railsを読みながらすべての日本語化を完了
  • activerecordを使った、翻訳ファイルtranslation_ja.ymlの書き方を学んだ

考えたこと

  • viewディレクトリ以外の、翻訳ファイルを当てるファイルを探すのが大変だったが、難関だったcreateボタンやflashメッセージも日本語化できた
  • 最初なんとなくで書いていたtメソッドの書き方を理解できたのが嬉しい。
  • Markdown形式のリンクを素早くコピーする方法を今日初めて知った。とても便利。
  • webアプリを使っていて出てくる英語はすべて日本語化できたので、明日はrubocopを通したり、提出前のチェックリストを確認して、提出する。

3/20(土)

やったこと

  • i18n
    • 提出前チェック:不要なファイルやコードを削除したり、rubocopを通したり。
    • 課題提出
  • kaminariの課題提出
  • webアプリのDB利用の修正点を整理
  • 16(火),17(水)の日報提出

考えたこと

  • i18nとkaminari、2つの課題を提出できた🎉
  • ja.ymltranslation_ja.ymlの使い分け方がぴんときていない。

3/21(日)

やったこと

  • DB利用の修正&提出→再度修正&提出して合格
  • 課題の修正
    • ブランチからREADMEを消さない
    • プルリクエストのタイトルをちゃんと書く
    • コミットの粒度をもっと小さくすべし
  • 20(土)の日報提出

考えたこと

  • WebアプリからのDB利用を合格した!RESTプラクティスがおわった🎉これでRailsラクティスに集中できる💪🔥

今週の振り返り

✅ できたこと/できるようになったこと

  • 振り返ってみると、つい一週間前までi18nを全然理解できていなかったことに驚き。初めてRailsガイドのi18nの説明を読んだ時に比べて、今はかなり理解が進んだと思う。
  • 今週から朝活を再開した。仕事がある日4日中、3日早起きして職場近くのカフェで朝2時間学習した。温かくなってきたので、早起きがんばりたい🌅
  • 課題の進捗もいい感じ。ただ、deviseの課題が重そうなので、不安。

✅ "こうしたらもっと良かった"と思うこと

  • 今週はとくに思い当たらない。体調もかなり良好で、集中して課題に取り組めた。

来週の目標

目標 目安時間
i18nの合格 -
kaminariの合格 -
deviseの課題 14:00

近況 & 来週の目標

3/1(月)から体調が悪くなり、それに伴ってメンタルも沈んでしまっていて学習から遠のいていたので、日報も週報も書いていなかった。
回復したので、今日から学習再開🔥。およそ2週間ぶり。
気がついたら3月が半分終わってビックリしている。

今の気持ち

  • 体調が悪い時に取り組んでいた課題を、今日やってみたらそこまで難しく感じなかった。まだRubyのコードを読むのに慣れていないので、疲れている時や仕事後はより難易度が高くなってしまうんだと思う。
  • 長時間詰まっていた課題を次の日に取り組んだら大したことじゃなかった、ということがこれまで何度もあったので、難しいと思ってもあんまり気落ちしないようにしようと思った。
  • 久々に学習したら、やっぱり楽しかったので、がんばって卒業するぞ〜という気持ち💪
  • 2週間休んでいたことに対して後悔はそんなに無いのだが、
    • 休む時間が長引くほど再開が億劫になる問題(本当は今週木曜あたりから元気だった)
    • 体は休んでいたが、学習していないことへの罪悪感を感じてしまい、心は休めていない問題
      をなんとかしたいな〜と思っている。

来週の目標

目標 目安時間
WebアプリからのDB利用の合格 -
i18n の提出 9:00
kaminari を使ったページング処理 4:00
devise を使ってユーザー認証を実装する 14:00
(この辺からググる程度では実装できなさそうな予感)

あたたかくなってきたので、朝活も再開したいな〜と思っている。