きゃんブロ

きゃんなブログ

【Fly.io×Active Storage】画像が表示されたりされなかったりする現象はなぜ起こるのか

fly.ioでボリュームを作成し、マシンに接続。 無事に本番にもデプロイして画像の保存を永続化できた...!

...けれどなぜか画像が正常に表示されない😭表示されたりされなかったりする😭😭😭

このような自体になっていませんか?

今回はこの現象はなぜ起こるのか?を説明します。

fly.ioでは2つのマシンを持つことを推奨

fly.ioでは、マシンを2つ持つことが推奨されています。 これはなにを意味するかというと、ボリュームも2つ持たなくてはならないということです。

マシンに対し、接続できるボリュームはひとつだけです。 マシンを2つ持つのであれば、ボリュームも2つにしなければいけないのです。

そして、マシンはお互いに独立し、ボリュームもお互いに独立します。 ボリューム同士は同じデータを共有することはありませんし、1つのマシンで2つのボリュームの面倒を見ることはできません。

まずはこれをご理解いただければと思います。

マシンとボリュームを2つずつ持つことによる弊害

マシンとボリュームは1対1で接続されるとお話しました。 これを2つ持っている状態を絵に表すと、こうなります。

1つのアプリの中に2つのマシンを持っている様子
1つのアプリの中に2つのマシンを持っている状態

ここでは仮にマシンAがボリュームAに接続されており、マシンBがボリュームBに接続されているとします。

この状態で、あなたのアプリ上でユーザーが画像を登録したとします。 すると、現在アプリを動かしているマシンに接続されている方のボリュームに入ります。

ボリュームAに画像が保存されている様子
ボリュームAに画像が保存されたとする

ボリューム間でデータが共有されることはないので、どちらかのボリュームにデータが入ることになります。 ここまでくれば、なんとなく察しはついたのではないでしょうか。

そうです。ボリュームAに保存された画像を再び引っ張ってくるためには、マシンAに接続する必要があります。 なぜなら、マシンAに接続されているのはボリュームAのみで、マシンBからボリュームAを見に行くことはできないからです。

そのため、リロードをすると画像が表示されたりされなかったりという現象が起こるわけです。 これは、アプリがマシンAとマシンBを持っていて、リロードする度にマシンAでアプリを起動したり、マシンBでアプリを起動したりするからです。

ボリュームBを見に行っても保存した画像データがない様子
ボリュームBを見に行っても保存した画像データはない

これを解決するには?

これを解決するには、他の方法でボリューム間のデータを共有するようにする必要があります。残念ながら、fly.ioの力だけで解決する手段は現時点では存在しないようです。

もしどうしてもfly.ioとActive Storageを利用したい場合は、マシン1つで稼働しなければいけません。しかし、これは公式が推奨する2台のVMで稼働するというものに反するものなのでおすすめしません。(小規模なアプリであれば大丈夫かもしれないですが、自己責任でお願い致します。)

アプリ上でユーザーが登録した画像を永続的に見せたい場合は、他の手段を探してみましょう。

参考

【Skinmate】2023/10/5 リリースのお知らせ🍊

Skinmate(スキンメイト)のサービスページ
Skinmate(スキンメイト)

skinmate.fly.dev

いつもSkinmateをご利用いただきありがとうございます。

一部機能を追加・改善したためお知らせいたします。

リリース内容

  • 画面の表示速度を改善しました。
  • パフォーマンスを損なわないため、アップロードできる画像のサイズに制限を設けました(1MBの大きさの画像までアップロード可能)。

今後ともSkinmateをよろしくお願いいたします🍊

【fly.io】間違えて作成してしまったボリュームを削除する方法

本来fly volume create [ストレージ名] --size 1と実行して1GBのボリュームを複数作成するべきだったが、sizeオプションをつけずにfly volume create [ストレージ名]で無料枠を超える3GBのボリュームを2個生成してしまったのでその対応を残しておく。

マシンがボリュームに接続されているか否かで対応が異なる

まずは、削除したいボリュームがマシンに接続されていないか確認しましょう。 ボリュームがマシンに接続されているかいないかで、ボリュームを削除する方法が少し異なります。

それでは確認していきましょう。ターミナルにfly volumes listというコマンドを打ちます。 下記のような情報が出てきます。

> fly volumes list
ID                      STATE   NAME            SIZE    REGION  ZONE    ENCRYPTED   ATTACHED VM     CREATED AT 
#詳細は記載できないため省略します

削除したいボリュームの「ATTACHED VM」カラムを確認します。もし、そこにマシンIDが入っていなければそのボリュームはマシンに接続されていません。ATTACHED VMにマシンIDが入っていれば、そのボリュームはマシンに接続されています。

接続されていない場合は「マシンにまだ接続していないボリュームを削除する方法」の手順を確認してください。 接続されている場合は「マシンに接続済みのボリュームを削除する方法」の手順に沿って作業を進めてください。

マシンにまだ接続していないボリュームを削除する方法

①削除したいボリュームIDを確認

fly volumes listというコマンドを打ちます。

> fly volumes list
ID                      STATE   NAME            SIZE    REGION  ZONE    ENCRYPTED   ATTACHED VM CREATED AT     
#一番左の「ID」欄を確認

削除したいボリュームの「ID」欄(一番先頭のカラム)を確認します。

②ボリュームを削除

上記で確認したボリュームIDを引数に指定してボリュームの削除コマンドを打ちます。その後、本当に消していいか聞かれるので「Yes」を入力します。

> fly volumes delete [上記で確認したボリュームID]
? Are you sure you want to destroy this volume? Yes
Destroyed volume [ボリュームID] from [あなたのアプリ名]

もしここで、Error: failed destroying volume: This volume is attached to a machine(マシンID) and cannot be deleted.というエラーが出た場合はそのボリュームはマシンに接続されています。マシンが接続されている状態ではボリュームを削除することはできません。先に、接続されているマシンの方を削除する必要があります。

マシンに接続済みのボリュームを削除する方法

マシンに接続されてしまったボリュームは削除できないので、マシンの方を削除してからボリュームを削除する手順を踏まないといけません。

①マシンを削除

1. 削除したいボリュームと接続されているマシンIDを確認

fly volumes listコマンドで削除したいボリュームと接続されているマシンのIDを確認します。

> fly volumes list
ID                      STATE   NAME            SIZE    REGION  ZONE    ENCRYPTED   ATTACHED VM     CREATED AT 
#「ATTACHED VM」欄に記載されているマシンIDを確認

2. マシンが停止しているか確認

> fly status
App
# 省略
Machines
PROCESS ID              VERSION REGION  STATE   CHECKS  LAST UPDATED         
# 「STATE」欄がstoppedになっているか確認

もしstoppedになっていなければ、1の手順で確認したマシンIDを引数に取って下記のコマンドを打ちましょう。

> fly machine stop [1で確認したマシンID]

3. マシンを削除

1の手順で確認したマシンIDを引数に取ってマシンの削除コマンドを打ちます。

> fly machine destroy [1で確認したマシンID]
machine [マシンID] was found and is currently in stopped state, attempting to destroy...
[マシンID] has been destroyed

これでマシンの削除が完了しました。 ちなみに、マシンを削除したらそれに接続されているボリュームも一緒に削除されるというわけではありません。 ボリュームの削除は別で作業する必要があります。

②ボリュームを削除

それでは、本命のボリュームを削除する作業に入ります。

1. ボリュームIDを確認

この状態でボリュームを確認してみましょう。「ATTACHED VM」が空欄になっているはずです。

> fly volumes list
ID                      STATE   NAME            SIZE    REGION  ZONE    ENCRYPTED   ATTACHED VM     CREATED AT 
# 削除したマシンが消え、「ATTACHED VM」が空欄になっているはず

空欄になっていればボリュームとマシンの接続が解除されています。

ここで、削除したいボリュームのIDをコピペしておきましょう。 ボリュームIDはfly volumes listで確認できる一番左側にあるやつです。

2. ボリュームを削除

1の手順で確認したボリュームIDを引数にとってfly volumes deleteコマンドを実行しましょう。

> fly volumes delete [1の手順で確認したボリュームID]
? Are you sure you want to destroy this volume? Yes
Destroyed volume [ボリュームID] from [あなたのアプリ名]

これでボリュームが削除されました。おつかれさまでした!

無料枠を超えても使用していなければ課金されないっぽい?

私の場合、3GBのボリュームを2個作成してしまい持っていた2台のVM両方とも接続されてしまうという状態になりました。無料枠は3GBまでなので焦った焦った...。急いでVMは2台とも削除、ボリュームも2個全て削除し、マシンもボリュームも何もない状態にしました。幸い、課金はされませんでした。使った分だけ課金されるみたいなことが公式に書いてあったので、大丈夫だったのかもです。

参考

アパレル出身文系女子がガチなオンラインプログラミングスクールを卒業するにはどのくらいの時間と料金がかかるのか

こんにちは。aya-kyanです。

以前にこちらの記事を書いたところ多くの反響をいただきました。ありがとうございます! aya-kyan.hatenablog.com

今回はこの続きを書こうと思います。

というのも...この度オンラインプログラミングスクール「FJORD BOOT CAMP(フィヨルドブートキャンプ) (以下、フィヨルド)」を無事に卒業しました! bootcamp.fjord.jp

先述した記事では、通うか悩んでいる方向けに難易度や料金、時間がどのくらいかかるかをテーマにしてお話しました。しかし、この時点ではまだ卒業していなかったのでお話できるのはチーム開発までの内容となっていました。

その後、無事に卒業できたので「結局どのくらいの時間と料金がかかったのか」をお話しします。

チーム開発のあとは自作サービスを開発

少しだけ前回の振り返りをします。

フィヨルドのプラクティスをざっくり大きく分けると3つあります。(詳しくは冒頭に記載したこちらの記事をお読みください!)

  1. 基礎学習フェーズ
  2. チーム開発をするフェーズ
  3. 自作サービスを開発するフェーズ

本記事では3つ目の「自作サービスを開発するフェーズ」についてお話します!

自作サービスの開発にかかった期間・時間

実際にかかった期間

期間:約4ヶ月(着手日 2023/1/24 ~ 提出日 2023/5/23)

*筆者が働きながら取り組んだ場合の結果です。

ここでは料金について言及したいため、自作アプリをメンターさんへ提出した日を完成日としたいと思います。自作サービスの開発プラクティスでは、提出後〜メンターさんにレビューをもらうまで時間がかかります。そのため、提出後に一定の基準が満たされていることが確認されると、レビューが完了していなくてもサブスク課金をストップしてくれます。私の場合、2023年5月23日に提出し2023年5月25日に課金ストップの連絡をいただけました。

アプリ完成後、メンターさんからのレビュー対応をしていたのでリリースできたのはもう少しあとになっています。仕事のほうが忙しくなってしまい、レビュー対応を少しずつやっていたことでリリースがだいぶ遅くなってしまいました。

*「リリース」とは、サービスを世の中に公開することです。

実際にかかった時間

時間:238.8時間

*筆者が働きながら取り組んだ場合の結果です。

アプリが完成した時点での取り組み時間は1402.8時間となっています。先述した記事を書いた時点での取り組み時間は1164.0時間でした。取り組んだ期間は約4ヶ月なので下記のような計算ができます。

  • 1ヶ月あたりの平均取り組み時間:(1402.8時間 - 1164.0時間)÷ 4ヶ月 = 59.7時間

  • 1週間あたりの平均取り組み時間:59.7時間 ÷ 4週間 = 14.925時間

  • 1日あたりの平均取り組み時間:14.925時間 = 2.132...時間

となります。金銭面で通うか否か悩んでいる方はこれを参考に、自分が取り組めそうな勉強時間を基準にして計算してみるといいかもしれません。

卒業するまでにかかる時間・期間・料金

働きながら取り組んだ場合の結果

このような結果となりました!

  • 時間:1402.8時間
  • 期間:2021/6/24 ~ 2023/5/23(1年11ヶ月)
  • 料金:685,400円(29,800円 × 23ヶ月)

*筆者が働きながら取り組んだ場合の結果です。

フィヨルドは月々29,800円のサブスクリプションサービスなので、29,800円 × 23ヶ月という計算をしています。

働かずに取り組んだ場合の予想

上記は働きながら取り組んだ結果ですが、仕事を辞めて取り組むことを考えている人向けの計算もしたいと思います。 条件は下記とします。

  • 1日あたり8時間勉強する
  • 1週間あたり5日間勉強する(土日は休む)
  • 1ヶ月あたり20日間勉強する

筆者が卒業までにかかった時間「1402.8時間」を元に計算するとこうなります。

  • 1402.8時間 ÷ 8時間 = 175.35日
  • 175.35日 ÷ 20日 = 8.7675ヶ月(約9ヶ月)
  • 9ヶ月 × 29,800円 = 268,000円

筆者が働かずに取り組んだ場合は約9ヶ月で卒業できそうです。以前に「他の方のブログを拝見していると10ヶ月ほどで卒業している方がいるようだ」と書きましたが、それと同じくらいの期間になりました。9ヶ月でこのお値段はかなり安い。学習内容については次項で述べたいと思います。

プログラミングスクールの選定でお悩みの方へ

大切なのは時間や料金ではない

働きながら通った結果「1年11ヶ月」となりました。これはかなり長めですよね。早く転職したい!と思っている方にはタイムパフォーマンスが気になりそうです。調べてみると、プログラミングスクールの中には1~6ヶ月程度のものがあるようです。時間や料金も大切なのですが、ここでお伝えしたいことは「どのくらいのレベルを学びたいか」です。

フィヨルドを完走し終えて「このプラクティスは省けたのではないか」と思ったものはありませんでした。そして、この次に考えたことは「短期間のプログラミングスクールは本当に基礎の基礎しか学ばせて貰えないのでは...」とも思いました(*あくまで個人的な感想です)。つまり、フィヨルドではかなり実践的な内容を学習できたと思っています。

また、このようにカリキュラムが多くなったことについてフィヨルドの運営者であるkomagataさんはこのようにツイートしています。(こちらのツイートはご本人の許可を得て記載しています。)

フルスタックエンジニア」についてネットで調べるとこのように出てきます。

フルスタック(full-stack)とは、複数の技術分野において、知識・スキルに深い理解があることを意味しています。つまり、複数のIT分野に精通しており、複数の開発工程を一人で担当できるマルチなエンジニアのことを、一般に「フルスタックエンジニア」と呼んでいるのです。

引用:フルスタックエンジニアとは?仕事内容・必要スキルについて解説 | Engineer Labo エンジニアラボ

エンジニアの中にも分野があり、インフラ、バックエンド、フロント、など様々です。フィヨルドではこれらの分野を横断的に学べる内容となっているのでカリキュラムが多くなっている、というわけです。「わたしがやりたいのはフロントだし、他は必要ないな」という風に思った方もいるかもしれません。しかし、フロントを組むのにも「バックエンドのここは知っておいた方がいい」ということもあるので一概に全く関係ないとは言い切れません。このことからも、フィヨルドの学習内容は実践的であることを垣間見ていただけると思います。

プログラミングスクールに通うことを検討している方は、自分がどのようなエンジニアになりたいかを事前にイメージしてみるといいかもしれません。しかし、それはむずかしいですよね。その場合、わからなくてもフィヨルドに入るのがおすすめです!横断的に学ぶことで自分がどの分野に一番興味を持てるかを発見できるからです。わたしはフィヨルドをやり遂げたことで一番やりたいものを見つけることができました。

比較検討する際は、学習内容についてもぜひ注目してみてください。

あなたの背中を押したい

「でも、わたしは文系だし...」

「PCはパワポとかワードくらいしか使えないんだけど...」

大丈夫!だって、同じ状態だった私が卒業できたんだから。

筆者がいかにITリテラシーゼロだったか&それ以上に必要なものがあるということを、ITリテラシーゼロなアパレル出身女子がガチなオンラインプログラミングスクールに通ってみたに書いています。

最後に

最後まで読んでいただきありがとうございます!これを参考に少しでも一歩が踏み出せる人が増えたらいいなと思います。

P.S. 筆者がリリースしたサービスについては下記を御覧ください👇(フィヨルドをやり遂げたことで見つけた一番やりたいものについても記載しています。) aya-kyan.hatenablog.com

スキンケアアイテムの使用サイクル管理アプリ「Skinmate」を公開しました🎉

Skinmate(スキンメイト)のサービスページ
Skinmate(スキンメイト)

この度、スキンケアアイテムの使用サイクルを管理するアプリ「Skinmate(スキンメイト)」を公開しました!

skinmate.fly.dev

筆者の自己紹介は下記記事で一通りしているので割愛させていただきます。 興味があればぜひご覧ください。

aya-kyan.hatenablog.com

「Skinmate(スキンメイト)」について

概要

日ごろお使いのスキンケアアイテムを登録後、使い始めた日に「使用開始日」の登録、 使い切った日に「使用終了日」を登録するだけで下記のことが実現できます。

  • スキンケアアイテムがなくなる日を予測
  • 月に実質どのくらいのお金がスキンケアアイテムにかかっているかを自動算出

パソコン、スマホタブレット端末からもお使いいただけます。

こんな方におすすめ

日頃お使いのスキンケアアイテムについて、このように困ったことはないですか?

  • 「あの化粧水、まだあったっけ...」と出先で残量がわからなくなる
  • 「愛用している乳液、『使用法にそった使い方で1ヶ月』と公式サイトに書いてあるけど適切な量を使えているのかな...」
  • 使っている美容液の中身が見えなくていつ無くなるかわからない
  • 実質月にどのくらいスキンケアにお金を使っているのかわからない

このような悩みをお持ちの方におすすめです!

使い方

日ごろお使いのスキンケアアイテムを登録し、使用開始日と使用終了日の記録を行うだけ。 Skinmateが自動で使い切り予定日の計測と月々の消費金額を計算します。

Skinmateが使い切り予定日を自動で計測・予測
Skinmateが使い切り予定日を自動で計測・予測

記録した日付は後から閲覧・編集が可能です。

Skinmateが各アイテムの使用期間を記録している様子
Skinmateが各アイテムの使用期間を記録

月々の消費金額の計算は、単にスキンケアアイテムを使い始めた月を起点に加算という形ではありません。 月にアイテムを「どれだけ消費したのか」という視点で計算しています。 例えば、1本10,000円の美容液を60日で使っていた場合は、1ヶ月(30日)に5,000円分を消費している計算になるようなロジックにしています。

コンセプト

サービス名

Skinmate(スキンメイト)という名前には、このアプリのユーザーさんのお肌のお供という意味を込めました。

背景を少しお話しすると、実は先述した下記4点の悩みは私自身が持っていた悩みです。

  • 「あの化粧水、まだあったっけ...」と出先で残量がわからなくなる
  • 「愛用している乳液、『使用法にそった使い方で1ヶ月』と公式サイトに書いてあるけど適切な量を使えているのかな...」
  • 使っている美容液の中身が見えなくていつ無くなるかわからない
  • 実質月にどのくらいスキンケアにお金を使っているのかわからない

このアプリのユーザーさんにはこのような悩みから解放されてほしい! Skinmateをともにスキンケアをしていく友達のように思ってほしい!

そのような想いで、名前をつけました。

ロゴ

Skinmateのロゴはこちらです。

Skinmate(スキンメイト)のロゴ
Skinmate(スキンメイト)のロゴ

こちらのロゴは、下記の2つをイメージして合体させたようなものにしています。

  • 太陽
  • 化粧水をプッシュした際に出るミスト

先に挙げたような悩みから解放され、Skinmateのユーザーさんには太陽のように明るいスキンケア生活をしていただきたいという想いを込めました。

技術スタック

  • Ruby 3.1.3
  • Rails 7.0.4
  • Hotwire
  • Slim 4.1.0
  • Bootstrap 5.2.3
  • Sassc 2.4.0
  • Rubocop 1.50.2
  • Slim_lint 0.24.0
  • Eslint 8.39.0
  • Prettier 2.8.8
  • PostgreSQL
  • GitHub Actions
  • Fly.io

できるだけ費用を抑えた

独自ドメインを取ろうか迷ったのですが、長くこのサービスを育てていきたいのでできる限り費用は抑えたいと考えました。 独自ドメインでリリースすることで見た目はカッコ良くなるかもしれないけど、それは行けるところまでこのサービスを育て上げてからの話だと思いました。 Fly.ioにしたのも、無料枠を利用するためです。 私が通っているオンラインスクールフィヨルドブートキャンプでは実際にリリースしない人やリリースしてもしばらくしたらサービスを閉めてしまう人がいるみたいです。

初めてのHotwire

Hotwire自体初めてでしたが、Turboについては下記のようにとてもわかりやすいサイトがあったので助かりました。

はじめに|猫でもわかるHotwire入門 Turbo編

しかし、Rails7 × Stimulus についての情報が意外と薄く、実装するのにひと苦労しました。 フィヨルドブートキャンプ上でStimulusについて書いた日報をアップすると、メンターさんより「Stimulusは触ったことがないので参考になる!」という言葉をいただけました。

「自分は Stimulus を使ったことがないのですが、日々の日報で検証内容を読ませていただき、逆に勉強させてもらっています!ありがとうございます!」というコメントのスクリーンショット

このコメントをもらったのは、アップロードされた画像のプレビューをインタラクティブに表示する方法について解説したものでした。 近々、Stimulusについての記事もアップしたいと思っています。

TurboもStimulusも、私にとっては概念を理解するまで難しいものでした。 しかし、慣れるととても簡単にSPA風のアプリを作ることができてとてもいいと思います。 Vue.jsでSPAアプリを実装した時よりも個人的には理解しやすいし、コード量も少ないと感じました!

この取り組みを通して得たもの・今後何を目指すのか

冒頭で記載させていただいたこちらのブログでも述べているのですが、私は転職を目的としてプログラミングを勉強したわけではありません。

正直に言うと、最初は自分がとにかく楽しい/極めたい/一生これやりたい!と思うものを探したかったのです。 スタートアップ企業に長年いると"何でも屋さん"みたいになってしまって(これはあるあるだと思います)、自分で一つ自慢できるスキルのようなものがないのではないか?と課題を感じ始めました。 もちろん、「今いる会社がIT企業なのでITの知識を身につけたいから」という想いは嘘ではありません。

2年近くやってみて、どうだったのか。 無事、目標を見つけることができました!

それは、UI/UXデザイナーになることです!!!! コードを書くことは、もちろん楽しかったです。楽しくなければここまで続けてません。 しかし、このアプリを作る中でデザインについてのアドバイスをいただくうちに、ユーザーさんのことを考えてUI/UXを考えるの超楽しい!となりました。 色とかボタンの配置など今はなんとなく自分がいいと思ったものを実装しています。 しかし、自分なりの「このデザインにした理由」を述べられる人間になりたいです。

開発もひと段落したので今後は、デザインはもちろん人やユーザーにまつわることを勉強して最強のUI/UXを生み出せる人間を目指していきたいです。

さいごに

この自作サービスを持って、フィヨルドブートキャンプを卒業します!

チーム開発・自作サービス共に、技術的アドバイスでお世話になったkomagataさん、デザイン面で相談に乗っていただいたmachidaさん、 課題のレビューや、日々日報をチェックしつつ見守っていただいたメンターの皆さん、 日報やツイッターにて励ましの言葉をいただいた方々、 共にチーム開発をしていただいた生徒の皆さん、 全ての方へ感謝申し上げます。

ありがとうございます!

【fly.ioへデプロイ】nodeダウンロード時のエラー解消

fly deployにアプリをデプロイしようとしたらエラーが発生した。

 => ERROR [base 5/5] RUN curl -sL https://github.com/nodenv/node-build/archive/master.tar.gz | tar xz -C /tmp/ &&     /tmp/node-build-master/bin/node-build "18.16.0" /usr/local/node &&     rm -rf /tmp/node  354.3s
------                                                                                                                                                                                                                
 > [base 5/5] RUN curl -sL https://github.com/nodenv/node-build/archive/master.tar.gz | tar xz -C /tmp/ &&     /tmp/node-build-master/bin/node-build "18.16.0" /usr/local/node &&     rm -rf /tmp/node-build-master:  
#11 1.099 Downloading node-v18.16.0-linux-x64.tar.gz...
#11 1.100 -> https://nodejs.org/dist/v18.16.0/node-v18.16.0-linux-x64.tar.gz
#11 354.3 error: failed to download node-v18.16.0-linux-x64.tar.gz
#11 354.3 
#11 354.3 BUILD FAILED (Debian GNU/Linux 11 using node-build 4.9.120)
#11 354.3 
#11 354.3 Binary installation failed; try compiling from source with `--compile` flag
#11 354.3 
#11 354.3 Inspect or clean up the working tree at /tmp/node-build.20230824140728.14.s7oM6e
#11 354.3 Results logged to /tmp/node-build.20230824140728.14.log
#11 354.3 
#11 354.3 Last 10 log lines:
#11 354.3 /tmp/node-build.20230824140728.14.s7oM6e /rails
#11 354.3 curl: (18) transfer closed with 34635278 bytes remaining to read
------
Error: failed to fetch an image or build from source: error building: executor failed running [/bin/sh -c curl -sL https://github.com/nodenv/node-build/archive/master.tar.gz | tar xz -C /tmp/ &&     /tmp/node-build-master/bin/node-build "${NODE_VERSION}" /usr/local/node &&     rm -rf /tmp/node-build-master]: exit code: 1

error: failed to download node-v18.16.0-linux-x64.tar.gzとのこと。 nodeダウンロード時にエラーが発生しているようだ。

もしかしてバージョンがまた更新されたのかも、と思いバージョンを確認してみる。

> nvm ls-remote
       v18.17.1   (Latest LTS: Hydrogen)

当時安定版だったv18.16.0を使用していたが、安定版がv18.17.1に変更されてる。

v18.17.1に更新する。

> nvm install v18.17.1

nvm lsできちんとインストールされたか確認。

> nvm ls
       v16.13.0
       v16.14.2
        v17.9.0
       v18.16.0
->     v18.17.1
         system
default -> node (-> v18.17.1)
iojs -> N/A (default)
unstable -> N/A (default)
node -> stable (-> v18.17.1) (default)
stable -> 18.17 (-> v18.17.1) (default)
lts/* -> lts/hydrogen (-> v18.17.1)
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.12 (-> N/A)
lts/fermium -> v14.21.3 (-> N/A)
lts/gallium -> v16.20.2 (-> N/A)
lts/hydrogen -> v18.17.1

下記のファイル内の記載を18.16.0から18.17.1に変更。

.node-version
.nvmrc
Dockerfile

これでfly deployすると無事にデプロイできた。

ちなみにここからも安定版の確認とダウンロードができます。 nodejs.org

ITリテラシーゼロなアパレル出身女子がガチなオンラインプログラミングスクールに通ってみた

こんにちは。

aya-kyanです。

私は、現在進行形でオンラインプログラミングスクール「FJORD BOOT CAMP(フィヨルドブートキャンプ)」に通っています。

bootcamp.fjord.jp

まだ卒業はしていないのですが、現時点で既に通ってよかった!!!!!!!!!と心から思っているので、本日はそのお話をしたいと思います。 ちなみに、現在の自分の進捗としてはチーム開発を終え、残すは自作サービスを作るのみという最終段階にいます。

対象となる読者

フィヨルドブートキャンプ(以下、フィヨルド)について、下記のような不安を感じている方がいたらぜひ本記事を読んでほしいです。

  • 興味はあるけど、ITの知識が皆無で不安な方
  • 通いたいけど、プログラミングスクールの中でも大変だという噂を聞いて覚悟が決まらない方
  • IT知識ゼロの人間が働きながら取り組んだら、具体的にどのくらいお金・時間がかかるのか知りたい方
  • 通いたいけど、金銭的不安もしくは勉強時間についての不安から、仕事を辞めて通うか、働きながら通おうか迷っている方
  • IT企業にいるのでプログラミングの知識があって損はないけど実際に仕事で使う予定はない。その程度でも大丈夫かな?と疑問に思っている方

上記はフィヨルドに通い始める前に自分が思っていたことです。 私の場合、会社の福利厚生で通い始めたので仕事を辞めて通おうとまでは思っていませんでしたが、「働きながらでも最後まで取り組めるだろうか?」「福利厚生を利用せず、自腹で他のスクールに通った方がいいのでは?」と考えたこともありました。

当時、検討するためにネットでフィヨルドの評判を探すと

  • 働きながら通っている人は少ない
  • Progateやドットインストールなど他媒体で事前知識をつける、もしくは並行で勉強する必要がある

など、プログラミング未経験者やITとは無関係な業界出身者にとってはとても不安な評判がありました。

「私は会社辞める気ないし...」

「働きながら通うつもりだから他のものと並行して勉強しなきゃいけないとなると厳しい...」

このように思いました。 私と同じようにIT業界未経験な知識ゼロで、働きながら通っている人のブログないかな...?!と思い調べたのですが当時は見つからず...。 あれから1.5年ほど経過しているので、今探したらもしかしたら他の生徒さんが書いてくれているかもしれません。 ただ、「私も異なる分野の人にフィヨルドに興味を持ってもらえるチャンスを作りたい!」と思い、書いてみることにしました。

IT知識ゼロの女がフィヨルドに通ったらどうなるのか。

今、通おうか悩んでいるそこのあなたの背中を押せたらこの上なく嬉しいです。

「ITリテラシーゼロなアパレル出身女子」とは

興味ない人もいると思いますが、ITに触れてこなかった文系女子でも大丈夫ということを伝えたいので経歴を簡単に書いておきます。こんなに普通の人でもフィヨルドに通えるんだ!と思ってもらえれば幸いです!

経歴

  • 埼玉県内の私立文系大学へ進学し、4年で卒業
  • 某アパレル企業に新卒で就職し、店舗勤務を1.5年した後に退職
  • 1社目を退職後すぐに、株式会社Catallaxyへ就職(〜現在)

フィヨルドに通うことになった背景

  • IT企業である株式会社Catallaxyに入社してから、自分のITリテラシーの低さに絶望
  • エンジニアが何を話しているのか、全く理解できない
  • プロダクトの改善要望を上げたり、エラーが発生したときの報告、プロダクトについて質問などをするので、エンジニアとの接触は皆無ではなかった
  • 彼らが何を話しているのか、何をしているのか知りたいと思った
  • 弊社に来ているインターン生がフィヨルドで学んでから入社するという制度があった
  • 弊社代表にITの知識を入れるために何かのスクールに通おうか迷っていることを相談したらフィヨルドを福利厚生で利用させてもらえることになった

ざっとこんな感じです。通い始めた理由は、簡単に言うと「エンジニアとコミュニケーションを取れるようになりたい」という理由です。私のITリテラシーがいかに皆無だったのかは、後述します。

「ITの知識がゼロ」でも問題なし?

「ITの知識がゼロ」とはどのくらいのことを言っているのか

まず、「ITの知識が無くても通えるよ!」ということを伝えるために、いかに私のITリテラシーが低かったかを説明したいと思います。

私は先述した通り、文系大学出身かつ新卒で某アパレル企業に就職し店舗勤務をしていたので、ITに関する知識など皆無でした。 どのくらいかというと、ギリExcelを使えるか?(使えないかも...)レベル。 PCとのふれあい度は、そんなに深くありません。 大学でレポートを書く際や、プレゼンテーションを作成する際に使っていた程度です。 恥ずかしながら、社会人2年目の時に初めてコピペのショートカットを知って感動していました。

このような低い次元で生きていました。

ITの知識がゼロでも◯◯があればフィヨルドで生きていける

ITの知識がゼロでも、チーム開発まで無事に生き残ることができました。

ただし、やっていて思ったのが、ある二つのものがないととても厳しいと思いました。

ズバリ、下記です!

  • 粘り強さ
  • 調べる力

プログラミングを勉強していて、わからないことが無限に出てきます。

例えば、

  • 一度本で勉強しても一発で全てを覚えられないので、思い出すために調べる
  • プログラムがエラーを吐いたときに、その原因を解明するために調査する
  • 勉強していて理解できないものが出てくるので、理解できるまでネットを漁る/試しにコードを書く

全て、粘り強さと調べる力が必要ですね。 もちろん、フィヨルドにはメンターと呼ばれる講師的な方達が在籍しており、その方達に質問をすることもできます。 質問する手段としては、フィヨルドで使っているアプリ内の「Q&A」という掲示板的なところか、discordでのメッセージ投下/ボイスチャットがあります。 「Q&A」やdiscordのメッセージを投稿するとメンター陣だけでなく、他の受講生から助言をもらうこともできます。

ただ、質問するには現在の自分の状況を言葉にしなくてはいけません。 人間は、自分の中で理解できていないことを言葉にすることはできませんよね。 質問するためにも、事前に調査して現在の発生している問題を理解するという作業が必要です。 そのためにも、粘り強く調べるということは欠かせません。

ITの知識ゼロ人間が働きながら卒業するには

どのくらいの期間で卒業できる?

結論を先に言うと、働きながら卒業するには約2年の月日がかかると思います。あくまでも、私の場合ですが...。具体的に詳細を説明します。

フィヨルドのプラクティスをざっくり大きく分けると3つあると思っています。

  1. 基礎学習フェーズ
  2. チーム開発をするフェーズ
  3. 自作サービスを作るフェーズ

私の場合は、このくらいの期間で各フェーズに取り組んでいます。(自作サービスはこれから作ります。)

  1. 基礎学習フェーズ(2021/6/24~2022/8/23 1.2年)
  2. チーム開発をするフェーズ(2022/8/24~2022/1/13 4.2ヶ月)
  3. 自作サービスを作るフェーズ(これから着手)

基礎学習フェーズが長い!笑

チーム開発をするフェーズについては4.2ヶ月と書きましたが、ずっとチーム開発をしていた訳ではないので、厳密にいうと3ヶ月くらいな気がしています。なぜかというと、大きめなissueを一つ割り当ててもらったのですが、その仕様固めに1ヶ月ほど時間がかかった感じです。と言っても、1ヶ月間ずっと仕様をネリネリしていた訳ではなく、返事を待っている時間が長かったです。チーム開発のメンターさんは2人しかおらず、多くのissueの面倒を見ているため返事を返すのに時間がかかってしまうようです。また、他のissueの仕様固め待ちになってしまうこともありました。1ヶ月に約3万(30日で割ると一日約1000円)がかかっているので、少しでも勿体無いと思う方はdiscordでメンターさんに返事を急かしましょう。後から聞いたのですが、フィヨルドでは急かした方のメッセージを優先して返事を返しているみたいです。(私は最初この仕組み?を知らず、順番に返してくれているのだと思い、返事をずっと待ってしまっていました...。)この待ち時間の間に、自作サービスの構想や設計を固めていました。

自作サービスは大体、半年くらいで作れたらいいなと思っています。(余裕を持って言ってます。本当は3ヶ月くらいで作ってしまいたい!)幸い、仕様固めはチーム開発をしながら進めていたので、すぐに制作に着手できる状態ではあります。

ちなみに、チーム開発に入ると毎週水曜日に振り返りMTGというものがあります。ここに初めて出席した際に「エンジニアの仕事を理解したいという気持ちでここまできた人はaya-kyanさんが初めてかもしれない」と言われました。つまり、「IT企業にいるのでプログラミングの知識があって損はないけど実際に仕事で使う予定はない」という方には、結構厳しい道のりかもしれません。

どのくらいの勉強時間が必要?

現在の私の進捗を下記に記載します。

  • コース Railsプログラマー
  • 学習開始日 2021年06月24日
  • 合計学習時間 1164.0時間
  • 修了プラクティス 86/90(2023年1月18日時点)

現在は2023年1月なので、約1.5年が経過しています。 学習時間は1164時間なので、これを1.5年で割ると1ヶ月に77.6時間、1週間で19.4時間。 単純計算で1日に2.8時間ほど勉強していることになりますね。

私のフィヨルドに取り組むルーティンは、平日の仕事終わりに2~4時間、土曜日は4~7時間ほど勉強し、日曜日はお休みするようにしていました。 もちろん毎週土日が空いている訳でもなかったので、取り組めていない土日もありました。 その場合は、翌週の日曜日も取り組むなどして調整していました。 日頃勉強する習慣がない人が急に始めるには結構な勉強量ですよね。

どのくらいお金がかかる?

フィヨルドは、月額払いです。1ヶ月、29,800円です。これを、先ほど紹介した働きながら勉強した場合の勉強期間に掛け算をして計算をしてみましょう。

  1. 基礎学習フェーズ(2021/6/24~2022/8/23 14ヶ月 x 29,800 = 417,200円)
  2. チーム開発をするフェーズ(2022/8/24~2022/1/13 4ヶ月 x 29,800 = 119,200円)
  3. 自作サービスを作るフェーズ(これから着手 多めに見て6ヶ月 x 29,800 = 178,800円)

合計 715,200円

こんな感じでしょうか。額面にすると結構な額ですね。昨年の9月末まで会社の福利厚生で通わせてもらっていたのですが、感謝しかありません。ありがとう弊社。(*現在この福利厚生は廃止されています。)

さて、これが高いか安いかという話ですが、正直に言うと私にはわかりません。他のプログラミングスクールに通っていたのであれば比較ができるのですが、フィヨルドにしか通ってませんしね。ただ、言えるのはフィヨルドを卒業できれば現場の即戦力に近い存在になれるんだろうなということです。働きながら通う場合、期間が伸びて支払うお金が多くなってしまうのでなんとも言えません。しかし、仕事を辞めてフィヨルドに通うのであれば1年ほどで卒業できるのではないでしょうか?他の方の記事を拝見すると9~10ヶ月で卒業してる人がいらっしゃいました。現場の即戦力になれるスキルをこの価格でゲットできるのであれば、大満足できると思います。(私の場合、具体的にどのように成長できたかは後述します。)仕事を辞めてスクールに通うことを決めているのであれば、自信を持っておすすめできます。

まとめると、

  • 働きながら通って、合計約70万のお金を払うか
  • 仕事を辞めて通って、合計約30万のお金を払うか

のどちらかかなと思います。もしかすると、仕事をやめて通う場合は30万円を切るかもしれないです。

フィヨルドは具体的に何が大変なのか?

働きながら通っている間に大変だなと感じた点は下記です。

自分を律する精神が必要

ゲームしたい!遊びたい!と思っても、自分を制御してPCに向かう必要があります。誘惑に勝てない人は厳しいですね。私は、毎日のルーティーンに組み込むことで、体に勉強することを覚えさせました。取り組み内容は楽しいものだったので、受験勉強のように勉強したくないとか、現実逃避したい、とは思いませんでした。それよりかは、他のやりたいことに使う時間を削らなければいけなかったのが辛かったです。

わからないものをすぐに聞けないのが辛い

調べても調べてもどうしてもわからないものがあります。これが一番辛かったです。メンター陣は、聞いても明確に答えを教えてくれません。基本的にはヒント的なものを教えてくれるだけです。ヒントを聞いてもわからないときは本当に辛いです。手取り足取り教えてもらえないと辛いという方はやっていけないと思います。

教材が懇切丁寧ではない

各プラクティスごとに、「この本を読んでね!」「このサイトを読んでから取り組むように!」と書いてあります。大抵、予備知識が入っている前提で書かれており、「これも必要だったんかい!」「え?そうだったの?(知らんがな)」となることが多々ありました。事前に学んだことならまだしも、全く初めて知る情報も省略されている場合があります。この面でも、手取り足取り教えてもらえないと嫌な方にとってはきついですね。こういう点で、Progateやドットインストールなど他媒体で事前知識をつける、もしくは並行で勉強した方がいいというのは言えてるかも。しかし、ITリテラシーゼロな私でも大丈夫だったので、他媒体で勉強してなくても進めることは可能です。

働きながら通うと期間が超長くなるので金銭的に辛い

働きながら取り組んでいるのでそれはそうなのですが、超時間がかかる!!!となると月額請求だからお金もそれだけかかる!!!!通うか迷っている時に見つけた「働きながら取り組んでいる人は少ない」という評判は、あながち間違っていないなと思いました。ある程度まとまったお金があるのであれば、仕事をやめて短期間で卒業してしまった方が安く済みます。可能な限り早く転職したいけどまとまったお金が手元にない方は、「2年かかるのか。長いし金額も高い...」となってしまうかも。

◯◯があれば大変さを乗り越えられる

逆に、下記のものを持っていればあなたは上記で記載したフィヨルドの大変さを乗り越えられます。

  • 自律心がある
  • 自学ができる

ただでさえ無い時間を生み出すためにも自律心は必要です。ゲームをやってしまって時間を溶かすなんてことをしないような自律心が必要ですよね。あとは勉強時間を少しでも確保するために早起きをするとか。(私は夜型なので早起きはできませんでした。)働きながら通う場合は上記で具体的にお見せした通り、お金も必要です。

学習内容は難しい?

簡単でもないけど難しすぎでもない

終わってみると、思っていたよりもそんなに難しいものはなかったように思います。私が身構えすぎたのかもしれませんが。笑

難しいというよりかは、こなすプラクティス量が多くて大変という表現の方が正しい気がします。

プログラミング言語は、個人的には英語を理解するのと同じような感覚でした。焦らず、一つずつわからないことを潰して着実に進めていけば問題ありません。「何がわからないのかがわからない」という状態は避けましょう。

多くの人が難しいと言うプラクティス

フィヨルド内でよく聞いたのは「lsコマンドのプラクティスを乗り越えられたら大丈夫」という噂でした。私は他のプラクティスの方が難しいと感じたのですが、多くの人はこの「lsコマンド」のプラクティスを苦手としている方が多いみたいです。

「例えば、このようなプラクティスがあります」という話にもなると思うので、「lsコマンド」についてプログラミング未経験者向けに少し説明します。エンジニアがよく使う黒い画面(ターミナル)があるのですが、そこに「ls」と打ちこんで使うものです。lsコマンドは、フォルダの中身を見ることができるコマンドです。コマンドとは、ターミナルに指示や命令をするために使うものと思ってもらえれば大丈夫です。使い方は、中身を見たいフォルダを指定して、「ls」と打ち込むだけ。すると、フォルダ内に入っているファイル名が一覧で画面上に表示されます。普段、皆さんがPC上で下記画像のようにフォルダの中身を確認することができていると思います。「lsコマンド」は、これと同じことができると考えていただくと、わかりやすいかもしれません。

lsコマンドのプラクティスとは、この「lsコマンド」を自分でコードを書いて作成するという内容です。

これが難しいという声が多く上がったので2021年9月には1つのプラクティスから、5つに分けられていました。これの何がいいかと言うと、5つに分けることによって合計5回も課題を提出する機会が設けられました。これにより、メンターからのアドバイスをこまめにもらえるようになりました。ですので、この点は解消されたと言ってもいいと思います。(かなり楽になったのでは?)

個人的には、このlsコマンドよりもボウリングスコアを計算するプログラムを作成するプラクティスの方が難しかったんですけどね。笑

フィヨルドに通ったら人生変わった

最後に、Before/Afterを記載します。

先述したように、私はエンジニアになって転職することを目的として通い始めた訳ではありません。ですので、そのようなbefore/afterを見たかった方のご期待には添えません!(ごめんなさい。)しかし、卒業する頃にはエンジニアとして転職活動できるレベルまでになっているだろうなと確信できます。むしろ、エンジニアになりたい方はフィヨルドに通うべきだと思います。私はまだ今の会社でやりたいことがあるため、今のところは転職するつもりはありません。

フィヨルドに通う前

  • ITの知識が皆無
  • アナログ作業をしていても、何も感じない
  • 営業の仕事をしていた

フィヨルドに通った後

  • SQLが書けるようになり、分析業務を任せてもらえるようになった
  • JavaScriptが書けるようになり、Google Apps Script(通称: GAS)が書けるようになった
  • GASが書けるようになったことで、スプレッドシートの更新の自動化や、googleフォームからslackへの通知を自動化できるようになった
  • プログラミングを一度学んでおくことで、他の言語を学ぶ壁が低くなった。それにより、Visual Basic for Applications(通称: VBA)を即興で勉強して実際に世に出すExcelファイル(現在在籍している会社のシステムへデータをインポートするためのExcel)のロジックを作成できた
  • エラー内容をエンジニアへ伝えるのが上手くなった(どの情報を伝えればいいか分かるようになった)
  • 何かアナログな作業が発生した際、「この作業、自動化できないかな?」と考えるようになった
  • 分析業務やちょっとした自動化ができるようになったことで、「営業」という職種の垣根に関係なく社内で活躍できるようになった
  • 営業からは離れ、現在はマーケティング、UI/UXデザイン業務に関わっている

このように、何もできなかった人間でしたが、本当に色々なことができるようになりました。活躍できる場が広がったことで視野が広くなったのも大きな収穫です。これはベンチャー企業の特色かもしれませんが、できることが増えたことにより任せてもらえる仕事の種類が変わりました。そして、職種も変わりました。これは人生が変わったと言ってもいいのではないでしょうか?フィヨルドを卒業したら、次は本格的にデザインの勉強をするつもりです!

最後に

フィヨルドに通っていなかったら、今頃まだ営業職をしてアナログ脳なまま生きていたと思います。今の自分がいるのは、フィヨルドのおかげです!私は「エンジニアと上手くコミュニケーションを取れるようになりたい」という気持ちで始めましたが、エンジニアにならなくてもこんなに世界が広がるんだと感動しています。個人的には、エンジニアになるつもりがない人にもフィヨルドをおすすめしたいです。

まだ自作サービスというボスが残っていますが、このまま卒業まで突っ走りたいと思います!